diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm index d2a416bba2..2f395e4f1c 100644 --- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm +++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm @@ -590,9 +590,9 @@ "bW" = ( /obj/structure/closet/crate/secure/gear, /obj/item/ammo_box/c10mm, -/obj/item/ammo_casing/shotgun/meteorshot, -/obj/item/ammo_casing/shotgun/meteorshot, -/obj/item/ammo_casing/shotgun/meteorshot, +/obj/item/ammo_casing/shotgun/meteorslug, +/obj/item/ammo_casing/shotgun/meteorslug, +/obj/item/ammo_casing/shotgun/meteorslug, /turf/open/floor/mineral/titanium/yellow/airless, /area/ruin/unpowered) "bX" = ( diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index ee8363e1b3..b84de7cf18 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -570,8 +570,8 @@ /obj/machinery/porta_turret/syndicate/pod integrity_failure = 20 max_integrity = 40 - stun_projectile = /obj/item/projectile/bullet/weakbullet3 - lethal_projectile = /obj/item/projectile/bullet/weakbullet3 + stun_projectile = /obj/item/projectile/bullet/syndicate_turret + lethal_projectile = /obj/item/projectile/bullet/syndicate_turret /obj/machinery/porta_turret/ai faction = "silicon" diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index b6b4241402..1e9616ae12 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -251,7 +251,7 @@ icon_state = "mecha_carbine" origin_tech = "materials=4;combat=4" equip_cooldown = 10 - projectile = /obj/item/projectile/bullet/incendiary/shell + projectile = /obj/item/projectile/bullet/incendiary/fnx99 projectiles = 24 projectile_energy_cost = 15 @@ -271,7 +271,7 @@ icon_state = "mecha_scatter" origin_tech = "combat=4" equip_cooldown = 20 - projectile = /obj/item/projectile/bullet/midbullet + projectile = /obj/item/projectile/bullet/scattershot projectiles = 40 projectile_energy_cost = 25 projectiles_per_shot = 4 @@ -283,7 +283,7 @@ icon_state = "mecha_uac2" origin_tech = "combat=4" equip_cooldown = 10 - projectile = /obj/item/projectile/bullet/weakbullet3 + projectile = /obj/item/projectile/bullet/lmg projectiles = 300 projectile_energy_cost = 20 projectiles_per_shot = 3 diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 8107c5a1f8..df40b2898c 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -1,57 +1,56 @@ -/obj/item/storage/briefcase - name = "briefcase" - desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." - icon_state = "briefcase" - lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' - flags_1 = CONDUCT_1 - force = 8 - hitsound = "swing_hit" - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - max_w_class = WEIGHT_CLASS_NORMAL - max_combined_w_class = 21 - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - resistance_flags = FLAMMABLE - max_integrity = 150 - var/folder_path = /obj/item/folder //this is the path of the folder that gets spawned in New() - -/obj/item/storage/briefcase/PopulateContents() - new /obj/item/pen(src) - var/obj/item/folder/folder = new folder_path(src) - for(var/i in 1 to 6) - new /obj/item/paper(folder) - -/obj/item/storage/briefcase/lawyer - folder_path = /obj/item/folder/blue - -/obj/item/storage/briefcase/lawyer/PopulateContents() - new /obj/item/stamp/law(src) - ..() - -/obj/item/storage/briefcase/sniperbundle - name = "briefcase" - desc = "It's label reads genuine hardened Captain leather, but suspiciously has no other tags or branding. Smells like L'Air du Temps." - icon_state = "briefcase" - flags_1 = CONDUCT_1 - force = 10 - hitsound = "swing_hit" - throw_speed = 2 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - max_w_class = WEIGHT_CLASS_NORMAL - max_combined_w_class = 21 - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") - resistance_flags = FLAMMABLE - max_integrity = 150 - -/obj/item/storage/briefcase/sniperbundle/PopulateContents() - ..() // in case you need any paperwork done after your rampage - new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src) - new /obj/item/clothing/neck/tie/red(src) - new /obj/item/clothing/under/syndicate/sniper(src) - new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) - new /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage(src) - new /obj/item/suppressor/specialoffer(src) - +/obj/item/storage/briefcase + name = "briefcase" + desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." + icon_state = "briefcase" + lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi' + flags_1 = CONDUCT_1 + force = 8 + hitsound = "swing_hit" + throw_speed = 2 + throw_range = 4 + w_class = WEIGHT_CLASS_BULKY + max_w_class = WEIGHT_CLASS_NORMAL + max_combined_w_class = 21 + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") + resistance_flags = FLAMMABLE + max_integrity = 150 + var/folder_path = /obj/item/folder //this is the path of the folder that gets spawned in New() + +/obj/item/storage/briefcase/PopulateContents() + new /obj/item/pen(src) + var/obj/item/folder/folder = new folder_path(src) + for(var/i in 1 to 6) + new /obj/item/paper(folder) + +/obj/item/storage/briefcase/lawyer + folder_path = /obj/item/folder/blue + +/obj/item/storage/briefcase/lawyer/PopulateContents() + new /obj/item/stamp/law(src) + ..() + +/obj/item/storage/briefcase/sniperbundle + name = "briefcase" + desc = "It's label reads genuine hardened Captain leather, but suspiciously has no other tags or branding. Smells like L'Air du Temps." + icon_state = "briefcase" + flags_1 = CONDUCT_1 + force = 10 + hitsound = "swing_hit" + throw_speed = 2 + throw_range = 4 + w_class = WEIGHT_CLASS_BULKY + max_w_class = WEIGHT_CLASS_NORMAL + max_combined_w_class = 21 + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") + resistance_flags = FLAMMABLE + max_integrity = 150 + +/obj/item/storage/briefcase/sniperbundle/PopulateContents() + ..() // in case you need any paperwork done after your rampage + new /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate(src) + new /obj/item/clothing/neck/tie/red(src) + new /obj/item/clothing/under/syndicate/sniper(src) + new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) + new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) + new /obj/item/suppressor/specialoffer(src) diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index e15a655a63..52d9e38f6b 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -1,214 +1,214 @@ -/////// MANNED TURRET //////// - -/obj/machinery/manned_turret - name = "machine gun turret" - desc = "While the trigger is held down, this gun will redistribute recoil to allow its user to easily shift targets." - icon = 'icons/obj/turrets.dmi' - icon_state = "machinegun" - can_buckle = TRUE - density = TRUE - max_integrity = 100 - buckle_lying = FALSE - layer = ABOVE_MOB_LAYER - var/view_range = 10 - var/cooldown = 0 - var/projectile_type = /obj/item/projectile/bullet/weakbullet3 - var/rate_of_fire = 1 - var/number_of_shots = 40 - var/cooldown_duration = 90 - var/atom/target - var/turf/target_turf - var/warned = FALSE - var/list/calculated_projectile_vars - -/obj/machinery/manned_turret/Destroy() - target = null - target_turf = null - ..() - -//BUCKLE HOOKS - -/obj/machinery/manned_turret/unbuckle_mob(mob/living/buckled_mob,force = FALSE) - playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) - for(var/obj/item/I in buckled_mob.held_items) - if(istype(I, /obj/item/gun_control)) - qdel(I) - if(istype(buckled_mob)) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 0 - if(buckled_mob.client) - buckled_mob.client.change_view(world.view) - anchored = FALSE - . = ..() - STOP_PROCESSING(SSfastprocess, src) - -/obj/machinery/manned_turret/user_buckle_mob(mob/living/M, mob/living/carbon/user) - if(user.incapacitated() || !istype(user)) - return - M.forceMove(get_turf(src)) - . = ..() - if(!.) - return - for(var/V in M.held_items) - var/obj/item/I = V - if(istype(I)) - if(M.dropItemToGround(I)) - var/obj/item/gun_control/TC = new(src) - M.put_in_hands(TC) - else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand - var/obj/item/gun_control/TC = new(src) - M.put_in_hands(TC) - M.pixel_y = 14 - layer = ABOVE_MOB_LAYER - setDir(SOUTH) - playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) - anchored = TRUE - if(M.client) - M.client.change_view(view_range) - START_PROCESSING(SSfastprocess, src) - -/obj/machinery/manned_turret/process() - if(!LAZYLEN(buckled_mobs)) - return PROCESS_KILL - update_positioning() - -/obj/machinery/manned_turret/proc/update_positioning() - var/mob/living/controller = buckled_mobs[1] - if(!istype(controller)) - return - var/client/C = controller.client - if(C) - var/atom/A = C.mouseObject - var/turf/T = get_turf(A) - if(istype(T)) //They're hovering over something in the map. - direction_track(controller, T) - calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(controller, C.mouseParams) - -/obj/machinery/manned_turret/proc/direction_track(mob/user, atom/targeted) - if(user.incapacitated()) - return - setDir(get_dir(src,targeted)) - user.setDir(dir) - switch(dir) - if(NORTH) - layer = BELOW_MOB_LAYER - user.pixel_x = 0 - user.pixel_y = -14 - if(NORTHEAST) - layer = BELOW_MOB_LAYER - user.pixel_x = -8 - user.pixel_y = -4 - if(EAST) - layer = ABOVE_MOB_LAYER - user.pixel_x = -14 - user.pixel_y = 0 - if(SOUTHEAST) - layer = BELOW_MOB_LAYER - user.pixel_x = -8 - user.pixel_y = 4 - if(SOUTH) - layer = ABOVE_MOB_LAYER - user.pixel_x = 0 - user.pixel_y = 14 - if(SOUTHWEST) - layer = BELOW_MOB_LAYER - user.pixel_x = 8 - user.pixel_y = 4 - if(WEST) - layer = ABOVE_MOB_LAYER - user.pixel_x = 14 - user.pixel_y = 0 - if(NORTHWEST) - layer = BELOW_MOB_LAYER - user.pixel_x = 8 - user.pixel_y = -4 - -/obj/machinery/manned_turret/proc/checkfire(atom/targeted_atom, mob/user) - target = targeted_atom - if(target == user || user.incapacitated() || target == get_turf(src)) - return - if(world.time < cooldown) - if(!warned && world.time > (cooldown - cooldown_duration + rate_of_fire*number_of_shots)) // To capture the window where one is done firing - warned = TRUE - playsound(src, 'sound/weapons/sear.ogg', 100, 1) - return - else - cooldown = world.time + cooldown_duration - warned = FALSE - volley(user) - -/obj/machinery/manned_turret/proc/volley(mob/user) - target_turf = get_turf(target) - for(var/i in 1 to number_of_shots) - addtimer(CALLBACK(src, /obj/machinery/manned_turret/.proc/fire_helper, user), i*rate_of_fire) - -/obj/machinery/manned_turret/proc/fire_helper(mob/user) - if(user.incapacitated()) - return - update_positioning() //REFRESH MOUSE TRACKING!! - var/turf/targets_from = get_turf(src) - if(QDELETED(target)) - target = target_turf - var/obj/item/projectile/P = new projectile_type(targets_from) - P.current = targets_from - P.starting = targets_from - P.firer = user - P.original = target - playsound(src, 'sound/weapons/gunshot_smg.ogg', 75, 1) - P.xo = target.x - targets_from.x - P.yo = target.y - targets_from.y - P.Angle = calculated_projectile_vars[1] + rand(-9, 9) - P.p_x = calculated_projectile_vars[2] - P.p_y = calculated_projectile_vars[3] - P.fire() - -/obj/machinery/manned_turret/ultimate // Admin-only proof of concept for autoclicker automatics - name = "Infinity Gun" - view_range = 12 - projectile_type = /obj/item/projectile/bullet/weakbullet3 - -/obj/machinery/manned_turret/ultimate/checkfire(atom/targeted_atom, mob/user) - target = targeted_atom - if(target == user || target == get_turf(src)) - return - target_turf = get_turf(target) - fire_helper(user) - -/obj/item/gun_control - name = "turret controls" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 | NODROP_1 | NOBLUDGEON_1 | DROPDEL_1 - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/obj/machinery/manned_turret/turret - -/obj/item/gun_control/Initialize() - . = ..() - turret = loc - if(!istype(turret)) - return INITIALIZE_HINT_QDEL - -/obj/item/gun_control/Destroy() - turret = null - ..() - -/obj/item/gun_control/CanItemAutoclick() - return TRUE - -/obj/item/gun_control/attack_obj(obj/O, mob/living/user) - user.changeNext_move(CLICK_CD_MELEE) - O.attacked_by(src, user) - -/obj/item/gun_control/attack(mob/living/M, mob/living/user) - user.lastattacked = M - M.lastattacker = user - M.attacked_by(src, user) - add_fingerprint(user) - -/obj/item/gun_control/afterattack(atom/targeted_atom, mob/user, flag, params) - ..() - var/obj/machinery/manned_turret/E = user.buckled - E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, params) - E.direction_track(user, targeted_atom) - E.checkfire(targeted_atom, user) +/////// MANNED TURRET //////// + +/obj/machinery/manned_turret + name = "machine gun turret" + desc = "While the trigger is held down, this gun will redistribute recoil to allow its user to easily shift targets." + icon = 'icons/obj/turrets.dmi' + icon_state = "machinegun" + can_buckle = TRUE + density = TRUE + max_integrity = 100 + buckle_lying = FALSE + layer = ABOVE_MOB_LAYER + var/view_range = 10 + var/cooldown = 0 + var/projectile_type = /obj/item/projectile/bullet/manned_turret + var/rate_of_fire = 1 + var/number_of_shots = 40 + var/cooldown_duration = 90 + var/atom/target + var/turf/target_turf + var/warned = FALSE + var/list/calculated_projectile_vars + +/obj/machinery/manned_turret/Destroy() + target = null + target_turf = null + ..() + +//BUCKLE HOOKS + +/obj/machinery/manned_turret/unbuckle_mob(mob/living/buckled_mob,force = FALSE) + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + for(var/obj/item/I in buckled_mob.held_items) + if(istype(I, /obj/item/gun_control)) + qdel(I) + if(istype(buckled_mob)) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 0 + if(buckled_mob.client) + buckled_mob.client.change_view(world.view) + anchored = FALSE + . = ..() + STOP_PROCESSING(SSfastprocess, src) + +/obj/machinery/manned_turret/user_buckle_mob(mob/living/M, mob/living/carbon/user) + if(user.incapacitated() || !istype(user)) + return + M.forceMove(get_turf(src)) + . = ..() + if(!.) + return + for(var/V in M.held_items) + var/obj/item/I = V + if(istype(I)) + if(M.dropItemToGround(I)) + var/obj/item/gun_control/TC = new(src) + M.put_in_hands(TC) + else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand + var/obj/item/gun_control/TC = new(src) + M.put_in_hands(TC) + M.pixel_y = 14 + layer = ABOVE_MOB_LAYER + setDir(SOUTH) + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + anchored = TRUE + if(M.client) + M.client.change_view(view_range) + START_PROCESSING(SSfastprocess, src) + +/obj/machinery/manned_turret/process() + if(!LAZYLEN(buckled_mobs)) + return PROCESS_KILL + update_positioning() + +/obj/machinery/manned_turret/proc/update_positioning() + var/mob/living/controller = buckled_mobs[1] + if(!istype(controller)) + return + var/client/C = controller.client + if(C) + var/atom/A = C.mouseObject + var/turf/T = get_turf(A) + if(istype(T)) //They're hovering over something in the map. + direction_track(controller, T) + calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(controller, C.mouseParams) + +/obj/machinery/manned_turret/proc/direction_track(mob/user, atom/targeted) + if(user.incapacitated()) + return + setDir(get_dir(src,targeted)) + user.setDir(dir) + switch(dir) + if(NORTH) + layer = BELOW_MOB_LAYER + user.pixel_x = 0 + user.pixel_y = -14 + if(NORTHEAST) + layer = BELOW_MOB_LAYER + user.pixel_x = -8 + user.pixel_y = -4 + if(EAST) + layer = ABOVE_MOB_LAYER + user.pixel_x = -14 + user.pixel_y = 0 + if(SOUTHEAST) + layer = BELOW_MOB_LAYER + user.pixel_x = -8 + user.pixel_y = 4 + if(SOUTH) + layer = ABOVE_MOB_LAYER + user.pixel_x = 0 + user.pixel_y = 14 + if(SOUTHWEST) + layer = BELOW_MOB_LAYER + user.pixel_x = 8 + user.pixel_y = 4 + if(WEST) + layer = ABOVE_MOB_LAYER + user.pixel_x = 14 + user.pixel_y = 0 + if(NORTHWEST) + layer = BELOW_MOB_LAYER + user.pixel_x = 8 + user.pixel_y = -4 + +/obj/machinery/manned_turret/proc/checkfire(atom/targeted_atom, mob/user) + target = targeted_atom + if(target == user || user.incapacitated() || target == get_turf(src)) + return + if(world.time < cooldown) + if(!warned && world.time > (cooldown - cooldown_duration + rate_of_fire*number_of_shots)) // To capture the window where one is done firing + warned = TRUE + playsound(src, 'sound/weapons/sear.ogg', 100, 1) + return + else + cooldown = world.time + cooldown_duration + warned = FALSE + volley(user) + +/obj/machinery/manned_turret/proc/volley(mob/user) + target_turf = get_turf(target) + for(var/i in 1 to number_of_shots) + addtimer(CALLBACK(src, /obj/machinery/manned_turret/.proc/fire_helper, user), i*rate_of_fire) + +/obj/machinery/manned_turret/proc/fire_helper(mob/user) + if(user.incapacitated()) + return + update_positioning() //REFRESH MOUSE TRACKING!! + var/turf/targets_from = get_turf(src) + if(QDELETED(target)) + target = target_turf + var/obj/item/projectile/P = new projectile_type(targets_from) + P.current = targets_from + P.starting = targets_from + P.firer = user + P.original = target + playsound(src, 'sound/weapons/gunshot_smg.ogg', 75, 1) + P.xo = target.x - targets_from.x + P.yo = target.y - targets_from.y + P.Angle = calculated_projectile_vars[1] + rand(-9, 9) + P.p_x = calculated_projectile_vars[2] + P.p_y = calculated_projectile_vars[3] + P.fire() + +/obj/machinery/manned_turret/ultimate // Admin-only proof of concept for autoclicker automatics + name = "Infinity Gun" + view_range = 12 + projectile_type = /obj/item/projectile/bullet/manned_turret + +/obj/machinery/manned_turret/ultimate/checkfire(atom/targeted_atom, mob/user) + target = targeted_atom + if(target == user || target == get_turf(src)) + return + target_turf = get_turf(target) + fire_helper(user) + +/obj/item/gun_control + name = "turret controls" + icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "offhand" + w_class = WEIGHT_CLASS_HUGE + flags_1 = ABSTRACT_1 | NODROP_1 | NOBLUDGEON_1 | DROPDEL_1 + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/obj/machinery/manned_turret/turret + +/obj/item/gun_control/Initialize() + . = ..() + turret = loc + if(!istype(turret)) + return INITIALIZE_HINT_QDEL + +/obj/item/gun_control/Destroy() + turret = null + ..() + +/obj/item/gun_control/CanItemAutoclick() + return TRUE + +/obj/item/gun_control/attack_obj(obj/O, mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) + O.attacked_by(src, user) + +/obj/item/gun_control/attack(mob/living/M, mob/living/user) + user.lastattacked = M + M.lastattacker = user + M.attacked_by(src, user) + add_fingerprint(user) + +/obj/item/gun_control/afterattack(atom/targeted_atom, mob/user, flag, params) + ..() + var/obj/machinery/manned_turret/E = user.buckled + E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, params) + E.direction_track(user, targeted_atom) + E.checkfire(targeted_atom, user) \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 217644c4ae..65a78d0ef0 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -204,9 +204,9 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/meteorshot - name = "Meteorshot Shell" - result = /obj/item/ammo_casing/shotgun/meteorshot +/datum/crafting_recipe/meteorslug + name = "Meteorslug Shell" + result = /obj/item/ammo_casing/shotgun/meteorslug reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/rcd_ammo = 1, /obj/item/stock_parts/manipulator = 2) @@ -228,7 +228,7 @@ /datum/crafting_recipe/dragonsbreath name = "Dragonsbreath Shell" - result = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + result = /obj/item/ammo_casing/shotgun/dragonsbreath reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 5) tools = list(/obj/item/screwdriver) time = 5 @@ -270,17 +270,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/improvisedslugoverload - name = "Overload Improvised Shell" - result = /obj/item/ammo_casing/shotgun/improvised/overload - reqs = list(/obj/item/ammo_casing/shotgun/improvised = 1, - /datum/reagent/blackpowder = 10, - /datum/reagent/toxin/plasma = 20) - tools = list(/obj/item/screwdriver) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - /datum/crafting_recipe/laserslug name = "Laser Slug Shell" result = /obj/item/ammo_casing/shotgun/laserslug diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm index fd66b8d0ae..44a0a06cdc 100644 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ b/code/modules/mob/living/simple_animal/hostile/stickman.dm @@ -38,7 +38,7 @@ minimum_distance = 5 icon_state = "stickmanranged" icon_living = "stickmanranged" - casingtype = /obj/item/ammo_casing/c45nostamina + casingtype = /obj/item/ammo_casing/c45/nostamina projectilesound = 'sound/misc/bang.ogg' loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 7cadba01d9..11331e7ab7 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -95,7 +95,7 @@ minimum_distance = 5 icon_state = "syndicateranged" icon_living = "syndicateranged" - casingtype = /obj/item/ammo_casing/c45nostamina + casingtype = /obj/item/ammo_casing/c45/nostamina projectilesound = 'sound/weapons/gunshot_smg.ogg' loot = list(/obj/effect/gibspawner/human) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 65cce2b7c7..848d690853 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -1,100 +1,126 @@ +// .357 (Syndie Revolver) + /obj/item/ammo_casing/a357 + name = ".357 bullet casing" desc = "A .357 bullet casing." caliber = "357" - projectile_type = /obj/item/projectile/bullet + projectile_type = /obj/item/projectile/bullet/a357 + +// 7.62 (Nagant Rifle) /obj/item/ammo_casing/a762 + name = "7.62 bullet casing" desc = "A 7.62 bullet casing." icon_state = "762-casing" caliber = "a762" - projectile_type = /obj/item/projectile/bullet + projectile_type = /obj/item/projectile/bullet/a762 /obj/item/ammo_casing/a762/enchanted - projectile_type = /obj/item/projectile/bullet/weakbullet3 + projectile_type = /obj/item/projectile/bullet/a762_enchanted -/obj/item/ammo_casing/a50 - desc = "A .50AE bullet casing." - caliber = ".50" - projectile_type = /obj/item/projectile/bullet - -/obj/item/ammo_casing/c38 - desc = "A .38 bullet casing." - caliber = "38" - projectile_type = /obj/item/projectile/bullet/weakbullet2 - -/obj/item/ammo_casing/c10mm - desc = "A 10mm bullet casing." - caliber = "10mm" - projectile_type = /obj/item/projectile/bullet/midbullet3 - -/obj/item/ammo_casing/c10mm/ap - projectile_type = /obj/item/projectile/bullet/midbullet3/ap - -/obj/item/ammo_casing/c10mm/fire - projectile_type = /obj/item/projectile/bullet/midbullet3/fire - -/obj/item/ammo_casing/c10mm/hp - projectile_type = /obj/item/projectile/bullet/midbullet3/hp - -/obj/item/ammo_casing/c9mm - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type = /obj/item/projectile/bullet/weakbullet3 - -/obj/item/ammo_casing/c9mmap - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type =/obj/item/projectile/bullet/armourpiercing - -/obj/item/ammo_casing/c9mmtox - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type = /obj/item/projectile/bullet/toxinbullet - -/obj/item/ammo_casing/c9mminc - desc = "A 9mm bullet casing." - caliber = "9mm" - projectile_type = /obj/item/projectile/bullet/incendiary/firebullet - -/obj/item/ammo_casing/c46x30mm - desc = "A 4.6x30mm bullet casing." - caliber = "4.6x30mm" - projectile_type = /obj/item/projectile/bullet/weakbullet3 - -/obj/item/ammo_casing/c46x30mmap - desc = "A 4.6x30mm bullet casing." - caliber = "4.6x30mm" - projectile_type =/obj/item/projectile/bullet/armourpiercing - -/obj/item/ammo_casing/c46x30mmtox - desc = "A 4.6x30mm bullet casing." - caliber = "4.6x30mm" - projectile_type = /obj/item/projectile/bullet/toxinbullet - -/obj/item/ammo_casing/c46x30mminc - desc = "A 4.6x30mm bullet casing." - caliber = "4.6x30mm" - projectile_type = /obj/item/projectile/bullet/incendiary/firebullet - -/obj/item/ammo_casing/c45 - desc = "A .45 bullet casing." - caliber = ".45" - projectile_type = /obj/item/projectile/bullet/midbullet - -/obj/item/ammo_casing/c45nostamina - desc = "A .45 bullet casing." - caliber = ".45" - projectile_type = /obj/item/projectile/bullet/midbullet3 +// 7.62x38mmR (Nagant Revolver) /obj/item/ammo_casing/n762 + name = "7.62x38mmR bullet casing" desc = "A 7.62x38mmR bullet casing." caliber = "n762" - projectile_type = /obj/item/projectile/bullet + projectile_type = /obj/item/projectile/bullet/n762 + +// .50AE (Desert Eagle) + +/obj/item/ammo_casing/a50AE + name = ".50AE bullet casing" + desc = "A .50AE bullet casing." + caliber = ".50" + projectile_type = /obj/item/projectile/bullet/a50AE + +// .38 (Detective's Gun) + +/obj/item/ammo_casing/c38 + name = ".38 bullet casing" + desc = "A .38 bullet casing." + caliber = "38" + projectile_type = /obj/item/projectile/bullet/c38 + +// 10mm (Stechkin) + +/obj/item/ammo_casing/c10mm + name = ".10mm bullet casing" + desc = "A 10mm bullet casing." + caliber = "10mm" + projectile_type = /obj/item/projectile/bullet/c10mm + +/obj/item/ammo_casing/c10mm/ap + name = ".10mm armor-piercing bullet casing" + desc = "A 10mm armor-piercing bullet casing." + projectile_type = /obj/item/projectile/bullet/c10mm_ap + +/obj/item/ammo_casing/c10mm/hp + name = ".10mm hollow-point bullet casing" + desc = "A 10mm hollow-point bullet casing." + projectile_type = /obj/item/projectile/bullet/c10mm_hp + +/obj/item/ammo_casing/c10mm/fire + name = ".10mm incendiary bullet casing" + desc = "A 10mm incendiary bullet casing." + projectile_type = /obj/item/projectile/bullet/incendiary/c10mm + +// 9mm (Stechkin APS) + +/obj/item/ammo_casing/c9mm + name = "9mm bullet casing" + desc = "A 9mm bullet casing." + caliber = "9mm" + projectile_type = /obj/item/projectile/bullet/c9mm + +/obj/item/ammo_casing/c9mm/ap + name = "9mm armor-piercing bullet casing" + desc = "A 9mm armor-piercing bullet casing." + projectile_type =/obj/item/projectile/bullet/c9mm_ap + +/obj/item/ammo_casing/c9mm/inc + name = "9mm incendiary bullet casing" + desc = "A 9mm incendiary bullet casing." + projectile_type = /obj/item/projectile/bullet/incendiary/c9mm + +// 4.6x30mm (Autorifles) + +/obj/item/ammo_casing/c46x30mm + name = "4.6x30mm bullet casing" + desc = "A 4.6x30mm bullet casing." + caliber = "4.6x30mm" + projectile_type = /obj/item/projectile/bullet/c46x30mm + +/obj/item/ammo_casing/c46x30mm/ap + name = "4.6x30mm armor-piercing bullet casing" + desc = "A 4.6x30mm armor-piercing bullet casing." + projectile_type = /obj/item/projectile/bullet/c46x30mm_ap + +/obj/item/ammo_casing/c46x30mm/inc + name = "4.6x30mm incendiary bullet casing" + desc = "A 4.6x30mm incendiary bullet casing." + projectile_type = /obj/item/projectile/bullet/incendiary/c46x30mm + +// .45 (M1911) + +/obj/item/ammo_casing/c45 + name = ".45 bullet casing" + desc = "A .45 bullet casing." + caliber = ".45" + projectile_type = /obj/item/projectile/bullet/c45 + +/obj/item/ammo_casing/c45/nostamina + projectile_type = /obj/item/projectile/bullet/c45_nostamina + +// 5.56mm (M-90gl Carbine) /obj/item/ammo_casing/a556 + name = "5.56mm bullet casing" desc = "A 5.56mm bullet casing." caliber = "a556" - projectile_type = /obj/item/projectile/bullet/heavybullet + projectile_type = /obj/item/projectile/bullet/a556 + +// 40mm (Grenade Launcher) /obj/item/ammo_casing/a40mm name = "40mm HE shell" @@ -103,148 +129,93 @@ icon_state = "40mmHE" projectile_type = /obj/item/projectile/bullet/a40mm +// .50 (Sniper) - -/////SNIPER ROUNDS - -/obj/item/ammo_casing/point50 +/obj/item/ammo_casing/p50 + name = ".50 bullet casing" desc = "A .50 bullet casing." caliber = ".50" - projectile_type = /obj/item/projectile/bullet/sniper + projectile_type = /obj/item/projectile/bullet/p50 icon_state = ".50" -/obj/item/ammo_casing/soporific +/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." - caliber = ".50" - projectile_type = /obj/item/projectile/bullet/sniper/soporific + projectile_type = /obj/item/projectile/bullet/p50/soporific icon_state = "sleeper" -/obj/item/ammo_casing/haemorrhage - desc = "A .50 bullet casing, specialised in causing massive bloodloss." - caliber = ".50" - projectile_type = /obj/item/projectile/bullet/sniper/haemorrhage - icon_state = ".50" - -/obj/item/ammo_casing/penetrator +/obj/item/ammo_casing/p50/penetrator + name = ".50 penetrator round bullet casing" desc = "A .50 caliber penetrator round casing." - caliber = ".50" - projectile_type = /obj/item/projectile/bullet/sniper/penetrator - icon_state = ".50" + projectile_type = /obj/item/projectile/bullet/p50/penetrator -/obj/item/ammo_casing/point50/gang - desc = "A black market .50 bullet casing." - projectile_type = /obj/item/projectile/bullet/sniper/gang - -/obj/item/ammo_casing/point50/gang/sleeper - desc = "Am illegally modified tranquilizer round." - projectile_type = /obj/item/projectile/bullet/sniper/gang/sleeper - icon_state = "sleeper" - -/// SAW ROUNDS +// 1.95x129mm (SAW) /obj/item/ammo_casing/mm195x129 + name = "1.95x129mm bullet casing" desc = "A 1.95x129mm bullet casing." icon_state = "762-casing" caliber = "mm195129" - projectile_type = /obj/item/projectile/bullet/saw - -/obj/item/ammo_casing/mm195x129/bleeding - desc = "A 1.95x129mm bullet casing with specialized inner-casing, that when it makes contact with a target, releases tiny shrapnel to induce internal bleeding." - icon_state = "762-casing" - projectile_type = /obj/item/projectile/bullet/saw/bleeding - -/obj/item/ammo_casing/mm195x129/hollow - desc = "A 1.95x129mm bullet casing designed to cause more damage to unarmored targets." - projectile_type = /obj/item/projectile/bullet/saw/hollow + projectile_type = /obj/item/projectile/bullet/mm195x129 /obj/item/ammo_casing/mm195x129/ap + name = "1.95x129mm armor-piercing bullet casing" desc = "A 1.95x129mm bullet casing designed with a hardened-tipped core to help penetrate armored targets." - projectile_type = /obj/item/projectile/bullet/saw/ap + projectile_type = /obj/item/projectile/bullet/mm195x129_ap + +/obj/item/ammo_casing/mm195x129/hollow + name = "1.95x129mm hollow-point bullet casing" + desc = "A 1.95x129mm bullet casing designed to cause more damage to unarmored targets." + projectile_type = /obj/item/projectile/bullet/mm195x129_hp /obj/item/ammo_casing/mm195x129/incen + name = "1.95x129mm incendiary bullet casing" desc = "A 1.95x129mm bullet casing designed with a chemical-filled capsule on the tip that when bursted, reacts with the atmosphere to produce a fireball, engulfing the target in flames. " - projectile_type = /obj/item/projectile/bullet/saw/incen + projectile_type = /obj/item/projectile/bullet/incendiary/mm195x129 - - - -//SHOTGUN ROUNDS +// Shotgun /obj/item/ammo_casing/shotgun name = "shotgun slug" desc = "A 12 gauge lead slug." icon_state = "blshell" caliber = "shotgun" - projectile_type = /obj/item/projectile/bullet + projectile_type = /obj/item/projectile/bullet/shotgun_slug materials = list(MAT_METAL=4000) - -/obj/item/ammo_casing/shotgun/buckshot - name = "buckshot shell" - desc = "A 12 gauge buckshot shell." - icon_state = "gshell" - projectile_type = /obj/item/projectile/bullet/pellet - pellets = 6 - variance = 25 - -/obj/item/ammo_casing/shotgun/rubbershot - name = "rubber shot" - desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." - icon_state = "bshell" - projectile_type = /obj/item/projectile/bullet/rpellet - pellets = 6 - variance = 25 - materials = list(MAT_METAL=4000) - - /obj/item/ammo_casing/shotgun/beanbag name = "beanbag slug" desc = "A weak beanbag slug for riot control." icon_state = "bshell" - projectile_type = /obj/item/projectile/bullet/weakbullet + projectile_type = /obj/item/projectile/bullet/shotgun_beanbag materials = list(MAT_METAL=250) +/obj/item/ammo_casing/shotgun/incendiary + name = "incendiary slug" + desc = "An incendiary-coated shotgun slug." + icon_state = "ishell" + projectile_type = /obj/item/projectile/bullet/incendiary/shotgun -/obj/item/ammo_casing/shotgun/improvised - name = "improvised shell" - desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." - icon_state = "improvshell" - projectile_type = /obj/item/projectile/bullet/pellet/weak - materials = list(MAT_METAL=250) - pellets = 10 - variance = 25 - - -/obj/item/ammo_casing/shotgun/improvised/overload - name = "overloaded improvised shell" - desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards. This one has been packed with even more \ - propellant. It's like playing russian roulette, with a shotgun." - icon_state = "improvshell" - projectile_type = /obj/item/projectile/bullet/pellet/overload - materials = list(MAT_METAL=250) +/obj/item/ammo_casing/shotgun/dragonsbreath + name = "dragonsbreath shell" + desc = "A shotgun shell which fires a spread of incendiary pellets." + icon_state = "ishell2" + projectile_type = /obj/item/projectile/bullet/incendiary/shotgun/dragonsbreath pellets = 4 - variance = 40 - + variance = 35 /obj/item/ammo_casing/shotgun/stunslug name = "taser slug" desc = "A stunning taser slug." icon_state = "stunshell" - projectile_type = /obj/item/projectile/bullet/stunshot + projectile_type = /obj/item/projectile/bullet/shotgun_stunslug materials = list(MAT_METAL=250) - -/obj/item/ammo_casing/shotgun/meteorshot - name = "meteorshot shell" +/obj/item/ammo_casing/shotgun/meteorslug + name = "meteorslug shell" desc = "A shotgun shell rigged with CMC technology, which launches a massive slug when fired." icon_state = "mshell" - projectile_type = /obj/item/projectile/bullet/meteorshot - -/obj/item/ammo_casing/shotgun/breaching - name = "breaching shell" - desc = "An economic version of the meteorshot, utilizing similar technologies. Great for busting down doors." - icon_state = "mshell" - projectile_type = /obj/item/projectile/bullet/meteorshot/weak + projectile_type = /obj/item/projectile/bullet/shotgun_meteorslug /obj/item/ammo_casing/shotgun/pulseslug name = "pulse slug" @@ -252,27 +223,39 @@ energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \ would have difficulty with." icon_state = "pshell" - projectile_type = /obj/item/projectile/beam/pulse/shot - -/obj/item/ammo_casing/shotgun/incendiary - name = "incendiary slug" - desc = "An incendiary-coated shotgun slug." - icon_state = "ishell" - projectile_type = /obj/item/projectile/bullet/incendiary/shell + projectile_type = /obj/item/projectile/beam/pulse/shotgun /obj/item/ammo_casing/shotgun/frag12 name = "FRAG-12 slug" desc = "A high explosive breaching round for a 12 gauge shotgun." icon_state = "heshell" - projectile_type = /obj/item/projectile/bullet/frag12 + projectile_type = /obj/item/projectile/bullet/shotgun_frag12 -/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath - name = "dragonsbreath shell" - desc = "A shotgun shell which fires a spread of incendiary pellets." - icon_state = "ishell2" - projectile_type = /obj/item/projectile/bullet/incendiary/shell/dragonsbreath - pellets = 4 - variance = 35 +/obj/item/ammo_casing/shotgun/buckshot + name = "buckshot shell" + desc = "A 12 gauge buckshot shell." + icon_state = "gshell" + projectile_type = /obj/item/projectile/bullet/pellet/shotgun_buckshot + pellets = 6 + variance = 25 + +/obj/item/ammo_casing/shotgun/rubbershot + name = "rubber shot" + desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance." + icon_state = "bshell" + projectile_type = /obj/item/projectile/bullet/pellet/shotgun_rubbershot + pellets = 6 + variance = 25 + materials = list(MAT_METAL=4000) + +/obj/item/ammo_casing/shotgun/improvised + name = "improvised shell" + desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." + icon_state = "improvshell" + projectile_type = /obj/item/projectile/bullet/pellet/shotgun_improvised + materials = list(MAT_METAL=250) + pellets = 10 + variance = 25 /obj/item/ammo_casing/shotgun/ion name = "ion shell" @@ -319,4 +302,4 @@ reagents.add_reagent("spore", 6) reagents.add_reagent("mutetoxin", 6) //;HELP OPS IN MAINT reagents.add_reagent("coniine", 6) - reagents.add_reagent("sodium_thiopental", 6) + reagents.add_reagent("sodium_thiopental", 6) \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/special.dm b/code/modules/projectiles/ammunition/special.dm index fa9c2ae5b0..11fd12da70 100644 --- a/code/modules/projectiles/ammunition/special.dm +++ b/code/modules/projectiles/ammunition/special.dm @@ -85,7 +85,7 @@ ..() /obj/item/ammo_casing/energy/c3dbullet - projectile_type = /obj/item/projectile/bullet/midbullet3 + projectile_type = /obj/item/projectile/bullet/c3d select_name = "spraydown" fire_sound = 'sound/weapons/gunshot_smg.ogg' e_cost = 20 diff --git a/code/modules/projectiles/boxes_magazines/external_mag.dm b/code/modules/projectiles/boxes_magazines/external_mag.dm index 525466be28..5ffe1b475a 100644 --- a/code/modules/projectiles/boxes_magazines/external_mag.dm +++ b/code/modules/projectiles/boxes_magazines/external_mag.dm @@ -1,6 +1,4 @@ - - ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m10mm @@ -72,25 +70,16 @@ /obj/item/ammo_box/magazine/wt550m9/wtap name = "wt550 magazine (Armour Piercing 4.6x30mm)" icon_state = "46x30mmtA-20" - ammo_type = /obj/item/ammo_casing/c46x30mmap + ammo_type = /obj/item/ammo_casing/c46x30mm/ap /obj/item/ammo_box/magazine/wt550m9/wtap/update_icon() ..() icon_state = "46x30mmtA-[round(ammo_count(),4)]" -/obj/item/ammo_box/magazine/wt550m9/wttx - name = "wt550 magazine (Toxin Tipped 4.6x30mm)" - icon_state = "46x30mmtT-20" - ammo_type = /obj/item/ammo_casing/c46x30mmtox - -/obj/item/ammo_box/magazine/wt550m9/wttx/update_icon() - ..() - icon_state = "46x30mmtT-[round(ammo_count(),4)]" - /obj/item/ammo_box/magazine/wt550m9/wtic name = "wt550 magazine (Incindiary 4.6x30mm)" icon_state = "46x30mmtI-20" - ammo_type = /obj/item/ammo_casing/c46x30mminc + ammo_type = /obj/item/ammo_casing/c46x30mm/inc /obj/item/ammo_box/magazine/wt550m9/wtic/update_icon() ..() @@ -120,15 +109,11 @@ /obj/item/ammo_box/magazine/smgm9mm/ap name = "SMG magazine (Armour Piercing 9mm)" - ammo_type = /obj/item/ammo_casing/c9mmap - -/obj/item/ammo_box/magazine/smgm9mm/toxin - name = "SMG magazine (Toxin Tipped 9mm)" - ammo_type = /obj/item/ammo_casing/c9mmtox + ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/ammo_box/magazine/smgm9mm/fire name = "SMG Magazine (Incindiary 9mm)" - ammo_type = /obj/item/ammo_casing/c9mminc + ammo_type = /obj/item/ammo_casing/c9mm/inc /obj/item/ammo_box/magazine/pistolm9mm name = "pistol magazine (9mm)" @@ -145,7 +130,7 @@ name = "SMG magazine (.45)" icon_state = "c20r45-24" origin_tech = "combat=2" - ammo_type = /obj/item/ammo_casing/c45nostamina + ammo_type = /obj/item/ammo_casing/c45/nostamina caliber = ".45" max_ammo = 24 @@ -164,7 +149,7 @@ name = "handgun magazine (.50ae)" icon_state = "50ae" origin_tech = "combat=2" - ammo_type = /obj/item/ammo_casing/a50 + ammo_type = /obj/item/ammo_casing/a50AE caliber = ".50" max_ammo = 7 multiple_sprites = 1 @@ -212,17 +197,17 @@ /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" icon_state = "m12gf" - ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath /obj/item/ammo_box/magazine/m12g/bioterror name = "shotgun magazine (12g bioterror)" icon_state = "m12gt" ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror -/obj/item/ammo_box/magazine/m12g/breach - name = "shotgun magazine (12g breacher slugs)" +/obj/item/ammo_box/magazine/m12g/meteor + name = "shotgun magazine (12g meteor slugs)" icon_state = "m12gbc" - ammo_type = /obj/item/ammo_casing/shotgun/breaching + ammo_type = /obj/item/ammo_casing/shotgun/meteorslug //// SNIPER MAGAZINES @@ -231,7 +216,7 @@ name = "sniper rounds (.50)" icon_state = ".50mag" origin_tech = "combat=6;syndicate=2" - ammo_type = /obj/item/ammo_casing/point50 + ammo_type = /obj/item/ammo_casing/p50 max_ammo = 6 caliber = ".50" @@ -246,37 +231,17 @@ desc = "Soporific sniper rounds, designed for happy days and dead quiet nights..." icon_state = "soporific" origin_tech = "combat=6;syndicate=3" - ammo_type = /obj/item/ammo_casing/soporific + ammo_type = /obj/item/ammo_casing/p50/soporific max_ammo = 3 caliber = ".50" -/obj/item/ammo_box/magazine/sniper_rounds/haemorrhage - name = "sniper rounds (Bleed)" - desc = "Haemorrhage sniper rounds, leaves your target in a pool of crimson pain" - icon_state = "haemorrhage" - ammo_type = /obj/item/ammo_casing/haemorrhage - max_ammo = 5 - caliber = ".50" - /obj/item/ammo_box/magazine/sniper_rounds/penetrator name = "sniper rounds (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/penetrator + ammo_type = /obj/item/ammo_casing/p50/penetrator origin_tech = "combat=6;syndicate=3" max_ammo = 5 -/obj/item/ammo_box/magazine/sniper_rounds/gang - name = "black market sniper rounds (.50)" - icon_state = ".50mag" - origin_tech = "combat=6" - ammo_type = /obj/item/ammo_casing/point50/gang - -/obj/item/ammo_box/magazine/sniper_rounds/gang/sleeper - name = "illegally modified tranquilizer round" - icon_state = "soporific" - origin_tech = "combat=6" - ammo_type = /obj/item/ammo_casing/point50/gang/sleeper - //// SAW MAGAZINES /obj/item/ammo_box/magazine/mm195x129 @@ -287,11 +252,6 @@ caliber = "mm195129" max_ammo = 50 -/obj/item/ammo_box/magazine/mm195x129/bleeding - name = "box magazine (Bleeding 1.95x129mm)" - origin_tech = "combat=3" - ammo_type = /obj/item/ammo_casing/mm195x129/bleeding - /obj/item/ammo_box/magazine/mm195x129/hollow name = "box magazine (Hollow-Point 1.95x129mm)" origin_tech = "combat=3" diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 5388bf8e0a..423cd56202 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -384,11 +384,6 @@ pin = /obj/item/device/firing_pin/implant/pindicate origin_tech = "combat=7;syndicate=6" -/obj/item/gun/ballistic/automatic/sniper_rifle/gang - name = "black market sniper rifle" - desc = "A long ranged weapon that does significant damage. It is well worn from years of service." - mag_type = /obj/item/ammo_box/magazine/sniper_rounds/gang - // Old Semi-Auto Rifle // /obj/item/gun/ballistic/automatic/surplus diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 844a8a4662..d1d7b50cf5 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -77,7 +77,7 @@ if(isturf(target) || istype(target, /obj/structure/)) target.ex_act(EXPLODE_HEAVY) -/obj/item/projectile/beam/pulse/shot +/obj/item/projectile/beam/pulse/shotgun damage = 40 /obj/item/projectile/beam/pulse/heavy diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index d11fa850c2..6f4ae50243 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -3,105 +3,238 @@ icon_state = "bullet" damage = 60 damage_type = BRUTE - nodamage = 0 + nodamage = FALSE flag = "bullet" hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect -/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage - damage = 5 - stamina = 80 - -/obj/item/projectile/bullet/weakbullet2 //detective revolver instastuns, but multiple shots are better for keeping punks down - damage = 15 - knockdown = 30 - stamina = 50 - -/obj/item/projectile/bullet/weakbullet3 - damage = 20 - -/obj/item/projectile/bullet/toxinbullet - damage = 15 - damage_type = TOX - -/obj/item/projectile/bullet/incendiary/firebullet - damage = 10 - -/obj/item/projectile/bullet/armourpiercing - damage = 15 - armour_penetration = 40 - -/obj/item/projectile/bullet/pellet - name = "pellet" - damage = 12.5 - /obj/item/projectile/bullet/pellet/Range() ..() damage += -0.75 if(damage < 0) qdel(src) -/obj/item/projectile/bullet/pellet/weak - damage = 6 - -/obj/item/projectile/bullet/pellet/weak/New() - range = rand(1, 8) - ..() - -/obj/item/projectile/bullet/pellet/weak/on_range() - do_sparks(1, TRUE, src) - ..() - -/obj/item/projectile/bullet/pellet/overload - damage = 3 - -/obj/item/projectile/bullet/pellet/overload/New() - range = rand(1, 10) - ..() - -/obj/item/projectile/bullet/pellet/overload/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, 0, 0, 2) - -/obj/item/projectile/bullet/pellet/overload/on_range() - explosion(src, 0, 0, 2) - do_sparks(3, TRUE, src) - ..() - -/obj/item/projectile/bullet/midbullet +/obj/item/projectile/bullet/incendiary damage = 20 - stamina = 65 //two round bursts from the c20r knocks people down + var/fire_stacks = 4 +/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(fire_stacks) + M.IgniteMob() -/obj/item/projectile/bullet/midbullet2 - damage = 25 +/obj/item/projectile/bullet/incendiary/Move() + . = ..() + var/turf/location = get_turf(src) + if(location) + new /obj/effect/hotspot(location) + location.hotspot_expose(700, 50, 1) -/obj/item/projectile/bullet/midbullet3 +// .357 (Syndie Revolver) + +/obj/item/projectile/bullet/a357 + name = ".357 bullet" + damage = 60 + +// 7.62 (Nagant Rifle) + +/obj/item/projectile/bullet/a762 + name = "7.62 bullet" + damage = 60 + +/obj/item/projectile/bullet/a762_enchanted + name = "enchanted 7.62 bullet" + damage = 5 + stamina = 80 + +// 7.62x38mmR (Nagant Revolver) + +/obj/item/projectile/bullet/n762 + name = "7.62x38mmR bullet" + damage = 60 + +// .50AE (Desert Eagle) + +/obj/item/projectile/bullet/a50AE + name = ".50AE bullet" + damage = 60 + +// .38 (Detective's Gun) + +/obj/item/projectile/bullet/c38 + name = ".38 bullet" + damage = 15 + knockdown = 30 + stamina = 50 + +// 10mm (Stechkin) + +/obj/item/projectile/bullet/c10mm + name = "10mm bullet" damage = 30 -/obj/item/projectile/bullet/midbullet3/hp - damage = 40 - armour_penetration = -50 - -/obj/item/projectile/bullet/midbullet3/ap +/obj/item/projectile/bullet/c10mm_ap + name = "10mm armor-piercing bullet" damage = 27 armour_penetration = 40 -/obj/item/projectile/bullet/midbullet3/fire/on_hit(atom/target, blocked = FALSE) - if(..(target, blocked)) - var/mob/living/M = target - M.adjust_fire_stacks(1) - M.IgniteMob() +/obj/item/projectile/bullet/c10mm_hp + name = "10mm hollow-point bullet" + damage = 40 + armour_penetration = -50 -/obj/item/projectile/bullet/heavybullet +/obj/item/projectile/bullet/incendiary/c10mm + name = "10mm incendiary bullet" + damage = 15 + fire_stacks = 2 + +// 9mm (Stechkin APS) + +/obj/item/projectile/bullet/c9mm + name = "9mm bullet" + damage = 20 + +/obj/item/projectile/bullet/c9mm_ap + name = "9mm armor-piercing bullet" + damage = 15 + armour_penetration = 40 + +/obj/item/projectile/bullet/incendiary/c9mm + name = "9mm incendiary bullet" + damage = 10 + fire_stacks = 1 + +// 4.6x30mm (Autorifles) + +/obj/item/projectile/bullet/c46x30mm + desc = "4.6x30mm bullet" + damage = 20 + +/obj/item/projectile/bullet/c46x30mm_ap + name = "4.6x30mm armor-piercing bullet" + damage = 15 + armour_penetration = 40 + +/obj/item/projectile/bullet/incendiary/c46x30mm + name = "4.6x30mm incendiary bullet" + damage = 10 + fire_stacks = 1 + +// .45 (M1911) + +/obj/item/projectile/bullet/c45 + name = ".45 bullet" + damage = 20 + stamina = 65 + +/obj/item/projectile/bullet/c45_nostamina + name = ".45 bullet" + damage = 20 + +// 5.56mm (M-90gl Carbine) + +/obj/item/projectile/bullet/a556 + name = "5.56mm bullet" damage = 35 -/obj/item/projectile/bullet/rpellet - damage = 3 - stamina = 25 +// 40mm (Grenade Launcher -/obj/item/projectile/bullet/stunshot //taser slugs for shotguns, nothing special - name = "stunshot" +/obj/item/projectile/bullet/a40mm + name ="40mm grenade" + desc = "USE A WEEL GUN" + icon_state= "bolter" + damage = 60 + +/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE) + ..() + explosion(target, -1, 0, 2, 1, 0, flame_range = 3) + return TRUE + +// .50 (Sniper) + +/obj/item/projectile/bullet/p50 + name =".50 bullet" + speed = 0 //360 alwaysscope. + damage = 70 + knockdown = 100 + dismemberment = 50 + armour_penetration = 50 + var/breakthings = TRUE + +/obj/item/projectile/bullet/p50/on_hit(atom/target, blocked = 0) + if((blocked != 100) && (!ismob(target) && breakthings)) + target.ex_act(rand(1,2)) + return ..() + +/obj/item/projectile/bullet/p50/soporific + name =".50 soporific bullet" + armour_penetration = 0 + nodamage = TRUE + dismemberment = 0 + knockdown = 0 + breakthings = FALSE + +/obj/item/projectile/bullet/p50/soporific/on_hit(atom/target, blocked = FALSE) + if((blocked != 100) && isliving(target)) + var/mob/living/L = target + L.Sleeping(400) + return ..() + +/obj/item/projectile/bullet/p50/penetrator + name =".50 penetrator bullet" + icon_state = "gauss" + name = "penetrator round" + damage = 60 + forcedodge = TRUE + dismemberment = 0 //It goes through you cleanly. + knockdown = 0 + breakthings = FALSE + +// 1.95x129mm (SAW) + +/obj/item/projectile/bullet/mm195x129 + name = "1.95x129mm bullet" + damage = 45 + armour_penetration = 5 + +/obj/item/projectile/bullet/mm195x129_ap + name = "1.95x129mm armor-piercing bullet" + damage = 40 + armour_penetration = 75 + +/obj/item/projectile/bullet/mm195x129_hp + name = "1.95x129mm hollow-point bullet" + damage = 60 + armour_penetration = -60 + +/obj/item/projectile/bullet/incendiary/mm195x129 + name = "1.95x129mm incendiary bullet" + damage = 15 + fire_stacks = 3 + +// Shotgun + +/obj/item/projectile/bullet/shotgun_slug + name = "12g shotgun slug" + damage = 60 + +/obj/item/projectile/bullet/shotgun_beanbag + name = "beanbag slug" + damage = 5 + stamina = 80 + +/obj/item/projectile/bullet/incendiary/shotgun + name = "incendiary slug" + damage = 20 + +/obj/item/projectile/bullet/incendiary/shotgun/dragonsbreath + name = "dragonsbreath pellet" + damage = 5 + +/obj/item/projectile/bullet/shotgun_stunslug + name = "stunslug" damage = 5 knockdown = 100 stutter = 5 @@ -110,47 +243,90 @@ icon_state = "spark" color = "#FFFF00" -/obj/item/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(4) - M.IgniteMob() - - -/obj/item/projectile/bullet/incendiary/shell - name = "incendiary slug" - damage = 20 - -/obj/item/projectile/bullet/incendiary/shell/Move() - ..() - var/turf/location = get_turf(src) - if(location) - new /obj/effect/hotspot(location) - location.hotspot_expose(700, 50, 1) - -/obj/item/projectile/bullet/incendiary/shell/dragonsbreath - name = "dragonsbreath round" - damage = 5 - - -/obj/item/projectile/bullet/meteorshot - name = "meteor" +/obj/item/projectile/bullet/shotgun_meteorslug + name = "meteorslug" icon = 'icons/obj/meteor.dmi' icon_state = "dust" - damage = 30 - knockdown = 160 + damage = 20 + knockdown = 80 hitsound = 'sound/effects/meteorimpact.ogg' -/obj/item/projectile/bullet/meteorshot/weak - damage = 10 - knockdown = 80 +/obj/item/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE) + . = ..() + if(ismovableatom(target)) + var/atom/movable/M = target + var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) + M.throw_at(throw_target, 3, 2) + +/obj/item/projectile/bullet/shotgun_meteorslug/Initialize() + . = ..() + SpinAnimation() + +/obj/item/projectile/bullet/shotgun_frag12 + name ="frag12 slug" + damage = 25 + knockdown = 50 + +/obj/item/projectile/bullet/shotgun_frag12/on_hit(atom/target, blocked = FALSE) + ..() + explosion(target, -1, 0, 1) + return TRUE + +/obj/item/projectile/bullet/pellet/shotgun_buckshot + name = "buckshot pellet" + damage = 12.5 + +/obj/item/projectile/bullet/pellet/shotgun_rubbershot + damage = 3 + stamina = 25 + +/obj/item/projectile/bullet/pellet/shotgun_improvised + damage = 6 + +/obj/item/projectile/bullet/pellet/shotgun_improvised/Initialize() + . = ..() + range = rand(1, 8) + +/obj/item/projectile/bullet/pellet/shotgun_improvised/on_range() + do_sparks(1, TRUE, src) + ..() + +// Scattershot + +/obj/item/projectile/bullet/scattershot + damage = 20 + stamina = 65 + +// LMD (exosuits) + +/obj/item/projectile/bullet/lmg + damage = 20 + +// Turrets + +/obj/item/projectile/bullet/manned_turret + damage = 20 + +/obj/item/projectile/bullet/syndicate_turret + damage = 20 + +// FNX-99 (Mechs) + +/obj/item/projectile/bullet/incendiary/fnx99 + damage = 20 + +// C3D (Borgs) + +/obj/item/projectile/bullet/c3d + damage = 20 + +// Honker /obj/item/projectile/bullet/honker damage = 0 knockdown = 60 - forcedodge = 1 - nodamage = 1 + forcedodge = TRUE + nodamage = TRUE hitsound = 'sound/items/bikehorn.ogg' icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "banana" @@ -160,17 +336,7 @@ ..() SpinAnimation() -/obj/item/projectile/bullet/meteorshot/on_hit(atom/target, blocked = FALSE) - . = ..() - if(ismovableatom(target)) - var/atom/movable/M = target - var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) - M.throw_at(throw_target, 3, 2) - -/obj/item/projectile/bullet/meteorshot/New() - ..() - SpinAnimation() - +// Mime /obj/item/projectile/bullet/mime damage = 20 @@ -181,6 +347,7 @@ var/mob/living/carbon/M = target M.silent = max(M.silent, 10) +// Darts /obj/item/projectile/bullet/dart name = "dart" @@ -210,7 +377,7 @@ ..(target, blocked) reagents.set_reacting(TRUE) reagents.handle_reactions() - return 1 + return TRUE /obj/item/projectile/bullet/dart/metalfoam/New() ..() @@ -223,18 +390,7 @@ name = "syringe" icon_state = "syringeproj" -/obj/item/projectile/bullet/neurotoxin - name = "neurotoxin spit" - icon_state = "neurotoxin" - damage = 5 - damage_type = TOX - knockdown = 100 - -/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE) - if(isalien(target)) - knockdown = 0 - nodamage = 1 - . = ..() // Execute the rest of the code. +// DNA injector /obj/item/projectile/bullet/dnainjector name = "\improper DNA injector" @@ -261,121 +417,3 @@ QDEL_NULL(injector) return ..() -//// SNIPER BULLETS - -/obj/item/projectile/bullet/sniper - speed = 0 //360 alwaysscope. - damage = 70 - knockdown = 100 - dismemberment = 50 - armour_penetration = 50 - var/breakthings = TRUE - -/obj/item/projectile/bullet/sniper/on_hit(atom/target, blocked = FALSE) - if((blocked != 100) && (!ismob(target) && breakthings)) - target.ex_act(rand(1,2)) - return ..() - -/obj/item/projectile/bullet/sniper/gang - damage = 55 - knockdown = 20 - dismemberment = 15 - armour_penetration = 25 - -/obj/item/projectile/bullet/sniper/gang/sleeper - nodamage = 1 - knockdown = 0 - dismemberment = 0 - breakthings = FALSE - -/obj/item/projectile/bullet/sniper/gang/sleeper/on_hit(atom/target, blocked = FALSE) - if((blocked != 100) && isliving(target)) - var/mob/living/L = target - L.blur_eyes(8) - if(L.staminaloss >= 40) - L.Sleeping(400) - else - L.adjustStaminaLoss(55) - return 1 - -/obj/item/projectile/bullet/sniper/soporific - armour_penetration = 0 - nodamage = 1 - dismemberment = 0 - knockdown = 0 - breakthings = FALSE - -/obj/item/projectile/bullet/sniper/soporific/on_hit(atom/target, blocked = FALSE) - if((blocked != 100) && isliving(target)) - var/mob/living/L = target - L.Sleeping(400) - return ..() - - -/obj/item/projectile/bullet/sniper/haemorrhage - armour_penetration = 15 - damage = 15 - dismemberment = 0 - knockdown = 0 - breakthings = FALSE - -/obj/item/projectile/bullet/sniper/haemorrhage/on_hit(atom/target, blocked = FALSE) - if((blocked != 100) && iscarbon(target)) - var/mob/living/carbon/C = target - C.bleed(100) - return ..() - - -/obj/item/projectile/bullet/sniper/penetrator - icon_state = "gauss" - name = "penetrator round" - damage = 60 - forcedodge = 1 - dismemberment = 0 //It goes through you cleanly. - knockdown = 0 - breakthings = FALSE - - - -//// SAW BULLETS - - -/obj/item/projectile/bullet/saw - damage = 45 - armour_penetration = 5 - -/obj/item/projectile/bullet/saw/bleeding - damage = 20 - armour_penetration = 0 - -/obj/item/projectile/bullet/saw/bleeding/on_hit(atom/target, blocked = FALSE) - . = ..() - if((blocked != 100) && iscarbon(target)) - var/mob/living/carbon/C = target - C.bleed(35) - -/obj/item/projectile/bullet/saw/hollow - damage = 60 - armour_penetration = -60 - -/obj/item/projectile/bullet/saw/ap - damage = 40 - armour_penetration = 75 - -/obj/item/projectile/bullet/saw/incen - damage = 7 - armour_penetration = 0 - -/obj/item/projectile/bullet/saw/incen/Move() - ..() - var/turf/location = get_turf(src) - if(location) - new /obj/effect/hotspot(location) - location.hotspot_expose(700, 50, 1) - -/obj/item/projectile/bullet/saw/incen/on_hit(atom/target, blocked = FALSE) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(3) - M.IgniteMob() diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index f9f7686a46..79a3d51eec 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -32,17 +32,6 @@ explosion(target, -1, 0, 2) return 1 -/obj/item/projectile/bullet/a40mm - name ="40mm grenade" - desc = "USE A WEEL GUN" - icon_state= "bolter" - damage = 60 - -/obj/item/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 0, 2, 1, 0, flame_range = 3) - return 1 - /obj/item/projectile/bullet/a84mm name ="anti-armour rocket" desc = "USE A WEEL GUN" @@ -184,16 +173,6 @@ qdel(src) gun.create_portal(src, get_turf(src)) -/obj/item/projectile/bullet/frag12 - name ="explosive slug" - damage = 25 - knockdown = 50 - -/obj/item/projectile/bullet/frag12/on_hit(atom/target, blocked = FALSE) - ..() - explosion(target, -1, 0, 1) - return 1 - /obj/item/projectile/plasma name = "plasma blast" icon_state = "plasmacutter" @@ -616,3 +595,19 @@ /obj/item/projectile/hallucination/death/hal_apply_effect() new /datum/hallucination/death(hal_target, TRUE) + +// Neurotoxin + +/obj/item/projectile/bullet/neurotoxin + name = "neurotoxin spit" + icon_state = "neurotoxin" + damage = 5 + damage_type = TOX + knockdown = 100 + +/obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE) + if(isalien(target)) + knockdown = 0 + nodamage = TRUE + return ..() + diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index a03b8c8127..89adfe8edc 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -203,13 +203,6 @@ materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000) build_path = /obj/item/ammo_box/magazine/wt550m9/wtic -/datum/design/mag_oldsmg/tx_mag - name = "WT-550 Auto Gun Uranium Magazine (4.6x30mm TX)" - desc = "A 20 round uranium tipped magazine for the out of date security WT-550 Auto Rifle" - id = "mag_oldsmg_tx" - materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_URANIUM = 2000) - build_path = /obj/item/ammo_box/magazine/wt550m9/wttx - /datum/design/stunshell name = "Stun Shell" desc = "A stunning shell for a shotgun." diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm index 71a0d89f16..4e5c0605e2 100644 --- a/code/modules/spells/spell_types/mime.dm +++ b/code/modules/spells/spell_types/mime.dm @@ -1,140 +1,280 @@ -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall - name = "Invisible Wall" - desc = "The mime's performance transmutates into physical reality." - school = "mime" - panel = "Mime" - summon_type = list(/obj/effect/forcefield/mime) - invocation_type = "emote" - invocation_emote_self = "You form a wall in front of yourself." - summon_lifespan = 300 - charge_max = 300 - clothes_req = 0 - range = 0 - cast_sound = null - human_req = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]." - else - invocation_type ="none" - ..() - - -/obj/effect/proc_holder/spell/targeted/mime/speak - name = "Speech" - desc = "Make or break a vow of silence." - school = "mime" - panel = "Mime" - clothes_req = 0 - human_req = 1 - charge_max = 3000 - range = -1 - include_user = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/targeted/mime/speak/Click() - if(!usr) - return - if(!ishuman(usr)) - return - var/mob/living/carbon/human/H = usr - if(H.mind.miming) - still_recharging_msg = "You can't break your vow of silence that fast!" - else - still_recharging_msg = "You'll have to wait before you can give your vow of silence again!" - ..() - -/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr) - for(var/mob/living/carbon/human/H in targets) - H.mind.miming=!H.mind.miming - if(H.mind.miming) - to_chat(H, "You make a vow of silence.") - else - to_chat(H, "You break your vow of silence.") - -// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. - -/obj/effect/proc_holder/spell/targeted/forcewall/mime - name = "Invisible Blockade" - desc = "Form an invisible three tile wide blockade." - wall_type = /obj/effect/forcefield/mime/advanced - invocation_type = "emote" - invocation_emote_self = "You form a blockade in front of yourself." - charge_max = 600 - sound = null - clothes_req = 0 - range = -1 - include_user = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click() - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] looks as if a blockade is in front of [usr.p_them()]." - else - invocation_type ="none" - ..() - -/obj/effect/proc_holder/spell/aimed/finger_guns - name = "Finger Guns" - desc = "Shoot a mimed bullet from your fingers that stuns and does some damage." - school = "mime" - panel = "Mime" - charge_max = 300 - clothes_req = 0 - invocation_type = "emote" - invocation_emote_self = "You fire your finger gun!" - range = 20 - projectile_type = /obj/item/projectile/bullet/weakbullet2 - projectile_amount = 3 - sound = null - active_msg = "You draw your fingers!" - deactive_msg = "You put your fingers at ease. Another time." - active = FALSE - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - base_icon_state = "mime" - - -/obj/effect/proc_holder/spell/aimed/finger_guns/Click() - var/mob/living/carbon/human/owner = usr - if(owner.incapacitated()) - to_chat(owner, "You can't properly point your fingers while incapacitated.") - return - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] fires [usr.p_their()] finger gun!" - else - invocation_type ="none" - ..() - - -/obj/item/spellbook/oneuse/mimery_blockade - spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime - spellname = "" - name = "Guide to Advanced Mimery Vol 1" - desc = "The pages don't make any sound when turned." - icon_state ="bookmime" - -/obj/item/spellbook/oneuse/mimery_guns - spell = /obj/effect/proc_holder/spell/aimed/finger_guns - spellname = "" - name = "Guide to Advanced Mimery Vol 2" - desc = "There aren't any words written..." - icon_state ="bookmime" +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall + name = "Invisible Wall" + desc = "The mime's performance transmutates into physical reality." + school = "mime" + panel = "Mime" + summon_type = list(/obj/effect/forcefield/mime) + invocation_type = "emote" + invocation_emote_self = "You form a wall in front of yourself." + summon_lifespan = 300 + charge_max = 300 + clothes_req = 0 + range = 0 + cast_sound = null + human_req = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]." + else + invocation_type ="none" + ..() + + +/obj/effect/proc_holder/spell/targeted/mime/speak + name = "Speech" + desc = "Make or break a vow of silence." + school = "mime" + panel = "Mime" + clothes_req = 0 + human_req = 1 + charge_max = 3000 + range = -1 + include_user = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/targeted/mime/speak/Click() + if(!usr) + return + if(!ishuman(usr)) + return + var/mob/living/carbon/human/H = usr + if(H.mind.miming) + still_recharging_msg = "You can't break your vow of silence that fast!" + else + still_recharging_msg = "You'll have to wait before you can give your vow of silence again!" + ..() + +/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr) + for(var/mob/living/carbon/human/H in targets) + H.mind.miming=!H.mind.miming + if(H.mind.miming) + to_chat(H, "You make a vow of silence.") + else + to_chat(H, "You break your vow of silence.") + +// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. + +/obj/effect/proc_holder/spell/targeted/forcewall/mime + name = "Invisible Blockade" + desc = "Form an invisible three tile wide blockade." + wall_type = /obj/effect/forcefield/mime/advanced + invocation_type = "emote" + invocation_emote_self = "You form a blockade in front of yourself." + charge_max = 600 + sound = null + clothes_req = 0 + range = -1 + include_user = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click() + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] looks as if a blockade is in front of [usr.p_them()]." + else + invocation_type ="none" + ..() + +/obj/effect/proc_holder/spell/aimed/finger_guns + name = "Finger Guns" + desc = "Shoot a mimed bullet from your fingers that stuns and does some damage." + school = "mime" + panel = "Mime" + charge_max = 300 + clothes_req = 0 + invocation_type = "emote" + invocation_emote_self = "You fire your finger gun!" + range = 20 + projectile_type = /obj/item/projectile/bullet/mime + projectile_amount = 3 + sound = null + active_msg = "You draw your fingers!" + deactive_msg = "You put your fingers at ease. Another time." + active = FALSE + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + base_icon_state = "mime" + + +/obj/effect/proc_holder/spell/aimed/finger_guns/Click() + var/mob/living/carbon/human/owner = usr + if(owner.incapacitated()) + to_chat(owner, "You can't properly point your fingers while incapacitated.") + return + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] fires [usr.p_their()] finger gun!" + else + invocation_type ="none" + ..() + + +/obj/item/spellbook/oneuse/mimery_blockade + spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime + spellname = "" + name = "Guide to Advanced Mimery Vol 1" + desc = "The pages don't make any sound when turned." + icon_state ="bookmime" + +/obj/item/spellbook/oneuse/mimery_guns + spell = /obj/effect/proc_holder/spell/aimed/finger_guns + spellname = "" + name = "Guide to Advanced Mimery Vol 2" + desc = "There aren't any words written..." + icon_state ="bookmime" +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall + name = "Invisible Wall" + desc = "The mime's performance transmutates into physical reality." + school = "mime" + panel = "Mime" + summon_type = list(/obj/effect/forcefield/mime) + invocation_type = "emote" + invocation_emote_self = "You form a wall in front of yourself." + summon_lifespan = 300 + charge_max = 300 + clothes_req = 0 + range = 0 + cast_sound = null + human_req = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]." + else + invocation_type ="none" + ..() + + +/obj/effect/proc_holder/spell/targeted/mime/speak + name = "Speech" + desc = "Make or break a vow of silence." + school = "mime" + panel = "Mime" + clothes_req = 0 + human_req = 1 + charge_max = 3000 + range = -1 + include_user = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/targeted/mime/speak/Click() + if(!usr) + return + if(!ishuman(usr)) + return + var/mob/living/carbon/human/H = usr + if(H.mind.miming) + still_recharging_msg = "You can't break your vow of silence that fast!" + else + still_recharging_msg = "You'll have to wait before you can give your vow of silence again!" + ..() + +/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr) + for(var/mob/living/carbon/human/H in targets) + H.mind.miming=!H.mind.miming + if(H.mind.miming) + to_chat(H, "You make a vow of silence.") + else + to_chat(H, "You break your vow of silence.") + +// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. + +/obj/effect/proc_holder/spell/targeted/forcewall/mime + name = "Invisible Blockade" + desc = "Form an invisible three tile wide blockade." + wall_type = /obj/effect/forcefield/mime/advanced + invocation_type = "emote" + invocation_emote_self = "You form a blockade in front of yourself." + charge_max = 600 + sound = null + clothes_req = 0 + range = -1 + include_user = 1 + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + +/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click() + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] looks as if a blockade is in front of [usr.p_them()]." + else + invocation_type ="none" + ..() + +/obj/effect/proc_holder/spell/aimed/finger_guns + name = "Finger Guns" + desc = "Shoot a mimed bullet from your fingers that stuns and does some damage." + school = "mime" + panel = "Mime" + charge_max = 300 + clothes_req = 0 + invocation_type = "emote" + invocation_emote_self = "You fire your finger gun!" + range = 20 + projectile_type = /obj/item/projectile/bullet/mime + projectile_amount = 3 + sound = null + active_msg = "You draw your fingers!" + deactive_msg = "You put your fingers at ease. Another time." + active = FALSE + + action_icon_state = "mime" + action_background_icon_state = "bg_mime" + base_icon_state = "mime" + + +/obj/effect/proc_holder/spell/aimed/finger_guns/Click() + var/mob/living/carbon/human/owner = usr + if(owner.incapacitated()) + to_chat(owner, "You can't properly point your fingers while incapacitated.") + return + if(usr && usr.mind) + if(!usr.mind.miming) + to_chat(usr, "You must dedicate yourself to silence first.") + return + invocation = "[usr.real_name] fires [usr.p_their()] finger gun!" + else + invocation_type ="none" + ..() + + +/obj/item/spellbook/oneuse/mimery_blockade + spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime + spellname = "" + name = "Guide to Advanced Mimery Vol 1" + desc = "The pages don't make any sound when turned." + icon_state ="bookmime" + +/obj/item/spellbook/oneuse/mimery_guns + spell = /obj/effect/proc_holder/spell/aimed/finger_guns + spellname = "" + name = "Guide to Advanced Mimery Vol 2" + desc = "There aren't any words written..." + icon_state ="bookmime" diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 70f7a76a7a..38720f81a0 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -165,7 +165,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. /datum/uplink_item/nukeoffer/sniper name = "Sniper bundle" desc = "Elegant and refined: Contains a collapsed sniper rifle in an expensive carrying case, a hollow-point \ - haemorrhage magazine, a soporific knockout magazine, a free surplus supressor, and a worn out suit and tie." + a soporific knockout magazine, a free surplus supressor, and a worn out suit and tie." item = /obj/item/storage/briefcase/sniperbundle cost = 20 // normally 26 @@ -449,11 +449,11 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. item = /obj/item/ammo_box/magazine/m12g/dragon include_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/ammo/shotgun/breach - name = "12g Breaching Shells" - desc = "An economic variant of the CMC meteorshot slugs, not as effective for knocking \ - down targets, but still great for blasting airlocks off their frames." - item = /obj/item/ammo_box/magazine/m12g/breach +/datum/uplink_item/ammo/shotgun/meteor + name = "12g Meteorslug Shells" + desc = "An alternative 8-round meteorslug magazine for use in the Bulldog shotgun. \ + Great for blasting airlocks off their frames." + item = /obj/item/ammo_box/magazine/m12g/meteor include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/ammo/shotgun/bag @@ -488,12 +488,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. By the time you need to use this, you'll already be on a pile of corpses." item = /obj/item/ammo_box/magazine/mm195x129 -/datum/uplink_item/ammo/machinegun/bleeding - name = "1.95x129mm (Bleeding) Box Magazine" - desc = "A 50-round magazine of 1.95x129mm ammunition for use in the L6 SAW; equipped with special properties \ - to induce internal bleeding on targets." - item = /obj/item/ammo_box/magazine/mm195x129/bleeding - /datum/uplink_item/ammo/machinegun/hollow name = "1.95x129mm (Hollow-Point) Box Magazine" desc = "A 50-round magazine of 1.95x129mm ammunition for use in the L6 SAW; equipped with hollow-point tips to help \ @@ -527,12 +521,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. item = /obj/item/ammo_box/magazine/sniper_rounds/soporific cost = 6 -/datum/uplink_item/ammo/sniper/haemorrhage - name = ".50 Haemorrhage Magazine" - desc = "A 5-round magazine of haemorrhage ammo designed for use with .50 sniper rifles; causes heavy bleeding \ - in the target." - item = /obj/item/ammo_box/magazine/sniper_rounds/haemorrhage - /datum/uplink_item/ammo/sniper/penetrator name = ".50 Penetrator Magazine" desc = "A 5-round magazine of penetrator ammo designed for use with .50 sniper rifles. \