diff --git a/code/__defines/exosuit_fab.dm b/code/__defines/exosuit_fab.dm
index dce03c9301..ccb05b9374 100644
--- a/code/__defines/exosuit_fab.dm
+++ b/code/__defines/exosuit_fab.dm
@@ -8,7 +8,8 @@
#define BORG_MODULE_MEDICAL (1<<3)
/// Module is compatible with Engineering Cyborg models
#define BORG_MODULE_ENGINEERING (1<<4)
-
+/// Module is compatible with Science Cyborg models
+#define BORG_MODULE_SCIENCE (1<<5)
/// Module is compatible with Ripley Exosuit models
#define EXOSUIT_MODULE_RIPLEY (1<<0)
/// Module is compatible with Odyseeus Exosuit models
diff --git a/code/datums/outfits/outfit_vr.dm b/code/datums/outfits/outfit_vr.dm
index 5d00d7980b..1883f2b005 100644
--- a/code/datums/outfits/outfit_vr.dm
+++ b/code/datums/outfits/outfit_vr.dm
@@ -134,7 +134,7 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
uniform_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1 = 1)
id_slot = slot_wear_id
pda_slot = slot_belt
- pda_type = /obj/item/device/pda
+ pda_type = /obj/item/device/pda/pilot
id_type = /obj/item/weapon/card/id/civilian/pilot
id_pda_assignment = "Pilot"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm
index c26903f1dc..0a400a1a28 100644
--- a/code/game/jobs/job/civilian_vr.dm
+++ b/code/game/jobs/job/civilian_vr.dm
@@ -213,8 +213,8 @@
economic_modifier = 5
minimal_player_age = 3
pto_type = PTO_CIVILIAN
- access = list(access_pilot)
- minimal_access = list(access_pilot)
+ access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
+ minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
outfit_type = /decl/hierarchy/outfit/job/pilot
job_description = "A Pilot flies the various shuttles in the Virgo-Erigone System."
alt_titles = list("Co-Pilot" = /datum/alt_title/co_pilot, "Navigator" = /datum/alt_title/navigator, "Helmsman" = /datum/alt_title/helmsman)
@@ -293,4 +293,4 @@
/datum/alt_title/artist
title = "Artist"
- title_blurb = "An Artist's calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
\ No newline at end of file
+ title_blurb = "An Artist's calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 4e92255d05..7e4bc6ed87 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -31,7 +31,7 @@
var/time_coeff = 1
/// Coefficient for the efficiency of material usage in item building. Based on the installed parts.
var/component_coeff = 1
-
+
var/loading_icon_state = "mechfab-idle"
var/list/materials = list(
@@ -148,6 +148,9 @@
sub_category += "Medical"
if(module_types & BORG_MODULE_ENGINEERING)
sub_category += "Engineering"
+ if(module_types & BORG_MODULE_SCIENCE)
+ sub_category += "Science"
+
else
sub_category += "All Cyborgs"
// Else check if this design builds a piece of exosuit equipment.
@@ -309,7 +312,7 @@
atom_say("Obstruction cleared. \The [stored_part] is complete.")
stored_part.forceMove(exit)
stored_part = null
-
+
// If there's nothing being built, try to build something
if(!being_built)
// If we're not processing the queue anymore or there's nothing to build, end processing.
@@ -703,7 +706,7 @@
// Reduce our amount stored
materials[matstring] -= ejected * S.perunit
-
+
// Recurse if we have enough left for more sheets
if(recursive && materials[matstring] >= S.perunit)
eject_materials(matstring, -1)
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ac71abf677..3938f3c17b 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -155,7 +155,7 @@
/obj/item/borg/upgrade/advhealth
name = "advanced health analyzer module"
- desc = "A carbon dioxide jetpack suitable for low-gravity operations."
+ desc = "An Advanced Health Analyzer, optimized for borg mounting."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
require_module = 1
@@ -214,4 +214,4 @@
R.add_language(LANGUAGE_TERMINUS, 1)
R.add_language(LANGUAGE_ZADDAT, 1)
- return 1
+ return 1
\ No newline at end of file
diff --git a/code/game/objects/items/robot/robot_upgrades_vr.dm b/code/game/objects/items/robot/robot_upgrades_vr.dm
index 215a936bda..bd9f247ec7 100644
--- a/code/game/objects/items/robot/robot_upgrades_vr.dm
+++ b/code/game/objects/items/robot/robot_upgrades_vr.dm
@@ -66,3 +66,93 @@
to_chat(usr, "Internal capacity doubled.")
T.upgraded_capacity = TRUE
return 1
+
+//Advanced RPED
+/obj/item/borg/upgrade/advrped
+ name = "Advanced Rapid Part Exchange Device"
+ desc = "An ARPED, now in borg size!"
+ icon_state = "cyborg_upgrade3"
+ item_state = "cyborg_upgrade"
+ module_flags = BORG_MODULE_SCIENCE
+ require_module = 1
+
+/obj/item/borg/upgrade/advrped/action(var/mob/living/silicon/robot/R)
+ if(..()) return 0
+
+ var/obj/item/weapon/storage/part_replacer/adv/T = locate() in R.module
+
+ if(!R.module || !(type in R.module.supported_upgrades))
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+ if(!T)
+ T = locate() in R.module.contents
+ if(!T)
+ T = locate() in R.module.modules
+ if(!T)
+ R.module.modules += new/obj/item/weapon/storage/part_replacer/adv(R.module)
+ return 1
+ if(T)
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+
+//Diamond Drill
+/obj/item/borg/upgrade/diamonddrill
+ name = "Mounted Diamond Drill"
+ desc = "An advanced drill, optimized for borg use."
+ icon_state = "cyborg_upgrade3"
+ item_state = "cyborg_upgrade"
+ module_flags = BORG_MODULE_MINER
+ require_module = 1
+
+/obj/item/borg/upgrade/diamonddrill/action(var/mob/living/silicon/robot/R)
+ if(..()) return 0
+
+ var/obj/item/weapon/pickaxe/diamonddrill/T = locate() in R.module
+
+ if(!R.module || !(type in R.module.supported_upgrades))
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+ if(!T)
+ T = locate() in R.module.contents
+ if(!T)
+ T = locate() in R.module.modules
+ if(!T)
+ R.module.modules += new/obj/item/weapon/pickaxe/diamonddrill(R.module)
+ return 1
+ if(T)
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+
+//PKA
+/obj/item/borg/upgrade/pka
+ name = "Protokenetic Accelerator Upgrade"
+ desc = "A borg mounted PKA Rifle for use in mining and wildlife defense."
+ icon_state = "cyborg_upgrade3"
+ item_state = "cyborg_upgrade"
+ module_flags = BORG_MODULE_MINER
+ require_module = 1
+
+/obj/item/borg/upgrade/pka/action(var/mob/living/silicon/robot/R)
+ if(..()) return 0
+
+ var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/T = locate() in R.module
+
+ if(!R.module || !(type in R.module.supported_upgrades))
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
+ if(!T)
+ T = locate() in R.module.contents
+ if(!T)
+ T = locate() in R.module.modules
+ if(!T)
+ R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module)
+ return 1
+ if(T)
+ to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
+ to_chat(usr, "There's no mounting point for the module!")
+ return 0
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/toolbox_vr.dm b/code/game/objects/items/weapons/storage/toolbox_vr.dm
index f65731091a..12ef265f1f 100644
--- a/code/game/objects/items/weapons/storage/toolbox_vr.dm
+++ b/code/game/objects/items/weapons/storage/toolbox_vr.dm
@@ -7,4 +7,5 @@
max_storage_space = ITEMSIZE_COST_SMALL * 6
/obj/item/weapon/storage/toolbox/lunchbox/survival/zaddat
- starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 6)
\ No newline at end of file
+ name = "zaddat survival lunchbox"
+ starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 6)
diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
index 6cfb8060ee..5091be7e04 100644
--- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm
@@ -81,9 +81,9 @@
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Talon Doctor")
/datum/gear/accessory/bluespace
- display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner)"
+ display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner, Pilot)"
path = /obj/item/clothing/accessory/storage/bluespace
- allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner")
+ allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard","Talon Miner","Pilot")
cost = 2
/datum/gear/accessory/webbing
@@ -123,4 +123,4 @@ Talon pin
/datum/gear/accessory/talonpin
display_name = "Talon pin"
description = "A small enamel pin of the Talon logo."
- path = /obj/item/clothing/accessory/talon
\ No newline at end of file
+ path = /obj/item/clothing/accessory/talon
diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
index 0f9060a1af..6bc02ada4f 100644
--- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
@@ -380,6 +380,12 @@
ckeywhitelist = list("erikthedog")
character_name = list("Erik Ramadwood")
+/datum/gear/fluff/salvage_id
+ path = /obj/item/weapon/card/id/event/polymorphic/itg
+ display_name = "Salvage's ITG-ID card"
+ ckeywhitelist = list("essbie")
+ character_name = list("Savage")
+
// F CKEYS
/datum/gear/fluff/yikatihaki_armor
path = /obj/item/clothing/suit/armor/vox_scrap
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 9589cc0246..552032ddee 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -785,7 +785,7 @@
return
if(I_GRAB)
if(is_vore_predator(H) && H.devourable && src.feeding && src.devourable)
- var/switchy = tgui_alert(H, "Do you wish to eat [src] or feed yourself to them?", "Feed or Eat",list("Eat","Feed", "Nevermind!"))
+ var/switchy = tgui_alert(H, "Do you wish to eat [src] or feed yourself to them?", "Feed or Eat",list("Nevermind!", "Eat","Feed"))
switch(switchy)
if("Nevermind!")
return
@@ -796,11 +796,11 @@
H.feed_self_to_grabbed(H, src)
return
if(is_vore_predator(H) && src.devourable)
- if(tgui_alert(H, "Do you wish to eat [src]?", "Eat?",list("Yes!", "Nevermind!")) == "Yes!")
+ if(tgui_alert(H, "Do you wish to eat [src]?", "Eat?",list("Nevermind!", "Yes!")) == "Yes!")
feed_grabbed_to_self(H, src)
return
if(H.devourable && src.feeding)
- if(tgui_alert(H, "Do you wish to feed yourself to [src]?", "Feed?",list("Yes!", "Nevermind!")) == "Yes!")
+ if(tgui_alert(H, "Do you wish to feed yourself to [src]?", "Feed?",list("Nevermind!", "Yes!")) == "Yes!")
H.feed_self_to_grabbed(H, src)
return
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
index 5257f59d77..c0cad41c5c 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -741,6 +741,7 @@ var/global/list/robot_modules = list(
"Tower" = "drider-Miner",
"Miss M" = "miss-miner" // YW change, Added Miss M
)
+ supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
/obj/item/weapon/robot_module/robot/miner/New()
..()
@@ -752,8 +753,12 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
- src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
+ // New Emag gear for the minebots!
+ src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
+
+ // No reason for these, upgrade modules replace them.
+ //src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
/obj/item/weapon/robot_module/robot/research
name = "research module"
@@ -774,6 +779,7 @@ var/global/list/robot_modules = list(
"Pneuma" = "pneuma-Research",
"Tower" = "drider-Research"
)
+ supported_upgrades = list(/obj/item/borg/upgrade/advrped)
/obj/item/weapon/robot_module/robot/research/New()
..()
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
index e862c5a4b5..30bc06d6c7 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm
@@ -190,6 +190,7 @@
networks = list(NETWORK_SECURITY)
pto_type = PTO_SECURITY
can_be_pushed = 0
+ supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
/obj/item/weapon/robot_module/robot/knine/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg!
@@ -472,6 +473,7 @@
channels = list("Science" = 1)
pto_type = PTO_SCIENCE
can_be_pushed = 0
+ supported_upgrades = list(/obj/item/borg/upgrade/advrped)
/obj/item/weapon/robot_module/robot/science/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
@@ -851,6 +853,7 @@
channels = list("Supply" = 1)
pto_type = PTO_CARGO
can_be_pushed = 0
+ supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
/obj/item/weapon/robot_module/robot/kmine/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/borg/sight/material(src)
@@ -862,8 +865,12 @@
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
- src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
- src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
+ // New Emag gear for the minebots!
+ src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
+
+ // No reason for these, upgrade modules replace them.
+ //src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
+ //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
var/datum/matter_synth/water = new /datum/matter_synth(500)
water.name = "Water reserves"
diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm
index 4fa3d66e1f..be53387d14 100644
--- a/code/modules/mob/new_player/sprite_accessories_taur.dm
+++ b/code/modules/mob/new_player/sprite_accessories_taur.dm
@@ -191,6 +191,11 @@
suit_sprites = 'icons/mob/taursuits_horse.dmi'
icon_sprite_tag = "horse"
+/datum/sprite_accessory/tail/taur/horse/horse_2c
+ name = "Horse & colorable tail (Taur)"
+ extra_overlay = "horse_markings"
+ //icon_sprite_tag = "wolf2c"
+
/datum/sprite_accessory/tail/taur/horse/synthhorse
name = "SynthHorse dual-color (Taur)"
icon_state = "synthhorse_s"
diff --git a/code/modules/overmap/ships/computers/computer_shims.dm b/code/modules/overmap/ships/computers/computer_shims.dm
index 16d9285c39..72fdbe4fb7 100644
--- a/code/modules/overmap/ships/computers/computer_shims.dm
+++ b/code/modules/overmap/ships/computers/computer_shims.dm
@@ -50,6 +50,7 @@
//
/obj/machinery/computer/ship
var/core_skill = /datum/skill/devices //The skill used for skill checks for this machine (mostly so subtypes can use different skills).
+ var/ai_control = TRUE //VOREStation Edit
//
// Topic
@@ -70,6 +71,11 @@
return TRUE
/obj/machinery/computer/ship/attack_ai(mob/user)
+ //VOREStation Addition Start
+ if(!ai_control && issilicon(user))
+ to_chat(user, "Access Denied.")
+ return
+ //VOREStation Addition End
if(tgui_status(user, tgui_state()) > STATUS_CLOSE)
return interface_interact(user)
@@ -82,6 +88,11 @@
/obj/machinery/computer/ship/attack_hand(mob/user)
if((. = ..()))
return
+ //VOREStation Addition Start
+ if(!ai_control && issilicon(user))
+ to_chat(user, "Access Denied.")
+ return TRUE
+ //VOREStation Addition End
if(!allowed(user))
to_chat(user, "Access Denied.")
return TRUE
diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm
index fe24315788..2c821ef793 100644
--- a/code/modules/overmap/ships/computers/helm.dm
+++ b/code/modules/overmap/ships/computers/helm.dm
@@ -29,6 +29,7 @@ GLOBAL_LIST_EMPTY(all_waypoints)
var/speedlimit = 1/(20 SECONDS) //top speed for autopilot, 5
var/accellimit = 0.001 //manual limiter for acceleration
req_one_access = list(access_pilot) //VOREStation Edit
+ ai_control = FALSE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help
// fancy sprite
/obj/machinery/computer/ship/helm/adv
diff --git a/code/modules/pda/pda_vr.dm b/code/modules/pda/pda_vr.dm
index 0e4b53d698..671a3ee7b0 100644
--- a/code/modules/pda/pda_vr.dm
+++ b/code/modules/pda/pda_vr.dm
@@ -24,3 +24,6 @@
/obj/item/device/pda/sar
default_cartridge = /obj/item/weapon/cartridge/sar
icon_state = "pda-gene" //Gives FM's a distinct PDA of their own, rather than sharing with the bridge-secretary & CCO's.
+
+/obj/item/device/pda/pilot
+ icon_state = "pda-pilot" //New sprites, but still no ROM cartridge or anything
diff --git a/code/modules/projectiles/ammunition/ammo_boxes.dm b/code/modules/projectiles/ammunition/ammo_boxes.dm
index 04d9d55d70..566b878c44 100644
--- a/code/modules/projectiles/ammunition/ammo_boxes.dm
+++ b/code/modules/projectiles/ammunition/ammo_boxes.dm
@@ -40,6 +40,7 @@
name = "\improper Donk-Soft riot ammo box"
desc = "Contains Donk-Soft riot darts. It's Donk or Don't! Ages 18 and up."
icon_state = "foambox_riot"
+ ammo_type = /obj/item/ammo_casing/afoam_dart/riot
matter = list(MAT_STEEL = 5040, MAT_PLASTIC = 1800)
/*
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 2cbe138c61..5609e6f46a 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -36,6 +36,7 @@
/obj/item/ammo_casing/afoam_dart/riot
name = "riot foam dart"
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
+ projectile_type = /obj/item/projectile/bullet/foam_dart_riot
matter = list(MAT_STEEL = 210, MAT_PLASTIC = 60)
icon_state = "foamdart_riot"
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 8878d3a4f7..38cbacb58e 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -387,8 +387,30 @@
if(istype(T))
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
-/obj/item/projectile/bullet/foam_dart/riot
+/obj/item/projectile/bullet/foam_dart_riot
name = "riot foam dart"
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
- agony = 50
- icon_state = "foamdart_riot_proj"
\ No newline at end of file
+ damage = 0 // It's a damn toy.
+ embed_chance = 0
+ agony = 50 // The riot part of the riot dart
+ nodamage = TRUE
+ sharp = FALSE
+ damage_type = HALLOSS
+ impact_effect_type = null
+ fire_sound = 'sound/items/syringeproj.ogg'
+ combustion = FALSE
+ icon = 'icons/obj/gun_toy.dmi'
+ icon_state = "foamdart_riot_proj"
+ range = 15
+
+/obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A)
+ . = ..()
+ var/turf/T = get_turf(loc)
+ if(istype(T))
+ new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
+
+/obj/item/projectile/bullet/foam_dart_riot/on_range(var/atom/A)
+ . = ..()
+ var/turf/T = get_turf(loc)
+ if(istype(T))
+ new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
\ No newline at end of file
diff --git a/code/modules/research/designs/mining_toys.dm b/code/modules/research/designs/mining_toys.dm
index 5667ac59be..c1784dec6f 100644
--- a/code/modules/research/designs/mining_toys.dm
+++ b/code/modules/research/designs/mining_toys.dm
@@ -48,3 +48,12 @@
materials = list(MAT_STEEL = 1000,MAT_GLASS = 1000)
build_path = /obj/item/device/depth_scanner
sort_string = "FBAAA"
+
+/datum/design/item/weapon/mining/upgradeAOE
+ name = "Mining Explosion Upgrade"
+ desc = "An area of effect upgrade for the Proto-Kinetic Accelerator."
+ id = "pka_mineaoe"
+ req_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 8, TECH_ENGINEERING = 7) // Lets make this endgame level tech, due to it's power.
+ materials = list(MAT_STEEL = 5000, MAT_GLASS = 5000, MAT_SILVER = 500, MAT_GOLD = 500, MAT_URANIUM = 2000, MAT_PHORON = 2000)
+ build_path = /obj/item/borg/upgrade/modkit/aoe/turfs
+ sort_string = "FAAF"
\ No newline at end of file
diff --git a/code/modules/research/prosfab_designs_vr.dm b/code/modules/research/prosfab_designs_vr.dm
index 67a4abe412..bb15c848f8 100644
--- a/code/modules/research/prosfab_designs_vr.dm
+++ b/code/modules/research/prosfab_designs_vr.dm
@@ -12,4 +12,33 @@
id = "borg_hound_capacity_module"
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
- build_path = /obj/item/borg/upgrade/bellysizeupgrade
\ No newline at end of file
+ build_path = /obj/item/borg/upgrade/bellysizeupgrade
+
+
+/*
+ Some job related borg upgrade modules, adding useful items for puppers.
+
+*/
+/datum/design/item/prosfab/robot_upgrade/advrped
+ name = "Advanced Rapid Part Exchange Device"
+ desc = "Exactly the same as a standard Advanced RPED, but this one has mounting hardware for a Science Borg."
+ id = "borg_advrped_module"
+ req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 6)
+ materials = list(MAT_STEEL = 30000, MAT_GLASS = 10000)
+ build_path = /obj/item/borg/upgrade/advrped
+
+/datum/design/item/prosfab/robot_upgrade/diamonddrill
+ name = "Diamond Drill"
+ desc = "A mining drill with a diamond tip, made for use by Mining Borgs."
+ id = "borg_ddrill_module"
+ req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 5, TECH_ENGINEERING = 5)
+ materials = list(MAT_STEEL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000)
+ build_path = /obj/item/borg/upgrade/diamonddrill
+
+/datum/design/item/prosfab/robot_upgrade/pka
+ name = "Proto-Kinetic Accelerator"
+ desc = "A mining weapon designed for clearing rocks and hostile wildlife. This model is equiped with a self upgrade system, allowing it to attach modules hands free."
+ id = "borg_pka_module"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
+ materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 500, MAT_PLATINUM = 350)
+ build_path = /obj/item/borg/upgrade/pka
\ No newline at end of file
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 0eafd9a2e3..75ccefa492 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -10,10 +10,17 @@
var/skip_act = FALSE
var/tgui_subtemplate = "ShuttleControlConsoleDefault"
+ var/ai_control = FALSE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help
/obj/machinery/computer/shuttle_control/attack_hand(user as mob)
if(..(user))
return
+ //VOREStation Addition Start
+ if(!ai_control && issilicon(user))
+ to_chat(user, "Access Denied.")
+ return TRUE
+ //VOREStation Addition End
+
//src.add_fingerprint(user) //shouldn't need fingerprints just for looking at it.
if(!allowed(user))
to_chat(user, "Access Denied.")
diff --git a/code/modules/shuttles/shuttles_vr.dm b/code/modules/shuttles/shuttles_vr.dm
index 7582e37ae7..58143b9950 100644
--- a/code/modules/shuttles/shuttles_vr.dm
+++ b/code/modules/shuttles/shuttles_vr.dm
@@ -34,6 +34,7 @@
name = "belter control console"
req_one_access = list(access_mining, access_medical_equip) //Allows xenoarch, miners AND doctors to use it.
shuttle_tag = "Belter" //The scanning console needs to enable/disable this at will.
+ ai_control = TRUE
/obj/machinery/computer/shuttle_control/mining
name = "mining elevator control console"
diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm
index 741d7e0941..3e76a34101 100644
--- a/code/modules/vore/eating/digest_act_vr.dm
+++ b/code/modules/vore/eating/digest_act_vr.dm
@@ -19,6 +19,7 @@
qdel(O)
else if(item_storage)
O.forceMove(item_storage)
+ GLOB.items_digested_roundstat++
qdel(src)
return w_class
@@ -57,6 +58,7 @@
S.use(1)
digest_stage = w_class
else
+ GLOB.items_digested_roundstat++
qdel(src)
if(g_damage > w_class)
return w_class
diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi
index 8772db082a..791b974422 100644
Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ
diff --git a/icons/obj/pda_holo.dmi b/icons/obj/pda_holo.dmi
index 82c2e5f219..d8621a957a 100644
Binary files a/icons/obj/pda_holo.dmi and b/icons/obj/pda_holo.dmi differ
diff --git a/icons/obj/pda_old.dmi b/icons/obj/pda_old.dmi
index 954c15acba..3a0503db8a 100644
Binary files a/icons/obj/pda_old.dmi and b/icons/obj/pda_old.dmi differ
diff --git a/icons/obj/pda_rugged.dmi b/icons/obj/pda_rugged.dmi
index dedacce457..667a08b034 100644
Binary files a/icons/obj/pda_rugged.dmi and b/icons/obj/pda_rugged.dmi differ
diff --git a/icons/obj/pda_slider.dmi b/icons/obj/pda_slider.dmi
index e27eeff141..8ec1b97d46 100644
Binary files a/icons/obj/pda_slider.dmi and b/icons/obj/pda_slider.dmi differ
diff --git a/icons/obj/pda_slim.dmi b/icons/obj/pda_slim.dmi
index 5ac097b348..7260633765 100644
Binary files a/icons/obj/pda_slim.dmi and b/icons/obj/pda_slim.dmi differ
diff --git a/icons/obj/pda_vr.dmi b/icons/obj/pda_vr.dmi
index 1e088cc090..20ccdfd1f0 100644
Binary files a/icons/obj/pda_vr.dmi and b/icons/obj/pda_vr.dmi differ
diff --git a/icons/obj/pda_wrist.dmi b/icons/obj/pda_wrist.dmi
index 931ef0b2fe..c4fc27ea98 100644
Binary files a/icons/obj/pda_wrist.dmi and b/icons/obj/pda_wrist.dmi differ
diff --git a/maps/cynosure/cynosure_jobs.dm b/maps/cynosure/cynosure_jobs.dm
new file mode 100644
index 0000000000..d874f1f6cd
--- /dev/null
+++ b/maps/cynosure/cynosure_jobs.dm
@@ -0,0 +1,55 @@
+// Pilots
+
+var/const/EXPLORER =(1<<14)
+
+var/const/access_explorer = 43
+
+/datum/access/explorer
+ id = access_explorer
+ desc = "Explorer"
+ region = ACCESS_REGION_GENERAL
+
+//Cynosure Jobs
+
+/datum/department/planetside
+ name = DEPARTMENT_PLANET
+ color = "#555555"
+ sorting_order = 2 // Same as cargo in importance.
+
+/datum/job/explorer
+ title = "Explorer"
+ flag = EXPLORER
+ departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_PLANET)
+ department_flag = MEDSCI
+ faction = "Station"
+ total_positions = 4
+ spawn_positions = 4
+ supervisors = "the Research Director"
+ selection_color = "#633D63"
+ economic_modifier = 4
+ access = list(access_explorer, access_research)
+ minimal_access = list(access_explorer, access_research)
+
+ outfit_type = /decl/hierarchy/outfit/job/explorer2
+ job_description = "An Explorer searches for interesting things on the surface of Sif, and returns them to the station."
+
+ alt_titles = list(
+ "Pilot" = /decl/hierarchy/outfit/job/pilot)
+
+/datum/job/rd
+ access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
+ access_tox_storage, access_teleporter, access_sec_doors,
+ access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
+ access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch,
+ access_network, access_maint_tunnels, access_explorer, access_eva, access_external_airlocks)
+ minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
+ access_tox_storage, access_teleporter, access_sec_doors,
+ access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
+ access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch,
+ access_network, access_maint_tunnels, access_explorer, access_eva, access_external_airlocks)
+
+/*
+ alt_titles = list(
+ "Explorer Technician" = /decl/hierarchy/outfit/job/explorer2/technician,
+ "Explorer Medic" = /decl/hierarchy/outfit/job/explorer2/medic)
+*/
diff --git a/maps/stellardelight/stellar_delight_shuttle_defs.dm b/maps/stellardelight/stellar_delight_shuttle_defs.dm
index e83c05be9e..57cbe5d469 100644
--- a/maps/stellardelight/stellar_delight_shuttle_defs.dm
+++ b/maps/stellardelight/stellar_delight_shuttle_defs.dm
@@ -58,6 +58,7 @@
name = "boat control console"
shuttle_tag = "Exploration Shuttle"
req_one_access = null
+ ai_control = TRUE
// A shuttle lateloader landmark
/obj/effect/shuttle_landmark/shuttle_initializer/exploration
@@ -84,6 +85,7 @@
name = "boat control console"
shuttle_tag = "Mining Shuttle"
req_one_access = null
+ ai_control = TRUE
// A shuttle lateloader landmark
/obj/effect/shuttle_landmark/shuttle_initializer/mining
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 8478e8a3fa..79250a1c3d 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -23643,13 +23643,11 @@
/turf/simulated/floor/plating,
/area/bridge_hallway)
"aNa" = (
-/obj/machinery/computer/shuttle_control/tether_backup{
- req_one_access = list()
- },
/obj/effect/floor_decal/fancy_shuttle{
fancy_shuttle_tag = "lifeboat1";
name = "lifeboat1"
},
+/obj/machinery/computer/shuttle_control/tether_backup,
/turf/simulated/floor/tiled,
/area/shuttle/tether{
base_turf = /turf/simulated/floor/reinforced
@@ -39252,10 +39250,12 @@
/obj/structure/window/reinforced{
dir = 1
},
-/obj/machinery/power/smes/buildable/point_of_interest,
/obj/structure/cable/green{
icon_state = "0-8"
},
+/obj/machinery/power/smes/buildable{
+ charge = 500000
+ },
/turf/simulated/floor/tiled,
/area/shuttle/tourbus/general)
"gLg" = (
diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm
index 42f9723477..27caa00596 100644
--- a/maps/tether/tether_shuttles.dm
+++ b/maps/tether/tether_shuttles.dm
@@ -5,7 +5,8 @@
/obj/machinery/computer/shuttle_control/tether_backup
name = "tether backup shuttle control console"
shuttle_tag = "Tether Backup"
- req_one_access = list(access_heads,access_pilot)
+ req_one_access = list()
+ ai_control = TRUE
/obj/machinery/computer/shuttle_control/multi/mercenary
name = "vessel control console"
@@ -36,6 +37,7 @@
name = "surface mining outpost shuttle control console"
shuttle_tag = "Mining Outpost"
req_one_access = list(access_mining)
+ ai_control = TRUE
//
// "Tram" Emergency Shuttler
// Becuase the tram only has its own doors and no corresponding station doors, a docking controller is overkill.
diff --git a/tgstation b/tgstation
new file mode 160000
index 0000000000..ccf136aa07
--- /dev/null
+++ b/tgstation
@@ -0,0 +1 @@
+Subproject commit ccf136aa07b7d2dfe1a77cddb2b8b2d93cd86369
diff --git a/tools/mapmerge2/requirements.txt b/tools/mapmerge2/requirements.txt
index c82918ee10..edbbbde4c2 100644
--- a/tools/mapmerge2/requirements.txt
+++ b/tools/mapmerge2/requirements.txt
@@ -1,3 +1,3 @@
pygit2
bidict==0.13.1
-Pillow==9.0.0
+Pillow==9.0.1