diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm index 5fab93418bb..ca40ca7aef0 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm @@ -12,5 +12,3 @@ #define COMSIG_SILICON_AI_VACATE_APC "AI_vacate_apc" ///called when an AI's control is toggled #define COMSIG_SILICON_AI_SET_CONTROL_DISABLED "AI_set_control_disabled" -///called when borg module is activated/deactivated -#define COMSIG_SILICON_MODULE_ACTIVATION "borg_module_select" diff --git a/code/game/objects/items/robot/items/tools.dm b/code/game/objects/items/robot/items/tools.dm index 35194971545..0060a502cef 100644 --- a/code/game/objects/items/robot/items/tools.dm +++ b/code/game/objects/items/robot/items/tools.dm @@ -191,16 +191,8 @@ if (!issilicon(user)) return - var/mob/living/silicon/robot/as_cyborg = user - if (!(src in as_cyborg.held_items)) - context[SCREENTIP_CONTEXT_RMB] = "Select Tool" - return CONTEXTUAL_SCREENTIP_SET - -/obj/item/borg/cyborg_omnitool/examine(mob/user) - . = ..() - if(reference) - var/obj/item/tool = get_proxy_attacker_for(src, usr) - . += tool.examine(user) + context[SCREENTIP_CONTEXT_RMB] = "Select Tool" + return CONTEXTUAL_SCREENTIP_SET /** * Sets the new internal tool to be used @@ -209,6 +201,8 @@ * * obj/item/ref - typepath for the new internal omnitool */ /obj/item/borg/cyborg_omnitool/proc/set_internal_tool(obj/item/tool) + SHOULD_NOT_OVERRIDE(TRUE) + for(var/obj/item/internal_tool as anything in omni_toolkit) if(internal_tool == tool) reference = internal_tool @@ -247,6 +241,8 @@ //the internal tool is considered part of the tool itself, so don't let it be dropped. tool.item_flags |= ABSTRACT ADD_TRAIT(tool, TRAIT_NODROP, INNATE_TRAIT) + //assign the upgraded toolspeed, if any. + tool.toolspeed = initial(tool.toolspeed) - upgraded * 0.3 //store tool for future use atoms[reference] = tool @@ -256,17 +252,19 @@ //build the radial menu options var/list/radial_menu_options = list() var/list/tool_map = list() - for(var/obj/item as anything in omni_toolkit) - var/tool_name = initial(item.name) - radial_menu_options[tool_name] = image(icon = initial(item.icon), icon_state = initial(item.icon_state)) - tool_map[tool_name] = item + for(var/obj/item/tool as anything in omni_toolkit) + if(initial(tool.tool_behaviour) == tool_behaviour) + continue + var/tool_name = initial(tool.name) + radial_menu_options[tool_name] = image(icon = initial(tool.icon), icon_state = initial(tool.icon_state)) + tool_map[tool_name] = tool //assign the new tool behaviour var/internal_tool_name = show_radial_menu(user, src, radial_menu_options, require_near = TRUE, tooltips = TRUE) if(!internal_tool_name) return - //set the reference & update icons + //set the reference and update appearance set_internal_tool(tool_map[internal_tool_name]) update_appearance(UPDATE_ICON_STATE) playsound(src, 'sound/items/tools/change_jaws.ogg', 50, TRUE) @@ -276,8 +274,7 @@ if(!LAZYACCESS(modifiers, RIGHT_CLICK) || !iscyborg(usr)) return ..() var/mob/living/silicon/robot/user = usr - if (!(src in user.held_items)) - attack_self(user, modifiers) + attack_self(user, modifiers) return ..() /obj/item/borg/cyborg_omnitool/update_icon_state() @@ -301,7 +298,6 @@ /obj/item/borg/cyborg_omnitool/medical name = "surgical omni-toolset" desc = "A set of surgical tools used by cyborgs to operate on various surgical operations." - omni_toolkit = list( /obj/item/surgical_drapes/cyborg, /obj/item/scalpel/cyborg, @@ -319,74 +315,26 @@ desc = "A set of engineering tools used by cyborgs to conduct various engineering tasks." icon = 'icons/obj/items_cyborg.dmi' icon_state = "toolkit_engiborg" - omni_toolkit = list( /obj/item/wrench/cyborg, /obj/item/wirecutters/cyborg, /obj/item/screwdriver/cyborg, /obj/item/crowbar/cyborg, /obj/item/multitool/cyborg, - /obj/item/weldingtool/largetank/cyborg, ) -/obj/item/borg/cyborg_omnitool/engineering/Initialize(mapload) +/obj/item/borg/cyborg_omnitool/engineering/examine(mob/user) . = ..() - RegisterSignal(src, COMSIG_SILICON_MODULE_ACTIVATION, PROC_REF(welder_toggle)) - -/obj/item/borg/cyborg_omnitool/engineering/update_overlays() - . = ..() - if(tool_behaviour == TOOL_WELDER) - var/obj/item/weldingtool/tool = atoms[/obj/item/weldingtool/largetank/cyborg] - if(tool?.welding) - . |= tool.update_overlays() - -/obj/item/borg/cyborg_omnitool/engineering/attack_self(mob/user, modifiers) - if(tool_behaviour == TOOL_WELDER && LAZYACCESS(modifiers, LEFT_CLICK)) - welder_toggle(src, null, user) - - return NONE - - return ..() - -/obj/item/borg/cyborg_omnitool/engineering/set_internal_tool(obj/item/tool) - if(tool_behaviour == TOOL_WELDER) - welder_toggle(src, FALSE) - - return ..() - -///Reflects internal welder icon onto the omnitool -/obj/item/borg/cyborg_omnitool/engineering/proc/welder_update(source) - PRIVATE_PROC(TRUE) - SIGNAL_HANDLER - - update_appearance(UPDATE_OVERLAYS) - -///Toggles welder on/off when module slot is selected/deselected -/obj/item/borg/cyborg_omnitool/engineering/proc/welder_toggle(datum/omnitool, state, mob/self_user) - PRIVATE_PROC(TRUE) - SIGNAL_HANDLER - - if(tool_behaviour == TOOL_WELDER) - var/obj/item/weldingtool/tool = get_proxy_attacker_for(src, usr) - if(isnull(state)) - state = !tool.welding - if(state == tool.welding) - return - - if(state) - RegisterSignal(tool, COMSIG_ATOM_UPDATE_APPEARANCE, PROC_REF(welder_update), override = TRUE) - if(self_user) - tool.switched_on(self_user) - else - tool.switched_off() - UnregisterSignal(tool, COMSIG_ATOM_UPDATE_APPEARANCE) + if(tool_behaviour == TOOL_MULTITOOL) + var/obj/item/multitool/tool = atoms[/obj/item/multitool/cyborg] + if(tool?.buffer) + . += span_notice("Multitool buffer contains [tool.buffer].") /obj/item/borg/cyborg_omnitool/botany name = "botanical omni-toolset" desc = "A set of botanical tools used by cyborgs to do gardening." icon = 'icons/obj/items_cyborg.dmi' icon_state = "sili" - omni_toolkit = list( /obj/item/secateurs/cyborg, /obj/item/cultivator/cyborg, @@ -394,6 +342,5 @@ /obj/item/shovel/spade/cyborg, ) - #undef PKBORG_DAMPEN_CYCLE_DELAY #undef POWER_RECHARGE_CYBORG_DRAIN_MULTIPLIER diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 3d9e29418a1..efebac762bc 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -485,6 +485,8 @@ return for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool in cyborg.model.modules) omnitool.set_upgraded(TRUE) + for(var/obj/item/weldingtool/largetank/cyborg/welder in cyborg.model.modules) + welder.toolspeed = initial(welder.toolspeed) - 0.3 /obj/item/borg/upgrade/engineering_omnitool/deactivate(mob/living/silicon/robot/cyborg, mob/living/user = usr) . = ..() @@ -492,6 +494,8 @@ return for(var/obj/item/borg/cyborg_omnitool/engineering/omnitool in cyborg.model.modules) omnitool.set_upgraded(FALSE) + for(var/obj/item/weldingtool/largetank/cyborg/welder in cyborg.model.modules) + welder.toolspeed = initial(welder.toolspeed) /obj/item/borg/upgrade/defib name = "medical cyborg defibrillator" diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index e5e3e6f867d..a2d30cdac46 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -257,7 +257,6 @@ if(module && module_active != held_items[module_num]) module.icon_state = "[module.base_icon_state] +a" module_active = held_items[module_num] - SEND_SIGNAL(module_active, COMSIG_SILICON_MODULE_ACTIVATION, TRUE) return TRUE /** @@ -269,8 +268,6 @@ var/atom/movable/screen/robot/module_slot/module = hud_used?.screen_objects[HUD_KEY_HAND_SLOT(module_num)] if(module) module.icon_state = module.base_icon_state - if(module_active) - SEND_SIGNAL(module_active, COMSIG_SILICON_MODULE_ACTIVATION, FALSE) module_active = null return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 1c755a02078..d60e9d91600 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -389,6 +389,7 @@ /obj/item/construction/rcd/borg, /obj/item/pipe_dispenser, /obj/item/extinguisher, + /obj/item/weldingtool/largetank/cyborg, /obj/item/borg/cyborg_omnitool/engineering, /obj/item/borg/cyborg_omnitool/engineering, /obj/item/t_scanner, @@ -412,6 +413,7 @@ model_select_icon = "engineer" model_traits = list(TRAIT_NEGATES_GRAVITY) hat_offset = list("north" = list(0, -4), "south" = list(0, -4), "east" = list(4, -4), "west" = list(-4, -4)) + ///Weakref to the night vision action var/datum/weakref/night_vision_ref /datum/action/cooldown/borg_meson @@ -428,10 +430,12 @@ borg.update_sight() /obj/item/robot_model/engineering/be_transformed_to(obj/item/robot_model/old_model, forced = FALSE) - var/datum/action/cooldown/borg_meson/night_vision = new(loc) . = ..() if(!.) return + + //Grant night vision action + var/datum/action/cooldown/borg_meson/night_vision = new(loc) night_vision.Grant(loc) night_vision_ref = WEAKREF(night_vision) @@ -970,6 +974,7 @@ /obj/item/pipe_dispenser, /obj/item/restraints/handcuffs/cable/zipties, /obj/item/extinguisher, + /obj/item/weldingtool/largetank/cyborg, /obj/item/analyzer, /obj/item/borg/cyborg_omnitool/engineering, /obj/item/borg/cyborg_omnitool/engineering,