diff --git a/code/datums/action.dm b/code/datums/action.dm index eac827e0d34..36d5935d2eb 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -338,6 +338,10 @@ /datum/action/item_action/laugh_track name = "Laugh Track" +/datum/action/item_action/floor_buffer + name = "Toggle Floor Buffer" + desc = "Movement speed is decreased while active." + /datum/action/item_action/adjust /datum/action/item_action/adjust/New(Target) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 7377c6b98a7..624c016c9f3 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -363,3 +363,38 @@ msg_cooldown = world.time else deactivate() + +/obj/item/borg/upgrade/floorbuffer + name = "janitor cyborg floor buffer upgrade" + desc = "A floor buffer upgrade kit that can be attached to janitor cyborgs." + icon = 'icons/obj/vehicles.dmi' + icon_state = "upgrade" + require_module = TRUE + module_type = /obj/item/robot_module/janitor + /// How much speed the cyborg loses while the buffer is active + var/buffer_speed = 1 + var/mob/living/silicon/robot/cyborg + +/obj/item/borg/upgrade/floorbuffer/do_install(mob/living/silicon/robot/R) + for(var/obj/item/borg/upgrade/floorbuffer/U in R) + to_chat(R, "A floor buffer unit is already installed!") + to_chat(usr, "There's no room for another floor buffer unit!") + return + cyborg = R + var/datum/action/A = new /datum/action/item_action/floor_buffer(src) + A.Grant(R) + return TRUE + +/obj/item/borg/upgrade/floorbuffer/ui_action_click() + if(!cyborg.floorbuffer) + cyborg.floorbuffer = TRUE + cyborg.speed += buffer_speed + else + cyborg.floorbuffer = FALSE + cyborg.speed -= buffer_speed + to_chat(cyborg, "The floor buffer is now [cyborg.floorbuffer ? "active" : "deactivated"].") + +/obj/item/borg/upgrade/floorbuffer/Destroy() + cyborg.floorbuffer = FALSE + cyborg = null + return ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a81d2099f93..5800d9c8c89 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -107,6 +107,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( var/magpulse = FALSE var/ionpulse = FALSE // Jetpack-like effect. var/ionpulse_on = FALSE // Jetpack-like effect. + /// Does it clean the tile under it? + var/floorbuffer = FALSE var/datum/action/item_action/toggle_research_scanner/scanner = null var/list/module_actions = list() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3b2bd0a6942..5bed9d373e8 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -451,7 +451,7 @@ /obj/item/robot_module/janitor/proc/on_cyborg_move(mob/living/silicon/robot/R) SIGNAL_HANDLER - if(R.stat == DEAD || !isturf(R.loc)) + if(R.stat == DEAD || !isturf(R.loc) || !R.floorbuffer) return var/turf/tile = R.loc for(var/A in tile) diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 6ba21dc1e7e..ac8961e5e2f 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1098,6 +1098,16 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_upgrade_floorbuffer + name = "Cyborg Upgrade (Floor buffer)" + id = "borg_upgrade_floorbuffer" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/floorbuffer + req_tech = list("materials" = 4, "engineering" = 4) + materials = list(MAT_METAL=15000, MAT_GLASS=15000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + //Misc /datum/design/mecha_tracking name = "Exosuit Tracking Beacon"