mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-20 19:43:13 +01:00
Added weapons racks, can be locked/unlocked with an ID card. Added weapons racks sprites, from Wezzy. Refactored some circuitboard code, moved the defines, applied the defines, DMDocs. Moved mutable appearance appearance flag set to the mutable appearance file. Reorganized the Horizon armory with the weapons racks, moved things around, put down markers on lockers depending on the danger level of their content, reorganized content of the remaining lockers. Made weapons racks constructable with circuitboards.    sound/items/metal_shutter.ogg - https://freesound.org/people/bruno.auzet/sounds/524695/ (CC0, sound was edited)
121 lines
3.5 KiB
Plaintext
121 lines
3.5 KiB
Plaintext
/obj/machinery/power/crystal_agitator
|
|
name = "crystal agitator"
|
|
desc = "A device of incredibly niche design. This agitator disturbs the ashy turf around it, causing chemical crystals to form."
|
|
icon = 'icons/obj/crystal_agitator.dmi'
|
|
icon_state = "agitator"
|
|
density = TRUE
|
|
anchored = TRUE
|
|
|
|
use_power = POWER_USE_OFF
|
|
active_power_usage = 3000
|
|
|
|
var/agitation_range = 4
|
|
var/agitation_rate = 80
|
|
var/last_agitation = 0
|
|
var/active = FALSE
|
|
|
|
var/last_turf_check = 0
|
|
var/turf_check_rate = 3 MINUTES
|
|
var/list/agitation_turfs = list()
|
|
|
|
component_types = list(
|
|
/obj/item/stack/cable_coil{amount = 5},
|
|
/obj/item/stock_parts/capacitor,
|
|
/obj/item/stock_parts/manipulator,
|
|
/obj/item/bluespace_crystal,
|
|
/obj/item/circuitboard/crystal_agitator
|
|
)
|
|
|
|
/obj/machinery/power/crystal_agitator/Initialize()
|
|
. = ..()
|
|
connect_to_network()
|
|
|
|
/obj/machinery/power/crystal_agitator/attack_hand(mob/user)
|
|
toggle_active()
|
|
visible_message("<b>[user]</b> turns \the [src] [active ? "on" : "off"].", SPAN_NOTICE("You turn \the [src] [active ? "on" : "off"]."))
|
|
|
|
/obj/machinery/power/crystal_agitator/proc/toggle_active()
|
|
active = !active
|
|
icon_state = "[initial(icon_state)][active ? "-active": ""]"
|
|
if(active)
|
|
check_turfs()
|
|
|
|
/obj/machinery/power/crystal_agitator/proc/check_turfs()
|
|
var/turf/our_turf = get_turf(src)
|
|
var/list/grow_turfs = list()
|
|
for(var/thing in RANGE_TURFS(agitation_range, our_turf))
|
|
var/turf/T = thing
|
|
if(our_turf == T)
|
|
continue
|
|
if(!istype(T, /turf/unsimulated/floor/asteroid))
|
|
continue
|
|
if(locate(/obj/structure/reagent_crystal/dense) in T)
|
|
continue
|
|
grow_turfs += T
|
|
agitation_turfs = grow_turfs
|
|
last_turf_check = world.time + turf_check_rate
|
|
|
|
/obj/machinery/power/crystal_agitator/process()
|
|
if(!active)
|
|
return
|
|
if(stat & (BROKEN) || !powernet)
|
|
return
|
|
if(last_agitation + agitation_rate > world.time)
|
|
return
|
|
if(!length(agitation_turfs))
|
|
toggle_active()
|
|
return
|
|
|
|
var/actual_load = draw_power(active_power_usage)
|
|
if(actual_load < active_power_usage)
|
|
toggle_active()
|
|
return
|
|
|
|
// recheck the agitation turfs every few minutes to make sure we're not getting stuck
|
|
if(last_turf_check < world.time)
|
|
check_turfs()
|
|
|
|
var/turf/selected_turf = pick(agitation_turfs)
|
|
var/obj/structure/reagent_crystal/P = locate() in selected_turf
|
|
if(P)
|
|
P.become_dense()
|
|
return
|
|
if(prob(1) && prob(1))
|
|
new /mob/living/simple_animal/hostile/phoron_worm/small(selected_turf)
|
|
else
|
|
new /obj/structure/reagent_crystal(selected_turf, null, src)
|
|
last_agitation = world.time
|
|
|
|
/obj/machinery/power/crystal_agitator/RefreshParts()
|
|
for(var/obj/item/stock_parts/SP in component_parts)
|
|
if(ismanipulator(SP))
|
|
agitation_rate = initial(agitation_rate) - (SP.rating * 5)
|
|
if(iscapacitor(SP))
|
|
change_power_consumption((initial(active_power_usage) - (SP.rating * 500)), POWER_USE_ACTIVE)
|
|
|
|
/obj/machinery/power/crystal_agitator/attackby(obj/item/attacking_item, mob/user, params)
|
|
if(default_part_replacement(user, attacking_item))
|
|
return
|
|
else if(default_deconstruction_screwdriver(user, attacking_item))
|
|
return
|
|
else if(default_deconstruction_crowbar(user, attacking_item))
|
|
return
|
|
return ..()
|
|
|
|
/obj/item/circuitboard/crystal_agitator
|
|
name = T_BOARD("Crystal Agitator")
|
|
build_path = /obj/machinery/power/crystal_agitator
|
|
board_type = BOARD_MACHINE
|
|
origin_tech = list(
|
|
TECH_ENGINEERING = 3,
|
|
TECH_DATA = 2,
|
|
TECH_MATERIAL = 4,
|
|
TECH_POWER = 3
|
|
)
|
|
req_components = list(
|
|
"/obj/item/stack/cable_coil" = 5,
|
|
"/obj/item/stock_parts/capacitor" = 1,
|
|
"/obj/item/stock_parts/manipulator" = 1,
|
|
"/obj/item/bluespace_crystal" = 1
|
|
)
|