diff --git a/code/citadel/dogborgstuff.dm b/code/citadel/dogborgstuff.dm
index 67d8d7f669..daafd135f6 100644
--- a/code/citadel/dogborgstuff.dm
+++ b/code/citadel/dogborgstuff.dm
@@ -61,10 +61,10 @@
/obj/item/restraints/handcuffs/cable/zipties/cyborg/dog/attack(mob/living/carbon/C, mob/user)
if(!C.handcuffed)
- playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
+ playsound(loc, 'sound/weapons/cablecuff.ogg', 60, 1, -2)
C.visible_message("[user] is trying to put zipties on [C]!", \
"[user] is trying to put zipties on [C]!")
- if(do_mob(user, C, 30))
+ if(do_mob(user, C, 60))
if(!C.handcuffed)
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
C.update_inv_handcuffed(0)
@@ -143,6 +143,8 @@
to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %")
to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C")
+/obj/item/device/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens
+ . = ..()
//Delivery
@@ -206,7 +208,7 @@
return
if(R.client && (target in R.client.screen))
to_chat(R, "You need to take that [target.name] off before cleaning it!")
- else if(istype(target,/obj/effect/decal/cleanable))
+ else if(is_cleanable(target))
R.visible_message("[R] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...")
if(do_after(R, src.cleanspeed, target = target))
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
@@ -214,7 +216,7 @@
to_chat(R, "You finish licking off \the [target.name].")
qdel(target)
R.cell.give(50)
- else if(istype(target,/obj/item)) //hoo boy. danger zone man
+ else if(isobj(target)) //hoo boy. danger zone man
if(istype(target,/obj/item/trash))
R.visible_message("[R] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...")
if(do_after(R, src.cleanspeed, target = target))
@@ -291,24 +293,12 @@
//Defibs
-/obj/item/twohanded/shockpaddles/hound
+/obj/item/twohanded/shockpaddles/cyborg/hound
name = "defibrillator paws"
desc = "MediHound specific shock paws."
icon = 'icons/mob/dogborg.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
- req_defib = 0
- wielded = 1
-
-/obj/item/twohanded/shockpaddles/hound/attack(mob/M, mob/user)
- var/mob/living/silicon/robot.R = user
- if(R.cell.charge < 1000)
- user.visible_message("You don't have enough charge for this operation!")
- return
- if(src.cooldown == 0)
- R.cell.use(1000)
- return ..()
-
//Sleeper
diff --git a/code/citadel/icons/robot_transformations.dmi b/code/citadel/icons/robot_transformations.dmi
new file mode 100644
index 0000000000..a9baa71ac5
Binary files /dev/null and b/code/citadel/icons/robot_transformations.dmi differ
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index e3194cd1a7..800ca21d03 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -648,4 +648,4 @@
item_state = "defibpaddles0"
req_defib = FALSE
-#undef HALFWAYCRITDEATH
+#undef HALFWAYCRITDEATH
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 3ff18c8747..0ca3c63162 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -93,7 +93,7 @@
cut_overlay(fire_overlay)
/mob/living/silicon/robot/update_canmove()
- if(stat || buckled || lockcharge)
+ if(stat || buckled || lockcharge || resting) //CITADEL EDIT resting dogborg-os
canmove = 0
else
canmove = 1
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 553faeacd7..131748042c 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -159,6 +159,8 @@
toner = tonermax
diag_hud_set_borgcell()
+ verbs += /mob/living/proc/lay_down //CITADEL EDIT borgs have rest verb now for snowflake reasons
+
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
/mob/living/silicon/robot/Destroy()
if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside.
@@ -365,8 +367,12 @@
to_chat(user, "You start fixing yourself...")
if(!W.use_tool(src, user, 50))
return
-
- adjustBruteLoss(-30)
+ adjustBruteLoss(-10)
+ else
+ to_chat(user, "You start fixing [src]...")
+ if(!do_after(user, 30, target = src))
+ return
+ adjustBruteLoss(-30)
updatehealth()
add_fingerprint(user)
visible_message("[user] has fixed some of the dents on [src].")
@@ -376,11 +382,16 @@
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/stack/cable_coil/coil = W
if (getFireLoss() > 0 || getToxLoss() > 0)
- if(src == user)
+ if(src == user && coil.use(1))
to_chat(user, "You start fixing yourself...")
if(!do_after(user, 50, target = src))
return
+ adjustFireLoss(-10)
+ adjustToxLoss(-10)
if (coil.use(1))
+ to_chat(user, "You start fixing [src]...")
+ if(!do_after(user, 30, target = src))
+ return
adjustFireLoss(-30)
adjustToxLoss(-30)
updatehealth()
@@ -592,9 +603,8 @@
//Citadel changes start here - Allows modules to use different icon files, and allows modules to specify a pixel offset
icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon))
-
if(laser)
- add_overlay("module.laser")//Is this even used??? - Yes modular_citadel/borg/inventory.dm
+ add_overlay("laser")//Is this even used??? - Yes borg/inventory.dm
if(disabler)
add_overlay("disabler")//ditto
@@ -602,6 +612,13 @@
add_overlay("[module.sleeper_overlay]_g")
if(sleeper_r && module.sleeper_overlay)
add_overlay("[module.sleeper_overlay]_r")
+ if(module.dogborg == TRUE)
+ if(resting)
+ cut_overlays()
+ icon_state = "[module.cyborg_base_icon]-rest"
+ else
+ icon_state = "[module.cyborg_base_icon]"
+
if(stat == DEAD && module.has_snowflake_deadsprite)
icon_state = "[module.cyborg_base_icon]-wreck"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 4b23e6f47f..d3d324b5fa 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -198,27 +198,31 @@
/obj/item/robot_module/proc/do_transform_animation()
var/mob/living/silicon/robot/R = loc
- R.notransform = TRUE
- var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
- ANM.layer = R.layer - 0.01
- new /obj/effect/temp_visual/small_smoke(R.loc)
if(R.hat)
R.hat.forceMove(get_turf(R))
R.hat = null
- R.update_headlamp()
- R.alpha = 0
- animate(R, alpha = 255, time = 50)
+ R.cut_overlays()
+ R.setDir(SOUTH)
+ do_transform_delay()
+
+/obj/item/robot_module/proc/do_transform_delay()
+ var/mob/living/silicon/robot/R = loc
var/prev_lockcharge = R.lockcharge
+ sleep(1)
+ flick("[cyborg_base_icon]_transform", R)
+ R.notransform = TRUE
R.SetLockdown(1)
R.anchored = TRUE
- sleep(2)
+ sleep(1)
for(var/i in 1 to 4)
playsound(R, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, 1, -1)
- sleep(12)
+ sleep(7)
if(!prev_lockcharge)
R.SetLockdown(0)
+ R.setDir(SOUTH)
R.anchored = FALSE
R.notransform = FALSE
+ R.update_headlamp()
R.notify_ai(NEW_MODULE)
if(R.hud_used)
R.hud_used.update_robot_modules_display()
diff --git a/icons/mob/citadel_refs/borg HUDs.dmi b/icons/mob/citadel_refs/borg HUDs.dmi
new file mode 100644
index 0000000000..bcbfcc1dc2
Binary files /dev/null and b/icons/mob/citadel_refs/borg HUDs.dmi differ
diff --git a/icons/mob/citadel_refs/dogborg animations.dmi b/icons/mob/citadel_refs/dogborg animations.dmi
new file mode 100644
index 0000000000..98c060f323
Binary files /dev/null and b/icons/mob/citadel_refs/dogborg animations.dmi differ
diff --git a/icons/mob/citadel_refs/widerobot_vr.dmi b/icons/mob/citadel_refs/widerobot_vr.dmi
new file mode 100644
index 0000000000..fa7285ae4c
Binary files /dev/null and b/icons/mob/citadel_refs/widerobot_vr.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index fd145092a7..b757c00145 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/screen_cyborg.dmi b/icons/mob/screen_cyborg.dmi
index fc236ac7e2..25d02d69ce 100644
Binary files a/icons/mob/screen_cyborg.dmi and b/icons/mob/screen_cyborg.dmi differ
diff --git a/icons/mob/widerobot.dmi b/icons/mob/widerobot.dmi
index 88ac16da24..81ec2ed86d 100644
Binary files a/icons/mob/widerobot.dmi and b/icons/mob/widerobot.dmi differ
diff --git a/modular_citadel/code/game/machinery/cryopod.dm b/modular_citadel/code/game/machinery/cryopod.dm
index 81d336bc98..6e57b0169d 100644
--- a/modular_citadel/code/game/machinery/cryopod.dm
+++ b/modular_citadel/code/game/machinery/cryopod.dm
@@ -396,7 +396,7 @@
if(target == user && world.time - target.client.cryo_warned > 5 * 600)//if we haven't warned them in the last 5 minutes
var/caught = FALSE
if(target.mind.assigned_role in GLOB.command_positions)
- alert("You're a Head of Staff![generic_plsnoleave_message]")
+ alert("You're a Head of Staff![generic_plsnoleave_message] Be sure to put your locker items back into your locker!")
caught = TRUE
if(iscultist(target) || is_servant_of_ratvar(target))
to_chat(target, "You're a Cultist![generic_plsnoleave_message]")
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm
new file mode 100644
index 0000000000..34970bc283
--- /dev/null
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot.dm
@@ -0,0 +1,10 @@
+/mob/living/silicon/robot
+ var/dogborg = FALSE
+
+/mob/living/silicon/robot/lay_down()
+ if(resting)
+ cut_overlays()
+ icon_state = "[module.cyborg_base_icon]-rest"
+ else
+ icon_state = "[module.cyborg_base_icon]"
+ update_icons()
\ No newline at end of file
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
index cf12fff36d..af30ff3349 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -1,9 +1,22 @@
+/mob/living/silicon/robot/modules/medihound
+ set_module = /obj/item/robot_module/medihound
+
+/mob/living/silicon/robot/modules/k9
+ set_module = /obj/item/robot_module/k9
+
+/mob/living/silicon/robot/modules/scrubpup
+ set_module = /obj/item/robot_module/scrubpup
+
+/mob/living/silicon/robot/modules/borgi
+ set_module = /obj/item/robot_module/borgi
+
/mob/living/silicon/robot/proc/get_cit_modules()
var/list/modulelist = list()
modulelist["MediHound"] = /obj/item/robot_module/medihound
if(!CONFIG_GET(flag/disable_secborg))
modulelist["Security K-9"] = /obj/item/robot_module/k9
modulelist["Scrub Puppy"] = /obj/item/robot_module/scrubpup
+ modulelist["Borgi"] = /obj/item/robot_module/borgi
return modulelist
/obj/item/robot_module
@@ -12,11 +25,13 @@
var/has_snowflake_deadsprite
var/cyborg_pixel_offset
var/moduleselect_alternate_icon
+ var/dogborg = FALSE
/obj/item/robot_module/k9
- name = "Security K-9 Unit module"
+ name = "Security K-9 Unit"
basic_modules = list(
/obj/item/restraints/handcuffs/cable/zipties/cyborg/dog,
+ /obj/item/storage/bag/borgdelivery,
/obj/item/dogborg/jaws/big,
/obj/item/dogborg/pounce,
/obj/item/clothing/mask/gas/sechailer/cyborg,
@@ -29,12 +44,13 @@
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
/obj/item/clockwork/weapon/ratvarian_spear)
cyborg_base_icon = "k9"
- moduleselect_icon = "security"
+ moduleselect_icon = "k9"
can_be_pushed = FALSE
hat_offset = INFINITY
sleeper_overlay = "ksleeper"
cyborg_icon_override = 'icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
cyborg_pixel_offset = -16
/obj/item/robot_module/k9/do_transform_animation()
@@ -43,33 +59,30 @@
For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.")
/obj/item/robot_module/medihound
- name = "MediHound module"
+ name = "MediHound"
basic_modules = list(
/obj/item/dogborg/jaws/small,
+ /obj/item/storage/bag/borgdelivery,
/obj/item/device/analyzer/nose,
/obj/item/soap/tongue,
/obj/item/device/healthanalyzer,
/obj/item/device/dogborg/sleeper/medihound,
- /obj/item/twohanded/shockpaddles/hound,
+ /obj/item/twohanded/shockpaddles/cyborg/hound,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/device/sensor_device)
emag_modules = list(/obj/item/dogborg/pounce)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical,
/obj/item/clockwork/weapon/ratvarian_spear)
cyborg_base_icon = "medihound"
- moduleselect_icon = "medical"
+ moduleselect_icon = "medihound"
can_be_pushed = FALSE
hat_offset = INFINITY
sleeper_overlay = "msleeper"
cyborg_icon_override = 'icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
+ dogborg = TRUE
cyborg_pixel_offset = -16
-/obj/item/robot_module/medihound/do_transform_animation()
- ..()
- to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
- You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.")
-
/obj/item/robot_module/scrubpup
name = "Janitor"
basic_modules = list(
@@ -90,6 +103,7 @@
cyborg_icon_override = 'icons/mob/widerobot.dmi'
has_snowflake_deadsprite = TRUE
cyborg_pixel_offset = -16
+ dogborg = TRUE
/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
@@ -102,6 +116,62 @@
..()
to_chat(loc,"As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.")
+/obj/item/robot_module/borgi
+ name = "Borgi"
+ basic_modules = list(
+ /obj/item/dogborg/jaws/small,
+ /obj/item/storage/bag/borgdelivery,
+ /obj/item/device/analyzer/nose,
+ /obj/item/soap/tongue,
+ /obj/item/device/healthanalyzer,
+ /obj/item/borg/cyborghug)
+ emag_modules = list(/obj/item/dogborg/pounce)
+ ratvar_modules = list(
+ /obj/item/clockwork/slab/cyborg,
+ /obj/item/clockwork/weapon/ratvarian_spear,
+ /obj/item/clockwork/replica_fabricator/cyborg)
+ cyborg_base_icon = "borgi"
+ moduleselect_icon = "borgi"
+ hat_offset = INFINITY
+ cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ has_snowflake_deadsprite = TRUE
+
+/*
+/obj/item/robot_module/orepup
+ name = "Ore Pup"
+ basic_modules = list(
+ /obj/item/storage/bag/ore/cyborg,
+ /obj/item/device/analyzer/nose,
+ /obj/item/storage/bag/borgdelivery,
+ /obj/item/device/dogborg/sleeper/ore,
+ /obj/item/pickaxe/drill/cyborg,
+ /obj/item/shovel,
+ /obj/item/crowbar/cyborg,
+ /obj/item/weldingtool/mini,
+ /obj/item/extinguisher/mini,
+ /obj/item/device/t_scanner/adv_mining_scanner,
+ /obj/item/gun/energy/kinetic_accelerator/cyborg,
+ /obj/item/device/gps/cyborg)
+ emag_modules = list(/obj/item/dogborg/pounce)
+ ratvar_modules = list(
+ /obj/item/clockwork/slab/cyborg/miner,
+ /obj/item/clockwork/weapon/ratvarian_spear,
+ /obj/item/borg/sight/xray/truesight_lens)
+ cyborg_base_icon = "orepup"
+ moduleselect_icon = "orepup"
+ sleeper_overlay = "osleeper"
+ cyborg_icon_override = 'icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ cyborg_pixel_offset = -16
+
+/obj/item/robot_module/miner/do_transform_animation()
+ var/mob/living/silicon/robot/R = loc
+ R.cut_overlays()
+ R.setDir(SOUTH)
+ flick("orepup_transform", R)
+ do_transform_delay()
+ R.update_headlamp()
+*/
/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
@@ -147,6 +217,10 @@
cyborg_base_icon = "engi-tread"
special_light_key = "engineer"
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ if("Loader")
+ cyborg_base_icon = "loader"
+ cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ has_snowflake_deadsprite = TRUE
return ..()
/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
diff --git a/modular_citadel/icons/mob/robots.dmi b/modular_citadel/icons/mob/robots.dmi
index a81f672b2b..9da2a97cc6 100644
Binary files a/modular_citadel/icons/mob/robots.dmi and b/modular_citadel/icons/mob/robots.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index ec95c74e45..d13cd5b1b0 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2620,6 +2620,7 @@
#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\life.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\jellypeople.dm"
+#include "modular_citadel\code\modules\mob\living\silicon\robot\robot.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm"
#include "modular_citadel\code\modules\mob\living\simple_animal\banana_spider.dm"
#include "modular_citadel\code\modules\mob\living\simple_animal\kiwi.dm"