mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 21:19:44 +01:00
Phoron bore utility improvements
This commit is contained in:
@@ -27,3 +27,19 @@
|
||||
/datum/looping_sound/geiger/stop()
|
||||
. = ..()
|
||||
last_radiation = 0
|
||||
|
||||
/datum/looping_sound/small_motor
|
||||
start_sound = 'sound/items/small_motor/motor_start_nopull.ogg'
|
||||
start_length = 2 SECONDS
|
||||
mid_sounds = list(
|
||||
'sound/items/small_motor/motor_idle.ogg',
|
||||
'sound/items/small_motor/motor_fast.ogg',
|
||||
'sound/items/small_motor/motor_faster.ogg'
|
||||
)
|
||||
mid_length = 1.9 SECONDS //someone make this loop better please, i'm no good at sound. the clips should be 2 seconds exact but there's a gap if it's set to 2
|
||||
end_sound = 'sound/items/small_motor/motor_end.ogg'
|
||||
var/speed = 1
|
||||
|
||||
/datum/looping_sound/small_motor/get_sound(starttime)
|
||||
speed = clamp(speed, 1, 3)
|
||||
return ..(starttime, mid_sounds[speed])
|
||||
@@ -17,8 +17,56 @@
|
||||
var/icon_vend = "adh-tool-vend"
|
||||
circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor
|
||||
var/obj/item/weapon/card/id/inserted_id
|
||||
<<<<<<< HEAD
|
||||
var/list/prize_list // Initialized just below! (if you're wondering why - check CONTRIBUTING.md, look for: "hidden" init proc)
|
||||
var/dirty_items = FALSE // Used to refresh the static/redundant data in case the machine gets VV'd
|
||||
=======
|
||||
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("Geiger Counter", /obj/item/device/geiger, 750),
|
||||
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
|
||||
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
|
||||
// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
|
||||
// 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("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
|
||||
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 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, 10000),
|
||||
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, 5000),
|
||||
new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
|
||||
new /datum/data/mining_equipment("Industrial Hardsuit - Advanced Optics", /obj/item/rig_module/vision/mining, 1250),
|
||||
new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
|
||||
new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
|
||||
new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher",/obj/item/weapon/storage/bag/sheetsnatcher, 500), new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500),
|
||||
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000),
|
||||
new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500),
|
||||
new /datum/data/mining_equipment("Fine Excavation Kit - Measuring Tape",/obj/item/device/measuring_tape, 125),
|
||||
new /datum/data/mining_equipment("Fine Excavation Kit - Hand Pick",/obj/item/weapon/pickaxe/hand, 375),
|
||||
new /datum/data/mining_equipment("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic, 1500),
|
||||
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 500),
|
||||
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 500),
|
||||
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 500),
|
||||
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 1000),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 400),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 100),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 1000),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 1500),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 500)
|
||||
)
|
||||
>>>>>>> 9898fa3... Phoron bore utility improvements (#7680)
|
||||
|
||||
/datum/data/mining_equipment
|
||||
var/equipment_name = "generic"
|
||||
|
||||
@@ -6,8 +6,46 @@
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
circuit = /obj/item/weapon/circuitboard/exploration_equipment_vendor
|
||||
<<<<<<< HEAD
|
||||
icon_deny = "exploration-deny" //VOREStation Edit
|
||||
icon_vend = "exploration-vend" //VOREStation Add
|
||||
=======
|
||||
icon_deny = "explore-deny"
|
||||
prize_list = list(
|
||||
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1),
|
||||
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10),
|
||||
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30),
|
||||
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 120),
|
||||
new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 120),
|
||||
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15),
|
||||
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 20),
|
||||
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90),
|
||||
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75),
|
||||
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30),
|
||||
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 10),
|
||||
new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 100),
|
||||
new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 50),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50),
|
||||
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50),
|
||||
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 50),
|
||||
new /datum/data/mining_equipment("Direct Payment - 1000", /obj/item/weapon/spacecash/c1000, 500),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 500),
|
||||
new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 20),
|
||||
new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 30),
|
||||
new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 100),
|
||||
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 300),
|
||||
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 30),
|
||||
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 30),
|
||||
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50),
|
||||
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 50),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 15),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 50),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 50),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 100),
|
||||
new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 50),
|
||||
new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75)
|
||||
)
|
||||
>>>>>>> 9898fa3... Phoron bore utility improvements (#7680)
|
||||
|
||||
/obj/machinery/mineral/equipment_vendor/survey/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -1,27 +1,24 @@
|
||||
/obj/item/weapon/gun/magnetic/matfed
|
||||
name = "portable phoron bore"
|
||||
desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user."
|
||||
description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones."
|
||||
description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so."
|
||||
description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets."
|
||||
|
||||
icon_state = "bore"
|
||||
item_state = "bore"
|
||||
wielded_item_state = "bore-wielded"
|
||||
one_handed_penalty = 5
|
||||
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic/bore
|
||||
|
||||
gun_unreliable = 0
|
||||
|
||||
power_cost = 750
|
||||
load_type = /obj/item/stack/material
|
||||
load_type = list(/obj/item/stack/material, /obj/item/weapon/ore)
|
||||
var/mat_storage = 0 // How much material is stored inside? Input in multiples of 2000 as per auto/protolathe.
|
||||
var/max_mat_storage = 8000 // How much material can be stored inside?
|
||||
var/mat_cost = 500 // How much material is used per-shot?
|
||||
var/ammo_material = MAT_PHORON
|
||||
var/ammo_material
|
||||
var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type.
|
||||
var/loading = FALSE
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/Initialize()
|
||||
. = ..()
|
||||
if(ispath(manipulator))
|
||||
manipulator = new manipulator(src)
|
||||
if(manipulator)
|
||||
mat_cost = initial(mat_cost) / (2*manipulator.rating)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/Destroy()
|
||||
QDEL_NULL(manipulator)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/examine(mob/user)
|
||||
. = ..()
|
||||
var/ammotext = show_ammo()
|
||||
@@ -46,6 +43,7 @@
|
||||
|
||||
overlays = overlays_to_add
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/attack_hand(var/mob/user) // It doesn't keep a loaded item inside.
|
||||
if(user.get_inactive_hand() == src)
|
||||
var/obj/item/removing
|
||||
@@ -55,7 +53,6 @@
|
||||
cell = null
|
||||
|
||||
if(removing)
|
||||
removing.forceMove(get_turf(src))
|
||||
user.put_in_hands(removing)
|
||||
user.visible_message("<span class='notice'>\The [user] removes \the [removing] from \the [src].</span>")
|
||||
playsound(src, 'sound/machines/click.ogg', 10, 1)
|
||||
@@ -77,91 +74,170 @@
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
|
||||
if(removable_components)
|
||||
if(istype(thing, /obj/item/weapon/cell))
|
||||
if(cell)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [cell] installed.</span>")
|
||||
return
|
||||
cell = thing
|
||||
user.drop_from_inventory(cell)
|
||||
cell.forceMove(src)
|
||||
playsound(src, 'sound/machines/click.ogg', 10, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [cell] into \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
if(thing.is_crowbar())
|
||||
if(!manipulator)
|
||||
to_chat(user, "<span class='warning'>\The [src] has no manipulator installed.</span>")
|
||||
return
|
||||
manipulator.forceMove(get_turf(src))
|
||||
user.put_in_hands(manipulator)
|
||||
user.visible_message("<span class='notice'>\The [user] levers \the [manipulator] from \the [src].</span>")
|
||||
playsound(src, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
playsound(src, thing.usesound, 50, 1)
|
||||
mat_cost = initial(mat_cost)
|
||||
manipulator = null
|
||||
update_icon()
|
||||
return
|
||||
if(thing.is_screwdriver())
|
||||
if(!capacitor)
|
||||
to_chat(user, "<span class='warning'>\The [src] has no capacitor installed.</span>")
|
||||
return
|
||||
capacitor.forceMove(get_turf(src))
|
||||
user.put_in_hands(capacitor)
|
||||
user.visible_message("<span class='notice'>\The [user] unscrews \the [capacitor] from \the [src].</span>")
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
capacitor = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/stock_parts/capacitor))
|
||||
if(capacitor)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [capacitor] installed.</span>")
|
||||
return
|
||||
capacitor = thing
|
||||
user.drop_from_inventory(capacitor)
|
||||
capacitor.forceMove(src)
|
||||
playsound(src, 'sound/machines/click.ogg', 10, 1)
|
||||
power_per_tick = (power_cost*0.15) * capacitor.rating
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [capacitor] into \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(thing, /obj/item/weapon/stock_parts/manipulator))
|
||||
if(manipulator)
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [manipulator] installed.</span>")
|
||||
return
|
||||
manipulator = thing
|
||||
user.drop_from_inventory(manipulator)
|
||||
manipulator.forceMove(src)
|
||||
user.drop_from_inventory(manipulator, src)
|
||||
playsound(src, 'sound/machines/click.ogg', 10,1)
|
||||
mat_cost = initial(mat_cost) % (2*manipulator.rating)
|
||||
mat_cost = initial(mat_cost) / (2*manipulator.rating)
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [manipulator] into \the [src].</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
if(istype(thing, load_type))
|
||||
loading = TRUE
|
||||
if(is_type_in_list(thing, load_type))
|
||||
var/obj/item/stack/material/M = thing
|
||||
|
||||
if(!M.material || M.material.name != ammo_material)
|
||||
return
|
||||
if(istype(M)) //stack
|
||||
if(!M.material || M.material.name != ammo_material || loading)
|
||||
return
|
||||
|
||||
if(mat_storage + 2000 > max_mat_storage)
|
||||
to_chat(user, "<span class='warning'>\The [src] cannot hold more [ammo_material].</span>")
|
||||
return
|
||||
if(mat_storage + SHEET_MATERIAL_AMOUNT > max_mat_storage)
|
||||
to_chat(user, "<span class='warning'>\The [src] cannot hold more [ammo_material].</span>")
|
||||
return
|
||||
|
||||
var/can_hold_val = 0
|
||||
while(can_hold_val < round(max_mat_storage / 2000))
|
||||
if(mat_storage + 2000 <= max_mat_storage && do_after(user,1.5 SECONDS))
|
||||
var/can_hold_val = 0
|
||||
loading = TRUE
|
||||
while(mat_storage + SHEET_MATERIAL_AMOUNT <= max_mat_storage && do_after(user,1.5 SECONDS))
|
||||
can_hold_val ++
|
||||
mat_storage += 2000
|
||||
mat_storage += SHEET_MATERIAL_AMOUNT
|
||||
playsound(src, 'sound/effects/phasein.ogg', 15, 1)
|
||||
else
|
||||
loading = FALSE
|
||||
break
|
||||
M.use(can_hold_val)
|
||||
M.use(can_hold_val)
|
||||
loading = FALSE
|
||||
|
||||
else //ore
|
||||
if(M.material != ammo_material)
|
||||
return
|
||||
|
||||
if(mat_storage + (SHEET_MATERIAL_AMOUNT/2*0.8) > max_mat_storage)
|
||||
to_chat(user, "<span class='warning'>\The [src] cannot hold more [ammo_material].</span>")
|
||||
return
|
||||
|
||||
qdel(M)
|
||||
mat_storage += (SHEET_MATERIAL_AMOUNT/2*0.8) //two plasma ores needed per sheet, some inefficiency for not using refined product
|
||||
|
||||
|
||||
user.visible_message("<span class='notice'>\The [user] loads \the [src] with \the [M].</span>")
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
#define GEN_STARTING -1
|
||||
#define GEN_OFF 0
|
||||
#define GEN_IDLE 1
|
||||
#define GEN_ACTIVE 2
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore
|
||||
name = "portable phoron bore"
|
||||
desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user."
|
||||
description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones."
|
||||
description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so."
|
||||
description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets or ore, and has a togglable generator that can recharge the power cell using stored phoron."
|
||||
|
||||
icon_state = "bore"
|
||||
item_state = "bore"
|
||||
wielded_item_state = "bore-wielded"
|
||||
one_handed_penalty = 5
|
||||
|
||||
projectile_type = /obj/item/projectile/bullet/magnetic/bore
|
||||
|
||||
gun_unreliable = 0
|
||||
power_cost = 100
|
||||
ammo_material = MAT_PHORON
|
||||
|
||||
action_button_name = "Toggle internal generator"
|
||||
|
||||
var/generator_state = GEN_OFF
|
||||
var/datum/looping_sound/small_motor/soundloop
|
||||
var/time_started //to keep the soundloop from being "stopped" too soon and playing indefinitely
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/Initialize()
|
||||
. = ..()
|
||||
soundloop = new(list(src), 0)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/Destroy()
|
||||
QDEL_NULL(soundloop)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/ui_action_click()
|
||||
toggle_generator(usr)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/process()
|
||||
if(generator_state && !mat_storage)
|
||||
audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out."))
|
||||
soundloop.stop()
|
||||
generator_state = GEN_OFF
|
||||
|
||||
else if(generator_state > GEN_OFF)
|
||||
if(generator_state == GEN_IDLE && (cell?.percent() < 80 || (!cell && capacitor && capacitor.charge/capacitor.max_charge < 0.8)))
|
||||
generator_state = GEN_ACTIVE
|
||||
else if(generator_state == GEN_ACTIVE && (!cell || cell.fully_charged()) && (!capacitor || capacitor.charge == capacitor.max_charge))
|
||||
generator_state = GEN_IDLE
|
||||
soundloop.speed = generator_state
|
||||
generator_generate()
|
||||
|
||||
if(capacitor)
|
||||
if(cell)
|
||||
if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick))
|
||||
capacitor.charge(power_per_tick)
|
||||
else if(!generator_state)
|
||||
capacitor.use(capacitor.charge * 0.05)
|
||||
|
||||
update_state()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/generator_generate()
|
||||
var/fuel_used = generator_state == GEN_IDLE ? 5 : 25
|
||||
var/power_made = fuel_used * 800 * CELLRATE //20kW when active, same power as a pacman on setting one, but less efficient because compact and portable
|
||||
if(cell)
|
||||
cell.give(power_made)
|
||||
else if(capacitor)
|
||||
capacitor.charge(power_made)
|
||||
mat_storage = max(mat_storage - fuel_used, 0)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
T.assume_gas("carbon_dioxide", fuel_used * 0.01, T0C+200)
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/toggle_generator(mob/living/user)
|
||||
if(!generator_state && !mat_storage)
|
||||
to_chat(user, SPAN_NOTICE("\The [src] has no fuel!"))
|
||||
return
|
||||
|
||||
else if(!generator_state)
|
||||
generator_state = GEN_STARTING
|
||||
var/pull = (!cell || cell.charge < 100) ? rand(1,4) : 0
|
||||
while(pull)
|
||||
playsound(src, 'sound/items/small_motor/motor_pull_attempt.ogg', 100)
|
||||
if(!do_after(user, 2 SECONDS, src))
|
||||
generator_state = GEN_OFF
|
||||
return
|
||||
pull--
|
||||
soundloop.start()
|
||||
time_started = world.time
|
||||
cell?.use(100)
|
||||
audible_message(SPAN_NOTICE("\The [src] starts chugging."),SPAN_NOTICE("A motor noise starts up."))
|
||||
generator_state = GEN_IDLE
|
||||
|
||||
else if(generator_state > GEN_OFF && time_started + 3 SECONDS < world.time)
|
||||
soundloop.stop()
|
||||
audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out."))
|
||||
generator_state = GEN_OFF
|
||||
|
||||
/obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded
|
||||
cell = /obj/item/weapon/cell/apc
|
||||
capacitor = /obj/item/weapon/stock_parts/capacitor
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
var/obj/item/weapon/cell/cell // Currently installed powercell.
|
||||
var/obj/item/weapon/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. Set to a path to spawn with one of that type.
|
||||
var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type.
|
||||
var/removable_components = TRUE // Whether or not the gun can be dismantled.
|
||||
var/gun_unreliable = 15 // Percentage chance of detonating in your hands.
|
||||
|
||||
@@ -38,16 +37,14 @@
|
||||
if(ispath(capacitor))
|
||||
capacitor = new capacitor(src)
|
||||
capacitor.charge = capacitor.max_charge
|
||||
if(ispath(manipulator))
|
||||
manipulator = new manipulator(src)
|
||||
if(ispath(loaded))
|
||||
loaded = new loaded(src)
|
||||
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
if(capacitor)
|
||||
power_per_tick = (power_cost*0.15) * capacitor.rating
|
||||
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/Destroy()
|
||||
@@ -55,7 +52,6 @@
|
||||
QDEL_NULL(cell)
|
||||
QDEL_NULL(loaded)
|
||||
QDEL_NULL(capacitor)
|
||||
QDEL_NULL(manipulator)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/gun/magnetic/get_cell()
|
||||
@@ -68,7 +64,7 @@
|
||||
capacitor.charge(power_per_tick)
|
||||
else
|
||||
capacitor.use(capacitor.charge * 0.05)
|
||||
|
||||
|
||||
update_state() // May update icon, only if things changed.
|
||||
|
||||
/obj/item/weapon/gun/magnetic/proc/update_state()
|
||||
@@ -80,7 +76,7 @@
|
||||
newstate |= ICON_CELL
|
||||
if(capacitor)
|
||||
newstate |= ICON_CAP
|
||||
|
||||
|
||||
// Functional state
|
||||
if(!cell || !capacitor)
|
||||
newstate |= ICON_BAD
|
||||
@@ -88,7 +84,7 @@
|
||||
newstate |= ICON_CHARGE
|
||||
else
|
||||
newstate |= ICON_READY
|
||||
|
||||
|
||||
// Ammo indicator
|
||||
if(loaded)
|
||||
newstate |= ICON_LOADED
|
||||
@@ -99,7 +95,7 @@
|
||||
needs_update = TRUE
|
||||
|
||||
state = newstate
|
||||
|
||||
|
||||
if(needs_update)
|
||||
update_icon()
|
||||
|
||||
@@ -153,8 +149,7 @@
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [cell] installed.</span>")
|
||||
return
|
||||
cell = thing
|
||||
user.drop_from_inventory(cell)
|
||||
cell.forceMove(src)
|
||||
user.drop_from_inventory(cell, src)
|
||||
playsound(src, 'sound/machines/click.ogg', 10, 1)
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [cell] into \the [src].</span>")
|
||||
update_icon()
|
||||
@@ -164,10 +159,9 @@
|
||||
if(!capacitor)
|
||||
to_chat(user, "<span class='warning'>\The [src] has no capacitor installed.</span>")
|
||||
return
|
||||
capacitor.forceMove(get_turf(src))
|
||||
user.put_in_hands(capacitor)
|
||||
user.visible_message("<span class='notice'>\The [user] unscrews \the [capacitor] from \the [src].</span>")
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
playsound(src, thing.usesound, 50, 1)
|
||||
capacitor = null
|
||||
update_icon()
|
||||
return
|
||||
@@ -177,8 +171,7 @@
|
||||
to_chat(user, "<span class='warning'>\The [src] already has \a [capacitor] installed.</span>")
|
||||
return
|
||||
capacitor = thing
|
||||
user.drop_from_inventory(capacitor)
|
||||
capacitor.forceMove(src)
|
||||
user.drop_from_inventory(capacitor, src)
|
||||
playsound(src, 'sound/machines/click.ogg', 10, 1)
|
||||
power_per_tick = (power_cost*0.15) * capacitor.rating
|
||||
user.visible_message("<span class='notice'>\The [user] slots \the [capacitor] into \the [src].</span>")
|
||||
|
||||
@@ -161,6 +161,9 @@
|
||||
irradiate = 20
|
||||
range = 6
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/bore/get_structure_damage()
|
||||
return damage * 3 //made for boring holes
|
||||
|
||||
/obj/item/projectile/bullet/magnetic/bore/Bump(atom/A, forced=0)
|
||||
if(istype(A, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/MI = A
|
||||
@@ -170,7 +173,6 @@
|
||||
return 0
|
||||
else if(istype(A, /turf/simulated/wall) || istype(A, /turf/simulated/shuttle/wall)) // Cause a loud, but relatively minor explosion on the wall it hits.
|
||||
explosion(A, -1, -1, 1, 3)
|
||||
qdel(src)
|
||||
return 1
|
||||
return ..()
|
||||
else
|
||||
..()
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user