diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index a0760ac61e..7536d41253 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -8,6 +8,7 @@
SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi'
)
+ var/mining_points = 0 // VOREStation Edit - For redeeming at mining equipment lockers
var/access = list()
var/registered_name = "Unknown" // The name registered_name on the card
slot_flags = SLOT_ID | SLOT_EARS
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 03568205c8..ca03098f55 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -6,11 +6,12 @@
/obj/machinery/mineral/processing_unit_console
name = "production machine console"
- icon = 'icons/obj/machines/mining_machines.dmi'
+ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "console"
density = TRUE
anchored = TRUE
+ var/obj/item/weapon/card/id/inserted_id // VOREStation Edit - Inserted Id card
var/obj/machinery/mineral/processing_unit/machine = null
var/show_all_ores = FALSE
@@ -23,6 +24,24 @@
log_debug("Ore processing machine console at [src.x], [src.y], [src.z] could not find its machine!")
qdel(src)
+// VOREStation Add Start
+/obj/machinery/mineral/processing_unit_console/Destroy()
+ if(inserted_id)
+ inserted_id.forceMove(loc) //Prevents deconstructing from deleting whatever ID was inside it.
+ . = ..()
+
+/obj/machinery/mineral/processing_unit_console/attackby(var/obj/item/I, var/mob/user)
+ if(istype(I, /obj/item/weapon/card/id))
+ if(!powered())
+ return
+ if(!inserted_id && user.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(user)
+ return
+ ..()
+// VOREStation Add End
+
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
return
@@ -39,6 +58,14 @@
user.set_machine(src)
var/dat = "
Ore processor console
"
+ // VOREStation Add Start
+ dat += "Current unclaimed points: [machine.points]
"
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
"
+ dat += "Claim points.
"
+ else
+ dat += "No ID inserted. Insert ID.
"
+ // VOREStation Add End
dat += "
"
@@ -96,6 +123,29 @@
show_all_ores = !show_all_ores
+ // VOREStation Add Start
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ if(href_list["choice"] == "claim")
+ if(access_mining_station in inserted_id.access)
+ inserted_id.mining_points += machine.points
+ machine.points = 0
+ else
+ to_chat(usr, "Required access not found.")
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I))
+ if(!usr.drop_item())
+ return 1
+ I.forceMove(src)
+ inserted_id = I
+ else
+ to_chat(usr, "No valid ID.")
+ // VOREStation Add End
+
src.updateUsrDialog()
return
@@ -104,7 +154,7 @@
/obj/machinery/mineral/processing_unit
name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron...
- icon = 'icons/obj/machines/mining_machines.dmi'
+ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "furnace"
density = TRUE
anchored = TRUE
@@ -117,6 +167,20 @@
var/list/ores_stored[0]
var/static/list/alloy_data
var/active = FALSE
+ // VOREStation Add Start
+ var/points = 0
+ var/static/list/ore_values = list(
+ "sand" = 1,
+ "hematite" = 1,
+ "carbon" = 1,
+ "phoron" = 15,
+ "silver" = 16,
+ "gold" = 18,
+ "uranium" = 30,
+ "diamond" = 50,
+ "platinum" = 40,
+ "mhydrogen" = 40)
+ // VOREStation Add End
/obj/machinery/mineral/processing_unit/New()
..()
@@ -147,8 +211,8 @@
return
/obj/machinery/mineral/processing_unit/process()
-
- if (!src.output || !src.input) return
+ if(!src.output || !src.input) return
+ if(panel_open || !powered()) return // VOREStation Edit - Don't work when unpowered
var/list/tick_alloys = list()
@@ -158,6 +222,7 @@
if(!O) break
if(!isnull(ores_stored[O.material]))
ores_stored[O.material]++
+ points += ore_values[O.material] // VOREStation Edit - Give Points!
qdel(O)
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index f6db90bac5..68c5a31c25 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -2,7 +2,7 @@
/obj/machinery/mineral/stacking_unit_console
name = "stacking machine console"
- icon = 'icons/obj/machines/mining_machines.dmi'
+ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "console"
density = 1
anchored = 1
@@ -71,7 +71,7 @@
/obj/machinery/mineral/stacking_machine
name = "stacking machine"
- icon = 'icons/obj/machines/mining_machines.dmi'
+ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "stacker"
density = 1
anchored = 1.0
diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm
index 1bbf7706ec..d54aa01761 100644
--- a/code/modules/mining/machine_unloading.dm
+++ b/code/modules/mining/machine_unloading.dm
@@ -3,7 +3,7 @@
/obj/machinery/mineral/unloading_machine
name = "unloading machine"
- icon = 'icons/obj/machines/mining_machines.dmi'
+ icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit
icon_state = "unloader"
density = 1
anchored = 1.0
diff --git a/code/modules/mining/orm_vr/construction.dm b/code/modules/mining/orm_vr/construction.dm
new file mode 100644
index 0000000000..dbf8a96ffb
--- /dev/null
+++ b/code/modules/mining/orm_vr/construction.dm
@@ -0,0 +1,12 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/mining_equipment_vendor
+ name = T_BOARD("Mining Equipment Vendor")
+ board_type = new /datum/frame/frame_types/machine
+ build_path = /obj/machinery/mineral/equipment_vendor
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 3)
diff --git a/code/modules/mining/orm_vr/equipment_vendor.dm b/code/modules/mining/orm_vr/equipment_vendor.dm
new file mode 100644
index 0000000000..7b1f2e7e12
--- /dev/null
+++ b/code/modules/mining/orm_vr/equipment_vendor.dm
@@ -0,0 +1,205 @@
+/**********************Mining Equipment Locker**************************/
+
+/obj/machinery/mineral/equipment_vendor
+ name = "mining equipment vendor"
+ desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
+ icon = 'icons/obj/machines/mining_machines_vr.dmi'
+ icon_state = "mining"
+ density = TRUE
+ anchored = TRUE
+ circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor
+ var/icon_deny = "mining-deny"
+ var/obj/item/weapon/card/id/inserted_id
+ var/list/prize_list = list(
+ new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
+ new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
+ new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
+ new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125),
+ new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125),
+ new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
+ new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
+ new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900),
+ new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
+ // TODO new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 800),
+ new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
+ new /datum/data/mining_equipment("Shelter Capsule", /obj/item/device/survivalcapsule, 500),
+ // TODO new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
+ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
+ new /datum/data/mining_equipment("Survival Medipen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/miner, 500),
+ new /datum/data/mining_equipment("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 1200),
+ // new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
+ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 900),
+ new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 900),
+ new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
+ new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
+ //new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
+ new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 2000),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 2000),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Material Scanner", /obj/item/rig_module/vision/material, 500),
+ new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
+ new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
+ new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
+ new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
+ new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 3100),
+ new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 125),
+ new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 175),
+ new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250),
+ new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300),
+ new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000),
+ new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
+ new /datum/data/mining_equipment("KA Efficiency Increase", /obj/item/borg/upgrade/modkit/efficiency, 1200),
+ new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000)
+ )
+
+/datum/data/mining_equipment
+ var/equipment_name = "generic"
+ var/equipment_path = null
+ var/cost = 0
+
+/datum/data/mining_equipment/New(name, path, cost)
+ src.equipment_name = name
+ src.equipment_path = path
+ src.cost = cost
+
+/obj/machinery/power/quantumpad/initialize()
+ . = ..()
+ default_apply_parts()
+
+/obj/machinery/mineral/equipment_vendor/power_change()
+ var/old_stat = stat
+ ..()
+ if(old_stat != stat)
+ update_icon()
+ if(inserted_id && !powered())
+ visible_message("The ID slot indicator light flickers on \the [src] as it spits out a card before powering down.")
+ inserted_id.forceMove(get_turf(src))
+
+/obj/machinery/mineral/equipment_vendor/update_icon()
+ if(panel_open)
+ icon_state = "[initial(icon_state)]-open"
+ else if(powered())
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-off"
+
+/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/mineral/equipment_vendor/attack_ghost(mob/user)
+ interact(user)
+
+/obj/machinery/mineral/equipment_vendor/interact(mob/user)
+ user.set_machine(src)
+
+ var/dat
+ dat +=""
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected.
Eject ID."
+ else
+ dat += "No ID inserted.
Insert ID."
+ dat += "
"
+ dat += "
Equipment point cost list:
"
+ for(var/datum/data/mining_equipment/prize in prize_list)
+ dat += "| [prize.equipment_name] | [prize.cost] | Purchase |
"
+ dat += "
"
+ var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 600)
+ popup.set_content(dat)
+ popup.open()
+
+/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ to_chat(usr, "You eject the ID from [src]'s card slot.")
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I) && !inserted_id && usr.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(usr)
+ to_chat(usr, "You insert the ID into [src]'s card slot.")
+ else
+ to_chat(usr, "No valid ID.")
+ flick(icon_deny, src)
+
+ if(href_list["purchase"])
+ if(istype(inserted_id))
+ var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
+ if (!prize || !(prize in prize_list))
+ to_chat(usr, "Error: Invalid choice!")
+ flick(icon_deny, src)
+ return
+ if(prize.cost > inserted_id.mining_points)
+ to_chat(usr, "Error: Insufficent points for [prize.equipment_name]!")
+ flick(icon_deny, src)
+ else
+ inserted_id.mining_points -= prize.cost
+ to_chat(usr, "[src] clanks to life briefly before vending [prize.equipment_name]!")
+ new prize.equipment_path(drop_location())
+ else
+ to_chat(usr, "Error: Please insert a valid ID!")
+ flick(icon_deny, src)
+ updateUsrDialog()
+
+/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
+ if(default_deconstruction_screwdriver(user, I))
+ updateUsrDialog()
+ return
+ if(default_part_replacement(user, I))
+ return
+ if(default_deconstruction_crowbar(user, I))
+ return
+ if(istype(I, /obj/item/mining_voucher))
+ if(!powered())
+ return
+ RedeemVoucher(I, user)
+ return
+ if(istype(I,/obj/item/weapon/card/id))
+ if(!powered())
+ return
+ else if(!inserted_id && user.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(user)
+ return
+ ..()
+
+/obj/machinery/mineral/equipment_vendor/dismantle()
+ if(inserted_id)
+ inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
+ . = ..()
+
+/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
+ var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher")
+ if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer)
+ return
+ var/drop_location = drop_location()
+ switch(selection)
+ if("Kinetic Accelerator")
+ new /obj/item/weapon/gun/energy/kinetic_accelerator(drop_location)
+ if("Resonator")
+ new /obj/item/resonator(drop_location)
+ // if("Mining Drone")
+ // new /obj/item/storage/box/drone_kit(drop_location)
+ // if("Advanced Scanner")
+ // new /obj/item/device/t_scanner/adv_mining_scanner(drop_location)
+ // if("Crusher")
+ // new /obj/item/twohanded/required/mining_hammer(drop_location)
+ qdel(voucher)
+
+/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ if(prob(50 / severity) && severity < 3)
+ qdel(src)
diff --git a/code/modules/mining/orm_vr/mine_point_items.dm b/code/modules/mining/orm_vr/mine_point_items.dm
new file mode 100644
index 0000000000..1994e77001
--- /dev/null
+++ b/code/modules/mining/orm_vr/mine_point_items.dm
@@ -0,0 +1,33 @@
+/**********************Mining Equipment Locker Items**************************/
+
+/**********************Mining Equipment Voucher**********************/
+
+/obj/item/mining_voucher
+ name = "mining voucher"
+ desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
+ icon = 'icons/obj/mining_vr.dmi'
+ icon_state = "mining_voucher"
+ w_class = ITEMSIZE_TINY
+
+/**********************Mining Point Card**********************/
+
+/obj/item/weapon/card/mining_point_card
+ name = "mining point card"
+ desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
+ icon_state = "data"
+ var/points = 500
+
+/obj/item/weapon/card/mining_point_card/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/weapon/card/id))
+ if(points)
+ var/obj/item/weapon/card/id/C = I
+ C.mining_points += points
+ to_chat(user, "You transfer [points] points to [C].")
+ points = 0
+ else
+ to_chat(user, "There's no points left on [src].")
+ ..()
+
+/obj/item/weapon/card/mining_point_card/examine(mob/user)
+ ..(user)
+ to_chat(user, "There's [points] points on the card.")
diff --git a/code/modules/reagents/reagent_containers/hypospray_vr.dm b/code/modules/reagents/reagent_containers/hypospray_vr.dm
index 238bfdb269..9f52d9f699 100644
--- a/code/modules/reagents/reagent_containers/hypospray_vr.dm
+++ b/code/modules/reagents/reagent_containers/hypospray_vr.dm
@@ -1,4 +1,4 @@
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/miner
name = "Emergency trauma injector"
desc = "A rapid injector for emergency treatment of injuries. The warning label advises that it is not a substitute for proper medical treatment."
icon_state = "autoinjector"
@@ -6,7 +6,7 @@
amount_per_transfer_from_this = 10
volume = 10
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer/New()
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/miner/New()
..()
reagents.add_reagent("bicaridine", 5)
reagents.add_reagent("tricordrazine", 3)
@@ -21,4 +21,4 @@
/obj/item/weapon/storage/box/traumainjectors/New()
..()
for (var/i = 1 to 7)
- new /obj/item/weapon/reagent_containers/hypospray/autoinjector/beltminer(src)
+ new /obj/item/weapon/reagent_containers/hypospray/autoinjector/miner(src)
diff --git a/icons/obj/machines/mining_machines_vr.dmi b/icons/obj/machines/mining_machines_vr.dmi
new file mode 100644
index 0000000000..28d608125d
Binary files /dev/null and b/icons/obj/machines/mining_machines_vr.dmi differ
diff --git a/icons/obj/mining_vr.dmi b/icons/obj/mining_vr.dmi
index 573f7de88e..070a2bf8da 100644
Binary files a/icons/obj/mining_vr.dmi and b/icons/obj/mining_vr.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index 751e07e391..30afc49bc6 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1860,6 +1860,9 @@
#include "code\modules\mining\shelters.dm"
#include "code\modules\mining\drilling\drill.dm"
#include "code\modules\mining\drilling\scanner.dm"
+#include "code\modules\mining\orm_vr\construction.dm"
+#include "code\modules\mining\orm_vr\equipment_vendor.dm"
+#include "code\modules\mining\orm_vr\mine_point_items.dm"
#include "code\modules\mob\animations.dm"
#include "code\modules\mob\death.dm"
#include "code\modules\mob\emote.dm"