diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 783f978ee6c..d7cf7820c95 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -183,7 +183,10 @@
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/storage/pill_bottle,
/obj/item/weapon/ore,
- /obj/item/weapon/reagent_containers/food/drinks
+ /obj/item/weapon/reagent_containers/food/drinks,
+ /obj/item/organ/hivelord_core,
+ /obj/item/device/wormhole_jaunter
+
)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 160b5485ff2..544613b54ea 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -83,13 +83,6 @@
user.put_in_inactive_hand(O)
return
-/obj/item/weapon/twohanded/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
- //Cannot equip wielded items.
- if(wielded)
- M << "Unwield the [name] first!"
- return 0
- return ..()
-
/obj/item/weapon/twohanded/dropped(mob/user)
..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
@@ -109,6 +102,11 @@
else //Trying to wield it
wield(user)
+/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
+ if(..())
+ unwield(M)
+ return
+
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
name = "offhand"
@@ -131,7 +129,7 @@
return
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
- if(wielded)
+ if(wielded && !slot_flags)
M << "\The [src] is too cumbersome to carry with anything but your hands!"
return 0
return ..()
@@ -143,9 +141,17 @@
if(H != null)
user << "\The [src] is too cumbersome to carry in one hand!"
return
- wield(user)
+ if(src.loc != user)
+ wield(user)
..()
+/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
+ ..()
+ if(slot == slot_l_hand || slot == slot_r_hand)
+ wield(user)
+ else
+ unwield(user)
+
/obj/item/weapon/twohanded/
diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm
index a2e76222198..6dc3aa38efd 100644
--- a/code/modules/mining/equipment.dm
+++ b/code/modules/mining/equipment.dm
@@ -459,4 +459,111 @@
C.preserved()
user << "You inject the [M] with the stabilizer. It will no longer go inert."
- qdel(src)
\ No newline at end of file
+ qdel(src)
+
+/*********************Mining Hammer****************/
+/obj/item/weapon/twohanded/required/mining_hammer
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "mining_hammer1"
+ item_state = "mining_hammer1"
+ name = "proto-kinetic crusher"
+ desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club.\
+ While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna. \
+ \nMark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \
+ This weapon is only particularly effective against large creatures."
+ force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times
+ w_class = 4
+ slot_flags = SLOT_BACK
+ force_unwielded = 20 //It's never not wielded so these are the same
+ force_wielded = 20
+ throwforce = 5
+ throw_speed = 4
+ luminosity = 4
+ armour_penetration = 10
+ materials = list(MAT_METAL=1150, MAT_GLASS=2075)
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb = list("smashes", "crushes", "cleaves", "chops", "pulps")
+ sharpness = IS_SHARP
+ var/charged = 1
+ var/charge_time = 16
+ var/atom/mark = null
+ var/marked_image = null
+
+/obj/item/projectile/destabilizer
+ name = "destabilizing force"
+ icon_state = "pulse1"
+ damage = 0 //We're just here to mark people. This is still a melee weapon.
+ damage_type = BRUTE
+ flag = "bomb"
+ range = 6
+ var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced = null
+
+/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0, hit_zone)
+ if(hammer_synced)
+ if(hammer_synced.mark == target)
+ return ..()
+ if(isliving(target))
+ if(hammer_synced.mark && hammer_synced.marked_image)
+ hammer_synced.mark.underlays -= hammer_synced.marked_image
+ hammer_synced.marked_image = null
+ var/mob/living/L = target
+ if(L.mob_size >= MOB_SIZE_LARGE)
+ hammer_synced.mark = L
+ var/image/I = image('icons/effects/effects.dmi', loc = L, icon_state = "shield2",pixel_y = (-L.pixel_y),pixel_x = (-L.pixel_x))
+ L.underlays += I
+ hammer_synced.marked_image = I
+ var/target_turf = get_turf(target)
+ if(istype(target_turf, /turf/closed/mineral))
+ var/turf/closed/mineral/M = target_turf
+ PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, M)
+ M.gets_drilled(firer)
+ ..()
+
+/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
+ if(!proximity_flag && charged)//Mark a target, or mine a tile.
+ var/turf/proj_turf = get_turf(src)
+ if(!istype(proj_turf, /turf))
+ return
+ var/datum/gas_mixture/environment = proj_turf.return_air()
+ var/pressure = environment.return_pressure()
+ if(pressure > 50)
+ playsound(user, 'sound/weapons/empty.ogg', 100, 1)
+ return
+ var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(user.loc)
+ D.preparePixelProjectile(target,get_turf(target), user)
+ D.hammer_synced = src
+ playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
+ D.fire()
+ charged = 0
+ icon_state = "mining_hammer1_uncharged"
+ addtimer(src, "Recharge", charge_time)
+ return
+ if(proximity_flag && target == mark && isliving(target))
+ var/mob/living/L = target
+ PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, get_turf(L))
+ mark = 0
+ if(L.mob_size >= MOB_SIZE_LARGE)
+ L.underlays -= marked_image
+ qdel(marked_image)
+ marked_image = null
+ var/backstab = check_target_facings(user, L)
+ var/def_check = L.getarmor(type = "bomb")
+ if(backstab == FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR || backstab == FACING_SAME_DIR)
+ L.apply_damage(80, BRUTE, blocked = def_check)
+ playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
+ else
+ L.apply_damage(50, BRUTE, blocked = def_check)
+
+/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
+ if(!charged)
+ charged = 1
+ icon_state = "mining_hammer1"
+ playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
+
+/obj/item/weapon/twohanded/required/mining_hammer/pickup(mob/user)
+ ..()
+ user.AddLuminosity(luminosity)
+
+/obj/item/weapon/twohanded/required/mining_hammer/dropped(mob/user)
+ ..()
+ user.AddLuminosity(-luminosity)
\ No newline at end of file
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 4f6e067477d..02fddfe6b58 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -27,6 +27,7 @@
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600),
new /datum/data/mining_equipment("Tracking Implant Kit",/obj/item/weapon/storage/box/minertracker, 600),
new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 750),
+ new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750),
new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800),
new /datum/data/mining_equipment("Medivac Balloon", /obj/item/weapon/extraction_pack/medivac, 800),
@@ -158,7 +159,7 @@
return ..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
- var/items = list("Survival Capsule and Explorer's Webbing", "Resonator and Advanced Scanner", "Mining Drone", "Medivac Kit", "Extraction Kit")
+ var/items = list("Survival Capsule and Explorer's Webbing", "Resonator and Advanced Scanner", "Mining Drone", "Medivac Kit", "Extraction Kit", "Crusher Kit")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
if(!selection || !Adjacent(redeemer) || qdeleted(voucher) || voucher.loc != redeemer)
@@ -181,6 +182,10 @@
new /obj/item/stack/sheet/metal/five(loc)
new /obj/item/weapon/extraction_pack(loc)
new /obj/item/fulton_core(loc)
+ if("Crusher Kit")
+ new /obj/item/weapon/twohanded/required/mining_hammer(loc)
+ new /obj/item/weapon/storage/belt/mining/alt(loc)
+ new /obj/item/weapon/extinguisher/mini(loc)
feedback_add_details("mining_voucher_redeemed", selection)
qdel(voucher)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index 2a670be3528..4cd49e0c043 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -51,6 +51,7 @@ Difficulty: Medium
aggro_vision_range = 18
idle_vision_range = 13
appearance_flags = 0
+ mouse_opacity = 1
/mob/living/simple_animal/hostile/megafauna/legion/New()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
index c68f310fda4..8b51d9c25c8 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
@@ -22,6 +22,7 @@
var/elimination = 0
anchored = TRUE
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
+ mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway
/mob/living/simple_animal/hostile/megafauna/death(gibbed)
if(health > 0)
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
index f2f83306c10..79752bbdaf2 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -15,6 +15,7 @@
var/icon_aggro = null // for swapping to when we get aggressive
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
+ mob_size = MOB_SIZE_LARGE
/mob/living/simple_animal/hostile/asteroid/Aggro()
..()
@@ -452,7 +453,6 @@
aggro_vision_range = 9
idle_vision_range = 5
anchored = 1 //Stays anchored until death as to be unpullable
- mob_size = MOB_SIZE_LARGE
var/pre_attack = 0
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index f4bee86ddc6..c9e23c00f74 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index b09c66643c3..ad7dffd2fe0 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index 6c762beacff..142b7a058ca 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 585db394acf..2e4d4dd2730 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ