Robot Sprite Unit test, Robot Upports, Robot Sprite Fixes [MDB IGNORE] [IDB IGNORE] (#17139)

* Robot sprite validity

* key instead of index

* kash additions

* missing tag

* fail out on no name

* fixes

* let the dance commence

* rest style

* Fixes some of the sprites

Merging so I can see what else it wants

* check belly stages too not just max

* this too

* fixes

* fixes

* Adds variant catborgs

- Adds variant carborgs. These are the older models. Upport from CS.

NEEDS REMOVAL:
DMI FILE: modular_chomp/icons/mob/catborg/catborg.dmi

SPECIFIC REMOVAL IN FILES:
modular_chomp/code/modules/mob/living/silicon/robot/sprites/mining.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/medical.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/janitor.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/science.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/security.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/civilian.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/engineering.dm

* DULLAHAN BORGS

Up-ported dullahan borgs.
Makes it so proteans can choose dullahans as their sprite blob sprite.
NOTE: DULLAHAN-NINJA (V3) DOES NOT HAVE A SIT SPRITE. IT'S ALSO UNUSED. SYNDI SPRITE WAS PUT TO ACT AS A STANDIN

TO BE REMOVED DOWNSTREAM:
modular_chomp/icons/mob/dullahanborg

modular_chomp/code/modules/mob/living/silicon/robot/sprites/civilian.dm (dullahan/service & dullahan/servicealt)

modular_chomp/code/modules/mob/living/silicon/robot/sprites/engineering.dm
(dullahan/engineerv1 & dullahan/envingeerv2)

modular_chomp/code/modules/mob/living/silicon/robot/sprites/janitor.dm
(dullahan/janitor & dullahan/janitoralt)

modular_chomp/code/modules/mob/living/silicon/robot/sprites/medical.dm
(dullahan/crisis & dullahan/crisisalt)

modular_chomp/code/modules/mob/living/silicon/robot/sprites/mining.dm
(dullahan, dullahan/miner, dullahan/mineralt, dullahancarg, dullahancarg/cargo, dullahancarg/cargoalt

modular_chomp/code/modules/mob/living/silicon/robot/sprites/syndicate.dm
(Delete the entire file)

modular_chomp/code/modules/mob/living/silicon/robot/sprites/security.dm
(security/dullahan dullahan/sec dullahan/secalt)

* Update science.dm

* fixes dead overlays

* Update mining.dm

* more borgs

DOWNSTREAM REMOVAL:
code/modules/mob/living/silicon/robot/robot_modules/Widerobot_Clown_ch.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/clown.dm
code/modules/mob/living/silicon/robot/robot_modules/Widerobot_Standard_ch.dm (This file was unticked. It was placed in standard.dm)
modular_chomp/code/modules/mob/living/silicon/robot/sprites/combat.dm
modular_chomp/code/modules/mob/living/silicon/robot/sprites/medical.dm
code/modules/mob/living/silicon/robot/subtypes/boozeborg_ch.dm (Unticked in the DMI. Moved to subtypes/boozeborg.dm)
modular_chomp/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper.dm
modular_chomp/icons/mob/raptorborg/raptor.dmi - Unused
All the worm borg overrides

Downstream as well:
/obj/item/robot_tongue/examine(user) in code\modules\mob\living\silicon\robot\dogborg\dog_modules_vr.dm needs to be enabled.

* whew

* gwah

* SAVE

* fixes

* fixes sprites more

* Adds Outpost Borgs

Stoat and Possum.
Other versions of possum WIP

* no wreck overlay

* gwah

* decals to list

* fixing

* .

* fixes there 3 being 3

* fix decal resting

* sleeper fix

* fix struggle resting

* puts surgery module in its place

* no CE

---------

Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
Cameron Lennox
2025-02-27 13:00:02 -05:00
committed by GitHub
co-authored by Willburd Kashargul
parent fe7739a995
commit e3409de8b9
109 changed files with 1809 additions and 152 deletions
@@ -731,6 +731,56 @@
add_overlay(I)
qdel(I)
if(S.blob_appearance == "dullahan")
icon = 'icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi'
vis_height = 64
var/image/I = image(icon, "[S.dullahan_overlays[1]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[1]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
I = image(icon, "[S.dullahan_overlays[2]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[2]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
I = image(icon, "[S.dullahan_overlays[3]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[3]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
I = image(icon, "[S.dullahan_overlays[4]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[4]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
I = image(icon, "[S.dullahan_overlays[5]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[5]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
I = image(icon, "[S.dullahan_overlays[6]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16)
I.color = S.dullahan_overlays[S.dullahan_overlays[6]]
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
I.plane = MOB_PLANE
I.layer = MOB_LAYER
add_overlay(I)
qdel(I)
//You know technically I could just put all the icons into the 128x64.dmi file and off-set them to fit..
if(S.blob_appearance in wide_icons)
icon = 'icons/mob/species/protean/protean64x32.dmi'
@@ -528,6 +528,127 @@
S.dragon_overlays[6] = choice
S.dragon_overlays[S.dragon_overlays[6]] = new_color
S.blob_appearance = "dragon"
if("dullahan") //START OF DULLAHAN PORT.
var/list/options = list("Metalshell","Eyes","Decals","Import","Export")
for(var/option in options)
LAZYSET(options, option, image('icons/mob/robot/dullahan/v1/dullahansigns.dmi', option))
var/choice = show_radial_menu(protie, protie, options, radius = 60)
if(!choice || QDELETED(protie) || protie.incapacitated())
return FALSE
. = TRUE
var/list/dullahanmetal_styles = list(
"dullahanmetal",
"dullahanmetal2"
)
if(mind.assigned_role in command_positions)
dullahanmetal_styles.Add("dullahancommand")
var/list/dullahaneyes_styles = list(
"dullahaneyes"
)
var/list/dullahandecals_styles = list(
"dullahandecals",
"dullahandecals1",
"dullahandecals2",
"dullahandecals3",
"dullahandecals4",
"dullahandecals5",
"emptydecals"
)
var/dmetal
var/ddecals
var/deyes
var/ddecalscolor
var/deyescolor
var/dmetalcolor
switch(choice)
if("Metalshell")
var/extraon = "dullahanextendedon"
var/extraoff = "dullahanextendedoff"
options = dullahanmetal_styles
for(var/option in options)
var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16)
LAZYSET(options, option, I)
choice = show_radial_menu(protie, protie, options, radius = 90)
if(!choice || QDELETED(protie) || protie.incapacitated())
return 0
var/new_color = tgui_color_picker(src, "Pick shell color:","Shell Color", S.dullahan_overlays[3])
if(!new_color)
return 0
S.dullahan_overlays[3] = choice //metal overlay is 3, eyes is 4
S.dullahan_overlays[S.dullahan_overlays[3]] = new_color
if(choice == "dullahanmetal2")
S.dullahan_overlays[6] = extraon
var/tempcolor ="#FFFFFF"
S.dullahan_overlays[S.dullahan_overlays[6]] = tempcolor
else
S.dullahan_overlays[6] = extraoff
if("Eyes")
options = dullahaneyes_styles
for(var/option in options)
var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16)
LAZYSET(options, option, I)
choice = show_radial_menu(protie, protie, options, radius = 90)
if(!choice || QDELETED(protie) || protie.incapacitated())
return 0
var/new_color = tgui_color_picker(src, "Pick eye color:","Eye Color", S.dullahan_overlays[4])
if(!new_color)
return 0
S.dullahan_overlays[4] = choice
S.dullahan_overlays[S.dullahan_overlays[4]] = new_color
if("Decals")
options = dullahandecals_styles
for(var/option in options)
var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16, pixel_y = -16)
LAZYSET(options, option, I)
choice = show_radial_menu(protie, protie, options, radius = 90)
if(!choice || QDELETED(protie) || protie.incapacitated())
return 0
var/new_color = tgui_color_picker(src, "Pick decal color:","Decal Color", S.dullahan_overlays[5])
if(!new_color)
return 0
S.dullahan_overlays[5] = choice
S.dullahan_overlays[S.dullahan_overlays[5]] = new_color
if("Import")
var/dinput_style
dinput_style = sanitizeSafe(tgui_input_text(protie,"Paste the style string you exported with Export Style.", "Style loading","", 120), 128)
if(dinput_style)
var/list/dinput_style_list = splittext(dinput_style, ";")
if((LAZYLEN(dinput_style_list) == 6) && (dinput_style_list[1] in dullahanmetal_styles) && (dinput_style_list[3] in dullahandecals_styles) && (dinput_style_list[5] in dullahaneyes_styles))
try
if(dinput_style_list[1] in dullahanmetal_styles)
S.dullahan_overlays[3] = dinput_style_list[1]
if(dinput_style_list[1] == "dullahanmetal2")
S.dullahan_overlays[6] = "dullahanextendedon"
else
S.dullahan_overlays[6] = "dullahanextendedoff"
if(rgb2num(dinput_style_list[2]))
S.dullahan_overlays[S.dullahan_overlays[3]] = dinput_style_list[2] //metal shell color -2-
catch
dmetal = dinput_style_list[1]
try
if(dinput_style_list[3] in dullahandecals_styles)
S.dullahan_overlays[5] = dinput_style_list[3]
if(rgb2num(dinput_style_list[4]))
S.dullahan_overlays[S.dullahan_overlays[5]] = dinput_style_list[4] // decals color
catch
ddecals = dinput_style_list[3]
try
if(dinput_style_list[5] in dullahaneyes_styles)
S.dullahan_overlays[4] = dinput_style_list[5]
if(rgb2num(dinput_style_list[6]))
S.dullahan_overlays[S.dullahan_overlays[4]] = dinput_style_list[6] //eyes color
catch
ddecals = dinput_style_list[5]
if("Export")
dmetal = S.dullahan_overlays[3]
ddecals = S.dullahan_overlays[5]
deyes = S.dullahan_overlays[4]
dmetalcolor = S.dullahan_overlays[S.dullahan_overlays[3]]
ddecalscolor = S.dullahan_overlays[S.dullahan_overlays[5]]
deyescolor = S.dullahan_overlays[S.dullahan_overlays[4]]
var/output_style = jointext(list(dmetal,dmetalcolor,ddecals,ddecalscolor,deyes,deyescolor), ";")
to_chat(protie, span_notice("Exported style string is \" [output_style] \". Use this to get the same style in the future with import style"))
S.blob_appearance = "dullahan" //END OF DULLAHAN PORT.
if("Primary")
var/new_color = tgui_color_picker(protie, "Pick primary color:","Protean Primary", "#FF0000")
if(!new_color)
@@ -130,6 +130,15 @@
"dragon_eyesNormal" = "#FFFFFF"
)
var/list/dullahan_overlays = list(
"dullahanbody" = "#FFFFFF",
"dullahanhead" = "#FFFFFF",
"dullahanmetal" = "#FFFFFF",
"dullahaneyes" = "#FFFFFF",
"dullahandecals" = "#FFFFFF",
"dullahanextended" = "#FFFFFF"
// loads the icons from the DMI file in that order on spawn. they are overlay 1-6.
)
var/pseudodead = 0
/datum/species/protean/New()
@@ -479,3 +479,166 @@
if(custom_range)
range = custom_range
to_chat(user, span_notice("Scanner will now look up to [range] tile(s) away."))
/*
/obj/item/robot_tongue/examine(user)
. = ..()
if(Adjacent(user))
if(water.energy)
. += span_notice("[src] is wet. Just like it should be.")
if(water.energy < 5)
. += span_notice("[src] is dry.")
*/
/obj/item/shield_projector/line/exploborg
name = "expirmental shield projector"
description_info = "This creates a shield in a straight line perpendicular to the direction where the user was facing when it was activated. \
The shield allows projectiles to leave from inside but blocks projectiles from outside. Everything else can pass through the shield freely, \
including other people and thrown objects. The shield also cannot block certain effects which take place over an area, such as flashbangs or explosions."
shield_health = 90
max_shield_health = 90
shield_regen_amount = 25
line_length = 7 // How long the line is. Recommended to be an odd number.
offset_from_center = 2 // How far from the projector will the line's center be.
// To repair a single module
/obj/item/self_repair_system
name = "plating repair system"
desc = "A nanite control system to repair damaged armour plating and wiring while not moving. Destroyed armour can't be restored."
icon = 'icons/obj/robot_component.dmi'
icon_state = "armor"
var/repair_time = 25
var/repair_amount = 2.5
var/power_tick = 25
var/disabled_icon = "armor"
var/active_icon = "armor_broken"
var/list/target_components = list("armour")
var/repairing = FALSE
/obj/item/self_repair_system/New()
..()
flags |= NOBLUDGEON
/obj/item/self_repair_system/attack_self(mob/user)
if(repairing)
return
var/mob/living/silicon/robot/R = user
var/destroyed_components = FALSE
var/list/repairable_components = list()
for(var/target_component in target_components)
var/datum/robot_component/C = R.components[target_component]
if(!C)
continue
if(istype(C.wrapped, /obj/item/broken_device))
destroyed_components = TRUE
else if (C.brute_damage != 0 || C.electronics_damage != 0)
repairable_components += C
if(!repairable_components.len && destroyed_components)
to_chat(R, span_warning("Repair system initialization failed. Can't repair destroyed [target_components.len == 1 ? "[R.components[target_components[1]]]'s" : "component's"] plating or wiring."))
return
if(!repairable_components.len)
to_chat(R, span_warning("No brute or burn damage detected [target_components.len == 1 ? "in [R.components[target_components[1]]]" : ""]."))
return
if(destroyed_components)
to_chat(R, span_warning("WARNING! Destroyed modules detected. Those can not be repaired!"))
icon_state = active_icon
update_icon()
repairing = TRUE
for(var/datum/robot_component/C in repairable_components)
to_chat(R, span_notice("Repair system initializated. Repairing plating and wiring of [C]."))
src.self_repair(R, C, repair_time, repair_amount)
repairing = FALSE
icon_state = disabled_icon
update_icon()
/obj/item/self_repair_system/proc/self_repair(mob/living/silicon/robot/R, datum/robot_component/C, var/tick_delay, var/heal_per_tick)
if(!C || !R.cell)
return
if(C.brute_damage == 0 && C.electronics_damage == 0)
to_chat(R, span_notice("Repair of [C] completed."))
return
if(!R.use_direct_power(power_tick, 500)) //We don't want to drain ourselves too far down during exploration
to_chat(R, span_warning("Not enough power to initialize the repair system."))
return
if(do_after(R, tick_delay))
if(!C)
return
C.brute_damage -= min(C.brute_damage, heal_per_tick)
C.electronics_damage -= min(C.electronics_damage, heal_per_tick)
R.updatehealth()
src.self_repair(R, C, tick_delay, heal_per_tick)
// To repair multiple modules
/obj/item/self_repair_system/advanced
name = "self repair system"
desc = "A nanite control system to repair damaged components while not moving. Destroyed components can't be restored."
target_components = list("actuator", "radio", "power cell", "diagnosis unit", "camera", "comms", "armour")
power_tick = 10
repair_time = 15
repair_amount = 3
// Robot Weapons
/obj/item/gun/energy/robotic/flare
name = "flare gun"
desc = "A flare-gun"
projectile_type = /obj/item/projectile/energy/flash/flare
fire_sound = 'sound/weapons/tablehit1.ogg'
icon = 'icons/obj/gun.dmi'
icon_state = "taser"
charge_cost = 480
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_TASER
/obj/item/gun/energy/robotic/smallmedigun
name = "borg directed restoration system"
desc = "An adapted version of the BL-3 'Phoenix, for expiremental useage in borgs."
projectile_type = /obj/item/projectile/beam/medical_cell/borg
accept_cell_type = /obj/item/cell/device
cell_type = /obj/item/cell/device/weapon
charge_cost = 600
fire_delay = 6
force = 5
icon_state = "medbeam"
icon = 'icons/obj/gun_vr.dmi'
accuracy = 100
fire_sound = 'sound/weapons/eluger.ogg'
self_recharge = 1
use_external_power = 1
/obj/item/projectile/beam/medical_cell/borg
range = 4
/obj/item/projectile/beam/medical_cell/borg/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
if(target.stat != DEAD)
target.adjustBruteLoss(-3.75)
target.adjustFireLoss(-3.75)
else
return 1
/obj/item/melee/robotic/blade/explotailspear
name = "energy tail"
desc = "A glowing tail spear with a moderate range. It appears to be extremely sharp."
force = 45
armor_penetration = 25 //30 to try and make it not useless against armored mobs but not fully nullify it.
reach = 3
projectile_parry_chance = 15.
/obj/item/melee/robotic/jaws/big/explojaws
name = "explo jaws"
desc = "Highly lethal jaws for close range combat."
force = 60
armor_penetration = 25 //To try and make it not useless against armored mobs but not fully nullify it
projectile_parry_chance = 15
/obj/item/gun/energy/robotic/phasegun
name = "EW26 Artemis Mounted"
desc = "The RayZar EW26 Artemis, also known as the 'phase carbine', is a downsized energy-based weapon specifically designed for use against wildlife. This one has a safety interlock that prevents firing while in proximity to the facility."
description_fluff = "RayZar is Ward-Takahashis main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market."
icon = 'icons/obj/gun.dmi'
icon_state = "phasecarbine"
charge_cost = 160
recharge_time = 16
projectile_type = /obj/item/projectile/energy/phase
use_external_power = 1
self_recharge = 1
borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_LASER
@@ -813,4 +813,30 @@
max_item_count = 35
digest_multiplier = 3
/obj/item/dogborg/sleeper/command //Command borg belly
name = "Bluespace Filing Belly"
desc = "A mounted bluespace storage unit for carrying paperwork"
icon_state = "sleeperd"
injection_chems = null
compactor = TRUE
recycles = FALSE
max_item_count = 25
medsensor = FALSE
/obj/item/dogborg/sleeper/compactor/honkborg
name = "Jiggles Von Hungertron"
desc = "You've heard of Giggles Von Honkerton for the back, now get ready for Jiggles Von Hungertron for the front."
icon_state = "clowngut"
recycles = FALSE
/obj/item/dogborg/sleeper/exploration
name = "Store-Belly"
desc = "Equipment for a ExploreHound unit. A mounted portable-storage device that holds supplies/person."
icon_state = "sleeperlost"
injection_chems = list(REAGENT_ID_INAPROVALINE) // Only to stabilize during extractions
compactor = TRUE
max_item_count = 4
medsensor = FALSE
recycles = TRUE
#undef SLEEPER_INJECT_COST
+29 -7
View File
@@ -24,7 +24,7 @@
var/crisis //Admin-settable for combat module use.
var/crisis_override = 0
var/integrated_light_power = 6
var/robotdecal_on = 0
var/list/robotdecal_on = list()
var/datum/wires/robot/wires
can_be_antagged = TRUE
@@ -449,8 +449,29 @@
/mob/living/silicon/robot/verb/toggle_robot_decals() // loads overlay UNDER lights.
set category = "Abilities.Silicon"
set name = "Toggle extras"
robotdecal_on = !robotdecal_on
to_chat(src, span_filter_notice("You [robotdecal_on ? "enable" : "disable"] your extra apperances."))
if(!sprite_datum)
return
if(!LAZYLEN(sprite_datum.sprite_decals))
to_chat(src, span_warning("This module does not support decals."))
return
var/extra_message = "Enabled decals:\n"
for(var/decal in robotdecal_on)
extra_message += decal + "\n"
var/decal_to_toggle = tgui_input_list(src, "Please select which decal you want to toggle\n[extra_message]", "Decal Toggle", sprite_datum.sprite_decals)
if(!decal_to_toggle)
return
decal_to_toggle = lowertext(decal_to_toggle)
if(robotdecal_on.Find(decal_to_toggle))
robotdecal_on -= decal_to_toggle
to_chat(src, span_filter_notice("You disable your \"[decal_to_toggle]\" extra apperances."))
else
robotdecal_on += decal_to_toggle
to_chat(src, span_filter_notice("You enable your \"[decal_to_toggle]\" extra apperances."))
update_icon()
/mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence.
@@ -966,11 +987,12 @@
if(eyes_overlay)
add_overlay(eyes_overlay)
if(robotdecal_on && sprite_datum.has_robotdecal_sprites)
if(robotdecal_on.len && LAZYLEN(sprite_datum.sprite_decals))
if(!shell || deployed) // Shell borgs that are not deployed will have no eyes.
var/robotdecal_overlay = sprite_datum.get_robotdecal_overlay(src)
if(robotdecal_overlay)
add_overlay(robotdecal_overlay)
for(var/enabled_decal in robotdecal_on)
var/robotdecal_overlay = sprite_datum.get_robotdecal_overlay(src, enabled_decal)
if(robotdecal_overlay)
add_overlay(robotdecal_overlay)
if(lights_on && sprite_datum.has_eye_light_sprites)
if(!shell || deployed) // Shell borgs that are not deployed will have no eyes.
@@ -34,3 +34,29 @@
if(isliving(contents))
vore_light_states[b_class] = 1
return
/mob/living/silicon/robot/vs_animate(var/belly_class)
if(!sprite_datum.has_vore_struggle_sprite)
return
if(belly_class == "sleeper" && sleeper_state == 0 && vore_selected.silicon_belly_overlay_preference == "Sleeper")
return
var/vs_fullness = vore_fullness_ex[belly_class]
if(resting)
cut_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class))
add_overlay("[sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)]-struggle")
else
cut_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
add_overlay("[sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)]-struggle")
addtimer(CALLBACK(src, PROC_REF(end_vs_animate), belly_class), 1.2 SECONDS)
/mob/living/silicon/robot/proc/end_vs_animate(var/belly_class)
var/vs_fullness = vore_fullness_ex[belly_class]
if(resting)
cut_overlay("[sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)]-struggle")
else
cut_overlay("[sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)]-struggle")
if(vs_fullness > 0)
if(resting)
add_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class))
else
add_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
@@ -2,12 +2,15 @@ var/global/list/robot_modules = list(
"Standard" = /obj/item/robot_module/robot/standard,
"Service" = /obj/item/robot_module/robot/clerical/butler,
"Clerical" = /obj/item/robot_module/robot/clerical/general,
"Clown" = /obj/item/robot_module/robot/clerical/honkborg,
"Command" = /obj/item/robot_module/robot/chound,
"Research" = /obj/item/robot_module/robot/research,
"Miner" = /obj/item/robot_module/robot/miner,
"Crisis" = /obj/item/robot_module/robot/medical/crisis,
"Surgeon" = /obj/item/robot_module/robot/medical/surgeon,
"Security" = /obj/item/robot_module/robot/security/general,
"Combat" = /obj/item/robot_module/robot/security/combat,
"Exploration" = /obj/item/robot_module/robot/exploration,
"Engineering" = /obj/item/robot_module/robot/engineering,
"Janitor" = /obj/item/robot_module/robot/janitor,
"Gravekeeper" = /obj/item/robot_module/robot/gravekeeper,
@@ -240,6 +243,10 @@ var/global/list/robot_modules = list(
pto_type = PTO_MEDICAL
supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade)
//This is a constant back and forth debate. 11 years ago, the 'medical' borg was split into surgery and crisis.
//Two years ago(?), they were combined into Crisis elsewhere and the idea seems to be well appreciated.
//However, given this seems as though it will remain a hot topic for as long as SS13 exists, we are going to leave the surgeon module here in the event that we split them. Again.
//This also goes for the sprite datums. It's be a lot of work to 'clear' them of having surgery in their path just to have to split them again in 2-3 years.
/obj/item/robot_module/robot/medical/surgeon
name = "surgeon robot module"
@@ -324,18 +331,36 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/gripper/no_use/organ(src)
src.modules += new /obj/item/gripper/medical(src)
src.modules += new /obj/item/shockpaddles/robot(src)
//Surgeon Modules below
src.modules += new /obj/item/autopsy_scanner(src)
src.modules += new /obj/item/surgical/scalpel/cyborg(src)
src.modules += new /obj/item/surgical/hemostat/cyborg(src)
src.modules += new /obj/item/surgical/retractor/cyborg(src)
src.modules += new /obj/item/surgical/cautery/cyborg(src)
src.modules += new /obj/item/surgical/bonegel/cyborg(src)
src.modules += new /obj/item/surgical/FixOVein/cyborg(src)
src.modules += new /obj/item/surgical/bonesetter/cyborg(src)
src.modules += new /obj/item/surgical/circular_saw/cyborg(src)
src.modules += new /obj/item/surgical/surgicaldrill/cyborg(src)
src.modules += new /obj/item/surgical/bioregen/cyborg(src)
//Surgeon Modules End
src.modules += new /obj/item/inflatable_dispenser/robot(src)
//src.modules += new /obj/item/holosign_creator/medical(src) //Re-enable after Guti's PR.
var/obj/item/reagent_containers/spray/PS = new /obj/item/reagent_containers/spray(src)
src.emag += PS
PS.reagents.add_reagent(REAGENT_ID_PACID, 250)
PS.name = "Polyacid spray"
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(30000)
synths += medicine
var/obj/item/stack/medical/advanced/clotting/C = new (src)
var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
C.uses_charge = 1
C.charge_costs = list(5000)
C.synths = list(medicine)
O.uses_charge = 1
O.charge_costs = list(1000)
O.synths = list(medicine)
@@ -348,6 +373,7 @@ var/global/list/robot_modules = list(
src.modules += O
src.modules += B
src.modules += S
src.modules += C
src.modules += new /obj/item/dogborg/sleeper(src)
src.emag += new /obj/item/dogborg/pounce(src) //Pounce
@@ -657,6 +683,42 @@ var/global/list/robot_modules = list(
if(PB)
PB.reagents.add_reagent(REAGENT_ID_BEER2, 2 * amount)
/obj/item/robot_module/robot/clerical/honkborg
name = "clown robot module"
channels = list("Service" = 1,
"Entertainment" = 1)
pto_type = PTO_CIVILIAN
can_be_pushed = 0
/obj/item/robot_module/robot/clerical/honkborg/create_equipment(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/gripper/service(src)
src.modules += new /obj/item/reagent_containers/glass/bucket(src)
src.modules += new /obj/item/material/minihoe(src)
src.modules += new /obj/item/analyzer/plant_analyzer(src)
src.modules += new /obj/item/storage/bag/serviceborg(src)
src.modules += new /obj/item/robot_harvester(src)
src.modules += new /obj/item/multitool(src)
src.modules += new /obj/item/dogborg/pounce(src)
src.modules += new /obj/item/bikehorn(src)
src.modules += new /obj/item/gun/launcher/confetti_cannon/robot(src)
var/obj/item/rsf/M = new /obj/item/rsf(src)
M.stored_matter = 30
src.modules += M
src.modules += new /obj/item/reagent_containers/dropper/industrial(src)
var/obj/item/flame/lighter/zippo/L = new /obj/item/flame/lighter/zippo(src)
L.lit = 1
src.modules += L
src.modules += new /obj/item/tray/robotray(src)
src.modules += new /obj/item/reagent_containers/borghypo/service(src)
var/obj/item/dogborg/sleeper/compactor/honkborg/B = new /obj/item/dogborg/sleeper/compactor/honkborg(src)
src.modules += B
..()
/obj/item/robot_module/robot/clerical/general
name = "clerical robot module"
@@ -10,11 +10,11 @@
var/has_eye_sprites = TRUE
var/has_eye_light_sprites = FALSE
var/has_robotdecal_sprites = FALSE
var/has_custom_open_sprites = FALSE
var/has_vore_belly_sprites = FALSE
var/has_vore_belly_resting_sprites = FALSE
var/has_sleeper_light_indicator = FALSE //Moved here because there's no reason lights should be limited to just medical borgs. Or redefined every time they ARE used.
var/has_vore_struggle_sprite = FALSE
var/max_belly_size = 1 //If larger bellies are made, set this to the value of the largest size
var/has_rest_sprites = FALSE
var/list/rest_sprite_options
@@ -32,6 +32,7 @@
var/whitelist_charname
var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper"
var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1
var/list/sprite_decals = list() // Allow extra decals
/// Determines if the borg has the proper flags to show an overlay.
/datum/robot_sprite/proc/sprite_flag_check(var/flag_to_check)
@@ -132,11 +133,18 @@
else
return
/datum/robot_sprite/proc/get_robotdecal_overlay(var/mob/living/silicon/robot/ourborg)
if(!(ourborg.resting && has_robotdecal_sprites))
return "[sprite_icon_state]-decals"
else
return
/datum/robot_sprite/proc/get_robotdecal_overlay(var/mob/living/silicon/robot/ourborg, var/type)
if(LAZYLEN(sprite_decals))
if(!ourborg.resting)
return "[sprite_icon_state]-[type]"
switch(ourborg.rest_style)
if("Sit")
return "[sprite_icon_state]-[type]-sit"
if("Bellyup")
return "[sprite_icon_state]-[type]-bellyup"
else
return "[sprite_icon_state]-[type]-rest"
/datum/robot_sprite/proc/get_rest_sprite(var/mob/living/silicon/robot/ourborg)
if(!(ourborg.rest_style in rest_sprite_options))
@@ -42,9 +42,10 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2, "throat" =2)
belly_capacity_list = list("sleeper" = 2)
sprite_flags = ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_GUN_SPRITE
/// Engineering
@@ -56,6 +57,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -71,6 +73,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -85,6 +88,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -100,6 +104,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -114,6 +119,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -128,6 +134,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2)
@@ -228,7 +235,6 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_robotdecal_sprites = TRUE
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_service.dmi'
rest_sprite_options = list("Default", "Bellyup", "Sit")
belly_capacity_list = list("sleeper" = 2, "throat" =2)
@@ -252,7 +258,7 @@
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = FALSE
has_vore_belly_resting_sprites = TRUE
has_robotdecal_sprites = TRUE
sprite_decals = list("decals")
is_whitelisted = FALSE //Putting this here as a declaration that it is NOT whitelisted.
// whitelist_ckey = "cameron653" //The owner of the character.
// There is only one version of this borg, so it gets all the departments.
@@ -68,10 +68,15 @@
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
sprite_icon_state = "worm-service"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/civilian/uptall
name = "Feminine Humanoid"
@@ -308,23 +313,30 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/service/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/service/dullahan
name = "Dullahan"
sprite_icon_state = "dullahanserv"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_serv.dmi'
rest_sprite_options = list("Default", "Sit")
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
pixel_x = 0
/datum/robot_sprite/dogborg/tall/service/dullahanv3/basic
name = "Dullahan service v3"
/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt
name = "Dullahan v2"
sprite_icon_state = "dullahanserv_alt"
/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt2
name = "Dullahan v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/service.dmi'
sprite_icon_state = "dullahanservice"
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/tall/service/dullahanv3/barista
name = "Dullahan matcha v3"
/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt3
name = "Dullahan v4 matcha"
sprite_icon = 'icons/mob/robot/dullahan/v3/barista.dmi'
sprite_icon_state = "dullahanbarista"
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
sprite_decals = list("decals")
// Clerical
@@ -401,3 +413,76 @@
// None yet
*/
/datum/robot_sprite/dogborg/clown
module_type = "Clown"
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
/datum/robot_sprite/dogborg/clown/vale
name = "Honkhound V2"
sprite_icon_state = "honkborg"
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/tall/clown
module_type = "Clown"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/tall/clown/k4t
name = "K4T"
sprite_icon_state = "k4tclown"
has_eye_light_sprites = TRUE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/clown/dullahan/clown
name = "Dullahan Clown"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_clown.dmi'
sprite_icon_state = "dullahanclown"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
pixel_x = 0
/datum/robot_sprite/dogborg/clown/stoat
name = "ST-04t"
sprite_icon = 'icons/mob/robot/stoatborg.dmi'
sprite_icon_state = "stoatclown"
has_eye_light_sprites = TRUE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/service/valech
name = "ServicehoundV2 - Alt"
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
sprite_icon_state = "servborg"
rest_sprite_options = list("Default")
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/service/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixserv"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/tall/service/mekaserve_alt
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
name = "MEKA Alt"
pixel_x = 0
sprite_icon_state = "mekaserve_alt"
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/service/smolraptorservicesprite
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_serv.dmi'
/datum/robot_sprite/dogborg/service/smolraptorservicesprite/smolraptorserv
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -49,9 +49,15 @@
/datum/robot_sprite/combat/worm
name = "W02M"
sprite_icon_state = "worm"
sprite_icon_state = "worm-combat"
has_custom_open_sprites = TRUE
sprite_flags = ROBOT_HAS_SHIELD_SPRITE
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/combat/uptall
name = "Feminine Humanoid"
@@ -147,3 +153,59 @@
return
else
return ..()
/datum/robot_sprite/dogborg/tall/combat/tall
name = "MEKA"
sprite_icon_state = "mekasyndi"
module_type = "Combat"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
has_vore_belly_sprites = TRUE
pixel_x = 0
/datum/robot_sprite/dogborg/tall/combat/tall/mmeka
name = "NIKO"
sprite_icon_state = "mmekasyndi"
has_vore_belly_sprites = TRUE
/datum/robot_sprite/dogborg/tall/combat/tall/fmeka
name = "NIKA"
sprite_icon_state = "fmekasyndi"
has_vore_belly_sprites = TRUE
/datum/robot_sprite/dogborg/tall/combat/tall/k4t
name = "K4T"
sprite_icon_state = "k4tsyndi"
has_vore_belly_sprites = FALSE
//Using our own category wide here not to interfere with upstream in case they add wide sprites under just dogborg.
/datum/robot_sprite/dogborg/wide/combat
module_type = "Combat"
has_custom_equipment_sprites = TRUE
has_eye_sprites = FALSE
/datum/robot_sprite/dogborg/wide/combat/blade/do_equipment_glamour(var/obj/item/robot_module/module)
if(!has_custom_equipment_sprites)
return
..()
var/obj/item/melee/robotic/blade/CBB = locate() in module.modules
if(CBB)
CBB.name = "combat saw"
CBB.desc = "A high frequency blade attached to the end of a cyborg's tail. It appears to be extremely sharp."
var/obj/item/melee/robotic/borg_combat_shocker/BCS = locate() in module.modules
if(BCS)
BCS.name = "combat jaws"
BCS.desc = "Shockingly chompy!"
BCS.icon_state = "ertjaws"
BCS.hitsound = 'sound/weapons/bite.ogg'
BCS.attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
BCS.dogborg = TRUE
/datum/robot_sprite/dogborg/wide/combat/blade
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
name = "Blade"
sprite_icon_state = "blade"
sprite_hud_icon_state = "ert"
rest_sprite_options = list()
sprite_flags = ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_DAGGER_SPRITE
@@ -0,0 +1,113 @@
/obj/item/robot_module/robot/chound
languages = list(
LANGUAGE_SOL_COMMON = 1,
LANGUAGE_TRADEBAND = 1,
LANGUAGE_UNATHI = 1,
LANGUAGE_SIIK = 1,
LANGUAGE_SKRELLIAN = 1,
LANGUAGE_ROOTLOCAL = 0,
LANGUAGE_GUTTER = 0,
LANGUAGE_SCHECHI = 1,
LANGUAGE_EAL = 1,
LANGUAGE_SIGN = 0,
LANGUAGE_BIRDSONG = 1,
LANGUAGE_SAGARU = 1,
LANGUAGE_CANILUNZT = 1,
LANGUAGE_ECUREUILIAN= 1,
LANGUAGE_DAEMON = 1,
LANGUAGE_ENOCHIAN = 1,
LANGUAGE_DRUDAKAR = 1,
LANGUAGE_TAVAN = 1
)
//Build our Module
/obj/item/robot_module/robot/chound
name = "command robot module"
channels = list(
"Medical" = 1,
"Engineering" = 1,
"Security" = 1,
"Service" = 1,
"Supply" = 0,
"Science" = 1,
"Command" = 1,
"Explorer" = 0
)
pto_type = PTO_CIVILIAN
can_be_pushed = 0
/obj/item/robot_module/robot/chound/create_equipment(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/pen/robopen(src)
src.modules += new /obj/item/form_printer(src)
src.modules += new /obj/item/gripper/paperwork(src)
src.modules += new /obj/item/hand_labeler(src)
src.modules += new /obj/item/stamp(src)
src.modules += new /obj/item/stamp/denied(src)
//src.modules += new /obj/item/taskmanager(src) //Needs to be ported over.
src.emag += new /obj/item/stamp/chameleon(src)
src.emag += new /obj/item/pen/chameleon(src)
src.modules += new /obj/item/dogborg/sleeper/command(src)
src.emag += new /obj/item/dogborg/pounce(src)
..()
/datum/robot_sprite/dogborg/command
name = "Commandhound V2"
sprite_icon_state = "kcom"
has_eye_light_sprites = TRUE
module_type = "Command"
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
/datum/robot_sprite/dogborg/command/borgi
name = "Borgi"
sprite_icon_state = "borgi"
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/tall/command
module_type = "Command"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/raptor/command
module_type = "Command"
sprite_icon = 'icons/mob/robot/raptor.dmi'
/datum/robot_sprite/dogborg/raptor/command/raptor
name = "Raptor"
sprite_icon_state = "chraptor"
has_dead_sprite_overlay = FALSE
has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/command/meka
name = "MEKA"
sprite_icon_state = "mekaunity"
has_eye_light_sprites = TRUE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/command/mmeka
name = "NIKO"
sprite_icon_state = "mmekaunity"
has_eye_light_sprites = TRUE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/command/fmeka
name = "NIKA"
sprite_icon_state = "fmekaunity"
has_eye_light_sprites = TRUE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/command/smolraptorcommand
name = "Small Raptor"
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_cc.dmi'
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -105,10 +105,16 @@
sprite_icon_state = "zoomba"
has_dead_sprite = TRUE
/datum/robot_sprite/engineering/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-engineering"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/engineering/uptall
name = "Feminine Humanoid"
@@ -214,13 +220,38 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/engineering/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/engineering/dullahanv3/engineerdully
name = "Dullahan engineer v3"
sprite_icon_state = "dullahanengineer"
/datum/robot_sprite/dogborg/tall/engineering/dullahan
name = "Dullahan v1"
sprite_icon_state = "dullahaneng"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_eng.dmi'
rest_sprite_options = list("Default", "Sit")
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv2
name = "Dullahan v2"
sprite_icon_state = "dullahaneng_alt"
/datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv3
name = "Dullahan v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/engineer.dmi'
sprite_icon_state = "dullahanengineer"
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/engineering/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixengi"
has_eye_light_sprites = TRUE
has_vore_belly_resting_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/engineering/smolraptorengineeringsprite
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_eng.dmi'
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -38,7 +38,7 @@
sprite_hud_icon_state = "medihound"
/datum/robot_sprite/fluff/argonne/surgical
module_type = "Surgeon"
module_type = "Crisis"
sprite_icon_state = "argonne-russ-surg"
sprite_hud_icon_state = "medihound"
@@ -96,8 +96,13 @@
/datum/robot_sprite/janitor/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-janitor"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/janitor/uptall
name = "Feminine Humanoid"
@@ -199,13 +204,48 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/janitor/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/janitor/dullahanv3/janitordully
name = "Dullahan janitor v3"
sprite_icon_state = "dullahanjanitor"
/datum/robot_sprite/dogborg/tall/janitor/dullahan
name = "Dullahan v1"
sprite_icon_state = "dullahanjani"
module_type = "Janitor"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_jani.dmi'
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
rest_sprite_options = list("Default", "Sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt
name = "Dullahan v2"
sprite_icon_state = "dullahanjani_alt"
/datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt2
name = "Dullahan v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/janitor.dmi'
sprite_icon_state = "dullahanjanitor"
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/janitor/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixjani"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/smolraptorjanitorsprite
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_jani.dmi'
module_type = "Janitor"
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/janitor/possum
name = "0-P0SSm"
sprite_icon = 'icons/mob/robot/possumborg.dmi'
sprite_icon_state = "possjani"
//has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
@@ -73,10 +73,14 @@
sprite_icon_state = "noble"
has_custom_open_sprites = TRUE
/datum/robot_sprite/medical/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
/datum/robot_sprite/surgical/worm
name = "W02M - Surgical"
sprite_icon_state = "worm-surgeon"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
// Wide/dogborg sprites
/*
@@ -137,76 +141,77 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/medical/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/medical/dullahanv3/medicaldully
name = "Dullahan medical v3"
sprite_icon_state = "dullahanmedical"
/datum/robot_sprite/dogborg/tall/crisis/dullahan
name = "Dullahan"
sprite_icon_state = "dullahanmed"
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_med.dmi'
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
rest_sprite_options = list("Default", "Sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/crisis/dullahan/crisisalt
name = "Dullahan v2"
sprite_icon_state = "dullahanmed_alt"
/datum/robot_sprite/dogborg/tall/medical/dullahan/crisisalt2
name = "Dullahan medical v3"
sprite_decals = list("decals")
sprite_icon = 'icons/mob/robot/dullahan/v3/medical.dmi'
sprite_icon_state = "dullahanmedical"
// Surgeon
// Regular sprites
/datum/robot_sprite/surgical
module_type = "Surgeon"
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/surgical.dmi'
/datum/robot_sprite/surgical/toiletbot
name = "Telemachus"
name = "Telemachus - Surgical"
sprite_icon_state = "toiletbot"
/datum/robot_sprite/surgical/sleek
name = "WTOperator"
name = "WTOperator - Surgical"
sprite_icon_state = "sleek"
/datum/robot_sprite/surgical/drone
name = "AG Model"
name = "AG Model - Surgical"
sprite_icon_state = "drone"
has_custom_open_sprites = TRUE
/datum/robot_sprite/surgical/glitterfly
name = "Pyralis"
name = "Pyralis - Surgical"
sprite_icon_state = "glitterfly"
has_custom_open_sprites = TRUE
/datum/robot_sprite/surgical/decapod
name = "Decapod"
name = "Decapod - Surgical"
sprite_icon_state = "decapod"
has_custom_open_sprites = TRUE
/datum/robot_sprite/surgical/pneuma
name = "Pneuma"
name = "Pneum - Surgical"
sprite_icon_state = "pneuma"
has_custom_open_sprites = TRUE
/datum/robot_sprite/surgical/zoomba
name = "ZOOM-BA"
name = "ZOOM-BA - Surgical"
sprite_icon_state = "zoomba"
has_dead_sprite = TRUE
/datum/robot_sprite/surgical/uptall
name = "Feminine Humanoid"
name = "Feminine Humanoid - Surgical"
sprite_icon_state = "uptall"
// Wide/dogborg sprites
/datum/robot_sprite/dogborg/surgical
module_type = "Surgeon"
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/surgical_wide.dmi'
/* //Handled by the normal belly code now.
/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/do_equipment_glamour(var/obj/item/robot_module/module)
if(!has_custom_equipment_sprites)
return
@@ -229,7 +234,7 @@
has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/surgical/borgi
name = "Borgi"
name = "Borgi - Surgical"
sprite_icon_state = "borgi"
sprite_hud_icon_state = "medihound"
has_eye_sprites = FALSE
@@ -237,13 +242,13 @@
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/surgical/drake
name = "Drake"
name = "Drake - Surgical"
sprite_icon_state = "drake"
// Tall sprites
/datum/robot_sprite/dogborg/tall/surgical
module_type = "Surgeon"
module_type = "Crisis"
sprite_icon = 'icons/mob/robot/surgical_large.dmi'
/datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/robot_module/module)
@@ -261,7 +266,7 @@
SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
/datum/robot_sprite/dogborg/tall/surgical/raptor
name = "Raptor V-4"
name = "Raptor V-4 - Surgical"
sprite_icon_state = "raptor"
has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
@@ -276,11 +281,11 @@
sprite_icon = 'icons/mob/robot/crisis.dmi'
/datum/robot_sprite/crisis/toiletbot
name = "Telemachus"
name = "Telemachus - Crisis"
sprite_icon_state = "toiletbot"
/datum/robot_sprite/crisis/sleek
name = "WTOperator"
name = "WTOperator - Crisis"
sprite_icon_state = "sleek"
/datum/robot_sprite/crisis/drone
@@ -294,27 +299,27 @@
has_custom_open_sprites = TRUE
/datum/robot_sprite/crisis/glitterfly
name = "Pyralis"
name = "Pyralis - Crisis"
sprite_icon_state = "glitterfly"
has_custom_open_sprites = TRUE
/datum/robot_sprite/crisis/decapod
name = "Decapod"
name = "Decapod - Crisis"
sprite_icon_state = "decapod"
has_custom_open_sprites = TRUE
/datum/robot_sprite/crisis/pneuma
name = "Pneuma"
name = "Pneuma - Crisis"
sprite_icon_state = "pneuma"
has_custom_open_sprites = TRUE
/datum/robot_sprite/crisis/zoomba
name = "ZOOM-BA"
name = "ZOOM-BA - Crisis"
sprite_icon_state = "zoomba"
has_dead_sprite = TRUE
/datum/robot_sprite/crisis/uptall
name = "Feminine Humanoid"
name = "Feminine Humanoid - Crisis"
sprite_icon_state = "uptall"
// Wide/dogborg sprites
@@ -367,7 +372,7 @@
has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/borgi
name = "Borgi"
name = "Borgi - Crisis"
sprite_icon_state = "borgi"
sprite_hud_icon_state = "medihound"
has_eye_sprites = FALSE
@@ -375,7 +380,7 @@
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/crisis/drake
name = "Drake"
name = "Drake - Crisis"
sprite_icon_state = "drake"
// Tall sprites
@@ -399,7 +404,49 @@
SP.attack_verb = list("batted", "pawed", "bopped", "whapped")
/datum/robot_sprite/dogborg/tall/crisis/raptor
name = "Raptor V-4"
name = "Raptor V-4 - Crisis"
sprite_icon_state = "raptor"
has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/crisis/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixmed"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = TRUE
has_dead_sprite_overlay = FALSE
//Medical into Crisis type merge
/datum/robot_sprite/surgical
module_type = "Crisis"
/datum/robot_sprite/dogborg/surgical
module_type = "Crisis"
//Added sprites
/datum/robot_sprite/dogborg/crisis/vale2
name = "Mediborg Model V-3"
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
sprite_icon_state = "vale2"
sprite_hud_icon_state = "medihound"
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixmed"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = TRUE
/datum/robot_sprite/dogborg/crisis/smolraptor
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_med.dmi'
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -95,8 +95,12 @@
/datum/robot_sprite/mining/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-miner"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/mining/uptall
name = "Feminine Humanoid"
@@ -184,13 +188,108 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/mining/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/mining/dullahanv3/miningdully
name = "Dullahan mining v3"
sprite_icon_state = "dullahanmining"
/datum/robot_sprite/dogborg/tall/mining/dullahan
name = "Dullahan Mining unit"
sprite_icon_state = "dullahanmine"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_mine.dmi'
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
has_custom_open_sprites = FALSE
has_eye_light_sprites = TRUE
rest_sprite_options = list("Default", "sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/mining/dullahan/mineralt
name = "Dullahan Mining unit v2"
sprite_icon_state = "dullahanmine_alt"
/datum/robot_sprite/dogborg/tall/mining/dullahan/miningdully
name = "Dullahan mining v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/mining.dmi'
sprite_icon_state = "dullahanmining"
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/tall/mining/dullahancarg
name = "Dullahan Cargo"
sprite_icon_state = "dullahancargo"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_cargo.dmi'
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/mining/dullahancarg/cargoalt
name = "Dullahan Cargo v2"
sprite_icon_state = "dullahancargo_alt"
/datum/robot_sprite/dogborg/mining/cat
name = "Cat - Mining"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixmine"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/mining/catcargo
name = "Cat - Cargo"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixcargo"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/tall/mining/tall
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/tall/mining/tall/mekacargo
name = "MEKA - Cargo"
sprite_icon_state = "mekacargo"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/mining/tall/mmekacargo
name = "NIKO - Cargo"
sprite_icon_state = "mmekacargo"
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/mining/tall/fmekacargo
name = "NIKA - Cargo"
sprite_icon_state = "fmekacargo"
has_eye_light_sprites = TRUE
has_sleeper_light_indicator = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/mining/tall/k4tcargo
name = "K4T - Cargo"
sprite_icon_state = "k4tcargo"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/mining/tall/k4t_alt1cargo
name = "K4Talt - Cargo"
sprite_icon_state = "k4tcargo_alt1"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/mining/smolraptorminer
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_min.dmi'
name = "Small Raptor Miner"
sprite_icon_state = "smolraptor"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
has_dead_sprite_overlay = FALSE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/mining/smolraptorcargo
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_car.dmi'
name = "Small Raptor Cargo"
sprite_icon_state = "smolraptor"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
has_dead_sprite_overlay = FALSE
rest_sprite_options = list("Default", "Sit")
@@ -83,10 +83,15 @@
name = "XI-GUS"
sprite_icon_state = "spider"
/datum/robot_sprite/science/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-science"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/science/uptall
name = "Feminine Humanoid"
@@ -206,13 +211,42 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/science/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/science/dullahanv3/sciencedully
name = "Dullahan science v3"
sprite_icon_state = "dullahanscience"
/datum/robot_sprite/dogborg/tall/science/dullahan
name = "Dullahan"
sprite_icon_state = "dullahansci"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_sci.dmi'
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
has_eye_light_sprites = TRUE
sprite_hud_icon_state = "sci-borg"
pixel_x = 0
/datum/robot_sprite/dogborg/tall/science/dullahan/scialt
name = "Dullahan v2"
sprite_icon_state = "dullahansci_alt"
/datum/robot_sprite/dogborg/tall/science/dullahan/scialt2
name = "Dullahan v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/science.dmi'
sprite_icon_state = "dullahanscience"
rest_sprite_options = list("Default", "sit")
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/science/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixsci"
sprite_hud_icon_state = "sci-borg"
has_vore_belly_resting_sprites = TRUE
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/science/smolraptor
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_sci.dmi'
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -108,8 +108,12 @@
/datum/robot_sprite/security/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-security"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/security/uptall
name = "Feminine Humanoid"
@@ -212,13 +216,47 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/security/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/security/dullahan
name = "Dullahan"
sprite_icon_state = "dullahansec"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_sec.dmi'
pixel_x = 0
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "sit")
/datum/robot_sprite/dogborg/tall/security/dullahanv3/securitydully
/datum/robot_sprite/dogborg/tall/security/dullahan/secalt
name = "Dullahan v2"
sprite_icon_state = "dullahansec_alt"
/datum/robot_sprite/dogborg/tall/security/dullahan/securitydully
name = "Dullahan security v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/security.dmi'
sprite_icon_state = "dullahansecurity"
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
rest_sprite_options = list("Default", "sit")
sprite_decals = list("decals")
/datum/robot_sprite/dogborg/security/vale2
name = "Secborg model V-3"
sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi'
sprite_icon_state = "secvale"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/security/cat
name = "Cat"
sprite_icon = 'icons/mob/robot/catborg_variant.dmi'
sprite_icon_state = "vixsec"
sprite_hud_icon_state = "k9"
has_eye_light_sprites = TRUE
has_dead_sprite_overlay = FALSE
/datum/robot_sprite/dogborg/security/smolraptor
sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_pk.dmi'
name = "Small Raptor"
sprite_icon_state = "smolraptor"
has_dead_sprite_overlay = FALSE
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
@@ -100,8 +100,12 @@
/datum/robot_sprite/standard/worm
name = "W02M"
sprite_icon_state = "worm"
has_custom_open_sprites = TRUE
sprite_icon_state = "worm-standard"
sprite_icon = 'icons/mob/robot/wormborg.dmi'
has_dead_sprite_overlay = FALSE
has_custom_open_sprites = FALSE
has_vore_belly_sprites = TRUE
has_dead_sprite = TRUE
/datum/robot_sprite/standard/uptall
name = "Feminine Humanoid"
@@ -132,13 +136,72 @@
module_type = "Standard"
//sprite_icon = 'icons/mob/robot/standard_large.dmi' NOT USED YET
/datum/robot_sprite/dogborg/tall/standard/dullahanv3
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
//named v3 to avoid conflicts with downstream
/datum/robot_sprite/dogborg/tall/standard/dullahanv3/standarddully
name = "Dullahan standard v3"
sprite_icon = 'icons/mob/robot/dullahan/v3/standard.dmi'
sprite_icon_state = "dullahanstandard"
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
sprite_decals = list("decals")
rest_sprite_options = list("Default", "sit")
/* //This used to be Widerobot_Standard_ch.dm. It was unticked, so it shall be put here instead.
//Modular Standard borg hound edition
//This restructures how borg additions are done to make them sane/modular/maintainable
//Also makes it easier to make new borgs
//INCOMPLETE and not ready, no sprites other than tall and basically useless, also lacking a belly
//Add ourselves to the borg list
/hook/startup/proc/Modular_Borg_init_standardhound()
//robot_modules["Honk-Hound"] = /obj/item/robot_module/robot/clerical/honkborg - done in station_vr modular chomp for ordering reasons
robot_module_types += "Standard-Hound" //Add ourselves to global
return 1
/obj/item/robot_module/robot/standard/hound
name = "Standard-Hound"
sprites = list(
"MEKA" = list(SKIN_ICON_STATE = "mekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64),
"NIKO" = list(SKIN_ICON_STATE = "mmekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64),
"NIKA" = list(SKIN_ICON_STATE = "fmekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64),
"K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64)
)
can_be_pushed = 0
/obj/item/robot_module/robot/standard/hound/New(var/mob/living/silicon/robot/R)
..()
src.modules += new /obj/item/melee/baton/loaded(src)
src.modules += new /obj/item/tool/wrench/cyborg(src)
src.modules += new /obj/item/healthanalyzer(src)
src.emag += new /obj/item/melee/energy/sword(src)
var/datum/matter_synth/water = new /datum/matter_synth(500)
water.name = "Water reserves"
water.recharge_rate = 10
water.max_energy = 1000
R.water_res = water
synths += water
var/obj/item/dogborg/tongue/T = new /obj/item/dogborg/tongue(src)
T.water = water
src.modules += T
R.icon = 'modular_chomp/icons/mob/widerobot_ch.dmi'
R.wideborg_dept = 'modular_chomp/icons/mob/widerobot_ch.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
R.old_x = -16
R.default_pixel_x = -16
R.dogborg = TRUE
R.vore_capacity = 1
R.vore_capacity_ex = list("stomach" = 1)
R.wideborg = TRUE
add_verb(R,/mob/living/silicon/robot/proc/ex_reserve_refill)
add_verb(R,/mob/living/silicon/robot/proc/robot_mount)
add_verb(R,/mob/living/proc/toggle_rider_reins)
add_verb(R,/mob/living/proc/shred_limb)
add_verb(R,/mob/living/silicon/robot/proc/rest_style)
..()
*/
@@ -69,14 +69,23 @@
has_vore_belly_sprites = FALSE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/combat_medic/dullahancombatmedic
name = "Dullahan Combat Medic"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_syndie.dmi'
sprite_icon_state = "dullahansyndi"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
pixel_x = 0
/datum/robot_sprite/dogborg/tall/syndie/dullahanv3syndi
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
sprite_icon = 'icons/mob/robot/dullahan/v3/syndi.dmi'
sprite_icon_state = "dullahansyndi"
name = "Dullahan syndie v3"
has_eye_light_sprites = TRUE
has_custom_open_sprites = TRUE
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
sprite_decals = list("decals")
rest_sprite_options = list("Default", "sit")
// Protector
@@ -168,13 +177,13 @@
sprite_hud_icon_state = "malf"
/datum/robot_sprite/dogborg/tall/mechanist/dullahanv3mech
sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi'
sprite_icon = 'icons/mob/robot/dullahan/v3/mechanist.dmi'
sprite_icon_state = "dullahanmechanist"
name = "Dullahan mechanist v3"
has_eye_light_sprites = TRUE
has_custom_open_sprites = TRUE
has_vore_belly_sprites = TRUE
has_robotdecal_sprites = TRUE
sprite_decals = list("decals")
rest_sprite_options = list("Default", "sit")
/datum/robot_sprite/dogborg/tall/mechanist/syndimechraptor
@@ -0,0 +1,180 @@
//Attempted unify style implementation of boozeborgs. To lower peoples needed code diving to both understand this module and make new ones.
//Dropping my usual _unify for _ch this time. Commenting it here for github search.
// code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm //tag so it shows up in gitsearch
/*
What Borgs are available is sadly handled in the above file in the proc
/hook/startup/proc/robot_modules_vr()
robot_modules["Medihound"] = /obj/item/robot_module/robot/medihound
robot_modules["K9"] = /obj/item/robot_module/robot/knine
robot_modules["ERT"] = /obj/item/robot_module/robot/ert
robot_modules["Janihound"] = /obj/item/robot_module/robot/scrubpup
robot_modules["Sci-borg"] = /obj/item/robot_module/robot/science
robot_modules["Pupdozer"] = /obj/item/robot_module/robot/engiedog
return 1
*/
/obj/item/robot_module/robot/booze
name = "BoozeHound robot module"
channels = list("Service" = 1)
languages = list(
LANGUAGE_SOL_COMMON = 1,
LANGUAGE_UNATHI = 1,
LANGUAGE_SIIK = 1,
LANGUAGE_AKHANI = 1,
LANGUAGE_SKRELLIAN = 1,
LANGUAGE_SKRELLIANFAR = 0,
LANGUAGE_ROOTLOCAL = 0,
LANGUAGE_TRADEBAND = 1,
LANGUAGE_GUTTER = 0,
LANGUAGE_SCHECHI = 1,
LANGUAGE_EAL = 1,
LANGUAGE_TERMINUS = 1,
LANGUAGE_SIGN = 0
)
/obj/item/robot_module/robot/booze
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)",
"Vodka Komrade" = "boozeborg(vodka)"
)
/obj/item/robot_module/robot/booze/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/gripper/service(src)
//src.modules += new /obj/item/reagent_containers/glass/bucket(src)
//src.modules += new /obj/item/material/minihoe(src)
//src.modules += new /obj/item/analyzer/plant_analyzer(src)
//src.modules += new /obj/item/storage/bag/plants(src)
//src.modules += new /obj/item/robot_harvester(src)
src.modules += new /obj/item/material/knife(src)
src.modules += new /obj/item/material/kitchen/rollingpin(src)
src.modules += new /obj/item/multitool(src) //to freeze trays
src.modules += new /obj/item/dogborg/jaws/small(src)
src.modules += new /obj/item/dogborg/boop_module(src)
src.modules += new /obj/item/dogborg/sleeper/compactor/brewer(src)
src.modules += new /obj/item/reagent_containers/glass/beaker(src)//For holding the ALCOHOL
src.emag = new /obj/item/dogborg/pounce(src)
add_verb(R,/mob/living/silicon/robot/proc/reskin_booze)
var/obj/item/rsf/M = new /obj/item/rsf(src)
M.stored_matter = 30
src.modules += M
src.modules += new /obj/item/reagent_containers/dropper/industrial(src)
/* Remembered this causes the dogs to catch on fire lol.
var/obj/item/flame/lighter/zippo/L = new /obj/item/flame/lighter/zippo(src)
L.lit = 1
src.modules += L
*/
var/datum/matter_synth/water = new /datum/matter_synth()
water.name = "Water reserves"
water.recharge_rate = 0.1 // Recharging water for plants - hehe drooly borg
water.max_energy = 1000
water.energy = 0
R.water_res = water
synths += water
var/obj/item/dogborg/tongue/T = new /obj/item/dogborg/tongue(src)
T.water = water
src.modules += T
src.modules += new /obj/item/tray/robotray(src)
src.modules += new /obj/item/reagent_containers/borghypo/service/booze(src)
src.emag = new /obj/item/reagent_containers/food/drinks/bottle/small/beer(src)
var/datum/reagents/N = new/datum/reagents(50)
src.emag.reagents = N
N.my_atom = src.emag
N.add_reagent("beer2", 50)
src.emag.name = "Mickey Finn's Special Brew"
R.can_buckle = 1
R.icon = 'icons/mob/widerobot_colors_ch.dmi'
R.wideborg_dept = 'icons/mob/widerobot_colors_ch.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
R.old_x = -16
R.default_pixel_x = -16
R.dogborg = TRUE
R.vore_capacity = 1
R.vore_capacity_ex = list("stomach" = 1)
R.wideborg = TRUE
add_verb(R,/mob/living/silicon/robot/proc/ex_reserve_refill) //TGPanel
..()
/obj/item/robot_module/robot/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/reagent_containers/food/condiment/enzyme/E = locate() in src.modules
E.reagents.add_reagent("enzyme", 2 * amount)
if(src.emag)
var/obj/item/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
B.reagents.add_reagent("beer2", 2 * amount)
//BORGHYPO
/obj/item/reagent_containers/borghypo/service/booze
name = "cyborg drink synthesizer"
desc = "A portable drink dispencer."
icon = 'icons/obj/drinks.dmi'
icon_state = "shaker"
charge_cost = 20
recharge_time = 3
volume = 120
possible_transfer_amounts = list(1 ,5, 10, 20, 30)
//Resking proc for boozos
/mob/living/silicon/robot/proc/reskin_booze()
set name = "Change Drink Color"
set category = "Abilities.Silicon" //TGPanel
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"
options["Slav Vodka"] = "Vodka Komrade"
var/choice = input(M,"Choose your drink!") in 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)
M << "Your Tank now displays [choice]. Drink up and enjoy!"
updateicon()
return 1
//SLEEPER "Brewer"
/obj/item/dogborg/sleeper/compactor/brewer //Boozehound gut.
name = "Brew Belly"
desc = "A mounted drunk tank unit with fuel processor."
icon_state = "brewer"
injection_chems = list(REAGENT_ID_VODKA,REAGENT_ID_BEER,REAGENT_ID_GIN) //Injected alcohol is 3 times as strong
max_item_count = 1
/obj/item/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem)
if(patient && patient.reagents)
if(chem in injection_chems + REAGENT_ID_INAPROVALINE)
if(hound.cell.charge < 200) //This is so borgs don't kill themselves with it.
to_chat(hound, span_notice("You don't have enough power to synthesize fluids."))
return
else if(patient.reagents.get_reagent_amount(chem) + 10 >= 50) //Preventing people from accidentally killing themselves by trying to inject too many chemicals!
to_chat(hound, span_notice("Your stomach is currently too full of fluids to secrete more fluids of this kind."))
else if(patient.reagents.get_reagent_amount(chem) + 10 <= 50) //No overdoses for you
patient.reagents.add_reagent(chem, inject_amount)
drain(100) //-100 charge per injection
var/units = round(patient.reagents.get_reagent_amount(chem))
to_chat(hound, span_notice("Injecting [units] unit\s into occupant.")) //If they were immersed, the reagents wouldn't leave with them.
@@ -0,0 +1,44 @@
/* //Uncomment the exploration modules in code\global.dm
/hook/startup/proc/Modular_Borg_init_Exploration()
robot_modules["Exploration"] = /obj/item/robot_module/robot/exploration //add to array
robot_module_types += "Exploration" //Add to global list
return 1
*/
//Explo doggos
/obj/item/robot_module/robot/exploration
name = "exploration robot module"
channels = list("Explorer" = 1)
languages = list(
LANGUAGE_SOL_COMMON = 1,
LANGUAGE_UNATHI = 1,
LANGUAGE_SIIK = 1,
LANGUAGE_AKHANI = 1,
LANGUAGE_SKRELLIAN = 1,
LANGUAGE_SKRELLIANFAR = 0,
LANGUAGE_ROOTLOCAL = 0,
LANGUAGE_TRADEBAND = 1,
LANGUAGE_GUTTER = 0,
LANGUAGE_SCHECHI = 1,
LANGUAGE_EAL = 1,
LANGUAGE_TERMINUS = 1,
LANGUAGE_SIGN = 0
)
/obj/item/robot_module/robot/exploration
can_be_pushed = 0
/obj/item/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/dogborg/sleeper/exploration(src)
src.modules += new /obj/item/cataloguer(src)
src.modules += new /obj/item/gun/energy/robotic/flare(src)
src.modules += new /obj/item/dogborg/pounce(src)
src.modules += new /obj/item/melee/robotic/blade/explotailspear(src)
src.modules += new /obj/item/gun/energy/robotic/smallmedigun(src)
src.modules += new /obj/item/shield_projector/line/exploborg(src)
src.modules += new /obj/item/roller_holder(src)
src.modules += new /obj/item/self_repair_system(src)
src.modules += new /obj/item/card/id/exploration/borg(src)
src.emag += new /obj/item/melee/robotic/jaws/big/explojaws(src)
..()
@@ -0,0 +1,58 @@
/datum/robot_sprite/dogborg/explorer
module_type = "Exploration"
sprite_icon = 'icons/mob/robot/widerobot/widerobot_exp.dmi'
sprite_hud_icon_state = "platform"
/datum/robot_sprite/dogborg/explorer/vale2
name = "Explorationhound V2"
sprite_icon_state = "exploration-v2"
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/explorer/vale
name = "Explorationhound V2 - Pink"
sprite_icon_state = "exploration"
has_eye_light_sprites = TRUE
/datum/robot_sprite/dogborg/tall/explorer/dullahan
module_type = "Exploration"
sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_explorer.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/tall/explorer/dullahan/explorer
name = "Dullahan"
sprite_icon_state = "dullahanexplo"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/datum/robot_sprite/dogborg/tall/explorer/dullahan/exploreralt
name = "Dullahan v2"
sprite_icon_state = "dullahanexplo_alt"
has_eye_light_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
/* placeholder
/datum/robot_sprite/dogborg/tall/explorer
module_type = "Exploration"
sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi'
pixel_x = 0
/datum/robot_sprite/dogborg/raptor/explorer
module_type = "Exploration"
sprite_icon = 'icons/mob/robot/raptor.dmi'
/datum/robot_sprite/dogborg/raptor/explorer/raptor
name = "Raptor"
sprite_icon_state = "chraptor"
has_custom_equipment_sprites = TRUE
rest_sprite_options = list("Default", "Bellyup")
/datum/robot_sprite/dogborg/tall/explorer/meka
name = "MEKA"
sprite_icon_state = "mmekaunity"
has_eye_light_sprites = TRUE
has_custom_open_sprites = TRUE
has_vore_belly_sprites = TRUE
rest_sprite_options = list("Default", "Sit")
*/