diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm index 00ad094d46ee..5dfad30231db 100644 --- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm +++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm @@ -383,7 +383,7 @@ "gt" = ( /obj/effect/turf_decal/bot_white, /obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted, +/obj/item/gun/ballistic/revolver/grenadelauncher, /turf/open/floor/iron/dark/airless, /area/shuttle/caravan/freighter3) "gv" = ( diff --git a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm b/_maps/RandomRuins/SpaceRuins/originalcontent.dmm deleted file mode 100644 index 5679fcba3cfd..000000000000 --- a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm +++ /dev/null @@ -1,2942 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/fluff/paper/corner, -/turf/template_noop, -/area/template_noop) -"ac" = ( -/obj/structure/fluff/paper, -/turf/template_noop, -/area/template_noop) -"ad" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"ae" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"af" = ( -/turf/closed/indestructible/paper, -/area/ruin/powered) -"ag" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/turf/template_noop, -/area/template_noop) -"ah" = ( -/obj/structure/fluff/paper/corner, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"ai" = ( -/obj/structure/fluff/paper{ - dir = 6 - }, -/turf/template_noop, -/area/template_noop) -"aj" = ( -/obj/machinery/door/airlock/freezer{ - name = "airlock"; - opacity = 0 - }, -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ak" = ( -/obj/structure/fluff/paper{ - dir = 9 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"al" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"am" = ( -/obj/structure/fluff/paper{ - dir = 5 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"an" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ao" = ( -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ap" = ( -/turf/open/indestructible/paper, -/area/ruin/powered) -"aq" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ar" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"as" = ( -/obj/item/paper/crumpled/ruins/originalcontent, -/turf/open/indestructible/paper, -/area/ruin/powered) -"at" = ( -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"au" = ( -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"av" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aw" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"ax" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ay" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"az" = ( -/obj/structure/fluff/paper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aA" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aB" = ( -/obj/structure/fluff/paper/stack, -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aC" = ( -/obj/structure/fluff/paper{ - dir = 5 - }, -/obj/structure/fluff/paper{ - dir = 9 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aD" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper/corner, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aE" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aF" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/barricade/wooden, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aG" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/barricade/wooden, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aH" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 5 - }, -/obj/structure/barricade/wooden, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aI" = ( -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aJ" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/fluff/paper/corner, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aK" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aL" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aM" = ( -/obj/structure/fluff/paper/stack{ - dir = 10 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aN" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aO" = ( -/obj/structure/fluff/paper, -/mob/living/basic/stickman/dog, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aP" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aQ" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aR" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aS" = ( -/obj/structure/fluff/paper/corner, -/mob/living/basic/stickman/dog, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aT" = ( -/obj/structure/fluff/paper{ - dir = 6 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aU" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/fluff/paper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aV" = ( -/obj/structure/fluff/paper{ - dir = 6 - }, -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aW" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/stack, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aX" = ( -/obj/structure/fluff/paper/stack, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aY" = ( -/obj/structure/fluff/paper/corner, -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"aZ" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ba" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/mob/living/basic/stickman/dog, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bb" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bc" = ( -/obj/structure/fluff/paper{ - dir = 9 - }, -/turf/template_noop, -/area/template_noop) -"bd" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"be" = ( -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"bf" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/stack{ - dir = 9 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bg" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/item/toy/crayon/yellow, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bh" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/item/toy/crayon/red, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bi" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/corner, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bj" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bk" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bl" = ( -/obj/structure/fluff/paper/stack{ - dir = 9 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bm" = ( -/obj/structure/fluff/paper, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bn" = ( -/obj/structure/fluff/paper{ - dir = 9 - }, -/obj/structure/fluff/paper{ - dir = 10 - }, -/turf/template_noop, -/area/template_noop) -"bo" = ( -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"bp" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/item/toy/crayon/rainbow, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bq" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"br" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bs" = ( -/obj/item/toy/crayon/spraycan, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bt" = ( -/obj/item/storage/crayons, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bu" = ( -/mob/living/basic/stickman/ranged, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bv" = ( -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bw" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/template_noop, -/area/template_noop) -"bx" = ( -/obj/structure/fluff/paper{ - dir = 5 - }, -/turf/template_noop, -/area/template_noop) -"by" = ( -/obj/structure/fluff/paper/corner, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bz" = ( -/obj/structure/fluff/paper/stack{ - dir = 9 - }, -/obj/structure/fluff/paper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bA" = ( -/obj/item/toner, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bB" = ( -/obj/structure/easel, -/obj/item/paper/pamphlet/ruin/originalcontent/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bC" = ( -/obj/item/toy/crayon/yellow, -/obj/structure/fluff/paper{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bD" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bE" = ( -/mob/living/basic/stickman/dog, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bF" = ( -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/obj/structure/fluff/paper/stack, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bG" = ( -/obj/item/toy/crayon/blue, -/mob/living/basic/stickman/ranged, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bH" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/item/toy/crayon/yellow, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bI" = ( -/obj/structure/fluff/paper{ - dir = 9 - }, -/obj/structure/closet/crate/bin, -/obj/item/paper/crumpled/ruins/originalcontent, -/obj/item/paper/crumpled/ruins/originalcontent, -/obj/item/paper/crumpled/ruins/originalcontent, -/obj/item/gps/spaceruin, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bJ" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/easel, -/obj/item/paper/pamphlet/ruin/originalcontent/treeside, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bK" = ( -/obj/structure/fluff/paper{ - dir = 5 - }, -/obj/structure/table/wood, -/obj/item/storage/crayons, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bL" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/stack{ - dir = 6 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bM" = ( -/obj/item/toy/crayon/purple, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bN" = ( -/obj/structure/fluff/paper/corner, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bO" = ( -/obj/machinery/door/airlock/freezer{ - name = "airlock"; - opacity = 0 - }, -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bP" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/corner{ - dir = 8 - }, -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bQ" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/obj/structure/fluff/paper/stack, -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bR" = ( -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bS" = ( -/obj/structure/fluff/paper/stack{ - dir = 1 - }, -/obj/structure/fluff/paper/stack, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bT" = ( -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/obj/structure/fluff/paper/stack{ - dir = 6 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bU" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bV" = ( -/obj/item/toy/crayon/yellow, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bW" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/easel, -/obj/item/paper/pamphlet/ruin/originalcontent/pennywise, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bX" = ( -/obj/item/toy/crayon/blue, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bY" = ( -/obj/item/toy/crayon/red, -/turf/open/indestructible/paper, -/area/ruin/powered) -"bZ" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/bed, -/obj/item/bedsheet/rainbow, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ca" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/obj/structure/table/wood, -/obj/item/storage/crayons, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cb" = ( -/obj/structure/fluff/paper/stack{ - dir = 9 - }, -/obj/item/toy/crayon/purple, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cc" = ( -/mob/living/simple_animal/hostile/boss/paper_wizard, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cd" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/item/toy/crayon/rainbow, -/obj/item/toy/crayon/spraycan, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ce" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/fluff/paper/corner{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cf" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper/stack, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cg" = ( -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/item/paper_bin, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ch" = ( -/obj/structure/fluff/paper, -/obj/item/paper/crumpled/ruins/originalcontent, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ci" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper/corner{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cj" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/mob/living/basic/stickman, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ck" = ( -/obj/structure/fluff/paper{ - dir = 6 - }, -/obj/structure/fluff/paper{ - dir = 5 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cl" = ( -/obj/structure/fluff/paper/corner, -/obj/structure/fluff/paper/stack{ - dir = 4 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cm" = ( -/obj/structure/fluff/paper, -/obj/structure/table/wood, -/obj/item/storage/crayons, -/obj/item/storage/crayons, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cn" = ( -/obj/structure/fluff/paper{ - dir = 6 - }, -/obj/structure/table/wood, -/obj/item/canvas/twentythree_twentythree, -/obj/item/canvas, -/obj/item/canvas/nineteen_nineteen, -/turf/open/indestructible/paper, -/area/ruin/powered) -"co" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper/stack{ - dir = 9 - }, -/obj/item/toy/crayon/blue, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cp" = ( -/obj/structure/fluff/paper{ - dir = 10 - }, -/obj/machinery/photocopier, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cq" = ( -/obj/structure/fluff/paper, -/obj/structure/table/wood, -/obj/item/storage/crayons, -/obj/item/pen/fourcolor, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cr" = ( -/obj/structure/fluff/paper, -/obj/structure/easel, -/obj/item/paper/pamphlet/ruin/originalcontent/yelling, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cs" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper{ - dir = 1 - }, -/mob/living/basic/stickman/dog, -/turf/open/indestructible/paper, -/area/ruin/powered) -"ct" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cu" = ( -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper/stack{ - dir = 6 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cv" = ( -/obj/structure/fluff/paper, -/obj/structure/fluff/paper/stack{ - dir = 6 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"cw" = ( -/obj/structure/fluff/paper{ - dir = 1 - }, -/mob/living/basic/stickman/ranged, -/turf/open/indestructible/paper, -/area/ruin/powered) -"wr" = ( -/obj/machinery/door/airlock/freezer{ - name = "airlock"; - opacity = 0 - }, -/obj/structure/fluff/paper{ - dir = 8 - }, -/obj/structure/fluff/paper{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/indestructible/paper, -/area/ruin/powered) -"Ns" = ( -/obj/item/paper/secretrecipe, -/turf/open/indestructible/paper, -/area/ruin/powered) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ae -bw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -af -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ai -af -af -bx -bw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ae -ai -af -af -af -af -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -bd -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ai -af -af -af -af -af -af -af -bx -ae -ae -bw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ae -ae -ai -af -af -af -af -af -af -af -af -af -af -af -bx -ae -ae -ae -ae -ae -bw -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -bx -ae -bw -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ae -ai -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -bx -ae -ae -ae -ae -bw -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -ak -ar -ar -ay -af -ak -ar -ar -ar -ar -ar -ar -ar -ar -ar -ay -af -af -af -af -af -af -af -bx -ae -ae -bw -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ai -af -af -af -af -af -af -ak -aY -aq -aq -bk -bp -aY -aq -aq -aq -aq -bL -aq -bU -ax -ap -ch -af -af -af -af -af -af -af -af -af -af -bd -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -al -az -af -af -am -bq -aT -af -af -af -af -af -af -af -am -aq -ci -af -af -af -af -af -af -af -af -af -af -bd -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -aW -az -af -af -af -af -af -af -af -af -af -af -af -af -af -af -aR -ay -af -af -af -af -af -af -bc -aw -aw -be -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -ab -ae -ai -af -af -af -af -af -af -af -al -az -af -af -af -af -ak -ar -ar -ar -ay -af -af -af -af -af -cj -co -af -af -af -bc -aw -aw -be -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -af -af -am -aZ -ay -af -af -af -al -ap -ap -ap -aA -ar -ay -af -af -af -al -az -af -af -af -bd -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -ab -ae -ai -af -af -af -af -af -af -af -af -af -af -al -az -af -af -ak -ao -ap -ap -ap -ap -ap -az -af -af -af -am -aZ -ay -af -af -bd -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -ac -af -af -af -af -af -af -ak -ay -af -af -af -af -ba -aA -bg -ar -ao -bl -ap -bu -ap -ap -aM -az -af -af -af -af -al -az -af -af -bd -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -ac -af -af -af -af -af -af -al -az -af -af -af -af -am -aq -ax -ap -ap -ap -ap -ap -bA -bE -ap -aA -ar -ay -af -af -al -az -af -af -bd -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -ab -ai -af -af -af -af -af -af -al -aA -ay -af -af -af -af -af -al -bl -ap -bt -ap -ap -ap -ap -ap -ap -ap -az -af -af -am -aZ -ay -af -bx -ae -bw -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -ac -af -af -af -af -af -aC -aE -ao -aI -az -af -af -af -af -af -am -ax -ap -ap -ap -ap -bB -ap -ap -ap -bu -az -af -af -af -al -az -af -af -af -bd -aa -aa -aa -aa -"} -(22,1,1) = {" -ab -ae -ai -af -af -af -af -af -af -am -aq -aJ -aN -aP -aE -ar -ay -af -af -am -ax -bu -by -aq -aq -bF -ap -ap -bt -az -af -af -af -al -az -af -af -af -bd -aa -aa -aa -aa -"} -(23,1,1) = {" -ac -af -af -af -af -af -af -af -af -af -af -aK -af -af -al -aX -az -af -af -af -am -ax -az -af -af -al -as -bR -ap -az -af -af -af -al -cv -af -af -af -bd -aa -aa -aa -aa -"} -(24,1,1) = {" -ac -af -af -af -af -af -af -af -af -af -af -aL -ay -af -am -aq -bb -ar -ay -af -af -al -bz -af -af -al -bM -ap -ap -aA -ay -af -af -bi -aT -af -af -af -bd -aa -aa -aa -aa -"} -(25,1,1) = {" -ac -af -af -af -af -af -af -af -af -af -af -al -az -af -af -af -al -ap -az -af -af -al -aA -ar -bC -ao -ap -ap -bV -ap -az -af -af -cs -af -af -af -af -bd -aa -aa -aa -aa -"} -(26,1,1) = {" -ac -af -af -af -ak -ar -ar -ay -af -af -af -al -aO -af -af -af -am -bf -aZ -ay -af -al -ap -ap -ap -bG -ap -bM -ap -ap -az -af -af -ct -af -af -af -af -bd -aa -aa -aa -aa -"} -(27,1,1) = {" -ac -af -af -af -al -ap -ap -az -af -af -af -am -aN -aQ -af -af -af -af -bh -az -af -al -ap -aI -by -bH -bN -aq -aq -ax -az -af -af -ct -af -af -af -af -bd -aa -aa -aa -aa -"} -(28,1,1) = {" -ac -af -af -af -al -as -ap -az -af -af -af -af -af -aR -ay -af -af -af -al -bm -af -al -ap -ap -az -af -bO -af -af -am -aN -aQ -af -aR -ay -af -af -af -bd -aa -aa -aa -aa -"} -(29,1,1) = {" -ac -af -af -af -al -ap -ap -aA -ay -af -af -af -af -am -aU -af -af -af -bi -aT -af -al -aX -ap -az -af -bP -ay -af -af -af -ck -af -am -ci -af -af -af -bd -aa -aa -aa -aa -"} -(30,1,1) = {" -ac -af -af -ak -ao -ap -ap -aB -aD -aF -aG -af -af -af -aK -af -af -ak -bj -af -af -al -ap -ap -az -af -al -Ns -bW -ca -af -af -af -af -aR -ay -af -af -bd -aa -aa -aa -aa -"} -(31,1,1) = {" -ac -af -af -al -ap -ap -ap -ap -az -af -aH -an -an -an -aV -af -af -al -az -af -af -am -aq -aq -aT -af -bQ -ap -ap -aA -cf -ar -cp -af -al -az -af -af -bd -aa -aa -aa -aa -"} -(32,1,1) = {" -ad -ag -af -al -ap -at -ap -ap -az -af -af -af -af -af -af -af -af -al -az -af -af -af -af -af -af -af -al -bS -bX -ap -bR -ap -cq -af -am -aZ -ay -af -bd -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -ac -af -al -ap -ap -ap -ap -aA -ay -af -af -af -af -af -af -af -al -az -af -af -af -af -af -af -bI -ao -bM -bt -cb -ap -ap -cr -af -af -al -az -af -bx -bw -aa -aa -aa -"} -(34,1,1) = {" -aa -ac -af -al -ap -ap -ap -ap -ap -aA -ar -ay -af -af -af -af -af -am -bb -ay -af -af -af -af -af -bJ -bA -ap -bY -cc -ap -cl -aT -af -af -al -az -af -af -bd -aa -aa -aa -"} -(35,1,1) = {" -aa -ac -af -am -aq -au -ap -ap -ap -ap -ap -az -af -af -af -af -af -af -al -az -af -af -af -af -af -bK -aq -bT -ap -ap -ap -cm -af -af -ak -ao -az -af -af -bd -aa -aa -aa -"} -(36,1,1) = {" -aa -ac -af -af -af -al -ap -ap -at -as -ap -aA -ay -af -af -af -af -af -am -bb -br -ay -af -af -af -af -af -am -bZ -cd -cg -cn -af -af -al -ap -az -af -af -bd -aa -aa -aa -"} -(37,1,1) = {" -aa -ah -aj -an -wr -av -ap -ap -ap -ap -ap -ap -aA -ar -ay -af -af -af -af -al -bs -az -af -af -af -af -af -af -af -af -af -af -af -af -cw -ap -az -af -af -bd -aa -aa -aa -"} -(38,1,1) = {" -aa -ac -af -af -af -am -ax -ap -ap -ap -ap -aM -ap -ap -az -af -af -af -af -am -aq -bv -aE -ar -ay -af -af -af -af -af -af -af -ak -cu -aY -aq -aT -af -af -bd -aa -aa -aa -"} -(39,1,1) = {" -aa -ad -ag -af -af -af -am -aq -aq -ax -ap -ap -ap -aS -aT -af -af -af -af -af -af -af -al -bu -az -af -af -af -af -ak -ar -ar -aY -aq -aT -af -af -af -af -bd -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -ad -ag -af -af -af -af -af -am -aq -aq -ax -az -af -af -af -af -af -af -af -af -am -aq -bD -an -an -an -an -ce -bq -aq -aT -af -af -af -af -af -bc -be -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -ad -ag -af -af -af -af -af -af -af -am -aT -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -bd -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -ad -aw -ag -af -af -af -af -af -af -af -af -af -af -af -af -bn -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -bd -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -ac -af -af -af -af -af -af -af -af -af -bc -aw -aw -bo -aw -aw -aw -ag -af -af -af -af -af -af -af -af -af -af -af -bc -aw -aw -be -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -ad -aw -aw -ag -af -af -af -af -af -af -bd -aa -aa -aa -aa -aa -aa -aa -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -aw -be -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aw -aw -aw -aw -aw -aw -be -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 9a7835d5e823..e2dcecd9bf4e 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -968,7 +968,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "cL" = ( -/obj/item/gun/energy/pulse/carbine/loyalpin, +/obj/item/gun/energy/pulse/carbine, /obj/item/flashlight/seclite, /obj/structure/table/reinforced, /obj/machinery/airalarm/directional/south, diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index d5fc0a7ac0ec..933c40561483 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -170,22 +170,6 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 -//Gun bolt types -///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. -/// Example: c20, shotguns, m90 -#define BOLT_TYPE_STANDARD 1 -///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. -/// Example: Some SMGs, the L6 -#define BOLT_TYPE_OPEN 2 -///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. -/// Example: Break action shotguns, revolvers -#define BOLT_TYPE_NO_BOLT 3 -///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. -/// Example: Pistols with a slide lock, some SMGs -#define BOLT_TYPE_LOCKING 4 -///This is effectively BOLT_TYPE_STANDARD and NO_BOLT in one. -#define BOLT_TYPE_NO_BOLT_PLUS 5 - //Sawn off nerfs ///accuracy penalty of sawn off guns #define SAWN_OFF_ACC_PENALTY 25 diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index e7012590bae8..f4a862373bf6 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -15,17 +15,19 @@ /// The caliber used by the [security auto-rifle][/obj/item/gun/ballistic/automatic/wt550]. #define CALIBER_46X30MM "4.6x30mm" /// The caliber used by the Nanotrasen Saber SMG, PP-95 SMG and Type U3 Uzi. Also used as the default caliber for pistols but only the stechkin APS machine pistol doesn't override it. -#define CALIBER_9MM "9mm" +#define CALIBER_9MM "9x19mm Parabellum" /// The caliber used as the default for ballistic guns. Only not overridden for the [surplus rifle][/obj/item/gun/ballistic/automatic/surplus]. -#define CALIBER_10MM "10mm" +#define CALIBER_10MM "10mm Auto" /// The caliber used by most revolver variants. -#define CALIBER_357 ".357" +#define CALIBER_357 ".357 Smith & Wesson" /// The caliber used by the detective's revolver. -#define CALIBER_38 ".38" +#define CALIBER_38 ".38 Special" /// The caliber used by the C-20r SMG, the tommygun, and the M1911 pistol. -#define CALIBER_45 ".45" -/// The caliber used by sniper rifles and the desert eagle. -#define CALIBER_50 ".50" +#define CALIBER_45 ".45 ACP" +/// The caliber used by the desert eagle. +#define CALIBER_50_PISTOL ".50 Action Express" +/// The caliber used by sniper rifles +#define CALIBER_50_RIFLE ".50 BMG" /// The caliber used by the gyrojet pistol. #define CALIBER_75 ".75" /// The caliber used by [one revolver variant][/obj/item/gun/ballistic/revolver/nagant]. @@ -35,7 +37,7 @@ /// The caliber used by bolt action rifles. #define CALIBER_A762 "a762" /// The caliber used by shotguns. -#define CALIBER_SHOTGUN "shotgun" +#define CALIBER_12GAUGE "12-gauge" /// The caliber used by grenade launchers. #define CALIBER_40MM "40mm" /// The caliber used by rocket launchers. diff --git a/code/datums/memory/memory.dm b/code/datums/memory/memory.dm index 70f73c3bbe4e..cb81d8a46e18 100644 --- a/code/datums/memory/memory.dm +++ b/code/datums/memory/memory.dm @@ -60,8 +60,6 @@ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/morph, - /mob/living/basic/stickman, - /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet/dog/corgi, diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index ee6724d659cc..92b8ff3190e3 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -144,13 +144,6 @@ description = "A caravan route used by passing cargo freights has been ambushed by a salvage team manned by the syndicate. \ The caravan managed to send off a distress message before being surrounded, their video feed cutting off as the sound of gunfire and a parrot was heard." -/datum/map_template/ruin/space/originalcontent - id = "paperwizard" - suffix = "originalcontent.dmm" - name = "A Giant Ball of Paper in Space" - description = "Sightings of a giant wad of paper hurling through the depths of space have been recently reported by multiple outposts near this sector. \ - A giant wad of paper, really? Damn prank callers." - /datum/map_template/ruin/space/mech_transport id = "mech-transport" suffix = "mechtransport.dmm" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 907883825ce8..e795f93f1a06 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -705,7 +705,8 @@ var/list/materials_list = list() for(var/datum/material/current_material as anything in custom_materials) materials_list += "[current_material.name]" - . += "It is made out of [english_list(materials_list)]." + . += "It is made out of [english_list(materials_list)]." + if(reagents) . += "
" //PARIAH EDIT ADDITION if(reagents.flags & TRANSPARENT) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm index af040dabeded..39717e474120 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/fireaxe.dm @@ -9,7 +9,7 @@ name = "fire axe" desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" - force = 5 + force = 10 force_wielded = 25 throwforce = 15 diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 510df4d4a316..febfc44f9cc3 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -10,7 +10,7 @@ light_power = 1 light_on = FALSE stealthy_audio = TRUE - w_class = WEIGHT_CLASS_SMALL + w_class = WEIGHT_CLASS_NORMAL /// The color of this energy based sword, for use in editing the icon_state. var/sword_color_icon @@ -29,12 +29,20 @@ /// The heat given off when active. var/active_heat = 3500 + var/datum/effect_system/spark_spread/spark_system + COOLDOWN_DECLARE(spark_cd) + /obj/item/melee/energy/Initialize(mapload) . = ..() make_transformable() AddComponent(/datum/component/butchering, _speed = 5 SECONDS, _butcher_sound = active_hitsound) + spark_system = new /datum/effect_system/spark_spread() + spark_system.set_up(3, 0, src) + spark_system.attach(src) + /obj/item/melee/energy/Destroy() + QDEL_NULL(spark_system) STOP_PROCESSING(SSobj, src) return ..() @@ -66,6 +74,10 @@ if(heat) open_flame() + if(COOLDOWN_FINISHED(src, spark_cd)) + spark_system.start() + COOLDOWN_START(src, spark_cd, rand(2 SECONDS, 4 SECONDS)) + /obj/item/melee/energy/ignition_effect(atom/atom, mob/user) if(!heat && !blade_active) return "" @@ -100,13 +112,14 @@ updateEmbedding() heat = active_heat START_PROCESSING(SSobj, src) + spark_system.start() + COOLDOWN_START(src, spark_cd, rand(2 SECONDS, 4 SECONDS)) else if(embedding) disableEmbedding() heat = initial(heat) STOP_PROCESSING(SSobj, src) - balloon_alert(user, "[name] [active ? "enabled":"disabled"]") playsound(user ? user : src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, TRUE) set_light_on(active) return COMPONENT_NO_DEFAULT_MESSAGE @@ -157,9 +170,11 @@ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' hitsound = SFX_SWING_HIT force = 3 + throwforce = 5 throw_speed = 3 throw_range = 5 + armor_penetration = 35 block_chance = 50 embedding = list("embed_chance" = 75, "impact_pain_mult" = 10) @@ -285,20 +300,6 @@ heat = 3500 w_class = WEIGHT_CLASS_BULKY blade_active = TRUE - /// Our linked spark system that emits from our sword. - var/datum/effect_system/spark_spread/spark_system - -//Most of the other special functions are handled in their own files. aka special snowflake code so kewl -/obj/item/melee/energy/blade/Initialize(mapload) - . = ..() - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - START_PROCESSING(SSobj, src) - -/obj/item/melee/energy/blade/Destroy() - QDEL_NULL(spark_system) - return ..() /obj/item/melee/energy/blade/make_transformable() return FALSE diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 2aec1217b869..fbb42687a3e7 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -633,30 +633,26 @@ new /obj/item/clothing/glasses/thermal/syndi(src) /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle - desc = "A large duffel bag containing a medical equipment, a Donksoft LMG, a big jumbo box of riot darts, and a knock-off pair of magboots." + desc = "A large duffel bag containing a medical equipment, and a knock-off pair of magboots." /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents() new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/storage/medkit/tactical(src) - new /obj/item/gun/ballistic/automatic/l6_saw/toy(src) - new /obj/item/ammo_box/foambox/riot(src) /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle - desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes." + desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, and a box of syringes." /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents() new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src) new /obj/item/storage/box/syndie_kit/chemical(src) new /obj/item/gun/syringe/syndicate(src) - new /obj/item/gun/ballistic/automatic/c20r/toy(src) new /obj/item/storage/box/syringes(src) - new /obj/item/ammo_box/foambox/riot(src) new /obj/item/grenade/chem_grenade/bioterrorfoam(src) if(prob(5)) new /obj/item/food/pizza/pineapple(src) /obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents() - for(var/i in 1 to 10) + for(var/i in 1 to 4) new /obj/item/grenade/c4(src) /obj/item/storage/backpack/duffelbag/syndie/x4/PopulateContents() diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index c95895605e39..e1341900c94d 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -145,7 +145,7 @@ if(KIT_NUKEOPS_METAGAME) new /obj/item/mod/control/pre_equipped/nuclear(src) // 8 tc - new /obj/item/gun/ballistic/shotgun/bulldog/unrestricted(src) // 8 tc + new /obj/item/gun/ballistic/shotgun/bulldog(src) // 8 tc new /obj/item/implanter/explosive(src) // 2 tc new /obj/item/ammo_box/magazine/m12g(src) // 2 tc new /obj/item/ammo_box/magazine/m12g(src) // 2 tc @@ -300,13 +300,6 @@ for(var/i in 1 to 7) new /obj/item/reagent_containers/syringe/bioterror(src) -/obj/item/storage/box/syndie_kit/clownpins - name = "ultra hilarious firing pin box" - -/obj/item/storage/box/syndie_kit/clownpins/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/firing_pin/clown/ultra(src) - /obj/item/storage/box/syndie_kit/imp_storage name = "storage implant box" diff --git a/code/modules/antagonists/clown_ops/outfits.dm b/code/modules/antagonists/clown_ops/outfits.dm index 8536ffd056e0..15cd7407066c 100644 --- a/code/modules/antagonists/clown_ops/outfits.dm +++ b/code/modules/antagonists/clown_ops/outfits.dm @@ -12,7 +12,6 @@ backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ /obj/item/knife/combat/survival, /obj/item/dnainjector/clumsymut, //in case you want to be clumsy for the memes - /obj/item/storage/box/syndie_kit/clownpins, //for any guns that you get your grubby little clown op mitts on /obj/item/reagent_containers/spray/waterflower/lube, /obj/item/mod/skin_applier/honkerative, ) diff --git a/code/modules/antagonists/gang/outfits.dm b/code/modules/antagonists/gang/outfits.dm index 82babe31609d..0263cf3f8a53 100644 --- a/code/modules/antagonists/gang/outfits.dm +++ b/code/modules/antagonists/gang/outfits.dm @@ -66,7 +66,7 @@ name = "Families: Space FBI Officer" suit = /obj/item/clothing/suit/armor/laserproof head = /obj/item/clothing/head/helmet/riot - belt = /obj/item/gun/ballistic/automatic/proto/unrestricted + belt = /obj/item/gun/ballistic/automatic/proto gloves = /obj/item/clothing/gloves/combat backpack_contents = list(/obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/teargas = 1, diff --git a/code/modules/antagonists/heretic/items/hunter_rifle.dm b/code/modules/antagonists/heretic/items/hunter_rifle.dm index 131f289b66fb..805a97431090 100644 --- a/code/modules/antagonists/heretic/items/hunter_rifle.dm +++ b/code/modules/antagonists/heretic/items/hunter_rifle.dm @@ -20,7 +20,6 @@ ammo_type = /obj/item/ammo_casing/a762/lionhunter caliber = CALIBER_A762 max_ammo = 3 - multiload = TRUE /obj/item/ammo_casing/a762/lionhunter projectile_type = /obj/projectile/bullet/a762/lionhunter diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index f3786b84d1fa..ff1af641ad73 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -80,14 +80,14 @@ CALIBER_38, CALIBER_45, CALIBER_46X30MM, - CALIBER_50, + CALIBER_50_RIFLE, CALIBER_712X82MM, CALIBER_75, CALIBER_9MM, CALIBER_A556, CALIBER_A762, CALIBER_N762, - CALIBER_SHOTGUN, + CALIBER_12GAUGE, ) /datum/heretic_knowledge/rifle_ammo/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) diff --git a/code/modules/capture_the_flag/ctf_equipment.dm b/code/modules/capture_the_flag/ctf_equipment.dm index 96adc26047f0..bb0794168114 100644 --- a/code/modules/capture_the_flag/ctf_equipment.dm +++ b/code/modules/capture_the_flag/ctf_equipment.dm @@ -75,7 +75,6 @@ fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' semi_auto = TRUE internal_magazine = FALSE - tac_reloads = TRUE /obj/item/gun/ballistic/shotgun/ctf/Initialize(mapload) . = ..() diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 1eac38364909..0b69806b92a6 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2384,16 +2384,6 @@ /obj/item/ammo_box/magazine/toy/pistol) crate_name = "foam force crate" -/datum/supply_pack/costumes_toys/riot_foam - name = "Riot Foam Darts Crate" - desc = "Lock and load your foam force arsenal to floor your opponents with 120 of our new and improved high density foam darts! Remember, it's Donk or Die!" - contraband = TRUE - cost = CARGO_CRATE_VALUE * 4 - contains = list(/obj/item/ammo_box/foambox/riot, - /obj/item/ammo_box/foambox/riot, - /obj/item/ammo_box/foambox/riot) - crate_name = "riot foam darts crate" - /datum/supply_pack/costumes_toys/formalwear name = "Formalwear Crate" desc = "You're gonna like the way you look, I guaranteed it. Contains an asston of fancy clothing." @@ -2427,15 +2417,6 @@ crate_name = "formalwear crate" crate_type = /obj/structure/closet/crate/wooden -/datum/supply_pack/costumes_toys/clownpin - name = "Hilarious Firing Pin Crate" - desc = "I uh... I'm not really sure what this does. Wanna buy it?" - cost = CARGO_CRATE_VALUE * 10 - contraband = TRUE - contains = list(/obj/item/firing_pin/clown) - crate_name = "toy crate" // It's /technically/ a toy. For the clown, at least. - crate_type = /obj/structure/closet/crate/wooden - /datum/supply_pack/costumes_toys/lasertag name = "Laser Tag Crate" desc = "Foam Force is for boys. Laser Tag is for men. Contains three sets of red suits, blue suits, matching helmets, and matching laser tag guns." diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 827a43c9aa85..d12ee9733d4b 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -57,12 +57,12 @@ name = "ERT Commander - High Alert" backpack_contents = list( - /obj/item/gun/energy/pulse/pistol/loyalpin = 1, + /obj/item/gun/energy/pulse/pistol = 1, /obj/item/melee/baton/security/loaded = 1, /obj/item/storage/box/survival/engineer = 1, + /obj/item/melee/energy/sword/saber = 1, ) glasses = /obj/item/clothing/glasses/thermal/eyepatch - l_pocket = /obj/item/melee/energy/sword/saber /datum/outfit/centcom/ert/security name = "ERT Security" @@ -93,7 +93,7 @@ /datum/outfit/centcom/ert/security/alert name = "ERT Security - High Alert" - l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin + l_hand = /obj/item/gun/energy/pulse/carbine backpack_contents = list( /obj/item/melee/baton/security/loaded = 1, /obj/item/storage/belt/security/full = 1, @@ -133,7 +133,7 @@ name = "ERT Medic - High Alert" backpack_contents = list( - /obj/item/gun/energy/pulse/pistol/loyalpin = 1, + /obj/item/gun/energy/pulse/pistol = 1, /obj/item/gun/medbeam = 1, /obj/item/melee/baton/security/loaded = 1, /obj/item/reagent_containers/hypospray/combat/nanites = 1, @@ -174,7 +174,7 @@ backpack_contents = list( /obj/item/construction/rcd/combat = 1, - /obj/item/gun/energy/pulse/pistol/loyalpin = 1, + /obj/item/gun/energy/pulse/pistol = 1, /obj/item/melee/baton/security/loaded = 1, /obj/item/pipe_dispenser = 1, /obj/item/storage/box/survival/engineer = 1, @@ -510,6 +510,7 @@ /obj/item/storage/box/flashbangs = 1, /obj/item/storage/box/survival/engineer = 1, /obj/item/storage/medkit/regular = 1, + /obj/item/melee/energy/sword/saber = 1, ) belt = /obj/item/gun/ballistic/revolver/mateba ears = /obj/item/radio/headset/headset_cent/alt @@ -517,9 +518,8 @@ gloves = /obj/item/clothing/gloves/tackler/combat/insulated mask = /obj/item/clothing/mask/gas/sechailer/swat shoes = /obj/item/clothing/shoes/combat/swat - l_pocket = /obj/item/melee/energy/sword/saber r_pocket = /obj/item/shield/energy - l_hand = /obj/item/gun/energy/pulse/loyalpin + l_hand = /obj/item/gun/energy/pulse skillchips = list( /obj/item/skillchip/disk_verifier, diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 4aa38d0f8ac1..7b2c0e65a7f5 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -236,7 +236,7 @@ gloves = /obj/item/clothing/gloves/color/black glasses = /obj/item/clothing/glasses/sunglasses shoes = /obj/item/clothing/shoes/sneakers/black - l_pocket = /obj/item/melee/energy/sword/saber + r_hand = /obj/item/melee/energy/sword/saber l_hand = /obj/item/storage/secure/briefcase /datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 23c20812b382..49413170dd23 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -148,37 +148,6 @@ armor = list(BLUNT = 0, PUNCTURE = 0, SLASH = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) resistance_flags = FLAMMABLE -/obj/item/clothing/suit/wizrobe/paper - name = "papier-mache robe" // no non-latin characters! - desc = "A robe held together by various bits of clear-tape and paste." - icon_state = "wizard-paper" - inhand_icon_state = "wizard-paper" - var/robe_charge = TRUE - actions_types = list(/datum/action/item_action/stickmen) - - -/obj/item/clothing/suit/wizrobe/paper/ui_action_click(mob/user, action) - stickmen() - - -/obj/item/clothing/suit/wizrobe/paper/verb/stickmen() - set category = "Object" - set name = "Summon Stick Minions" - if(!isliving(usr)) - return - if(!robe_charge) - to_chat(usr, span_warning("The robe's internal magic supply is still recharging!")) - return - - usr.say("Rise, my creation! Off your page into this realm!", forced = "stickman summoning") - playsound(loc, 'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) - var/mob/living/M = new /mob/living/basic/stickman(get_turf(usr)) - M.faction += list("[REF(usr)]") - robe_charge = FALSE - sleep(30) - robe_charge = TRUE - to_chat(usr, span_notice("The robe hums, its internal magic supply restored.")) - // The actual code for this is handled in the shielded component, see [/datum/component/shielded/proc/check_recharge_rune] /obj/item/wizard_armour_charge name = "battlemage shield charges" diff --git a/code/modules/mapfluff/ruins/spaceruin_code/originalcontent.dm b/code/modules/mapfluff/ruins/spaceruin_code/originalcontent.dm deleted file mode 100644 index e89cf44f56c1..000000000000 --- a/code/modules/mapfluff/ruins/spaceruin_code/originalcontent.dm +++ /dev/null @@ -1,28 +0,0 @@ -/////////// originalcontent items - -/obj/item/paper/crumpled/ruins/originalcontent - desc = "Various scrawled out drawings and sketches reside on the paper, apparently he didn't much care for these drawings." - -/obj/item/paper/pamphlet/ruin/originalcontent - icon = 'icons/obj/fluff.dmi' - -/obj/item/paper/pamphlet/ruin/originalcontent/stickman - name = "Painting - 'BANG'" - info = "This picture depicts a crudely-drawn stickman firing a crudely-drawn gun." - icon_state = "painting4" - -/obj/item/paper/pamphlet/ruin/originalcontent/treeside - name = "Painting - 'Treeside'" - info = "This picture depicts a sunny day on a lush hillside, set under a shaded tree." - icon_state = "painting1" - -/obj/item/paper/pamphlet/ruin/originalcontent/pennywise - name = "Painting - 'Pennywise'" - info = "This picture depicts a smiling clown. Something doesn't feel right about this.." - icon_state = "painting3" - -/obj/item/paper/pamphlet/ruin/originalcontent/yelling - name = "Painting - 'Hands-On-Face'" - info = "This picture depicts a man yelling on a bridge for no apparent reason." - icon_state = "painting2" - diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 0855931f2dd1..428f7fbafb31 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -230,8 +230,8 @@ new /obj/item/clothing/mask/balaclava(src) new /obj/item/gun/ballistic/shotgun/toy(src) new /obj/item/gun/ballistic/automatic/pistol/toy(src) - new /obj/item/gun/ballistic/automatic/toy/unrestricted(src) - new /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted(src) + new /obj/item/gun/ballistic/automatic/toy(src) + new /obj/item/gun/ballistic/automatic/l6_saw/toy(src) new /obj/item/ammo_box/foambox(src) if(98) for(var/i in 1 to 3) diff --git a/code/modules/mob/living/basic/ruin_defender/stickman.dm b/code/modules/mob/living/basic/ruin_defender/stickman.dm deleted file mode 100644 index ead99a971c64..000000000000 --- a/code/modules/mob/living/basic/ruin_defender/stickman.dm +++ /dev/null @@ -1,87 +0,0 @@ -/mob/living/basic/stickman - name = "Angry Stick Man" - desc = "A being from a realm with only 2 dimensions. At least it's trying to stay faced towards you." - icon_state = "stickman" - icon_living = "stickman" - icon_dead = "stickman_dead" - mob_biotypes = MOB_HUMANOID - gender = MALE - health = 100 - maxHealth = 100 - speed = 0.5 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_sound = SFX_PUNCH - combat_mode = TRUE - faction = list("stickman") - - ai_controller = /datum/ai_controller/basic_controller/stickman - -/mob/living/basic/stickman/Initialize(mapload) - . = ..() - new /obj/effect/temp_visual/paper_scatter(get_turf(src)) - AddElement(/datum/element/basic_body_temp_sensitive, cold_damage = 7.5, heat_damage = 7.5) - AddElement(/datum/element/atmos_requirements, list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0), 7.5) - -/datum/ai_controller/basic_controller/stickman - blackboard = list( - BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() - ) - - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/simple_find_target, - /datum/ai_planning_subtree/basic_melee_attack_subtree/stickman - ) - -/datum/ai_planning_subtree/basic_melee_attack_subtree/stickman - melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/stickman - -/datum/ai_behavior/basic_melee_attack/stickman - action_cooldown = 1.5 SECONDS - -/mob/living/basic/stickman/dog - name = "Angry Stick Dog" - desc = "Stickman's best friend, if he could see him at least." - icon_state = "stickdog" - icon_living = "stickdog" - icon_dead = "stickdog_dead" - attack_verb_continuous = "bites" - attack_verb_simple = "bite" - attack_vis_effect = ATTACK_EFFECT_BITE - sharpness = SHARP_POINTY - mob_biotypes = MOB_BEAST - attack_sound = 'sound/weapons/bite.ogg' - -/mob/living/basic/stickman/ranged - name = "Angry Stick Gunman" - desc = "How do 2 dimensional guns even work??" - icon_state = "stickmanranged" - icon_living = "stickmanranged" - attack_verb_continuous = "whacks" - attack_verb_simple = "whack" - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_sound = 'sound/weapons/genhit1.ogg' - - ai_controller = /datum/ai_controller/basic_controller/stickman/ranged - -/mob/living/basic/stickman/ranged/Initialize(mapload) - . = ..() - AddElement(/datum/element/death_drops, list(/obj/item/gun/ballistic/automatic/pistol/stickman)) - AddElement(/datum/element/ranged_attacks, /obj/item/ammo_casing/c9mm, 'sound/misc/bang.ogg') - -/datum/ai_controller/basic_controller/stickman/ranged - planning_subtrees = list( - /datum/ai_planning_subtree/simple_find_target, - /datum/ai_planning_subtree/basic_ranged_attack_subtree/stickman - ) - -/datum/ai_planning_subtree/basic_ranged_attack_subtree/stickman - ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/stickman - -/datum/ai_behavior/basic_ranged_attack/stickman - action_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 1cf870fcb57b..d54f3fe8a329 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1210,7 +1210,6 @@ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, /mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/morph, - /mob/living/basic/stickman, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/parrot, /mob/living/simple_animal/pet/dog/corgi, diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm deleted file mode 100644 index 5e3a7a9a6835..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ /dev/null @@ -1,207 +0,0 @@ -//Paper Wizard Boss -/mob/living/simple_animal/hostile/boss/paper_wizard - name = "Mjor the Creative" - desc = "A wizard with a taste for the arts." - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - boss_abilities = list(/datum/action/boss/wizard_summon_minions, /datum/action/boss/wizard_mimic) - faction = list("hostile","stickman") - del_on_death = TRUE - icon = 'icons/mob/simple_human.dmi' - icon_state = "paperwizard" - ranged = 1 - environment_smash = ENVIRONMENT_SMASH_NONE - minimum_distance = 3 - retreat_distance = 3 - obj_damage = 0 - melee_damage_lower = 10 - melee_damage_upper = 20 - health = 1000 - maxHealth = 1000 - loot = list(/obj/effect/temp_visual/paperwiz_dying) - projectiletype = /obj/projectile/temp - projectilesound = 'sound/weapons/emitter.ogg' - attack_sound = 'sound/hallucinations/growl1.ogg' - var/list/copies = list() - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/boss/paper_wizard/Destroy() - QDEL_LIST(copies) - return ..() - -//Summon Ability -//Lets the wizard summon his art to fight for him -/datum/action/boss/wizard_summon_minions - name = "Summon Minions" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - usage_probability = 40 - boss_cost = 30 - boss_type = /mob/living/simple_animal/hostile/boss/paper_wizard - needs_target = FALSE - say_when_triggered = "Rise, my creations! Jump off your pages and into this realm!" - ///How many minions we summoned - var/summoned_minions = 0 - ///How many minions we can have at once - var/max_minions = 6 - ///How many minions we should spawn - var/minions_to_summon = 3 - -/datum/action/boss/wizard_summon_minions/IsAvailable(feedback = FALSE) - . = ..() - if(!.) - return FALSE - if(summoned_minions >= max_minions) - return FALSE - return TRUE - -/datum/action/boss/wizard_summon_minions/Trigger(trigger_flags) - . = ..() - if(!.) - return - var/list/minions = list( - /mob/living/basic/stickman, - /mob/living/basic/stickman/ranged, - /mob/living/basic/stickman/dog) - var/list/directions = GLOB.cardinals.Copy() - var/summon_amount = min(minions_to_summon, max_minions - summoned_minions) - for(var/i in 1 to summon_amount) - var/atom/chosen_minion = pick_n_take(minions) - chosen_minion = new chosen_minion(get_step(boss, pick_n_take(directions))) - RegisterSignal(chosen_minion, list(COMSIG_PARENT_QDELETING, COMSIG_LIVING_DEATH), PROC_REF(lost_minion)) - summoned_minions++ - -/// Called when a minion is qdeleted or dies, removes it from our minion list -/datum/action/boss/wizard_summon_minions/proc/lost_minion(mob/source) - SIGNAL_HANDLER - - UnregisterSignal(source, list(COMSIG_PARENT_QDELETING, COMSIG_LIVING_DEATH)) - summoned_minions-- - -//Mimic Ability -//Summons mimics of himself with magical papercraft -//Hitting a decoy hurts nearby people excluding the wizard himself -//Hitting the wizard himself destroys all decoys -/datum/action/boss/wizard_mimic - name = "Craft Mimicry" - button_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "mimic_summon" - usage_probability = 30 - boss_cost = 40 - boss_type = /mob/living/simple_animal/hostile/boss/paper_wizard - say_when_triggered = "" - -/datum/action/boss/wizard_mimic/Trigger(trigger_flags) - if(..()) - var/mob/living/target - if(!boss.client) //AI's target - target = boss.target - else //random mob - var/list/threats = boss.PossibleThreats() - if(threats.len) - target = pick(threats) - if(target) - var/mob/living/simple_animal/hostile/boss/paper_wizard/wiz = boss - var/directions = GLOB.cardinals.Copy() - for(var/i in 1 to 3) - var/mob/living/simple_animal/hostile/boss/paper_wizard/copy/C = new (get_step(target,pick_n_take(directions))) - wiz.copies += C - C.original = wiz - C.say("My craft defines me, you could even say it IS me!") - wiz.say("My craft defines me, you could even say it IS me!") - wiz.forceMove(get_step(target,pick_n_take(directions))) - wiz.minimum_distance = 1 //so he doesn't run away and ruin everything - wiz.retreat_distance = 0 - else - boss.atb.refund(boss_cost) - -/mob/living/simple_animal/hostile/boss/paper_wizard/copy - desc = "'Tis a ruse!" - health = 1 - maxHealth = 1 - alpha = 200 - boss_abilities = list() - melee_damage_lower = 1 - melee_damage_upper = 5 - minimum_distance = 0 - retreat_distance = 0 - ranged = 0 - loot = list() - var/mob/living/simple_animal/hostile/boss/paper_wizard/original - -/mob/living/simple_animal/hostile/boss/paper_wizard/copy/Destroy() - if(original) - original.copies -= src - original = null - return ..() - -//Hit a fake? eat pain! -/mob/living/simple_animal/hostile/boss/paper_wizard/copy/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount > 0) //damage - if(original) - original.minimum_distance = 3 - original.retreat_distance = 3 - for(var/c in original.copies) - qdel(c) - for(var/mob/living/L in range(5,src)) - if(L == original || istype(L, type)) - continue - L.adjustBruteLoss(50) - qdel(src) - else - . = ..() - -//Hit the real guy? copies go bai-bai -/mob/living/simple_animal/hostile/boss/paper_wizard/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0)//damage - minimum_distance = 3 - retreat_distance = 3 - for(var/copy in copies) - qdel(copy) - -/mob/living/simple_animal/hostile/boss/paper_wizard/copy/examine(mob/user) - . = ..() - if(isobserver(user)) - . += span_notice("It's an illusion - what is it hiding?") - else - qdel(src) //I see through your ruse! - -//fancy effects -/obj/effect/temp_visual/paper_scatter - name = "scattering paper" - desc = "Pieces of paper scattering to the wind." - layer = ABOVE_OPEN_TURF_LAYER - plane = GAME_PLANE - icon = 'icons/effects/effects.dmi' - icon_state = "paper_scatter" - anchored = TRUE - duration = 5 - randomdir = FALSE - -/obj/effect/temp_visual/paperwiz_dying - name = "craft portal" - desc = "A wormhole sucking the wizard into the void. Neat." - layer = ABOVE_OPEN_TURF_LAYER - plane = GAME_PLANE - icon = 'icons/effects/effects.dmi' - icon_state = "paperwiz_poof" - anchored = TRUE - duration = 18 - randomdir = FALSE - -/obj/effect/temp_visual/paperwiz_dying/Initialize(mapload) - . = ..() - visible_message(span_boldannounce("The wizard cries out in pain as a gate appears behind him, sucking him in!")) - playsound(get_turf(src),'sound/magic/mandswap.ogg', 50, TRUE, TRUE) - playsound(get_turf(src),'sound/hallucinations/wail.ogg', 50, TRUE, TRUE) - -/obj/effect/temp_visual/paperwiz_dying/Destroy() - for(var/mob/M in range(7,src)) - shake_camera(M, 7, 1) - var/turf/T = get_turf(src) - playsound(T,'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) - new /obj/effect/temp_visual/paper_scatter(T) - new /obj/item/clothing/suit/wizrobe/paper(T) - new /obj/item/clothing/head/collectable/paper(T) - return ..() diff --git a/code/modules/mob_spawn/ghost_roles/space_roles.dm b/code/modules/mob_spawn/ghost_roles/space_roles.dm index 392286c2eaec..890fb0b8f9f9 100644 --- a/code/modules/mob_spawn/ghost_roles/space_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/space_roles.dm @@ -232,7 +232,6 @@ /datum/outfit/syndicate_empty/battlecruiser/assault/captain name = "Syndicate Battlecruiser Captain" - l_pocket = /obj/item/melee/energy/sword/saber/red r_pocket = /obj/item/melee/baton/telescopic suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate suit_store = /obj/item/gun/ballistic/revolver/mateba @@ -243,3 +242,7 @@ glasses = /obj/item/clothing/glasses/thermal/eyepatch id = /obj/item/card/id/advanced/black/syndicate_command/captain_id id_trim = /datum/id_trim/battlecruiser/captain + + backpack_contents = list( + /obj/item/melee/energy/sword/saber/red, + ) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index f508a7fb4a64..151ae0e34f52 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -48,7 +48,7 @@ // .50AE (Desert Eagle) /obj/item/ammo_casing/a50ae - name = ".50AE bullet casing" - desc = "A .50AE bullet casing." - caliber = CALIBER_50 + name = ".50 AE bullet casing" + desc = "A .50 AE bullet casing." + caliber = CALIBER_50_PISTOL projectile_type = /obj/projectile/bullet/a50ae diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index 8784bdeece3c..426a815293bf 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -1,4 +1,4 @@ -// .357 (Syndie Revolver) +// .357 (Revolver) /obj/item/ammo_casing/a357 name = ".357 bullet casing" diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 99cde7b51d2f..e971b78725b5 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -5,7 +5,7 @@ desc = "A 12 gauge lead slug." icon_state = "blshell" worn_icon_state = "shell" - caliber = CALIBER_SHOTGUN + caliber = CALIBER_12GAUGE custom_materials = list(/datum/material/iron=4000) projectile_type = /obj/projectile/bullet/shotgun_slug diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm index 3749520a522d..e1514419f32f 100644 --- a/code/modules/projectiles/ammunition/ballistic/sniper.dm +++ b/code/modules/projectiles/ammunition/ballistic/sniper.dm @@ -1,25 +1,25 @@ // .50 (Sniper) /obj/item/ammo_casing/p50 - name = ".50 bullet casing" - desc = "A .50 bullet casing." - caliber = CALIBER_50 + name = ".50 BMG bullet casing" + desc = "A .50 BMG bullet casing." + caliber = CALIBER_50_RIFLE projectile_type = /obj/projectile/bullet/p50 icon_state = ".50" /obj/item/ammo_casing/p50/soporific - name = ".50 soporific bullet casing" - desc = "A .50 bullet casing, specialised in sending the target to sleep, instead of hell." + name = ".50 BMG soporific bullet casing" + desc = "A .50 BMG bullet casing, specialised in sending the target to sleep, instead of hell." projectile_type = /obj/projectile/bullet/p50/soporific icon_state = "sleeper" harmful = FALSE /obj/item/ammo_casing/p50/penetrator - name = ".50 penetrator round bullet casing" - desc = "A .50 caliber penetrator round casing." + name = ".50 BMG penetrator round bullet casing" + desc = "A .50 BMG caliber penetrator round casing." projectile_type = /obj/projectile/bullet/p50/penetrator /obj/item/ammo_casing/p50/marksman - name = ".50 marksman round bullet casing" - desc = "A .50 caliber marksman round casing." + name = ".50 BMG marksman round bullet casing" + desc = "A .50 BMG caliber marksman round casing." projectile_type = /obj/projectile/bullet/p50/marksman diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm index 32e19e49c9a4..f0300071c425 100644 --- a/code/modules/projectiles/ammunition/caseless/foam.dm +++ b/code/modules/projectiles/ammunition/caseless/foam.dm @@ -56,11 +56,3 @@ user.put_in_hands(FD.pen) to_chat(user, span_notice("You remove [FD.pen] from [src].")) FD.pen = null - -/obj/item/ammo_casing/caseless/foam_dart/riot - name = "riot foam dart" - desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up." - projectile_type = /obj/projectile/bullet/reusable/foam_dart/riot - icon_state = "foamdart_riot" - base_icon_state = "foamdart_riot" - custom_materials = list(/datum/material/iron = 1125) diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 61d5c371923e..077d9ebd8aa5 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -15,22 +15,27 @@ throw_speed = 3 throw_range = 7 override_notes = TRUE + + ///String, used for checking if ammo of different types but still fits can fit inside it; generally used for magazines + var/caliber + ///list containing the actual ammo within the magazine var/list/stored_ammo = list() ///type that the magazine will be searching for, rejects if not a subtype of var/ammo_type = /obj/item/ammo_casing ///maximum amount of ammo in the magazine var/max_ammo = 7 + ///Controls how sprites are updated for the ammo box; see defines in combat.dm: AMMO_BOX_ONE_SPRITE; AMMO_BOX_PER_BULLET; AMMO_BOX_FULL_EMPTY var/multiple_sprites = AMMO_BOX_ONE_SPRITE ///For sprite updating, do we use initial(icon_state) or base_icon_state? var/multiple_sprite_use_base = FALSE - ///String, used for checking if ammo of different types but still fits can fit inside it; generally used for magazines - var/caliber - ///Allows multiple bullets to be loaded in from one click of another box/magazine - var/multiload = TRUE + + ///Delay for loading bullets in. + var/load_delay = 0.5 SECONDS ///Whether the magazine should start with nothing in it var/start_empty = FALSE + ///cost of all the bullets in the magazine/box var/list/bullet_cost ///cost of the materials in the magazine/box itself @@ -41,6 +46,7 @@ if(!bullet_cost) base_cost = SSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.1) bullet_cost = SSmaterials.FindOrCreateMaterialCombo(custom_materials, 0.9 / max_ammo) + if(!start_empty) top_off(starting=TRUE) @@ -102,35 +108,8 @@ /obj/item/ammo_box/proc/can_load(mob/user) return TRUE -/obj/item/ammo_box/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0) - var/num_loaded = 0 - if(!can_load(user)) - return - if(istype(A, /obj/item/ammo_box)) - var/obj/item/ammo_box/AM = A - for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - var/did_load = give_round(AC, replace_spent) - if(did_load) - AM.stored_ammo -= AC - num_loaded++ - if(!did_load || !multiload) - break - if(num_loaded) - AM.update_ammo_count() - if(isammocasing(A)) - var/obj/item/ammo_casing/AC = A - if(give_round(AC, replace_spent)) - user.transferItemToLoc(AC, src, TRUE) - num_loaded++ - AC.update_appearance() - - if(num_loaded) - if(!silent) - to_chat(user, span_notice("You load [num_loaded] shell\s into \the [src]!")) - playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) - update_ammo_count() - - return num_loaded +/obj/item/ammo_box/attackby(obj/item/A, mob/user, params) + return attempt_load_round(A, user) /obj/item/ammo_box/attack_self(mob/user) var/obj/item/ammo_casing/A = get_round() @@ -144,15 +123,52 @@ to_chat(user, span_notice("You remove a round from [src]!")) update_ammo_count() +/// Attempts to load a given item into this ammo box +/obj/item/ammo_box/proc/attempt_load_round(obj/item/I, mob/user, silent = FALSE, replace_spent = FALSE) + var/num_loaded = 0 + if(!can_load(user)) + return FALSE + + if(istype(I, /obj/item/ammo_box)) + var/obj/item/ammo_box/AM = I + for(var/obj/item/ammo_casing/AC in AM.stored_ammo) + if(user && load_delay && !do_after(user, src, load_delay, IGNORE_USER_LOC_CHANGE, FALSE, interaction_key = "load_round")) + break + + var/did_load = give_round(AC, replace_spent) + if(!did_load) + break + + AM.stored_ammo -= AC + num_loaded++ + if(!silent) + user?.visible_message( + span_notice("[user] loads a round into [src]."), + vision_distance = COMBAT_MESSAGE_RANGE, + ) + playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + update_ammo_count() + AM.update_ammo_count() + + if(isammocasing(I)) + var/obj/item/ammo_casing/AC = I + if(give_round(AC, replace_spent)) + user.transferItemToLoc(AC, src, TRUE) + num_loaded++ + if(!silent) + playsound(src, 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + update_ammo_count() + + return num_loaded + /// Updates the materials and appearance of this ammo box /obj/item/ammo_box/proc/update_ammo_count() update_custom_materials() update_appearance() -/obj/item/ammo_box/update_desc(updates) +/obj/item/ammo_box/examine(mob/user) . = ..() - var/shells_left = LAZYLEN(stored_ammo) - desc = "[initial(desc)] There [(shells_left == 1) ? "is" : "are"] [shells_left] shell\s left!" + . += span_notice(get_ammo_desc()) /obj/item/ammo_box/update_icon_state() var/shells_left = LAZYLEN(stored_ammo) @@ -170,8 +186,33 @@ temp_materials[material] = (bullet_cost[material] * stored_ammo.len) + base_cost[material] set_custom_materials(temp_materials) +/// Returns a string that describes the amount of ammo in the magazine. +/obj/item/ammo_box/proc/get_ammo_desc(exact) + if(exact) + return "There are [ammo_count(TRUE)] rounds in [src]." + + var/ammo_count = ammo_count(TRUE) + if(ammo_count == 1) + return "There is one round left." + + var/ammo_percent = ceil(((ammo_count / max_ammo) * 100)) + + switch(ammo_percent) + if(0) + return "It is empty." + if(1 to 20) + return "It rattles when you shake it." + if(21 to 40) + return "It is running low on rounds." + if(41 to 69) + return "It is about half full." + if(70 to 99) + return "It is mostly full." + if(100) + return "It is fully loaded." + ///Count of number of bullets in the magazine -/obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE) +/obj/item/ammo_box/proc/ammo_count(countempties = TRUE) var/boolets = 0 for(var/obj/item/ammo_casing/bullet in stored_ammo) if(bullet && (bullet.loaded_projectile || countempties)) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 8ffa5b51a7a6..6b28f2407bb9 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -97,8 +97,3 @@ ammo_type = /obj/item/ammo_casing/caseless/foam_dart max_ammo = 40 custom_materials = list(/datum/material/iron = 500) - -/obj/item/ammo_box/foambox/riot - icon_state = "foambox_riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - custom_materials = list(/datum/material/iron = 50000) diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm index 91d76ab1d74f..6b5540d4f81a 100644 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -1,5 +1,5 @@ /obj/item/ammo_box/magazine/m10mm - name = "pistol magazine (10mm)" + name = "8-round pistol magazine (10mm Auto)" desc = "A gun magazine." icon_state = "9x19p" ammo_type = /obj/item/ammo_casing/c10mm @@ -8,7 +8,7 @@ multiple_sprites = AMMO_BOX_FULL_EMPTY /obj/item/ammo_box/magazine/m45 - name = "handgun magazine (.45)" + name = "8-round pistol magazine (.45 ACP)" icon_state = "45-8" base_icon_state = "45" ammo_type = /obj/item/ammo_casing/c45 @@ -20,7 +20,7 @@ icon_state = "[base_icon_state]-[min(ammo_count(), 8)]" /obj/item/ammo_box/magazine/m9mm - name = "pistol magazine (9mm)" + name = "8-round pistol magazine (9x19mm)" icon_state = "9x19p-8" base_icon_state = "9x19p" ammo_type = /obj/item/ammo_casing/c9mm @@ -32,25 +32,25 @@ icon_state = "[base_icon_state]-[ammo_count() ? "8" : "0"]" /obj/item/ammo_box/magazine/m9mm/fire - name = "pistol magazine (9mm incendiary)" + name = "8-round pistol magazine (9x19mm incendiary)" icon_state = "9x19pI" desc = "A gun magazine. Loaded with rounds which ignite the target." ammo_type = /obj/item/ammo_casing/c9mm/fire /obj/item/ammo_box/magazine/m9mm/hp - name = "pistol magazine (9mm HP)" + name = "8-round pistol magazine (9x19mm HP)" icon_state = "9x19pH" desc= "A gun magazine. Loaded with hollow-point rounds, extremely effective against unarmored targets, but nearly useless against protective clothing." ammo_type = /obj/item/ammo_casing/c9mm/hp /obj/item/ammo_box/magazine/m9mm/ap - name = "pistol magazine (9mm AP)" + name = "8-round pistol magazine (9x19mm AP)" icon_state = "9x19pA" desc= "A gun magazine. Loaded with rounds which penetrate armour, but are less effective against normal targets." ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/ammo_box/magazine/m9mm_aps - name = "stechkin pistol magazine (9mm)" + name = "15-round pistol magazine (9x19mm)" icon_state = "9mmaps-15" base_icon_state = "9mmaps" ammo_type = /obj/item/ammo_casing/c9mm @@ -62,24 +62,24 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 5)]" /obj/item/ammo_box/magazine/m9mm_aps/fire - name = "stechkin pistol magazine (9mm incendiary)" + name = "15-round pistol magazine (9x19mm incendiary)" ammo_type = /obj/item/ammo_casing/c9mm/fire max_ammo = 15 /obj/item/ammo_box/magazine/m9mm_aps/hp - name = "stechkin pistol magazine (9mm HP)" + name = "15-round pistol magazine (9x19mm HP)" ammo_type = /obj/item/ammo_casing/c9mm/hp max_ammo = 15 /obj/item/ammo_box/magazine/m9mm_aps/ap - name = "stechkin pistol magazine (9mm AP)" + name = "15-round pistol magazine (9x19mm AP)" ammo_type = /obj/item/ammo_casing/c9mm/ap max_ammo = 15 /obj/item/ammo_box/magazine/m50 - name = "handgun magazine (.50ae)" + name = "7-round pistol magazine (.50 AE)" icon_state = "50ae" ammo_type = /obj/item/ammo_casing/a50ae - caliber = CALIBER_50 + caliber = CALIBER_50_PISTOL max_ammo = 7 multiple_sprites = AMMO_BOX_PER_BULLET diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm index 14c1d1550bd5..a4c033cc1a4e 100644 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm @@ -1,5 +1,5 @@ /obj/item/ammo_box/magazine/m10mm/rifle - name = "rifle magazine (10mm)" + name = "10-round magazine (10mm Auto)" desc = "A well-worn magazine fitted for the surplus rifle." icon_state = "75-8" base_icon_state = "75" @@ -11,7 +11,7 @@ icon_state = "[base_icon_state]-[ammo_count() ? "8" : "0"]" /obj/item/ammo_box/magazine/m556 - name = "toploader magazine (5.56mm)" + name = "30-round magazine (5.56x45mm)" icon_state = "5.56m" ammo_type = /obj/item/ammo_casing/a556 caliber = CALIBER_A556 @@ -19,5 +19,5 @@ multiple_sprites = AMMO_BOX_FULL_EMPTY /obj/item/ammo_box/magazine/m556/phasic - name = "toploader magazine (5.56mm Phasic)" + name = "30-round magazine (5.56x45mm phasic)" ammo_type = /obj/item/ammo_casing/a556/phasic diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm index f9b7a4fe83a8..100db7d2742f 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -4,7 +4,7 @@ icon_state = "m12gb" base_icon_state = "m12gb" ammo_type = /obj/item/ammo_casing/shotgun/buckshot - caliber = CALIBER_SHOTGUN + caliber = CALIBER_12GAUGE max_ammo = 8 /obj/item/ammo_box/magazine/m12g/update_icon_state() @@ -12,26 +12,26 @@ icon_state = "[base_icon_state]-[CEILING(ammo_count(FALSE)/8, 1)*8]" /obj/item/ammo_box/magazine/m12g/stun - name = "shotgun magazine (12g taser slugs)" + name = "8-round shotgun magazine (12g taser slugs)" icon_state = "m12gs" ammo_type = /obj/item/ammo_casing/shotgun/stunslug /obj/item/ammo_box/magazine/m12g/slug - name = "shotgun magazine (12g slugs)" + name = "8-round shotgun magazine (12g slugs)" icon_state = "m12gb" //this may need an unique sprite ammo_type = /obj/item/ammo_casing/shotgun /obj/item/ammo_box/magazine/m12g/dragon - name = "shotgun magazine (12g dragon's breath)" + name = "8-round shotgun magazine (12g dragon's breath)" icon_state = "m12gf" ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath /obj/item/ammo_box/magazine/m12g/bioterror - name = "shotgun magazine (12g bioterror)" + name = "8-round shotgun magazine (12g bioterror)" icon_state = "m12gt" ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror /obj/item/ammo_box/magazine/m12g/meteor - name = "shotgun magazine (12g meteor slugs)" + name = "8-round shotgun magazine (12g meteor slugs)" icon_state = "m12gbc" ammo_type = /obj/item/ammo_casing/shotgun/meteorslug diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index f45494f7c90d..17f1473e1f68 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -1,5 +1,5 @@ /obj/item/ammo_box/magazine/wt550m9 - name = "wt550 magazine (4.6x30mm)" + name = "20-round magazine (4.6x30mm)" icon_state = "46x30mmt-20" base_icon_state = "46x30mmt" ammo_type = /obj/item/ammo_casing/c46x30mm @@ -11,7 +11,7 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 4)]" /obj/item/ammo_box/magazine/wt550m9/wtap - name = "wt550 magazine (Armour Piercing 4.6x30mm)" + name = "20-round magazine (4.6x30mm armor piercing)" icon_state = "46x30mmtA-20" base_icon_state = "46x30mmtA" ammo_type = /obj/item/ammo_casing/c46x30mm/ap @@ -21,7 +21,7 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 4)]" /obj/item/ammo_box/magazine/wt550m9/wtic - name = "wt550 magazine (Incendiary 4.6x30mm)" + name = "20-round magazine (4.6x30mm incendiary)" icon_state = "46x30mmtI-20" base_icon_state = "46x30mmtI" ammo_type = /obj/item/ammo_casing/c46x30mm/inc @@ -31,7 +31,7 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 4)]" /obj/item/ammo_box/magazine/plastikov9mm - name = "PP-95 magazine (9mm)" + name = "50-round magazine (9x19mm)" icon_state = "9x19-50" base_icon_state = "9x19" ammo_type = /obj/item/ammo_casing/c9mm @@ -43,7 +43,7 @@ icon_state = "[base_icon_state]-[ammo_count() ? 50 : 0]" /obj/item/ammo_box/magazine/uzim9mm - name = "uzi magazine (9mm)" + name = "32-round magazine (9x19mm)" icon_state = "uzi9mm-32" base_icon_state = "uzi9mm" ammo_type = /obj/item/ammo_casing/c9mm @@ -55,7 +55,7 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 4)]" /obj/item/ammo_box/magazine/smgm9mm - name = "SMG magazine (9mm)" + name = "21-round magazine (9x19mm)" icon_state = "smg9mm-42" base_icon_state = "smg9mm" ammo_type = /obj/item/ammo_casing/c9mm @@ -67,15 +67,15 @@ icon_state = "[base_icon_state]-[ammo_count() ? 42 : 0]" /obj/item/ammo_box/magazine/smgm9mm/ap - name = "SMG magazine (Armour Piercing 9mm)" + name = "21-round magazine (9x19mm armor piercing)" ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/ammo_box/magazine/smgm9mm/fire - name = "SMG Magazine (Incendiary 9mm)" + name = "21-round magazine (9x19mm incendiary)" ammo_type = /obj/item/ammo_casing/c9mm/fire /obj/item/ammo_box/magazine/smgm45 - name = "SMG magazine (.45)" + name = "24-round magazine (.45 ACP)" icon_state = "c20r45-24" base_icon_state = "c20r45" ammo_type = /obj/item/ammo_casing/c45 @@ -87,15 +87,15 @@ icon_state = "[base_icon_state]-[round(ammo_count(), 2)]" /obj/item/ammo_box/magazine/smgm45/ap - name = "SMG magazine (Armour Piercing .45)" + name = "24-round magazine (.45 ACP armor piercing)" ammo_type = /obj/item/ammo_casing/c45/ap /obj/item/ammo_box/magazine/smgm45/incen - name = "SMG magazine (Incendiary .45)" + name = "24-round magazine (.45 ACP incendiary)" ammo_type = /obj/item/ammo_casing/c45/inc /obj/item/ammo_box/magazine/tommygunm45 - name = "drum magazine (.45)" + name = "50-round drum magazine (.45 ACP)" icon_state = "drum45" ammo_type = /obj/item/ammo_casing/c45 caliber = CALIBER_45 diff --git a/code/modules/projectiles/boxes_magazines/external/sniper.dm b/code/modules/projectiles/boxes_magazines/external/sniper.dm index 0cf429c1e00d..ea5d49fb40ce 100644 --- a/code/modules/projectiles/boxes_magazines/external/sniper.dm +++ b/code/modules/projectiles/boxes_magazines/external/sniper.dm @@ -1,31 +1,31 @@ /obj/item/ammo_box/magazine/sniper_rounds - name = "sniper rounds (.50)" + name = "6-round magazine (.50 BMG)" icon_state = ".50mag" base_icon_state = ".50mag" ammo_type = /obj/item/ammo_casing/p50 max_ammo = 6 - caliber = CALIBER_50 + caliber = CALIBER_50_RIFLE /obj/item/ammo_box/magazine/sniper_rounds/update_icon_state() . = ..() icon_state = "[base_icon_state][ammo_count() ? "-ammo" : ""]" /obj/item/ammo_box/magazine/sniper_rounds/soporific - name = "sniper rounds (Zzzzz)" + name = "3-round magazine (.50 Zzzzz)" desc = "Soporific sniper rounds, designed for happy days and dead quiet nights..." icon_state = "soporific" ammo_type = /obj/item/ammo_casing/p50/soporific max_ammo = 3 - caliber = CALIBER_50 + caliber = CALIBER_50_RIFLE /obj/item/ammo_box/magazine/sniper_rounds/penetrator - name = "sniper rounds (penetrator)" + name = "5-round magazine (.50 BMG penetrator)" desc = "An extremely powerful round capable of passing straight through cover and anyone unfortunate enough to be behind it." ammo_type = /obj/item/ammo_casing/p50/penetrator max_ammo = 5 /obj/item/ammo_box/magazine/sniper_rounds/marksman - name = "sniper rounds (marksman)" + name = "5-round magazine (.50 BMG high velocity)" desc = "An extremely fast sniper round able to pretty much instantly shoot through something." ammo_type = /obj/item/ammo_casing/p50/marksman max_ammo = 5 diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm index f972461de8a5..378e5760a95d 100644 --- a/code/modules/projectiles/boxes_magazines/external/toy.dm +++ b/code/modules/projectiles/boxes_magazines/external/toy.dm @@ -14,18 +14,12 @@ . = ..() icon_state = "[base_icon_state]-[ammo_count() ? 42 : 0]" -/obj/item/ammo_box/magazine/toy/smg/riot - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - /obj/item/ammo_box/magazine/toy/pistol name = "foam force pistol magazine" icon_state = "9x19p" max_ammo = 8 multiple_sprites = AMMO_BOX_FULL_EMPTY -/obj/item/ammo_box/magazine/toy/pistol/riot - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - /obj/item/ammo_box/magazine/toy/smgm45 name = "donksoft SMG magazine" icon_state = "c20r45-toy" @@ -38,10 +32,6 @@ . = ..() icon_state = "[base_icon_state]-[round(ammo_count(), 2)]" -/obj/item/ammo_box/magazine/toy/smgm45/riot - icon_state = "c20r45-riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - /obj/item/ammo_box/magazine/toy/m762 name = "donksoft box magazine" icon_state = "a762-toy" @@ -52,7 +42,3 @@ /obj/item/ammo_box/magazine/toy/m762/update_icon_state() . = ..() icon_state = "[base_icon_state]-[round(ammo_count(), 10)]" - -/obj/item/ammo_box/magazine/toy/m762/riot - icon_state = "a762-riot" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/boxes_magazines/external/tranqgun.dm b/code/modules/projectiles/boxes_magazines/external/tranqgun.dm index 21a33398c4a5..c856112411b0 100644 --- a/code/modules/projectiles/boxes_magazines/external/tranqgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/tranqgun.dm @@ -1,5 +1,5 @@ /obj/item/ammo_box/magazine/tranq_rifle - name = ".308 tranquilizer magazine" + name = "5-round magazine (.308 tranquilizer)" desc = "A magazine of tranquilizer darts." icon_state = ".50mag" base_icon_state = ".50mag" @@ -9,7 +9,7 @@ /obj/item/ammo_box/magazine/tranq_rifle/ryetalyn - name = ".308 ryetalyn magazine" + name = "5-round magazine (.308 ryetalyn)" desc = "A magazine of tranquilizer darts filled with ryetalyn." ammo_type = /obj/item/ammo_casing/caseless/safari_dart/ryetalyn max_ammo = 5 diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 7d881a11c4dc..9d431d1dfa23 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -15,7 +15,6 @@ ammo_type = /obj/item/ammo_casing/a357 caliber = CALIBER_357 max_ammo = 6 - multiload = FALSE /obj/item/ammo_box/magazine/internal/rus357/Initialize(mapload) stored_ammo += new ammo_type(src) diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 03e7621577d3..0fa21d1beadc 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -4,11 +4,10 @@ ammo_type = /obj/item/ammo_casing/a762 caliber = CALIBER_A762 max_ammo = 5 - multiload = TRUE /obj/item/ammo_box/magazine/internal/boltaction/pipegun name = "pipegun internal magazine" - caliber = CALIBER_SHOTGUN + caliber = CALIBER_12GAUGE ammo_type = /obj/item/ammo_casing/shotgun/improvised max_ammo = 1 diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index 25823693f381..d1acbbc52e72 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -1,9 +1,8 @@ /obj/item/ammo_box/magazine/internal/shot name = "shotgun internal magazine" ammo_type = /obj/item/ammo_casing/shotgun/beanbag - caliber = CALIBER_SHOTGUN + caliber = CALIBER_12GAUGE max_ammo = 4 - multiload = FALSE /obj/item/ammo_box/magazine/internal/shot/tube name = "dual feed shotgun internal tube" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index fb24323334a1..a26dd0e480ed 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -47,7 +47,7 @@ /* Suppression */ /// whether or not a message is displayed when fired - var/suppressed = null + var/obj/item/suppressed = null var/can_suppress = FALSE var/can_unsuppress = TRUE @@ -111,12 +111,12 @@ /obj/item/gun/Initialize(mapload) . = ..() if(pin) - pin = new pin(src) + pin = new pin(src, src) add_seclight_point() /obj/item/gun/Destroy() - if(isobj(pin)) //Can still be the initial path, then we skip + if(!ispath(pin)) //Can still be the initial path, then we skip QDEL_NULL(pin) QDEL_NULL(bayonet) @@ -153,6 +153,7 @@ suppressed = null update_appearance() + verbs -= /obj/item/gun/proc/user_remove_suppressor /obj/item/gun/examine(mob/user) . = ..() @@ -440,9 +441,25 @@ if(!fired && chambered?.loaded_projectile) chambered.loaded_projectile.damage /= 5 -/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins +/obj/item/gun/proc/unlock() if(pin) qdel(pin) - pin = new /obj/item/firing_pin + pin = new /obj/item/firing_pin(src, src) + +/obj/item/gun/proc/user_remove_suppressor() + set name = "Remove Suppressor" + set category = "Object" + set src in oview(1) + + if(!isliving(usr)) + return + + if(!usr.canUseTopic(src, USE_CLOSE|USE_DEXTERITY|USE_NEED_HANDS)) + return + + to_chat(usr, span_notice("You unscrew [suppressed] from [src].")) + if(!usr.put_in_hands(suppressed)) + suppressed.forceMove(drop_location()) + clear_suppressor() #undef FIRING_PIN_REMOVAL_DELAY diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index a87c8db39333..a9e20d1c1bd8 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -15,19 +15,19 @@ ///volume of loading sound var/load_sound_volume = 40 ///whether loading sound should vary - var/load_sound_vary = TRUE + var/load_sound_vary = FALSE ///sound of racking var/rack_sound = 'sound/weapons/gun/general/bolt_rack.ogg' ///volume of racking var/rack_sound_volume = 60 ///whether racking sound should vary - var/rack_sound_vary = TRUE + var/rack_sound_vary = FALSE ///sound of when the bolt is locked back manually var/lock_back_sound = 'sound/weapons/gun/general/slide_lock_1.ogg' ///volume of lock back var/lock_back_sound_volume = 60 ///whether lock back varies - var/lock_back_sound_vary = TRUE + var/lock_back_sound_vary = FALSE ///Sound of ejecting a magazine var/eject_sound = 'sound/weapons/gun/general/magazine_remove_full.ogg' ///sound of ejecting an empty magazine @@ -35,7 +35,7 @@ ///volume of ejecting a magazine var/eject_sound_volume = 40 ///whether eject sound should vary - var/eject_sound_vary = TRUE + var/eject_sound_vary = FALSE ///sound of dropping the bolt or releasing a slide var/bolt_drop_sound = 'sound/weapons/gun/general/bolt_drop.ogg' ///volume of bolt drop/slide release @@ -45,7 +45,7 @@ ///empty alarm volume sound var/empty_alarm_volume = 70 ///whether empty alarm sound varies - var/empty_alarm_vary = TRUE + var/empty_alarm_vary = FALSE ///Whether the gun will spawn loaded with a magazine var/spawnwithmagazine = TRUE @@ -61,17 +61,17 @@ var/empty_alarm = FALSE ///Whether the gun supports multiple special mag types var/special_mags = FALSE + + /** * The bolt type controls how the gun functions, and what iconstates you'll need to represent those functions. - * BOLT_TYPE_STANDARD - The Slide doesn't lock back. Clicking on it will only cycle the bolt. Only 1 sprite. - * BOLT_TYPE_OPEN - Same as standard, but it fires directly from the magazine - No need to rack. Doesn't hold the bullet when you drop the mag. - * BOLT_TYPE_LOCKING - This is most handguns and bolt action rifles. The bolt will lock back when it's empty. You need yourgun_bolt and yourgun_bolt_locked icon states. - * BOLT_TYPE_NO_BOLT - This is shotguns and revolvers. clicking will dump out all the bullets in the gun, spent or not. - * see combat.dm defines for bolt types: BOLT_TYPE_STANDARD; BOLT_TYPE_LOCKING; BOLT_TYPE_OPEN; BOLT_TYPE_NO_BOLT + * /datum/gun_bolt - The Slide doesn't lock back. Clicking on it will only cycle the bolt. Only 1 sprite. + * /datum/gun_bolt/open - Same as standard, but it fires directly from the magazine - No need to rack. Doesn't hold the bullet when you drop the mag. + * /datum/gun_bolt/locking - This is most handguns and bolt action rifles. The bolt will lock back when it's empty. You need yourgun_bolt and yourgun_bolt_locked icon states. + * /datum/gun_bolt/no_bolt - This is shotguns and revolvers. clicking will dump out all the bullets in the gun, spent or not. **/ - var/bolt_type = BOLT_TYPE_STANDARD - ///Used for locking bolt and open bolt guns. Set a bit differently for the two but prevents firing when true for both. - var/bolt_locked = FALSE + var/datum/gun_bolt/bolt = /datum/gun_bolt + var/show_bolt_icon = TRUE ///Hides the bolt icon. ///Whether the gun has to be racked each shot or not. var/semi_auto = TRUE @@ -79,7 +79,7 @@ var/obj/item/ammo_box/magazine/magazine ///whether the gun ejects the chambered casing var/casing_ejector = TRUE - ///Whether the gun has an internal magazine or a detatchable one. Overridden by BOLT_TYPE_NO_BOLT. + ///Whether the gun has an internal magazine or a detatchable one. Overridden by /datum/gun_bolt/no_bolt. var/internal_magazine = FALSE ///Phrasing of the bolt in examine and notification messages; ex: bolt, slide, etc. var/bolt_wording = "bolt" @@ -87,12 +87,13 @@ var/magazine_wording = "magazine" ///Phrasing of the cartridge in examine and notification messages; ex: bullet, shell, dart, etc. var/cartridge_wording = "bullet" + /// If TRUE, will show the caliber name on examine. Set to false for things with fake calibers like bows and the tentacle "gun". + var/show_caliber_on_examine = TRUE + ///length between individual racks var/rack_delay = 5 ///time of the most recent rack, used for cooldown purposes var/recent_rack = 0 - ///Whether the gun can be tacloaded by slapping a fresh magazine directly on it - var/tac_reloads = TRUE //Snowflake mechanic no more. ///Whether the gun can be sawn off by sawing tools var/can_be_sawn_off = FALSE var/flip_cooldown = 0 @@ -129,42 +130,45 @@ /obj/item/gun/ballistic/Initialize(mapload) . = ..() + + bolt = new bolt(src) + if (!spawnwithmagazine) - bolt_locked = TRUE + bolt.is_locked = TRUE update_appearance() return + if (!magazine) magazine = new mag_type(src) - if(bolt_type == BOLT_TYPE_STANDARD || internal_magazine) //Internal magazines shouldn't get magazine + 1. + + initial_caliber = magazine.caliber + + if((bolt.type == /datum/gun_bolt) || internal_magazine) //Internal magazines shouldn't get magazine + 1. chamber_round() else chamber_round(replace_new_round = TRUE) + update_appearance() RegisterSignal(src, COMSIG_ITEM_RECHARGED, PROC_REF(instant_reload)) /obj/item/gun/ballistic/Destroy() QDEL_NULL(magazine) + QDEL_NULL(bolt) return ..() /obj/item/gun/ballistic/vv_edit_var(vname, vval) . = ..() - if(vname in list(NAMEOF(src, suppressor_x_offset), NAMEOF(src, suppressor_y_offset), NAMEOF(src, internal_magazine), NAMEOF(src, magazine), NAMEOF(src, chambered), NAMEOF(src, empty_indicator), NAMEOF(src, sawn_off), NAMEOF(src, bolt_locked), NAMEOF(src, bolt_type))) + if(vname in list(NAMEOF(src, suppressor_x_offset), NAMEOF(src, suppressor_y_offset), NAMEOF(src, internal_magazine), NAMEOF(src, magazine), NAMEOF(src, chambered), NAMEOF(src, empty_indicator), NAMEOF(src, sawn_off), NAMEOF(src, bolt))) update_appearance() /obj/item/gun/ballistic/update_icon_state() - if(current_skin) - icon_state = "[unique_reskin[current_skin]][sawn_off ? "_sawn" : ""]" - else - icon_state = "[base_icon_state || initial(icon_state)][sawn_off ? "_sawn" : ""]" + icon_state = "[base_icon_state || initial(icon_state)][sawn_off ? "_sawn" : ""]" return ..() /obj/item/gun/ballistic/update_overlays() . = ..() if(show_bolt_icon) - if (bolt_type == BOLT_TYPE_LOCKING) - . += "[icon_state]_bolt[bolt_locked ? "_locked" : ""]" - if (bolt_type == BOLT_TYPE_OPEN && bolt_locked) - . += "[icon_state]_bolt" + . += bolt?.get_overlays() //update_overlays() can get called during Destroy() if(suppressed) var/mutable_appearance/MA = mutable_appearance(icon, "[icon_state]_suppressor") @@ -236,36 +240,28 @@ /obj/item/gun/ballistic/proc/chamber_round(keep_bullet = FALSE, spin_cylinder, replace_new_round) if (chambered || !magazine) return - if (magazine.ammo_count()) - chambered = magazine.get_round(keep_bullet || bolt_type == BOLT_TYPE_NO_BOLT) - if (bolt_type != BOLT_TYPE_OPEN) - chambered.forceMove(src) - if(replace_new_round) - magazine.give_round(new chambered.type) -///updates a bunch of racking related stuff and also handles the sound effects and the like -/obj/item/gun/ballistic/proc/rack(mob/user = null) - if (bolt_type == BOLT_TYPE_NO_BOLT) //If there's no bolt, nothing to rack + if (!magazine.ammo_count()) return - if (bolt_type == BOLT_TYPE_OPEN) - if(!bolt_locked) //If it's an open bolt, racking again would do nothing - if (user) - to_chat(user, span_notice("[src]'s [bolt_wording] is already cocked!")) - return + chambered = magazine.get_round(keep_bullet || istype(bolt, /datum/gun_bolt/no_bolt)) - bolt_locked = FALSE + if (!istype(bolt, /datum/gun_bolt/open)) + chambered.forceMove(src) + if(replace_new_round) + magazine.give_round(new chambered.type) + +///updates a bunch of racking related stuff and also handles the sound effects and the like +/obj/item/gun/ballistic/proc/rack(mob/user = null) + if(bolt.pre_rack(user)) + return if (user) to_chat(user, span_notice("You rack the [bolt_wording] of [src].")) update_chamber(!chambered, FALSE) - if (bolt_type == BOLT_TYPE_LOCKING && !chambered) - bolt_locked = TRUE - playsound(src, lock_back_sound, lock_back_sound_volume, lock_back_sound_vary) - else - playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + bolt.post_rack() update_appearance() @@ -274,8 +270,9 @@ playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) if (user) to_chat(user, span_notice("You drop the [bolt_wording] of [src].")) + chamber_round() - bolt_locked = FALSE + bolt.is_locked = FALSE update_appearance() ///Handles all the logic needed for magazine insertion @@ -283,43 +280,65 @@ if(!istype(AM, mag_type)) to_chat(user, span_warning("[AM] doesn't seem to fit into [src]...")) return FALSE + if(user.transferItemToLoc(AM, src)) magazine = AM if (display_message) - to_chat(user, span_notice("You load a new [magazine_wording] into [src].")) - playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) - if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) - chamber_round(TRUE) + to_chat(user, span_notice("You load [AM] into [src].")) + + if (magazine.ammo_count()) + playsound(src, load_sound, load_sound_volume, load_sound_vary) + else + playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) + + bolt.magazine_inserted() update_appearance() return TRUE + else to_chat(user, span_warning("You cannot seem to get [src] out of your hands!")) return FALSE ///Handles all the logic of magazine ejection, if tac_load is set that magazine will be tacloaded in the place of the old eject -/obj/item/gun/ballistic/proc/eject_magazine(mob/user, display_message = TRUE, obj/item/ammo_box/magazine/tac_load = null) - if(bolt_type == BOLT_TYPE_OPEN) - chambered = null +/obj/item/gun/ballistic/proc/eject_magazine(mob/user, display_message = TRUE) + if(internal_magazine || !magazine) + return FALSE // fuck off + + bolt.magazine_ejected() + if (magazine.ammo_count()) - playsound(src, load_sound, load_sound_volume, load_sound_vary) - else - playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) - magazine.forceMove(drop_location()) - var/obj/item/ammo_box/magazine/old_mag = magazine - if (tac_load) - if (insert_magazine(user, tac_load, FALSE)) - to_chat(user, span_notice("You perform a tactical reload on [src].")) - else - to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing.")) - magazine = null + playsound(src, eject_sound, eject_sound_volume, eject_sound_vary) else - magazine = null - user.put_in_hands(old_mag) + playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_vary) + + var/obj/item/ammo_box/old_mag = magazine + magazine = null + + if(!user.put_in_hands(old_mag)) + old_mag.forceMove(drop_location()) old_mag.update_appearance() + if (display_message) - to_chat(user, span_notice("You pull the [magazine_wording] out of [src].")) + to_chat(user, span_notice("You pull [old_mag] out of [src].")) update_appearance() + return TRUE + +/// Removes the magazine from the weapon, or ejects all of it's ammo, based on the bolt type. +/obj/item/gun/ballistic/proc/unload(mob/user) + if(bolt.unload(user)) + return + + if(internal_magazine) + return + + if(!magazine) + to_chat(user, span_warning("There is no magazine in [src].")) + return + + unwield(user) + eject_magazine(user, TRUE) + /obj/item/gun/ballistic/can_fire() return chambered?.loaded_projectile @@ -327,45 +346,51 @@ . = ..() if (.) return + if (!internal_magazine && istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if (!magazine) insert_magazine(user, AM) else - if (tac_reloads) - eject_magazine(user, FALSE, AM) - else - to_chat(user, span_notice("There's already a [magazine_wording] in [src].")) + to_chat(user, span_warning("There is already a [magazine_wording] in [src].")) return + if (isammocasing(A) || istype(A, /obj/item/ammo_box)) - if (bolt_type == BOLT_TYPE_NO_BOLT || internal_magazine) + if (istype(bolt, /datum/gun_bolt/no_bolt) || internal_magazine) if (chambered && !chambered.loaded_projectile) chambered.forceMove(drop_location()) chambered = null - var/num_loaded = magazine?.attackby(A, user, params, TRUE) + + var/num_loaded = magazine?.attempt_load_round(A, user, params, TRUE) if (num_loaded) to_chat(user, span_notice("You load [num_loaded] [cartridge_wording]\s into [src].")) playsound(src, load_sound, load_sound_volume, load_sound_vary) - if (chambered == null && bolt_type == BOLT_TYPE_NO_BOLT) - chamber_round() + + bolt.loaded_ammo() + A.update_appearance() update_appearance() return + if(istype(A, /obj/item/suppressor)) var/obj/item/suppressor/S = A if(!can_suppress) to_chat(user, span_warning("You can't seem to figure out how to fit [S] on [src]!")) return + if(!user.is_holding(src)) to_chat(user, span_warning("You need be holding [src] to fit [S] to it!")) return + if(suppressed) to_chat(user, span_warning("[src] already has a suppressor!")) return + if(user.transferItemToLoc(A, src)) to_chat(user, span_notice("You attach [S] to [src].")) install_suppressor(A) return + if (can_be_sawn_off) if (sawoff(user, A)) return @@ -392,6 +417,7 @@ suppressed = S w_class += S.w_class //so pistols do not fit in pockets when suppressed update_appearance() + verbs += /obj/item/gun/proc/user_remove_suppressor /obj/item/gun/ballistic/clear_suppressor() if(!can_unsuppress) @@ -401,26 +427,9 @@ w_class -= I.w_class return ..() -/obj/item/gun/ballistic/AltClick(mob/user) - if (unique_reskin && !current_skin && user.canUseTopic(src, USE_CLOSE|USE_DEXTERITY)) - reskin_obj(user) - return - if(loc == user) - if(suppressed && can_unsuppress) - var/obj/item/suppressor/S = suppressed - if(!user.is_holding(src)) - return ..() - to_chat(user, span_notice("You unscrew [S] from [src].")) - user.put_in_hands(S) - clear_suppressor() - /obj/item/gun/ballistic/before_firing(atom/target, mob/user) . = ..() - if (!chambered && !get_ammo()) - if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) - bolt_locked = TRUE - playsound(src, bolt_drop_sound, bolt_drop_sound_volume) - update_appearance() + bolt.before_firing() /obj/item/gun/ballistic/after_firing(mob/living/user, pointblank, atom/pbtarget, message) . = ..() @@ -440,16 +449,22 @@ playsound(src, empty_alarm_sound, empty_alarm_volume, empty_alarm_vary) update_appearance() - if (bolt_type == BOLT_TYPE_LOCKING) - bolt_locked = TRUE - update_appearance() + bolt.after_chambering() -//ATTACK HAND IGNORING PARENT RETURN VALUE -/obj/item/gun/ballistic/attack_hand(mob/user, list/modifiers) - if(!internal_magazine && loc == user && user.is_holding(src) && magazine) - eject_magazine(user) +/obj/item/gun/ballistic/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return - return ..() + + if(modifiers?[RIGHT_CLICK] && !internal_magazine && magazine && user.is_holding(src)) + unload(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/gun/ballistic/AltClick(mob/user) + if(!isliving(user) || !user.canUseTopic(src, USE_CLOSE|USE_NEED_HANDS|USE_DEXTERITY)) + return + + unload(user) /obj/item/gun/ballistic/attack_self(mob/living/user) if(HAS_TRAIT(user, TRAIT_GUNFLIP)) @@ -466,60 +481,47 @@ playsound(src, 'sound/items/handling/ammobox_pickup.ogg', 20, FALSE) return - // You only need 1 hand to eject the magazine - if(!internal_magazine && magazine) - if(!magazine.ammo_count()) - eject_magazine(user) - return - // They need two hands on the gun, or a free hand in general. if(!wielded && !user.get_empty_held_index()) to_chat(user, span_warning("You need a free hand to do that!")) return - if(bolt_type == BOLT_TYPE_NO_BOLT) - chambered = null - var/num_unloaded = 0 - - for(var/obj/item/ammo_casing/CB in get_ammo_list(FALSE, TRUE)) - CB.forceMove(drop_location()) - CB.bounce_away(FALSE, NONE) - num_unloaded++ - var/turf/T = get_turf(drop_location()) - if(T && is_station_level(T.z)) - SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name) - - if (num_unloaded) - to_chat(user, span_notice("You unload [num_unloaded] [cartridge_wording]\s from [src].")) - playsound(user, eject_sound, eject_sound_volume, eject_sound_vary) - update_appearance() - else - to_chat(user, span_warning("[src] is empty!")) - return - - if(bolt_type == BOLT_TYPE_LOCKING && bolt_locked) - drop_bolt(user) + if(bolt.attack_self(user)) return - if (recent_rack > world.time) + if(!COOLDOWN_FINISHED(src, recent_rack)) return - recent_rack = world.time + rack_delay + COOLDOWN_START(src, recent_rack, rack_delay) rack(user) return +/obj/item/gun/ballistic/attack_self_secondary(mob/user, modifiers) + . = ..() + if(.) + return + + unload(user) + return TRUE /obj/item/gun/ballistic/examine(mob/user) . = ..() - var/count_chambered = !(bolt_type == BOLT_TYPE_NO_BOLT || bolt_type == BOLT_TYPE_OPEN) - . += "It has [get_ammo(count_chambered)] round\s remaining." - if (!chambered && !hidden_chambered) - . += "It does not seem to have a round chambered." - if (bolt_locked) - . += "The [bolt_wording] is locked back and needs to be released before firing or de-fouling." + if(show_caliber_on_examine) + . += "It is chambered in [initial_caliber]." + + if(chambered && !hidden_chambered) + . += "It has a round in the chamber." + + if (bolt.is_locked) + . += "The [bolt_wording] is locked." + if (suppressed) . += "It has a suppressor attached that can be removed with alt+click." + + if(magazine && internal_magazine) + . += span_notice(magazine.get_ammo_desc()) + if(can_misfire) . += span_danger("You get the feeling this might explode if you fire it....") if(misfire_probability > 0) @@ -643,12 +645,12 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( if(!can_modify_ammo) return - if(bolt_type == BOLT_TYPE_STANDARD) + if(bolt.type == /datum/gun_bolt) if(get_ammo()) to_chat(user, span_notice("You can't get at the internals while the gun has a bullet in it!")) return - else if(!bolt_locked) + else if(!bolt.is_locked) to_chat(user, span_notice("You can't get at the internals while the bolt is down!")) return @@ -661,18 +663,19 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( user.visible_message(span_danger("[src] goes off!"), span_danger("[src] goes off in your face!")) return - if(magazine.caliber == initial_caliber) - magazine.caliber = alternative_caliber - if(alternative_ammo_misfires) - can_misfire = TRUE - fire_sound = alternative_fire_sound - to_chat(user, span_notice("You modify [src]. Now it will fire [alternative_caliber] rounds.")) - else - magazine.caliber = initial_caliber - if(alternative_ammo_misfires) - can_misfire = FALSE - fire_sound = initial_fire_sound - to_chat(user, span_notice("You reset [src]. Now it will fire [initial_caliber] rounds.")) + if(alternative_caliber) + if(magazine.caliber == initial_caliber) + magazine.caliber = alternative_caliber + if(alternative_ammo_misfires) + can_misfire = TRUE + fire_sound = alternative_fire_sound + to_chat(user, span_notice("You modify [src]. Now it will fire [alternative_caliber] rounds.")) + else + magazine.caliber = initial_caliber + if(alternative_ammo_misfires) + can_misfire = FALSE + fire_sound = initial_fire_sound + to_chat(user, span_notice("You reset [src]. Now it will fire [initial_caliber] rounds.")) ///used for sawing guns, causes the gun to fire without the input of the user diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index a32a5828903f..60de956508df 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -54,16 +54,13 @@ mag_display = TRUE empty_indicator = TRUE mag_type = /obj/item/ammo_box/magazine/smgm9mm - pin = null - bolt_type = BOLT_TYPE_LOCKING + bolt = /datum/gun_bolt/locking show_bolt_icon = FALSE /obj/item/gun/ballistic/automatic/proto/Initialize(mapload) . = ..() AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) -/obj/item/gun/ballistic/automatic/proto/unrestricted - pin = /obj/item/firing_pin /obj/item/gun/ballistic/automatic/c20r name = "\improper C-20r SMG" @@ -74,7 +71,6 @@ mag_type = /obj/item/ammo_box/magazine/smgm45 fire_delay = 2 burst_size = 3 - pin = /obj/item/firing_pin/implant/pindicate can_bayonet = TRUE knife_x_offset = 26 knife_y_offset = 12 @@ -87,9 +83,6 @@ if(!chambered && empty_indicator) //this is duplicated due to a layering issue with the select fire icon. . += "[icon_state]_empty" -/obj/item/gun/ballistic/automatic/c20r/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/c20r/Initialize(mapload) . = ..() update_appearance() @@ -139,7 +132,7 @@ icon_state = "miniuzi" mag_type = /obj/item/ammo_box/magazine/uzim9mm burst_size = 2 - bolt_type = BOLT_TYPE_OPEN + bolt = /datum/gun_bolt/open show_bolt_icon = FALSE mag_display = TRUE rack_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' @@ -155,10 +148,13 @@ mag_type = /obj/item/ammo_box/magazine/m556 can_suppress = FALSE var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel + burst_size = 3 fire_delay = 2 + spread = 5 - pin = /obj/item/firing_pin/implant/pindicate + unwielded_spread_bonus = 15 + mag_display = TRUE empty_indicator = TRUE fire_sound = 'sound/weapons/gun/smg/shot_alt.ogg' @@ -172,14 +168,6 @@ QDEL_NULL(underbarrel) return ..() -/obj/item/gun/ballistic/automatic/m90/unrestricted - pin = /obj/item/firing_pin - -/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize(mapload) - . = ..() - underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src) - update_appearance() - /obj/item/gun/ballistic/automatic/m90/afterattack_secondary(atom/target, mob/living/user, flag, params) underbarrel.afterattack(target, user, flag, params) return SECONDARY_ATTACK_CONTINUE_CHAIN @@ -213,7 +201,7 @@ burst_size = 1 actions_types = list() fire_delay = 1 - bolt_type = BOLT_TYPE_OPEN + bolt = /datum/gun_bolt/open empty_indicator = TRUE show_bolt_icon = FALSE @@ -249,24 +237,18 @@ unwielded_spread_bonus = 20 burst_size = 1 - pin = /obj/item/firing_pin/implant/pindicate - bolt_type = BOLT_TYPE_OPEN + bolt = /datum/gun_bolt/open can_suppress = FALSE show_bolt_icon = FALSE mag_display = TRUE mag_display_ammo = TRUE - tac_reloads = FALSE - fire_sound = 'sound/weapons/gun/l6/shot.ogg' rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg' suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' var/cover_open = FALSE -/obj/item/gun/ballistic/automatic/l6_saw/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/l6_saw/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) @@ -368,7 +350,6 @@ desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work." can_suppress = TRUE can_unsuppress = TRUE - pin = /obj/item/firing_pin/implant/pindicate // Old Semi-Auto Rifle // diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm index 2956aabfd2df..26f7ceb2a8dd 100644 --- a/code/modules/projectiles/guns/ballistic/bow.dm +++ b/code/modules/projectiles/guns/ballistic/bow.dm @@ -14,8 +14,9 @@ w_class = WEIGHT_CLASS_BULKY internal_magazine = TRUE cartridge_wording = "arrow" - bolt_type = BOLT_TYPE_NO_BOLT + bolt = /datum/gun_bolt/no_bolt recoil = 0 // Bows don't have recoil. + show_caliber_on_examine = FALSE var/drawn = FALSE diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 536d39b377f0..bbf835c4d422 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -1,7 +1,7 @@ //KEEP IN MIND: These are different from gun/grenadelauncher. These are designed to shoot premade rocket and grenade projectiles, not flashbangs or chemistry casings etc. //Put handheld rocket launchers here if someone ever decides to make something so hilarious ~Paprika -/obj/item/gun/ballistic/revolver/grenadelauncher//this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes +/obj/item/gun/ballistic/revolver/grenadelauncher //this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes desc = "A break-operated grenade launcher." name = "grenade launcher" icon_state = "dshotgun_sawn" @@ -9,11 +9,7 @@ mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg' w_class = WEIGHT_CLASS_NORMAL - pin = /obj/item/firing_pin/implant/pindicate - bolt_type = BOLT_TYPE_NO_BOLT - -/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted - pin = /obj/item/firing_pin + bolt = /datum/gun_bolt/no_bolt /obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params) ..() @@ -52,15 +48,13 @@ fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE - pin = /obj/item/firing_pin/implant/pindicate burst_size = 1 fire_delay = 0 casing_ejector = FALSE - bolt_type = BOLT_TYPE_NO_BOLT + bolt = /datum/gun_bolt/no_bolt internal_magazine = TRUE cartridge_wording = "rocket" empty_indicator = TRUE - tac_reloads = FALSE /// Do we shit flames behind us when we fire? var/backblast = TRUE @@ -70,9 +64,6 @@ if(backblast) AddElement(/datum/element/backblast) -/obj/item/gun/ballistic/rocketlauncher/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/rocketlauncher/nobackblast name = "flameless PML-11" desc = "A reusable rocket propelled grenade launcher. This one has been fitted with a special coolant loop to avoid embarassing teamkill 'accidents' from backblast." diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 8a1943de3c9b..612f23f5660c 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -8,7 +8,7 @@ burst_size = 1 fire_delay = 0 actions_types = list() - bolt_type = BOLT_TYPE_LOCKING + bolt = /datum/gun_bolt/locking fire_sound = 'sound/weapons/gun/pistol/shot.ogg' dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg' suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg' @@ -37,7 +37,7 @@ /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" - desc = "A classic .45 handgun with a small magazine capacity." + desc = "A classic .45 ACP handgun with an 8-round magazine capacity." icon_state = "m1911" w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/m45 @@ -56,6 +56,7 @@ icon_state = "deagle" force = 14 mag_type = /obj/item/ammo_box/magazine/m50 + w_class = WEIGHT_CLASS_NORMAL can_suppress = FALSE mag_display = TRUE fire_sound = 'sound/weapons/gun/rifle/shot.ogg' @@ -74,8 +75,8 @@ inhand_icon_state = "deagleg" /obj/item/gun/ballistic/automatic/pistol/aps - name = "\improper Stechkin APS machine pistol" - desc = "An old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." + name = "\improper Stechkin pistol" + desc = "A fast-firing a handgun chambered in 9x19mm Parabellum. Utilizes 15 round magazines and kicks like a mule. Has a threaded barrel for suppressors." icon_state = "aps" w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/m9mm_aps @@ -85,21 +86,3 @@ spread = 10 actions_types = list(/datum/action/item_action/toggle_firemode) suppressor_x_offset = 6 - -/obj/item/gun/ballistic/automatic/pistol/stickman - name = "flat gun" - desc = "A 2 dimensional gun.. what?" - icon_state = "flatgun" - mag_display = FALSE - show_bolt_icon = FALSE - -/obj/item/gun/ballistic/automatic/pistol/stickman/equipped(mob/user, slot) - ..() - to_chat(user, span_notice("As you try to manipulate [src], it slips out of your possession..")) - if(prob(50)) - to_chat(user, span_notice("..and vanishes from your vision! Where the hell did it go?")) - qdel(src) - user.update_icons() - else - to_chat(user, span_notice("..and falls into view. Whew, that was a close one.")) - user.dropItemToGround(src) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 407bee8f3bc1..b78270525c9f 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -10,8 +10,7 @@ dry_fire_sound = 'sound/weapons/gun/revolver/dry_fire.ogg' casing_ejector = FALSE internal_magazine = TRUE - bolt_type = BOLT_TYPE_NO_BOLT - tac_reloads = FALSE + bolt = /datum/gun_bolt/no_bolt var/spin_delay = 10 var/recent_spin = 0 var/last_fire = 0 diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index df7d0a93ffd7..c6c7223f4010 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -7,7 +7,7 @@ worn_icon_state = "moistnugget" mag_type = /obj/item/ammo_box/magazine/internal/boltaction bolt_wording = "bolt" - bolt_type = BOLT_TYPE_LOCKING + bolt = /datum/gun_bolt/locking semi_auto = FALSE internal_magazine = TRUE fire_sound = 'sound/weapons/gun/rifle/shot.ogg' @@ -15,36 +15,36 @@ rack_sound = 'sound/weapons/gun/rifle/bolt_out.ogg' bolt_drop_sound = 'sound/weapons/gun/rifle/bolt_in.ogg' - tac_reloads = FALSE - accuracy_falloff = 2 //Rifles are extremely accurate unwielded_spread_bonus = 50 /obj/item/gun/ballistic/rifle/rack(mob/user = null) - if (bolt_locked == FALSE) + if (bolt.is_locked == FALSE) // The bolt is closed to_chat(user, span_notice("You open the bolt of \the [src].")) playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + update_chamber(FALSE, FALSE, FALSE) - bolt_locked = TRUE + + bolt.is_locked = TRUE update_appearance() return drop_bolt(user) /obj/item/gun/ballistic/rifle/can_fire() - if (bolt_locked) + if(bolt.is_locked) return FALSE return ..() /obj/item/gun/ballistic/rifle/attackby(obj/item/A, mob/user, params) - if (!bolt_locked && !istype(A, /obj/item/stack/sheet/cloth)) + if (!bolt.is_locked && !istype(A, /obj/item/stack/sheet/cloth)) to_chat(user, span_notice("The bolt is closed!")) return return ..() /obj/item/gun/ballistic/rifle/examine(mob/user) . = ..() - . += "The bolt is [bolt_locked ? "open" : "closed"]." + . += "The bolt is [bolt.is_locked ? "open" : "closed"]." /////////////////////// // BOLT ACTION RIFLE // @@ -102,13 +102,14 @@ /obj/item/gun/ballistic/rifle/boltaction/attackby(obj/item/item, mob/user, params) . = ..() - if(can_jam) - if(bolt_locked) - if(istype(item, /obj/item/gun_maintenance_supplies)) - if(do_after(user, 10 SECONDS, target = src)) - user.visible_message(span_notice("[user] finishes maintenance of [src].")) - jamming_chance = 10 - qdel(item) + if(!can_jam || !bolt.is_locked) + return + + if(istype(item, /obj/item/gun_maintenance_supplies)) + if(do_after(user, 10 SECONDS, target = src)) + user.visible_message(span_notice("[user] finishes maintenance of [src].")) + jamming_chance = 10 + qdel(item) /obj/item/gun/ballistic/rifle/boltaction/blow_up(mob/user) . = FALSE @@ -160,7 +161,7 @@ inhand_y_dimension = 64 fire_sound = 'sound/weapons/gun/sniper/shot.ogg' mag_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun - initial_caliber = CALIBER_SHOTGUN + initial_caliber = CALIBER_12GAUGE alternative_caliber = CALIBER_A762 initial_fire_sound = 'sound/weapons/gun/sniper/shot.ogg' alternative_fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 8688e9467876..1fd0b17c5ad2 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -22,7 +22,6 @@ casing_ejector = FALSE bolt_wording = "pump" cartridge_wording = "shell" - tac_reloads = FALSE pb_knockback = 2 unwielded_spread_bonus = 40 @@ -136,8 +135,6 @@ can_suppress = FALSE burst_size = 1 fire_delay = 0 - - pin = /obj/item/firing_pin/implant/pindicate fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg' actions_types = list() mag_display = TRUE @@ -147,7 +144,6 @@ mag_display_ammo = TRUE semi_auto = TRUE internal_magazine = FALSE - tac_reloads = TRUE ///the type of secondary magazine for the bulldog var/secondary_magazine_type ///the secondary magazine @@ -238,8 +234,6 @@ playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) update_appearance() -/obj/item/gun/ballistic/shotgun/bulldog/unrestricted - pin = /obj/item/firing_pin ///////////////////////////// // DOUBLE BARRELED SHOTGUN // ///////////////////////////// @@ -258,23 +252,11 @@ sawn_desc = "Omar's coming!" obj_flags = UNIQUE_RENAME rack_sound_volume = 0 - unique_reskin = list("Default" = "dshotgun", - "Dark Red Finish" = "dshotgun_d", - "Ash" = "dshotgun_f", - "Faded Grey" = "dshotgun_g", - "Maple" = "dshotgun_l", - "Rosewood" = "dshotgun_p" - ) semi_auto = TRUE - bolt_type = BOLT_TYPE_NO_BOLT + bolt = /datum/gun_bolt/no_bolt can_be_sawn_off = TRUE pb_knockback = 3 // it's a super shotgun! -/obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user) - . = ..() - if(unique_reskin && !current_skin && user.canUseTopic(src, USE_CLOSE|USE_DEXTERITY)) - reskin_obj(user) - /obj/item/gun/ballistic/shotgun/doublebarrel/slugs name = "hunting shotgun" desc = "A hunting shotgun used by the wealthy to hunt \"game\"." diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 3cadf09efc6d..e88a79d5256f 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -15,9 +15,6 @@ gun_flags = TOY_FIREARM_OVERLAY | NOT_A_REAL_GUN casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/toy/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/automatic/pistol/toy name = "foam force pistol" desc = "A small, easily concealable toy handgun. Ages 8 and up." @@ -25,13 +22,6 @@ fire_sound = 'sound/items/syringeproj.ogg' gun_flags = TOY_FIREARM_OVERLAY | NOT_A_REAL_GUN -/obj/item/gun/ballistic/automatic/pistol/toy/riot - mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot - -/obj/item/gun/ballistic/automatic/pistol/riot/Initialize(mapload) - magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) - return ..() - /obj/item/gun/ballistic/shotgun/toy name = "foam force shotgun" desc = "A toy shotgun with wood furniture and a four-shell capacity underneath. Ages 8 and up." @@ -51,9 +41,6 @@ if(chambered && !chambered.loaded_projectile) qdel(chambered) -/obj/item/gun/ballistic/shotgun/toy/unrestricted - pin = /obj/item/firing_pin - /obj/item/gun/ballistic/shotgun/toy/crossbow name = "foam force crossbow" desc = "A weapon favored by many overactive children. Ages 8 and up." @@ -77,32 +64,18 @@ desc = "A bullpup three-round burst toy SMG, designated 'C-20r'. Ages 8 and up." can_suppress = TRUE item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot + mag_type = /obj/item/ammo_box/magazine/toy/smgm45 casing_ejector = FALSE clumsy_check = FALSE gun_flags = TOY_FIREARM_OVERLAY|NOT_A_REAL_GUN -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/smgm45 - -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot - mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot - /obj/item/gun/ballistic/automatic/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts. name = "donksoft LMG" desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." fire_sound = 'sound/items/syringeproj.ogg' can_suppress = FALSE item_flags = NONE - mag_type = /obj/item/ammo_box/magazine/toy/m762/riot + mag_type = /obj/item/ammo_box/magazine/toy/m762 casing_ejector = FALSE clumsy_check = FALSE gun_flags = TOY_FIREARM_OVERLAY|NOT_A_REAL_GUN - -/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted //Use this for actual toys - pin = /obj/item/firing_pin - mag_type = /obj/item/ammo_box/magazine/toy/m762 - -/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot - mag_type = /obj/item/ammo_box/magazine/toy/m762/riot diff --git a/code/modules/projectiles/guns/bolt_types/_gun_bolt.dm b/code/modules/projectiles/guns/bolt_types/_gun_bolt.dm new file mode 100644 index 000000000000..eb0bf40524f7 --- /dev/null +++ b/code/modules/projectiles/guns/bolt_types/_gun_bolt.dm @@ -0,0 +1,52 @@ +///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted. +/// Example: c20, shotguns, m90 +/datum/gun_bolt + var/obj/item/gun/ballistic/parent + var/is_locked = FALSE + +/datum/gun_bolt/New(obj/item/gun/parent) + src.parent = parent + +/datum/gun_bolt/Destroy(force, ...) + parent = null + return ..() + +/// Returns overlays for a gun's update_overlays() +/datum/gun_bolt/proc/get_overlays() + return + +/// Called during attack_self(). Return TRUE to cancel the rest of the proc. +/datum/gun_bolt/proc/attack_self(mob/living/user) + return + +/// Called at the start of rack(), return TRUE to cancel the rest of the proc. +/datum/gun_bolt/proc/pre_rack(mob/user) + return + +/// Called after rack(), before update_appearance() +/datum/gun_bolt/proc/post_rack(mob/user) + playsound(parent, parent.rack_sound, parent.rack_sound_volume, parent.rack_sound_vary) + +/// Called when ammo was successfully loaded into the weapon. +/datum/gun_bolt/proc/loaded_ammo() + return + +/// Called after a magazine is successfully inserted into the firearm. +/datum/gun_bolt/proc/magazine_inserted() + return + +/// Called when a magazine is about to be ejected. +/datum/gun_bolt/proc/magazine_ejected() + return + +/// Called at the start of unload(), return TRUE to cancel the rest of the proc. +/datum/gun_bolt/proc/unload(mob/user) + return + +/// Called during before_firing() +/datum/gun_bolt/proc/before_firing() + return + +/// Called at the foot of after_chambering() +/datum/gun_bolt/proc/after_chambering() + return diff --git a/code/modules/projectiles/guns/bolt_types/locking_bolt.dm b/code/modules/projectiles/guns/bolt_types/locking_bolt.dm new file mode 100644 index 000000000000..318ca769eaed --- /dev/null +++ b/code/modules/projectiles/guns/bolt_types/locking_bolt.dm @@ -0,0 +1,23 @@ +///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. +/// Example: Pistols with a slide lock, some SMGs +/datum/gun_bolt/locking + +/datum/gun_bolt/locking/get_overlays() + return "[parent.icon_state]_bolt[is_locked ? "_locked" : ""]" + +/datum/gun_bolt/locking/post_rack(mob/user) + if (parent.chambered) + return ..() + + is_locked = TRUE + playsound(parent, parent.lock_back_sound, parent.lock_back_sound_volume, parent.lock_back_sound_vary) + +/datum/gun_bolt/locking/after_chambering() + if (!parent.chambered && !parent.get_ammo()) + is_locked = TRUE + parent.update_appearance() + +/datum/gun_bolt/locking/attack_self(mob/living/user) + if(is_locked) + parent.drop_bolt(user) + return TRUE diff --git a/code/modules/projectiles/guns/bolt_types/no_bolt.dm b/code/modules/projectiles/guns/bolt_types/no_bolt.dm new file mode 100644 index 000000000000..02d1c3ed9b30 --- /dev/null +++ b/code/modules/projectiles/guns/bolt_types/no_bolt.dm @@ -0,0 +1,35 @@ + +///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. +/// Example: Break action shotguns, revolvers +/datum/gun_bolt/no_bolt + +/datum/gun_bolt/no_bolt/pre_rack(mob/user) + return TRUE // There's nothing to rack, it's boltless. + +/datum/gun_bolt/no_bolt/loaded_ammo() + if (isnull(parent.chambered)) + parent.chamber_round() + +/datum/gun_bolt/no_bolt/unload(mob/user) + . = TRUE // No matter what happens we're cancelling the call + if(!parent.wielded && !user.get_empty_held_index()) + to_chat(user, span_warning("You need a free hand to do that!")) + return + + parent.chambered = null + var/num_unloaded = 0 + + for(var/obj/item/ammo_casing/CB in parent.get_ammo_list(FALSE, TRUE)) + CB.forceMove(parent.drop_location()) + CB.bounce_away(FALSE, NONE) + num_unloaded++ + var/turf/T = get_turf(parent.drop_location()) + if(T && is_station_level(T.z)) + SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name) + + if (num_unloaded) + to_chat(user, span_notice("You unload [num_unloaded] [parent.cartridge_wording]\s from [src].")) + playsound(parent, parent.eject_sound, parent.eject_sound_volume, parent.eject_sound_vary) + parent.update_appearance() + else + to_chat(user, span_warning("[parent] is empty!")) diff --git a/code/modules/projectiles/guns/bolt_types/open_bolt.dm b/code/modules/projectiles/guns/bolt_types/open_bolt.dm new file mode 100644 index 000000000000..02f017b7efc8 --- /dev/null +++ b/code/modules/projectiles/guns/bolt_types/open_bolt.dm @@ -0,0 +1,28 @@ +///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed. +/// Example: Some SMGs, the L6 +/datum/gun_bolt/open + +/datum/gun_bolt/open/get_overlays() + if(is_locked) + return "[parent.icon_state]_bolt" + +/datum/gun_bolt/open/pre_rack(mob/user) + if(!is_locked) //If it's an open bolt, racking again would do nothing + if (user) + to_chat(user, span_notice("[parent]'s [parent.bolt_wording] is already cocked!")) + return + + is_locked = FALSE + +/datum/gun_bolt/open/magazine_inserted() + if(!is_locked) + parent.chamber_round(TRUE) + +/datum/gun_bolt/open/magazine_ejected() + parent.chambered = null + +/datum/gun_bolt/open/before_firing() + if (!parent.chambered && !parent.get_ammo() && !is_locked) + is_locked = TRUE + playsound(parent, parent.bolt_drop_sound, parent.bolt_drop_sound_volume) + parent.update_appearance() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 9471053b2be0..a3658d1eaa48 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -78,7 +78,6 @@ inhand_icon_state = "shotgun" desc = "A combat shotgun gutted and refitted with an internal laser system. Can switch between taser and scattered disabler shots." shaded_charge = 0 - pin = /obj/item/firing_pin/implant/mindshield ammo_type = list(/obj/item/ammo_casing/energy/laser/scatter/disabler, /obj/item/ammo_casing/energy/electrode) automatic_charge_overlays = FALSE @@ -95,7 +94,6 @@ flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/accelerator) - pin = null ammo_x_offset = 3 /obj/item/ammo_casing/energy/laser/accelerator diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index eda8a9306479..8f1e3fe1e8a6 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -28,9 +28,6 @@ notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") -/obj/item/gun/energy/pulse/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/pulse/carbine name = "pulse carbine" desc = "A compact variant of the pulse rifle with less firepower but easier storage." @@ -51,9 +48,6 @@ /obj/item/gun/energy/pulse/carbine/lethal ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode) -/obj/item/gun/energy/pulse/carbine/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/pulse/destroyer name = "pulse destroyer" desc = "A heavy-duty energy rifle built for pure destruction." @@ -74,9 +68,6 @@ inhand_icon_state = "gun" cell_type = /obj/item/stock_parts/cell/pulse/pistol -/obj/item/gun/energy/pulse/pistol/loyalpin - pin = /obj/item/firing_pin/implant/mindshield - /obj/item/gun/energy/pulse/pistol/m1911 name = "\improper M1911-P" desc = "A compact pulse core in a classic handgun frame for Mars officers. It's not the size of the gun, it's the size of the hole it puts through people." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 489a620d1c88..4e733f255d78 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -328,7 +328,6 @@ w_class = WEIGHT_CLASS_NORMAL ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) cell_type = /obj/item/stock_parts/cell/high - pin = null /obj/item/gun/energy/temperature/security name = "security temperature gun" diff --git a/code/modules/projectiles/guns/special/tranq_rifle.dm b/code/modules/projectiles/guns/special/tranq_rifle.dm index abdf0b1118dd..d0a79a900eaf 100644 --- a/code/modules/projectiles/guns/special/tranq_rifle.dm +++ b/code/modules/projectiles/guns/special/tranq_rifle.dm @@ -32,16 +32,18 @@ return list() /obj/item/gun/ballistic/rifle/tranqrifle/rack(mob/user) - if(!bolt_locked) + if(!bolt.is_locked) if(!magazine && chambered) to_chat(user, span_warning("The bolt won't budge!")) return + if(magazine && chambered && !magazine.give_round(chambered)) to_chat(user, span_warning("The bolt won't budge!")) return + to_chat(user, span_notice("You open the bolt of \the [src].")) playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) chambered = null - bolt_locked = TRUE + bolt.is_locked = TRUE return drop_bolt(user) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index c3c58d6d247c..6911a09024ff 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -9,16 +9,24 @@ w_class = WEIGHT_CLASS_TINY attack_verb_continuous = list("pokes") attack_verb_simple = list("poke") + var/fail_message = "invalid user!" var/selfdestruct = FALSE // Explode when user check is failed. var/force_replace = FALSE // Can forcefully replace other pins. var/pin_removeable = FALSE // Can be replaced by any pin. + + /// The gun we're apart of. var/obj/item/gun/gun -/obj/item/firing_pin/New(newloc) - ..() - if(isgun(newloc)) - gun = newloc +/obj/item/firing_pin/Initialize(mapload, obj/item/gun/owner) + . = ..() + if(isgun(owner)) + gun = owner + +/obj/item/firing_pin/Destroy() + if(gun) + gun.pin = null + return ..() /obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag) . = ..() @@ -80,98 +88,6 @@ name = "magic crystal shard" desc = "A small enchanted shard which allows magical weapons to fire." - -// Test pin, works only near firing range. -/obj/item/firing_pin/test_range - name = "test-range firing pin" - desc = "This safety firing pin allows weapons to be fired within proximity to a firing range." - fail_message = "test range check failed!" - pin_removeable = TRUE - -/obj/item/firing_pin/test_range/pin_auth(mob/living/user) - if(!istype(user)) - return FALSE - if (istype(get_area(user), /area/station/security/range)) - return TRUE - return FALSE - - -// Implant pin, checks for implant -/obj/item/firing_pin/implant - name = "implant-keyed firing pin" - desc = "This is a security firing pin which only authorizes users who are implanted with a certain device." - fail_message = "implant check failed!" - var/obj/item/implant/req_implant = null - -/obj/item/firing_pin/implant/pin_auth(mob/living/user) - if(user) - for(var/obj/item/implant/I in user.implants) - if(req_implant && I.type == req_implant) - return TRUE - return FALSE - -/obj/item/firing_pin/implant/mindshield - name = "mindshield firing pin" - desc = "This Security firing pin authorizes the weapon for only mindshield-implanted users." - icon_state = "firing_pin_loyalty" - req_implant = /obj/item/implant/mindshield - -/obj/item/firing_pin/implant/pindicate - name = "syndicate firing pin" - icon_state = "firing_pin_pindi" - req_implant = /obj/item/implant/weapons_auth - - - -// Honk pin, clown's joke item. -// Can replace other pins. Replace a pin in cap's laser for extra fun! -/obj/item/firing_pin/clown - name = "hilarious firing pin" - desc = "Advanced clowntech that can convert any firearm into a far more useful object." - color = "#FFFF00" - fail_message = "honk!" - force_replace = TRUE - -/obj/item/firing_pin/clown/pin_auth(mob/living/user) - playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) - return FALSE - -// Ultra-honk pin, clown's deadly joke item. -// A gun with ultra-honk pin is useful for clown and useless for everyone else. -/obj/item/firing_pin/clown/ultra - name = "ultra hilarious firing pin" - -/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user) - playsound(src.loc, 'sound/items/bikehorn.ogg', 50, TRUE) - if(QDELETED(user)) //how the hell...? - stack_trace("/obj/item/firing_pin/clown/ultra/pin_auth called with a [isnull(user) ? "null" : "invalid"] user.") - return TRUE - if(HAS_TRAIT(user, TRAIT_CLUMSY)) //clumsy - return TRUE - if(user.mind) - if(is_clown_job(user.mind.assigned_role)) //traitor clowns can use this, even though they're technically not clumsy - return TRUE - if(user.mind.has_antag_datum(/datum/antagonist/nukeop/clownop)) //clown ops aren't clumsy by default and technically don't have an assigned role of "Clown", but come on, they're basically clowns - return TRUE - if(user.mind.has_antag_datum(/datum/antagonist/nukeop/leader/clownop)) //Wanna hear a funny joke? - return TRUE //The clown op leader antag datum isn't a subtype of the normal clown op antag datum. - return FALSE - -/obj/item/firing_pin/clown/ultra/gun_insert(mob/living/user, obj/item/gun/G) - ..() - G.clumsy_check = FALSE - -/obj/item/firing_pin/clown/ultra/gun_remove(mob/living/user) - gun.clumsy_check = initial(gun.clumsy_check) - ..() - -// Now two times deadlier! -/obj/item/firing_pin/clown/ultra/selfdestruct - name = "super ultra hilarious firing pin" - desc = "Advanced clowntech that can convert any firearm into a far more useful object. It has a small nitrobananium charge on it." - selfdestruct = TRUE - - // DNA-keyed pin. // When you want to keep your toys for yourself. /obj/item/firing_pin/dna @@ -203,10 +119,6 @@ else ..() -/obj/item/firing_pin/dna/dredd - desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link. It has a small explosive charge on it." - selfdestruct = TRUE - // Paywall pin, brought to you by ARMA 3 DLC. // Checks if the user has a valid bank account on an ID and if so attempts to extract a one-time payment to authorize use of the gun. Otherwise fails to shoot. /obj/item/firing_pin/paywall @@ -322,20 +234,6 @@ active_prompt_user = null return FALSE //we return false here so you don't click initially to fire, get the prompt, accept the prompt, and THEN the gun -// Explorer Firing Pin- Prevents use on station Z-Level, so it's justifiable to give Explorers guns that don't suck. -/obj/item/firing_pin/explorer - name = "outback firing pin" - desc = "A firing pin used by the austrailian defense force, retrofit to prevent weapon discharge on the station." - icon_state = "firing_pin_explorer" - fail_message = "cannot fire while on station, mate!" - -// This checks that the user isn't on the station Z-level. -/obj/item/firing_pin/explorer/pin_auth(mob/living/user) - var/turf/station_check = get_turf(user) - if(!station_check || is_station_level(station_check.z)) - return FALSE - return TRUE - // Laser tag pins /obj/item/firing_pin/tag name = "laser tag firing pin" @@ -363,8 +261,3 @@ icon_state = "firing_pin_blue" suit_requirement = /obj/item/clothing/suit/bluetag tagcolor = "blue" - -/obj/item/firing_pin/Destroy() - if(gun) - gun.pin = null - return ..() diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm index 96fe8afe2d9e..a8e7b68f7d37 100644 --- a/code/modules/projectiles/projectile/bullets/pistol.dm +++ b/code/modules/projectiles/projectile/bullets/pistol.dm @@ -7,7 +7,7 @@ /obj/projectile/bullet/c9mm/ap name = "9mm armor-piercing bullet" - damage = 27 + damage = 30 armor_penetration = 40 embedding = null shrapnel_type = null diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index a4033e768989..4f74ea58d690 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -7,7 +7,7 @@ // .50AE (Desert Eagle) /obj/projectile/bullet/a50ae - name = ".50AE bullet" + name = ".50 AE bullet" damage = 60 // .38 (Detective's Gun) @@ -97,7 +97,7 @@ var/mob/living/M = target M.adjust_bodytemperature(((100-blocked)/100)*(temperature - M.bodytemperature)) -// .357 (Syndie Revolver) +// .357 (Revolver) /obj/projectile/bullet/a357 name = ".357 bullet" diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm index c953b4d8a2ab..6a1faa6db649 100644 --- a/code/modules/projectiles/projectile/bullets/sniper.dm +++ b/code/modules/projectiles/projectile/bullets/sniper.dm @@ -1,7 +1,7 @@ // .50 (Sniper) /obj/projectile/bullet/p50 - name =".50 bullet" + name =".50 BMG bullet" speed = 0.4 range = 400 // Enough to travel from one corner of the Z to the opposite corner and then some. damage = 70 @@ -17,7 +17,7 @@ return ..() /obj/projectile/bullet/p50/soporific - name =".50 soporific bullet" + name =".50 BMG soporific bullet" armor_penetration = 0 damage = 0 dismemberment = 0 @@ -31,7 +31,7 @@ return ..() /obj/projectile/bullet/p50/penetrator - name = "penetrator round" + name = ".50 BMG penetrator bullet" icon_state = "gauss" damage = 60 range = 50 @@ -49,7 +49,7 @@ range = 16 /obj/projectile/bullet/p50/marksman - name = ".50 marksman round" + name = ".50 BMG marksman bullet" damage = 50 paralyze = 0 tracer_type = /obj/effect/projectile/tracer/sniper diff --git a/code/modules/projectiles/projectile/reusable/foam_dart.dm b/code/modules/projectiles/projectile/reusable/foam_dart.dm index 55b832a9f2d2..053f66ed074a 100644 --- a/code/modules/projectiles/projectile/reusable/foam_dart.dm +++ b/code/modules/projectiles/projectile/reusable/foam_dart.dm @@ -35,11 +35,3 @@ /obj/projectile/bullet/reusable/foam_dart/Destroy() pen = null return ..() - -/obj/projectile/bullet/reusable/foam_dart/riot - name = "riot foam dart" - icon_state = "foamdart_riot_proj" - base_icon_state = "foamdart_riot_proj" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - nodamage = FALSE - stamina = 25 diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 1f796569f752..8110a5e4adac 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -16,26 +16,6 @@ category = list(DCAT_AMMO) mapload_design_flags = DESIGN_FAB_SECURITY -/datum/design/pin_testing - name = "Test-Range Firing Pin" - desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." - id = "pin_testing" - build_type = FABRICATOR - materials = list(/datum/material/iron = 500, /datum/material/glass = 300) - build_path = /obj/item/firing_pin/test_range - category = list("Firing Pins") - mapload_design_flags = DESIGN_FAB_SECURITY - -/datum/design/pin_mindshield - name = "Mindshield Firing Pin" - desc = "This is a security firing pin which only authorizes users who are mindshield-implanted." - id = "pin_loyalty" - build_type = FABRICATOR - materials = list(/datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 200) - build_path = /obj/item/firing_pin/implant/mindshield - category = list("Firing Pins") - mapload_design_flags = DESIGN_FAB_SECURITY - /datum/design/stunrevolver name = "Tesla Cannon Part Kit" desc = "The kit for a high-tech cannon that fires internal, reusable bolt cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." diff --git a/code/modules/uplink/uplink_items/ammunition.dm b/code/modules/uplink/uplink_items/ammunition.dm index ab8a537553dc..bfcdc544b3fa 100644 --- a/code/modules/uplink/uplink_items/ammunition.dm +++ b/code/modules/uplink/uplink_items/ammunition.dm @@ -8,62 +8,51 @@ category = /datum/uplink_category/ammo surplus = 40 -// No progression cost - -/datum/uplink_item/ammo/toydarts - name = "Box of Riot Darts" - desc = "A box of 40 Donksoft riot darts, for reloading any compatible foam dart magazine. Don't forget to share!" - item = /obj/item/ammo_box/foambox/riot - cost = 2 - surplus = 0 - illegal_tech = FALSE - // Low progression cost /datum/uplink_item/ammo/pistol - name = "9mm Handgun Magazine" - desc = "An additional 8-round 9mm magazine, compatible with the Makarov pistol." + name = "8-round 9x19mm Magazine" + desc = "A magazine containing eight 9x19mm rounds, compatible with most small arms." progression_minimum = 10 MINUTES item = /obj/item/ammo_box/magazine/m9mm - cost = 1 + cost = 2 purchasable_from = ~UPLINK_CLOWN_OPS illegal_tech = FALSE // Medium progression cost /datum/uplink_item/ammo/pistolap - name = "9mm Armour Piercing Magazine" - desc = "An additional 8-round 9mm magazine, compatible with the Makarov pistol. \ - These rounds are less effective at injuring the target but penetrate protective gear." + name = "8-round 9x19mm Armour Piercing Magazine" + desc = "A magazine containing eight 9x19mm rounds, compatible with most small arms. \ + These bullets are highly effective against armor." progression_minimum = 30 MINUTES item = /obj/item/ammo_box/magazine/m9mm/ap - cost = 2 + cost = 4 purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/ammo/pistolhp - name = "9mm Hollow Point Magazine" - desc = "An additional 8-round 9mm magazine, compatible with the Makarov pistol. \ - These rounds are more damaging but ineffective against armour." + name = "8-round 9x19mm Hollow-Point Magazine" + desc = "A magazine containing eight 9x19mm rounds, compatible with most small arms. \ + These bullets will tear through flesh, but lack penetration." progression_minimum = 30 MINUTES item = /obj/item/ammo_box/magazine/m9mm/hp - cost = 3 + cost = 4 purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/ammo/pistolfire - name = "9mm Incendiary Magazine" - desc = "An additional 8-round 9mm magazine, compatible with the Makarov pistol. \ - Loaded with incendiary rounds which inflict little damage, but ignite the target." + name = "8-round 9x19mm Incendiary Magazine" + desc = "A magazine containing eight 9x19mm rounds, compatible with most small arms. \ + These bullets have low stopping power, but will ignite flesh upon impact." progression_minimum = 30 MINUTES item = /obj/item/ammo_box/magazine/m9mm/fire - cost = 2 + cost = 6 purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/ammo/revolver - name = ".357 Speed Loader" - desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ - For when you really need a lot of things dead." + name = ".357 S&W Speed Loader" + desc = "A speed loader that contains seven .357 S&W Magnum rounds. Sometimes, you just need a little more gun." progression_minimum = 30 MINUTES item = /obj/item/ammo_box/a357 - cost = 4 + cost = 6 purchasable_from = ~UPLINK_CLOWN_OPS illegal_tech = FALSE diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index 92a25263d3c3..44fbbdd6ca75 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -8,25 +8,14 @@ /datum/uplink_item/dangerous category = /datum/uplink_category/dangerous -// No progression cost - -/datum/uplink_item/dangerous/foampistol - name = "Toy Pistol with Riot Darts" - desc = "An innocent-looking toy pistol designed to fire foam darts. Comes loaded with riot-grade \ - darts effective at incapacitating a target." - item = /obj/item/gun/ballistic/automatic/pistol/toy/riot - cost = 2 - surplus = 10 - // Low progression cost /datum/uplink_item/dangerous/pistol - name = "Makarov Pistol" - desc = "A small, easily concealable handgun that uses 9mm auto rounds in 8-round magazines and is compatible \ - with suppressors." + name = "9x19mm Pistol" + desc = "A servicable handgun chambered in 9x19mm Parabellum." progression_minimum = 10 MINUTES item = /obj/item/gun/ballistic/automatic/pistol - cost = 7 + cost = 10 purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/dangerous/throwingweapons @@ -40,11 +29,10 @@ /datum/uplink_item/dangerous/sword name = "Energy Sword" - desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be \ - pocketed when inactive. Activating it produces a loud, distinctive noise." + desc = "The energy sword is an edged weapon with a blade of pure energy. Activating it produces a loud, distinctive noise." progression_minimum = 20 MINUTES item = /obj/item/melee/energy/sword/saber - cost = 8 + cost = 12 purchasable_from = ~UPLINK_CLOWN_OPS /datum/uplink_item/dangerous/powerfist @@ -66,36 +54,11 @@ // Medium progression cost - -/datum/uplink_item/dangerous/doublesword - name = "Double-Bladed Energy Sword" - desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \ - all energy projectiles, but requires two hands to wield." - progression_minimum = 30 MINUTES - item = /obj/item/dualsaber - - cost = 16 - purchasable_from = ~UPLINK_CLOWN_OPS - -/datum/uplink_item/dangerous/doublesword/get_discount() - return pick(4;0.8,2;0.65,1;0.5) - -/datum/uplink_item/dangerous/guardian - name = "Holoparasites" - desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an \ - organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host." - progression_minimum = 30 MINUTES - item = /obj/item/storage/box/syndie_kit/guardian - cost = 18 - surplus = 0 - purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) - restricted = TRUE - /datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers." + name = ".357 Magnum Revolver" + desc = "A modern classic, 7-chamber revolver chambered in .357 S&W." item = /obj/item/gun/ballistic/revolver progression_minimum = 30 MINUTES - cost = 13 + cost = 14 surplus = 50 purchasable_from = ~UPLINK_CLOWN_OPS diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm index 6eed450dce08..b673df4dca18 100644 --- a/code/modules/uplink/uplink_items/explosive.dm +++ b/code/modules/uplink/uplink_items/explosive.dm @@ -24,14 +24,14 @@ minimum setting of 10 seconds." progression_minimum = 10 MINUTES item = /obj/item/grenade/c4 - cost = 1 + cost = 4 /datum/uplink_item/explosives/c4bag name = "Bag of C-4 explosives" - desc = "Because sometimes quantity is quality. Contains 10 C-4 plastic explosives." + desc = "Because sometimes quantity is quality. Contains 4 C-4 plastic explosives." item = /obj/item/storage/backpack/duffelbag/syndie/c4 progression_minimum = 20 MINUTES - cost = 8 //20% discount! + cost = 14 // 22% discount cant_discount = TRUE /datum/uplink_item/explosives/x4bag @@ -41,7 +41,7 @@ For when you want a controlled explosion that leaves a wider, deeper, hole." progression_minimum = 30 MINUTES item = /obj/item/storage/backpack/duffelbag/syndie/x4 - cost = 4 + cost = 14 cant_discount = TRUE /datum/uplink_item/explosives/detomatix @@ -51,7 +51,7 @@ The concussive effect from the explosion will knock the recipient out for a short period, and deafen them for longer." progression_minimum = 30 MINUTES item = /obj/item/computer_hardware/hard_drive/role/virus/deto - cost = 6 + cost = 10 restricted = TRUE /datum/uplink_item/explosives/emp @@ -100,4 +100,4 @@ The bomb core can be pried out and manually detonated with other explosives." progression_minimum = 40 MINUTES item = /obj/item/sbeacondrop/bomb - cost = 11 + cost = 16 diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index 1ab89bbd883d..e4df377d6514 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -53,24 +53,6 @@ // Low progression cost -/datum/uplink_item/role_restricted/clownpin - name = "Ultra Hilarious Firing Pin" - desc = "A firing pin that, when inserted into a gun, makes that gun only usable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." - progression_minimum = 5 MINUTES - cost = 4 - item = /obj/item/firing_pin/clown/ultra - restricted_roles = list(JOB_CLOWN) - illegal_tech = FALSE - -/datum/uplink_item/role_restricted/clownsuperpin - name = "Super Ultra Hilarious Firing Pin" - desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." - progression_minimum = 5 MINUTES - cost = 7 - item = /obj/item/firing_pin/clown/ultra/selfdestruct - restricted_roles = list(JOB_CLOWN) - illegal_tech = FALSE - /datum/uplink_item/role_restricted/syndimmi name = "Syndicate Brand MMI" desc = "An MMI modified to give cyborgs laws to serve the Syndicate without having their interface damaged by Cryptographic Sequencers, this will not unlock their hidden modules." diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index c6934a95eeb9..f5e5955a20d3 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -3,7 +3,7 @@ desc = "For the madman: Contains a handheld Bioterror chem sprayer, a Bioterror foam grenade, a box of lethal chemicals, a dart pistol, \ box of syringes, Donksoft assault rifle, and some riot darts. Remember: Seal suit and equip internals before use." item = /obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle - cost = 30 // normally 42 + cost = 20 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS /datum/uplink_item/bundles_tc/bulldog @@ -33,7 +33,7 @@ desc = "The support specialist: Aid your fellow operatives with this medical bundle. Contains a tactical medkit, \ a Donksoft LMG, a box of riot darts and a pair of magboots to rescue your friends in no-gravity environments." item = /obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle - cost = 15 // normally 20 + cost = 10 // normally 20 purchasable_from = UPLINK_NUKE_OPS /datum/uplink_item/bundles_tc/sniper @@ -90,22 +90,6 @@ surplus = 0 purchasable_from = UPLINK_CLOWN_OPS -/datum/uplink_item/dangerous/clownoppin - name = "Ultra Hilarious Firing Pin" - desc = "A firing pin that, when inserted into a gun, makes that gun only useable by clowns and clumsy people and makes that gun honk whenever anyone tries to fire it." - cost = 1 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra - purchasable_from = UPLINK_CLOWN_OPS - illegal_tech = FALSE - -/datum/uplink_item/dangerous/clownopsuperpin - name = "Super Ultra Hilarious Firing Pin" - desc = "Like the ultra hilarious firing pin, except the gun you insert this pin into explodes when someone who isn't clumsy or a clown tries to fire it." - cost = 4 //much cheaper for clown ops than for clowns - item = /obj/item/firing_pin/clown/ultra/selfdestruct - purchasable_from = UPLINK_CLOWN_OPS - illegal_tech = FALSE - /datum/uplink_item/dangerous/bioterror name = "Biohazardous Chemical Sprayer" desc = "A handheld chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger \ diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index 07760883d862..e5cfb0e97112 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -14,7 +14,7 @@ /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, /obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2, /obj/item/gun/ballistic/automatic/pistol/m1911 = 2, - /obj/item/gun/ballistic/automatic/proto/unrestricted = 2, + /obj/item/gun/ballistic/automatic/proto = 2, /obj/item/gun/ballistic/shotgun/automatic/combat = 2, /obj/item/gun/ballistic/automatic/gyropistol = 1, /obj/item/gun/ballistic/shotgun = 2, diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 28d085c1fbbe..471f8f89d172 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -8,9 +8,9 @@ vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy = 10, /obj/item/gun/ballistic/automatic/pistol/toy = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, @@ -20,9 +20,8 @@ ) contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 10, - /obj/item/ammo_box/foambox/riot = 20, + /obj/item/gun/ballistic/automatic/c20r/toy = 10, + /obj/item/gun/ballistic/automatic/l6_saw/toy = 10, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5, /obj/item/toy/cards/deck/syndicate = 10 //Gambling and it hurts, making it a +18 item diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index 587d948500cc..661e928e2376 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -9,9 +9,9 @@ light_mask = "donksoft-light-mask" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor products = list( - /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy = 10, /obj/item/gun/ballistic/automatic/pistol/toy = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/gun/ballistic/shotgun/toy = 10, /obj/item/toy/sword = 10, /obj/item/ammo_box/foambox = 20, /obj/item/toy/foamblade = 10, @@ -21,8 +21,6 @@ ) contraband = list( /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5 ) diff --git a/daedalus.dme b/daedalus.dme index 6ddbf116282a..c05aaffb5531 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -3239,7 +3239,6 @@ #include "code\modules\mapfluff\ruins\spaceruin_code\DJstation.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\hilbertshotel.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\oldstation.dm" -#include "code\modules\mapfluff\ruins\spaceruin_code\originalcontent.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\spacehotel.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\TheDerelict.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\whiteshipruin_box.dm" @@ -3393,7 +3392,6 @@ #include "code\modules\mob\living\basic\basic_defense.dm" #include "code\modules\mob\living\basic\health_adjustment.dm" #include "code\modules\mob\living\basic\farm_animals\cows.dm" -#include "code\modules\mob\living\basic\ruin_defender\stickman.dm" #include "code\modules\mob\living\basic\vermin\cockroach.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_item.dm" @@ -3644,7 +3642,6 @@ #include "code\modules\mob\living\simple_animal\hostile\wumborian_fugu.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm" -#include "code\modules\mob\living\simple_animal\hostile\bosses\paperwizard.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\gorilla.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\visuals_icons.dm" @@ -3958,6 +3955,10 @@ #include "code\modules\projectiles\guns\ballistic\rifle.dm" #include "code\modules\projectiles\guns\ballistic\shotgun.dm" #include "code\modules\projectiles\guns\ballistic\toy.dm" +#include "code\modules\projectiles\guns\bolt_types\_gun_bolt.dm" +#include "code\modules\projectiles\guns\bolt_types\locking_bolt.dm" +#include "code\modules\projectiles\guns\bolt_types\no_bolt.dm" +#include "code\modules\projectiles\guns\bolt_types\open_bolt.dm" #include "code\modules\projectiles\guns\energy\beam_rifle.dm" #include "code\modules\projectiles\guns\energy\dueling.dm" #include "code\modules\projectiles\guns\energy\energy_gun.dm" diff --git a/tools/UpdatePaths/firing_pin_removal.txt b/tools/UpdatePaths/firing_pin_removal.txt new file mode 100644 index 000000000000..20d1a4c082a9 --- /dev/null +++ b/tools/UpdatePaths/firing_pin_removal.txt @@ -0,0 +1,21 @@ +/obj/item/storage/box/syndie_kit/clownpins : @DELETE +/obj/item/gun/ballistic/automatic/c20r/unrestricted : /obj/item/gun/ballistic/automatic/c20r +/obj/item/gun/ballistic/automatic/proto/unrestricted : /obj/item/gun/ballistic/automatic/proto +/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted : /obj/item/gun/ballistic/revolver/grenadelauncher +/obj/item/gun/ballistic/rocketlauncher/unrestricted : /obj/item/gun/ballistic/rocketlauncher +/obj/item/gun/ballistic/shotgun/bulldog/unrestricted : /obj/item/gun/ballistic/shotgun/bulldog +/obj/item/gun/energy/pulse/loyalpin : /obj/item/gun/energy/pulse +/obj/item/gun/energy/pulse/carbine/loyalpin : /obj/item/gun/energy/pulse/carbine +/obj/item/gun/energy/pulse/pistol/loyalpin : /obj/item/gun/energy/pulse/pistol +/obj/item/gun/ballistic/automatic/m90/unrestricted : /obj/item/gun/ballistic/automatic/m90 +/obj/item/gun/ballistic/automatic/l6_saw/unrestricted : /obj/item/gun/ballistic/automatic/l6_saw +/obj/item/gun/ballistic/automatic/toy/unrestricted : /obj/item/gun/ballistic/automatic/toy +/obj/item/gun/ballistic/shotgun/toy/unrestricted : /obj/item/gun/ballistic/shotgun/toy +/obj/item/ammo_box/magazine/toy/pistol/riot : @DELETE +/obj/item/ammo_box/magazine/toy/smg/riot : @DELETE +/obj/item/ammo_box/magazine/toy/m762/riot : @DELETE +/obj/item/ammo_box/foambox/riot : @DELETE +/obj/item/ammo_box/magazine/toy/smgm45/riot : @DELETE +/obj/item/gun/ballistic/automatic/pistol/toy/riot : /obj/item/gun/ballistic/automatic/pistol/toy +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted : /obj/item/gun/ballistic/automatic/c20r/toy +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot : /obj/item/gun/ballistic/automatic/c20r/toy