diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm
index 7a43c1bde8d..fac7163a486 100644
--- a/code/datums/wires/explosive.dm
+++ b/code/datums/wires/explosive.dm
@@ -30,3 +30,17 @@ var/const/WIRE_EXPLODE = 1
var/obj/item/weapon/c4/P = holder
P.explode(get_turf(P))
+
+
+/datum/wires/explosive/gibtonite
+ holder_type = /obj/item/weapon/twohanded/required/gibtonite
+
+/datum/wires/explosive/gibtonite/CanUse(var/mob/living/L)
+ return 1
+
+/datum/wires/explosive/gibtonite/UpdateCut(var/index, var/mended)
+ return
+
+/datum/wires/explosive/gibtonite/explode()
+ var/obj/item/weapon/twohanded/required/gibtonite/P = holder
+ P.GibtoniteReaction(null, 2)
\ No newline at end of file
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index d750748ce3c..3cf497ed472 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -121,8 +121,7 @@
return
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
- P.on_hit(src, 0, def_zone)
- . = 0
+ . = P.on_hit(src, 0, def_zone)
/atom/proc/in_contents_of(container)//can take class or object instance as argument
if(ispath(container))
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 8f625648787..f015c1f346a 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -7,7 +7,7 @@
health = 200
lights_power = 7
deflect_chance = 15
- damage_absorption = list("brute"=0.8,"fire"=1,"bullet"=0.8,"laser"=0.9,"energy"=1,"bomb"=0.6)
+ damage_absorption = list("brute"=0.6,"fire"=1,"bullet"=0.8,"laser"=0.9,"energy"=1,"bomb"=0.6)
max_equip = 6
wreckage = /obj/structure/mecha_wreckage/ripley
var/list/cargo = new
@@ -39,7 +39,7 @@
/obj/mecha/working/ripley/go_out()
..()
- if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
+ if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3)
src.overlays = null
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open")
else if (src.damage_absorption.["brute"] == 0.3)
@@ -48,30 +48,30 @@
/obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob)
..()
- if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
+ if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3)
src.overlays = null
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
- else if (src.damage_absorption.["brute"] == 0.3)
+ else if (src.damage_absorption["brute"] == 0.3)
src.overlays = null
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
/obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob)
..()
- if (src.damage_absorption.["brute"] < 0.6 && src.damage_absorption.["brute"] > 0.3)
+ if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3)
src.overlays = null
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g")
- else if (src.damage_absorption.["brute"] == 0.3)
+ else if (src.damage_absorption["brute"] == 0.3)
src.overlays = null
src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full")
/obj/mecha/working/ripley/firefighter
- desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
+ desc = "Autonomous Power Loader Unit. This model is refitted with additional thermal protection."
name = "\improper APLU \"Firefighter\""
icon_state = "firefighter"
max_temperature = 65000
health = 250
lights_power = 7
- damage_absorption = list("brute"=0.8,"fire"=0.5,"bullet"=0.7,"laser"=0.8,"energy"=1,"bomb"=0.4)
+ damage_absorption = list("brute"=0.6,"fire"=0.5,"bullet"=0.7,"laser"=0.7,"energy"=1,"bomb"=0.4)
max_equip = 5 // More armor, less tools
wreckage = /obj/structure/mecha_wreckage/ripley/firefighter
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 18c0d9fb0a6..ad53b9f89b8 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -46,7 +46,7 @@
if(istype(I, /obj/item/weapon/screwdriver))
open_panel = !open_panel
user << "You [open_panel ? "open" : "close"] the wire panel."
- else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
+ else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler))
wires.Interact(user)
else
..()
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 9a26058d953..3367901fc15 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -4,7 +4,7 @@
icon_state = "meson"
item_state = "meson"
origin_tech = "magnets=2;engineering=2"
- darkness_view = 1
+ darkness_view = 2
vision_flags = SEE_TURFS
invis_view = SEE_INVISIBLE_MINIMUM
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 4001c27e887..5b5bd2184dd 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -381,7 +381,7 @@
/obj/item/weapon/mining_voucher
name = "mining voucher"
desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "mining_voucher"
w_class = 1
@@ -413,7 +413,7 @@
/obj/item/device/wormhole_jaunter
name = "wormhole jaunter"
desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least."
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "Jaunter"
item_state = "electronic"
throwforce = 0
@@ -473,7 +473,7 @@
/obj/item/weapon/resonator
name = "resonator"
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "resonator"
item_state = "resonator"
desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vacuum."
@@ -793,7 +793,7 @@
else
for(M in L)
var/turf/T = get_turf(M)
- var/image/I = image('icons/turf/walls.dmi', loc = T, icon_state = M.scan_state, layer = 18)
+ var/image/I = image('icons/turf/mining.dmi', loc = T, icon_state = M.scan_state, layer = 18)
C.images += I
spawn(30)
if(C)
@@ -821,7 +821,7 @@
/obj/item/device/t_scanner/adv_mining_scanner/scan()
if(!cooldown)
cooldown = 1
- spawn(60)
+ spawn(35)
cooldown = 0
var/turf/t = get_turf(src)
var/list/mobs = recursive_mob_check(t, 1,0,0)
@@ -838,7 +838,7 @@
var/client/C = user.client
for(M in L)
var/turf/T = get_turf(M)
- var/image/I = image('icons/turf/walls.dmi', loc = T, icon_state = M.scan_state, layer = 18)
+ var/image/I = image('icons/turf/mining.dmi', loc = T, icon_state = M.scan_state, layer = 18)
C.images += I
spawn(30)
if(C)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 3da4c92c17b..ea456b180fb 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -50,7 +50,7 @@
/obj/item/weapon/pickaxe
name = "pickaxe"
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "pickaxe"
flags = CONDUCT
slot_flags = SLOT_BELT
@@ -79,12 +79,12 @@
name = "mining drill"
icon_state = "handdrill"
item_state = "jackhammer"
- digspeed = 30 //available from roundstart, faster than a pickaxe but needs recharging or cell replacements
+ digspeed = 25 //available from roundstart, faster than a pickaxe but needs recharging or cell replacements
digsound = list('sound/weapons/drill.ogg')
hitsound = 'sound/weapons/drill.ogg'
origin_tech = "materials=2;powerstorage=3;engineering=2"
desc = "An electric mining drill for the especially scrawny."
- var/drillcost = 125 //80 mineral walls by default
+ var/drillcost = 50 //80 mineral walls by default
var/obj/item/weapon/stock_parts/cell/high/bcell = null
/obj/item/weapon/pickaxe/drill/New() //this one starts with a cell pre-installed.
@@ -134,28 +134,28 @@
/obj/item/weapon/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
- digspeed = 10 //it's a fast drill with a relatively low power cost. what more could you ask for?
+ digspeed = 8 //it's a fast drill with a relatively low power cost. what more could you ask for?
origin_tech = "materials=6;powerstorage=4;engineering=5"
desc = "Yours is the drill that will pierce the heavens!"
- drillcost = 150 //66 mineral walls by default, but very quickly
+ drillcost = 75 //66 mineral walls by default, but very quickly
/obj/item/weapon/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
- digspeed = 5 //the epitome of powertools. high power consumption, extremely fast mining, laughs at puny walls
+ digspeed = 4 //the epitome of powertools. high power consumption, extremely fast mining, laughs at puny walls
origin_tech = "materials=3;powerstorage=2;engineering=2"
digsound = list('sound/weapons/sonic_jackhammer.ogg')
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
- desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls.."
- drillcost = 200
+ desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
+ drillcost = 100
/*****************************Shovel********************************/
/obj/item/weapon/shovel
name = "shovel"
desc = "A large tool for digging and moving dirt."
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "shovel"
flags = CONDUCT
slot_flags = SLOT_BELT
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 38afd36308c..4cb58dc6994 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -2,7 +2,7 @@
/turf/simulated/mineral //wall piece
name = "rock"
- icon = 'icons/turf/walls.dmi'
+ icon = 'icons/turf/mining.dmi'
icon_state = "rock_nochance"
oxygen = 0
nitrogen = 0
@@ -10,7 +10,7 @@
density = 1
blocks_air = 1
temperature = TCMB
- var/mineralName = ""
+ var/mineralType = null
var/mineralAmt = 3
var/spread = 0 //will the seam spread?
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
@@ -38,21 +38,21 @@
if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)) || (istype(get_step(src, NORTH), /turf/simulated/shuttle/floor)))
T = get_step(src, NORTH)
if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_s")
+ T.overlays += image('icons/turf/mining.dmi', "rock_side_s")
if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)) || (istype(get_step(src, SOUTH), /turf/simulated/shuttle/floor)))
T = get_step(src, SOUTH)
if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_n", layer=6)
+ T.overlays += image('icons/turf/mining.dmi', "rock_side_n", layer=6)
if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)) || (istype(get_step(src, EAST), /turf/simulated/shuttle/floor)))
T = get_step(src, EAST)
if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_w", layer=6)
+ T.overlays += image('icons/turf/mining.dmi', "rock_side_w", layer=6)
if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)) || (istype(get_step(src, WEST), /turf/simulated/shuttle/floor)))
T = get_step(src, WEST)
if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_e", layer=6)
+ T.overlays += image('icons/turf/mining.dmi', "rock_side_e", layer=6)
- if (mineralName && mineralAmt && spread && spreadChance)
+ if (mineralType && mineralAmt && spread && spreadChance)
for(var/dir in cardinal)
if(prob(spreadChance))
var/turf/T = get_step(src, dir)
@@ -73,7 +73,12 @@
/turf/simulated/mineral/random
name = "mineral deposit"
icon_state = "rock"
- var/mineralSpawnChanceList = list("Uranium" = 5, "Diamond" = 1, "Gold" = 10, "Silver" = 12, "Plasma" = 20, "Iron" = 40, "Gibtonite" = 4/*, "Adamantine" =5*/, "Cave" = 2)//Currently, Adamantine won't spawn as it has no uses. -Durandan
+ var/mineralSpawnChanceList = list(
+ "Uranium" = 5, "Diamond" = 1, "Gold" = 10,
+ "Silver" = 12, "Plasma" = 20, "Iron" = 40,
+ "Gibtonite" = 4, "Cave" = 2, "BScrystal" = 1,
+ /*, "Adamantine" =5*/)
+ //Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralChance = 13
/turf/simulated/mineral/random/New()
@@ -102,6 +107,8 @@
M = new/turf/simulated/mineral/gibtonite(src)
if("Bananium")
M = new/turf/simulated/mineral/clown(src)
+ if("BScrystal")
+ M = new/turf/simulated/mineral/bscrystal(src)
/*if("Adamantine")
M = new/turf/simulated/mineral/adamantine(src)*/
if(M)
@@ -112,7 +119,10 @@
/turf/simulated/mineral/random/high_chance
icon_state = "rock_highchance"
mineralChance = 25
- mineralSpawnChanceList = list("Uranium" = 35, "Diamond" = 30, "Gold" = 45, "Silver" = 50, "Plasma" = 50)
+ mineralSpawnChanceList = list(
+ "Uranium" = 35, "Diamond" = 30,
+ "Gold" = 45, "Silver" = 50, "Plasma" = 50,
+ "BScrystal" = 20)
/turf/simulated/mineral/random/high_chance/New()
icon_state = "rock"
@@ -121,31 +131,34 @@
/turf/simulated/mineral/random/low_chance
icon_state = "rock_lowchance"
mineralChance = 6
- mineralSpawnChanceList = list("Uranium" = 2, "Diamond" = 1, "Gold" = 4, "Silver" = 6, "Plasma" = 15, "Iron" = 40, "Gibtonite" = 2)
+ mineralSpawnChanceList = list(
+ "Uranium" = 2, "Diamond" = 1, "Gold" = 4,
+ "Silver" = 6, "Plasma" = 15, "Iron" = 40,
+ "Gibtonite" = 2, "BScrystal" = 1)
/turf/simulated/mineral/random/low_chance/New()
icon_state = "rock"
..()
+/turf/simulated/mineral/iron
+ name = "iron deposit"
+ icon_state = "rock_Iron"
+ mineralType = /obj/item/weapon/ore/iron
+ spreadChance = 20
+ spread = 1
+ hidden = 0
+
/turf/simulated/mineral/uranium
name = "uranium deposit"
- mineralName = "Uranium"
+ mineralType = /obj/item/weapon/ore/uranium
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Uranium"
-/turf/simulated/mineral/iron
- name = "iron deposit"
- icon_state = "rock_Iron"
- mineralName = "Iron"
- spreadChance = 20
- spread = 1
- hidden = 0
-
/turf/simulated/mineral/diamond
name = "diamond deposit"
- mineralName = "Diamond"
+ mineralType = /obj/item/weapon/ore/diamond
spreadChance = 0
spread = 1
hidden = 1
@@ -153,7 +166,7 @@
/turf/simulated/mineral/gold
name = "gold deposit"
- mineralName = "Gold"
+ mineralType = /obj/item/weapon/ore/gold
spreadChance = 5
spread = 1
hidden = 1
@@ -161,7 +174,7 @@
/turf/simulated/mineral/silver
name = "silver deposit"
- mineralName = "Silver"
+ mineralType = /obj/item/weapon/ore/silver
spreadChance = 5
spread = 1
hidden = 1
@@ -170,7 +183,7 @@
/turf/simulated/mineral/plasma
name = "plasma deposit"
icon_state = "rock_Plasma"
- mineralName = "Plasma"
+ mineralType = /obj/item/weapon/ore/plasma
spreadChance = 8
spread = 1
hidden = 1
@@ -179,17 +192,26 @@
/turf/simulated/mineral/clown
name = "bananium deposit"
icon_state = "rock_Clown"
- mineralName = "Bananium"
+ mineralType = /obj/item/weapon/ore/bananium
mineralAmt = 3
spreadChance = 0
spread = 0
hidden = 0
+/turf/simulated/mineral/bscrystal
+ name = "bluespace crystal deposit"
+ icon_state = "rock_BScrystal"
+ mineralType = /obj/item/bluespace_crystal
+ mineralAmt = 1
+ spreadChance = 0
+ spread = 0
+ hidden = 1
+ scan_state = "rock_BScrystal"
+
////////////////////////////////Gibtonite
/turf/simulated/mineral/gibtonite
name = "gibtonite deposit"
icon_state = "rock_Gibtonite"
- mineralName = "Gibtonite"
mineralAmt = 1
spreadChance = 0
spread = 0
@@ -419,23 +441,10 @@
return
/turf/simulated/mineral/proc/gets_drilled()
- if ((src.mineralName != "") && (src.mineralAmt > 0) && (src.mineralAmt < 11))
+ if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
var/i
for (i=0;i[user] attaches [I] to [src]!")
+ wires = new(src)
+ attacher = key_name(user)
+ qdel(I)
+ overlays += "Gibtonite_igniter"
+ return
+
+ if(wires && !primed)
+ if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler))
+ wires.Interact(user)
+ return
+
+ if(istype(I, /obj/item/weapon/pickaxe) || istype(I, /obj/item/weapon/resonator) || I.force >= 10)
GibtoniteReaction(user)
return
- if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) && primed)
- primed = 0
- user.visible_message("The chain reaction was stopped! ...The ore's quality went down.")
- icon_state = "Gibtonite ore"
- quality = 1
- return
+ if(primed)
+ if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) || istype(I, /obj/item/device/multitool))
+ primed = 0
+ user.visible_message("The chain reaction was stopped! ...The ore's quality went down.")
+ icon_state = "Gibtonite ore"
+ quality = 1
+ return
..()
+/obj/item/weapon/twohanded/required/gibtonite/attack_self(user)
+ if(wires)
+ wires.Interact(user)
+ else
+ ..()
+
/obj/item/weapon/twohanded/required/gibtonite/bullet_act(var/obj/item/projectile/P)
- if(istype(P, /obj/item/projectile/kinetic))
- GibtoniteReaction(P.firer)
+ GibtoniteReaction(P.firer)
..()
/obj/item/weapon/twohanded/required/gibtonite/ex_act()
GibtoniteReaction(null, 1)
-/obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by_explosive = 0)
+
+
+/obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0)
if(!primed)
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
primed = 1
@@ -149,13 +172,18 @@
var/notify_admins = 0
if(z != 5)//Only annoy the admins ingame if we're triggered off the mining zlevel
notify_admins = 1
+
if(notify_admins)
- if(triggered_by_explosive)
+ if(triggered_by == 1)
message_admins("An explosion has triggered a [name] to detonate at [A.name] (JMP).")
+ else if(triggered_by == 2)
+ message_admins("A signal has triggered a [name] to detonate at [A.name] (JMP). Igniter attacher: [attacher]")
else
message_admins("[key_name(user)]? has triggered a [name] to detonate at [A.name] (JMP).")
- if(triggered_by_explosive)
+ if(triggered_by == 1)
log_game("An explosion has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
+ else if(triggered_by == 2)
+ log_game("A signal has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z]). Igniter attacher: [attacher].")
else
user.visible_message("[user] strikes \the [src], causing a chain reaction!")
log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
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 062aab6e7cb..8851c784a35 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm
@@ -442,7 +442,7 @@
/obj/item/asteroid/goliath_hide
name = "goliath hide plates"
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
- icon = 'icons/obj/items.dmi'
+ icon = 'icons/obj/mining.dmi'
icon_state = "goliath_hide"
flags = NOBLUDGEON
w_class = 3
@@ -463,8 +463,11 @@
if(istype(target, /obj/mecha/working/ripley))
var/obj/mecha/D = target
var/list/damage_absorption = D.damage_absorption
- if(damage_absorption.["brute"] > 0.3)
- damage_absorption.["brute"] = max(damage_absorption.["brute"] - 0.1, 0.3)
+ if(damage_absorption["brute"] > 0.3)
+ damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3)
+ damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05
+ damage_absorption["fire"] = damage_absorption["fire"] - 0.05
+ damage_absorption["laser"] = damage_absorption["laser"] - 0.025
user << "You strengthen [target], improving its resistance against melee attacks."
qdel(src)
if(D.icon_state == "ripley-open")
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index eaca8f4f8ef..9fb83e560f7 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -214,6 +214,7 @@
icon_state = "plasmacutter"
item_state = "plasmacutter"
force = 15
+ damtype = "fire"
modifystate = -1
origin_tech = "combat=1;materials=3;magnets=2;plasmatech=2;engineering=1"
ammo_type = list(/obj/item/ammo_casing/energy/plasma)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 2797a327535..8745de421ff 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -69,9 +69,10 @@
return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume
/obj/item/projectile/Bump(atom/A)
- if(A == firer)
+ if(A == firer || A == src)
loc = A.loc
return 0 //cannot shoot yourself
+
if(bumped)//Stops multihit projectiles
return 1
bumped = 1
diff --git a/html/changelogs/ACCount12-mining.yml b/html/changelogs/ACCount12-mining.yml
new file mode 100644
index 00000000000..d2188ec7e52
--- /dev/null
+++ b/html/changelogs/ACCount12-mining.yml
@@ -0,0 +1,12 @@
+author: ACCount
+
+delete-after: True
+
+changes:
+ - rscadd: "The plasma cutter is now a gun that comes in the mining vending machine. Use it to mine fast but expensively."
+ - tweak: "It's also cheaper in RnD, and there's an advanced version of it there too. Yay!"
+ - tweak: "Ripleys and Firefighters have been buffed significantly. Go wild."
+ - tweak: "Precious mesons are cheaper in RnD."
+ - rscadd: "Now you can mine bluespace crystals. They are extremely rare."
+ - rscadd: "You can make remote bombs out of gibtonite. Figure out how."
+ - tweak: "Gibtonite is a bit less stable. Do not hit it with anything heavy."
\ No newline at end of file
diff --git a/html/changelogs/pudl-what-would-hova-do.yml b/html/changelogs/pudl-what-would-hova-do.yml
deleted file mode 100644
index 9255ba5aa9f..00000000000
--- a/html/changelogs/pudl-what-would-hova-do.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-author: pudl
-
-delete-after: True
-
-changes:
- - rscadd: "The plasma cutter is now a gun that comes in the mining vending machine. Use it to mine fast but expensively."
- - rscadd: "It's also cheaper in RnD, and there's an advanced version of it there too. Yay!"
- - rscadd: "Ripleys and Firefighters have been buffed significantly. Go wild."
- - rscadd: "Also, Ripleys can spawn with a plasma cutter attachment, free of charge."
- - rscadd: "Precious mesons are cheaper in RnD."
\ No newline at end of file
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 0dd8ac348bd..f0a2daed423 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 4b2073c171b..e734afbf63d 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/turf/mining.dmi b/icons/turf/mining.dmi
new file mode 100644
index 00000000000..f409dc179e5
Binary files /dev/null and b/icons/turf/mining.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index d3fecdcf5d6..d129a462dff 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ