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"