diff --git a/code/datums/ert/outsider.dm b/code/datums/ert/outsider.dm index f04b456f1b9..a4f4e192df5 100644 --- a/code/datums/ert/outsider.dm +++ b/code/datums/ert/outsider.dm @@ -7,6 +7,7 @@ name = "Kataphracts" chance = 15 spawner = /datum/ghostspawner/human/ert/kataphract + equipment_map = /datum/map_template/distress_kataphract /datum/responseteam/iac name = "Interstellar Aid Corps" diff --git a/code/modules/heavy_vehicle/premade/light.dm b/code/modules/heavy_vehicle/premade/light.dm index f4889467f51..4ba3f8f9bfe 100644 --- a/code/modules/heavy_vehicle/premade/light.dm +++ b/code/modules/heavy_vehicle/premade/light.dm @@ -102,4 +102,15 @@ h_l_shoulder = /obj/item/mecha_equipment/crisis_drone h_r_shoulder = /obj/item/mecha_equipment/mounted_system/flarelauncher h_l_hand = /obj/item/mecha_equipment/mounted_system/medanalyzer - h_r_hand = /obj/item/mecha_equipment/clamp \ No newline at end of file + h_r_hand = /obj/item/mecha_equipment/clamp + +/mob/living/heavy_vehicle/premade/light/kataphract + name = "kataphract exosuit" + desc = "A light and nimble exosuit, bearing the colour scheme of the Unathi Kataphracts." + + e_color = COLOR_CHESTNUT + + h_back = /obj/item/mecha_equipment/quick_enter + h_l_hand = /obj/item/mecha_equipment/clamp + h_r_hand = /obj/item/mecha_equipment/catapult + h_l_shoulder = /obj/item/mecha_equipment/mounted_system/flarelauncher \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index 525a2c5e73f..c2b6aaca5b8 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -116,6 +116,7 @@ name_plural = "Industrials" bald = 1 bodytype = "Heavy Machine" + mob_size = 12 unarmed_types = list(/datum/unarmed_attack/industrial) diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 4d23dc141e1..3813fc9808c 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -266,6 +266,12 @@ icon_state = "lcasing" spent_icon = "lcasing-spent" +/obj/item/ammo_casing/slugger + projectile_type = /obj/item/projectile/bullet/rifle/slugger + caliber = "slugger" + icon_state = "slugger-sharp" + spent_icon = "slugger-spent" + /obj/item/ammo_casing/gauss name = "tungsten slug" desc = "A heavy tungsten gauss slug." diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 6f62c9eb959..e2a2eea4b0e 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -21,6 +21,7 @@ accuracy = -3 scoped_accuracy = 4 var/bolt_open = 0 + var/has_scope = TRUE is_wieldable = TRUE @@ -82,11 +83,66 @@ set name = "Use Scope" set popup_menu = 1 + if(!has_scope) + to_chat(usr, SPAN_WARNING("\The [src] doesn't have a scope!")) + return + if(wielded) toggle_scope(2.0, usr) else to_chat(usr, "You can't look through the scope without stabilizing the rifle!") +/obj/item/gun/projectile/heavysniper/unathi + name = "hegemony slugger" + desc = "An incredibly large firearm, produced by an Ouerean Guild. Uses custom slugger rounds." + icon = 'icons/obj/guns/unathi_slugger.dmi' + icon_state = "slugger" + item_state = "slugger" + origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 4) + w_class = ITEMSIZE_HUGE + fire_sound = 'sound/effects/Explosion1.ogg' + caliber = "slugger" + ammo_type = /obj/item/ammo_casing/slugger + magazine_type = null + has_scope = FALSE + +/obj/item/gun/projectile/heavysniper/unathi/update_icon() + if(bolt_open && length(loaded)) + icon_state = "slugger-open-loaded" + else if(bolt_open && !length(loaded)) + icon_state = "slugger-open" + else + icon_state = "slugger" + if(wielded) + item_state = "slugger-wielded" + else + item_state = "slugger" + update_held_icon() + +/obj/item/gun/projectile/heavysniper/unathi/handle_post_fire(mob/user) + ..() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/has_online_rig = H.wearing_rig && !H.wearing_rig.offline + if(H.mob_size < 10 && !has_online_rig) // smaller than an unathi + H.visible_message(SPAN_WARNING("\The [src] goes flying out of \the [H]'s hand!"), SPAN_WARNING("\The [src] flies out of your hand!")) + H.drop_item(src) + src.throw_at(get_edge_target_turf(src, reverse_dir[H.dir]), 3, 3) + + var/obj/item/organ/external/LH = H.get_organ(BP_L_HAND) + var/obj/item/organ/external/RH = H.get_organ(BP_R_HAND) + var/active_hand = H.hand + + if(active_hand) + LH.take_damage(30) + else + RH.take_damage(30) + +/obj/item/gun/projectile/heavysniper/unathi/getAmmo() + if(chambered) + return 1 + return 0 + /obj/item/gun/projectile/heavysniper/tranq name = "tranquilizer rifle" desc = "A nonlethal modification to the PTR-7 anti-materiel rifle meant for sedation and capture of the most dangerous of game. Fires .50 cal PPS shells that deploy a torpor inducing drug payload." diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 1373993056b..7a20b67d138 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -210,6 +210,24 @@ damage = 50 weaken = 1 +/obj/item/projectile/bullet/rifle/slugger + name = "slugger round" + damage = 80 + weaken = 3 + penetrating = 5 + armor_penetration = 15 + maiming = TRUE + maim_rate = 3 + maim_type = DROPLIMB_BLUNT + +/obj/item/projectile/bullet/rifle/slugger/on_hit(var/atom/movable/target, var/blocked = 0) + if(!istype(target)) + return FALSE + var/throwdir = get_dir(firer, target) + target.throw_at(get_edge_target_turf(target, throwdir), 3, 3) + ..() + return TRUE + /obj/item/projectile/bullet/rifle/tranq name = "dart" icon_state = "dart" @@ -375,4 +393,4 @@ mob.apply_effect(450, IRRADIATE) new /obj/effect/temp_visual/nuke(A.loc) explosion(A,2,5,9) - ..() \ No newline at end of file + ..() diff --git a/html/changelogs/geeves-kataphract_supplies.yml b/html/changelogs/geeves-kataphract_supplies.yml new file mode 100644 index 00000000000..8e76ea3c699 --- /dev/null +++ b/html/changelogs/geeves-kataphract_supplies.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "The Kataphracts now spawn with a custom supply area in their preparation area." + - rscadd: "Added the Hegemony Slugger, a large rifle that only humanoid mobs of Unathi size and larger can safely operate." + - tweak: "Increased industrial IPC mob size to be able to fire this rifle, which has minor side effects like better headbutts." \ No newline at end of file diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 6dd3c95db77..01142ec364a 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/guns/unathi_slugger.dmi b/icons/obj/guns/unathi_slugger.dmi new file mode 100644 index 00000000000..805b385b8df Binary files /dev/null and b/icons/obj/guns/unathi_slugger.dmi differ diff --git a/maps/templates/distress/distress_equipment.dm b/maps/templates/distress/distress_equipment.dm index 1f63f2e4710..dcd86b80797 100644 --- a/maps/templates/distress/distress_equipment.dm +++ b/maps/templates/distress/distress_equipment.dm @@ -1,3 +1,7 @@ /datum/map_template/distress_iac name = "IAC distress equipment" - mappath = 'maps/templates/distress/iac.dmm' \ No newline at end of file + mappath = 'maps/templates/distress/iac.dmm' + +/datum/map_template/distress_kataphract + name = "kataphract distress equipment" + mappath = 'maps/templates/distress/kataphracts.dmm' \ No newline at end of file diff --git a/maps/templates/distress/kataphracts.dmm b/maps/templates/distress/kataphracts.dmm new file mode 100644 index 00000000000..47369b0121e --- /dev/null +++ b/maps/templates/distress/kataphracts.dmm @@ -0,0 +1,151 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/power/emitter, +/obj/effect/decal/warning_stripes, +/turf/unsimulated/floor{ + icon_state = "vault"; + dir = 5 + }, +/area/centcom/distress_prep) +"b" = ( +/turf/unsimulated/floor{ + icon_state = "vault"; + dir = 5 + }, +/area/centcom/distress_prep) +"c" = ( +/obj/structure/table/rack, +/obj/item/stack/material/steel{ + amount = 50 + }, +/obj/item/stack/material/plasteel{ + amount = 50; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/stack/material/glass{ + amount = 50; + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/device/debugger{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/device/debugger{ + pixel_y = -5 + }, +/obj/item/device/multitool{ + pixel_x = -2; + pixel_y = -6 + }, +/obj/item/device/multitool{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/clothing/gloves/yellow/specialu, +/obj/item/clothing/gloves/yellow/specialu, +/turf/unsimulated/floor{ + icon_state = "vault"; + dir = 5 + }, +/area/centcom/distress_prep) +"d" = ( +/obj/structure/closet/crate/freezer{ + name = "rations" + }, +/obj/item/reagent_containers/food/snacks/koisbar_clean, +/obj/item/reagent_containers/food/snacks/koisbar_clean, +/obj/item/reagent_containers/food/snacks/koisbar_clean, +/obj/item/reagent_containers/food/snacks/koisbar_clean, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/liquidfood, +/obj/item/reagent_containers/food/snacks/skrellsnacks, +/obj/item/reagent_containers/food/snacks/skrellsnacks, +/obj/item/reagent_containers/food/snacks/skrellsnacks, +/obj/item/reagent_containers/food/snacks/skrellsnacks, +/obj/item/reagent_containers/food/snacks/nathisnack, +/obj/item/reagent_containers/food/snacks/nathisnack, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/obj/item/reagent_containers/food/drinks/cans/waterbottle, +/turf/unsimulated/floor{ + icon_state = "platebot" + }, +/area/centcom/distress_prep) +"e" = ( +/obj/structure/table/rack, +/obj/item/gun/projectile/heavysniper/unathi{ + pixel_y = 4 + }, +/obj/item/ammo_casing/slugger, +/obj/item/ammo_casing/slugger, +/obj/item/ammo_casing/slugger, +/obj/item/device/binoculars{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/device/binoculars{ + pixel_x = 4; + pixel_y = -6 + }, +/turf/unsimulated/floor{ + icon_state = "platebot" + }, +/area/centcom/distress_prep) +"f" = ( +/obj/structure/table/rack, +/obj/item/storage/backpack/satchel/hegemony{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/storage/backpack/satchel/hegemony{ + pixel_x = 2; + pixel_y = -2 + }, +/turf/unsimulated/floor{ + icon_state = "platebot" + }, +/area/centcom/distress_prep) +"g" = ( +/mob/living/heavy_vehicle/premade/light/kataphract, +/turf/unsimulated/floor{ + icon_state = "platebot" + }, +/area/centcom/distress_prep) + +(1,1,1) = {" +a +c +d +"} +(2,1,1) = {" +b +b +e +"} +(3,1,1) = {" +b +b +f +"} +(4,1,1) = {" +b +b +g +"}