[MIRROR] Multibelt fixes and QoL (#11125)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-06-28 19:53:48 -07:00
committed by GitHub
parent 7672c32608
commit 9d57e72903
15 changed files with 170 additions and 122 deletions

View File

@@ -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

View File

@@ -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,6 +128,7 @@
/obj/item/weldingtool/process()
if(welding)
if(!no_passive_burn)
++burned_fuel_for
if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
remove_fuel(1)

View File

@@ -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"

View File

@@ -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

View File

@@ -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.<br>\
Pressing Ctrl+Z will open the radial menu to allow item swapping!<br>\
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

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -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)

View File

@@ -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"

View File

@@ -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

View File

@@ -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,11 +177,12 @@
var/mob/living/silicon/robot/R = user
if(R.emagged || R.emag_items)
emagged = !emagged
if(R.sprite_datum.dogborg_sprites)
if(emagged)
name = "combat jaws"
icon_state = "jaws"
desc = "The jaws of the law."
force = 25
force = 30
armor_penetration = 25
defend_chance = 15
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
@@ -189,10 +190,25 @@
name = "puppy jaws"
icon_state = "smalljaws"
desc = "The jaws of a small dog."
force = 10
force = 15
armor_penetration = 0
defend_chance = 5
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
else
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()

View File

@@ -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"