Files
Aurora.3/code/modules/power/crystal_agitator.dm
T
FluffyandGitHub 9acce89e2a Weapons Racks (#19338)
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.


![image](https://github.com/Aurorastation/Aurora.3/assets/65877598/8b4ec7ae-40c4-4cd7-b338-76120d468b90)

![image](https://github.com/Aurorastation/Aurora.3/assets/65877598/a69d1f85-c4b2-4643-af2b-6832e3ea2c43)

![image](https://github.com/Aurorastation/Aurora.3/assets/65877598/11c1afe4-0fa1-4708-8eb4-64e1f5594913)

sound/items/metal_shutter.ogg -
https://freesound.org/people/bruno.auzet/sounds/524695/ (CC0, sound was
edited)
2024-06-09 17:07:52 +00:00

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
)