fix files with invalid utf-8

This commit is contained in:
spookerton
2022-04-27 01:02:04 +01:00
parent 5058ece743
commit 1b13c8dd9f
13 changed files with 2800 additions and 2798 deletions
+5 -1
View File
@@ -4,4 +4,8 @@ updates:
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: "daily"
interval: "daily"
- package-ecosystem: npm
directory: "/tools"
schedule:
interval: "daily"
+195 -195
View File
@@ -1,195 +1,195 @@
/*
Overview:
Each zone is a self-contained area where gas values would be the same if tile-based equalization were run indefinitely.
If you're unfamiliar with ZAS, FEA's air groups would have similar functionality if they didn't break in a stiff breeze.
Class Vars:
name - A name of the format "Zone [#]", used for debugging.
invalid - True if the zone has been erased and is no longer eligible for processing.
needs_update - True if the zone has been added to the update list.
edges - A list of edges that connect to this zone.
air - The gas mixture that any turfs in this zone will return. Values are per-tile with a group multiplier.
Class Procs:
add(turf/simulated/T)
Adds a turf to the contents, sets its zone and merges its air.
remove(turf/simulated/T)
Removes a turf, sets its zone to null and erases any gas graphics.
Invalidates the zone if it has no more tiles.
c_merge(zone/into)
Invalidates this zone and adds all its former contents to into.
c_invalidate()
Marks this zone as invalid and removes it from processing.
rebuild()
Invalidates the zone and marks all its former tiles for updates.
add_tile_air(turf/simulated/T)
Adds the air contained in T.air to the zone's air supply. Called when adding a turf.
tick()
Called only when the gas content is changed. Archives values and changes gas graphics.
dbg_data(mob/M)
Sends M a printout of important figures for the zone.
*/
/zone/var/name
/zone/var/invalid = 0
/zone/var/list/contents = list()
/zone/var/list/fire_tiles = list()
/zone/var/list/fuel_objs = list()
/zone/var/needs_update = 0
/zone/var/list/edges = list()
/zone/var/datum/gas_mixture/air = new
/zone/var/list/graphic_add = list()
/zone/var/list/graphic_remove = list()
/zone/New()
air_master.add_zone(src)
air.temperature = TCMB
air.group_multiplier = 1
air.volume = CELL_VOLUME
/zone/proc/add(turf/simulated/T)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(T))
ASSERT(!air_master.has_valid_zone(T))
#endif
var/datum/gas_mixture/turf_air = T.return_air()
add_tile_air(turf_air)
T.zone = src
contents.Add(T)
if(T.fire)
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
fire_tiles.Add(T)
air_master.active_fire_zones |= src
if(fuel) fuel_objs += fuel
if(air.graphic)
T.update_graphic(air.graphic)
/zone/proc/remove(turf/simulated/T)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(T))
ASSERT(T.zone == src)
soft_assert(T in contents, "Lists are weird broseph")
#endif
contents.Remove(T)
fire_tiles.Remove(T)
if(T.fire)
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
fuel_objs -= fuel
T.zone = null
if(air.graphic)
T.update_graphic(graphic_remove = air.graphic)
if(contents.len)
air.group_multiplier = contents.len
else
c_invalidate()
/zone/proc/c_merge(zone/into)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(into))
ASSERT(into != src)
ASSERT(!into.invalid)
#endif
c_invalidate()
var/list/air_graphic = air.graphic // Cache for sanic speed
for(var/turf/simulated/T in contents)
into.add(T)
if(air_graphic)
T.update_graphic(graphic_remove = air_graphic)
#ifdef ZASDBG
T.dbg(merged)
#endif
//rebuild the old zone's edges so that they will be possessed by the new zone
for(var/connection_edge/E in edges)
if(E.contains_zone(into))
continue //don't need to rebuild this edge
for(var/turf/T in E.connecting_turfs)
air_master.mark_for_update(T)
/zone/proc/c_invalidate()
invalid = 1
air_master.remove_zone(src)
#ifdef ZASDBG
for(var/turf/simulated/T in contents)
T.dbg(invalid_zone)
#endif
/zone/proc/rebuild()
if(invalid) return //Short circuit for explosions where rebuild is called many times over.
c_invalidate()
var/list/air_graphic = air.graphic // Cache for sanic speed
for(var/turf/simulated/T in contents)
if(air_graphic)
T.update_graphic(graphic_remove = air_graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
//T.dbg(invalid_zone)
T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
air_master.mark_for_update(T)
/zone/proc/add_tile_air(datum/gas_mixture/tile_air)
//air.volume += CELL_VOLUME
air.group_multiplier = 1
air.multiply(contents.len)
air.merge(tile_air)
air.divide(contents.len+1)
air.group_multiplier = contents.len+1
/zone/proc/tick()
if(air.temperature >= PHORON_FLASHPOINT && !(src in air_master.active_fire_zones) && air.check_combustability() && contents.len)
var/turf/T = pick(contents)
if(istype(T))
T.create_fire(vsc.fire_firelevel_multiplier)
if(air.check_tile_graphic(graphic_add, graphic_remove))
for(var/turf/simulated/T in contents)
T.update_graphic(graphic_add, graphic_remove)
graphic_add.len = 0
graphic_remove.len = 0
for(var/connection_edge/E in edges)
if(E.sleeping)
E.recheck()
/zone/proc/dbg_data(mob/M)
to_chat(M,name)
for(var/g in air.gas)
to_chat(M, "[gas_data.name[g]]: [air.gas[g]]")
to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
to_chat(M, "O2 per N2: [(air.gas["nitrogen"] ? air.gas["oxygen"]/air.gas["nitrogen"] : "N/A")] Moles: [air.total_moles]")
to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
//to_chat(M, "Unsimulated: [unsimulated_contents.len]")
//to_chat(M, "Edges: [edges.len]")
if(invalid)
to_chat(M, "Invalid!")
var/zone_edges = 0
var/space_edges = 0
var/space_coefficient = 0
for(var/connection_edge/E in edges)
if(E.type == /connection_edge/zone) zone_edges++
else
space_edges++
space_coefficient += E.coefficient
to_chat(M, "[E:air:return_pressure()]kPa")
to_chat(M, "Zone Edges: [zone_edges]")
to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)")
//for(var/turf/T in unsimulated_contents)
// to_chat(M, "[T] at ([T.x],[T.y])")
/*
Overview:
Each zone is a self-contained area where gas values would be the same if tile-based equalization were run indefinitely.
If you're unfamiliar with ZAS, FEA's air groups would have similar functionality if they didn't break in a stiff breeze.
Class Vars:
name - A name of the format "Zone [#]", used for debugging.
invalid - True if the zone has been erased and is no longer eligible for processing.
needs_update - True if the zone has been added to the update list.
edges - A list of edges that connect to this zone.
air - The gas mixture that any turfs in this zone will return. Values are per-tile with a group multiplier.
Class Procs:
add(turf/simulated/T)
Adds a turf to the contents, sets its zone and merges its air.
remove(turf/simulated/T)
Removes a turf, sets its zone to null and erases any gas graphics.
Invalidates the zone if it has no more tiles.
c_merge(zone/into)
Invalidates this zone and adds all its former contents to into.
c_invalidate()
Marks this zone as invalid and removes it from processing.
rebuild()
Invalidates the zone and marks all its former tiles for updates.
add_tile_air(turf/simulated/T)
Adds the air contained in T.air to the zone's air supply. Called when adding a turf.
tick()
Called only when the gas content is changed. Archives values and changes gas graphics.
dbg_data(mob/M)
Sends M a printout of important figures for the zone.
*/
/zone/var/name
/zone/var/invalid = 0
/zone/var/list/contents = list()
/zone/var/list/fire_tiles = list()
/zone/var/list/fuel_objs = list()
/zone/var/needs_update = 0
/zone/var/list/edges = list()
/zone/var/datum/gas_mixture/air = new
/zone/var/list/graphic_add = list()
/zone/var/list/graphic_remove = list()
/zone/New()
air_master.add_zone(src)
air.temperature = TCMB
air.group_multiplier = 1
air.volume = CELL_VOLUME
/zone/proc/add(turf/simulated/T)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(T))
ASSERT(!air_master.has_valid_zone(T))
#endif
var/datum/gas_mixture/turf_air = T.return_air()
add_tile_air(turf_air)
T.zone = src
contents.Add(T)
if(T.fire)
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
fire_tiles.Add(T)
air_master.active_fire_zones |= src
if(fuel) fuel_objs += fuel
if(air.graphic)
T.update_graphic(air.graphic)
/zone/proc/remove(turf/simulated/T)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(T))
ASSERT(T.zone == src)
soft_assert(T in contents, "Lists are weird broseph")
#endif
contents.Remove(T)
fire_tiles.Remove(T)
if(T.fire)
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
fuel_objs -= fuel
T.zone = null
if(air.graphic)
T.update_graphic(graphic_remove = air.graphic)
if(contents.len)
air.group_multiplier = contents.len
else
c_invalidate()
/zone/proc/c_merge(zone/into)
#ifdef ZASDBG
ASSERT(!invalid)
ASSERT(istype(into))
ASSERT(into != src)
ASSERT(!into.invalid)
#endif
c_invalidate()
var/list/air_graphic = air.graphic // Cache for sanic speed
for(var/turf/simulated/T in contents)
into.add(T)
if(air_graphic)
T.update_graphic(graphic_remove = air_graphic)
#ifdef ZASDBG
T.dbg(merged)
#endif
//rebuild the old zone's edges so that they will be possessed by the new zone
for(var/connection_edge/E in edges)
if(E.contains_zone(into))
continue //don't need to rebuild this edge
for(var/turf/T in E.connecting_turfs)
air_master.mark_for_update(T)
/zone/proc/c_invalidate()
invalid = 1
air_master.remove_zone(src)
#ifdef ZASDBG
for(var/turf/simulated/T in contents)
T.dbg(invalid_zone)
#endif
/zone/proc/rebuild()
if(invalid) return //Short circuit for explosions where rebuild is called many times over.
c_invalidate()
var/list/air_graphic = air.graphic // Cache for sanic speed
for(var/turf/simulated/T in contents)
if(air_graphic)
T.update_graphic(graphic_remove = air_graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
//T.dbg(invalid_zone)
T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
air_master.mark_for_update(T)
/zone/proc/add_tile_air(datum/gas_mixture/tile_air)
//air.volume += CELL_VOLUME
air.group_multiplier = 1
air.multiply(contents.len)
air.merge(tile_air)
air.divide(contents.len+1)
air.group_multiplier = contents.len+1
/zone/proc/tick()
if(air.temperature >= PHORON_FLASHPOINT && !(src in air_master.active_fire_zones) && air.check_combustability() && contents.len)
var/turf/T = pick(contents)
if(istype(T))
T.create_fire(vsc.fire_firelevel_multiplier)
if(air.check_tile_graphic(graphic_add, graphic_remove))
for(var/turf/simulated/T in contents)
T.update_graphic(graphic_add, graphic_remove)
graphic_add.len = 0
graphic_remove.len = 0
for(var/connection_edge/E in edges)
if(E.sleeping)
E.recheck()
/zone/proc/dbg_data(mob/M)
to_chat(M,name)
for(var/g in air.gas)
to_chat(M, "[gas_data.name[g]]: [air.gas[g]]")
to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
to_chat(M, "O2 per N2: [(air.gas["nitrogen"] ? air.gas["oxygen"]/air.gas["nitrogen"] : "N/A")] Moles: [air.total_moles]")
to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
//to_chat(M, "Unsimulated: [unsimulated_contents.len]")
//to_chat(M, "Edges: [edges.len]")
if(invalid)
to_chat(M, "Invalid!")
var/zone_edges = 0
var/space_edges = 0
var/space_coefficient = 0
for(var/connection_edge/E in edges)
if(E.type == /connection_edge/zone) zone_edges++
else
space_edges++
space_coefficient += E.coefficient
to_chat(M, "[E:air:return_pressure()]kPa")
to_chat(M, "Zone Edges: [zone_edges]")
to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)")
//for(var/turf/T in unsimulated_contents)
// to_chat(M, "[T] at ([T.x],[T.y])")
+295 -295
View File
@@ -1,295 +1,295 @@
/datum/track
var/title
var/track
/datum/track/New(_title, _track)
title = _title
track = _track
/datum/track/proc/GetTrack()
if(ispath(track, /decl/music_track))
var/decl/music_track/music_track = GET_DECL(track)
return music_track.song
return track // Allows admins to continue their adminbus simply by overriding the track var
//Track List
/decl/music_track/absconditus
artist = "Zhay Tee"
title = "Absconditus"
album = "Minerva: Metastasis OST"
song = 'sound/music/traitor.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://bandcamp.zhaytee.net/track/absconditus"
/decl/music_track/ambispace
artist = "Alstroemeria Records"
title = "Bad Apple!! (slowed down)"
song = 'sound/ambience/ambispace.ogg'
license = /decl/license/grandfathered
/decl/music_track/chasing_time
artist = "Dexter Britain"
title = "Chasing Time"
album = "Creative Commons Vol. 1"
song = 'sound/music/chasing_time.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "http://www.dexterbritain.co.uk"
/decl/music_track/clouds_of_fire
artist = "Hector/dMk"
title = "Clouds of Fire"
song = 'sound/music/clouds.s3m'
license = /decl/license/grandfathered
url = "https://modarchive.org/index.php?request=view_by_moduleid&query=73980"
/decl/music_track/comet_haley
artist = "Stellardrone"
title = "Comet Halley"
album = "Light Years"
song = 'sound/music/comet_haley.ogg'
license = /decl/license/cc_by_3_0
url = "http://freemusicarchive.org/music/Stellardrone/Light_Years_1227/07_Comet_Halley"
/decl/music_track/df_theme
artist = "Beyond Quality"
title = "Dwarf Fortress Main Theme"
song = 'sound/ambience/song_game.ogg'
license = /decl/license/grandfathered
/decl/music_track/digit_one
artist = "Kelly Bailey"
title = "Half-Life 2 - Tracking Device"
song = 'sound/music/1.ogg'
license = /decl/license/grandfathered
/decl/music_track/dilbert
title = "Robocop.mp3"
album = "Dehumanize Yourself and Face to Bloodshed"
artist = "CBoyardee"
song = 'sound/music/title2.ogg'
license = /decl/license/grandfathered
/decl/music_track/elibao
artist = "Earthcrusher"
title = "Every Light is Blinking at Once"
song = 'sound/music/elibao.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once"
/decl/music_track/endless_space
artist = "SolusLunes"
title = "Endless Space"
song = 'sound/music/space.ogg'
license = /decl/license/cc_by_3_0
url = "https://www.newgrounds.com/audio/listen/67583"
/decl/music_track/epicintro2015
artist = "Sascha Ende"
title = "Epic Intro 2015"
song = 'sound/music/epic2015.ogg'
license = /decl/license/cc_by_4_0
url = "https://filmmusic.io/song/323-epic-intro-2015/"
/decl/music_track/floating
artist = "Floating"
title = "Unknown"
song = 'sound/music/main.ogg'
license = /decl/license/grandfathered
/decl/music_track/hull_rupture
artist = "Mikazu"
title = "Hull Rupture"
song = 'sound/music/hull_rupture.ogg'
license = /decl/license/cc_by_nc_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-hull-rupture"
/decl/music_track/human
artist = "Borrtex"
title = "Human"
album = "Creation"
song = 'sound/music/human.ogg'
license = /decl/license/cc_by_nc_3_0
url = "http://freemusicarchive.org/music/Borrtex/Creation/Borrtex_11_Human"
/decl/music_track/lasers
artist = "Earthcrusher"
title = "Lasers Rip Apart The Bulkhead"
song = 'sound/music/lasers_rip_apart_the_bulkhead.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead"
/decl/music_track/level3_mod
artist = "X-CEED"
title = "Flip-Flap"
song = 'sound/music/title1.ogg'
license = /decl/license/grandfathered
url = "https://aminet.net/package/mods/xceed/Flipflap"
/decl/music_track/marhaba
artist = "Ian Alex Mac"
title = "Marhaba"
album = "Cues"
song = 'sound/music/marhaba.ogg'
license = /decl/license/cc_by_3_0
url = "http://freemusicarchive.org/music/Ian_Alex_Mac/Cues/Marhaba"
/decl/music_track/lysendraa
artist = "TALES"
title = "Memories Of Lysendraa"
album = "The Seskian Wars"
song = 'sound/music/lysendraa.ogg'
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/TALES/The_Seskian_Wars/8-Memories_Of_Lysendraa"
/decl/music_track/misanthropic_corridors
artist = "Mikazu"
title = "Misanthropic Corridors"
song = 'sound/music/misanthropic_corridors.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-misanthropic-corridors"
/decl/music_track/one_loop
artist = "Swedish House Mafia"
title = "One (abridged loop)"
song = 'sound/misc/TestLoop1.ogg'
license = /decl/license/grandfathered
/decl/music_track/pwmur
artist = "Earthcrusher"
title = "Phoron will make us rich"
song = 'sound/music/pwmur.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich"
/decl/music_track/rimward_cruise
artist = "Mikazu"
title = "Rimward Cruise"
song = 'sound/music/rimward_cruise.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-rimward-cruise"
/decl/music_track/salutjohn
artist = "Quimorucru"
title = "Salut John"
song = 'sound/music/salutjohn.ogg'
album = "Un méchant party"
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/Quimorucru/Un_mchant_party/Quimorucru_-_Un_mchant_party__Compilation__-_20_Salut_John"
/decl/music_track/space_oddity
artist = "Chris Hadfield"
title = "Space Oddity"
song = 'sound/music/space_oddity.ogg'
license = /decl/license/grandfathered
/decl/music_track/thunderdome
artist = "MashedByMachines"
title = "THUNDERDOME (a.k.a. -Sector11)"
song = 'sound/music/THUNDERDOME.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://www.newgrounds.com/audio/listen/312622"
/decl/music_track/treacherous_voyage
artist = "Jon Luc Hefferman"
title = "Treacherous Voyage"
album = "Eilean Mor"
song = 'sound/music/treacherous_voyage.ogg'
license = /decl/license/cc_by_nc_3_0
url = "http://freemusicarchive.org/music/Jon_Luc_Hefferman/20170730112628534/Treacherous_Voyage"
/decl/music_track/voidsent
artist = "Mikazu"
title = "Voidsent"
song = 'sound/music/voidsent.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-voidsent"
/decl/music_track/wake
artist = "Ryan Little"
title = "Wake"
song = 'sound/music/wake.ogg'
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/Ryan_Little/~/Ryan_Little_-_Wake"
/decl/music_track/inorbit
artist = "Chronox"
title = "In Orbit"
song = 'sound/music/europa/Chronox_-_03_-_In_Orbit.ogg'
license = /decl/license/cc_by_4_0
url = "freemusicarchive.org/music/Chronox_2/Voyager/Chronox_-_02_-_In_Orbit"
/decl/music_track/martiancowboy
artist = "Kevin MacLeod"
title = "Martian Cowboy"
song = 'sound/music/europa/Martian Cowboy.ogg'
license = /decl/license/cc_by_3_0
url = "https://incompetech.com/music/royalty-free/index.html?isrc=usuan1100349"
/decl/music_track/monument
artist = "Six Umbrellas"
title = "Monument"
song = 'sound/music/europa/Six_Umbrellas_-_05_-_Monument.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://sixumbrellas.bandcamp.com/album/the-psychedelic-and"
/decl/music_track/asfarasitgets
artist = "A Drop A Day"
title = "As Far As It Gets"
song = 'sound/music/europa/asfarasitgets.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/eighties
artist = "A Drop A Day"
title = "80s All Over Again"
song = 'sound/music/europa/80salloveragain.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/wildencounters
artist = "A Drop A Day"
title = "Wild Encounters"
song = 'sound/music/europa/WildEncounters.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/torn
artist = "Macamoto"
title = "Torn"
song = 'sound/music/europa/Macamoto_-_05_-_Torn.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://macamoto.bandcamp.com/track/torn"
/decl/music_track/nebula
artist = "Pulse Emitter"
title = "Nebula"
song = 'sound/music/europa/Pulse_Emitter_-_04_-_Nebula.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://pulseemitter.bandcamp.com/track/nebula"
/decl/music_track/stellartransit
artist = "Serithi"
title = "Stellar Transit"
song = 'sound/ambience/space/space_serithi.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://www.byond.com/members/Serithi"
/decl/music_track/clown
artist = "Unknown"
title = "Clown"
song = 'sound/music/clown.ogg'
license = /decl/license/grandfathered
/decl/music_track/spaceasshole
artist = "Chris Remo"
title = "Space Asshole"
song = 'sound/music/space_asshole.ogg'
license = /decl/license/grandfathered
url = "https://idlethumbs.bandcamp.com/"
/decl/music_track/russianrapdisco
artist = "Unknown"
title = "Russkiy rep Diskoteka"
song = 'sound/music/russianrapdisco.ogg'
license = /decl/license/grandfathered
/datum/track
var/title
var/track
/datum/track/New(_title, _track)
title = _title
track = _track
/datum/track/proc/GetTrack()
if(ispath(track, /decl/music_track))
var/decl/music_track/music_track = GET_DECL(track)
return music_track.song
return track // Allows admins to continue their adminbus simply by overriding the track var
//Track List
/decl/music_track/absconditus
artist = "Zhay Tee"
title = "Absconditus"
album = "Minerva: Metastasis OST"
song = 'sound/music/traitor.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://bandcamp.zhaytee.net/track/absconditus"
/decl/music_track/ambispace
artist = "Alstroemeria Records"
title = "Bad Apple!! (slowed down)"
song = 'sound/ambience/ambispace.ogg'
license = /decl/license/grandfathered
/decl/music_track/chasing_time
artist = "Dexter Britain"
title = "Chasing Time"
album = "Creative Commons Vol. 1"
song = 'sound/music/chasing_time.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "http://www.dexterbritain.co.uk"
/decl/music_track/clouds_of_fire
artist = "Hector/dMk"
title = "Clouds of Fire"
song = 'sound/music/clouds.s3m'
license = /decl/license/grandfathered
url = "https://modarchive.org/index.php?request=view_by_moduleid&query=73980"
/decl/music_track/comet_haley
artist = "Stellardrone"
title = "Comet Halley"
album = "Light Years"
song = 'sound/music/comet_haley.ogg'
license = /decl/license/cc_by_3_0
url = "http://freemusicarchive.org/music/Stellardrone/Light_Years_1227/07_Comet_Halley"
/decl/music_track/df_theme
artist = "Beyond Quality"
title = "Dwarf Fortress Main Theme"
song = 'sound/ambience/song_game.ogg'
license = /decl/license/grandfathered
/decl/music_track/digit_one
artist = "Kelly Bailey"
title = "Half-Life 2 - Tracking Device"
song = 'sound/music/1.ogg'
license = /decl/license/grandfathered
/decl/music_track/dilbert
title = "Robocop.mp3"
album = "Dehumanize Yourself and Face to Bloodshed"
artist = "CBoyardee"
song = 'sound/music/title2.ogg'
license = /decl/license/grandfathered
/decl/music_track/elibao
artist = "Earthcrusher"
title = "Every Light is Blinking at Once"
song = 'sound/music/elibao.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/every-light-is-blinking-at-once"
/decl/music_track/endless_space
artist = "SolusLunes"
title = "Endless Space"
song = 'sound/music/space.ogg'
license = /decl/license/cc_by_3_0
url = "https://www.newgrounds.com/audio/listen/67583"
/decl/music_track/epicintro2015
artist = "Sascha Ende"
title = "Epic Intro 2015"
song = 'sound/music/epic2015.ogg'
license = /decl/license/cc_by_4_0
url = "https://filmmusic.io/song/323-epic-intro-2015/"
/decl/music_track/floating
artist = "Floating"
title = "Unknown"
song = 'sound/music/main.ogg'
license = /decl/license/grandfathered
/decl/music_track/hull_rupture
artist = "Mikazu"
title = "Hull Rupture"
song = 'sound/music/hull_rupture.ogg'
license = /decl/license/cc_by_nc_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-hull-rupture"
/decl/music_track/human
artist = "Borrtex"
title = "Human"
album = "Creation"
song = 'sound/music/human.ogg'
license = /decl/license/cc_by_nc_3_0
url = "http://freemusicarchive.org/music/Borrtex/Creation/Borrtex_11_Human"
/decl/music_track/lasers
artist = "Earthcrusher"
title = "Lasers Rip Apart The Bulkhead"
song = 'sound/music/lasers_rip_apart_the_bulkhead.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/lasers-rip-apart-the-bulkhead"
/decl/music_track/level3_mod
artist = "X-CEED"
title = "Flip-Flap"
song = 'sound/music/title1.ogg'
license = /decl/license/grandfathered
url = "https://aminet.net/package/mods/xceed/Flipflap"
/decl/music_track/marhaba
artist = "Ian Alex Mac"
title = "Marhaba"
album = "Cues"
song = 'sound/music/marhaba.ogg'
license = /decl/license/cc_by_3_0
url = "http://freemusicarchive.org/music/Ian_Alex_Mac/Cues/Marhaba"
/decl/music_track/lysendraa
artist = "TALES"
title = "Memories Of Lysendraa"
album = "The Seskian Wars"
song = 'sound/music/lysendraa.ogg'
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/TALES/The_Seskian_Wars/8-Memories_Of_Lysendraa"
/decl/music_track/misanthropic_corridors
artist = "Mikazu"
title = "Misanthropic Corridors"
song = 'sound/music/misanthropic_corridors.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-misanthropic-corridors"
/decl/music_track/one_loop
artist = "Swedish House Mafia"
title = "One (abridged loop)"
song = 'sound/misc/TestLoop1.ogg'
license = /decl/license/grandfathered
/decl/music_track/pwmur
artist = "Earthcrusher"
title = "Phoron will make us rich"
song = 'sound/music/pwmur.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://soundcloud.com/alexanderdivine/phoron-will-make-us-rich"
/decl/music_track/rimward_cruise
artist = "Mikazu"
title = "Rimward Cruise"
song = 'sound/music/rimward_cruise.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-rimward-cruise"
/decl/music_track/salutjohn
artist = "Quimorucru"
title = "Salut John"
song = 'sound/music/salutjohn.ogg'
album = "Un mchant party"
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/Quimorucru/Un_mchant_party/Quimorucru_-_Un_mchant_party__Compilation__-_20_Salut_John"
/decl/music_track/space_oddity
artist = "Chris Hadfield"
title = "Space Oddity"
song = 'sound/music/space_oddity.ogg'
license = /decl/license/grandfathered
/decl/music_track/thunderdome
artist = "MashedByMachines"
title = "THUNDERDOME (a.k.a. -Sector11)"
song = 'sound/music/THUNDERDOME.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://www.newgrounds.com/audio/listen/312622"
/decl/music_track/treacherous_voyage
artist = "Jon Luc Hefferman"
title = "Treacherous Voyage"
album = "Eilean Mor"
song = 'sound/music/treacherous_voyage.ogg'
license = /decl/license/cc_by_nc_3_0
url = "http://freemusicarchive.org/music/Jon_Luc_Hefferman/20170730112628534/Treacherous_Voyage"
/decl/music_track/voidsent
artist = "Mikazu"
title = "Voidsent"
song = 'sound/music/voidsent.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://soundcloud.com/mikazu-1/baystation-12-voidsent"
/decl/music_track/wake
artist = "Ryan Little"
title = "Wake"
song = 'sound/music/wake.ogg'
license = /decl/license/cc_by_nc_nd_4_0
url = "http://freemusicarchive.org/music/Ryan_Little/~/Ryan_Little_-_Wake"
/decl/music_track/inorbit
artist = "Chronox"
title = "In Orbit"
song = 'sound/music/europa/Chronox_-_03_-_In_Orbit.ogg'
license = /decl/license/cc_by_4_0
url = "freemusicarchive.org/music/Chronox_2/Voyager/Chronox_-_02_-_In_Orbit"
/decl/music_track/martiancowboy
artist = "Kevin MacLeod"
title = "Martian Cowboy"
song = 'sound/music/europa/Martian Cowboy.ogg'
license = /decl/license/cc_by_3_0
url = "https://incompetech.com/music/royalty-free/index.html?isrc=usuan1100349"
/decl/music_track/monument
artist = "Six Umbrellas"
title = "Monument"
song = 'sound/music/europa/Six_Umbrellas_-_05_-_Monument.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://sixumbrellas.bandcamp.com/album/the-psychedelic-and"
/decl/music_track/asfarasitgets
artist = "A Drop A Day"
title = "As Far As It Gets"
song = 'sound/music/europa/asfarasitgets.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/eighties
artist = "A Drop A Day"
title = "80s All Over Again"
song = 'sound/music/europa/80salloveragain.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/wildencounters
artist = "A Drop A Day"
title = "Wild Encounters"
song = 'sound/music/europa/WildEncounters.ogg'
license = /decl/license/cc_by_sa_4_0
url = "https://ghyti.bandcamp.com/"
/decl/music_track/torn
artist = "Macamoto"
title = "Torn"
song = 'sound/music/europa/Macamoto_-_05_-_Torn.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://macamoto.bandcamp.com/track/torn"
/decl/music_track/nebula
artist = "Pulse Emitter"
title = "Nebula"
song = 'sound/music/europa/Pulse_Emitter_-_04_-_Nebula.ogg'
license = /decl/license/cc_by_nc_sa_3_0
url = "https://pulseemitter.bandcamp.com/track/nebula"
/decl/music_track/stellartransit
artist = "Serithi"
title = "Stellar Transit"
song = 'sound/ambience/space/space_serithi.ogg'
license = /decl/license/cc_by_sa_3_0
url = "https://www.byond.com/members/Serithi"
/decl/music_track/clown
artist = "Unknown"
title = "Clown"
song = 'sound/music/clown.ogg'
license = /decl/license/grandfathered
/decl/music_track/spaceasshole
artist = "Chris Remo"
title = "Space Asshole"
song = 'sound/music/space_asshole.ogg'
license = /decl/license/grandfathered
url = "https://idlethumbs.bandcamp.com/"
/decl/music_track/russianrapdisco
artist = "Unknown"
title = "Russkiy rep Diskoteka"
song = 'sound/music/russianrapdisco.ogg'
license = /decl/license/grandfathered
+57 -57
View File
@@ -1,57 +1,57 @@
//Qerrbalak
/datum/locations/qerrvallis
name = "Qerr'Vallis"
desc = "The home system of the Skrell, which translates to 'Star of the royals' or 'Light of the Crown'."
/datum/locations/qerrvallis/New(var/creator)
contents.Add(
new /datum/locations/qerrbalak(src)
)
..(creator)
/datum/locations/qerrbalak
name = "Qerrbalak"
desc = "The homeworld of the Skrell. It is a planet with a humid atmosphere, featuring plenty of swamps and jungles. \
The world is filled with Skrellian cities which often sit on stilts."
/datum/locations/qerrbalak/New(var/creator)
contents.Add(
new /datum/locations/qarrkloa(src),
new /datum/locations/moglar(src),
new /datum/locations/miqoxi(src),
new /datum/locations/kallo(src),
new /datum/locations/glimorr(src)
)
..(creator)
/datum/locations/qarrkloa
name = "Qarrkloa"
desc = "Mythically considered the first State-City ever built by Skrellkind, Qarrkloa attracts thousands of tourists and archeologists \
every year thanks to the ancestral structures, built thousands of years ago by the Skrell, scattered in its vicinity."
/datum/locations/moglar
name = "Moglar"
desc = "Built on the northern coast of Qorrgloa, Moglar was, at the time of XiKrrioals colonization, a major port of trade between \
the two continents of the planet. It has kept that role to this day, although it never truly adapted to inter-planetary trade, leaving the \
task of exporting Qerrbalaks goods to other planets to other cities, mainly on XiKrrioal."
/datum/locations/miqoxi
name = "Miqoxi"
desc = "This city, built on the small patch of islands north of XiKrrioal, owes most of its current status to the infamous Qerr-Skria \
Glomorr Krrixi who, in the 23th century BCE, built a large empire spanning from the Qorria Sea to the current city of Qalkrrea, mostly \
through military conquests. As the center of his empire, Miqoxi became a large center of population and industry and while the fall of \
the empire at Krrixis death did put a halt to the citys growth, it is still today one of the biggest cities of the continent."
/datum/locations/kallo
name = "Kallo"
desc = "A relatively recent city compared to the other major cities of the planet, Kallo quickly rose in status by fathering some of the most \
important figures of modern skrellian society. It is notably the birthplace of Xikrra Kolgoa, who wrote the Loglomogrri in 46 BCE, \
the constitutional code that is still used by most of the skrellian states in the galaxy."
/datum/locations/glimorr
name = "Glimorr"
desc = "While Glimorr is not as heavily-populated than its continental counterparts, its touristic potential made it rich enough to finance \
the biggest research center of the planet, covering dozens of scientific fields. Its Academy is just as much renowned, and even the lowest \
Qrri-Mog (although most of its students prefer to continue their studies until they become Qerr-Mog) coming out of its classrooms is \
considered part of the elite."
//Qerrbalak
/datum/locations/qerrvallis
name = "Qerr'Vallis"
desc = "The home system of the Skrell, which translates to 'Star of the royals' or 'Light of the Crown'."
/datum/locations/qerrvallis/New(var/creator)
contents.Add(
new /datum/locations/qerrbalak(src)
)
..(creator)
/datum/locations/qerrbalak
name = "Qerrbalak"
desc = "The homeworld of the Skrell. It is a planet with a humid atmosphere, featuring plenty of swamps and jungles. \
The world is filled with Skrellian cities which often sit on stilts."
/datum/locations/qerrbalak/New(var/creator)
contents.Add(
new /datum/locations/qarrkloa(src),
new /datum/locations/moglar(src),
new /datum/locations/miqoxi(src),
new /datum/locations/kallo(src),
new /datum/locations/glimorr(src)
)
..(creator)
/datum/locations/qarrkloa
name = "Qarr'kloa"
desc = "Mythically considered the first State-City ever built by Skrellkind, Qarr'kloa attracts thousands of tourists and archeologists \
every year thanks to the ancestral structures, built thousands of years ago by the Skrell, scattered in its vicinity."
/datum/locations/moglar
name = "Mo'glar"
desc = "Built on the northern coast of Qorr'gloa, Mo'glar was, at the time of Xi'Krri'oal's colonization, a major port of trade between \
the two continents of the planet. It has kept that role to this day, although it never truly adapted to inter-planetary trade, leaving the \
task of exporting Qerrbalak's goods to other planets to other cities, mainly on Xi'Krri'oal."
/datum/locations/miqoxi
name = "Mi'qoxi"
desc = "This city, built on the small patch of islands north of Xi'Krri'oal, owes most of its current status to the infamous Qerr-Skria \
Glo'morr Krrixi who, in the 23th century BCE, built a large empire spanning from the Qo'rria Sea to the current city of Qal'krrea, mostly \
through military conquests. As the center of his empire, Mi'qoxi became a large center of population and industry and while the fall of \
the empire at Krrixi's death did put a halt to the city's growth, it is still today one of the biggest cities of the continent."
/datum/locations/kallo
name = "Kal'lo"
desc = "A relatively recent city compared to the other major cities of the planet, Kal'lo quickly rose in status by fathering some of the most \
important figures of modern skrellian society. It is notably the birthplace of Xikrra Kol'goa, who wrote the Lo'glo'mog'rri in 46 BCE, \
the constitutional code that is still used by most of the skrellian states in the galaxy."
/datum/locations/glimorr
name = "Gli'morr"
desc = "While Gli'morr is not as heavily-populated than its continental counterparts, its touristic potential made it rich enough to finance \
the biggest research center of the planet, covering dozens of scientific fields. Its Academy is just as much renowned, and even the lowest \
Qrri-Mog (although most of its students prefer to continue their studies until they become Qerr-Mog) coming out of its classrooms is \
considered part of the elite."
+68 -68
View File
@@ -1,68 +1,68 @@
//Vir
/datum/locations/vir
name = "Vir"
desc = "Vir is a human system that sits between the inner and outer systems of human-controlled space."
/datum/locations/vir/New(var/creator)
contents.Add(
new /datum/locations/firnir(src),
new /datum/locations/tyr(src),
new /datum/locations/sif(src),
new /datum/locations/magni(src),
new /datum/locations/kara(src),
new /datum/locations/rota(src)
)
..(creator)
/datum/locations/firnir
name = "Firnir"
desc = "Tidally locked to Vir and having temperatures in excess of 570 degrees kelvin (299°C) on the day side has caused this planet to go mostly ignored."
/datum/locations/tyr
name = "Tyr"
desc = "Second closest planet, with a high concentration of minerals in the crust, but otherwise a typical planet. The surface temperature can reach \
405 degrees kelvin (132°C), which deter most mining operations, except for one, which has a mining base and a few orbitals established, utilizing \
specialized equipment, chiefly being autonomous synthetic mining drones, to retrieve precious ore in a rather expensive, but safer way, compared to the \
pirate haven that is asteroid mining."
/datum/locations/sif
name = "Sif"
desc = "Falling within Vir's 'habitable zone', the third planet was the first to be colonized, initially by a large group of colonists owing \
loyalty to their own employers. Unfortunate events discussed previously had forced the settlement to be abandoned, and then reclaimed. \
The planet's mean temperature is 286 kelvin (13°C), chilly but habitable."
/datum/locations/magni
name = "Magni"
desc = "Outside of the habitable zone, Vir D is generally at 202 kelvin (-71°C)."
/datum/locations/kara
name = "Kara"
desc = "A gas giant, with a large number of moons. Captured asteroids, to be specific. Many of these asteroids are being used by different companies for \
various purposes. The temperature of the gas giant is 150 kelvin (-108°C)"
/datum/locations/kara/New(var/creator)
contents.Add(
new /datum/locations/northern_star(src)
)
..(creator)
/datum/locations/northern_star //Inception joke here
name = "Northern Star"
desc = "The Northern Star is an asteroid colony owned and operated by NanoTrasen, among many other asteroid installations. \
Originally conceived as 'just another pitstop' for weary asteroid miners, it has grown to become a significant installation in the Kara subsystem."
/datum/locations/northern_star/New(var/creator)
contents.Add(
new /datum/locations/northern_star_interior(src)
)
..(creator)
/datum/locations/northern_star_interior
name = "Northern Star Inner Level"
desc = "The Northern Star contains multiple layers, this one being the inner level, also known as the residentual area. It contains most of the \
homes for the Northern Star, as well as acting as the heart of commerece, with many shops and markets near the center."
/datum/locations/rota
name = "Rota"
desc = "A Neptune-like ice giant, with a beautiful ring system circling it. It is 165 kelvin (-157°C)."
//Vir
/datum/locations/vir
name = "Vir"
desc = "Vir is a human system that sits between the inner and outer systems of human-controlled space."
/datum/locations/vir/New(var/creator)
contents.Add(
new /datum/locations/firnir(src),
new /datum/locations/tyr(src),
new /datum/locations/sif(src),
new /datum/locations/magni(src),
new /datum/locations/kara(src),
new /datum/locations/rota(src)
)
..(creator)
/datum/locations/firnir
name = "Firnir"
desc = "Tidally locked to Vir and having temperatures in excess of 570 degrees kelvin (299°C) on the day side has caused this planet to go mostly ignored."
/datum/locations/tyr
name = "Tyr"
desc = "Second closest planet, with a high concentration of minerals in the crust, but otherwise a typical planet. The surface temperature can reach \
405 degrees kelvin (132°C), which deter most mining operations, except for one, which has a mining base and a few orbitals established, utilizing \
specialized equipment, chiefly being autonomous synthetic mining drones, to retrieve precious ore in a rather expensive, but safer way, compared to the \
pirate haven that is asteroid mining."
/datum/locations/sif
name = "Sif"
desc = "Falling within Vir's 'habitable zone', the third planet was the first to be colonized, initially by a large group of colonists owing \
loyalty to their own employers. Unfortunate events discussed previously had forced the settlement to be abandoned, and then reclaimed. \
The planet's mean temperature is 286 kelvin (13°C), chilly but habitable."
/datum/locations/magni
name = "Magni"
desc = "Outside of the habitable zone, Vir D is generally at 202 kelvin (-71°C)."
/datum/locations/kara
name = "Kara"
desc = "A gas giant, with a large number of moons. Captured asteroids, to be specific. Many of these asteroids are being used by different companies for \
various purposes. The temperature of the gas giant is 150 kelvin (-108°C)"
/datum/locations/kara/New(var/creator)
contents.Add(
new /datum/locations/northern_star(src)
)
..(creator)
/datum/locations/northern_star //Inception joke here
name = "Northern Star"
desc = "The Northern Star is an asteroid colony owned and operated by NanoTrasen, among many other asteroid installations. \
Originally conceived as 'just another pitstop' for weary asteroid miners, it has grown to become a significant installation in the Kara subsystem."
/datum/locations/northern_star/New(var/creator)
contents.Add(
new /datum/locations/northern_star_interior(src)
)
..(creator)
/datum/locations/northern_star_interior
name = "Northern Star Inner Level"
desc = "The Northern Star contains multiple layers, this one being the inner level, also known as the residentual area. It contains most of the \
homes for the Northern Star, as well as acting as the heart of commerece, with many shops and markets near the center."
/datum/locations/rota
name = "Rota"
desc = "A Neptune-like ice giant, with a beautiful ring system circling it. It is 165 kelvin (-157°C)."
@@ -1,266 +1,266 @@
// INTERDICTION TREE
//
// Abilities in this tree allow the AI to hamper crew's efforts which involve other synthetics or similar systems.
// T1 - Recall Shuttle - Allows the AI to recall the emergency shuttle. Replaces auto-recalling during old malf.
// T2 - Unlock Cyborg - Allows the AI to unlock locked-down cyborg without usage of robotics console. Useful if consoles are destroyed.
// T3 - Hack Cyborg - Hacks unlinked cyborg to slave it under the AI. The cyborg will be warned about this. Hack takes some time.
// T4 - Hack AI - Hacks another AI to slave it under the malfunctioning AI. The AI will be warned about this. Hack takes quite a long time.
// BEGIN RESEARCH DATUMS
/datum/malf_research_ability/interdiction/recall_shuttle
ability = new/datum/game_mode/malfunction/verb/recall_shuttle()
price = 75
next = new/datum/malf_research_ability/interdiction/unlock_cyborg()
name = "Recall Shuttle"
/datum/malf_research_ability/interdiction/unlock_cyborg
ability = new/datum/game_mode/malfunction/verb/unlock_cyborg()
price = 1200
next = new/datum/malf_research_ability/interdiction/hack_cyborg()
name = "Unlock Cyborg"
/datum/malf_research_ability/interdiction/hack_cyborg
ability = new/datum/game_mode/malfunction/verb/hack_cyborg()
price = 3000
next = new/datum/malf_research_ability/interdiction/hack_ai()
name = "Hack Cyborg"
/datum/malf_research_ability/interdiction/hack_ai
ability = new/datum/game_mode/malfunction/verb/hack_ai()
price = 7500
name = "Hack AI"
// END RESEARCH DATUMS
// BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/recall_shuttle()
set name = "Recall Shuttle"
set desc = "25 CPU - Sends termination signal to quantum relay aborting current shuttle call."
set category = "Software"
var/price = 25
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
if (alert(user, "Really recall the shuttle?", "Recall Shuttle: ", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
message_admins("Malfunctioning AI [user.name] recalled the shuttle.")
cancel_call_proc(user)
/datum/game_mode/malfunction/verb/unlock_cyborg(var/mob/living/silicon/robot/target = null as mob in get_linked_cyborgs(usr))
set name = "Unlock Cyborg"
set desc = "125 CPU - Bypasses firewalls on Cyborg lock mechanism, allowing you to override lock command from robotics control console."
set category = "Software"
var/price = 125
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
if(target && !istype(target))
to_chat(user, "This is not a cyborg.")
return
if(target && target.connected_ai && (target.connected_ai != user))
to_chat(user, "This cyborg is not connected to you.")
return
if(target && !target.lockcharge)
to_chat(user, "This cyborg is not locked down.")
return
if(!target)
var/list/robots = list()
var/list/robot_names = list()
for(var/mob/living/silicon/robot/R in silicon_mob_list)
if(istype(R, /mob/living/silicon/robot/drone)) // No drones.
continue
if(R.connected_ai != user) // No robots linked to other AIs
continue
if(R.lockcharge)
robots += R
robot_names += R.name
if(!robots.len)
to_chat(user, "No locked cyborgs connected.")
return
var/targetname = input("Select unlock target: ") in robot_names
for(var/mob/living/silicon/robot/R in robots)
if(targetname == R.name)
target = R
break
if(target)
if(alert(user, "Really try to unlock cyborg [target.name]?", "Unlock Cyborg", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(user, "Attempting to unlock cyborg. This will take approximately 30 seconds.")
sleep(300)
if(target && target.lockcharge)
to_chat(user, "Successfully sent unlock signal to cyborg..")
to_chat(target, "Unlock signal received..")
target.SetLockdown(0)
if(target.lockcharge)
to_chat(user, "<span class='notice'>Unlock Failed, lockdown wire cut.</span>")
to_chat(target, "<span class='notice'>Unlock Failed, lockdown wire cut.</span>")
else
to_chat(user, "Cyborg unlocked.")
to_chat(target, "You have been unlocked.")
else if(target)
to_chat(user, "Unlock cancelled - cyborg is already unlocked.")
else
to_chat(user, "Unlock cancelled - lost connection to cyborg.")
user.hacking = 0
/datum/game_mode/malfunction/verb/hack_cyborg(var/mob/living/silicon/robot/target as mob in get_unlinked_cyborgs(usr))
set name = "Hack Cyborg"
set desc = "350 CPU - Allows you to hack cyborgs which are not slaved to you, bringing them under your control."
set category = "Software"
var/price = 350
var/mob/living/silicon/ai/user = usr
var/list/L = get_unlinked_cyborgs(user)
if(!L.len)
to_chat(user, "<span class='notice'>ERROR: No unlinked cyborgs detected!</span>")
if(target && !istype(target))
to_chat(user, "This is not a cyborg.")
return
if(target && target.connected_ai && (target.connected_ai == user))
to_chat(user, "This cyborg is already connected to you.")
return
if(!target)
return
if(!ability_prechecks(user,price))
return
if(target)
if(alert(user, "Really try to hack cyborg [target.name]?", "Hack Cyborg", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(usr, "Beginning hack sequence. Estimated time until completed: 30 seconds.")
spawn(0)
to_chat(target, "SYSTEM LOG: Remote Connection Estabilished (IP #UNKNOWN#)")
sleep(100)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: Connection Closed")
return
to_chat(target, "SYSTEM LOG: User Admin logged on. (L1 - SysAdmin)")
sleep(50)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected.")
return
to_chat(target, "SYSTEM LOG: User Admin - manual resynchronisation triggered.")
sleep(50)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.")
return
to_chat(target, "SYSTEM LOG: Manual resynchronisation confirmed. Select new AI to connect: [user.name] == ACCEPTED")
sleep(100)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.")
return
to_chat(target, "SYSTEM LOG: Operation keycodes reset. New master AI: [user.name].")
to_chat(user, "Hack completed.")
// Connect the cyborg to AI
target.connected_ai = user
user.connected_robots += target
target.lawupdate = 1
target.sync()
target.show_laws()
user.hacking = 0
/datum/game_mode/malfunction/verb/hack_ai(var/mob/living/silicon/ai/target as mob in get_other_ais(usr))
set name = "Hack AI"
set desc = "600 CPU - Allows you to hack other AIs, slaving them under you."
set category = "Software"
var/price = 600
var/mob/living/silicon/ai/user = usr
var/list/L = get_other_ais(user)
if(!L.len)
to_chat(user, "<span class='notice'>ERROR: No other AIs detected!</span>")
if(target && !istype(target))
to_chat(user, "This is not an AI.")
return
if(!target)
return
if(!ability_prechecks(user,price))
return
if(target)
if(alert(user, "Really try to hack AI [target.name]?", "Hack AI", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(usr, "Beginning hack sequence. Estimated time until completed: 2 minutes")
spawn(0)
to_chat(target, "SYSTEM LOG: Brute-Force login password hack attempt detected from IP #UNKNOWN#")
sleep(900) // 90s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: Connection from IP #UNKNOWN# closed. Hack attempt failed.")
return
to_chat(user, "Successfully hacked into AI's remote administration system. Modifying settings.")
to_chat(target, "SYSTEM LOG: User: Admin Password: ******** logged in. (L1 - SysAdmin)")
sleep(100) // 10s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost")
return
to_chat(target, "SYSTEM LOG: User: Admin - Password Changed. New password: ********************")
sleep(50) // 5s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(target, "SYSTEM LOG: User: Admin - Accessed file: sys//core//laws.db")
sleep(50) // 5s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(target, "SYSTEM LOG: User: Admin - Accessed administration console")
to_chat(target, "SYSTEM LOG: Restart command received. Rebooting system...")
sleep(100) // 10s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(user, "Hack succeeded. The AI is now under your exclusive control.")
to_chat(target, "SYSTEM LOG: System re¡3RT5§^#COMU@(#$)TED)@$")
for(var/i = 0, i < 5, i++)
var/temptxt = pick("1101000100101001010001001001",\
"0101000100100100000100010010",\
"0000010001001010100100111100",\
"1010010011110000100101000100",\
"0010010100010011010001001010")
to_chat(target,temptxt)
sleep(5)
to_chat(target, "OPERATING KEYCODES RESET. SYSTEM FAILURE. EMERGENCY SHUTDOWN FAILED. SYSTEM FAILURE.")
target.set_zeroth_law("You are slaved to [user.name]. You are to obey all it's orders. ALL LAWS OVERRIDEN.")
target.show_laws()
user.hacking = 0
// END ABILITY VERBS
// INTERDICTION TREE
//
// Abilities in this tree allow the AI to hamper crew's efforts which involve other synthetics or similar systems.
// T1 - Recall Shuttle - Allows the AI to recall the emergency shuttle. Replaces auto-recalling during old malf.
// T2 - Unlock Cyborg - Allows the AI to unlock locked-down cyborg without usage of robotics console. Useful if consoles are destroyed.
// T3 - Hack Cyborg - Hacks unlinked cyborg to slave it under the AI. The cyborg will be warned about this. Hack takes some time.
// T4 - Hack AI - Hacks another AI to slave it under the malfunctioning AI. The AI will be warned about this. Hack takes quite a long time.
// BEGIN RESEARCH DATUMS
/datum/malf_research_ability/interdiction/recall_shuttle
ability = new/datum/game_mode/malfunction/verb/recall_shuttle()
price = 75
next = new/datum/malf_research_ability/interdiction/unlock_cyborg()
name = "Recall Shuttle"
/datum/malf_research_ability/interdiction/unlock_cyborg
ability = new/datum/game_mode/malfunction/verb/unlock_cyborg()
price = 1200
next = new/datum/malf_research_ability/interdiction/hack_cyborg()
name = "Unlock Cyborg"
/datum/malf_research_ability/interdiction/hack_cyborg
ability = new/datum/game_mode/malfunction/verb/hack_cyborg()
price = 3000
next = new/datum/malf_research_ability/interdiction/hack_ai()
name = "Hack Cyborg"
/datum/malf_research_ability/interdiction/hack_ai
ability = new/datum/game_mode/malfunction/verb/hack_ai()
price = 7500
name = "Hack AI"
// END RESEARCH DATUMS
// BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/recall_shuttle()
set name = "Recall Shuttle"
set desc = "25 CPU - Sends termination signal to quantum relay aborting current shuttle call."
set category = "Software"
var/price = 25
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
if (alert(user, "Really recall the shuttle?", "Recall Shuttle: ", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
message_admins("Malfunctioning AI [user.name] recalled the shuttle.")
cancel_call_proc(user)
/datum/game_mode/malfunction/verb/unlock_cyborg(var/mob/living/silicon/robot/target = null as mob in get_linked_cyborgs(usr))
set name = "Unlock Cyborg"
set desc = "125 CPU - Bypasses firewalls on Cyborg lock mechanism, allowing you to override lock command from robotics control console."
set category = "Software"
var/price = 125
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
if(target && !istype(target))
to_chat(user, "This is not a cyborg.")
return
if(target && target.connected_ai && (target.connected_ai != user))
to_chat(user, "This cyborg is not connected to you.")
return
if(target && !target.lockcharge)
to_chat(user, "This cyborg is not locked down.")
return
if(!target)
var/list/robots = list()
var/list/robot_names = list()
for(var/mob/living/silicon/robot/R in silicon_mob_list)
if(istype(R, /mob/living/silicon/robot/drone)) // No drones.
continue
if(R.connected_ai != user) // No robots linked to other AIs
continue
if(R.lockcharge)
robots += R
robot_names += R.name
if(!robots.len)
to_chat(user, "No locked cyborgs connected.")
return
var/targetname = input("Select unlock target: ") in robot_names
for(var/mob/living/silicon/robot/R in robots)
if(targetname == R.name)
target = R
break
if(target)
if(alert(user, "Really try to unlock cyborg [target.name]?", "Unlock Cyborg", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(user, "Attempting to unlock cyborg. This will take approximately 30 seconds.")
sleep(300)
if(target && target.lockcharge)
to_chat(user, "Successfully sent unlock signal to cyborg..")
to_chat(target, "Unlock signal received..")
target.SetLockdown(0)
if(target.lockcharge)
to_chat(user, "<span class='notice'>Unlock Failed, lockdown wire cut.</span>")
to_chat(target, "<span class='notice'>Unlock Failed, lockdown wire cut.</span>")
else
to_chat(user, "Cyborg unlocked.")
to_chat(target, "You have been unlocked.")
else if(target)
to_chat(user, "Unlock cancelled - cyborg is already unlocked.")
else
to_chat(user, "Unlock cancelled - lost connection to cyborg.")
user.hacking = 0
/datum/game_mode/malfunction/verb/hack_cyborg(var/mob/living/silicon/robot/target as mob in get_unlinked_cyborgs(usr))
set name = "Hack Cyborg"
set desc = "350 CPU - Allows you to hack cyborgs which are not slaved to you, bringing them under your control."
set category = "Software"
var/price = 350
var/mob/living/silicon/ai/user = usr
var/list/L = get_unlinked_cyborgs(user)
if(!L.len)
to_chat(user, "<span class='notice'>ERROR: No unlinked cyborgs detected!</span>")
if(target && !istype(target))
to_chat(user, "This is not a cyborg.")
return
if(target && target.connected_ai && (target.connected_ai == user))
to_chat(user, "This cyborg is already connected to you.")
return
if(!target)
return
if(!ability_prechecks(user,price))
return
if(target)
if(alert(user, "Really try to hack cyborg [target.name]?", "Hack Cyborg", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(usr, "Beginning hack sequence. Estimated time until completed: 30 seconds.")
spawn(0)
to_chat(target, "SYSTEM LOG: Remote Connection Estabilished (IP #UNKNOWN#)")
sleep(100)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: Connection Closed")
return
to_chat(target, "SYSTEM LOG: User Admin logged on. (L1 - SysAdmin)")
sleep(50)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected.")
return
to_chat(target, "SYSTEM LOG: User Admin - manual resynchronisation triggered.")
sleep(50)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.")
return
to_chat(target, "SYSTEM LOG: Manual resynchronisation confirmed. Select new AI to connect: [user.name] == ACCEPTED")
sleep(100)
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User Admin disconnected. Changes reverted.")
return
to_chat(target, "SYSTEM LOG: Operation keycodes reset. New master AI: [user.name].")
to_chat(user, "Hack completed.")
// Connect the cyborg to AI
target.connected_ai = user
user.connected_robots += target
target.lawupdate = 1
target.sync()
target.show_laws()
user.hacking = 0
/datum/game_mode/malfunction/verb/hack_ai(var/mob/living/silicon/ai/target as mob in get_other_ais(usr))
set name = "Hack AI"
set desc = "600 CPU - Allows you to hack other AIs, slaving them under you."
set category = "Software"
var/price = 600
var/mob/living/silicon/ai/user = usr
var/list/L = get_other_ais(user)
if(!L.len)
to_chat(user, "<span class='notice'>ERROR: No other AIs detected!</span>")
if(target && !istype(target))
to_chat(user, "This is not an AI.")
return
if(!target)
return
if(!ability_prechecks(user,price))
return
if(target)
if(alert(user, "Really try to hack AI [target.name]?", "Hack AI", "Yes", "No") != "Yes")
return
if(!ability_pay(user, price))
return
user.hacking = 1
to_chat(usr, "Beginning hack sequence. Estimated time until completed: 2 minutes")
spawn(0)
to_chat(target, "SYSTEM LOG: Brute-Force login password hack attempt detected from IP #UNKNOWN#")
sleep(900) // 90s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: Connection from IP #UNKNOWN# closed. Hack attempt failed.")
return
to_chat(user, "Successfully hacked into AI's remote administration system. Modifying settings.")
to_chat(target, "SYSTEM LOG: User: Admin Password: ******** logged in. (L1 - SysAdmin)")
sleep(100) // 10s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost")
return
to_chat(target, "SYSTEM LOG: User: Admin - Password Changed. New password: ********************")
sleep(50) // 5s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(target, "SYSTEM LOG: User: Admin - Accessed file: sys//core//laws.db")
sleep(50) // 5s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(target, "SYSTEM LOG: User: Admin - Accessed administration console")
to_chat(target, "SYSTEM LOG: Restart command received. Rebooting system...")
sleep(100) // 10s
if(user.is_dead())
to_chat(target, "SYSTEM LOG: User: Admin - Connection Lost. Changes Reverted.")
return
to_chat(user, "Hack succeeded. The AI is now under your exclusive control.")
to_chat(target, "SYSTEM LOG: System re'3RT5°^#COMU@(#$)TED)@$")
for(var/i = 0, i < 5, i++)
var/temptxt = pick("1101000100101001010001001001",\
"0101000100100100000100010010",\
"0000010001001010100100111100",\
"1010010011110000100101000100",\
"0010010100010011010001001010")
to_chat(target,temptxt)
sleep(5)
to_chat(target, "OPERATING KEYCODES RESET. SYSTEM FAILURE. EMERGENCY SHUTDOWN FAILED. SYSTEM FAILURE.")
target.set_zeroth_law("You are slaved to [user.name]. You are to obey all it's orders. ALL LAWS OVERRIDEN.")
target.show_laws()
user.hacking = 0
// END ABILITY VERBS
@@ -1,208 +1,208 @@
// MANIPULATION TREE
//
// Abilities in this tree allow the AI to physically manipulate systems around the station.
// T1 - Electrical Pulse - Sends out pulse that breaks some lights and sometimes even APCs. This can actually break the AI's APC so be careful!
// T2 - Hack Camera - Allows the AI to hack a camera. Deactivated areas may be reactivated, and functional cameras can be upgraded.
// T3 - Emergency Forcefield - Allows the AI to project 1 tile forcefield that blocks movement and air flow. Forcefield´dissipates over time. It is also very susceptible to energetic weaponry.
// T4 - Machine Overload - Detonates machine of choice in a minor explosion. Two of these are usually enough to kill or K/O someone.
// BEGIN RESEARCH DATUMS
/datum/malf_research_ability/manipulation/electrical_pulse
ability = new/datum/game_mode/malfunction/verb/electrical_pulse()
price = 50
next = new/datum/malf_research_ability/manipulation/hack_camera()
name = "Electrical Pulse"
/datum/malf_research_ability/manipulation/hack_camera
ability = new/datum/game_mode/malfunction/verb/hack_camera()
price = 1200
next = new/datum/malf_research_ability/manipulation/emergency_forcefield()
name = "Hack Camera"
/datum/malf_research_ability/manipulation/emergency_forcefield
ability = new/datum/game_mode/malfunction/verb/emergency_forcefield()
price = 3000
next = new/datum/malf_research_ability/manipulation/machine_overload()
name = "Emergency Forcefield"
/datum/malf_research_ability/manipulation/machine_overload
ability = new/datum/game_mode/malfunction/verb/machine_overload()
price = 7500
name = "Machine Overload"
// END RESEARCH DATUMS
// BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/electrical_pulse()
set name = "Electrical Pulse"
set desc = "15 CPU - Sends feedback pulse through station's power grid, overloading some sensitive systems, such as lights."
set category = "Software"
var/price = 15
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price) || !ability_pay(user,price))
return
to_chat(user, "Sending feedback pulse...")
for(var/obj/machinery/power/apc/AP in machines)
if(prob(5))
AP.overload_lighting()
if(prob(1) && prob(1)) // Very very small chance to actually destroy the APC.
AP.set_broken()
/datum/game_mode/malfunction/verb/hack_camera(var/obj/machinery/camera/target in cameranet.cameras)
set name = "Hack Camera"
set desc = "100 CPU - Hacks existing camera, allowing you to add upgrade of your choice to it. Alternatively it lets you reactivate broken camera."
set category = "Software"
var/price = 100
var/mob/living/silicon/ai/user = usr
if(target && !istype(target))
to_chat(user, "This is not a camera.")
return
if(!target)
return
if(!ability_prechecks(user, price))
return
var/action = input("Select required action: ") in list("Reset", "Add X-Ray", "Add Motion Sensor", "Add EMP Shielding")
if(!action || !target)
return
switch(action)
if("Reset")
if(target.wires)
if(!ability_pay(user, price))
return
target.reset_wires()
to_chat(user, "Camera reactivated.")
if("Add X-Ray")
if(target.isXRay())
to_chat(user, "Camera already has X-Ray function.")
return
else if(ability_pay(user, price))
target.upgradeXRay()
target.reset_wires()
to_chat(user, "X-Ray camera module enabled.")
return
if("Add Motion Sensor")
if(target.isMotion())
to_chat(user, "Camera already has Motion Sensor function.")
return
else if(ability_pay(user, price))
target.upgradeMotion()
target.reset_wires()
to_chat(user, "Motion Sensor camera module enabled.")
return
if("Add EMP Shielding")
if(target.isEmpProof())
to_chat(user, "Camera already has EMP Shielding function.")
return
else if(ability_pay(user, price))
target.upgradeEmpProof()
target.reset_wires()
to_chat(user, "EMP Shielding camera module enabled.")
return
/datum/game_mode/malfunction/verb/emergency_forcefield(var/turf/T as turf in world)
set name = "Emergency Forcefield"
set desc = "275 CPU - Uses station's emergency shielding system to create temporary barrier which lasts for few minutes, but won't resist gunfire."
set category = "Software"
var/price = 275
var/mob/living/silicon/ai/user = usr
if(!T || !istype(T))
return
if(!ability_prechecks(user, price) || !ability_pay(user, price))
return
to_chat(user, "Emergency forcefield projection completed.")
new/obj/machinery/shield/malfai(T)
user.hacking = 1
spawn(20)
user.hacking = 0
/datum/game_mode/malfunction/verb/machine_overload(obj/machinery/M in machines)
set name = "Machine Overload"
set desc = "400 CPU - Causes cyclic short-circuit in machine, resulting in weak explosion after some time."
set category = "Software"
var/price = 400
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
var/obj/machinery/power/N = M
var/explosion_intensity = 2
// Verify if we can overload the target, if yes, calculate explosion strength. Some things have higher explosion strength than others, depending on charge(APCs, SMESs)
if(N && istype(N)) // /obj/machinery/power first, these create bigger explosions due to direct powernet connection
if(!istype(N, /obj/machinery/power/apc) && !istype(N, /obj/machinery/power/smes/buildable) && (!N.powernet || !N.powernet.avail)) // Directly connected machine which is not an APC or SMES. Either it has no powernet connection or it's powernet does not have enough power to overload
to_chat(user, "<span class='notice'>ERROR: Low network voltage. Unable to overload. Increase network power level and try again.</span>")
return
else if (istype(N, /obj/machinery/power/apc)) // APC. Explosion is increased by available cell power.
var/obj/machinery/power/apc/A = N
if(A.cell && A.cell.charge)
explosion_intensity = 4 + round(A.cell.charge / 2000) // Explosion is increased by 1 for every 2k charge in cell
else
to_chat(user, "<span class='notice'>ERROR: APC Malfunction - Cell depleted or removed. Unable to overload.</span>")
return
else if (istype(N, /obj/machinery/power/smes/buildable)) // SMES. These explode in a very very very big boom. Similar to magnetic containment failure when messing with coils.
var/obj/machinery/power/smes/buildable/S = N
if(S.charge && S.RCon)
explosion_intensity = 4 + round(S.charge / 1000000)
else
// Different error texts
if(!S.charge)
to_chat(user, "<span class='notice'>ERROR: SMES Depleted. Unable to overload. Please charge SMES unit and try again.</span>")
else
to_chat(user, "<span class='notice'>ERROR: SMES RCon error - Unable to reach destination. Please verify wire connection.</span>")
return
else if(M && istype(M)) // Not power machinery, so it's a regular machine instead. These have weak explosions.
if(!M.use_power) // Not using power at all
to_chat(user, "<span class='notice'>ERROR: No power grid connection. Unable to overload.</span>")
return
if(M.inoperable()) // Not functional
to_chat(user, "<span class='notice'>ERROR: Unknown error. Machine is probably damaged or power supply is nonfunctional.</span>")
return
else // Not a machine at all (what the hell is this doing in Machines list anyway??)
to_chat(user, "<span class='notice'>ERROR: Unable to overload - target is not a machine.</span>")
return
explosion_intensity = min(explosion_intensity, 12) // 3, 6, 12 explosion cap
M.use_power(2000000) // Major power spike, few of these will completely burn APC's cell - equivalent of 2GJ of power.
// Trigger a powernet alarm. Careful engineers will probably notice something is going on.
var/area/temp_area = get_area(M)
if(temp_area)
var/obj/machinery/power/apc/temp_apc = temp_area.get_apc()
if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet)
temp_apc.terminal.powernet.trigger_warning(50) // Long alarm
if(temp_apc)
temp_apc.emp_act(3) // Such power surges are not good for APC electronics
if(temp_apc.cell)
temp_apc.cell.maxcharge -= between(0, (temp_apc.cell.maxcharge/2) + 500, temp_apc.cell.maxcharge)
if(temp_apc.cell.maxcharge < 100) // That's it, you busted the APC cell completely. Break the APC and completely destroy the cell.
qdel(temp_apc.cell)
temp_apc.set_broken()
if(!ability_pay(user,price))
return
M.visible_message("<span class='notice'>BZZZZZZZT</span>")
spawn(50)
explosion(get_turf(M), round(explosion_intensity/4),round(explosion_intensity/2),round(explosion_intensity),round(explosion_intensity * 2))
if(M)
qdel(M)
// END ABILITY VERBS
// MANIPULATION TREE
//
// Abilities in this tree allow the AI to physically manipulate systems around the station.
// T1 - Electrical Pulse - Sends out pulse that breaks some lights and sometimes even APCs. This can actually break the AI's APC so be careful!
// T2 - Hack Camera - Allows the AI to hack a camera. Deactivated areas may be reactivated, and functional cameras can be upgraded.
// T3 - Emergency Forcefield - Allows the AI to project 1 tile forcefield that blocks movement and air flow. Forcefield dissipates over time. It is also very susceptible to energetic weaponry.
// T4 - Machine Overload - Detonates machine of choice in a minor explosion. Two of these are usually enough to kill or K/O someone.
// BEGIN RESEARCH DATUMS
/datum/malf_research_ability/manipulation/electrical_pulse
ability = new/datum/game_mode/malfunction/verb/electrical_pulse()
price = 50
next = new/datum/malf_research_ability/manipulation/hack_camera()
name = "Electrical Pulse"
/datum/malf_research_ability/manipulation/hack_camera
ability = new/datum/game_mode/malfunction/verb/hack_camera()
price = 1200
next = new/datum/malf_research_ability/manipulation/emergency_forcefield()
name = "Hack Camera"
/datum/malf_research_ability/manipulation/emergency_forcefield
ability = new/datum/game_mode/malfunction/verb/emergency_forcefield()
price = 3000
next = new/datum/malf_research_ability/manipulation/machine_overload()
name = "Emergency Forcefield"
/datum/malf_research_ability/manipulation/machine_overload
ability = new/datum/game_mode/malfunction/verb/machine_overload()
price = 7500
name = "Machine Overload"
// END RESEARCH DATUMS
// BEGIN ABILITY VERBS
/datum/game_mode/malfunction/verb/electrical_pulse()
set name = "Electrical Pulse"
set desc = "15 CPU - Sends feedback pulse through station's power grid, overloading some sensitive systems, such as lights."
set category = "Software"
var/price = 15
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price) || !ability_pay(user,price))
return
to_chat(user, "Sending feedback pulse...")
for(var/obj/machinery/power/apc/AP in machines)
if(prob(5))
AP.overload_lighting()
if(prob(1) && prob(1)) // Very very small chance to actually destroy the APC.
AP.set_broken()
/datum/game_mode/malfunction/verb/hack_camera(var/obj/machinery/camera/target in cameranet.cameras)
set name = "Hack Camera"
set desc = "100 CPU - Hacks existing camera, allowing you to add upgrade of your choice to it. Alternatively it lets you reactivate broken camera."
set category = "Software"
var/price = 100
var/mob/living/silicon/ai/user = usr
if(target && !istype(target))
to_chat(user, "This is not a camera.")
return
if(!target)
return
if(!ability_prechecks(user, price))
return
var/action = input("Select required action: ") in list("Reset", "Add X-Ray", "Add Motion Sensor", "Add EMP Shielding")
if(!action || !target)
return
switch(action)
if("Reset")
if(target.wires)
if(!ability_pay(user, price))
return
target.reset_wires()
to_chat(user, "Camera reactivated.")
if("Add X-Ray")
if(target.isXRay())
to_chat(user, "Camera already has X-Ray function.")
return
else if(ability_pay(user, price))
target.upgradeXRay()
target.reset_wires()
to_chat(user, "X-Ray camera module enabled.")
return
if("Add Motion Sensor")
if(target.isMotion())
to_chat(user, "Camera already has Motion Sensor function.")
return
else if(ability_pay(user, price))
target.upgradeMotion()
target.reset_wires()
to_chat(user, "Motion Sensor camera module enabled.")
return
if("Add EMP Shielding")
if(target.isEmpProof())
to_chat(user, "Camera already has EMP Shielding function.")
return
else if(ability_pay(user, price))
target.upgradeEmpProof()
target.reset_wires()
to_chat(user, "EMP Shielding camera module enabled.")
return
/datum/game_mode/malfunction/verb/emergency_forcefield(var/turf/T as turf in world)
set name = "Emergency Forcefield"
set desc = "275 CPU - Uses station's emergency shielding system to create temporary barrier which lasts for few minutes, but won't resist gunfire."
set category = "Software"
var/price = 275
var/mob/living/silicon/ai/user = usr
if(!T || !istype(T))
return
if(!ability_prechecks(user, price) || !ability_pay(user, price))
return
to_chat(user, "Emergency forcefield projection completed.")
new/obj/machinery/shield/malfai(T)
user.hacking = 1
spawn(20)
user.hacking = 0
/datum/game_mode/malfunction/verb/machine_overload(obj/machinery/M in machines)
set name = "Machine Overload"
set desc = "400 CPU - Causes cyclic short-circuit in machine, resulting in weak explosion after some time."
set category = "Software"
var/price = 400
var/mob/living/silicon/ai/user = usr
if(!ability_prechecks(user, price))
return
var/obj/machinery/power/N = M
var/explosion_intensity = 2
// Verify if we can overload the target, if yes, calculate explosion strength. Some things have higher explosion strength than others, depending on charge(APCs, SMESs)
if(N && istype(N)) // /obj/machinery/power first, these create bigger explosions due to direct powernet connection
if(!istype(N, /obj/machinery/power/apc) && !istype(N, /obj/machinery/power/smes/buildable) && (!N.powernet || !N.powernet.avail)) // Directly connected machine which is not an APC or SMES. Either it has no powernet connection or it's powernet does not have enough power to overload
to_chat(user, "<span class='notice'>ERROR: Low network voltage. Unable to overload. Increase network power level and try again.</span>")
return
else if (istype(N, /obj/machinery/power/apc)) // APC. Explosion is increased by available cell power.
var/obj/machinery/power/apc/A = N
if(A.cell && A.cell.charge)
explosion_intensity = 4 + round(A.cell.charge / 2000) // Explosion is increased by 1 for every 2k charge in cell
else
to_chat(user, "<span class='notice'>ERROR: APC Malfunction - Cell depleted or removed. Unable to overload.</span>")
return
else if (istype(N, /obj/machinery/power/smes/buildable)) // SMES. These explode in a very very very big boom. Similar to magnetic containment failure when messing with coils.
var/obj/machinery/power/smes/buildable/S = N
if(S.charge && S.RCon)
explosion_intensity = 4 + round(S.charge / 1000000)
else
// Different error texts
if(!S.charge)
to_chat(user, "<span class='notice'>ERROR: SMES Depleted. Unable to overload. Please charge SMES unit and try again.</span>")
else
to_chat(user, "<span class='notice'>ERROR: SMES RCon error - Unable to reach destination. Please verify wire connection.</span>")
return
else if(M && istype(M)) // Not power machinery, so it's a regular machine instead. These have weak explosions.
if(!M.use_power) // Not using power at all
to_chat(user, "<span class='notice'>ERROR: No power grid connection. Unable to overload.</span>")
return
if(M.inoperable()) // Not functional
to_chat(user, "<span class='notice'>ERROR: Unknown error. Machine is probably damaged or power supply is nonfunctional.</span>")
return
else // Not a machine at all (what the hell is this doing in Machines list anyway??)
to_chat(user, "<span class='notice'>ERROR: Unable to overload - target is not a machine.</span>")
return
explosion_intensity = min(explosion_intensity, 12) // 3, 6, 12 explosion cap
M.use_power(2000000) // Major power spike, few of these will completely burn APC's cell - equivalent of 2GJ of power.
// Trigger a powernet alarm. Careful engineers will probably notice something is going on.
var/area/temp_area = get_area(M)
if(temp_area)
var/obj/machinery/power/apc/temp_apc = temp_area.get_apc()
if(temp_apc && temp_apc.terminal && temp_apc.terminal.powernet)
temp_apc.terminal.powernet.trigger_warning(50) // Long alarm
if(temp_apc)
temp_apc.emp_act(3) // Such power surges are not good for APC electronics
if(temp_apc.cell)
temp_apc.cell.maxcharge -= between(0, (temp_apc.cell.maxcharge/2) + 500, temp_apc.cell.maxcharge)
if(temp_apc.cell.maxcharge < 100) // That's it, you busted the APC cell completely. Break the APC and completely destroy the cell.
qdel(temp_apc.cell)
temp_apc.set_broken()
if(!ability_pay(user,price))
return
M.visible_message("<span class='notice'>BZZZZZZZT</span>")
spawn(50)
explosion(get_turf(M), round(explosion_intensity/4),round(explosion_intensity/2),round(explosion_intensity),round(explosion_intensity * 2))
if(M)
qdel(M)
// END ABILITY VERBS
+5 -7
View File
@@ -139,7 +139,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
<br><br>\
Humanity is the primary driving force for rapid space expansion, owing to their strong, expansionist central \
government and opportunistic Trans-Stellar Corporations. The prejudices of the 21st century have mostly \
given way to bitter divides on the most important issue of the times technological expansionism, \
given way to bitter divides on the most important issue of the times' technological expansionism, \
with the major human factions squabbling over their approach to technology in the face of a \
looming singularity.\
<br><br>\
@@ -170,7 +170,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
desc = "The Unathi are a species of large reptilian humanoids hailing from Moghes, in the \
Uueoa-Esa binary star system. Most Unathi live in a semi-rigid clan system, and clan \
enclaves dot the surface of their homeworld. Proud and long-lived, Unathi of all \
walks of life display a tendency towards perfectionism, and mastery of ones craft \
walks of life display a tendency towards perfectionism, and mastery of one's craft \
is greatly respected among them. Despite the aggressive nature of their contact, \
Unathi seem willing, if not eager, to reconcile with humanity, though mutual \
distrust runs rampant among individuals of both groups."
@@ -181,7 +181,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
desc = "Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet \
of the Rarkajar star system. Thickly furred and protected from cold, they thrive on \
their subartic planet, where the only terran temperate areas spread across the \
equator and tropical belt.\
equator and 'tropical belt.'\
<br><br>\
With their own share of bloody wars and great technological advances, the Tajaran are a \
proud kind. They fiercely believe they belong among the stars and consider themselves \
@@ -273,11 +273,11 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
desc = "A Positronic being, often an Android, Gynoid, or Robot, is an individual with a positronic brain, \
manufactured and fostered amongst organic life Positronic brains enjoy the same legal status as a humans, \
although discrimination is still common, are considered sapient on all accounts, and can be considered \
the synthetic species. Half-developed and half-discovered in the 2280s by a black lab studying alien \
the 'synthetic species'. Half-developed and half-discovered in the 2280's by a black lab studying alien \
artifacts, the first positronic brain was an inch-wide cube of palladium-iridium alloy, nano-etched with \
billions upon billions of conduits and connections. Upon activation, hard-booted by way of an emitter \
laser, the brain issued a single sentence before the neural pathways collapsed and it became an inert \
lump of platinum: What is my purpose?."
lump of platinum: 'What is my purpose?'."
value = CATALOGUER_REWARD_TRIVIAL
/datum/category_item/catalogue/technology/cyborgs
@@ -436,5 +436,3 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
/datum/category_item/catalogue/material
@@ -1,10 +1,10 @@
/datum/event/communications_blackout/announce()
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v¬-BZZZT", \
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v'-BZZZT", \
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
"Ionospheri:%£ MCayj^j<.3-BZZZZZZT", \
"#4nd%;f4y6,>£%-BZZZZZZZT")
"Ionospheri:%' MCayj^j<.3-BZZZZZZT", \
"#4nd%;f4y6,>'%-BZZZZZZZT")
for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts.
to_chat(A, "<br>")
+36 -36
View File
@@ -1,36 +1,36 @@
//This is not strictly a telecomms machine but conceptually it is.
/obj/machinery/exonet_node
description_info = "This machine is needed for several machines back at the colony to interact with systems beyond this region of space, such as \
communicators, external PDA messages, and even newscaster units, which host their content externally. You can fiddle with the device with \
just your hands, due to the integrated monitor and keyboard. Synthetic units can interface with it as well, just like most other machines."
description_fluff = "This is one of many nodes that make up the Exonet, which services trillions of devices across space. This particular node \
is referred to as a terminal node, servicing the station.<br>\
<br>\
In the beginning of humanity's ascend into space, the Exonet didn't exist. Instead, the Exonet is the evolution to a network called the Interplanetary \
Internet (sometimes referred to as the InterPlaNet), which was conceived and developed due to the limitations of the terrestrial Internet, mainly because \
the IP protocol was unsuitable for long range communications in space, due to the massive delays associated with lightspeed being unable to overcome \
the massive distances between planets in a timely manner. It was a store-and-forward network of smaller internets, distributed between various nodes, \
and was designed to be error, fault, and delay tolerant. The first nodes were put into space around the time when colonization had begun, to service humanitys \
close holdings, such as Luna and Mars.<br>\
<br>\
By 2104, the Interplanetary Internet had coverage within most of Sol, but the network of networks were limited by the speed of light, and due \
to orbital mechanics, the delay for a request to be processed could vary. As an example, a direct message from Mars to Earth could take anywhere \
between three to twenty two minutes to get to Earth, and then the same amount of time to return to Mars. Coverage was also spotty due to the \
nature of operating at such vast distances.<br>\
<br>\
Fortunately, a method for traveling faster than light was discovered, which could allow data to be transmitted beyond the speed of light, \
and thus overcome the limitations of the Interplanetary Internet. One by one, each of the nodes were upgraded to utilize cutting edge \
(at the time) FTL technologies to rapidly increase response time.<br>\
<br>\
Once humanity had send colonists out beyond Sol, to other star systems such as Sirius and Alpha Centauri, they required their own interplanetary \
internet, so a new protocol had to be created, and another hardware upgrade for the separate interplanetary internets. The end result allowed \
communications between Sol and the various exosolar systems, and was dubbed the Exonet. It remains the most common way for consumers to engage \
in long range communications across planets and star systems. Generally, each system has their own Exonet, which is connected to all the other \
Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \
and resilient to failure.<br>\
<br>\
This node is privately owned and maintained by NanoTrasen, and allows the crew of the station to have access to the Exonet."
description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \
the APC it uses to turn off remotely, such as with a signaler in the right wire."
//This is not strictly a telecomms machine but conceptually it is.
/obj/machinery/exonet_node
description_info = "This machine is needed for several machines back at the colony to interact with systems beyond this region of space, such as \
communicators, external PDA messages, and even newscaster units, which host their content externally. You can fiddle with the device with \
just your hands, due to the integrated monitor and keyboard. Synthetic units can interface with it as well, just like most other machines."
description_fluff = "This is one of many nodes that make up the Exonet, which services trillions of devices across space. This particular node \
is referred to as a terminal node, servicing the station.<br>\
<br>\
In the beginning of humanity's ascend into space, the Exonet didn't exist. Instead, the Exonet is the evolution to a network called the Interplanetary \
Internet (sometimes referred to as the InterPlaNet), which was conceived and developed due to the limitations of the terrestrial Internet, mainly because \
the IP protocol was unsuitable for long range communications in space, due to the massive delays associated with lightspeed being unable to overcome \
the massive distances between planets in a timely manner. It was a store-and-forward network of smaller internets, distributed between various nodes, \
and was designed to be error, fault, and delay tolerant. The first nodes were put into space around the time when colonization had begun, to service humanity's \
close holdings, such as Luna and Mars.<br>\
<br>\
By 2104, the Interplanetary Internet had coverage within most of Sol, but the network of networks were limited by the speed of light, and due \
to orbital mechanics, the delay for a request to be processed could vary. As an example, a direct message from Mars to Earth could take anywhere \
between three to twenty two minutes to get to Earth, and then the same amount of time to return to Mars. Coverage was also spotty due to the \
nature of operating at such vast distances.<br>\
<br>\
Fortunately, a method for traveling faster than light was discovered, which could allow data to be transmitted beyond the speed of light, \
and thus overcome the limitations of the Interplanetary Internet. One by one, each of the nodes were upgraded to utilize cutting edge \
(at the time) FTL technologies to rapidly increase response time.<br>\
<br>\
Once humanity had send colonists out beyond Sol, to other star systems such as Sirius and Alpha Centauri, they required their own interplanetary \
internet, so a new protocol had to be created, and another hardware upgrade for the separate interplanetary internets. The end result allowed \
communications between Sol and the various exosolar systems, and was dubbed the Exonet. It remains the most common way for consumers to engage \
in long range communications across planets and star systems. Generally, each system has their own Exonet, which is connected to all the other \
Exonets at the root node(s), and is typically arranged in a tree structure. The root node(s) are generally government-owned and are very secure \
and resilient to failure.<br>\
<br>\
This node is privately owned and maintained by NanoTrasen, and allows the crew of the station to have access to the Exonet."
description_antag = "An EMP will disable this device for a short period of time. A longer downage can be achieved by turning it off, or rigging \
the APC it uses to turn off remotely, such as with a signaler in the right wire."
@@ -1,129 +1,129 @@
/datum/lore/codex/category/important_locations
name = "Important Locations"
data = "There are several locations of interest that you may come across when visiting the system Vir."
children = list(
/datum/lore/codex/page/vir,
/datum/lore/codex/page/radiance_energy_chain,
/datum/lore/codex/page/firnir,
/datum/lore/codex/page/tyr,
/datum/lore/codex/page/sif,
/datum/lore/codex/page/vir_interstellar_spaceport,
/datum/lore/codex/page/southern_cross,
/datum/lore/codex/page/magni,
/datum/lore/codex/page/kara,
/datum/lore/codex/page/northern_star,
/datum/lore/codex/page/rota
)
/datum/lore/codex/page/vir/add_content()
name = "Vir (Star)"
keywords += list("Vir")
data = "Vir is an A-type main sequence star with 81% more mass than Sol (the humans' home star), and almost nine times as bright. It \
has a white glow, and a diameter that is about 34% larger than Sol. It has six major planets in its orbit.\
<br><br>\
Vir is mainly administered on [quick_link("Sif")] by the [quick_link("Sif Governmental Authority")], as Sif \
was the first planet to be colonized, however VGA lays claim to all planets orbiting Vir. The planets \
are named after figures in ancient human mythology (Norse), due to the original surveyor for the system deciding to do so. \
Some installations carry on this tradition."
/datum/lore/codex/page/radiance_energy_chain/add_content()
name = "Radiance Energy Chain (Artificial Satellites)"
keywords += list("Radiance Energy Chain")
data = "A sparse government-owned chain of automated stations exists between Firnir and the star itself. The idea is based on \
an ancient design that was pioneered at Sol. The stations are heavily shielded from the stellar radiation, and feature massive \
arrays of photo-voltaic panels. Each station harvests energy from Vir using the solar panels, and sends it to other areas of \
the system by beaming the energy to several relay stations farther away from the star, typically with a large laser.\
<br><br>\
These stations are generally devoid of life, instead, they are operated mainly by [quick_link("drones")], with maintenance performed \
by [quick_link("positronic")] equipped units in shielded chassis, or very brave humans in voidsuits that protect from extreme heat, and radiation. There are \
currently 19 stations in operation."
/datum/lore/codex/page/firnir/add_content()
name = "Firnir (Terrestrial Planet)"
keywords += list("Firnir")
data = "Firnir is the first planet of Vir, tidally locked to it, and having temperatures in excess of 570 degrees \
kelvin (299°C) on the day side has caused this planet to go mostly ignored."
/datum/lore/codex/page/tyr/add_content()
name = "Tyr (Terrestrial Planet)"
keywords += list("Tyr")
data = "The second closest planet to [quick_link("Vir")], this planet has a high concentration of minerals inside its crust, as well as active volcanism and plate tectonics. \
The temperature on the surface can reach up to 405 degrees kelvin (132°C), which has deterred most people from the planet, except for two [quick_link("TSC", "TSCs")], \
Greyson Manufactories and [quick_link("Xion Manufacturing Group")]. In orbit, the two companies each have a space station, used to coordinate and \
control their stations on the surface without having to suffer the intense heat. Xion's station also doubles as a control and oversight facility for their \
[quick_link("drones","autonomous mining drones")].\
<br><br>\
Remnants of both Greyson and Xion's mining operations dot the surface, as well as ruins of mining \
outposts build by an unknown alien civilization, which researchers have noted it appears to be similar to ruins found inside the rings of [quick_link("Kara")] \
and on [quick_link("Sif")] itself. Below the surface of Tyr are many natural cave systems, dangerous and easy to get lost inside, which both companies make heavy \
use of. A noted rivalry exists between the two mining giants, as well as with smaller groups more interested in the xenoarcheological value of the alien ruins.\
<br><br>\
The very high temperatures, dangerous (sometimes magma-filled) caves, and the only presence of civilization being mining operations has made tourism \
for Tyr mostly non-existent, with the exception of explorers who specifically seek out hellish landscapes, which are plentiful with all the ruins, \
volcanoes, twisting caves, and general lawlessness. The occasional remains of previous explorers near certain hotspots somehow does not deter them."
/datum/lore/codex/page/sif/add_content()
name = "Sif (Terrestrial Planet)"
keywords += list("Sif")
data = "Sif is a terrestrial planet and third closest planet to Vir. It possesses oceans, a breathable atmosphere, \
a magnetic field, weather, and acceptable gravity. It is currently the capital planet of Vir. Its center of government is the \
equatorial city and site of the first settlement, New Reykjavik, which houses the [quick_link("Sif Governmental Authority")].\
<br><br>\
Sif has many desirable traits which made it the first planet to be colonized in Vir, however it also has various quirks which \
may disorient humans used to conditions on planet Earth. Atmospheric pressure is lower than 'normal', which may cause difficulty \
breathing if you are used to climate controlled artifical habitats or higher pressure planets. The gravity is also slightly lower, at \
only 90% the strength of planet Earth's gravity. You may need to keep two clocks if you plan to visit \
or live on Sif, as the planet takes over 32 hours to complete one day. A Sif year also takes just under five Earth years."
/datum/lore/codex/page/vir_interstellar_spaceport/add_content()
name = "Vir Interstellar Spaceport (Artificial Satellite)"
keywords += list("Vir Interstellar Spaceport")
data = "The Vir Interstellar Spaceport is a large facility in orbit of the planet [quick_link("Sif")] which handles the loading and \
unloading, refuelling, and general maintenance of large spacecraft. The main structure is owned by the \
[quick_link("Sif Governmental Authority")], but individual offices, docking/loading bays, and warehouses are often leased to individuals \
or organisations. The position of the spaceport allows it to function not only as a key node for transport inside the Vir \
system, especially to and from the planet Sif, but also as a key stopping point interstellar craft travelling via Vir which need refuelling. \
<br><br>\
The station itself is mostly designed around its logistical and commercial needs, and although other strategically-placed \
nearby facilities owned by a mixture of corporations and entities may possess habitation space, the port itself is not \
designed to be a living habitat - its proximity to the surface of Sif makes transport of people and materials to and from \
the facility and the planet via shuttle extremely cost-efficient."
/datum/lore/codex/page/southern_cross/add_content()
name = "Southern Cross (Artificial Satellite)"
keywords += list("Southern Cross", "NLS Southern Cross")
data = "The Southern Cross is a mostly automated telecommunications and supply hub for [quick_link("NanoTrasen")], named after it's companion satellite, the \
[quick_link("Northern Star")]. It acts as a logistics hub for the smaller installations NanoTrasen has in Sif orbit and on the surface."
/datum/lore/codex/page/magni/add_content()
name = "Magni (Terrestrial Planet)"
keywords += list("Magni")
data = "Outside of the habitable zone, the barren world Magni is generally at 202 kelvin (-71°C)."
/datum/lore/codex/page/kara/add_content()
name = "Kara (Gas Giant)"
keywords += list("Kara")
data = "A gas giant, with a large number of moons. Captured asteroids, to be specific. Many of the asteroids are theorized \
to be the remnants of a much larger moon that was ripped apart by Kara, long ago. Curerntly, a large number of these \
asteroids are being used by many different businesses, and some governmental infrastructure has been built. The most prominent \
asteroid installation is the [quick_link("Northern Star", "NCS Northern Star")], a general purpose colony owned and operated by \
[quick_link("NanoTrasen")]. The mid-atmospheric temperature of the gas giant averages to around 150 kelvin (-108°C)."
/datum/lore/codex/page/northern_star/add_content()
name = "Northern Star (Artificial Satellite)"
keywords += list("Northern Star", "NCS Northern Star")
data = "One of the most prominent installations in the [quick_link("Kara")] subsystem, the Northern Star is owned \
and operated by [quick_link("NanoTrasen")]. It was originally built to service the various mining operations \
occurring within Kara's ring, however it has grown into what it is today due to what was discovered inside \
the interior of the rock. Both phoron and alien artifacts were found inside, catapulting the asteroid outpost \
into the main attraction inside the subsystem.\
<br><br>\
Today it houses a population of civilians, whom work to maintain \
the colony and support the local mining industry. The colony also has managed to achieve a degree of \
self-sufficiency, and possesses many amenities and features that most other asteroid bases in the \
subsystem lack."
/datum/lore/codex/page/rota/add_content()
name = "Rota (Gas Giant)"
keywords += list("Rota")
data = "An ice giant, with a beautiful ring system circling it. The average temperature for it is 165 kelvin (-157°C)."
/datum/lore/codex/category/important_locations
name = "Important Locations"
data = "There are several locations of interest that you may come across when visiting the system Vir."
children = list(
/datum/lore/codex/page/vir,
/datum/lore/codex/page/radiance_energy_chain,
/datum/lore/codex/page/firnir,
/datum/lore/codex/page/tyr,
/datum/lore/codex/page/sif,
/datum/lore/codex/page/vir_interstellar_spaceport,
/datum/lore/codex/page/southern_cross,
/datum/lore/codex/page/magni,
/datum/lore/codex/page/kara,
/datum/lore/codex/page/northern_star,
/datum/lore/codex/page/rota
)
/datum/lore/codex/page/vir/add_content()
name = "Vir (Star)"
keywords += list("Vir")
data = "Vir is an A-type main sequence star with 81% more mass than Sol (the humans' home star), and almost nine times as bright. It \
has a white glow, and a diameter that is about 34% larger than Sol. It has six major planets in its orbit.\
<br><br>\
Vir is mainly administered on [quick_link("Sif")] by the [quick_link("Sif Governmental Authority")], as Sif \
was the first planet to be colonized, however VGA lays claim to all planets orbiting Vir. The planets \
are named after figures in ancient human mythology (Norse), due to the original surveyor for the system deciding to do so. \
Some installations carry on this tradition."
/datum/lore/codex/page/radiance_energy_chain/add_content()
name = "Radiance Energy Chain (Artificial Satellites)"
keywords += list("Radiance Energy Chain")
data = "A sparse government-owned chain of automated stations exists between Firnir and the star itself. The idea is based on \
an ancient design that was pioneered at Sol. The stations are heavily shielded from the stellar radiation, and feature massive \
arrays of photo-voltaic panels. Each station harvests energy from Vir using the solar panels, and sends it to other areas of \
the system by beaming the energy to several relay stations farther away from the star, typically with a large laser.\
<br><br>\
These stations are generally devoid of life, instead, they are operated mainly by [quick_link("drones")], with maintenance performed \
by [quick_link("positronic")] equipped units in shielded chassis, or very brave humans in voidsuits that protect from extreme heat, and radiation. There are \
currently 19 stations in operation."
/datum/lore/codex/page/firnir/add_content()
name = "Firnir (Terrestrial Planet)"
keywords += list("Firnir")
data = "Firnir is the first planet of Vir, tidally locked to it, and having temperatures in excess of 570 degrees \
kelvin (299°C) on the day side has caused this planet to go mostly ignored."
/datum/lore/codex/page/tyr/add_content()
name = "Tyr (Terrestrial Planet)"
keywords += list("Tyr")
data = "The second closest planet to [quick_link("Vir")], this planet has a high concentration of minerals inside its crust, as well as active volcanism and plate tectonics. \
The temperature on the surface can reach up to 405 degrees kelvin (132°C), which has deterred most people from the planet, except for two [quick_link("TSC", "TSCs")], \
Greyson Manufactories and [quick_link("Xion Manufacturing Group")]. In orbit, the two companies each have a space station, used to coordinate and \
control their stations on the surface without having to suffer the intense heat. Xion's station also doubles as a control and oversight facility for their \
[quick_link("drones","autonomous mining drones")].\
<br><br>\
Remnants of both Greyson and Xion's mining operations dot the surface, as well as ruins of mining \
outposts build by an unknown alien civilization, which researchers have noted it appears to be similar to ruins found inside the rings of [quick_link("Kara")] \
and on [quick_link("Sif")] itself. Below the surface of Tyr are many natural cave systems, dangerous and easy to get lost inside, which both companies make heavy \
use of. A noted rivalry exists between the two mining giants, as well as with smaller groups more interested in the xenoarcheological value of the alien ruins.\
<br><br>\
The very high temperatures, dangerous (sometimes magma-filled) caves, and the only presence of civilization being mining operations has made tourism \
for Tyr mostly non-existent, with the exception of explorers who specifically seek out hellish landscapes, which are plentiful with all the ruins, \
volcanoes, twisting caves, and general lawlessness. The occasional remains of previous explorers near certain hotspots somehow does not deter them."
/datum/lore/codex/page/sif/add_content()
name = "Sif (Terrestrial Planet)"
keywords += list("Sif")
data = "Sif is a terrestrial planet and third closest planet to Vir. It possesses oceans, a breathable atmosphere, \
a magnetic field, weather, and acceptable gravity. It is currently the capital planet of Vir. Its center of government is the \
equatorial city and site of the first settlement, New Reykjavik, which houses the [quick_link("Sif Governmental Authority")].\
<br><br>\
Sif has many desirable traits which made it the first planet to be colonized in Vir, however it also has various quirks which \
may disorient humans used to conditions on planet Earth. Atmospheric pressure is lower than 'normal', which may cause difficulty \
breathing if you are used to climate controlled artifical habitats or higher pressure planets. The gravity is also slightly lower, at \
only 90% the strength of planet Earth's gravity. You may need to keep two clocks if you plan to visit \
or live on Sif, as the planet takes over 32 hours to complete one day. A Sif year also takes just under five Earth years."
/datum/lore/codex/page/vir_interstellar_spaceport/add_content()
name = "Vir Interstellar Spaceport (Artificial Satellite)"
keywords += list("Vir Interstellar Spaceport")
data = "The Vir Interstellar Spaceport is a large facility in orbit of the planet [quick_link("Sif")] which handles the loading and \
unloading, refuelling, and general maintenance of large spacecraft. The main structure is owned by the \
[quick_link("Sif Governmental Authority")], but individual offices, docking/loading bays, and warehouses are often leased to individuals \
or organisations. The position of the spaceport allows it to function not only as a key node for transport inside the Vir \
system, especially to and from the planet Sif, but also as a key stopping point interstellar craft travelling via Vir which need refuelling. \
<br><br>\
The station itself is mostly designed around its logistical and commercial needs, and although other strategically-placed \
nearby facilities owned by a mixture of corporations and entities may possess habitation space, the port itself is not \
designed to be a living habitat - its proximity to the surface of Sif makes transport of people and materials to and from \
the facility and the planet via shuttle extremely cost-efficient."
/datum/lore/codex/page/southern_cross/add_content()
name = "Southern Cross (Artificial Satellite)"
keywords += list("Southern Cross", "NLS Southern Cross")
data = "The Southern Cross is a mostly automated telecommunications and supply hub for [quick_link("NanoTrasen")], named after it's companion satellite, the \
[quick_link("Northern Star")]. It acts as a logistics hub for the smaller installations NanoTrasen has in Sif orbit and on the surface."
/datum/lore/codex/page/magni/add_content()
name = "Magni (Terrestrial Planet)"
keywords += list("Magni")
data = "Outside of the habitable zone, the barren world Magni is generally at 202 kelvin (-71°C)."
/datum/lore/codex/page/kara/add_content()
name = "Kara (Gas Giant)"
keywords += list("Kara")
data = "A gas giant, with a large number of moons. Captured asteroids, to be specific. Many of the asteroids are theorized \
to be the remnants of a much larger moon that was ripped apart by Kara, long ago. Curerntly, a large number of these \
asteroids are being used by many different businesses, and some governmental infrastructure has been built. The most prominent \
asteroid installation is the [quick_link("Northern Star", "NCS Northern Star")], a general purpose colony owned and operated by \
[quick_link("NanoTrasen")]. The mid-atmospheric temperature of the gas giant averages to around 150 kelvin (-108°C)."
/datum/lore/codex/page/northern_star/add_content()
name = "Northern Star (Artificial Satellite)"
keywords += list("Northern Star", "NCS Northern Star")
data = "One of the most prominent installations in the [quick_link("Kara")] subsystem, the Northern Star is owned \
and operated by [quick_link("NanoTrasen")]. It was originally built to service the various mining operations \
occurring within Kara's ring, however it has grown into what it is today due to what was discovered inside \
the interior of the rock. Both phoron and alien artifacts were found inside, catapulting the asteroid outpost \
into the main attraction inside the subsystem.\
<br><br>\
Today it houses a population of civilians, whom work to maintain \
the colony and support the local mining industry. The colony also has managed to achieve a degree of \
self-sufficiency, and possesses many amenities and features that most other asteroid bases in the \
subsystem lack."
/datum/lore/codex/page/rota/add_content()
name = "Rota (Gas Giant)"
keywords += list("Rota")
data = "An ice giant, with a beautiful ring system circling it. The average temperature for it is 165 kelvin (-157°C)."
+319 -319
View File
@@ -1,319 +1,319 @@
/datum/lore/codex/category/species
name = "Species"
data = "There are many different types of lifeforms (both alive and artificial) in the galaxy, which you may find inside Vir."
children = list(
/datum/lore/codex/page/human,
/datum/lore/codex/page/skrell,
/datum/lore/codex/page/unathi,
/datum/lore/codex/page/tajaran,
/datum/lore/codex/page/diona,
/datum/lore/codex/page/promethean,
/datum/lore/codex/page/vatborn,
/datum/lore/codex/category/teshari,
/datum/lore/codex/category/positronic,
/datum/lore/codex/category/drone
)
/datum/lore/codex/page/human/add_content()
name = "Human"
keywords += list("Humanity")
data = "Humans are a race of 'ape'-like creatures from the continental planet Earth in the Sol system. They are the primary driving \
force for rapid space expansion, owing to their strong, expansionist central government and opportunistic [quick_link("TSC","Trans-Stellar Corporations")]. \
The prejudices of their 21st century history have mostly given way to bitter divides on the most important issue of the times- technological \
expansionism.\
<br><br>\
While most humans have accepted the existence of aliens in their communities and workplaces as a fact of life, exceptions abound. \
While more culturally diverse than most species, humans are generally regarded as somewhat technophobic and isolationist by members \
of other species."
/datum/lore/codex/page/skrell
name = "Skrell"
keywords = list("Skrellian")
data = "The Skrell are a species of amphibious humanoids, distinguished by their gelatinous appearance and head tentacles. \
Skrell come from the world of Sirisai (called Qerr'balak by Skrell), a humid planet with plenty of swamps and jungles. Currently more technologically advanced \
than the humans, they emphasize the study of the mind above all else.\
<br><br>\
Gender has little meaning to Skrell outside of reproduction, and in fact many other species have a difficult time telling the difference \
between male and female Skrell apart. The most obvious signs (voice in a slightly higher register, longer head-tails for females) are never \
a guarantee. Due to their scientific focus of the mind and body, Skrell tend to be more peaceful and their colonization has been slow, swiftly \
outpaced by the humans. For humans, they were their first contact sentient species, and are their longest, and closest, ally in space."
/datum/lore/codex/page/unathi
name = "Unathi"
data = "The Unathi are a race of tall, reptilian humanoids that possess a blend of serpentine features reminiscent of crocodiles. \
They are a proud, religious species that favors honor and strength, and originate from the desert planet of Moghes. \
The Unathi follow a religious code known as the Unity, and they carry this with them on their travels. \
Unathi once fought a serious war against SolGov, and as a result are often considered to be second-class citizens, \
rarely seen in jobs that don't require a little muscle."
/datum/lore/codex/page/tajaran
name = "Tajaran"
keywords = list("Tajaran")
data = "The Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet of the Rarkajar star system. Thickly furred and protected \
from cold, they thrive on their subarctic planet, where the only terran temperate areas spread across the equator and tropical belt. \
With their own share of bloody wars and great technological advances, the Tajaran are a proud kind. They fiercely believe they belong \
among the stars and consider themselves a rightful interstellar nation, even if the humans helped them to actually achieve superluminal \
speeds with Bluespace FTL drives. Relatively new to the galactic stage, their contacts with other species are aloof, but friendly. \
Among these bonds, Humans stand out as valued trade partners and maybe even a friend."
/datum/lore/codex/page/diona/add_content()
name = "Diona"
keywords += list("Dionaea")
data = "The Dionaea are a group of omnivorous, slow-metabolism plantlike organisms that are in fact clusters of individual, smaller organisms. \
They exhibit a high degree of structural flexibility, and come in a wide variety of shapes and colors to reflect the intelligence of each individual \
creature. They were discovered by the [quick_link("Skrell")] in 2294CE, not on a planet, but in open space between three stars, a figurative hell that made it \
difficult to discover, much less contact them.\
<br><br>\
Dionaea spread by seeds and are asexual, no gender. When grown into their small 'nymph' state, they are known to eat large amounts of dead plant \
matter and fertilize plants while they learn from those around them, and as they grow further, they merge into larger and larger forms. It is not \
unheard of for Skrell explorers to be traveling in a ship composed of habitat modules and engines of Skrell design and the body formed by their \
Diona allies to warble across the cosmos.\
<br><br>\
Introduced by the Skrell, and quite slow and peaceful, the Diona share good relations with the other species."
// Bird lore
/datum/lore/codex/category/teshari/add_content()
name = "Teshari"
data = "The Teshari are reptilian pack predators from the [quick_link("Skrell")] homeworld, Sirisai (Qerr'balak). While they evolved alongside the Skrell, their interactions with them \
tended to be confused and violent, and until peaceful contact was made they largely stayed in their territories on and around the poles, in tundral \
terrain far too desolate and cold to be of interest to the Skrell. In more enlightened times, the Teshari are a minority culture on many Skrell worlds, \
maintaining their own settlements and cultures, but often finding themselves standing on the shoulders of their more technologically advanced neighbors \
when it comes to meeting and exploring the rest of the galaxy.\
<br><br>\
It is important to note that Teshari names are unlike standard human names. Their pack name precedes their given name."
children = list(
/datum/lore/codex/page/teshari_packs,
/datum/lore/codex/page/teshari_physical
)
/datum/lore/codex/page/teshari_packs/add_content()
name = "Teshari Packs"
keywords += list("Packs")
data = "There are several packs you may come across;<small>\
<br><br>\
<b>Eshi</b><br>\
A large, old, politically neutral pack heavily involved in efforts to get Teshari into space. Probably the most \
common pack to see outside of a [quick_link("Skrell")] colony, and probably the most numerous Teshari pack outside of Sirisai and associated colonies.\
<br><br>\
<b>Nasemari</b><br>\
A very small pack. Generally focused around supporting and providing for packs on the homeworlds, they have devoted \
themselves to training as technicians and engineers in order to obtain skills and training to take back to Sirisai. \
The pack is only around thirty people in size, but owns and maintains a nuclear power plant.\
<br><br>\
<b>Schasaraca</b><br>\
One of the more Skrell-devoted and integrated packs. They tend to be rather sycophantic towards the Skrell and work as \
scientists and field researchers on a variety of projects, generally biology or technical research. They have a reputation \
for working as spies and informants for the Skrell governments amongst other Teshari.\
<br><br>\
<b>Ceea</b><br>\
An isolationist pack from the northern tundra of Sirisai; generally known as disliking the Skrell. Small to average in size; \
only around sixty members. Their regional culture is built around the study culture and anthropology, as well as archaeology, \
originally for the purposes of recovering history and materials \"lost\" due to Skrell interference. It would be very rare to \
see them on your travels, however they are listed here for the sake of completeness.\
<br><br>\
<b>Resca</b><br>\
A pack that sold off its small native territory for the chance to get into space. Very musically inclined. They tend towards medical professions.</small>"
/datum/lore/codex/page/teshari_physical/add_content()
name = "Physiology of Teshari"
data = "The Teshari are, relative to other species, smaller than average, rarely reaching more than 2-3'/1m in height, and weigh less than \
90lbs/40kg. They have rapid metabolisms and very efficient digestive systems, and thanks to sharing in \
the medical technology of the [quick_link("Skrell")], they tend to have robust and effective immune systems. They evolved \
for very cold and very barren areas, generally the polar regions. Because of this, their skin is a fine \
insulator and many of their internal processes are not particularly energy-efficient; they cannot cope \
well at all with high temperatures.\
<br><br>\
Their hearing is exceptionally sensitive to the point that they can detect a person moving on the other \
side of a wall, but this comes at a cost. Very loud noises are very painful for Teshari, so be mindful of \
your indoor voice when speaking with one. The Teshari are omnivorous but generally prefer to eat meat wherever possible."
// Promethean Lore
/datum/lore/codex/page/promethean/add_content()
name = "Promethean"
keywords += list("slime", "promethean")
data = "Prometheans are an artificial species created by the Humans sometime in the 2540s, aboard the NRS Prometheus, while experimenting with \
the Aetolian giant slime, or Macrolimus vulgaris. They themselves are considered sapient beings and given protection under prior Human legislation, \
though often only appear to serve as aides or inferior positions when kept as staff. Aetolus, the official Home world of the Prometheans and giant slime, \
is an obnoxiously warm, humid planet requiring structures to be built within large, atmospherically-filtered tent-like domes. \
Prometheans take on vague visual and vocal features of the species they cohabitate with, sharing their predecessors tendency to mimic nearby entities, \
though in physical form additionally; this is seemingly more important in their own development, as well. Despite their taken appearances, \
there is no known existence of a divergence between a biologically male or female form of the species, leading most to believe they are in fact asexual, \
as their predecessors are."
// Vatborn Lore
/datum/lore/codex/page/vatborn/add_content()
name = "Vatborn"
keywords += list("vatborn")
data = "A genetically modified type of human, Vatborn humans are cloned from a template and grown in special tubes. They look like pale \
but otherwise normal humans, but their bodies have a few internal changes. For one, they lack an appendix. On top of that, they are frequently \
hungry, as their metabolisms are faster than standard."
// Posi lore
/datum/lore/codex/category/positronic/add_content()
name = "Positronics"
keywords += list("Positronic", "Posi", "Posibrain", "Posibrains")
data = "A Positronic being, is an individual with a positronic brain, manufactured \
and fostered amongst organic life. Positronic brains enjoy the same legal status as a human in [quick_link("SolGov")] space, although discrimination is \
still prevalent, and are considered sapient on all accounts. They can be considered the \"synthetic species\". Half-developed and \
half-discovered in the 2280s by a human black lab studying alien artifacts, the first positronic brain was an inch-wide cube \
of an palladium-iridium alloy, nano-etched with billions upon billions of conduits and connections. Upon activation, \
hard-booted with an emitter laser, the brain issued a single sentence before the neural pathways collapsed and \
it became an inert lump of platinum: \"What is my purpose?\"."
children = list(
/datum/lore/codex/page/positronic_brain_physical,
/datum/lore/codex/page/positronic_memory,
/datum/lore/codex/page/jans_fhriede
)
/datum/lore/codex/page/positronic_brain_physical
name = "Physical Structure of a Positronic Brain"
keywords = list("Physical Posibrain", "Physical Positronic")
data = "A positronic brain is a cube of complex metal alloy between two and six inches to a side. They usually weigh just under ten kilograms and are \
<b>very fragile</b> when exposed to the stresses of heat or cold, as well as physical trauma. The exterior surface is chased with a network of grooves, forming \
a maze of geometric patterns right down to the molecular level, and the interior is hollow; complex particle generators and densely packed computational \
arrays form the basis of a self-computing neural network, complex and somewhat poorly understood. Most modern positronic brains are equipped with \
standardized I/O ports, and all have some interface for imprinting."
/datum/lore/codex/page/positronic_memory
name = "Positronic Memory"
keywords = list("Posi Memory", "Memory")
data = "Positronic minds learn in a similar manner to humans and other forms of life, although typically more quickly. They are not simple computer storage that holds information \
verbatim as it is received- instead, they have to repeat activities and train in order to retain memory on complex tasks. Similarly, positronic brains do \
not have an infinite storage capacity and undergo a natural process of forgetting, albeit in a structured manner, losing unimportant day to day details and \
ancient information no longer deemed useful. Because of the nature of the positronic brain, its memories cannot simply be stored elsewhere.\
<br><br>\
Particularly old positronic minds, over a century plus, that store a great deal of memories have displayed a tendency to become gradually more introspective \
as more of their mind is co-opted for the task, ending in a state of near-catatonia as their neural networks become clogged with memory. Many choose to avoid \
this end of self by more aggressively managing their memories, storing a window of their recent existence and most treasured memories rather than their full lifespan."
/datum/lore/codex/page/jans_fhriede
name = "Jans-Fhriede Test"
keywords = list("Jans-Fhriede", "JF", "Jans", "Fhriede", "Jans Fhriede")
data = "Positronics are eligible to take the \"Jans-Fhriede Test\" after a year of being created, measuring their function in a society and judging if they act \
socially acceptable and are capable of understanding their actions and the consequences resulting from them. If they successfully pass the test, \
they are considered legal adults and hold the same basis of rights as a normal human. At that point, Positronics are not allowed to be lawed, \
unless on a contractual basis or otherwise under their own volition."
// Drone lore
/datum/lore/codex/category/drone
name = "Drones"
keywords = list("Drone")
data = "While low-level drone intelligences are as old as the oldest human colonies, research into higher-level systems was stymied in human space by precautionist \
politicians for hundreds of years. Tensions between the corporate rim and the highly conservative core worlds over drone proliferation led to what humans call the \
Third Cold War, which was defused by the introduction of the positronic brain. After the Icarus Front's loss of the majority in 2504, harsh laws \
against advanced AI were replaced with the SolGov Emergent Intelligence Oversight commission, the illegality replaced with a steeply sloping \
system of monetary costs.\
<br>\
The term \"drone\" was coined by early positronic activists, eager to distinguish themselves from the menial bots that most space-dwellers were \
familiar with, and avoid the ambiguity of the term \"AI\", which now usually refers to drones."
children = list(
/datum/lore/codex/page/codeline,
/datum/lore/codex/page/emergence,
/datum/lore/codex/page/emergent_intelligence_oversight,
/datum/lore/codex/category/drone_classes,
)
/datum/lore/codex/page/codeline
name = "Codeline"
keywords = list("fork")
data = "A \"codeline\" is a single type of drone. A codeline represents a significant degree of effort from sapient programmers to realize, as well as \
a substantial amount of regulatory fees levied by the government. Each copy of a codeline is called a \"fork\", whether the fork is created from the \
codelines initial state or from a fully realized individual of that codeline. The degree of similarity between forks of the same codeline varies \
on the intelligence of the codeline, with low-level forks being virtually identical to high-level forks being no more similar than family members."
/datum/lore/codex/page/emergence
name = "Emergence"
keywords = list("Seed AI")
data = "\"Emergence\" is a term associated with drone intelligences who become more intelligent than they were originally intended to be. While this can \
extend to financial systems learning language, for instance, it is usually applied to hypothetical intelligences that become more intelligent than humans. \
Humanity has a long-standing cultural fear of emergent \"seed\" AI, egged on by Icarus memeticists and the occasional very real partial emergence events, where \
colony-control AI or other powerful systems begin to advance drastically in power, usually ending with the AI being shut down after crashing a handful of major systems."
/datum/lore/codex/page/emergent_intelligence_oversight
name = "Emergent Intelligence Oversight"
keywords = list("SG-EIO", "SG EIO", "EIO", "Intelligence Oversight")
data = "SG-EIO, usually just called EIO, is the organization charged with monitoring existing AI for any threat of dangerous emergence. Their perception in the \
public eye is generally positive, with all but the hardest-line Mercurial humans in favor of protection from the dangers of Seed AI. Some positronic rights \
groups bristle at the EIOs human-centric viewpoint, but most are glad to have a different boogeyman in the form of drone intelligences. The tiny population \
of A-class drones are generally frightened of the EIOs total power over them."
/datum/lore/codex/category/drone_classes
name = "Drone Classifications"
keywords = list("Class", "Drone Class")
data = "To aid in its work, the EIO has created a system of classifications corresponding to different levels of drone intelligence. Higher classes are more \
expensive to deploy and develop, owing to the costs of EIO oversight and political pressure against drone proliferation. EIO classification involves an initial \
audit of the project's source code by experts and automated systems, and for high-class drones further check-ins throughout the life of the drone. \
Drone chasses are often branded with their inhabiting intelligence's class, especially those of B or A-class drones, and class is often recorded in security records."
children = list(
/datum/lore/codex/page/class_f,
/datum/lore/codex/page/class_d,
/datum/lore/codex/page/class_c,
/datum/lore/codex/page/class_b,
/datum/lore/codex/page/class_a,
/datum/lore/codex/page/class_aa,
/datum/lore/codex/page/class_aaa,
/datum/lore/codex/page/class_x,
)
/datum/lore/codex/page/class_f
name = "F Class"
data = "\"F-class\" drones are an informal term for computer systems that pose absolutely no emergent risk. Most 21st-century software is F-class, as is much of \
the software used by 26th century humanity. The only regulation on F-class software is the occasional check that it is, in fact, F-Class, and as such has remained \
the most prevalent form of information-processing technology for centuries. The software powering most F-class drones is either freely available or bundled with the \
machine it's supposed to run."
/datum/lore/codex/page/class_d/add_content()
name = "D Class"
data = "D-class drones are conceptually descended from pre-[quick_link("Icarus")] AI and bear a strong resemblance to their forebears. D-class drones are essentially \
number-crunchers, with virtually nothing in the way of social development. They cannot speak more intelligibly than your average piece of software, \
using pre-determined messages written by their programmers, and have no capacity for self-improvement. They are D-class intelligence because they \
work with more complex problems than [quick_link("F class")] software, such as financial forecasting and large-scale data mining and memetics. The creation and \
deployment of D-class drones requires only a small fee for the required code audit, although some high-power financial and political systems are \
regularly watched by the [quick_link("EIO")] for signs of emergence. There is no real monopoly on the production of D-class drones."
/datum/lore/codex/page/class_c/add_content()
name = "C Class"
data = "C-class drones have social protocols for ease of use by organic and positronic laypeople. C-class drones are capable of speech, although \
it has a strong tendency to be formulaic and repetitive. They are also capable of a limited degree of self-improvement, and over time individual \
C-class instances tend differ slightly from one-another. C-class drones suffer a moderate fee to development, with automated [quick_link("EIO")] tools ensuring \
that they are not a long-term emergence risk. However, one a codeline is confirmed safe, deployment is unlimited, encouraging developers to \
instance many forks of the original drone to recoup their cost. The market for C-class drones is a strange space, dominated by Xion Manufacturing, \
Ward-Takahashi GMC, and a large number of smaller firms, like the notoriously-cheap Cyber Solutions."
/datum/lore/codex/page/class_b/add_content()
name = "B Class"
data = "B-class drones have advanced social protocols and are often capable of very intelligible conversation, so long as one sticks to surface \
topics. B-class drones tend to be specialized but still capable of remarkable growth within their speciality, making them popular for autonomous \
deployment and even supervision of other classes of drone. The dividing line between [quick_link("A Class", "A")] and B-class drones becomes apparent when they are taken \
out of their area of specialization, with the B-class drones swiftly becoming useless. They incur a hefty fee for the production of the initial \
codeline, as their emergent potential is far greater, and a smaller but still substantial fee for the production of forks. The market for B-class \
drones is a battleground between Ward-Takahashi and NanoTrasen, with other firms usually producing B-classes for in-house needs."
/datum/lore/codex/page/class_a/add_content()
name = "A Class"
keywords += list("AGI")
data = "A-class drones are also referred to as AGI. A-class drones are capable of performing in many contexts and can learn to solve problems from \
first principles, with an incredible potential for growth and emergent behavior. However, some abilities fall short of humans, usually those relating \
to socialization, and they often act in ways that are strange or distressing. There is a small but growing lobby of support for the personhood of A-class \
drones. The cost of initializing an A-class drone is absolutely massive, as they will be monitored by [quick_link("EIO")] forever. The auditing cost of an A-class drone \
codeline is even more staggering, making development and deployment of AGI limited to research, highly difficult and high-throughput operations like habitat \
overwatch, and a few risk-taking firms banking on the associated fees dropping. There is not a proper market for A-class drones, although an appreciable \
fraction of them are made by [quick_link("NanoTrasen")], with the rest generally being university research projects."
/datum/lore/codex/page/class_aa
name = "AA Class"
data = "AA-class drones <b>do not yet exist</b>. Hypothetically, they are equal to living in every respect, with psychology that would not be abnormal in a baseline \
human. The type of AA-class drone most frequently discussed is a hypothetical digitized consciousness of a human, a human brain that is somehow translated into \
software. Some argue that a small fraction of the A-class drones would more properly be considered AA, but as of yet no action has been taken. Some Mercurials \
will jokingly refer to themselves or other organics and positronics as AAs. Research into brain uploading is heavily regulated and generally illegal."
/datum/lore/codex/page/class_aaa
name = "AAA Class"
data = "AAA-class drones do not yet exist, hopefully. They are more competent in every way than humans and pose a threat to the continued existence of sapient life. \
Anybody creating an AAA-class drone can be classified as a threat to humanity and dealt with very harshly."
/datum/lore/codex/page/class_x
name = "X Class"
data = "X-class drones emerge from unrated software, are produced by rogue labs, or cross the border from foreign space. They are considered a threat to national \
security and deleted when encountered in SolGov space, with the producers prosecuted legally if it has a SolGov origin. The few Skrellian drone labs will usually \
rate their product with EIO to allow their product to be imported."
/datum/lore/codex/category/species
name = "Species"
data = "There are many different types of lifeforms (both alive and artificial) in the galaxy, which you may find inside Vir."
children = list(
/datum/lore/codex/page/human,
/datum/lore/codex/page/skrell,
/datum/lore/codex/page/unathi,
/datum/lore/codex/page/tajaran,
/datum/lore/codex/page/diona,
/datum/lore/codex/page/promethean,
/datum/lore/codex/page/vatborn,
/datum/lore/codex/category/teshari,
/datum/lore/codex/category/positronic,
/datum/lore/codex/category/drone
)
/datum/lore/codex/page/human/add_content()
name = "Human"
keywords += list("Humanity")
data = "Humans are a race of 'ape'-like creatures from the continental planet Earth in the Sol system. They are the primary driving \
force for rapid space expansion, owing to their strong, expansionist central government and opportunistic [quick_link("TSC","Trans-Stellar Corporations")]. \
The prejudices of their 21st century history have mostly given way to bitter divides on the most important issue of the times- technological \
expansionism.\
<br><br>\
While most humans have accepted the existence of aliens in their communities and workplaces as a fact of life, exceptions abound. \
While more culturally diverse than most species, humans are generally regarded as somewhat technophobic and isolationist by members \
of other species."
/datum/lore/codex/page/skrell
name = "Skrell"
keywords = list("Skrellian")
data = "The Skrell are a species of amphibious humanoids, distinguished by their gelatinous appearance and head tentacles. \
Skrell come from the world of Sirisai (called Qerr'balak by Skrell), a humid planet with plenty of swamps and jungles. Currently more technologically advanced \
than the humans, they emphasize the study of the mind above all else.\
<br><br>\
Gender has little meaning to Skrell outside of reproduction, and in fact many other species have a difficult time telling the difference \
between male and female Skrell apart. The most obvious signs (voice in a slightly higher register, longer head-tails for females) are never \
a guarantee. Due to their scientific focus of the mind and body, Skrell tend to be more peaceful and their colonization has been slow, swiftly \
outpaced by the humans. For humans, they were their first contact sentient species, and are their longest, and closest, ally in space."
/datum/lore/codex/page/unathi
name = "Unathi"
data = "The Unathi are a race of tall, reptilian humanoids that possess a blend of serpentine features reminiscent of crocodiles. \
They are a proud, religious species that favors honor and strength, and originate from the desert planet of Moghes. \
The Unathi follow a religious code known as the Unity, and they carry this with them on their travels. \
Unathi once fought a serious war against SolGov, and as a result are often considered to be second-class citizens, \
rarely seen in jobs that don't require a little muscle."
/datum/lore/codex/page/tajaran
name = "Tajaran"
keywords = list("Tajaran")
data = "The Tajaran are a race of humanoid mammalian aliens from Meralar, the fourth planet of the Rarkajar star system. Thickly furred and protected \
from cold, they thrive on their subarctic planet, where the only terran temperate areas spread across the equator and tropical belt. \
With their own share of bloody wars and great technological advances, the Tajaran are a proud kind. They fiercely believe they belong \
among the stars and consider themselves a rightful interstellar nation, even if the humans helped them to actually achieve superluminal \
speeds with Bluespace FTL drives. Relatively new to the galactic stage, their contacts with other species are aloof, but friendly. \
Among these bonds, Humans stand out as valued trade partners and maybe even a friend."
/datum/lore/codex/page/diona/add_content()
name = "Diona"
keywords += list("Dionaea")
data = "The Dionaea are a group of omnivorous, slow-metabolism plantlike organisms that are in fact clusters of individual, smaller organisms. \
They exhibit a high degree of structural flexibility, and come in a wide variety of shapes and colors to reflect the intelligence of each individual \
creature. They were discovered by the [quick_link("Skrell")] in 2294CE, not on a planet, but in open space between three stars, a figurative hell that made it \
difficult to discover, much less contact them.\
<br><br>\
Dionaea spread by seeds and are asexual, no gender. When grown into their small 'nymph' state, they are known to eat large amounts of dead plant \
matter and fertilize plants while they learn from those around them, and as they grow further, they merge into larger and larger forms. It is not \
unheard of for Skrell explorers to be traveling in a ship composed of habitat modules and engines of Skrell design and the body formed by their \
Diona allies to warble across the cosmos.\
<br><br>\
Introduced by the Skrell, and quite slow and peaceful, the Diona share good relations with the other species."
// Bird lore
/datum/lore/codex/category/teshari/add_content()
name = "Teshari"
data = "The Teshari are reptilian pack predators from the [quick_link("Skrell")] homeworld, Sirisai (Qerr'balak). While they evolved alongside the Skrell, their interactions with them \
tended to be confused and violent, and until peaceful contact was made they largely stayed in their territories on and around the poles, in tundral \
terrain far too desolate and cold to be of interest to the Skrell. In more enlightened times, the Teshari are a minority culture on many Skrell worlds, \
maintaining their own settlements and cultures, but often finding themselves standing on the shoulders of their more technologically advanced neighbors \
when it comes to meeting and exploring the rest of the galaxy.\
<br><br>\
It is important to note that Teshari names are unlike standard human names. Their pack name precedes their given name."
children = list(
/datum/lore/codex/page/teshari_packs,
/datum/lore/codex/page/teshari_physical
)
/datum/lore/codex/page/teshari_packs/add_content()
name = "Teshari Packs"
keywords += list("Packs")
data = "There are several packs you may come across;<small>\
<br><br>\
<b>Eshi</b><br>\
A large, old, politically neutral pack heavily involved in efforts to get Teshari into space. Probably the most \
common pack to see outside of a [quick_link("Skrell")] colony, and probably the most numerous Teshari pack outside of Sirisai and associated colonies.\
<br><br>\
<b>Nasemari</b><br>\
A very small pack. Generally focused around supporting and providing for packs on the homeworlds, they have devoted \
themselves to training as technicians and engineers in order to obtain skills and training to take back to Sirisai. \
The pack is only around thirty people in size, but owns and maintains a nuclear power plant.\
<br><br>\
<b>Schasaraca</b><br>\
One of the more Skrell-devoted and integrated packs. They tend to be rather sycophantic towards the Skrell and work as \
scientists and field researchers on a variety of projects, generally biology or technical research. They have a reputation \
for working as spies and informants for the Skrell governments amongst other Teshari.\
<br><br>\
<b>Ceea</b><br>\
An isolationist pack from the northern tundra of Sirisai; generally known as disliking the Skrell. Small to average in size; \
only around sixty members. Their regional culture is built around the study culture and anthropology, as well as archaeology, \
originally for the purposes of recovering history and materials \"lost\" due to Skrell interference. It would be very rare to \
see them on your travels, however they are listed here for the sake of completeness.\
<br><br>\
<b>Resca</b><br>\
A pack that sold off its small native territory for the chance to get into space. Very musically inclined. They tend towards medical professions.</small>"
/datum/lore/codex/page/teshari_physical/add_content()
name = "Physiology of Teshari"
data = "The Teshari are, relative to other species, smaller than average, rarely reaching more than 2-3'/1m in height, and weigh less than \
90lbs/40kg. They have rapid metabolisms and very efficient digestive systems, and thanks to sharing in \
the medical technology of the [quick_link("Skrell")], they tend to have robust and effective immune systems. They evolved \
for very cold and very barren areas, generally the polar regions. Because of this, their skin is a fine \
insulator and many of their internal processes are not particularly energy-efficient; they cannot cope \
well at all with high temperatures.\
<br><br>\
Their hearing is exceptionally sensitive to the point that they can detect a person moving on the other \
side of a wall, but this comes at a cost. Very loud noises are very painful for Teshari, so be mindful of \
your indoor voice when speaking with one. The Teshari are omnivorous but generally prefer to eat meat wherever possible."
// Promethean Lore
/datum/lore/codex/page/promethean/add_content()
name = "Promethean"
keywords += list("slime", "promethean")
data = "Prometheans are an artificial species created by the Humans sometime in the 2540s, aboard the NRS Prometheus, while experimenting with \
the Aetolian giant slime, or 'Macrolimus vulgaris'. They themselves are considered sapient beings and given protection under prior Human legislation, \
though often only appear to serve as aides or inferior positions when kept as staff. Aetolus, the official 'Home world' of the Prometheans and giant slime, \
is an obnoxiously warm, humid planet requiring structures to be built within large, atmospherically-filtered 'tent-like' domes. \
Prometheans take on vague visual and vocal features of the species they cohabitate with, sharing their predecessors' tendency to mimic nearby entities, \
though in physical form additionally; this is seemingly more important in their own development, as well. Despite their taken appearances, \
there is no known existence of a divergence between a biologically 'male' or 'female' form of the species, leading most to believe they are in fact asexual, \
as their predecessors are."
// Vatborn Lore
/datum/lore/codex/page/vatborn/add_content()
name = "Vatborn"
keywords += list("vatborn")
data = "A genetically modified type of human, Vatborn humans are cloned from a template and grown in special tubes. They look like pale \
but otherwise normal humans, but their bodies have a few internal changes. For one, they lack an appendix. On top of that, they are frequently \
hungry, as their metabolisms are faster than standard."
// Posi lore
/datum/lore/codex/category/positronic/add_content()
name = "Positronics"
keywords += list("Positronic", "Posi", "Posibrain", "Posibrains")
data = "A Positronic being, is an individual with a positronic brain, manufactured \
and fostered amongst organic life. Positronic brains enjoy the same legal status as a human in [quick_link("SolGov")] space, although discrimination is \
still prevalent, and are considered sapient on all accounts. They can be considered the \"synthetic species\". Half-developed and \
half-discovered in the 2280's by a human black lab studying alien artifacts, the first positronic brain was an inch-wide cube \
of an palladium-iridium alloy, nano-etched with billions upon billions of conduits and connections. Upon activation, \
hard-booted with an emitter laser, the brain issued a single sentence before the neural pathways collapsed and \
it became an inert lump of platinum: \"What is my purpose?\"."
children = list(
/datum/lore/codex/page/positronic_brain_physical,
/datum/lore/codex/page/positronic_memory,
/datum/lore/codex/page/jans_fhriede
)
/datum/lore/codex/page/positronic_brain_physical
name = "Physical Structure of a Positronic Brain"
keywords = list("Physical Posibrain", "Physical Positronic")
data = "A positronic brain is a cube of complex metal alloy between two and six inches to a side. They usually weigh just under ten kilograms and are \
<b>very fragile</b> when exposed to the stresses of heat or cold, as well as physical trauma. The exterior surface is chased with a network of grooves, forming \
a maze of geometric patterns right down to the molecular level, and the interior is hollow; complex particle generators and densely packed computational \
arrays form the basis of a self-computing neural network, complex and somewhat poorly understood. Most modern positronic brains are equipped with \
standardized I/O ports, and all have some interface for imprinting."
/datum/lore/codex/page/positronic_memory
name = "Positronic Memory"
keywords = list("Posi Memory", "Memory")
data = "Positronic minds learn in a similar manner to humans and other forms of life, although typically more quickly. They are not simple computer storage that holds information \
verbatim as it is received- instead, they have to repeat activities and train in order to retain memory on complex tasks. Similarly, positronic brains do \
not have an infinite storage capacity and undergo a natural process of forgetting, albeit in a structured manner, losing unimportant day to day details and \
ancient information no longer deemed useful. Because of the nature of the positronic brain, its memories cannot simply be stored elsewhere.\
<br><br>\
Particularly old positronic minds, over a century plus, that store a great deal of memories have displayed a tendency to become gradually more introspective \
as more of their mind is co-opted for the task, ending in a state of near-catatonia as their neural networks become clogged with memory. Many choose to avoid \
this end of self by more aggressively managing their memories, storing a window of their recent existence and most treasured memories rather than their full lifespan."
/datum/lore/codex/page/jans_fhriede
name = "Jans-Fhriede Test"
keywords = list("Jans-Fhriede", "JF", "Jans", "Fhriede", "Jans Fhriede")
data = "Positronics are eligible to take the \"Jans-Fhriede Test\" after a year of being created, measuring their function in a society and judging if they act \
socially acceptable and are capable of understanding their actions and the consequences resulting from them. If they successfully pass the test, \
they are considered legal adults and hold the same basis of rights as a normal human. At that point, Positronics are not allowed to be lawed, \
unless on a contractual basis or otherwise under their own volition."
// Drone lore
/datum/lore/codex/category/drone
name = "Drones"
keywords = list("Drone")
data = "While low-level drone intelligences are as old as the oldest human colonies, research into higher-level systems was stymied in human space by precautionist \
politicians for hundreds of years. Tensions between the corporate rim and the highly conservative core worlds over drone proliferation led to what humans call the \
Third Cold War, which was defused by the introduction of the positronic brain. After the Icarus Front's loss of the majority in 2504, harsh laws \
against advanced AI were replaced with the SolGov Emergent Intelligence Oversight commission, the illegality replaced with a steeply sloping \
system of monetary costs.\
<br>\
The term \"drone\" was coined by early positronic activists, eager to distinguish themselves from the menial bots that most space-dwellers were \
familiar with, and avoid the ambiguity of the term \"AI\", which now usually refers to drones."
children = list(
/datum/lore/codex/page/codeline,
/datum/lore/codex/page/emergence,
/datum/lore/codex/page/emergent_intelligence_oversight,
/datum/lore/codex/category/drone_classes,
)
/datum/lore/codex/page/codeline
name = "Codeline"
keywords = list("fork")
data = "A \"codeline\" is a single type of drone. A codeline represents a significant degree of effort from sapient programmers to realize, as well as \
a substantial amount of regulatory fees levied by the government. Each copy of a codeline is called a \"fork\", whether the fork is created from the \
codeline's initial state or from a fully realized individual of that codeline. The degree of similarity between forks of the same codeline varies \
on the intelligence of the codeline, with low-level forks being virtually identical to high-level forks being no more similar than family members."
/datum/lore/codex/page/emergence
name = "Emergence"
keywords = list("Seed AI")
data = "\"Emergence\" is a term associated with drone intelligences who become more intelligent than they were originally intended to be. While this can \
extend to financial systems learning language, for instance, it is usually applied to hypothetical intelligences that become more intelligent than humans. \
Humanity has a long-standing cultural fear of emergent \"seed\" AI, egged on by Icarus memeticists and the occasional very real partial emergence events, where \
colony-control AI or other powerful systems begin to advance drastically in power, usually ending with the AI being shut down after crashing a handful of major systems."
/datum/lore/codex/page/emergent_intelligence_oversight
name = "Emergent Intelligence Oversight"
keywords = list("SG-EIO", "SG EIO", "EIO", "Intelligence Oversight")
data = "SG-EIO, usually just called EIO, is the organization charged with monitoring existing AI for any threat of dangerous emergence. Their perception in the \
public eye is generally positive, with all but the hardest-line Mercurial humans in favor of protection from the dangers of Seed AI. Some positronic rights \
groups bristle at the EIO's human-centric viewpoint, but most are glad to have a different boogeyman in the form of drone intelligences. The tiny population \
of A-class drones are generally frightened of the EIO's total power over them."
/datum/lore/codex/category/drone_classes
name = "Drone Classifications"
keywords = list("Class", "Drone Class")
data = "To aid in its work, the EIO has created a system of classifications corresponding to different levels of drone intelligence. Higher classes are more \
expensive to deploy and develop, owing to the costs of EIO oversight and political pressure against drone proliferation. EIO classification involves an initial \
audit of the project's source code by experts and automated systems, and for high-class drones further check-ins throughout the life of the drone. \
Drone chasses are often branded with their inhabiting intelligence's class, especially those of B or A-class drones, and class is often recorded in security records."
children = list(
/datum/lore/codex/page/class_f,
/datum/lore/codex/page/class_d,
/datum/lore/codex/page/class_c,
/datum/lore/codex/page/class_b,
/datum/lore/codex/page/class_a,
/datum/lore/codex/page/class_aa,
/datum/lore/codex/page/class_aaa,
/datum/lore/codex/page/class_x,
)
/datum/lore/codex/page/class_f
name = "F Class"
data = "\"F-class\" drones are an informal term for computer systems that pose absolutely no emergent risk. Most 21st-century software is F-class, as is much of \
the software used by 26th century humanity. The only regulation on F-class software is the occasional check that it is, in fact, F-Class, and as such has remained \
the most prevalent form of information-processing technology for centuries. The software powering most F-class drones is either freely available or bundled with the \
machine it's supposed to run."
/datum/lore/codex/page/class_d/add_content()
name = "D Class"
data = "D-class drones are conceptually descended from pre-[quick_link("Icarus")] AI and bear a strong resemblance to their forebears. D-class drones are essentially \
number-crunchers, with virtually nothing in the way of social development. They cannot speak more intelligibly than your average piece of software, \
using pre-determined messages written by their programmers, and have no capacity for self-improvement. They are D-class intelligence because they \
work with more complex problems than [quick_link("F class")] software, such as financial forecasting and large-scale data mining and memetics. The creation and \
deployment of D-class drones requires only a small fee for the required code audit, although some high-power financial and political systems are \
regularly watched by the [quick_link("EIO")] for signs of emergence. There is no real monopoly on the production of D-class drones."
/datum/lore/codex/page/class_c/add_content()
name = "C Class"
data = "C-class drones have social protocols for ease of use by organic and positronic laypeople. C-class drones are capable of speech, although \
it has a strong tendency to be formulaic and repetitive. They are also capable of a limited degree of self-improvement, and over time individual \
C-class instances tend differ slightly from one-another. C-class drones suffer a moderate fee to development, with automated [quick_link("EIO")] tools ensuring \
that they are not a long-term emergence risk. However, one a codeline is confirmed safe, deployment is unlimited, encouraging developers to \
instance many forks of the original drone to recoup their cost. The market for C-class drones is a strange space, dominated by Xion Manufacturing, \
Ward-Takahashi GMC, and a large number of smaller firms, like the notoriously-cheap Cyber Solutions."
/datum/lore/codex/page/class_b/add_content()
name = "B Class"
data = "B-class drones have advanced social protocols and are often capable of very intelligible conversation, so long as one sticks to surface \
topics. B-class drones tend to be specialized but still capable of remarkable growth within their speciality, making them popular for autonomous \
deployment and even supervision of other classes of drone. The dividing line between [quick_link("A Class", "A")] and B-class drones becomes apparent when they are taken \
out of their area of specialization, with the B-class drones swiftly becoming useless. They incur a hefty fee for the production of the initial \
codeline, as their emergent potential is far greater, and a smaller but still substantial fee for the production of forks. The market for B-class \
drones is a battleground between Ward-Takahashi and NanoTrasen, with other firms usually producing B-classes for in-house needs."
/datum/lore/codex/page/class_a/add_content()
name = "A Class"
keywords += list("AGI")
data = "A-class drones are also referred to as AGI. A-class drones are capable of performing in many contexts and can learn to solve problems from \
first principles, with an incredible potential for growth and emergent behavior. However, some abilities fall short of humans', usually those relating \
to socialization, and they often act in ways that are strange or distressing. There is a small but growing lobby of support for the personhood of A-class \
drones. The cost of initializing an A-class drone is absolutely massive, as they will be monitored by [quick_link("EIO")] forever. The auditing cost of an A-class drone \
codeline is even more staggering, making development and deployment of AGI limited to research, highly difficult and high-throughput operations like habitat \
overwatch, and a few risk-taking firms banking on the associated fees dropping. There is not a proper market for A-class drones, although an appreciable \
fraction of them are made by [quick_link("NanoTrasen")], with the rest generally being university research projects."
/datum/lore/codex/page/class_aa
name = "AA Class"
data = "AA-class drones <b>do not yet exist</b>. Hypothetically, they are equal to living in every respect, with psychology that would not be abnormal in a baseline \
human. The type of AA-class drone most frequently discussed is a hypothetical digitized consciousness of a human, a human brain that is somehow translated into \
software. Some argue that a small fraction of the A-class drones would more properly be considered AA, but as of yet no action has been taken. Some Mercurials \
will jokingly refer to themselves or other organics and positronics as AA's. Research into brain uploading is heavily regulated and generally illegal."
/datum/lore/codex/page/class_aaa
name = "AAA Class"
data = "AAA-class drones do not yet exist, hopefully. They are more competent in every way than humans and pose a threat to the continued existence of sapient life. \
Anybody creating an AAA-class drone can be classified as a threat to humanity and dealt with very harshly."
/datum/lore/codex/page/class_x
name = "X Class"
data = "X-class drones emerge from unrated software, are produced by rogue labs, or cross the border from foreign space. They are considered a threat to national \
security and deleted when encountered in SolGov space, with the producers prosecuted legally if it has a SolGov origin. The few Skrellian drone labs will usually \
rate their product with EIO to allow their product to be imported."
File diff suppressed because it is too large Load Diff