From 9d57e729030b5d866a9538f2d170c85eda160751 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Sat, 28 Jun 2025 19:53:48 -0700 Subject: [PATCH] [MIRROR] Multibelt fixes and QoL (#11125) Co-authored-by: Cameron Lennox Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- code/_onclick/click.dm | 2 - .../items/weapons/tools/weldingtool.dm | 8 ++- .../modules/mob/living/silicon/robot/robot.dm | 16 +++++ .../silicon/robot/robot_modules/station.dm | 10 +-- .../silicon/robot/robot_simple_items.dm | 55 +++++++++++++--- .../silicon/robot/sprites/_sprite_datum.dm | 34 +++++----- .../living/silicon/robot/sprites/combat.dm | 8 +-- .../mob/living/silicon/robot/sprites/event.dm | 4 +- .../mob/living/silicon/robot/sprites/fluff.dm | 13 ---- .../living/silicon/robot/sprites/medical.dm | 17 +++-- .../living/silicon/robot/sprites/science.dm | 7 ++- .../living/silicon/robot/sprites/syndicate.dm | 4 +- code/modules/power/lighting.dm | 62 +++++++++---------- .../modules/projectiles/guns/energy/cyborg.dm | 48 +++++++++----- interface/skin.dmf | 4 +- 15 files changed, 170 insertions(+), 122 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index e81b07b179..f16c35e216 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -118,7 +118,6 @@ trigger_aiming(TARGET_CAN_CLICK) return 1 - // VOREStation Addition Start: inbelly item interaction if(!currently_restrained && isbelly(loc) && (loc == A.loc)) if(W) var/resolved = W.resolve_attackby(A,src) @@ -129,7 +128,6 @@ setClickCooldown(get_attack_speed()) UnarmedAttack(A, 1) return - // VOREStation Addition End if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that return diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index b80d579835..aed34e4a80 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -38,6 +38,7 @@ var/eye_safety_modifier = 0 // Increasing this will make less eye protection needed to stop eye damage. IE at 1, sunglasses will fully protect. var/burned_fuel_for = 0 // Keeps track of how long the welder's been on, used to gradually empty the welder if left one, without RNG. var/always_process = FALSE // If true, keeps the welder on the process list even if it's off. Used for when it needs to regenerate fuel. + var/no_passive_burn = FALSE // If true, the welder will not passively burn fuel. Used for things like electric welders. toolspeed = 1 drop_sound = 'sound/items/drop/weldingtool.ogg' pickup_sound = 'sound/items/pickup/weldingtool.ogg' @@ -127,9 +128,10 @@ /obj/item/weldingtool/process() if(welding) - ++burned_fuel_for - if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) - remove_fuel(1) + if(!no_passive_burn) + ++burned_fuel_for + if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) + remove_fuel(1) if(get_fuel() < 1) setWelding(0) else //Only start fires when its on and has enough fuel to actually keep working diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 982b6a5cec..ab89491130 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -516,6 +516,22 @@ to_chat(src, span_filter_notice("You harmlessly spark.")) spark_system.start() +///Essentially, a Activate Held Object mode for borgs that acts just like pressing Z in hotkey mode but also works well with multibelts. +/mob/living/silicon/robot/verb/alt_mode() + set name = "Robot Activate Held Object" + set category = "Object" + set src = usr + + if(!checkClickCooldown()) + return + + setClickCooldown(1) + + var/obj/item/W = module_active + if(module_active) + W.attack_self(src) + return + /mob/living/silicon/robot/verb/toggle_grabbability() // Grisp the preyborgs with consent (and allows for your borg to still be pet). set category = "Abilities.Silicon" set name = "Toggle Pickup" diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 0d3faa6800..4c19e04f99 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -201,15 +201,6 @@ var/global/list/robot_modules = list( CHANNEL_EXPLORATION = 1 ) -/obj/item/robot_module/robot/Initialize(mapload) - . = ..() - - if(!isrobot(loc)) - return - var/mob/living/silicon/robot/R = loc - if(R.sprite_datum) - R.sprite_datum.do_equipment_glamour(src) - // Cyborgs (non-drones), default loadout. This will be given to every module. /obj/item/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot) ..() @@ -229,6 +220,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/flash/robot(src) src.modules += new /obj/item/extinguisher(src) src.modules += new /obj/item/tool/crowbar/cyborg(src) + src.modules += new /obj/item/melee/robotic/jaws/small(src) src.modules += new /obj/item/gripper/scene(src) /obj/item/robot_module/robot/standard diff --git a/code/modules/mob/living/silicon/robot/robot_simple_items.dm b/code/modules/mob/living/silicon/robot/robot_simple_items.dm index 21005ee296..9917d5868b 100644 --- a/code/modules/mob/living/silicon/robot/robot_simple_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_simple_items.dm @@ -1,13 +1,15 @@ // Robot toolbelts, such as screwdrivers and the like. All contained in one neat little package. -// The code for actually 'how these use the item inside of them instead of the item itself' can be found in _onclick/cyborg.dm (yes, click code, gross, I know.) +// The code for actually 'how these use the item inside of them instead of the item itself' can be found in code\modules\mob\living\silicon\robot\inventory.dm (yes, click code, gross, I know.) /* * Engineering Tools */ /obj/item/robotic_multibelt name = "Robotic multitool" - desc = "An integrated toolbelt. Use CTRL-CLICK to interact with the selected item!" - + desc = "An integrated toolbelt that holds various tools." + description_info = "Pressing Z will interact with the item the multibelt has selected.
\ + Pressing Ctrl+Z will open the radial menu to allow item swapping!
\ + Clicking on the selected object will also open the radial menu." icon = 'icons/obj/tools_robot.dmi' icon_state = "toolkit_engiborg" w_class = ITEMSIZE_HUGE @@ -139,6 +141,15 @@ force = 10 toolspeed = 0.5 +/obj/item/tool/crowbar/cyborg/jaws + name = "puppy jaws" + desc = "The jaws of a small dog. Still strong enough to pry things." + icon = 'icons/mob/dogborg_vr.dmi' + icon_state = "smalljaws_textless" + hitsound = 'sound/weapons/bite.ogg' + attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") + force = 15 + /obj/item/weldingtool/electric/mounted/cyborg name = "integrated electric welding tool" desc = "An advanced welder designed to be used in robotic systems." @@ -147,6 +158,7 @@ usesound = 'sound/items/Welder2.ogg' toolspeed = 0.5 welding = TRUE + no_passive_burn = TRUE /obj/item/tool/wirecutters/cyborg name = "wirecutters" @@ -180,12 +192,15 @@ uses_charge = 1 charge_costs = list(1) -/obj/item/stack/cable_coil/cyborg/verb/set_colour() +/obj/item/stack/cable_coil/cyborg/attack_self(mob/user) + set_colour(user) + +/obj/item/stack/cable_coil/cyborg/proc/set_colour(mob/user) set name = "Change Colour" set category = "Object" - var/selected_type = tgui_input_list(usr, "Pick new colour.", "Cable Colour", GLOB.possible_cable_coil_colours) - set_cable_color(selected_type, usr) + var/selected_type = tgui_input_list(user, "Pick new colour.", "Cable Colour", GLOB.possible_cable_coil_colours) + set_cable_color(selected_type, user) /* * Surgical Tools @@ -442,6 +457,16 @@ . = ..() +///Allows the material fabricator to pick up materials if they hit an appropriate stack. +/obj/item/robotic_multibelt/materials/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(istype(target, /obj/item/stack)) //We are targeting a stack. + if(!selected_item) + to_chat(user, span_warning("You need to select a material first!")) + return + var/obj/item/stack/target_stack = target + if(istype(selected_item, /obj/item/stack)) + target_stack.attackby(selected_item, user) + /* * Grippers */ @@ -490,7 +515,7 @@ var/obj/new_pocket = new /obj/item/storage/internal/gripper(src) new_pocket.name = "Pocket [i]" pockets += new_pocket - current_pocket = pick(pockets) //Pick a random pocket! + current_pocket = peek(pockets) /obj/item/gripper/Destroy() current_pocket = null @@ -531,7 +556,13 @@ continue var/obj/item/pocket_content = pocket_to_check.contents[1] pockets_by_name["[pocket_to_check.name]" + "[pocket_content.name]"] = pocket_content - photo_images["[pocket_to_check.name]" + "[pocket_content.name]"] = image(icon = pocket_content.icon, icon_state = pocket_content.icon_state) + var/image/pocket_image = image(icon = pocket_content.icon, icon_state = pocket_content.icon_state) + if(pocket_content.color) + pocket_image.color = pocket_content.color + if(pocket_content.overlays) + for(var/overlay in pocket_content.overlays) + pocket_image.overlays += overlay + photo_images["[pocket_to_check.name]" + "[pocket_content.name]"] = pocket_image /obj/item/gripper/attack_self(mob/user as mob) generate_icons() @@ -587,6 +618,9 @@ drop_item() /obj/item/gripper/proc/drop_item() + if(!wrapped) + to_chat(src, span_warning("You have nothing to drop!")) + return if((wrapped == current_pocket && !istype(wrapped.loc, /obj/item/storage/internal/gripper))) //We have wrapped selected as our current_pocket AND wrapped is not in a gripper storage wrapped = null current_pocket = pick(pockets) @@ -668,6 +702,10 @@ else wrapped = null return + if((QDELETED(wrapped) || (wrapped.loc != current_pocket))) //We put our wrapped thing INTO something! + wrapped = null + current_pocket = pick(pockets) + return else if(current_pocket_full) //Pocket is full. No grabbing more things. to_chat(user, "Your gripper is currently full! You can't pick anything else up!") return @@ -732,7 +770,6 @@ user.visible_message(span_danger("[user] removes the power cell from [A]!"), "You remove the power cell.") - //Different types of grippers! /obj/item/gripper/engineering diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 280708a037..ca70c71efb 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -29,6 +29,7 @@ var/pixel_x = 0 var/icon_x = 32 var/icon_y = 32 + var/dogborg_sprites = FALSE //If we have dogborg sprites or not. Used for puppyjaws. var/is_whitelisted = FALSE var/whitelist_ckey @@ -205,6 +206,23 @@ return /datum/robot_sprite/proc/do_equipment_glamour(var/obj/item/robot_module/module) + if(!dogborg_sprites) + var/obj/item/melee/robotic/jaws/small/small_jaws = locate() in module.modules + if(small_jaws) + small_jaws.name = "self defense knife" + small_jaws.icon = 'icons/obj/tools_robot.dmi' + small_jaws.icon_state = "knife_cyborg" + small_jaws.hitsound = 'sound/weapons/slash.ogg' + small_jaws.desc = "A sharp knife used for defending crew against hostile threats. Not effective for non-defense use. If emagged, can be upgraded to a claymore." + small_jaws.attack_verb = list("sliced", "slashed", "jabbed", "stabbed") + var/obj/item/melee/robotic/jaws/big/big_jaws = locate() in module.modules + if(big_jaws) + big_jaws.name = "claymore" + big_jaws.desc = "Now this is a knife!" + big_jaws.icon = 'icons/obj/tools_robot.dmi' + big_jaws.icon_state = "claymore_cyborg" + big_jaws.hitsound = 'sound/weapons/slice.ogg' + big_jaws.attack_verb = list("sliced", "slashed", "jabbed", "stabbed") return // Dogborgs and not-dogborgs that use dogborg stuff. Oh no. @@ -221,20 +239,7 @@ pixel_x = -16 icon_x = 64 icon_y = 32 - -/datum/robot_sprite/dogborg/do_equipment_glamour(var/obj/item/robot_module/module) - if(!has_custom_equipment_sprites) - return - - var/obj/item/tool/crowbar/cyborg/C = locate() in module.modules - if(C) - C.name = "puppy jaws" - C.desc = "The jaws of a small dog. Still strong enough to pry things." - C.icon = 'icons/mob/dogborg_vr.dmi' - C.icon_state = "smalljaws_textless" - C.hitsound = 'sound/weapons/bite.ogg' - C.attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") - + dogborg_sprites = TRUE /datum/robot_sprite/dogborg/tall has_dead_sprite_overlay = FALSE @@ -242,6 +247,7 @@ vis_height = 64 icon_x = 64 icon_y = 64 + dogborg_sprites = FALSE // Default module sprite diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm index 97592ca5db..70537ad0e9 100644 --- a/code/modules/mob/living/silicon/robot/sprites/combat.dm +++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm @@ -89,11 +89,11 @@ has_custom_equipment_sprites = TRUE /datum/robot_sprite/dogborg/tall/combat/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/melee/robotic/blade/dagger/CBB = locate() in module.modules if(CBB) CBB.name = "sword tail" @@ -202,11 +202,11 @@ 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" diff --git a/code/modules/mob/living/silicon/robot/sprites/event.dm b/code/modules/mob/living/silicon/robot/sprites/event.dm index 9e5755b26d..b4b495f07d 100644 --- a/code/modules/mob/living/silicon/robot/sprites/event.dm +++ b/code/modules/mob/living/silicon/robot/sprites/event.dm @@ -20,11 +20,11 @@ sprite_icon = 'icons/mob/robot/lost_wide.dmi' /datum/robot_sprite/dogborg/lost/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" diff --git a/code/modules/mob/living/silicon/robot/sprites/fluff.dm b/code/modules/mob/living/silicon/robot/sprites/fluff.dm index 9f3093913e..54523f6e38 100644 --- a/code/modules/mob/living/silicon/robot/sprites/fluff.dm +++ b/code/modules/mob/living/silicon/robot/sprites/fluff.dm @@ -138,17 +138,4 @@ module_type = list("Standard", "Engineering", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security", "Research") sprite_flags = ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE -/datum/robot_sprite/fluff/catborg/do_equipment_glamour(var/obj/item/robot_module/module) - if(!has_custom_equipment_sprites) - return - - var/obj/item/tool/crowbar/cyborg/C = locate() in module.modules - if(C) - C.name = "puppy jaws" - C.desc = "The jaws of a small dog. Still strong enough to pry things." - C.icon = 'icons/mob/dogborg_vr.dmi' - C.icon_state = "smalljaws_textless" - C.hitsound = 'sound/weapons/bite.ogg' - C.attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") - #undef CUSTOM_BORGSPRITE diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm index a4a1fdea42..466c55d081 100644 --- a/code/modules/mob/living/silicon/robot/sprites/medical.dm +++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm @@ -236,11 +236,11 @@ sprite_icon = 'icons/mob/robot/surgical_wide.dmi' /datum/robot_sprite/dogborg/surgical/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" @@ -275,11 +275,11 @@ sprite_icon = 'icons/mob/robot/surgical_large.dmi' /datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" @@ -360,11 +360,11 @@ return ..() */ /datum/robot_sprite/dogborg/crisis/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" @@ -413,11 +413,10 @@ sprite_icon = 'icons/mob/robot/crisis_large.dmi' /datum/robot_sprite/dogborg/tall/crisis/do_equipment_glamour(var/obj/item/robot_module/module) - if(!has_custom_equipment_sprites) - return - ..() + if(!has_custom_equipment_sprites) + return var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm index a0df2ba5b1..2d1b47e72f 100644 --- a/code/modules/mob/living/silicon/robot/sprites/science.dm +++ b/code/modules/mob/living/silicon/robot/sprites/science.dm @@ -104,11 +104,11 @@ sprite_icon = 'icons/mob/robot/science_wide.dmi' /datum/robot_sprite/dogborg/science/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/jumper/J = locate() in module.modules if(J) J.name = "jumper paws" @@ -154,9 +154,10 @@ sprite_icon = 'icons/mob/robot/science_large.dmi' /datum/robot_sprite/dogborg/tall/science/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() var/obj/item/shockpaddles/robot/jumper/J = locate() in module.modules if(J) diff --git a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm index 7efca831d1..c188fe73ed 100644 --- a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm @@ -228,11 +228,11 @@ sprite_hud_icon_state = "malf" /datum/robot_sprite/dogborg/combat_medic/do_equipment_glamour(var/obj/item/robot_module/module) + ..() + if(!has_custom_equipment_sprites) return - ..() - var/obj/item/shockpaddles/robot/SP = locate() in module.modules if(SP) SP.name = "paws of life" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 72d6985d5c..a41f989988 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -5,7 +5,7 @@ // status values shared between lighting fixtures and items #define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb -#define LIGHTING_POWER_FACTOR 2 //5W per luminosity * range //VOREStation Edit: why the fuck are lights eating so much power, 2W per thing +#define LIGHTING_POWER_FACTOR 2 //2W per luminosity * range #define LIGHT_EMERGENCY_POWER_USE 0.2 //How much power emergency lights will consume per tick var/global/list/light_type_cache = list() @@ -200,7 +200,7 @@ var/global/list/light_type_cache = list() // the standard tube light fixture /obj/machinery/light name = "light fixture" - icon = 'icons/obj/lighting_vr.dmi' //VOREStation Edit + icon = 'icons/obj/lighting_vr.dmi' var/base_state = "tube" // base description and icon_state icon_state = "tube1" desc = "A lighting fixture." @@ -224,11 +224,9 @@ var/global/list/light_type_cache = list() // this is used to calc the probability the light burns out var/rigged = 0 // true if rigged to explode - //VOREStation Edit Start var/needsound = FALSE // Flag to prevent playing turn-on sound multiple times, and from playing at roundstart var/shows_alerts = TRUE // Flag for if this fixture should show alerts. Make sure icon states exist! var/current_alert = null // Which alert are we showing right now? - //VOREStation Edit End var/auto_flicker = FALSE // If true, will constantly flicker, so long as someone is around to see it (otherwise its a waste of CPU). @@ -265,7 +263,7 @@ var/global/list/light_type_cache = list() desc = "A small lighting fixture." light_type = /obj/item/light/bulb construct_type = /obj/machinery/light_construct/small - shows_alerts = FALSE //VOREStation Edit + shows_alerts = FALSE overlay_color = LIGHT_COLOR_INCANDESCENT_BULB /obj/machinery/light/small/flicker @@ -278,7 +276,7 @@ var/global/list/light_type_cache = list() start_with_cell = FALSE /obj/machinery/light/flamp - icon = 'icons/obj/lighting.dmi' //VOREStation Edit + icon = 'icons/obj/lighting.dmi' icon_state = "flamp1" base_state = "flamp" plane = OBJ_PLANE @@ -286,7 +284,7 @@ var/global/list/light_type_cache = list() desc = "A floor lamp." light_type = /obj/item/light/bulb/large construct_type = /obj/machinery/light_construct/flamp - shows_alerts = FALSE //VOREStation Edit + shows_alerts = FALSE var/lamp_shade = 1 overlay_color = LIGHT_COLOR_INCANDESCENT_BULB @@ -313,7 +311,7 @@ var/global/list/light_type_cache = list() /obj/machinery/light/spot name = "spotlight" light_type = /obj/item/light/tube/large - shows_alerts = FALSE //VOREStation Edit + shows_alerts = FALSE //YW ADDITION START /obj/machinery/light/spot/no_nightshift @@ -323,10 +321,8 @@ var/global/list/light_type_cache = list() /obj/machinery/light/spot/flicker auto_flicker = TRUE -//VOREStation Add - Shadeless! /obj/machinery/light/flamp/noshade lamp_shade = 0 -//VOREStation Add End // create a new lighting fixture /obj/machinery/light/Initialize(mapload, obj/machinery/light_construct/construct = null) @@ -364,7 +360,6 @@ var/global/list/light_type_cache = list() switch(status) // set icon_states if(LIGHT_OK) - //VOREStation Edit Start if(shows_alerts && current_alert && on) icon_state = "[base_state]-alert-[current_alert]" add_light_overlay(FALSE, icon_state) @@ -374,19 +369,18 @@ var/global/list/light_type_cache = list() add_light_overlay() else remove_light_overlay() - //VOREStation Edit End if(LIGHT_EMPTY) icon_state = "[base_state]-empty" on = 0 - remove_light_overlay() //VOREStation add + remove_light_overlay() if(LIGHT_BURNED) icon_state = "[base_state]-burned" on = 0 - remove_light_overlay() //VOREStation add + remove_light_overlay() if(LIGHT_BROKEN) icon_state = "[base_state]-broken" on = 0 - remove_light_overlay() //VOREStation add + remove_light_overlay() return /obj/machinery/light/flamp/update_icon() @@ -395,27 +389,26 @@ var/global/list/light_type_cache = list() switch(status) // set icon_states if(LIGHT_OK) icon_state = "[base_state][on]" - if(on) //VOREStation add - add_light_overlay() //VOREStation add - else //VOREStation add - remove_light_overlay() //VOREStation add + if(on) + add_light_overlay() + else + remove_light_overlay() if(LIGHT_EMPTY) on = 0 icon_state = "[base_state][on]" - remove_light_overlay() //VOREStation add + remove_light_overlay() if(LIGHT_BURNED) on = 0 icon_state = "[base_state][on]" - remove_light_overlay() //VOREStation add + remove_light_overlay() if(LIGHT_BROKEN) on = 0 icon_state = "[base_state][on]" - remove_light_overlay() //VOREStation add + remove_light_overlay() return else base_state = "flamp" ..() -//VOREStation Edit Start /obj/machinery/light/proc/set_alert_atmos() if(!shows_alerts) return @@ -446,8 +439,6 @@ var/global/list/light_type_cache = list() update() -//VOREstation Edit End - //CHOMPStation Edit Start /obj/machinery/light/proc/set_alert_engineering() if(!shows_alerts) @@ -456,19 +447,16 @@ var/global/list/light_type_cache = list() light_color = "#ff9900" brightness_color = "#ff9900" update() - // CHOMPStation Edit End // update lighting /obj/machinery/light/proc/update(var/trigger = 1) update_icon() - //VOREStation Edit Start if(!on) needsound = TRUE // Play sound next time we turn on else if(needsound) playsound(src, 'sound/effects/lighton.ogg', 65, 1) needsound = FALSE // Don't play sound again until we've been turned off - //VOREStation Edit End if(on) var/correct_range = nightshift_enabled ? brightness_range_ns : brightness_range @@ -508,7 +496,7 @@ var/global/list/light_type_cache = list() else update_use_power(USE_POWER_IDLE) set_light(0) - update_light() //VOREStation Edit - Makes lights update when their color is changed. + update_light() update_active_power_usage((light_range * light_power) * LIGHTING_POWER_FACTOR) /obj/machinery/light/proc/nightshift_mode(var/state) @@ -642,9 +630,11 @@ var/global/list/light_type_cache = list() //If xenos decide they want to smash a light bulb with a toolbox, who am I to stop them? /N else if(status != LIGHT_BROKEN && status != LIGHT_EMPTY) + if(istype(W, /obj/item/multitool)) //Allow us to swap the light color. + installed_light.attackby(W, user) + return - - if(prob(1+W.force * 5)) + else if(prob(1+W.force * 5)) to_chat(user, "You hit the light, and it smashes!") for(var/mob/M in viewers(src)) @@ -997,12 +987,10 @@ var/global/list/light_type_cache = list() drop_sound = 'sound/items/drop/glass.ogg' pickup_sound = 'sound/items/pickup/glass.ogg' - //VOREStation Edit Start - Modifiable Lighting var/init_brightness_range = 8 var/init_brightness_power = 1 var/init_nightshift_range = 8 var/init_nightshift_power = 0.45 - //VOREStation Edit End - Modifiable Lighting /obj/item/light/tube name = "light tube" @@ -1114,8 +1102,9 @@ var/global/list/light_type_cache = list() // if a syringe, can inject phoron to make it explode /obj/item/light/attackby(var/obj/item/I, var/mob/user) ..() + if(isrobot(user)) + I = user.get_active_hand() - //VOREStation Edit Start - Multitool Lighting! if(istype(I,/obj/item/multitool)) var/list/menu_list = list( "Normal Range", @@ -1162,6 +1151,11 @@ var/global/list/light_type_cache = list() else //Should never happen. return + if(istype(src.loc, /obj/machinery/light)) + var/obj/machinery/light/L = src.loc + L.update_from_bulb(src) + L.update() + L.update() //Yes it has to double update...Don't ask me why. I think it's stupid. else if(istype(I, /obj/item/reagent_containers/syringe)) var/obj/item/reagent_containers/syringe/S = I diff --git a/code/modules/projectiles/guns/energy/cyborg.dm b/code/modules/projectiles/guns/energy/cyborg.dm index 79ce718755..1fd61738ec 100644 --- a/code/modules/projectiles/guns/energy/cyborg.dm +++ b/code/modules/projectiles/guns/energy/cyborg.dm @@ -169,7 +169,7 @@ name = "puppy jaws" icon_state = "smalljaws" desc = "The jaws of a small dog." - force = 10 + force = 15 defend_chance = 5 attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") var/emagged = 0 @@ -177,22 +177,38 @@ var/mob/living/silicon/robot/R = user if(R.emagged || R.emag_items) emagged = !emagged - if(emagged) - name = "combat jaws" - icon_state = "jaws" - desc = "The jaws of the law." - force = 25 - armor_penetration = 25 - defend_chance = 15 - attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + if(R.sprite_datum.dogborg_sprites) + if(emagged) + name = "combat jaws" + icon_state = "jaws" + desc = "The jaws of the law." + force = 30 + armor_penetration = 25 + defend_chance = 15 + attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + else + name = "puppy jaws" + icon_state = "smalljaws" + desc = "The jaws of a small dog." + force = 15 + armor_penetration = 0 + defend_chance = 5 + attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") else - name = "puppy jaws" - icon_state = "smalljaws" - desc = "The jaws of a small dog." - force = 10 - armor_penetration = 0 - defend_chance = 5 - attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") + if(emagged) + name = "claymore" + desc = "Now this is a knife!" + icon = 'icons/obj/tools_robot.dmi' + icon_state = "claymore_cyborg" + hitsound = 'sound/weapons/slice.ogg' + attack_verb = list("sliced", "slashed", "jabbed", "stabbed") + else + name = "self defense knife" + icon = 'icons/obj/tools_robot.dmi' + icon_state = "knife_cyborg" + hitsound = 'sound/weapons/slash.ogg' + desc = "A sharp knife used for defending crew against hostile threats. Not effective for non-defense use." + attack_verb = list("sliced", "slashed", "jabbed", "stabbed") update_icon() diff --git a/interface/skin.dmf b/interface/skin.dmf index 3fef6faf15..d45872f4d8 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -202,7 +202,7 @@ macro "borghotkeymode" command = "Activate-Held-Object" elem name = "CTRL+Z" - command = "Activate-Held-Object" + command = "Robot-Activate-Held-Object" elem name = "U" command = "Rest" @@ -954,7 +954,7 @@ macro "borgmacro" command = "Activate-Held-Object" elem name = "CTRL+Z" - command = "Activate-Held-Object" + command = "Robot-Activate-Held-Object" elem name = "CTRL+U" command = "Rest"