diff --git a/code/__defines/~mods/~master_defines.dm b/code/__defines/~mods/~master_defines.dm index aa6fc63ce575f..7d788238af008 100644 --- a/code/__defines/~mods/~master_defines.dm +++ b/code/__defines/~mods/~master_defines.dm @@ -13,6 +13,10 @@ #define LANGUAGE_SIIK_TAJR "Siik'tajr" // TAJARA - End +// LEGALESE - Start +#define LANGUAGE_LEGALESE "Legalese" +// LEGALESE - End + // UTF8 - Start #undef show_browser #define show_browser(target, content, title) to_target(target, browse(utf_8_html(content), title)) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 04179e1ea51fa..d007d6f35aae2 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -24,6 +24,14 @@ var/global/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/multitool_mode, /mob/living/silicon/ai/proc/toggle_hologram_movement, + // [SIERRA-ADD] - AI - , + /mob/living/silicon/ai/proc/ai_view_images, + /mob/living/silicon/ai/proc/ai_take_image, + /mob/living/silicon/ai/proc/change_floor, + /mob/living/silicon/ai/proc/show_crew_monitor, + /mob/living/silicon/ai/proc/show_crew_records, + /mob/living/silicon/ai/proc/show_crew_manifest, + // [/SIERRA-ADD] , /mob/living/silicon/ai/proc/ai_power_override, /mob/living/silicon/ai/proc/ai_shutdown, /mob/living/silicon/ai/proc/ai_reset_radio_keys diff --git a/code/modules/mob/observer/freelook/chunk.dm b/code/modules/mob/observer/freelook/chunk.dm index 48bca260b0b03..0f61caf9deca2 100644 --- a/code/modules/mob/observer/freelook/chunk.dm +++ b/code/modules/mob/observer/freelook/chunk.dm @@ -23,6 +23,9 @@ var/image/obfuscation = obfuscation_images[T] if(!obfuscation) obfuscation = image(icon, T, icon_state) + // [SIERRA-ADD] - AI + obfuscation.plane = EFFECTS_ABOVE_LIGHTING_PLANE + // [/SIERRA-ADD] obfuscation.layer = OBFUSCATION_LAYER if(!obfuscation_underlay) // Creating a new icon of a fairly common icon state, adding some random color to prevent address searching, and hoping being static kills memory locality diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b7895b025f9e1..2481c3043d517 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -402,6 +402,8 @@ var/acc_mod = burst_accuracy[min(burst, length(burst_accuracy))] var/disp_mod = dispersion[min(burst, length(dispersion))] + // [SIERRA-REMOVE] + /* var/stood_still = last_handled //Not keeping gun active will throw off aim (for non-Masters) if(user.skill_check(SKILL_WEAPONS, SKILL_MASTER)) @@ -415,7 +417,59 @@ else acc_mod -= w_class - ITEM_SIZE_NORMAL acc_mod -= bulk - + */ + // [/SIERRA-REMOVE] + // [SIERRA-ADD] + acc_mod -= bulk + switch(bulk) + if(1) //pistols + if(user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) + acc_mod += bulk + acc_mod += accuracy + if(2) //revolvers + if(user.skill_check(SKILL_WEAPONS, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) + acc_mod += bulk + acc_mod += accuracy + if(3) //SMGs + if(user.skill_check(SKILL_HAULING, SKILL_BASIC) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + if(user.skill_check(SKILL_HAULING, SKILL_BASIC) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + acc_mod += bulk + acc_mod += accuracy + else + acc_mod += bulk / 2 + acc_mod += accuracy * 0.75 + if(4 to 5) //carabines and assault rifles + if(user.skill_check(SKILL_HAULING, SKILL_BASIC) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + if(user.skill_check(SKILL_HAULING, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + acc_mod += bulk + acc_mod += accuracy + else + acc_mod += bulk / 2 + acc_mod += accuracy * 0.75 + if(6) //sniper rifles + if (user.skill_check(SKILL_HAULING, SKILL_BASIC) && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) + if(user.skill_check(SKILL_HAULING, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + if(user.skill_check(SKILL_HAULING, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_EXPERIENCED)) + acc_mod += bulk + acc_mod += accuracy + else + acc_mod += bulk / 2 + acc_mod += accuracy * 0.75 + else + acc_mod += bulk / 5 + acc_mod += accuracy * 0.25 + if(7) //machine gun, RPG + if (user.skill_check(SKILL_HAULING, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) + if(user.skill_check(SKILL_HAULING, SKILL_TRAINED) && user.skill_check(SKILL_WEAPONS, SKILL_TRAINED)) + if(user.skill_check(SKILL_HAULING, SKILL_EXPERIENCED) && user.skill_check(SKILL_WEAPONS, SKILL_EXPERIENCED)) + acc_mod += bulk + acc_mod += accuracy + else + acc_mod += bulk / 2 //-25%, not 35% + acc_mod += accuracy / 2 + else + acc_mod += bulk / 5 + // [/SIERRA-ADD] if(one_hand_penalty >= 4 && !held_twohanded) acc_mod -= one_hand_penalty/2 disp_mod += one_hand_penalty*0.5 //dispersion per point of two-handedness diff --git a/maps/sierra/areas/z5_sierra_bridge.dm b/maps/sierra/areas/z5_sierra_bridge.dm index ea9b7e4da612d..ade2bb6e9241b 100644 --- a/maps/sierra/areas/z5_sierra_bridge.dm +++ b/maps/sierra/areas/z5_sierra_bridge.dm @@ -118,12 +118,16 @@ name = "AI Chamber" icon_state = "ai_chamber" +/area/turret_protected/ai_maint + name = "AI Chamber - Maintenance" + icon_state = "ai_chamber" + /area/turret_protected/ai_teleport - name = "First Deck - AI Upload" + name = "AI Chamber - Teleporter" icon_state = "ai_upload" /area/turret_protected/ai_upload - name = "First Deck - AI Upload" + name = "Third Deck - AI Upload" icon_state = "ai_upload" // Heads Quarters diff --git a/maps/sierra/datums/species/species_overrides.dm b/maps/sierra/datums/species/species_overrides.dm new file mode 100644 index 0000000000000..21846cf9e8ae3 --- /dev/null +++ b/maps/sierra/datums/species/species_overrides.dm @@ -0,0 +1,9 @@ +/* +Various overrides for standart species, which are too tiny to have their own mod +*/ + +// Skrell + +/obj/item/organ/internal/eyes/skrell + eye_icon = 'maps/sierra/icons/mob/human_races/species/skrell/eyes.dmi' + apply_eye_colour = FALSE diff --git a/maps/sierra/datums/supplypacks/security.dm b/maps/sierra/datums/supplypacks/security.dm index c676f698ec3a1..95ce68d141894 100644 --- a/maps/sierra/datums/supplypacks/security.dm +++ b/maps/sierra/datums/supplypacks/security.dm @@ -69,7 +69,7 @@ /singleton/hierarchy/supply_pack/security/armory/pdw name = "Weapons - Ballistic NT41" contains = list(/obj/item/gun/projectile/automatic/nt41 = 2) - cost = 60 + cost = 120 containername = "\improper Ballistic PDW crate" security_level = SUPPLY_SECURITY_HIGH diff --git a/packs/infinity/icons/mob/human_races/species/skrell/eyes.dmi b/maps/sierra/icons/mob/human_races/species/skrell/eyes.dmi similarity index 100% rename from packs/infinity/icons/mob/human_races/species/skrell/eyes.dmi rename to maps/sierra/icons/mob/human_races/species/skrell/eyes.dmi diff --git a/packs/infinity/icons/mob/human_races/species/skrell/marking.dmi b/maps/sierra/icons/mob/human_races/species/skrell/marking.dmi similarity index 100% rename from packs/infinity/icons/mob/human_races/species/skrell/marking.dmi rename to maps/sierra/icons/mob/human_races/species/skrell/marking.dmi diff --git a/maps/sierra/icons/obj/shielding.dmi b/maps/sierra/icons/obj/shielding.dmi new file mode 100644 index 0000000000000..825dba510eda7 Binary files /dev/null and b/maps/sierra/icons/obj/shielding.dmi differ diff --git a/maps/sierra/loadout/loadout_eyes.dm b/maps/sierra/loadout/loadout_eyes.dm index bd648a3013b57..d0eb3854ed9dc 100644 --- a/maps/sierra/loadout/loadout_eyes.dm +++ b/maps/sierra/loadout/loadout_eyes.dm @@ -1,9 +1,14 @@ +/datum/gear/eyes/science/New() + allowed_roles = RESEARCH_ROLES | EXPLORATION_ROLES + ..() + /datum/gear/eyes/security allowed_roles = SECURITY_ROLES /datum/gear/eyes/medical/New() allowed_roles = MEDICAL_ROLES + /datum/job/explorer_medic ..() + /datum/gear/eyes/meson allowed_roles = list(/datum/job/senior_engineer, /datum/job/engineer, /datum/job/mining, /datum/job/scientist_assistant, /datum/job/rd,/datum/job/senior_scientist, /datum/job/scientist, /datum/job/chief_engineer,/datum/job/engineer_trainee,/datum/job/exploration_leader, /datum/job/explorer, /datum/job/explorer_pilot,/datum/job/explorer_medic, /datum/job/explorer_engineer, /datum/job/qm) diff --git a/maps/sierra/loadout/loadout_suit.dm b/maps/sierra/loadout/loadout_suit.dm index 6ebdcb43de729..45ff903e4d5c0 100644 --- a/maps/sierra/loadout/loadout_suit.dm +++ b/maps/sierra/loadout/loadout_suit.dm @@ -53,9 +53,10 @@ path = /obj/item/clothing/suit/storage/hooded/wintercoat/science allowed_roles = list(/datum/job/rd, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/senior_scientist, /datum/job/roboticist, ) -/datum/gear/suit/wintercoat/dais - display_name = "DAIS winter coat" - allowed_roles = list(/datum/job/engineer, /datum/job/scientist, /datum/job/roboticist, /datum/job/infsys) +/datum/gear/suit/wintercoat_dais + display_name = "winter coat, DAIS" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/dais + allowed_roles = list(/datum/job/engineer, /datum/job/scientist, /datum/job/scientist_assistant, /datum/job/roboticist, /datum/job/infsys) allowed_branches = list(/datum/mil_branch/contractor) /datum/gear/suit/labcoat diff --git a/maps/sierra/machinery/machinery.dm b/maps/sierra/machinery/machinery.dm index d0b6cd1c641cd..4e207b311019f 100644 --- a/maps/sierra/machinery/machinery.dm +++ b/maps/sierra/machinery/machinery.dm @@ -262,3 +262,8 @@ /datum/fabricator_recipe/medical/vial path = /obj/item/reagent_containers/glass/beaker/vial fabricator_types = list(FABRICATOR_CLASS_MICRO,FABRICATOR_CLASS_GENERAL) + +// Shieldgen + +/obj/machinery/power/shield_generator + icon = 'maps/sierra/icons/obj/shielding.dmi' diff --git a/maps/sierra/sierra.dm b/maps/sierra/sierra.dm index 1e20956bb8445..90eeee33e7e6a 100644 --- a/maps/sierra/sierra.dm +++ b/maps/sierra/sierra.dm @@ -44,6 +44,8 @@ #include "datums/supplypacks/security.dm" #include "datums/supplypacks/science.dm" + #include "datums/species/species_overrides.dm" + #include "game/languages.dm" #include "game/lockdown.dm" diff --git a/maps/sierra/sierra_unit_testing.dm b/maps/sierra/sierra_unit_testing.dm index 99a6d5390107c..0ab0f25f07303 100644 --- a/maps/sierra/sierra_unit_testing.dm +++ b/maps/sierra/sierra_unit_testing.dm @@ -12,6 +12,7 @@ /area/maintenance/cistern = 0, /area/turret_protected/ai_cyborg_station = 0, /area/turret_protected/ai = NO_SCRUBBER|NO_VENT, + /area/turret_protected/ai_maint = NO_SCRUBBER|NO_VENT, /area/maintenance/fourthdeck/aft = 0, /area/maintenance/waterstore = 0, /area/maintenance/abandoned_hydroponics = 0, diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm index 8488e1b697039..a7b7be4437ba1 100644 --- a/maps/sierra/z1-z5_sierra.dmm +++ b/maps/sierra/z1-z5_sierra.dmm @@ -200,7 +200,8 @@ check_synth = 1; name = "AI Chamber turret control"; pixel_x = -32; - pixel_y = 32 + pixel_y = 32; + control_area = list(/area/turret_protected/ai) }, /obj/item/device/radio/intercom/locked/ai_private{ dir = 1; @@ -596,7 +597,7 @@ icon_state = "4-8" }, /turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "adZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/floor_decal/borderfloor/corner{ @@ -6253,6 +6254,11 @@ }, /turf/simulated/floor/tiled/monotile, /area/quartermaster/hangar) +"aUj" = ( +/obj/paint_stripe/turquoise, +/obj/paint/black, +/turf/simulated/wall/r_wall/prepainted, +/area/turret_protected/ai_maint) "aUm" = ( /obj/structure/table/woodentable_reinforced/mahogany/walnut, /obj/floor_decal/spline/fancy/black, @@ -7814,7 +7820,7 @@ }, /obj/structure/railing/mapped, /obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/crew_quarters/docking) "bgP" = ( /obj/structure/railing/mapped{ @@ -14067,7 +14073,7 @@ dir = 8 }, /obj/structure/railing/mapped, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "ceI" = ( /obj/floor_decal/corner/darkblue/half{ @@ -19260,7 +19266,7 @@ dir = 8 }, /obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/crew_quarters/docking) "cRT" = ( /obj/floor_decal/corner/purple/border{ @@ -19870,6 +19876,14 @@ /obj/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/medical/virology/lab) +"cXg" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) "cXj" = ( /obj/floor_decal/corner/yellow{ dir = 1 @@ -21860,6 +21874,18 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/office/ce) +"dkI" = ( +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/super/critical{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/reinforced, +/area/turret_protected/ai_maint) "dkJ" = ( /obj/machinery/button/blast_door{ dir = 4; @@ -22337,6 +22363,15 @@ }, /turf/simulated/floor/tiled/dark, /area/vacant/mess) +"dou" = ( +/obj/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters/open{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters" + }, +/turf/simulated/floor/plating, +/area/medical/chemistry) "doG" = ( /obj/floor_decal/techfloor/orange{ dir = 1 @@ -30841,7 +30876,7 @@ /area/quartermaster/storage) "ezK" = ( /obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/rnd/xenobiology/xenoflora) "ezL" = ( /obj/structure/cable/green{ @@ -33973,7 +34008,7 @@ /obj/machinery/light/spot{ dir = 8 }, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "eYo" = ( /obj/floor_decal/corner/blue{ @@ -35953,7 +35988,7 @@ "fne" = ( /obj/machinery/ai_status_display, /turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "fnn" = ( /obj/structure/railing/mapped, /turf/simulated/floor/plating, @@ -40525,7 +40560,7 @@ pixel_y = 22 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "fWs" = ( /obj/machinery/light/small/emergency{ dir = 4 @@ -44470,6 +44505,13 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/button/blast_door{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters"; + pixel_x = -26; + pixel_y = -24; + req_access = list("ACCESS_MEDICAL") + }, /turf/simulated/floor/tiled/white, /area/medical/chemistry) "gEx" = ( @@ -49596,7 +49638,7 @@ pixel_y = -22 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "hrO" = ( /obj/structure/cable/green{ d1 = 1; @@ -52867,7 +52909,7 @@ }, /obj/floor_decal/industrial/outline/grey, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "hSw" = ( /obj/machinery/computer/modular/preset/security{ dir = 8 @@ -57545,7 +57587,7 @@ pixel_y = 22 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "iEY" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 @@ -61912,10 +61954,6 @@ /turf/simulated/floor/tiled, /area/quartermaster/exploration/briefing_room) "jkL" = ( -/obj/machinery/door/airlock/medical{ - dir = 4; - name = "Medical Storage" - }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -66964,7 +67002,7 @@ icon_state = "4-8" }, /turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "jZY" = ( /obj/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -67159,7 +67197,7 @@ }, /obj/structure/railing/mapped, /obj/structure/flora/ausbushes/leafybush, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "kbn" = ( /obj/structure/railing/mapped, @@ -67622,7 +67660,7 @@ dir = 4 }, /obj/structure/flora/ausbushes/reedbush, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "kek" = ( /obj/machinery/door/airlock/highsecurity{ @@ -68104,7 +68142,7 @@ dir = 8 }, /turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "khQ" = ( /obj/structure/table/glass, /obj/floor_decal/corner/darkblue/mono, @@ -69360,7 +69398,7 @@ pixel_y = -24 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "ksv" = ( /obj/machinery/door/firedoor, /obj/wallframe_spawn/reinforced/polarized/no_grille{ @@ -70002,7 +70040,7 @@ /obj/structure/railing/mapped{ dir = 1 }, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "kwI" = ( /turf/simulated/wall/r_wall/prepainted, @@ -81310,7 +81348,7 @@ dir = 4 }, /obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/crew_quarters/docking) "mfI" = ( /obj/structure/bed/chair/shuttle/white{ @@ -85303,6 +85341,10 @@ /obj/item/pen, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, +/obj/machinery/door/blast/shutters/open{ + id_tag = "chemistry_lockdown"; + name = "Chemistry Shutters" + }, /turf/simulated/floor/plating, /area/medical/chemistry) "mLR" = ( @@ -96191,7 +96233,7 @@ "out" = ( /obj/structure/flora/ausbushes/genericbush, /obj/structure/railing/mapped, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "ouu" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -98784,6 +98826,11 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/wall/r_wall/hull, /area/turret_protected/ai_teleport) "oOL" = ( @@ -101671,6 +101718,14 @@ }, /turf/simulated/floor/tiled/techfloor, /area/engineering/engine_room) +"pjy" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_teleport) "pjA" = ( /obj/machinery/portable_atmospherics/canister, /obj/machinery/light/spot{ @@ -106700,7 +106755,7 @@ "pXl" = ( /obj/structure/sign/warning/lethal_turrets, /turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "pXx" = ( /obj/structure/closet/emcloset/anchored, /obj/structure/cable/green{ @@ -108720,7 +108775,7 @@ /area/maintenance/fourthdeck/starboard) "qnf" = ( /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "qnl" = ( /obj/machinery/door/window/southleft{ dir = 1; @@ -109001,7 +109056,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/rnd/xenobiology/xenoflora) "qpw" = ( /obj/structure/cable/green{ @@ -115762,7 +115817,7 @@ /obj/structure/railing/mapped{ dir = 1 }, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "rqd" = ( /obj/structure/table/rack, @@ -121062,6 +121117,9 @@ /obj/item/clothing/accessory/arm_guards, /obj/item/clothing/accessory/arm_guards, /obj/item/clothing/accessory/arm_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/leg_guards, +/obj/item/clothing/accessory/leg_guards, /turf/simulated/floor/tiled/techfloor, /area/security/sierra/armory/lobby) "seu" = ( @@ -121752,7 +121810,7 @@ pixel_y = -22 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "sjA" = ( /obj/paint/nt_white, /obj/paint_stripe/nt_red, @@ -123399,7 +123457,7 @@ }, /obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/monotile, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "swN" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -123589,7 +123647,7 @@ dir = 4 }, /obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/crew_quarters/docking) "sxZ" = ( /obj/floor_decal/spline/fancy/black{ @@ -125247,7 +125305,8 @@ check_synth = 1; name = "AI Entry Chamber turret control"; pixel_x = 0; - pixel_y = -32 + pixel_y = -32; + control_area = list(/area/turret_protected/ai_teleport) }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -126061,7 +126120,7 @@ pixel_y = 24 }, /turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "sOO" = ( /obj/structure/railing/mapped{ dir = 4 @@ -128731,7 +128790,7 @@ /area/turret_protected/ai_cyborg_upload) "tkp" = ( /turf/simulated/wall/r_wall/hull, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "tkt" = ( /obj/structure/table/rack, /obj/item/defibrillator/compact/loaded, @@ -134769,7 +134828,9 @@ dir = 4 }, /obj/machinery/turretid/stun{ - pixel_y = -32 + pixel_y = -32; + control_area = list(/area/turret_protected/ai_maint); + name = "Maintenance turret control panel" }, /obj/structure/cable{ d1 = 4; @@ -134777,7 +134838,7 @@ icon_state = "4-8" }, /turf/simulated/floor/tiled/techmaint, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "uew" = ( /obj/floor_decal/spline/fancy/wood/corner, /obj/floor_decal/spline/fancy/wood/corner{ @@ -143955,7 +144016,7 @@ }, /obj/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled/dark/monotile, -/area/turret_protected/ai) +/area/turret_protected/ai_maint) "vyF" = ( /obj/structure/cable/green{ d1 = 1; @@ -145590,7 +145651,7 @@ /obj/structure/railing/mapped{ dir = 1 }, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "vMm" = ( /obj/floor_decal/corner/green/bordercorner{ @@ -155240,7 +155301,7 @@ "xlV" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/railing/mapped, -/turf/simulated/floor/grass, +/turf/simulated/floor/grass/cut, /area/hallway/primary/bridgedeck/center) "xmj" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ @@ -161859,6 +161920,14 @@ /mob/living/simple_animal/aquatic/fish/judge, /turf/simulated/floor/beach/sand, /area/rnd/xenobiology/level2) +"ykQ" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/r_wall/hull, +/area/turret_protected/ai_maint) "ylh" = ( /obj/floor_decal/corner/yellow/three_quarters{ dir = 4 @@ -306668,7 +306737,7 @@ cjp xjf tFi xHI -cjp +dou nSY vcA iZZ @@ -347268,17 +347337,17 @@ tkp tkp fWe qnf -mDz -mDz -mDz -mDz -mDz +aUj +aUj +aUj +aUj +aUj jZW -mDz -mDz -mDz -mDz -mDz +aUj +aUj +aUj +aUj +aUj qnf sjy tkp @@ -347469,7 +347538,7 @@ tkp tkp qnf qnf -mDz +aUj mDz mDz mDz @@ -347481,7 +347550,7 @@ mDz mDz mDz mDz -mDz +aUj qnf qnf tkp @@ -347670,7 +347739,7 @@ tkp tkp hSu qnf -mDz +aUj mDz mDz uhW @@ -347684,7 +347753,7 @@ uNO qYE mDz mDz -mDz +aUj qnf hSu tkp @@ -347871,7 +347940,7 @@ uYw tkp tkp qnf -mDz +aUj mDz mDz hIo @@ -347887,7 +347956,7 @@ sdz oki mDz mDz -mDz +aUj qnf tkp tkp @@ -348073,7 +348142,7 @@ uYw tkp tkp qnf -mDz +aUj mDz uhW bCN @@ -348089,7 +348158,7 @@ qKf oqb qYE mDz -mDz +aUj qnf tkp tkp @@ -348275,7 +348344,7 @@ uYw tkp tkp qnf -mDz +aUj mDz tKO isq @@ -348291,7 +348360,7 @@ pyu mWw pah mDz -mDz +aUj qnf tkp tkp @@ -348477,7 +348546,7 @@ uYw tkp tkp qnf -mDz +aUj mDz qKf xpT @@ -348493,7 +348562,7 @@ dTa dkt qjU mDz -mDz +aUj qnf tkp tkp @@ -348679,7 +348748,7 @@ uYw tkp tkp qnf -mDz +aUj mDz eIy xpT @@ -348695,7 +348764,7 @@ mGr dkt oyN mDz -mDz +aUj qnf tkp tkp @@ -348881,7 +348950,7 @@ uYw fne tkp iEL -mDz +aUj mDz rAI qjU @@ -348897,7 +348966,7 @@ mGr hwI qZb mDz -mDz +aUj hrB tkp fne @@ -349083,7 +349152,7 @@ uYw tkp tkp qnf -mDz +aUj mDz rWJ evY @@ -349099,7 +349168,7 @@ mGr qfu gWy mDz -mDz +aUj qnf tkp tkp @@ -349285,7 +349354,7 @@ uYw tkp tkp ksu -mDz +aUj mDz qKf xpT @@ -349301,7 +349370,7 @@ dTa dkt qjU mDz -mDz +aUj sON tkp tkp @@ -349487,7 +349556,7 @@ uYw tkp tkp qnf -mDz +aUj mDz tKO kzX @@ -349503,7 +349572,7 @@ oDz oOR pah mDz -mDz +aUj qnf tkp tkp @@ -349689,7 +349758,7 @@ uYw tkp tkp qnf -mDz +aUj mDz pyu dcW @@ -349705,7 +349774,7 @@ qKf isq wug mDz -mDz +aUj qnf tkp tkp @@ -349891,7 +349960,7 @@ uYw tkp tkp qnf -mDz +aUj mDz mDz lyR @@ -349907,7 +349976,7 @@ cFI sCx mDz mDz -mDz +aUj qnf tkp tkp @@ -350094,7 +350163,7 @@ tkp tkp hSu qnf -mDz +aUj mDz mDz wSa @@ -350108,7 +350177,7 @@ tWj aqc mDz mDz -mDz +aUj qnf hSu tkp @@ -350297,7 +350366,7 @@ tkp tkp qnf qnf -mDz +aUj mDz mDz fax @@ -350309,7 +350378,7 @@ fax fax mDz mDz -mDz +aUj qnf qnf tkp @@ -350500,8 +350569,8 @@ tkp tkp iEL qnf -mDz -mDz +aUj +aUj fax fax lvn @@ -350509,8 +350578,8 @@ abP sIK fax fax -mDz -mDz +aUj +aUj qnf hrB tkp @@ -350703,7 +350772,7 @@ tkp tkp qnf qnf -qnf +dkI bLB hyu mJE @@ -350905,7 +350974,7 @@ tkp tkp tkp tkp -tkp +cXg lWt lWt tfO @@ -351107,10 +351176,10 @@ uYw tkp tkp tkp -tkp -lWt -lWt -lWt +ykQ +pjy +pjy +pjy oOK lWt lWt diff --git a/mods/ai/README.md b/mods/ai/README.md new file mode 100644 index 0000000000000..5950c2588ae15 --- /dev/null +++ b/mods/ai/README.md @@ -0,0 +1,78 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/1773 + + + +## Artificial intelligence + +ID мода: AI + + +### Описание мода + +Твики и QoL фичи для ИИ + + +### Изменения *кор кода* + +- `code/modules/mob/living/silicon/ai/ai.dm`: `var/global/list/ai_verbs_default` +- `code/modules/mob/observer/freelook/chunk.dm`: `/datum/obfuscation/proc/get_obfuscation()` + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +LordNest + diff --git a/mods/ai/_ai.dm b/mods/ai/_ai.dm new file mode 100644 index 0000000000000..c03604b9d5169 --- /dev/null +++ b/mods/ai/_ai.dm @@ -0,0 +1,4 @@ +/singleton/modpack/ai + name = "Artificial intelligence" + desc = "Искусственный - да. Интеллект - нет." + author = "LordNest" diff --git a/mods/ai/_ai.dme b/mods/ai/_ai.dme new file mode 100644 index 0000000000000..b8f1da74be8eb --- /dev/null +++ b/mods/ai/_ai.dme @@ -0,0 +1,10 @@ +#ifndef MODPACK_AI +#define MODPACK_AI + +#include "_ai.dm" + +#include "code/ai.dm" +#include "code/ai_hud.dm" +#include "code/ai_screen_objects.dm" + +#endif diff --git a/mods/ai/code/ai.dm b/mods/ai/code/ai.dm new file mode 100644 index 0000000000000..d9530a70c27d3 --- /dev/null +++ b/mods/ai/code/ai.dm @@ -0,0 +1,70 @@ +// Access + +/mob/living/silicon/ai + idcard = /obj/item/card/id/all/ai + +/obj/item/card/id/all/ai + job_access_type = /datum/job/ai + +/datum/job/ai/get_access() + return get_all_station_access() + +// Languages + +/mob/living/silicon/ai/Initialize(mapload, datum/ai_laws/L, obj/item/device/mmi/B, safety = FALSE) + . = ..() + add_language(LANGUAGE_SIIK_MAAS, TRUE) + add_language(LANGUAGE_LEGALESE, TRUE) + + +// New verbs + +/mob/living/silicon/ai/proc/ai_take_image() + set name = "Take Photo" + set desc = "Activates the given subsystem" + set category = "Silicon Commands" + + silicon_camera.toggle_camera_mode() + +/mob/living/silicon/ai/proc/ai_view_images() + set name = "View Photo" + set desc = "Activates the given subsystem" + set category = "Silicon Commands" + + silicon_camera.viewpictures() + +/mob/living/silicon/ai/proc/change_floor() + set name = "Change Grid Color" + set category = "Silicon Commands" + + var/f_color = input("Choose your color, dark colors are not recommended!") as color + if(!f_color) + return + + for (var/color in GetHexColors(f_color)) + if (color <= 80) + to_chat(usr, SPAN_WARNING("Color \"[f_color]\" is not allowed!")) + return + + var/area/A = get_area(usr) + for(var/turf/simulated/floor/bluegrid/F in A) + F.color = f_color + to_chat(usr, SPAN_NOTICE("Proccessing strata color was change to [f_color]")) + +/mob/living/silicon/ai/proc/show_crew_manifest() + set category = "Silicon Commands" + set name = "Show Crew Manifest" + + open_subsystem(/datum/nano_module/crew_manifest) + +/mob/living/silicon/ai/proc/show_crew_monitor() + set category = "Silicon Commands" + set name = "Show Crew Lifesigns Monitor" + + open_subsystem(/datum/nano_module/crew_monitor) + +/mob/living/silicon/ai/proc/show_crew_records() + set category = "Silicon Commands" + set name = "Show Crew Records" + + open_subsystem(/datum/nano_module/records) diff --git a/mods/ai/code/ai_hud.dm b/mods/ai/code/ai_hud.dm new file mode 100644 index 0000000000000..0cada00417c50 --- /dev/null +++ b/mods/ai/code/ai_hud.dm @@ -0,0 +1,235 @@ +// AI button defines +#define AI_BUTTON_PROC_BELONGS_TO_CALLER 1 +#define AI_BUTTON_INPUT_REQUIRES_SELECTION 2 + +// AI HUD DEFINES +#define ui_ai_core "LEFT:6,BOTTOM:5" +#define ui_ai_announcement "LEFT+1:10,BOTTOM:5" +#define ui_ai_cam_track "LEFT+2:12,BOTTOM:5" +#define ui_ai_cam_light "LEFT+3:14,BOTTOM:5" +#define ui_ai_cam_change_network "LEFT+4:16,BOTTOM:5" +#define ui_ai_sensor "CENTER-2:18,BOTTOM:5" +#define ui_ai_crew_manifest "CENTER-1:20,BOTTOM:5" +#define ui_ai_take_image "CENTER:22,BOTTOM:5" +#define ui_ai_view_images "CENTER+1:24,BOTTOM:5" +#define ui_ai_state_laws "CENTER+2:26,BOTTOM:5" +#define ui_ai_call_shuttle "RIGHT-4:28,BOTTOM:5" + +#define ui_ai_up "RIGHT-1:30,BOTTOM+1:5" +#define ui_ai_down "RIGHT-1:30,BOTTOM:5" + +// AI: Customization +#define ui_ai_holo_change "RIGHT-1:30,BOTTOM+2:5" +#define ui_ai_color "RIGHT-1:30,BOTTOM+3:5" +#define ui_ai_core_icon "RIGHT-1:30,BOTTOM+4:5" +#define ui_ai_status "RIGHT-1:30,BOTTOM+5:5" + +// AI: Tools +#define ui_ai_power_override "LEFT:6,TOP:0" +#define ui_ai_shutdown "LEFT+1:6,TOP:0" +#define ui_ai_holo_mov "LEFT:6, TOP-1:0" + +// AI: Crew +#define ui_ai_crew_mon "RIGHT-1:30,TOP:0" +#define ui_ai_crew_rec "RIGHT-2:30, TOP:0" + +// HUD Code + +/mob/living/silicon/ai + hud_type = /datum/hud/ai + +/datum/hud/ai/FinalizeInstantiation() + + if(!isAI(mymob)) + return + + var/mob/living/silicon/A = mymob + + adding = list() + adding += new /obj/screen/ai_button(null, + ui_ai_core, + "AI Core", + "ai_core", + /mob/living/silicon/ai/proc/core + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_announcement, + "AI Announcement", + "announcement", + /mob/living/silicon/ai/proc/ai_announcement + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_track, + "Track With Camera", + "track", + /mob/living/silicon/ai/proc/ai_camera_track, + list(/mob/living/silicon/ai/proc/trackable_mobs = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_light, + "Toggle Camera Lights", + "camera_light", + /mob/living/silicon/ai/proc/toggle_camera_light + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_cam_change_network, + "Jump to Network", + "camera", + /mob/living/silicon/ai/proc/ai_network_change, + list(/mob/living/silicon/ai/proc/get_camera_network_list = (AI_BUTTON_PROC_BELONGS_TO_CALLER|AI_BUTTON_INPUT_REQUIRES_SELECTION)) + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_sensor, + "Set Sensor Mode", + "ai_sensor", + /mob/living/silicon/ai/proc/sensor_mode + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_manifest, + "Show Crew Manifest", + "manifest", + /mob/living/silicon/ai/proc/show_crew_manifest + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_take_image, + "Toggle Camera Mode", + "take_picture", + /mob/living/silicon/ai/proc/ai_take_image + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_view_images, + "View Images", + "view_images", + /mob/living/silicon/ai/proc/ai_view_images + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_state_laws, + "State Laws", + "state_laws", + /mob/living/silicon/ai/proc/ai_checklaws + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_call_shuttle, + "Call Shuttle", + "call_shuttle", + /mob/living/silicon/ai/proc/ai_call_shuttle + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_up, + "Move Upwards", + "ai_up", + /mob/verb/up + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_down, + "Move Downwards", + "ai_down", + /mob/verb/down + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_color, + "Change Floor Color", + "ai_floor", + /mob/living/silicon/ai/proc/change_floor + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_holo_change, + "Change Hologram", + "ai_holo_change", + /mob/living/silicon/ai/proc/ai_hologram_change + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_mon, + "Crew Monitor", + "crew_monitor", + /mob/living/silicon/ai/proc/show_crew_monitor + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_power_override, + "Toggle Power Override", + "ai_p_override", + /mob/living/silicon/ai/proc/ai_power_override + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_shutdown, + "Shutdown", + "ai_shutdown", + /mob/living/silicon/ai/proc/ai_shutdown + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_holo_mov, + "Toggle Hologram Movement", + "ai_holo_mov", + /mob/living/silicon/ai/proc/toggle_hologram_movement + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_core_icon, + "Pick Icon", + "ai_core_pick", + /mob/living/silicon/ai/proc/pick_icon + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_status, + "Pick Status", + "ai_status", + /mob/living/silicon/ai/proc/ai_statuschange + ) + + adding += new /obj/screen/ai_button(null, + ui_ai_crew_rec, + "Crew Records", + "ai_crew_rec", + /mob/living/silicon/ai/proc/show_crew_records + ) + + A.client.screen = list() + A.client.screen.Add(adding) + + +// Undef +#undef ui_ai_core +#undef ui_ai_announcement +#undef ui_ai_cam_track +#undef ui_ai_cam_light +#undef ui_ai_cam_change_network +#undef ui_ai_sensor +#undef ui_ai_crew_manifest +#undef ui_ai_take_image +#undef ui_ai_view_images +#undef ui_ai_state_laws +#undef ui_ai_call_shuttle + +#undef ui_ai_up +#undef ui_ai_down + +#undef ui_ai_holo_change +#undef ui_ai_color +#undef ui_ai_core_icon +#undef ui_ai_status + +#undef ui_ai_power_override +#undef ui_ai_shutdown +#undef ui_ai_holo_mov + +#undef ui_ai_crew_mon +#undef ui_ai_crew_rec diff --git a/mods/ai/code/ai_screen_objects.dm b/mods/ai/code/ai_screen_objects.dm new file mode 100644 index 0000000000000..9bb0b2b10abbb --- /dev/null +++ b/mods/ai/code/ai_screen_objects.dm @@ -0,0 +1,54 @@ +/obj/screen/ai_button + var/mob/living/silicon/ai/ai_verb + var/list/input_procs + var/list/input_args + icon = 'mods/ai/icons/screen_ai.dmi' + var/list/template_icon = list(null, "template") + +/obj/screen/ai_button/Click() + if(!isAI(usr)) + return TRUE + var/mob/living/silicon/ai/A = usr + if(!(ai_verb in A.verbs)) + return TRUE + + var/input_arguments = list() + for(var/input_proc in input_procs) + var/input_flags = input_procs[input_proc] + var/input_arg + if(input_flags & AI_BUTTON_PROC_BELONGS_TO_CALLER) // Does the called proc belong to the AI, or not? + input_arg = call(A, input_proc)() + else + input_arg = call(input_proc)() + + if(input_flags & AI_BUTTON_INPUT_REQUIRES_SELECTION) + input_arg = input("Make a selection.", "Make a selection.") as null|anything in input_arg + if(isnull(input_arg)) + return // We assume a null-input means the user cancelled + + if(!(ai_verb in A.verbs) || A.incapacitated()) + return + + input_arguments += input_arg + + if(length(input_args)) + input_arguments |= input_args + + call(A, ai_verb)(arglist(input_arguments)) + return TRUE + +/obj/screen/ai_button/Initialize(maploading, screen_loc, name, icon_state, ai_verb, list/input_procs = null, list/input_args = null) + . = ..() + if(!LAZYLEN(template_icon)) + template_icon = list(icon) + + src.name = name + src.icon_state = icon_state + src.screen_loc = screen_loc + src.ai_verb = ai_verb + if(input_procs) + src.input_procs = input_procs.Copy() + if(input_args) + src.input_args = input_args.Copy() + + underlays += image(template_icon[1], template_icon[2]) diff --git a/mods/ai/icons/screen_ai.dmi b/mods/ai/icons/screen_ai.dmi new file mode 100644 index 0000000000000..2d415ba1f8c08 Binary files /dev/null and b/mods/ai/icons/screen_ai.dmi differ diff --git a/mods/global_modpacks.dm b/mods/global_modpacks.dm index 7ebf3600a7381..25b86f7a6dbb9 100644 --- a/mods/global_modpacks.dm +++ b/mods/global_modpacks.dm @@ -1,4 +1,5 @@ // SIERRA TODO: GET RID OF IT!!! +#include "ai/_ai.dme" #include "body_markings/_body_markings.dme" #include "client_verbs/_client_verbs.dme" #include "don_loadout/_don_loadout.dme" @@ -20,5 +21,4 @@ #include "statusbar/_statusbar.dme" #include "utf8/_utf8.dme" - #include "../packs/sierra-tweaks/_pack.dm" diff --git a/mods/legalese_language/README.md b/mods/legalese_language/README.md new file mode 100644 index 0000000000000..a04e9adfda5b2 --- /dev/null +++ b/mods/legalese_language/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/388 +- https://github.com/SierraBay/SierraBay12/pull/1773 + + + + +## Канцелярит + +ID мода: LEGALESE + + +### Описание мода + +Мод добавляет канцелярит - загадочный язык межзвездных бюрократов + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- `code/__defines/~mods/~master_defines.dm`: `LANGUAGE_LEGALESE` + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +Furior + diff --git a/mods/legalese_language/code/legalese.dm b/mods/legalese_language/code/legalese.dm index 6f8218d2c05d2..f9fe9e1170e52 100644 --- a/mods/legalese_language/code/legalese.dm +++ b/mods/legalese_language/code/legalese.dm @@ -1,4 +1,3 @@ -#define LANGUAGE_LEGALESE "Legalese" /datum/language/legal name = LANGUAGE_LEGALESE desc = "A cryptic language used by interstellar bureaucrats and lawyers."