diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index cabcbe8ce87..cd7ef9f442b 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -222,7 +222,7 @@
feedback_inc("cyborg_birth",1)
callHook("borgify", list(O))
- O.Namepick()
+ O.namepick()
qdel(src)
else
diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm
index 74f53e92045..86ec5e480b9 100644
--- a/code/game/objects/structures/ghost_pods/silicon.dm
+++ b/code/game/objects/structures/ghost_pods/silicon.dm
@@ -31,7 +31,7 @@
from the pod is not a crewmember.")
R.ckey = M.ckey
visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
- R.Namepick()
+ R.namepick()
log_and_message_admins("successfully opened \a [src] and got a Lost Drone.")
..()
@@ -57,7 +57,7 @@
definiton of 'your gravesite' is where your pod is.")
R.ckey = M.ckey
visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
- R.Namepick()
+ R.namepick()
..()
/obj/structure/ghost_pod/ghost_activated/swarm_drone
diff --git a/code/game/objects/structures/ghost_pods/silicon_vr.dm b/code/game/objects/structures/ghost_pods/silicon_vr.dm
index 823208487f5..a4a7347ca42 100644
--- a/code/game/objects/structures/ghost_pods/silicon_vr.dm
+++ b/code/game/objects/structures/ghost_pods/silicon_vr.dm
@@ -21,7 +21,7 @@
from the pod is not a crewmember.")
R.ckey = M.ckey
visible_message("As \the [src] opens, the eyes of the robot flicker as it is activated.")
- R.Namepick()
+ R.namepick()
log_and_message_admins("successfully opened \a [src] and got a Stray Drone.")
used = TRUE
return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
index 4f186ef5b55..858438be6ce 100644
--- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
+++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm
@@ -504,29 +504,4 @@
var/armor_soak = get_armor_soak(T, "melee")
T.apply_damage(20, HALLOSS,, armor_block, armor_soak)
if(prob(75)) //75% chance to stun for 5 seconds, really only going to be 4 bcus click cooldown+animation.
- T.apply_effect(5, WEAKEN, armor_block)
-
-/*
-/mob/living/silicon/robot/proc/reskin_booze()
- set name = "Change Drink Color"
- set category = "Robot Commands"
- set desc = "Choose the color of drink displayed inside you."
-
- var/mob/M = usr
- var/list/options = list()
- options["Beer"] = "Beer Buddy"
- options["Curacao"] = "Brilliant Blue"
- options["Coffee"] = "Caffine Dispenser"
- options["Space Mountain Wind"] = "Gamer Juice Maker"
- options["Whiskey Soda"] = "Liqour Licker"
- options["Grape Soda"] = "The Grapist"
- options["Demon's Blood"] = "Vampire's Aid"
- var/choice = tgui_input_list(M, "Choose your drink!", "Drink Choice", options)
- if(src && choice && !M.stat && in_range(M,src))
- icontype = options[choice]
- var/active_sound = 'sound/effects/bubbles.ogg'
- playsound(src.loc, "[active_sound]", 100, 0, 4)
- to_chat(M, "Your Tank now displays [choice]. Drink up and enjoy!")
- update_icon()
- return 1
-*/
\ No newline at end of file
+ T.apply_effect(5, WEAKEN, armor_block)
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 16e86674910..7cfa78b7311 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -123,7 +123,7 @@ var/list/mob_hat_cache = list()
var/datum/robot_component/C = components[V]
C.max_damage = 10
- verbs -= /mob/living/silicon/robot/verb/Namepick
+ verbs -= /mob/living/silicon/robot/verb/namepick
if(can_pick_shell)
var/random = pick(shell_types)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index e1b937ca17a..e75490373d5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -32,6 +32,7 @@
var/datum/robot_sprite/sprite_datum // Sprite datum, holding all our sprite data
var/icon_selected = 1 // If icon selection has been completed yet
var/icon_selection_tries = 0 // Remaining attempts to select icon before a selection is forced
+ var/list/sprite_extra_customization = list()
//Hud stuff
@@ -347,8 +348,10 @@
if (meta_info)
ooc_notes = meta_info
-/mob/living/silicon/robot/verb/Namepick()
+/mob/living/silicon/robot/verb/namepick()
+ set name = "Pick Name"
set category = "Robot Commands"
+
if(custom_name)
to_chat(usr, "You can't pick another custom name. Go ask for a name change.")
return 0
@@ -363,6 +366,17 @@
updatename()
update_icon()
+/mob/living/silicon/robot/verb/extra_customization()
+ set name = "Customize Appearance"
+ set category = "Robot Commands"
+ set desc = "Customize your appearance (assuming your chosen sprite allows)."
+
+ if(!sprite_datum || !sprite_datum.has_extra_customization)
+ to_chat(src, "Your sprite cannot be customized.")
+ return
+
+ sprite_datum.handle_extra_customization(src)
+
/mob/living/silicon/robot/proc/self_diagnosis()
if(!is_component_functioning("diagnosis unit"))
return null
@@ -908,18 +922,6 @@
var/open_overlay = sprite_datum.get_open_sprite(src)
if(open_overlay)
add_overlay(open_overlay)
-/*
- if(has_active_type(/obj/item/borg/combat/shield))
- var/obj/item/borg/combat/shield/shield = locate() in src
- if(shield && shield.active)
- add_overlay("[module_sprites[icontype]]-shield")
-
- if(modtype == "Combat")
- if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
- icon_state = "[module_sprites[icontype]]-roll"
- else
- icon_state = module_sprites[icontype]
-*/
/mob/living/silicon/robot/proc/installed_modules()
if(weapon_lock)
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 bc5c2765cbc..f1e82757c80 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm
@@ -512,34 +512,13 @@ var/global/list/robot_modules = list(
LANGUAGE_DRUDAKAR = 1,
LANGUAGE_TAVAN = 1
)
+ pto_type = PTO_CIVILIAN
/obj/item/weapon/robot_module/robot/clerical/butler
channels = list("Service" = 1)
/obj/item/weapon/robot_module/robot/clerical/butler/general
- sprites = list(
- "M-USE NanoTrasen" = "robotServ",
- "Cabeiri" = "eyebot-standard",
- "Haruka" = "marinaSV",
- "Michiru" = "maidbot",
- "Usagi" = "tallgreen",
- "Telemachus" = "toiletbot",
- "WTOperator" = "sleekservice",
- "WTOmni" = "omoikane",
- "XI-GUS" = "spider",
- "XI-ALP" = "heavyServ",
- "Standard" = "Service2",
- "Waitress" = "Service",
- "Bro" = "Brobot",
- "Rich" = "maximillion",
- "Drone - Service" = "drone-service",
- "Drone - Hydro" = "drone-hydro",
- "Usagi-II" = "tall2service",
- "Pyralis" = "Glitterfly-Service",
- "Decapod" = "decapod-Service",
- "Pneuma" = "pneuma-Service",
- "Tower" = "drider-Service"
- )
+ name = "service robot module"
/obj/item/weapon/robot_module/robot/clerical/butler/general/New()
..()
@@ -577,27 +556,6 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/clerical/general
name = "clerical robot module"
- sprites = list(
- "M-USE NanoTrasen" = "robotCler",
- "Cabeiri" = "eyebot-standard",
- "Haruka" = "marinaSV",
- "Usagi" = "tallgreen",
- "Telemachus" = "toiletbot",
- "WTOperator" = "sleekclerical",
- "WTOmni" = "omoikane",
- "XI-GUS" = "spidercom",
- "XI-ALP" = "heavyServ",
- "Waitress" = "Service",
- "Bro" = "Brobot",
- "Rich" = "maximillion",
- "Default" = "Service2",
- "Drone" = "drone-blu",
- "Usagi-II" = "tall2service",
- "Pyralis" = "Glitterfly-Clerical",
- "Decapod" = "decapod-Clerical",
- "Pneuma" = "pneuma-Clerical",
- "Tower" = "drider-Clerical"
- )
/obj/item/weapon/robot_module/robot/clerical/general/New()
..()
@@ -709,12 +667,6 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/security/combat
name = "combat robot module"
hide_on_manifest = TRUE
- sprites = list(
- "Haruka" = "marinaCB",
- "Combat Android" = "droid-combat",
- "Insekt" = "insekt-Combat",
- "Decapod" = "decapod-Combat"
- )
/obj/item/weapon/robot_module/robot/security/combat/New()
..()
@@ -727,6 +679,8 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
+ src.modules += new /obj/item/device/dogborg/sleeper/K9/ert(src)
+
/* Drones */
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 0642c0b4553..85f3856c5c8 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
@@ -1,6 +1,3 @@
-/obj/item/weapon/robot_module
- var/vr_sprites = list()
-
/hook/startup/proc/robot_modules_vr()
robot_modules["Medihound"] = /obj/item/weapon/robot_module/robot/medical/medihound
robot_modules["K9"] = /obj/item/weapon/robot_module/robot/security/knine
@@ -27,38 +24,6 @@
src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people.
. = ..() //Any Global vore modules will come from here
-/obj/item/weapon/robot_module/robot/clerical
- pto_type = PTO_CIVILIAN
-
-/obj/item/weapon/robot_module/robot/clerical/butler/general
- vr_sprites = list(
- "Handy - Service" = "handy-service",
- "Handy - Hydro" = "handy-hydro",
- "Acheron" = "mechoid-Service",
- "Shellguard Noble" = "Noble-SRV",
- "ZOOM-BA" = "zoomba-service",
- "W02M" = "worm-service",
- "Feminine Humanoid" = "uptall-service"
- )
-
-/obj/item/weapon/robot_module/robot/clerical/general
- vr_sprites = list(
- "Handy" = "handy-clerk",
- "Acheron" = "mechoid-Service",
- "Shellguard Noble" = "Noble-SRV",
- "ZOOM-BA" = "zoomba-clerical",
- "W02M" = "worm-service",
- "Feminine Humanoid" = "uptall-service"
- )
-
-/obj/item/weapon/robot_module/robot/security/combat
- vr_sprites = list(
- "Acheron" = "mechoid-Combat",
- "ZOOM-BA" = "zoomba-combat",
- "W02M" = "worm-combat",
- "Feminine Humanoid" = "uptall-security"
- )
-
/obj/item/weapon/robot_module/robot/security/knine
name = "k9 robot module"
@@ -263,11 +228,6 @@
/obj/item/weapon/robot_module/robot/security/ert
name = "Emergency Responce module"
- sprites = list(
- "Standard" = "ert",
- "Classic" = "ertold",
- "Borgi" = "borgi"
- )
/obj/item/weapon/robot_module/robot/security/ert/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
@@ -602,21 +562,6 @@
// Uses modified K9 sprites.
/obj/item/weapon/robot_module/robot/clerical/butler/brodog
name = "service-hound module"
- sprites = list(
- "Blackhound" = "k50",
- "Pinkhound" = "k69",
- "ServicehoundV2" = "serve2",
- "ServicehoundV2 Darkmode" = "servedark",
- "Drake" = "drakemine",
- "Raptor V-4" = "serviraptor",
- "Raptor V-4000" = "fancyraptor",
- "MEKA" = "mekaserve",
- "MEKA v2" = "newmekaserve",
- "NIKO" = "mmekaserv",
- "NIKA" = "fmekaserv",
- "K4T" = "k4tserve",
- "K4Talt" = "k4tserve_alt1"
- )
can_be_pushed = 0
@@ -752,15 +697,6 @@
/obj/item/weapon/robot_module/robot/clerical/butler/booze
name = "BoozeHound robot module"
can_be_pushed = 0
- sprites = list(
- "Beer Buddy" = "boozeborg",
- "Brilliant Blue" = "boozeborg(blue)",
- "Caffine Dispenser" = "boozeborg(coffee)",
- "Gamer Juice Maker" = "boozeborg(green)",
- "Liqour Licker" = "boozeborg(orange)",
- "The Grapist" = "boozeborg(purple)",
- "Vampire's Aid" = "boozeborg(red)"
- )
/obj/item/weapon/robot_module/robot/clerical/butler/booze/New(var/mob/living/silicon/robot/R)
..()
diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
index 843e75bd41f..1fabd752aa6 100644
--- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm
@@ -15,6 +15,7 @@
var/list/rest_sprite_options
var/has_dead_sprite = FALSE
var/has_dead_sprite_overlay = FALSE
+ var/has_extra_customization = FALSE
var/vis_height = 32
var/pixel_x = 0
@@ -67,6 +68,9 @@
return
+/datum/robot_sprite/proc/handle_extra_customization(var/mob/living/silicon/robot/ourborg)
+ return
+
// Dogborgs and not-dogborgs that use dogborg stuff. Oh no.
/datum/robot_sprite/dogborg
diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm
new file mode 100644
index 00000000000..99b28e43c13
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm
@@ -0,0 +1,372 @@
+// Clerical and Service modules have a lot of shared sprites so they're in same file
+// (some of those sprites are also shared with Standard, but ive already done it as its own thing, so some duplicates are fine)
+
+// Both Service and Clerical
+
+// Regular sprites
+
+/datum/robot_sprite/civilian
+ module_type = list("Service", "Clerical")
+ sprite_icon = 'icons/mob/robot/civilian.dmi'
+
+/datum/robot_sprite/civilian/eyebot
+ name = "Cabeiri"
+ sprite_icon_state = "eyebot"
+
+/datum/robot_sprite/civilian/marina
+ name = "Haruka"
+ sprite_icon_state = "marina"
+
+/datum/robot_sprite/civilian/tall
+ name = "Usagi"
+ sprite_icon_state = "tall"
+ has_eye_sprites = FALSE
+
+/datum/robot_sprite/civilian/toiletbot
+ name = "Telemachus"
+ sprite_icon_state = "toiletbot"
+
+/datum/robot_sprite/civilian/omoikane
+ name = "WTOmni"
+ sprite_icon_state = "omoikane"
+
+/datum/robot_sprite/civilian/heavy
+ name = "XI-ALP"
+ sprite_icon_state = "heavy"
+
+/datum/robot_sprite/civilian/waitress
+ name = "Waitress"
+ sprite_icon_state = "waitress"
+ has_eye_sprites = FALSE
+
+/datum/robot_sprite/civilian/waiter
+ name = "Waiter"
+ sprite_icon_state = "waiter"
+ has_eye_sprites = FALSE
+
+/datum/robot_sprite/civilian/bro
+ name = "Bro"
+ sprite_icon_state = "bro"
+ has_eye_sprites = FALSE
+
+/datum/robot_sprite/civilian/maximillion
+ name = "Rich"
+ sprite_icon_state = "maximillion"
+ has_eye_sprites = FALSE
+
+/datum/robot_sprite/civilian/tall2
+ name = "Usagi-II"
+ sprite_icon_state = "tall2"
+
+/datum/robot_sprite/civilian/mechoid
+ name = "Acheron"
+ sprite_icon_state = "mechoid"
+
+/datum/robot_sprite/civilian/noble
+ name = "Shellguard Noble"
+ sprite_icon_state = "noble"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/civilian/worm
+ name = "W02M"
+ sprite_icon_state = "worm"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/civilian/uptall
+ name = "Feminine Humanoid"
+ sprite_icon_state = "uptall"
+
+// Wide/dogborg sprites
+/*
+/datum/robot_sprite/dogborg/civilian
+ module_type = list("Service", "Clerical")
+ sprite_icon = 'icons/mob/robot/civilian_wide.dmi'
+
+ // None yet
+*/
+// Tall sprites
+/*
+/datum/robot_sprite/dogborg/tall/civilian
+ module_type = list("Service", "Clerical")
+ sprite_icon = 'icons/mob/robot/civilian_large.dmi'
+
+ // None yet
+*/
+
+// Service
+
+// Regular sprites
+
+/datum/robot_sprite/service
+ module_type = "Service"
+ sprite_icon = 'icons/mob/robot/service.dmi'
+
+/datum/robot_sprite/service/default
+ name = DEFAULT_ROBOT_SPRITE_NAME
+ default_sprite = TRUE
+ sprite_icon_state = "default"
+
+/datum/robot_sprite/service/maid
+ name = "Michiru"
+ sprite_icon_state = "maid"
+
+/datum/robot_sprite/service/sleek
+ name = "WTOperator"
+ sprite_icon_state = "sleek"
+
+/datum/robot_sprite/service/spider
+ name = "XI-GUS"
+ sprite_icon_state = "spider"
+
+/datum/robot_sprite/service/drone
+ name = "Drone - Service"
+ sprite_icon_state = "drone-crisis"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/drone_hydro
+ name = "Drone - Hydro"
+ sprite_icon_state = "drone-hydro"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/glitterfly
+ name = "Pyralis"
+ sprite_icon_state = "glitterfly"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/decapod
+ name = "Decapod"
+ sprite_icon_state = "decapod"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/pneuma
+ name = "Pneuma"
+ sprite_icon_state = "pneuma"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/drider
+ name = "Tower"
+ sprite_icon_state = "drider"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/service/handy
+ name = "Handy - Service"
+ sprite_icon_state = "handy"
+
+/datum/robot_sprite/service/handy_hydro
+ name = "Handy - Hydro"
+ sprite_icon_state = "handy-hydro"
+
+/datum/robot_sprite/service/zoomba
+ name = "ZOOM-BA"
+ sprite_icon_state = "zoomba"
+ has_dead_sprite = TRUE
+
+// Wide/dogborg sprites
+
+/datum/robot_sprite/dogborg/service
+ module_type = "Service"
+ sprite_icon = 'icons/mob/robot/service_wide.dmi'
+
+/datum/robot_sprite/dogborg/service/hound
+ name = "Blackhound"
+ sprite_icon_state = "hound"
+ has_eye_light_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+
+/datum/robot_sprite/dogborg/service/houndpink
+ name = "Pinkhound"
+ sprite_icon_state = "houndpink"
+ has_eye_light_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+
+/datum/robot_sprite/dogborg/service/vale
+ name = "ServicehoundV2"
+ sprite_icon_state = "vale"
+ has_eye_light_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+
+/datum/robot_sprite/dogborg/service/valedark
+ name = "ServicehoundV2 Darkmode"
+ sprite_icon_state = "valedark"
+ has_eye_light_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+
+/datum/robot_sprite/dogborg/service/drake
+ name = "Drake"
+ sprite_icon_state = "drake"
+
+/datum/robot_sprite/dogborg/service/booze
+ name = "Boozehound"
+ sprite_icon = 'icons/mob/robot/service_wide_booze.dmi'
+ sprite_icon_state = "booze"
+ rest_sprite_options = list("Default")
+ has_extra_customization = TRUE
+
+ var/list/booze_options = list("Beer" = "booze",
+ "Space Mountain Wind" = "boozegreen",
+ "Curacao" = "boozeblue",
+ "Grape Soda" = "boozepurple",
+ "Demon's Blood" = "boozered",
+ "Whiskey Soda" = "boozeorange",
+ "Coffee" = "boozebrown")
+
+/datum/robot_sprite/dogborg/service/booze/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
+ if(!("boozehound" in ourborg.sprite_extra_customization) || !ourborg.sprite_extra_customization["boozehound"])
+ return ..()
+ else
+ ourborg.icon_state = booze_options[ourborg.sprite_extra_customization["boozehound"]]
+
+/datum/robot_sprite/dogborg/service/booze/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
+ if(!("boozehound" in ourborg.sprite_extra_customization) || !ourborg.sprite_extra_customization["boozehound"])
+ return ..()
+ else
+ return "[booze_options[ourborg.sprite_extra_customization["boozehound"]]]-sleeper"
+
+/datum/robot_sprite/dogborg/service/booze/get_rest_sprite(var/mob/living/silicon/robot/ourborg)
+ if(!(ourborg.rest_style in rest_sprite_options))
+ ourborg.rest_style = "Default"
+ return "[booze_options[ourborg.sprite_extra_customization["boozehound"]]]-rest"
+
+/datum/robot_sprite/dogborg/service/booze/handle_extra_customization(var/mob/living/silicon/robot/ourborg)
+ var/choice = tgui_input_list(ourborg, "Choose your drink!", "Drink Choice", booze_options)
+ if(ourborg && choice && !ourborg.stat)
+ if(!("boozehound" in ourborg.sprite_extra_customization))
+ ourborg.sprite_extra_customization += "boozehound"
+ ourborg.sprite_extra_customization["boozehound"] = choice
+ playsound(ourborg.loc, 'sound/effects/bubbles.ogg', 100, 0, 4)
+ to_chat(ourborg, "Your tank now displays [choice]. Drink up and enjoy!")
+ ourborg.update_icon()
+ return 1
+
+// Tall sprites
+
+/datum/robot_sprite/dogborg/tall/service
+ module_type = "Service"
+ sprite_icon = 'icons/mob/robot/service_large.dmi'
+
+/datum/robot_sprite/dogborg/tall/service/raptor
+ name = "Raptor V-4"
+ sprite_icon_state = "raptor"
+ rest_sprite_options = list("Default", "Bellyup")
+
+/datum/robot_sprite/dogborg/tall/service/fancyraptor
+ name = "Raptor V-4000"
+ sprite_icon_state = "fancyraptor"
+ rest_sprite_options = list("Default", "Bellyup")
+
+/datum/robot_sprite/dogborg/tall/service/meka
+ name = "MEKA"
+ sprite_icon_state = "meka"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Sit")
+
+/datum/robot_sprite/dogborg/tall/service/newmeka
+ name = "MEKA v2"
+ sprite_icon_state = "newmeka"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Sit")
+
+/datum/robot_sprite/dogborg/tall/service/mmeka
+ name = "NIKO"
+ sprite_icon_state = "mmeka"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Sit")
+
+/datum/robot_sprite/dogborg/tall/service/fmeka
+ name = "NIKA"
+ sprite_icon_state = "fmeka"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Sit")
+
+/datum/robot_sprite/dogborg/tall/service/k4t
+ name = "K4T"
+ sprite_icon_state = "k4t"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Bellyup")
+
+/datum/robot_sprite/dogborg/tall/service/k4t_alt1
+ name = "K4Talt"
+ sprite_icon_state = "k4t_alt1"
+ has_eye_light_sprites = TRUE
+ has_custom_open_sprites = TRUE
+ has_vore_belly_sprites = FALSE
+ rest_sprite_options = list("Default", "Bellyup")
+
+
+// Clerical
+
+// Regular sprites
+
+/datum/robot_sprite/clerical
+ module_type = "Clerical"
+ sprite_icon = 'icons/mob/robot/clerical.dmi'
+
+/datum/robot_sprite/clerical/default
+ name = DEFAULT_ROBOT_SPRITE_NAME
+ default_sprite = TRUE
+ sprite_icon_state = "default"
+
+/datum/robot_sprite/clerical/sleek
+ name = "WTOperator"
+ sprite_icon_state = "sleek"
+
+/datum/robot_sprite/clerical/spider
+ name = "XI-GUS"
+ sprite_icon_state = "spider"
+
+/datum/robot_sprite/clerical/drone
+ name = "Drone"
+ sprite_icon_state = "drone-crisis"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/clerical/glitterfly
+ name = "Pyralis"
+ sprite_icon_state = "glitterfly"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/clerical/decapod
+ name = "Decapod"
+ sprite_icon_state = "decapod"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/clerical/pneuma
+ name = "Pneuma"
+ sprite_icon_state = "pneuma"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/clerical/drider
+ name = "Tower"
+ sprite_icon_state = "drider"
+ has_custom_open_sprites = TRUE
+
+/datum/robot_sprite/clerical/zoomba
+ name = "ZOOM-BA"
+ sprite_icon_state = "zoomba"
+ has_dead_sprite = TRUE
+
+// Wide/dogborg sprites
+/*
+/datum/robot_sprite/dogborg/clerical
+ module_type = "Clerical"
+ sprite_icon = 'icons/mob/robot/clerical_wide.dmi'
+
+ // None yet
+*/
+// Tall sprites
+/*
+/datum/robot_sprite/dogborg/tall/clerical
+ module_type = "Clerical"
+ sprite_icon = 'icons/mob/robot/clerical_large.dmi'
+
+ // None yet
+*/
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm
new file mode 100644
index 00000000000..f71b4b9a6f6
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm
@@ -0,0 +1,113 @@
+// Regular sprites
+
+/datum/robot_sprite/combat
+ module_type = "Combat"
+ sprite_icon = 'icons/mob/robot/combat.dmi'
+
+ var/has_speed_sprite = FALSE
+ var/has_shield_sprite = FALSE
+
+/datum/robot_sprite/combat/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
+ if(has_speed_sprite)
+ if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
+ ourborg.icon_state = "[sprite_icon_state]-roll"
+ if(has_shield_sprite)
+ if(ourborg.has_active_type(/obj/item/borg/combat/shield))
+ var/obj/item/borg/combat/shield/shield = locate() in ourborg
+ if(shield && shield.active)
+ ourborg.add_overlay("[sprite_icon_state]-shield")
+
+/datum/robot_sprite/combat/default
+ name = DEFAULT_ROBOT_SPRITE_NAME
+ default_sprite = TRUE
+ sprite_icon_state = "default"
+
+/datum/robot_sprite/combat/marina
+ name = "Haruka"
+ sprite_icon_state = "marina"
+ has_speed_sprite = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/droid
+ name = "Android"
+ sprite_icon_state = "droid"
+ has_speed_sprite = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/droid/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
+ if(istype(ourborg.module_active,/obj/item/borg/combat/mobility))
+ return
+ else
+ return ..()
+
+/datum/robot_sprite/combat/insekt
+ name = "Insekt"
+ sprite_icon_state = "insekt"
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/decapod
+ name = "Decapod"
+ sprite_icon_state = "decapod"
+ has_custom_open_sprites = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/mechoid
+ name = "Acheron"
+ sprite_icon_state = "mechoid"
+ has_speed_sprite = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/zoomba
+ name = "ZOOM-BA"
+ sprite_icon_state = "zoomba"
+ has_dead_sprite = TRUE
+ has_speed_sprite = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/worm
+ name = "W02M"
+ sprite_icon_state = "worm"
+ has_custom_open_sprites = TRUE
+ has_shield_sprite = TRUE
+
+/datum/robot_sprite/combat/uptall
+ name = "Feminine Humanoid"
+ sprite_icon_state = "uptall"
+
+// Wide/dogborg sprites
+/*
+/datum/robot_sprite/dogborg/combat
+ module_type = "Combat"
+ sprite_icon = 'icons/mob/robot/combat_wide.dmi'
+
+ // None yet
+*/
+// Tall sprites
+
+/datum/robot_sprite/dogborg/tall/combat
+ module_type = "Combat"
+ sprite_icon = 'icons/mob/robot/combat_large.dmi'
+
+ var/has_gun_sprite = FALSE
+
+/datum/robot_sprite/dogborg/tall/combat/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
+ if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/weapon/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/lasercannon/mounted)))
+ ourborg.add_overlay("[sprite_icon_state]-gun")
+
+/datum/robot_sprite/dogborg/tall/combat/derg
+ name = "ERT"
+ sprite_icon_state = "derg"
+ rest_sprite_options = list("Default")
+ has_gun_sprite = TRUE
+
+/datum/robot_sprite/dogborg/tall/combat/hound
+ name = "Combat Hound"
+ sprite_icon_state = "hound"
+ rest_sprite_options = list("Default")
+
+/datum/robot_sprite/dogborg/tall/combat/borgi
+ name = "Borgi"
+ sprite_icon_state = "borgi"
+ rest_sprite_options = list("Default")
+ has_eye_sprites = FALSE
+ has_eye_light_sprites = TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm
index 9f9f72981a9..61f04a568b9 100644
--- a/code/modules/mob/living/silicon/robot/sprites/medical.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm
@@ -79,13 +79,13 @@
has_custom_open_sprites = TRUE
// Wide/dogborg sprites
-
+/*
/datum/robot_sprite/dogborg/medical
module_type = list("Crisis", "Surgeon")
sprite_icon = 'icons/mob/robot/medical_wide.dmi'
// None yet
-
+*/
// Tall sprites
/datum/robot_sprite/dogborg/tall/medical
@@ -189,10 +189,20 @@
module_type = "Surgeon"
sprite_icon = 'icons/mob/robot/surgical_wide.dmi'
+ var/has_sleeper_light_indicator = FALSE
+
+/datum/robot_sprite/dogborg/surgical/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
+ if(has_sleeper_light_indicator)
+ if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g"
+ else return "[sprite_icon_state]-sleeper_r"
+ else
+ return ..()
+
/datum/robot_sprite/dogborg/surgical/vale
name = "Traumahound"
sprite_icon_state = "vale"
has_eye_light_sprites = TRUE
+ has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/surgical/borgi
name = "Borgi"
@@ -273,32 +283,32 @@
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/crisis_wide.dmi'
+ var/has_sleeper_light_indicator = FALSE
+
+/datum/robot_sprite/dogborg/crisis/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
+ if(has_sleeper_light_indicator)
+ if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g"
+ else return "[sprite_icon_state]-sleeper_r"
+ else
+ return ..()
+
/datum/robot_sprite/dogborg/crisis/hound
name = "CargoHound"
sprite_icon_state = "hound"
has_eye_light_sprites = TRUE
-
-/datum/robot_sprite/dogborg/crisis/hound/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
- if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g"
- else return "[sprite_icon_state]-sleeper_r"
+ has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/hounddark
name = "CargoHoundDark"
sprite_icon_state = "hounddark"
has_eye_light_sprites = TRUE
-
-/datum/robot_sprite/dogborg/crisis/hounddark/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
- if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g"
- else return "[sprite_icon_state]-sleeper_r"
+ has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/vale
name = "KMine"
sprite_icon_state = "vale"
has_eye_light_sprites = TRUE
-
-/datum/robot_sprite/dogborg/crisis/vale/get_belly_overlay(var/mob/living/silicon/robot/ourborg)
- if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g"
- else return "[sprite_icon_state]-sleeper_r"
+ has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/borgi
name = "Borgi"
diff --git a/code/modules/mob/living/silicon/robot/sprites/standard.dm b/code/modules/mob/living/silicon/robot/sprites/standard.dm
index d37ff1dd861..4e729ecf4e8 100644
--- a/code/modules/mob/living/silicon/robot/sprites/standard.dm
+++ b/code/modules/mob/living/silicon/robot/sprites/standard.dm
@@ -109,4 +109,21 @@
/datum/robot_sprite/standard/uptall2
name = "Feminine Humanoid, Variant 2"
- sprite_icon_state = "uptall2"
\ No newline at end of file
+ sprite_icon_state = "uptall2"
+
+// Wide/dogborg sprites
+/*
+/datum/robot_sprite/dogborg/standard
+ module_type = "Standard"
+ sprite_icon = 'icons/mob/robot/standard_wide.dmi'
+
+ // None yet
+*/
+// Tall sprites
+/*
+/datum/robot_sprite/dogborg/tall/standard
+ module_type = "Standard"
+ sprite_icon = 'icons/mob/robot/standard_large.dmi'
+
+ // None yet
+*/
\ No newline at end of file
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index fb8410e0fac..164ca19b159 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -50,7 +50,7 @@
return
for(var/t in organs)
qdel(t)
-
+
//VOREStation Edit Start - Hologram examine flavor
var/mob/living/silicon/ai/O = ..(move)
if(O)
@@ -195,7 +195,7 @@
O.fuzzy = B.fuzzy //VOREStation Addition: add size prefs to borgs
callHook("borgify", list(O))
- O.Namepick()
+ O.namepick()
spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned
qdel(src)
diff --git a/icons/mob/robot/civilian.dmi b/icons/mob/robot/civilian.dmi
new file mode 100644
index 00000000000..760706a9d6c
Binary files /dev/null and b/icons/mob/robot/civilian.dmi differ
diff --git a/icons/mob/robot/clerical.dmi b/icons/mob/robot/clerical.dmi
new file mode 100644
index 00000000000..d44682892e0
Binary files /dev/null and b/icons/mob/robot/clerical.dmi differ
diff --git a/icons/mob/robot/combat.dmi b/icons/mob/robot/combat.dmi
new file mode 100644
index 00000000000..098ae0f5c28
Binary files /dev/null and b/icons/mob/robot/combat.dmi differ
diff --git a/icons/mob/robot/combat_large.dmi b/icons/mob/robot/combat_large.dmi
new file mode 100644
index 00000000000..0b45493b258
Binary files /dev/null and b/icons/mob/robot/combat_large.dmi differ
diff --git a/icons/mob/robot/medical_wide.dmi b/icons/mob/robot/medical_wide.dmi
deleted file mode 100644
index f1dfc3bf408..00000000000
Binary files a/icons/mob/robot/medical_wide.dmi and /dev/null differ
diff --git a/icons/mob/robot/security.dmi b/icons/mob/robot/security.dmi
index 422e902f087..a5733994d50 100644
Binary files a/icons/mob/robot/security.dmi and b/icons/mob/robot/security.dmi differ
diff --git a/icons/mob/robot/service.dmi b/icons/mob/robot/service.dmi
new file mode 100644
index 00000000000..54e262b29f1
Binary files /dev/null and b/icons/mob/robot/service.dmi differ
diff --git a/icons/mob/robot/service_large.dmi b/icons/mob/robot/service_large.dmi
new file mode 100644
index 00000000000..496acdd7911
Binary files /dev/null and b/icons/mob/robot/service_large.dmi differ
diff --git a/icons/mob/robot/service_wide.dmi b/icons/mob/robot/service_wide.dmi
new file mode 100644
index 00000000000..f8e9d0b211d
Binary files /dev/null and b/icons/mob/robot/service_wide.dmi differ
diff --git a/icons/mob/robot/service_wide_booze.dmi b/icons/mob/robot/service_wide_booze.dmi
new file mode 100644
index 00000000000..ccf15038782
Binary files /dev/null and b/icons/mob/robot/service_wide_booze.dmi differ
diff --git a/icons/mob/robot/surgical_wide.dmi b/icons/mob/robot/surgical_wide.dmi
index 6d0b1ae58a9..471ce0fbe4e 100644
Binary files a/icons/mob/robot/surgical_wide.dmi and b/icons/mob/robot/surgical_wide.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index 7794023b0ad..f7f27ef9a39 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3031,6 +3031,8 @@
#include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm"
+#include "code\modules\mob\living\silicon\robot\sprites\civilian.dm"
+#include "code\modules\mob\living\silicon\robot\sprites\combat.dm"
#include "code\modules\mob\living\silicon\robot\sprites\engineering.dm"
#include "code\modules\mob\living\silicon\robot\sprites\janitor.dm"
#include "code\modules\mob\living\silicon\robot\sprites\medical.dm"