Updates subsystem definitions to new standards. (#17470)

* My heart is dragging me down into...

...oblivion!

* drifting closer to the edge but she won't have me

* ever round me we are dead before we meet her

* for the last time

* wake up in sweat

* n

* fff

* uff

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2023-10-01 14:24:40 +00:00
committed by GitHub
co-authored by Matt Atlas
parent aff9d2a1f3
commit baeb7c6afd
127 changed files with 406 additions and 720 deletions
+1 -1
View File
@@ -1258,7 +1258,7 @@ var/list/admin_verbs_cciaa = list(
return
var/mission_name = input("Enter Mission Name or press cancel to Reset","Mission Name") as null|text
SSpersist_config.forced_awaymission = mission_name
SSpersistent_configuration.forced_awaymission = mission_name
if(!mission_name)
log_and_message_admins("reset the forced away mission.")
+1 -1
View File
@@ -407,7 +407,7 @@
message_admins("<span class='notice'>[key_name_admin(usr)] set the mode as [master_mode].</span>", 1)
to_world("<span class='notice'><b>The mode is now: [master_mode]</b></span>")
Game() // updates the main game menu
SSpersist_config.last_gamemode = master_mode
SSpersistent_configuration.last_gamemode = master_mode
.(href, list("c_mode"=1))
else if(href_list["f_secret2"])
+1 -1
View File
@@ -57,7 +57,7 @@
if (config.fastboot)
return
if (!ao_queued)
SSocclusion.queue += src
SSao.queue += src
var/new_level = rebuild ? AO_UPDATE_REBUILD : AO_UPDATE_OVERLAY
if (ao_queued < new_level)
+2 -2
View File
@@ -8,7 +8,7 @@
log_and_message_admins("has triggered a global ambient occlusion rebuild.")
to_chat(usr, "Beginning global AO rebuild.")
SSocclusion.disable()
SSao.disable()
for (var/turf/T in world) // Yes, in world.
T.ao_neighbors = null // To force a recalc.
@@ -18,6 +18,6 @@
CHECK_TICK
SSocclusion.enable()
SSao.enable()
to_chat(usr, "AO rebuild complete.")
+15 -15
View File
@@ -83,33 +83,33 @@
/obj/item/battle_monsters/card/proc/Generate_Card(var/prefix,var/root,var/title,var/trap,var/spell)
if(trap)
trap_datum = SSbattlemonsters.FindMatchingTrap(trap,TRUE)
trap_datum = SSbattle_monsters.FindMatchingTrap(trap,TRUE)
update_icon()
return
if(spell)
spell_datum = SSbattlemonsters.FindMatchingSpell(spell,TRUE)
spell_datum = SSbattle_monsters.FindMatchingSpell(spell,TRUE)
update_icon()
return
if(prefix)
prefix_datum = SSbattlemonsters.FindMatchingPrefix(prefix,TRUE)
prefix_datum = SSbattle_monsters.FindMatchingPrefix(prefix,TRUE)
else
prefix_datum = SSbattlemonsters.GetRandomPrefix()
prefix_datum = SSbattle_monsters.GetRandomPrefix()
if(root)
root_datum = SSbattlemonsters.FindMatchingRoot(root,TRUE)
root_datum = SSbattle_monsters.FindMatchingRoot(root,TRUE)
else
root_datum = SSbattlemonsters.GetRandomRoot()
root_datum = SSbattle_monsters.GetRandomRoot()
var/rarity_score = prefix_datum.rarity_score + root_datum.rarity_score
if(title)
suffix_datum = SSbattlemonsters.FindMatchingSuffix(title,TRUE)
suffix_datum = SSbattle_monsters.FindMatchingSuffix(title,TRUE)
else if(rarity_score >= 3)
suffix_datum = SSbattlemonsters.GetRandomSuffix()
suffix_datum = SSbattle_monsters.GetRandomSuffix()
else
suffix_datum = SSbattlemonsters.FindMatchingSuffix("no_title",TRUE)
suffix_datum = SSbattle_monsters.FindMatchingSuffix("no_title",TRUE)
/obj/item/battle_monsters/card/update_icon()
@@ -173,11 +173,11 @@
return
if(trap_datum)
SSbattlemonsters.ExamineTrapCard(user,trap_datum)
SSbattle_monsters.ExamineTrapCard(user,trap_datum)
else if(spell_datum)
SSbattlemonsters.ExamineSpellCard(user,spell_datum)
SSbattle_monsters.ExamineSpellCard(user,spell_datum)
else
SSbattlemonsters.ExamineMonsterCard(user,prefix_datum,root_datum,suffix_datum)
SSbattle_monsters.ExamineMonsterCard(user,prefix_datum,root_datum,suffix_datum)
/obj/item/battle_monsters/card/MouseEntered(location, control, params)
. = ..()
@@ -186,13 +186,13 @@
var/card_content = desc
if(trap_datum)
card_title = trap_datum.name
card_content = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetTrapFormatting(FALSE), trap_datum, FALSE)
card_content = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetTrapFormatting(FALSE), trap_datum, FALSE)
else if(spell_datum)
card_title = spell_datum.name
card_content = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetSpellFormatting(FALSE), spell_datum, FALSE)
card_content = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetSpellFormatting(FALSE), spell_datum, FALSE)
else
card_title = root_datum.name
card_content = SSbattlemonsters.FormatMonsterText(SSbattlemonsters.GetMonsterFormatting(FALSE), prefix_datum, root_datum, suffix_datum, FALSE)
card_content = SSbattle_monsters.FormatMonsterText(SSbattle_monsters.GetMonsterFormatting(FALSE), prefix_datum, root_datum, suffix_datum, FALSE)
openToolTip(usr, src, params, card_title, card_content)
/obj/item/battle_monsters/card/MouseExited(location, control, params)
@@ -21,9 +21,9 @@
var/list/deck_data = list()
for(var/i=1,i <= contained_cards,i++)
CHECK_TICK //This stuff is a little intensive I think.
var/datum/battle_monsters/selected_prefix = SSbattlemonsters.GetRandomPrefix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_root = SSbattlemonsters.FindMatchingRoot(pickweight(species))
var/datum/battle_monsters/selected_suffix = SSbattlemonsters.GetRandomSuffix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_prefix = SSbattle_monsters.GetRandomPrefix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_root = SSbattle_monsters.FindMatchingRoot(pickweight(species))
var/datum/battle_monsters/selected_suffix = SSbattle_monsters.GetRandomSuffix_Filtered(rarity_min,rarity_max)
deck_data += "[selected_prefix.id],[selected_root.id],[(selected_prefix.rarity_score + selected_root.rarity_score) >= 3 ? selected_suffix.id : "no_title"]"
generated_deck.stored_card_names = deck_data
+7 -7
View File
@@ -45,7 +45,7 @@
/obj/item/battle_monsters/deck/proc/take_specific_card(var/mob/user, var/card_id)
if(card_id in stored_card_names)
var/obj/item/battle_monsters/card/new_card = SSbattlemonsters.CreateCard(card_id,src.loc)
var/obj/item/battle_monsters/card/new_card = SSbattle_monsters.CreateCard(card_id,src.loc)
if(!user.get_active_hand())
user.put_in_active_hand(new_card)
@@ -167,14 +167,14 @@
var/list/splitstring = dd_text2List(cardname,",")
var/formatted_data
if(splitstring[1] == "spell_type")
formatted_data = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetSpellFormatting(),SSbattlemonsters.FindMatchingSpell(splitstring[2]))
formatted_data = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetSpellFormatting(),SSbattle_monsters.FindMatchingSpell(splitstring[2]))
else if(splitstring[1] == "trap_type")
formatted_data = SSbattlemonsters.FormatSpellText(SSbattlemonsters.GetTrapFormatting(),SSbattlemonsters.FindMatchingTrap(splitstring[2]))
formatted_data = SSbattle_monsters.FormatSpellText(SSbattle_monsters.GetTrapFormatting(),SSbattle_monsters.FindMatchingTrap(splitstring[2]))
else
var/datum/battle_monsters/element/prefix_datum = SSbattlemonsters.FindMatchingPrefix(splitstring[1])
var/datum/battle_monsters/monster/root_datum = SSbattlemonsters.FindMatchingRoot(splitstring[2])
var/datum/battle_monsters/title/suffix_datum = SSbattlemonsters.FindMatchingSuffix(splitstring[3])
formatted_data = SSbattlemonsters.FormatMonsterText(SSbattlemonsters.GetMonsterFormatting(),prefix_datum,root_datum,suffix_datum)
var/datum/battle_monsters/element/prefix_datum = SSbattle_monsters.FindMatchingPrefix(splitstring[1])
var/datum/battle_monsters/monster/root_datum = SSbattle_monsters.FindMatchingRoot(splitstring[2])
var/datum/battle_monsters/title/suffix_datum = SSbattle_monsters.FindMatchingSuffix(splitstring[3])
formatted_data = SSbattle_monsters.FormatMonsterText(SSbattle_monsters.GetMonsterFormatting(),prefix_datum,root_datum,suffix_datum)
browse_data = "[formatted_data]<br><a href='?src=\ref[src];selection=[cardname]'>Draw Card</a><br><hr>[browse_data]"
+5 -5
View File
@@ -13,16 +13,16 @@
CHECK_TICK //This stuff is a little intensive I think.
if(prob(25))
if(prob(50))
var/datum/battle_monsters/selected_trap = SSbattlemonsters.GetRandomTrap()
var/datum/battle_monsters/selected_trap = SSbattle_monsters.GetRandomTrap()
deck_data += "trap_type,[selected_trap.id],no_title"
else
var/datum/battle_monsters/selected_spell = SSbattlemonsters.GetRandomSpell()
var/datum/battle_monsters/selected_spell = SSbattle_monsters.GetRandomSpell()
deck_data += "spell_type,[selected_spell.id],no_title"
continue
var/datum/battle_monsters/selected_prefix = SSbattlemonsters.GetRandomPrefix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_root = SSbattlemonsters.GetRandomRoot_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_suffix = SSbattlemonsters.GetRandomSuffix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_prefix = SSbattle_monsters.GetRandomPrefix_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_root = SSbattle_monsters.GetRandomRoot_Filtered(rarity_min,rarity_max)
var/datum/battle_monsters/selected_suffix = SSbattle_monsters.GetRandomSuffix_Filtered(rarity_min,rarity_max)
deck_data += "[selected_prefix.id],[selected_root.id],[(selected_prefix.rarity_score + selected_root.rarity_score) >= 3 ? selected_suffix.id : "no_title"]"
generated_deck.stored_card_names = deck_data
+2 -2
View File
@@ -125,7 +125,7 @@
spark_system = bind_spark(src, 5)
START_PROCESSING(SSmob, src)
START_PROCESSING(SSmobs, src)
last_remote_message = world.time
@@ -191,7 +191,7 @@
/obj/item/rig/Destroy()
for(var/obj/item/piece in list(gloves,boots,helmet,chest))
qdel(piece)
STOP_PROCESSING(SSmob, src)
STOP_PROCESSING(SSmobs, src)
qdel(wires)
wires = null
qdel(spark_system)
+4 -4
View File
@@ -28,15 +28,15 @@
/mob/abstract/eye/New()
ghostimage = image(src.icon,src,src.icon_state)
SSmob.ghost_darkness_images |= ghostimage //so ghosts can see the eye when they disable darkness
SSmob.ghost_sightless_images |= ghostimage //so ghosts can see the eye when they disable ghost sight
SSmobs.ghost_darkness_images |= ghostimage //so ghosts can see the eye when they disable darkness
SSmobs.ghost_sightless_images |= ghostimage //so ghosts can see the eye when they disable ghost sight
updateallghostimages()
..()
/mob/abstract/eye/Destroy()
if (ghostimage)
SSmob.ghost_darkness_images -= ghostimage
SSmob.ghost_sightless_images -= ghostimage
SSmobs.ghost_darkness_images -= ghostimage
SSmobs.ghost_sightless_images -= ghostimage
qdel(ghostimage)
ghostimage = null
updateallghostimages()
@@ -252,7 +252,7 @@
return chosenJob
/datum/preferences/proc/update_mannequin()
var/mob/living/carbon/human/dummy/mannequin/mannequin = SSmob.get_mannequin(client.ckey)
var/mob/living/carbon/human/dummy/mannequin/mannequin = SSmobs.get_mannequin(client.ckey)
mannequin.delete_inventory(TRUE)
mannequin.species.create_organs(mannequin)
if(gender)
@@ -48,7 +48,7 @@
set_stat(DEAD)
ghostimage = image(src.icon,src,src.icon_state)
SSmob.ghost_darkness_images |= ghostimage
SSmobs.ghost_darkness_images |= ghostimage
updateallghostimages()
var/turf/T
@@ -102,7 +102,7 @@
ghost_multitool = null
if (ghostimage)
SSmob.ghost_darkness_images -= ghostimage
SSmobs.ghost_darkness_images -= ghostimage
qdel(ghostimage)
ghostimage = null
updateallghostimages()
@@ -849,7 +849,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return 1
/mob/proc/can_admin_interact()
return 0
return 0
/mob/abstract/observer/can_admin_interact()
return check_rights(R_ADMIN, 0, src)
@@ -896,12 +896,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if (!client)
return
if (seedarkness || !ghostvision)
client.images -= SSmob.ghost_darkness_images
client.images |= SSmob.ghost_sightless_images
client.images -= SSmobs.ghost_darkness_images
client.images |= SSmobs.ghost_sightless_images
else
//add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now
client.images -= SSmob.ghost_sightless_images
client.images |= SSmob.ghost_darkness_images
client.images -= SSmobs.ghost_sightless_images
client.images |= SSmobs.ghost_darkness_images
if (ghostimage)
client.images -= ghostimage //remove ourself
+1 -1
View File
@@ -665,7 +665,7 @@ var/list/ai_verbs_default = list(
else
to_chat(src, SPAN_WARNING("You do not have a custom sprite!"))
if("loadout character")
var/mob/living/carbon/human/H = SSmob.get_mannequin(usr.client.ckey)
var/mob/living/carbon/human/H = SSmobs.get_mannequin(usr.client.ckey)
holo_icon.appearance = H.appearance
else
set_hologram_unique(icon('icons/mob/AI.dmi', input))
@@ -83,7 +83,7 @@
dust()
/mob/living/simple_animal/rat/Destroy()
SSmob.all_rats -= src
SSmobs.all_rats -= src
return ..()
@@ -117,7 +117,7 @@
holder_type = /obj/item/holder/rat/irish
SSmob.all_rats += src
SSmobs.all_rats += src
/mob/living/simple_animal/rat/speak_audio()
squeak_soft(0)
@@ -251,7 +251,7 @@
if(client)
client.time_died_as_rat = world.time
SSmob.all_rats -= src
SSmobs.all_rats -= src
..()
@@ -8,7 +8,7 @@
/proc/announceToRodents(var/message)
for(var/R in SSmob.all_rats)
for(var/R in SSmobs.all_rats)
to_chat(R, message)
/mob/living/simple_animal/rat/king
@@ -60,8 +60,8 @@
)
var/obj/item/organ/external/G = H.get_organ(BP_GROIN)
G.droplimb(0,DROPLIMB_EDGE)
if(SSmob.greatasses.len)
var/obj/structure/greatworm/S = pick(SSmob.greatasses)
if(SSmobs.greatasses.len)
var/obj/structure/greatworm/S = pick(SSmobs.greatasses)
H.forceMove(S.loc)
else
H.gib()
@@ -126,14 +126,14 @@
/mob/living/simple_animal/hostile/greatworm/Initialize()
. = ..()
SSmob.greatworms += src
SSmobs.greatworms += src
loot_count = 4+(rand(0,4))
var/obj/item/trap/sarlacc/L = new /obj/item/trap/sarlacc(src.loc)
L.originator = src
sarlacc = L
/mob/living/simple_animal/hostile/greatworm/Destroy()
SSmob.greatworms -= src
SSmobs.greatworms -= src
if(sarlacc)
qdel(sarlacc)
sarlacc = null
@@ -349,9 +349,9 @@
/mob/living/simple_animal/hostile/greatwormking/Destroy()
playsound(src.loc, 'sound/hallucinations/wail.ogg', 200, 1, usepressure = 0)
for(var/mob/living/L in SSmob.greatworms)
for(var/mob/living/L in SSmobs.greatworms)
L.death()
for(var/obj/structure/S in SSmob.greatasses)
for(var/obj/structure/S in SSmobs.greatasses)
qdel(S)
return ..()
@@ -412,9 +412,9 @@
/obj/structure/greatworm/Initialize()
. = ..()
SSmob.greatasses += src
SSmobs.greatasses += src
/obj/structure/greatworm/Destroy()
SSmob.greatasses -= src
SSmobs.greatasses -= src
return ..()
+1 -1
View File
@@ -59,7 +59,7 @@
player_list |= src
update_Login_details()
SSfeedback.update_status()
SSstatistics.update_status()
client.images.Cut() //remove the images such as AIs being unable to see runes
client.screen.Cut() //remove hud items just in case
+1 -1
View File
@@ -6,7 +6,7 @@
player_list -= src
disconnect_time = world.realtime
log_access("Logout: [key_name(src)]",ckey=key_name(src))
SSfeedback.update_status()
SSstatistics.update_status()
if(client)
clear_important_client_contents(client)
+4 -4
View File
@@ -1074,20 +1074,20 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT)
// It's not worth adding a proc for every single one of these types.
/mob/living/simple_animal/find_type()
. = ..()
if (is_type_in_typecache(src, SSmob.mtl_synthetic))
if (is_type_in_typecache(src, SSmobs.mtl_synthetic))
. |= TYPE_SYNTHETIC
if (is_type_in_typecache(src, SSmob.mtl_weird))
if (is_type_in_typecache(src, SSmobs.mtl_weird))
. |= TYPE_WEIRD
if (is_type_in_typecache(src, SSmob.mtl_incorporeal))
if (is_type_in_typecache(src, SSmobs.mtl_incorporeal))
. |= TYPE_INCORPOREAL
// If it's not TYPE_SYNTHETIC, TYPE_WEIRD or TYPE_INCORPOREAL, we can assume it's TYPE_ORGANIC.
if (!(. & (TYPE_SYNTHETIC|TYPE_WEIRD|TYPE_INCORPOREAL)))
. |= TYPE_ORGANIC
if (is_type_in_typecache(src, SSmob.mtl_humanoid))
if (is_type_in_typecache(src, SSmobs.mtl_humanoid))
. |= TYPE_HUMANOID
#undef SAFE_PERP
+2 -2
View File
@@ -642,7 +642,7 @@
playsound(src.loc, "sound/weapons/smash.ogg", 75, 1)
// Stats.
SSfeedback.IncrementSimpleStat("openturf_human_falls")
SSstatistics.IncrementSimpleStat("openturf_human_falls")
addtimer(CALLBACK(src, PROC_REF(post_fall_death_check)), 2 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE)
return TRUE
@@ -653,7 +653,7 @@
/mob/living/carbon/human/proc/post_fall_death_check()
if (stat == DEAD)
SSfeedback.IncrementSimpleStat("openturf_human_deaths")
SSstatistics.IncrementSimpleStat("openturf_human_deaths")
/obj/vehicle/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
. = ..()
+2 -2
View File
@@ -1127,7 +1127,7 @@ By design, d1 is the smallest direction and d2 is the highest
SPAN_WARNING("[M] ties \the [src] over their neck!"),\
SPAN_WARNING("You tie \the [src] over your neck!"))
playsound(user.loc, 'sound/effects/noosed.ogg', 50, 1, -1)
SSfeedback.IncrementSimpleStat("hangings")
SSstatistics.IncrementSimpleStat("hangings")
return TRUE
else
M.visible_message(\
@@ -1140,7 +1140,7 @@ By design, d1 is the smallest direction and d2 is the highest
SPAN_DANGER("[user] ties \the [src] over [M]'s neck!"),\
SPAN_DANGER("[user] ties \the [src] over your neck!"))
playsound(user.loc, 'sound/effects/noosed.ogg', 50, 1, -1)
SSfeedback.IncrementSimpleStat("hangings")
SSstatistics.IncrementSimpleStat("hangings")
return TRUE
else
user.visible_message(\
+12 -12
View File
@@ -101,14 +101,14 @@
//calculates the fraction of the sunlight that the panel receives
/obj/machinery/power/solar/proc/update_solar_exposure()
if(!sun)
if(!SSsun)
return
if(obscured)
sunfrac = 0
return
//find the smaller angle between the direction the panel is facing and the direction of the sun (the sign is not important here)
var/p_angle = min(abs(adir - sun.angle), 360 - abs(adir - sun.angle))
var/p_angle = min(abs(adir - SSsun.angle), 360 - abs(adir - SSsun.angle))
if(p_angle > 90) // if facing more than 90deg from sun, zero output
sunfrac = 0
@@ -118,7 +118,7 @@
//isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ?
/obj/machinery/power/solar/process()
if(stat & BROKEN || !control || !sun)
if(stat & BROKEN || !control || !SSsun)
return PROCESS_KILL
if(powernet && powernet == control.powernet)
@@ -174,8 +174,8 @@
var/turf/T = null
for(var/i = 1 to 20) // 20 steps is enough
ax += sun.dx // do step
ay += sun.dy
ax += SSsun.dx // do step
ay += SSsun.dy
T = locate( round(ax,0.5),round(ay,0.5),z)
@@ -299,12 +299,12 @@
/obj/machinery/power/solar_control/disconnect_from_network()
..()
sun.solars -= src
SSsun.solars -= src
/obj/machinery/power/solar_control/connect_to_network()
var/to_return = ..()
if(powernet) //if connected and not already in solar_list...
sun.solars |= src //... add it
SSsun.solars |= src //... add it
return to_return
//search for unconnected panels and trackers in the computer powernet and connect them
@@ -334,7 +334,7 @@
cdir = targetdir //...the current direction is the targetted one (and rotates panels to it)
if(2) // auto-tracking
if(connected_tracker)
connected_tracker.modify_angle(sun.angle)
connected_tracker.modify_angle(SSsun.angle)
set_panels(cdir)
updateDialog()
@@ -352,7 +352,7 @@
/obj/machinery/power/solar_control/interact(mob/user)
var/t = "<B><span class='highlight'>Generated power</span></B> : [round(lastgen)] W<BR>"
t += "<B><span class='highlight'>Star Orientation</span></B>: [sun.angle]&deg ([angle2text(sun.angle)])<BR>"
t += "<B><span class='highlight'>Star Orientation</span></B>: [SSsun.angle]&deg ([angle2text(SSsun.angle)])<BR>"
t += "<B><span class='highlight'>Array Orientation</span></B>: [rate_control(src,"cdir","[cdir]&deg",1,15)] ([angle2text(cdir)])<BR>"
t += "<B><span class='highlight'>Tracking:</span></B><div class='statusDisplay'>"
switch(track)
@@ -454,7 +454,7 @@
track = text2num(href_list["track"])
if(track == 2)
if(connected_tracker)
connected_tracker.modify_angle(sun.angle)
connected_tracker.modify_angle(SSsun.angle)
set_panels(cdir)
else if (track == 1) //begin manual tracking
src.targetdir = src.cdir
@@ -464,7 +464,7 @@
if(href_list["search_connected"])
src.search_for_connected()
if(connected_tracker && track == 2)
connected_tracker.modify_angle(sun.angle)
connected_tracker.modify_angle(SSsun.angle)
src.set_panels(cdir)
interact(usr)
@@ -522,7 +522,7 @@
/obj/machinery/power/solar_control/autostart/proc/do_solars()
search_for_connected()
if(connected_tracker && track == 2)
connected_tracker.modify_angle(sun.angle)
connected_tracker.modify_angle(SSsun.angle)
set_panels(cdir)
/obj/machinery/power/solar_control/update_icon()