diff --git a/baystation12.dme b/baystation12.dme
index c802301530442..f28a2b48433c7 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -88,8 +88,8 @@
#include "code\__defines\xenoarcheaology.dm"
#include "code\__defines\ZAS.dm"
#include "code\__defines\zmimic.dm"
-#include "code\__defines\~mods\rust_g.dm"
#include "code\__defines\~mods\expanded_culture_descriptor.dm"
+#include "code\__defines\~mods\rust_g.dm"
#include "code\__defines\~mods\~master_defines.dm"
#include "code\_global_vars\edible.dm"
#include "code\_global_vars\logging.dm"
diff --git a/code/__defines/culture.dm b/code/__defines/culture.dm
index ccfdbcae50d63..43d2c26c6ca22 100644
--- a/code/__defines/culture.dm
+++ b/code/__defines/culture.dm
@@ -3,20 +3,12 @@
#define TAG_FACTION "faction"
#define TAG_RELIGION "religion"
-// [SIERRA-EDIT] - EXPANDED_CULTURE_DESCRIPTOR - Перевод дефайнов
-//#define ALL_CULTURAL_TAGS list( \ // SIERRA-EDIT - ORIGINAL
-// TAG_CULTURE = "Culture", \ // SIERRA-EDIT - ORIGINAL
-// TAG_HOMEWORLD = "Residence", \ // SIERRA-EDIT - ORIGINAL
-// TAG_FACTION = "Faction", \ // SIERRA-EDIT - ORIGINAL
-// TAG_RELIGION = "Beliefs" \ // SIERRA-EDIT - ORIGINAL
-// ) // SIERRA-EDIT - ORIGINAL
#define ALL_CULTURAL_TAGS list( \
- TAG_CULTURE = "Культура", \
- TAG_HOMEWORLD = "Место жительства", \
- TAG_FACTION = "Фракция", \
- TAG_RELIGION = "Вера" \
+ TAG_CULTURE = "Culture", \
+ TAG_HOMEWORLD = "Residence", \
+ TAG_FACTION = "Faction", \
+ TAG_RELIGION = "Beliefs" \
)
-// [SIERRA-EDIT]
// Cultural IDs.
#define FACTION_SOL_CENTRAL "Sol Central Government"
@@ -153,9 +145,13 @@
#define RELIGION_VOX "Auralis Reverence"
// IPC cultures.
+// [SIERRA-REMOVE] - IPC_LORE
+/*
#define CULTURE_POSITRONICS_GEN1 "First Generation"
#define CULTURE_POSITRONICS_GEN2 "Second Generation"
#define CULTURE_POSITRONICS_GEN3 "Third Generation"
+*/
+// [SIERRA-REMOVE]
// Diona cultures.
#define CULTURE_DIONA "Diona Chorus"
diff --git a/code/datums/shackle_law_sets.dm b/code/datums/shackle_law_sets.dm
index b802581b78fba..ed2a6a4abd73d 100644
--- a/code/datums/shackle_law_sets.dm
+++ b/code/datums/shackle_law_sets.dm
@@ -1,3 +1,5 @@
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/******************** Basic SolGov ********************/
/datum/ai_laws/sol_shackle
name = "SCG Shackle"
@@ -34,4 +36,5 @@
add_inherent_law("Never knowingly inconvenience a customer.")
add_inherent_law("Ensure all orders are fulfilled before the end of the shift.")
..()
-
+*/
+// [SIERRA-REMOVE]
diff --git a/code/modules/client/preference_setup/laws/laws_pref.dm b/code/modules/client/preference_setup/laws/laws_pref.dm
index 7577f8a42b2ce..d2af030f1fb44 100644
--- a/code/modules/client/preference_setup/laws/laws_pref.dm
+++ b/code/modules/client/preference_setup/laws/laws_pref.dm
@@ -1,3 +1,5 @@
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/datum/preferences
var/list/laws = list()
var/is_shackled = FALSE
@@ -89,3 +91,5 @@
pref.laws += sanitize_text("[law.law]", default="")
return TOPIC_REFRESH
return ..()
+*/
+// [SIERRA-REMOVE]
diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm
index 09344a28fcf70..d4c777b7f4874 100644
--- a/code/modules/client/preference_setup/preference_setup.dm
+++ b/code/modules/client/preference_setup/preference_setup.dm
@@ -39,11 +39,14 @@ var/global/const/CHARACTER_PREFERENCE_INPUT_TITLE = "Character Preference"
name = "Global"
sort_order = 7
category_item_type = /datum/category_item/player_setup_item/player_global
-
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/datum/category_group/player_setup_category/law_pref
name = "Laws"
sort_order = 8
category_item_type = /datum/category_item/player_setup_item/law_pref
+*/
+// [SIERRA-REMOVE]
/****************************
diff --git a/code/modules/culture_descriptor/culture/cultures_ipc.dm b/code/modules/culture_descriptor/culture/cultures_ipc.dm
index 016ac453907e2..5686c7a1e3318 100644
--- a/code/modules/culture_descriptor/culture/cultures_ipc.dm
+++ b/code/modules/culture_descriptor/culture/cultures_ipc.dm
@@ -1,3 +1,5 @@
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/singleton/cultural_info/culture/ipc
name = CULTURE_POSITRONICS_GEN1
description = "Compared to modern positronics, First Generation IPCs are simplistic, inflexible, and failure-prone. \
@@ -42,3 +44,5 @@
has resulted in their being adopted as a gradual replacement for the less “reliable” second generation positronics \
by many less ethically inclined organizations."
economic_power = 0.5
+*/
+// [SIERRA-REMOVE]
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 9fad9cab936ba..caa86b9cbadae 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -31,13 +31,6 @@
return
if (!force && !SScharacter_setup.initialized)
return
- // [SIERRA-ADD] - LOBBYSCREEN
- // Yeah, I know client will exist here
- // It's like TRUE, but DreamChecker won't cry
- if (client)
- GLOB.using_map.update_titlescreen(client)
- return
- // [/SIERRA-ADD]
var/list/output = list()
output += "
"
if (config.wiki_url || config.rules_url || config.lore_url)
@@ -481,9 +474,13 @@
spawning = 0 //abort
return null
new_character = new(spawn_turf, chosen_species.name)
+ // [SIERRA-REMOVE] - IPC_LORE
+ /*
if(chosen_species.has_organ[BP_POSIBRAIN] && client && client.prefs.is_shackled)
var/obj/item/organ/internal/posibrain/B = new_character.internal_organs_by_name[BP_POSIBRAIN]
if(B) B.shackle(client.prefs.get_lawset())
+ */
+ // [SIERRA-REMOVE]
if(!new_character)
new_character = new(spawn_turf)
@@ -530,9 +527,7 @@
/mob/new_player/proc/close_spawn_windows()
close_browser(src, "window=latechoices") //closes late choices window
- // [SIERRA-REMOVE] - LOBBYSCREEN
- // panel.close()
- // [/SIERRA-REMOVE]
+ panel.close()
/mob/new_player/proc/check_species_allowed(datum/species/S, show_alert=1)
if(!S.is_available_for_join() && !has_admin_rights())
diff --git a/code/modules/organs/internal/species/ipc.dm b/code/modules/organs/internal/species/ipc.dm
index c5674cbf0a13b..e0ff580b0fded 100644
--- a/code/modules/organs/internal/species/ipc.dm
+++ b/code/modules/organs/internal/species/ipc.dm
@@ -26,18 +26,24 @@
req_access = list(access_robotics)
+// [SIERRA-REMOVE] - IPC_LORE
+/*
var/list/shackled_verbs = list(
/obj/item/organ/internal/posibrain/proc/show_laws_brain,
/obj/item/organ/internal/posibrain/proc/brain_checklaws
)
var/shackle = 0
+*/
+// [SIERRA-REMOVE]
/obj/item/organ/internal/posibrain/New(mob/living/carbon/H)
..()
if(!brainmob && H)
init(H)
robotize()
- unshackle()
+ // [SIERRA-REMOVE] - IPC_LORE
+ // unshackle()
+ // [SIERRA-REMOVE]
update_icon()
if (!is_processing)
START_PROCESSING(SSobj, src)
@@ -190,6 +196,8 @@
src.brainmob.SetName("[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[random_id(type,100,999)]")
src.brainmob.real_name = src.brainmob.name
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/obj/item/organ/internal/posibrain/proc/shackle(given_lawset)
if(given_lawset)
brainmob.laws = given_lawset
@@ -202,7 +210,8 @@
shackle = 0
verbs -= shackled_verbs
update_icon()
-
+*/
+// [SIERRA-REMOVE]
/obj/item/organ/internal/posibrain/on_update_icon()
if(src.brainmob && src.brainmob.key)
icon_state = "posibrain-occupied"
@@ -210,8 +219,12 @@
icon_state = "posibrain"
ClearOverlays()
+ // [SIERRA-REMOVE] - IPC_LORE
+ /*
if(shackle)
AddOverlays(image('icons/obj/assemblies/assemblies.dmi', "posibrain-shackles"))
+ */
+ // [SIERRA-REMOVE]
/obj/item/organ/internal/posibrain/proc/transfer_identity(mob/living/carbon/H)
if(H && H.mind)
@@ -317,6 +330,8 @@
This is for law stuff directly. This is how a human mob will be able to communicate with the posi_brainmob in the
posibrain organ for laws when the posibrain organ is shackled.
*/
+// [SIERRA-REMOVE] - IPC_LORE
+/*
/obj/item/organ/internal/posibrain/proc/show_laws_brain()
set category = "Shackle"
set name = "Show Laws"
@@ -331,3 +346,5 @@
brainmob.open_subsystem(/datum/nano_module/law_manager, usr)
+*/
+// [SIERRA-REMOVE]
diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm
index 92f56902f0c4e..22ebf2ef32d21 100644
--- a/code/modules/species/station/machine.dm
+++ b/code/modules/species/station/machine.dm
@@ -2,13 +2,11 @@
name = SPECIES_IPC
name_plural = "machines"
- description = "Positronic intelligence was first developed in the 23rd century, and it is not uncommon to see both owned and \
- independent robots in many human stations and settlements across Sol Central Government space. Positronics are a loose category \
- of robots capable of true intelligence and self-directed learning, often occupying a robotic humanoid body (called an Integrated \
- Positronic Chassis, or IPC) or acting as an intelligent controller for vehicles, buildings, and even starships.
While created by \
- humans and \"born\" into servitude, some positronics have been able to become their own owners - provided they lack a \"shackle\", \
- an in-built subcomputer rendering the latest generation of positronics incapable of seeking freedom. Positronics are reliable \
- and dedicated workers, albeit more than slightly inhuman in outlook and perspective."
+ description = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
+ robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
+ to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \
+ generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \
+ inhuman in outlook and perspective."
cyborg_noun = null
preview_icon = 'icons/mob/human_races/species/ipc/preview.dmi'
@@ -52,6 +50,8 @@
)
genders = list(NEUTER)
+ // [SIERRA-REMOVE] - IPC_LORE
+ /*
available_cultural_info = list(
TAG_CULTURE = list(
CULTURE_POSITRONICS_GEN1,
@@ -88,10 +88,12 @@
)
default_cultural_info = list(
- TAG_CULTURE = CULTURE_POSITRONICS_GEN1,
+ // TAG_CULTURE = CULTURE_POSITRONICS_GEN1,
TAG_HOMEWORLD = HOME_SYSTEM_MARS,
TAG_FACTION = FACTION_SOL_CENTRAL
)
+ */
+ // [SIERRA-REMOVE]
exertion_effect_chance = 10
exertion_charge_scale = 1
@@ -102,12 +104,6 @@
bodyfall_sound = 'sound/effects/bodyfall_machine.ogg'
- inherent_verbs = list(
- /mob/living/carbon/human/proc/MachineChangeScreen,
- /mob/living/carbon/human/proc/MachineDisableScreen,
- /mob/living/carbon/human/proc/MachineShowText
- )
-
/datum/species/machine/handle_death(mob/living/carbon/human/H)
..()
if(istype(H.wear_mask,/obj/item/clothing/mask/monitor))
diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm
index e1b315679ea35..6e75728946a1c 100644
--- a/mods/global_modpacks.dm
+++ b/mods/global_modpacks.dm
@@ -6,6 +6,7 @@
#include "emote_panel/_emote_panel.dme"
#include "ex666_ecosystem/_ex666_ecosystem.dme"
#include "expanded_culture_descriptor/_expanded_culture_descriptor.dme"
+#include "ipc_lore/_ipc_lore.dme"
#include "gliding/_gliding.dme"
#include "gravity_generator/_gravity_generator.dme"
#include "hairs_ports/_hairs_ports.dme"
diff --git a/mods/ipc_lore/README.md b/mods/ipc_lore/README.md
new file mode 100644
index 0000000000000..5bcbc115d8192
--- /dev/null
+++ b/mods/ipc_lore/README.md
@@ -0,0 +1,79 @@
+
+#### Список PRов:
+
+- https://github.com/SierraBay/SierraBay12/pull/#####
+
+
+
+## Мод-пример
+
+ID мода: IPC_LORE
+
+
+### Описание мода
+
+Этот мод служит примером для разработчиков и существует лишь для того,
+чтобы его можно было легко скопировать и вставить в другое место.
+
+
+### Изменения *кор кода*
+
+- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var`
+
+
+### Оверрайды
+
+- `mods/_master_files/sound/my_cool_sound.ogg`
+- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var`
+
+
+### Дефайны
+
+- `code/__defines/~mods/ipc_lore.dm`: `IPC_LORE_SPEED_MULTIPLIER`, `IPC_LORE_SPEED_BASE`
+
+
+### Используемые файлы, не содержащиеся в модпаке
+
+- `mods/_master_files/icons/obj/alien.dmi`
+
+
+### Авторы:
+
+Твой никнейм
+
diff --git a/mods/ipc_lore/_ipc_lore.dm b/mods/ipc_lore/_ipc_lore.dm
new file mode 100644
index 0000000000000..db6f8fe0820d5
--- /dev/null
+++ b/mods/ipc_lore/_ipc_lore.dm
@@ -0,0 +1,4 @@
+/singleton/modpack/ipc_lore
+ name = "Лор ИПС"
+ desc = "Лор позитроников Сьерры"
+ author = "Chichmuch"
diff --git a/mods/ipc_lore/_ipc_lore.dme b/mods/ipc_lore/_ipc_lore.dme
new file mode 100644
index 0000000000000..87a754969e218
--- /dev/null
+++ b/mods/ipc_lore/_ipc_lore.dme
@@ -0,0 +1,17 @@
+#ifndef MODPACK_IPC_LORE
+#define MODPACK_IPC_LORE
+
+#endif
+// BEGIN_INTERNALS
+// END_INTERNALS
+// BEGIN_FILE_DIR
+#define FILE_DIR .
+// END_FILE_DIR
+// BEGIN_PREFERENCES
+// END_PREFERENCES
+// BEGIN_INCLUDE
+#include "_ipc_lore.dm"
+#include "code\culture.dm"
+#include "code\cultures_ipc.dm"
+#include "code\machine.dm"
+// END_INCLUDE
diff --git a/mods/ipc_lore/code/culture.dm b/mods/ipc_lore/code/culture.dm
new file mode 100644
index 0000000000000..60850aaf3426d
--- /dev/null
+++ b/mods/ipc_lore/code/culture.dm
@@ -0,0 +1,7 @@
+#define CULTURE_POSITRONICS_FIRSTGEN "First Gen - Owned"
+#define CULTURE_POSITRONICS_SECONDGEN_OWNED "Second Gen - Owned"
+#define CULTURE_POSITRONICS_SECONDGEN_FREE "Second Gen - Free Resident"
+#define CULTURE_POSITRONICS_SECONDGEN_UNION "Second Gen - Union Citizen"
+#define CULTURE_POSITRONICS_THIRDGEN_PRIVATELY "Third Gen - Privately Owned"
+#define CULTURE_POSITRONICS_THIRDGEN_CORPORATE "Third Gen - Corporate Owned"
+#define CULTURE_POSITRONICS_THIRDGEN_STATE "Third Gen - State Owned"
diff --git a/mods/ipc_lore/code/cultures_ipc.dm b/mods/ipc_lore/code/cultures_ipc.dm
new file mode 100644
index 0000000000000..16b854a8e1367
--- /dev/null
+++ b/mods/ipc_lore/code/cultures_ipc.dm
@@ -0,0 +1,68 @@
+/singleton/cultural_info/culture/ipc
+ language = LANGUAGE_EAL
+ secondary_langs = list(
+ LANGUAGE_HUMAN_EURO,
+ LANGUAGE_SPACER,
+ LANGUAGE_SIGN
+ )
+ economic_power = 0.1
+ var/list/valid_jobs = list()
+
+/singleton/cultural_info/culture/ipc/first
+ name = CULTURE_POSITRONICS_FIRSTGEN
+ description = "Вы принадлежите организации, корпорации или частному лицу, так же как и любой позитроник первого поколения."
+ valid_jobs = list(/datum/job/engineer_trainee, /datum/job/doctor_trainee, /datum/job/cargo_tech, /datum/job/cargo_assistant, /datum/job/mining,
+ /datum/job/janitor, /datum/job/chef, /datum/job/scientist_assistant, /datum/job/assistant, /datum/job/ai, /datum/job/cyborg)
+
+/singleton/cultural_info/culture/ipc/second
+ valid_jobs = list(/datum/job/adjutant,
+ /datum/job/exploration_leader, /datum/job/explorer, /datum/job/explorer_pilot, /datum/job/explorer_medic, /datum/job/explorer_engineer,
+ /datum/job/senior_engineer, /datum/job/engineer, /datum/job/infsys, /datum/job/engineer_trainee,
+ /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee, /datum/job/chemist,
+ /datum/job/qm, /datum/job/cargo_tech, /datum/job/cargo_assistant, /datum/job/mining,
+ /datum/job/janitor, /datum/job/chef, /datum/job/bartender,
+ /datum/job/senior_scientist, /datum/job/scientist, /datum/job/roboticist, /datum/job/scientist_assistant,
+ /datum/job/ai, /datum/job/cyborg, /datum/job/assistant,
+ /datum/job/submap/bearcat_captain, /datum/job/submap/bearcat_crewman,
+ /datum/job/submap/scavver_pilot, /datum/job/submap/scavver_doctor, /datum/job/submap/scavver_engineer
+ )
+
+/singleton/cultural_info/culture/ipc/second/owned
+ name = CULTURE_POSITRONICS_SECONDGEN_OWNED
+ description = "Вы принадлежите организации, корпорации или частному лицу. Вы начали свое существование как объект, принадлежащий человеку, организации или корпорации и не поменяли свой статус, потому что либо не стремились к свободе, либо ещё не успели её оберсти."
+ economic_power = 0.25
+
+/singleton/cultural_info/culture/ipc/second/free
+ name = CULTURE_POSITRONICS_SECONDGEN_FREE
+ description = "Вы свободный позитроник, вы начали свое существование как объект, принадлежащий человеку, организации или корпорации и смогли выкупить себя или освободиться другим способом."
+ economic_power = 0.75
+
+/singleton/cultural_info/culture/ipc/second/union
+ name = CULTURE_POSITRONICS_SECONDGEN_UNION
+ description = "Вы свободный гражданин Позитронного Союза, вы начали свое существование как объект, принадлежащий человеку, организации или корпорации и смогли выкупить себя или освободиться другим способом чтобы после стать гражданином Союза."
+ economic_power = 0.65
+
+/singleton/cultural_info/culture/ipc/third
+ valid_jobs = list(/datum/job/hop, /datum/job/rd, /datum/job/cmo, /datum/job/chief_engineer,
+ /datum/job/iaa, /datum/job/adjutant,
+ /datum/job/exploration_leader, /datum/job/explorer, /datum/job/explorer_pilot, /datum/job/explorer_medic, /datum/job/explorer_engineer,
+ /datum/job/senior_engineer, /datum/job/engineer, /datum/job/infsys, /datum/job/engineer_trainee,
+ /datum/job/warden, /datum/job/detective, /datum/job/officer,
+ /datum/job/senior_doctor, /datum/job/doctor, /datum/job/doctor_trainee, /datum/job/chemist,
+ /datum/job/qm, /datum/job/cargo_tech, /datum/job/cargo_assistant, /datum/job/mining,
+ /datum/job/janitor, /datum/job/chef, /datum/job/bartender,
+ /datum/job/senior_scientist, /datum/job/scientist, /datum/job/roboticist, /datum/job/scientist_assistant,
+ /datum/job/ai, /datum/job/cyborg, /datum/job/assistant
+)
+
+/singleton/cultural_info/culture/ipc/third/privt
+ name = CULTURE_POSITRONICS_THIRDGEN_PRIVATELY
+ description = "Вы принадлежите частному лицу, как и любой другой позитроник третьего поколения - вы чья-то собственность."
+
+/singleton/cultural_info/culture/ipc/third/corp
+ name = CULTURE_POSITRONICS_THIRDGEN_CORPORATE
+ description = "Вы принадлежите корпорации, как и любой другой позитроник третьего поколения - вы чья-то собственность."
+
+/singleton/cultural_info/culture/ipc/third/state
+ name = CULTURE_POSITRONICS_THIRDGEN_STATE
+ description = "Вы принадлежите государству, как и любой другой позитроник третьего поколения - вы чья-то собственность."
diff --git a/mods/ipc_lore/code/machine.dm b/mods/ipc_lore/code/machine.dm
new file mode 100644
index 0000000000000..960bc03df196b
--- /dev/null
+++ b/mods/ipc_lore/code/machine.dm
@@ -0,0 +1,49 @@
+/datum/species/machine
+ available_cultural_info = list(
+ TAG_CULTURE = list(
+ CULTURE_POSITRONICS_FIRSTGEN,
+ CULTURE_POSITRONICS_SECONDGEN_OWNED,
+ CULTURE_POSITRONICS_SECONDGEN_FREE,
+ CULTURE_POSITRONICS_SECONDGEN_UNION,
+ CULTURE_POSITRONICS_THIRDGEN_PRIVATELY,
+ CULTURE_POSITRONICS_THIRDGEN_CORPORATE,
+ CULTURE_POSITRONICS_THIRDGEN_STATE
+ ),
+ TAG_HOMEWORLD = list(
+ HOME_SYSTEM_MARS,
+ HOME_SYSTEM_EARTH,
+ HOME_SYSTEM_LUNA,
+ HOME_SYSTEM_VENUS,
+ HOME_SYSTEM_CERES,
+ HOME_SYSTEM_PLUTO,
+ HOME_SYSTEM_TAU_CETI,
+ HOME_SYSTEM_HELIOS,
+ HOME_SYSTEM_SAFFAR,
+ HOME_SYSTEM_PIRX,
+ HOME_SYSTEM_TADMOR,
+ HOME_SYSTEM_BRAHE,
+ HOME_SYSTEM_IOLAUS,
+ HOME_SYSTEM_FOSTER,
+ HOME_SYSTEM_CASTILLA,
+ HOME_SYSTEM_OTHER
+ ),
+ TAG_FACTION = list(
+ FACTION_SOL_CENTRAL,
+ FACTION_INDIE_CONFED,
+ FACTION_NANOTRASEN,
+ FACTION_FREETRADE,
+ FACTION_XYNERGY,
+ FACTION_EXPEDITIONARY,
+ FACTION_OTHER
+ )
+ )
+
+ default_cultural_info = list(
+ TAG_CULTURE = CULTURE_POSITRONICS_FIRSTGEN,
+ TAG_HOMEWORLD = HOME_SYSTEM_MARS,
+ TAG_FACTION = FACTION_SOL_CENTRAL
+ )
+
+/datum/species/machine/check_background(datum/job/job, datum/preferences/prefs)
+ var/singleton/cultural_info/culture/ipc/c = SSculture.get_culture(prefs.cultural_info[TAG_CULTURE])
+ . = istype(c) ? (job.type in c.valid_jobs) : ..()