diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index a291d88ffc8..ef1533d64a3 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -119641,7 +119641,9 @@ /turf/simulated/floor/plating, /area/maintenance/tourist) "wCY" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/structure/closet/sechammercabinet{ + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/celestation/celestation.dmm b/_maps/map_files/celestation/celestation.dmm index 5a27f99781f..bbbb7b83beb 100644 --- a/_maps/map_files/celestation/celestation.dmm +++ b/_maps/map_files/celestation/celestation.dmm @@ -19141,6 +19141,15 @@ icon_state = "brownfull" }, /area/teleporter/quantum/engi) +"czI" = ( +/obj/structure/closet/sechammercabinet{ + pixel_x = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkred" + }, +/area/security/armory) "czK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -285669,7 +285678,7 @@ rmd puS pus nxd -iWY +czI gRJ pNG aeM diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index 4411a67b075..5cb62830d15 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -24905,6 +24905,9 @@ "dlB" = ( /obj/effect/decal/warning_stripes/red/hollow, /obj/vehicle/ridden/secway, +/obj/structure/closet/sechammercabinet{ + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 8b512fb3c61..9ee421dc548 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -77064,6 +77064,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/closet/sechammercabinet{ + pixel_y = -30 + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, diff --git a/_maps/map_files/nova/nova.dmm b/_maps/map_files/nova/nova.dmm index 4f13ff7d70a..7bc0c8d25cd 100644 --- a/_maps/map_files/nova/nova.dmm +++ b/_maps/map_files/nova/nova.dmm @@ -45272,6 +45272,9 @@ /area/crew_quarters/chief) "gxr" = ( /obj/effect/decal/warning_stripes/northwest, +/obj/structure/closet/sechammercabinet{ + pixel_x = -30 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 672c6f9d33a..15bb56a0c27 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -945,7 +945,7 @@ user.visible_message("[user] blasts \the [target] with \the [src]!") playsound(target, 'sound/magic/Disintegrate.ogg', 100, 1) W.devastate_wall(TRUE) - return 1 + return TRUE ..() /obj/item/twohanded/bamboospear @@ -1092,3 +1092,72 @@ used = FALSE REMOVE_TRAIT(src, TRAIT_NODROP, PYRO_CLAWS_TRAIT) atom_say("Internal plasma canisters recharged. Gloves sufficiently cooled") + + +/obj/item/twohanded/sechammer + name = "tactical sledgehammer" + desc = "Тяжёлая кувалда, используемая силовыми структурами Нанотрейзен. Удобная эргономичная рукоятка обеспечивает надёжный хват, а боёк кувалды увеличенной массы позволяет наносить мощные и точные удары, что делает её отличным инструментом для разрушения препятствий и создания брешей в стенах. Хотя конструкция и является слишком неудобной для эффективного использования в качестве оружия, силы удара достаточно, чтобы раздробить любую кость в теле гуманоида." + ru_names = list( + NOMINATIVE = "тактическая кувалда", + GENITIVE = "тактической кувалды", + DATIVE = "тактической кувалде", + ACCUSATIVE = "тактическую кувалду", + INSTRUMENTAL = "тактической кувалдой", + PREPOSITIONAL = "тактической кувалде" + ) + gender = FEMALE + icon_state = "sechammer0" + throwforce = 20 + throw_range = 2 + w_class = WEIGHT_CLASS_BULKY + attack_speed = 16 + force_unwielded = 15 + force_wielded = 35 + armour_penetration = 40 + attack_verb = list("атаковал", "ударил", "шибанул", "долбанул", "припечатал") + max_integrity = 200 + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + resistance_flags = FIRE_PROOF + item_flags = SLOWS_WHILE_IN_HAND + + var/wall_damage = 35 + var/extra_girder_damage = 65 + var/extra_door_damage = 25 + + var/stamina_drain = 8 + var/max_stamina_damage = 40 + +/obj/item/twohanded/sechammer/update_icon_state() + icon_state = "sechammer[HAS_TRAIT(src, TRAIT_WIELDED)]" + +/obj/item/twohanded/sechammer/wield(obj/item/source, mob/living/carbon/user) + slowdown = 0.5 + + +/obj/item/twohanded/sechammer/unwield(obj/item/source, mob/living/carbon/user) + slowdown = 0 + +/obj/item/twohanded/sechammer/pre_attackby(atom/target, mob/living/user, params) + . = ..() + if(user.getStaminaLoss() >= max_stamina_damage) + balloon_alert(user, "вы слишком устали!") + return .|ATTACK_CHAIN_BLOCKED + +/obj/item/twohanded/sechammer/afterattack(atom/A, mob/living/user, proximity, params) + if(!proximity || !HAS_TRAIT(src, TRAIT_WIELDED)) + return + if(iswallturf(A)) + var/turf/simulated/wall/W = A + user.changeNext_move(attack_speed) + user.do_attack_animation(src) + playsound(src, 'sound/weapons/smash.ogg', 50, 1) + W.take_damage(wall_damage) + if(user.getStaminaLoss() < max_stamina_damage) + if(istype(A, /obj/structure/girder)) + var/obj/structure/G = A + G.take_damage(extra_girder_damage) + else if(istype(A, /obj/machinery/door)) + var/obj/machinery/D = A + D.take_damage(extra_door_damage) + user.adjustStaminaLoss(stamina_drain) + ..() diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 5b6f383e7db..2beabc34c8d 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -272,3 +272,78 @@ olreliable = null update_icon(UPDATE_OVERLAYS) +/obj/structure/closet/sechammercabinet + name = "tactical sledgehammer cabinet" + desc = "Стойка, предназначенная для хранения тактической кувалды. Надпись гласит: \"Для особых случаев\"." + ru_names = list( + NOMINATIVE = "стойка для тактической кувалды", + GENITIVE = "стойки для тактической кувалды", + DATIVE = "стойке для тактической кувалды", + ACCUSATIVE = "стойку для тактической кувалды", + INSTRUMENTAL = "стойкой для тактической кувалды", + PREPOSITIONAL = "стойке для тактической кувалды" + ) + gender = MALE + icon = 'icons/obj/closet.dmi' + icon_state = "sechammer_full" + anchored = TRUE + density = FALSE + no_overlays = TRUE + armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, RAD = 100, FIRE = 90, ACID = 50) + var/obj/item/twohanded/sechammer/sledgehammer + opened = TRUE + + +/obj/structure/closet/sechammercabinet/Destroy() + if(!obj_integrity) + if(sledgehammer) + sledgehammer.forceMove(loc) + sledgehammer = null + else + QDEL_NULL(sledgehammer) + return ..() + + +/obj/structure/closet/sechammercabinet/populate_contents() + sledgehammer = new(src) + update_icon_state() // So its initial icon doesn't show it without the fireaxe + + +/obj/structure/closet/sechammercabinet/attackby(obj/item/I, mob/living/user, params) + if(user.a_intent == INTENT_HARM) + return ..() + + if(istype(I, /obj/item/twohanded/sechammer)) + var/obj/item/twohanded/sechammer/hammer = I + if(!user.drop_transfer_item_to_loc(hammer, src)) + return ..() + balloon_alert(user, "кувалда закреплена") + sledgehammer = hammer + update_icon_state() + return ATTACK_CHAIN_BLOCKED_ALL + + return ..() + + +/obj/structure/closet/sechammercabinet/attack_hand(mob/user) + if(!sledgehammer) + return + + add_fingerprint(user) + sledgehammer.forceMove_turf() + user.put_in_hands(sledgehammer, ignore_anim = FALSE) + balloon_alert(user, "кувалда извлечена") + sledgehammer = null + update_icon_state() + + +/obj/structure/closet/sechammercabinet/blob_act(obj/structure/blob/B) + if(sledgehammer) + sledgehammer.forceMove(loc) + qdel(src) + +/obj/structure/closet/sechammercabinet/update_icon_state() + if(sledgehammer) + icon_state = "sechammer_full" + else + icon_state = "sechammer_empty" diff --git a/icons/mob/inhands/twohanded_lefthand.dmi b/icons/mob/inhands/twohanded_lefthand.dmi index 1845bbb24be..4195ea02292 100644 Binary files a/icons/mob/inhands/twohanded_lefthand.dmi and b/icons/mob/inhands/twohanded_lefthand.dmi differ diff --git a/icons/mob/inhands/twohanded_righthand.dmi b/icons/mob/inhands/twohanded_righthand.dmi index 77aaf5016cd..7a31dee8ffd 100644 Binary files a/icons/mob/inhands/twohanded_righthand.dmi and b/icons/mob/inhands/twohanded_righthand.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 36e765f371c..dc362c14adc 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 93455b7831d..ddddddaa42c 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ