mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-19 19:15:11 +01:00
Adds Gooborgs & Toggleable Stomach Glowing for Borgs (#17280)
* Gooborgs! add: Adds gooborgs! Sprites from Toriate code: Robotic eswords and batons now count as robotic weapons and trigger appropriate sprites. * shocker * cargofix * some more * sendit * rest sprites * mmoree * Glowy tummies Will make all the catborg sprites scream, but let's see what the UT says * FIXES MORE SPRITES AAAAAAAAAAAAAAAA * License * fixed sprites * better handling * rewrite * bonus damage * Fixes stunbaton * status check * Makes BCS remove the charge properly * charge * subsystem
This commit is contained in:
@@ -30,6 +30,8 @@
|
||||
|
||||
var/excavation_amount = 200
|
||||
var/destroy_artefacts = FALSE // some mining tools will destroy artefacts completely while avoiding side-effects.
|
||||
var/borg_flags = COUNTS_AS_ROBOTIC_MELEE //The ONLY reason this gets this here is because pickaxes are SO hardcoded that it's easier to add it here than everywhere else. Please do not attach this to everything that you desire. Only VERY SPECIFIC THINGS under CERTAIN CIRCUMSTANCES, PLEASE. 99% of things can be added to code\modules\projectiles\guns\energy\cyborg.dm
|
||||
|
||||
|
||||
/obj/item/pickaxe/silver
|
||||
name = "silver pickaxe"
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
var/crisis_override = 0
|
||||
var/integrated_light_power = 6
|
||||
var/list/robotdecal_on = list()
|
||||
var/glowy_enabled = FALSE
|
||||
var/datum/wires/robot/wires
|
||||
|
||||
can_be_antagged = TRUE
|
||||
@@ -447,8 +448,8 @@
|
||||
update_icon()
|
||||
|
||||
/mob/living/silicon/robot/verb/toggle_robot_decals() // loads overlay UNDER lights.
|
||||
set category = "Abilities.Silicon"
|
||||
set name = "Toggle extras"
|
||||
set category = "Abilities.Settings"
|
||||
set name = "Toggle Extra Decals"
|
||||
|
||||
if(!sprite_datum)
|
||||
return
|
||||
@@ -474,6 +475,17 @@
|
||||
to_chat(src, span_filter_notice("You enable your \"[decal_to_toggle]\" extra apperances."))
|
||||
update_icon()
|
||||
|
||||
/mob/living/silicon/robot/verb/toggle_glowy_stomach()
|
||||
set category = "Abilities.Settings"
|
||||
set name = "Toggle Glowing Stomach & Accents"
|
||||
|
||||
glowy_enabled = !glowy_enabled
|
||||
if(glowy_enabled)
|
||||
to_chat(src, span_filter_notice("Your stomach will now glow and any naturally glowing accents you have will now appear!"))
|
||||
else
|
||||
to_chat(src, span_filter_notice("Your stomach will no longer glow, and any naturally glowing accents you have will be hidden!"))
|
||||
update_icon()
|
||||
|
||||
/mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence.
|
||||
set category = "Abilities.Silicon"
|
||||
set name = "Emit Sparks"
|
||||
@@ -956,31 +968,52 @@
|
||||
pixel_x = sprite_datum.pixel_x
|
||||
old_x = sprite_datum.pixel_x
|
||||
|
||||
//Want to know how to make an overlay appear in darkness? Look at the below. Add a mutable and then emissive overlay.
|
||||
//These get applied first and foremost, as things will get applied overtop of them.
|
||||
//Only borgs that have specialty glow sprites get this.
|
||||
if(sprite_datum.has_glow_sprites && glowy_enabled)
|
||||
add_overlay(mutable_appearance(sprite_datum.sprite_icon, sprite_datum.get_glow_overlay(src)))
|
||||
add_overlay(emissive_appearance(sprite_datum.sprite_icon, sprite_datum.get_glow_overlay(src)))
|
||||
|
||||
if(stat == CONSCIOUS)
|
||||
update_fullness()
|
||||
for(var/belly_class in vore_fullness_ex)
|
||||
reset_belly_lights(belly_class)
|
||||
var/vs_fullness = vore_fullness_ex[belly_class]
|
||||
if(belly_class == "sleeper" && sleeper_state == 0 && vore_selected.silicon_belly_overlay_preference == "Sleeper") continue
|
||||
if(belly_class == "sleeper" && sleeper_state != 0 && !(vs_fullness + 1 > vore_capacity_ex[belly_class]))
|
||||
if(vore_selected.silicon_belly_overlay_preference == "Sleeper")
|
||||
vs_fullness = vore_capacity_ex[belly_class]
|
||||
else if(vore_selected.silicon_belly_overlay_preference == "Both")
|
||||
vs_fullness += 1
|
||||
if(belly_class == "sleeper")
|
||||
if(sleeper_state == 0 && vore_selected.silicon_belly_overlay_preference == "Sleeper") continue
|
||||
if(sleeper_state != 0 && !(vs_fullness + 1 > vore_capacity_ex[belly_class]))
|
||||
if(vore_selected.silicon_belly_overlay_preference == "Sleeper")
|
||||
vs_fullness = vore_capacity_ex[belly_class]
|
||||
else if(vore_selected.silicon_belly_overlay_preference == "Both")
|
||||
vs_fullness += 1
|
||||
if(!vs_fullness > 0) continue
|
||||
if(resting)
|
||||
if(!sprite_datum.has_vore_belly_resting_sprites)
|
||||
continue
|
||||
add_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class))
|
||||
//If we have glowy stomach sprites.
|
||||
if(glowy_enabled)
|
||||
var/mutable_appearance/MA = mutable_appearance(sprite_datum.sprite_icon, sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class))
|
||||
MA.appearance_flags = KEEP_APART
|
||||
add_overlay(MA)
|
||||
add_overlay(emissive_appearance(sprite_datum.sprite_icon, sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)))
|
||||
else
|
||||
add_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class))
|
||||
else
|
||||
update_belly_lights(belly_class)
|
||||
add_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
|
||||
//If we have glowy stomach sprites.
|
||||
if(glowy_enabled)
|
||||
var/mutable_appearance/MA = mutable_appearance(sprite_datum.sprite_icon, sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
|
||||
MA.appearance_flags = KEEP_APART
|
||||
add_overlay(MA)
|
||||
add_overlay(emissive_appearance(sprite_datum.sprite_icon, sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)))
|
||||
else
|
||||
add_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class))
|
||||
|
||||
sprite_datum.handle_extra_icon_updates(src) // Various equipment-based sprites go here.
|
||||
|
||||
if(resting && sprite_datum.has_rest_sprites)
|
||||
icon_state = sprite_datum.get_rest_sprite(src)
|
||||
|
||||
if(sprite_datum.has_eye_sprites)
|
||||
if(!shell || deployed) // Shell borgs that are not deployed will have no eyes.
|
||||
var/eyes_overlay = sprite_datum.get_eyes_overlay(src)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/obj/item/robot_module/robot/lost/create_equipment(var/mob/living/silicon/robot/robot)
|
||||
..()
|
||||
// Sec
|
||||
src.modules += new /obj/item/melee/baton/shocker/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton/shocker(src)
|
||||
src.modules += new /obj/item/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/borg/combat/shield(src)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
/obj/item/robot_module/robot/gravekeeper/create_equipment(var/mob/living/silicon/robot/robot)
|
||||
..()
|
||||
// For fending off animals and looters
|
||||
src.modules += new /obj/item/melee/baton/shocker/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton/shocker(src)
|
||||
src.modules += new /obj/item/borg/combat/shield(src)
|
||||
|
||||
// For repairing gravemarkers
|
||||
|
||||
@@ -420,7 +420,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/floor_painter(src)
|
||||
src.modules += new /obj/item/rms(src)
|
||||
src.modules += new /obj/item/inflatable_dispenser/robot(src)
|
||||
src.emag += new /obj/item/melee/baton/robot/arm(src)
|
||||
src.emag += new /obj/item/melee/robotic/baton/arm(src)
|
||||
src.modules += new /obj/item/rcd/electric/mounted/borg(src)
|
||||
src.modules += new /obj/item/pickaxe/plasmacutter/borg(src)
|
||||
src.modules += new /obj/item/gripper/no_use/loader(src)
|
||||
@@ -512,7 +512,7 @@ var/global/list/robot_modules = list(
|
||||
/obj/item/robot_module/robot/security/general/create_equipment(var/mob/living/silicon/robot/robot)
|
||||
..()
|
||||
src.modules += new /obj/item/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/melee/baton/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton(src)
|
||||
src.modules += new /obj/item/gun/energy/robotic/taser(src)
|
||||
src.modules += new /obj/item/taperoll/police(src)
|
||||
src.modules += new /obj/item/reagent_containers/spray/pepper(src)
|
||||
@@ -787,7 +787,7 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/reagent_containers/glass/beaker/large/borg(src)
|
||||
src.modules += new /obj/item/storage/part_replacer(src)
|
||||
src.modules += new /obj/item/shockpaddles/robot/jumper(src)
|
||||
src.modules += new /obj/item/melee/baton/slime/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton/slime(src)
|
||||
src.modules += new /obj/item/gun/energy/robotic/taser/xeno(src)
|
||||
src.modules += new /obj/item/xenoarch_multi_tool(src)
|
||||
src.modules += new /obj/item/pickaxe/excavationdrill(src)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
src.modules += new /obj/item/rcd/electric/mounted/borg/swarm(src)
|
||||
src.modules += new /obj/item/flash/robot(src)
|
||||
src.modules += new /obj/item/handcuffs/cable/tape/cyborg(src)
|
||||
src.modules += new /obj/item/melee/baton/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton(src)
|
||||
src.modules += new /obj/item/gun/energy/robotic/taser/swarm(src)
|
||||
src.modules += new /obj/item/matter_decompiler/swarm(src)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
/obj/item/robot_module/drone/swarm/melee/create_equipment(var/mob/living/silicon/robot/robot)
|
||||
..()
|
||||
|
||||
src.modules += new /obj/item/melee/energy/sword/ionic_rapier/lance(src)
|
||||
src.modules += new /obj/item/melee/robotic/blade/ionic/lance(src)
|
||||
|
||||
//Swarm Disabler Module
|
||||
/obj/item/gun/energy/taser/mounted/cyborg/swarm
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/item/robot_module/robot/syndicate/create_equipment(var/mob/living/silicon/robot/robot)
|
||||
..()
|
||||
src.modules += new /obj/item/pinpointer/shuttle/merc(src)
|
||||
src.modules += new /obj/item/melee/energy/sword(src)
|
||||
src.modules += new /obj/item/melee/robotic/blade(src)
|
||||
|
||||
var/datum/matter_synth/cloth = new /datum/matter_synth/cloth(40000)
|
||||
synths += cloth
|
||||
@@ -55,7 +55,7 @@
|
||||
src.modules += new /obj/item/shield_projector/rectangle/weak(src)
|
||||
src.modules += new /obj/item/gun/energy/robotic/laser/dakkalaser(src)
|
||||
src.modules += new /obj/item/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/melee/baton/robot(src)
|
||||
src.modules += new /obj/item/melee/robotic/baton(src)
|
||||
|
||||
src.modules += new /obj/item/dogborg/sleeper/K9/syndie(src)
|
||||
src.modules += new /obj/item/dogborg/pounce(src)
|
||||
@@ -75,7 +75,7 @@
|
||||
src.modules += new /obj/item/multitool/ai_detector(src)
|
||||
src.modules += new /obj/item/pickaxe/plasmacutter(src)
|
||||
src.modules += new /obj/item/rcd/electric/mounted/borg/lesser(src) // Can't eat rwalls to prevent AI core cheese.
|
||||
src.modules += new /obj/item/melee/energy/sword/ionic_rapier(src)
|
||||
src.modules += new /obj/item/melee/robotic/blade/ionic(src)
|
||||
|
||||
// FBP repair.
|
||||
src.modules += new /obj/item/robotanalyzer(src)
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
var/has_dead_sprite_overlay = FALSE
|
||||
var/has_extra_customization = FALSE
|
||||
var/has_custom_equipment_sprites = FALSE
|
||||
var/has_glow_sprites = FALSE
|
||||
var/vis_height = 32
|
||||
var/pixel_x = 0
|
||||
var/icon_x = 32
|
||||
@@ -87,6 +88,14 @@
|
||||
if(sprite_flag_check(ROBOT_HAS_DISABLER_SPRITE) && gun.gun_flag_check(COUNTS_AS_ROBOT_DISABLER))
|
||||
ourborg.add_overlay("[sprite_icon_state]-disabler")
|
||||
continue
|
||||
//These are outliers that don't fit the normal sprite flags. These should not be expanded unless absolutely neccessary.
|
||||
if(ourborg.activated_module_type_list(list(/obj/item/pickaxe)))
|
||||
for(var/thing_to_check in ourborg.get_active_modules()) //We look at our active modules. Let's peep!
|
||||
if(istype(thing_to_check, /obj/item/pickaxe))
|
||||
var/obj/item/pickaxe/melee = thing_to_check
|
||||
if(sprite_flag_check(ROBOT_HAS_MELEE_SPRITE) && melee.weapon_flag_check(COUNTS_AS_ROBOTIC_MELEE))
|
||||
ourborg.add_overlay("[sprite_icon_state]-melee")
|
||||
continue
|
||||
|
||||
/datum/robot_sprite/proc/get_belly_overlay(var/mob/living/silicon/robot/ourborg, var/size = 1, var/b_class)
|
||||
//Size
|
||||
@@ -121,6 +130,11 @@
|
||||
else
|
||||
return "[get_belly_overlay(ourborg, size, b_class)]-rest"
|
||||
|
||||
/datum/robot_sprite/proc/get_glow_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(!ourborg.resting)
|
||||
return "[sprite_icon_state]-glow"
|
||||
return "[get_rest_sprite(ourborg.rest_style)]-glow"
|
||||
|
||||
/datum/robot_sprite/proc/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(!(ourborg.resting && has_rest_sprites))
|
||||
return "[sprite_icon_state]-eyes"
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -58,6 +59,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -74,6 +76,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -89,6 +92,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -105,6 +109,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -120,6 +125,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -135,6 +141,7 @@
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2)
|
||||
@@ -162,6 +169,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_cargo.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -176,6 +184,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -190,6 +199,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_medical.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -206,6 +216,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_science.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -220,6 +231,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_security.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -235,6 +247,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_service.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -249,6 +262,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/catborgs/departmental/large/catborg_combatmed.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
@@ -272,6 +286,7 @@
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_decals = list("decals")
|
||||
is_whitelisted = FALSE //Putting this here as a declaration that it is NOT whitelisted.
|
||||
// whitelist_ckey = "cameron653" //The owner of the character.
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
/// EXAMPLE.
|
||||
/*
|
||||
/datum/robot_sprite/dogborg/DEPARTMENT/gooborg
|
||||
name = "Gooborg - DEPARTMENTL"
|
||||
sprite_icon_state = "engi"
|
||||
sprite_hud_icon_state = "engi"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/XXXX.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
module_type = list("Standard", "Engineering", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security", "Research") //Select whichever ones they apply to.
|
||||
*/
|
||||
|
||||
/// Cargo
|
||||
/datum/robot_sprite/dogborg/mining/gooborg
|
||||
name = "Gooborg - Cargo"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "catgo"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_cargo.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
sprite_flags = ROBOT_HAS_MELEE_SPRITE //Hammer
|
||||
|
||||
/datum/robot_sprite/dogborg/mining/gooborg/miner
|
||||
name = "Gooborg - Miner"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "catgo"
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_miner.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
sprite_flags = ROBOT_HAS_MELEE_SPRITE | ROBOT_HAS_GUN_SPRITE //Hammer & PKA
|
||||
|
||||
/// Engineering
|
||||
/datum/robot_sprite/dogborg/engineering/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "engi"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
|
||||
/// Crisis
|
||||
/datum/robot_sprite/dogborg/crisis/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "meowdical"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_med.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
module_type = list("Crisis", "Surgeon")
|
||||
|
||||
/// Science
|
||||
/datum/robot_sprite/dogborg/science/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "sci"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
|
||||
/// Security
|
||||
/datum/robot_sprite/dogborg/security/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "sec"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_sec.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_MELEE_SPRITE //Melee is baton.
|
||||
|
||||
/datum/robot_sprite/dogborg/security/gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/// Service
|
||||
/datum/robot_sprite/dogborg/service/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "service"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_service.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
module_type = list("Service", "Clerical")
|
||||
|
||||
/datum/robot_sprite/dogborg/janitor/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "service"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
|
||||
/datum/robot_sprite/dogborg/combat_gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "malf"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_peacekeeper.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_TASER_SPRITE | ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_MELEE_SPRITE //Baton
|
||||
module_type = "Combat"
|
||||
|
||||
/datum/robot_sprite/dogborg/combat_gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/datum/robot_sprite/dogborg/clown/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "syndicat"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
|
||||
//Exploration.
|
||||
/datum/robot_sprite/dogborg/explo_gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "syndicat"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/custom/gooborg_ninja.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
module_type = "Exploration"
|
||||
|
||||
/datum/robot_sprite/dogborg/explo_gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
//Syndicate
|
||||
/datum/robot_sprite/dogborg/combat_medic/gooborg
|
||||
name = "Gooborg"
|
||||
sprite_icon_state = "base"
|
||||
//sprite_hud_icon_state = "malf"
|
||||
has_eye_sprites = TRUE
|
||||
has_eye_light_sprites = TRUE
|
||||
has_sleeper_light_indicator = FALSE
|
||||
has_vore_belly_resting_sprites = TRUE
|
||||
has_vore_struggle_sprite = TRUE
|
||||
has_dead_sprite_overlay = FALSE
|
||||
has_glow_sprites = TRUE
|
||||
sprite_icon = 'icons/mob/robot/gooborgs/custom/gooborg_syndi.dmi'
|
||||
rest_sprite_options = list("Default", "Bellyup", "Sit")
|
||||
belly_capacity_list = list("sleeper" = 2, "throat" =2)
|
||||
sprite_flags = ROBOT_HAS_SPEED_SPRITE | ROBOT_HAS_GUN_SPRITE | ROBOT_HAS_BLADE_SPRITE //esword
|
||||
module_type = list("Combat Medic", "Mechanist", "Protector") //You get all three modules.
|
||||
|
||||
/datum/robot_sprite/dogborg/combat_medic/gooborg/get_eyes_overlay(var/mob/living/silicon/robot/ourborg)
|
||||
if(ourborg.has_active_type(/obj/item/borg/combat/mobility))
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
@@ -135,7 +135,7 @@ What Borgs are available is sadly handled in the above file in the proc
|
||||
|
||||
/mob/living/silicon/robot/proc/reskin_booze()
|
||||
set name = "Change Drink Color"
|
||||
set category = "Abilities.Silicon" //TGPanel
|
||||
set category = "Abilities.Settings"
|
||||
set desc = "Choose the color of drink displayed inside you."
|
||||
|
||||
var/mob/M = usr
|
||||
|
||||
@@ -8,6 +8,12 @@
|
||||
/obj/item/melee/robotic/proc/weapon_flag_check(var/flag_to_check) //Checks for the flag of the gun.
|
||||
return (borg_flags & flag_to_check)
|
||||
|
||||
// THESE ARE OUTLIERS THAT SHOULD BE INCLUDED IN /MELEE BUT ARE SO HARDCODED THAT DOING SUCH WOULD BE A NIGHTMARE.
|
||||
// THIS LIST SHOULD BE SHORT AND ONLY INCLUDE THINGS THAT ARE ABSOLUTELY NECESSARY.
|
||||
/obj/item/pickaxe/proc/weapon_flag_check(var/flag_to_check) //Checks for the flag of the gun.
|
||||
return (borg_flags & flag_to_check)
|
||||
|
||||
|
||||
/// The base gun types. Build off these four.
|
||||
/obj/item/gun/energy/robotic
|
||||
name = "Cybernetic Gun"
|
||||
@@ -190,7 +196,7 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker
|
||||
/obj/item/melee/robotic/borg_combat_shocker //Like a baton, but is always on.
|
||||
name = "combat shocker"
|
||||
icon = 'icons/mob/dogborg_vr.dmi'
|
||||
icon_state = "combatshocker"
|
||||
@@ -203,12 +209,26 @@
|
||||
var/charge_cost = 15
|
||||
var/dogborg = FALSE
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/proc/deductcharge()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/obj/item/cell/bcell
|
||||
if(istype(R))
|
||||
bcell = R.cell
|
||||
if(!bcell)
|
||||
return FALSE
|
||||
if(bcell.checked_use(600))
|
||||
return TRUE
|
||||
return null
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/attack(mob/M, mob/user)
|
||||
deductcharge(600)
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
if(isrobot(target))
|
||||
return ..()
|
||||
|
||||
var/agony = 60 // Copied from stun batons
|
||||
var/stun = 0 // ... same
|
||||
var/agony = 60
|
||||
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(ishuman(target))
|
||||
@@ -216,11 +236,8 @@
|
||||
affecting = H.get_organ(hit_zone)
|
||||
|
||||
if(user.a_intent == I_HURT)
|
||||
// Parent handles messages
|
||||
. = ..()
|
||||
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
|
||||
agony *= 0.5
|
||||
stun *= 0.5
|
||||
else
|
||||
if(affecting)
|
||||
if(dogborg)
|
||||
@@ -232,21 +249,13 @@
|
||||
target.visible_message(span_danger("[target] has been zap-chomped with [src] by [user]!"))
|
||||
else
|
||||
target.visible_message(span_danger("[target] has been zapped with [src] by [user]!"))
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
|
||||
// Try to use power
|
||||
var/stunning = FALSE
|
||||
if(isrobot(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(R.cell?.use(charge_cost) == charge_cost)
|
||||
stunning = TRUE
|
||||
|
||||
if(stunning)
|
||||
target.stun_effect_act(stun, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
target.stun_effect_act(0, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
/obj/item/melee/robotic/blade //For downstreams that use blade
|
||||
name = "Robotic Blade"
|
||||
@@ -277,3 +286,183 @@
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced")
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic
|
||||
name = "ionic rapier"
|
||||
desc = "Designed specifically for disrupting electronics at close range, it is extremely deadly against synthetics, but almost harmless to pure organic targets."
|
||||
description_info = "This is a dangerous melee weapon that will deliver a moderately powerful electromagnetic pulse to whatever it strikes. \
|
||||
Striking a lesser robotic entity will compel it to attack you, as well. It also does extra burn damage to robotic entities, but it does \
|
||||
very little damage to purely organic targets."
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/afterattack(var/atom/movable/AM, var/mob/living/user, var/proximity)
|
||||
if(istype(AM, /obj) && proximity)
|
||||
// EMP stuff.
|
||||
var/obj/O = AM
|
||||
O.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(O, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
user.setClickCooldown(user.get_attack_speed(src)) // A lot of objects don't set click delay.
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
. = ..()
|
||||
if(target.isSynthetic())
|
||||
// Do some extra damage. Not a whole lot more since emp_act() is pretty nasty on FBPs already.
|
||||
target.emp_act(3) // A weaker severity is used because this has infinite uses.
|
||||
playsound(target, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
target.adjustFireLoss(force * 3) // 15 Burn, for 20 total.
|
||||
playsound(target, 'sound/weapons/blade1.ogg', 100, 1)
|
||||
|
||||
// Make lesser robots really mad at us.
|
||||
if(target.mob_class & MOB_CLASS_SYNTHETIC)
|
||||
if(target.has_AI())
|
||||
target.taunt(user)
|
||||
target.adjustFireLoss(force * 6) // 30 Burn, for 50 total.
|
||||
|
||||
/obj/item/melee/robotic/blade/ionic/lance
|
||||
name = "zero-point lance"
|
||||
desc = "Designed specifically for disrupting electronics at relatively close range, however it is still capable of dealing some damage to living beings."
|
||||
force = 20
|
||||
armor_penetration = 15
|
||||
reach = 2
|
||||
|
||||
/obj/item/melee/robotic/baton
|
||||
name = "stunbaton"
|
||||
desc = "A stun baton for incapacitating people with."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "stunbaton_active"
|
||||
item_state = "baton"
|
||||
slot_flags = SLOT_BELT
|
||||
force = 15
|
||||
sharp = FALSE
|
||||
edge = FALSE
|
||||
flags = NOCONDUCT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
drop_sound = 'sound/items/drop/metalweapon.ogg'
|
||||
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
attack_verb = list("beaten")
|
||||
var/stunforce = 0
|
||||
var/agonyforce = 60
|
||||
var/hitcost = 500
|
||||
var/status = 1 //On by default.
|
||||
var/lightcolor = "#FF6A00"
|
||||
borg_flags = COUNTS_AS_ROBOTIC_MELEE
|
||||
|
||||
/obj/item/melee/robotic/baton/update_icon()
|
||||
if(status)
|
||||
icon_state = "[initial(name)]_active"
|
||||
else
|
||||
icon_state = "[initial(name)]"
|
||||
if(icon_state == "[initial(name)]_active")
|
||||
set_light(2, 1, lightcolor)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/melee/robotic/baton/attack_hand(mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/item/melee/robotic/baton/attack_self(mob/user)
|
||||
status = !status
|
||||
to_chat(user, span_notice("[src] is now [status ? "on" : "off"]."))
|
||||
playsound(src, "sparks", 75, 1, -1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/melee/robotic/baton/attackby(obj/item/W, mob/user)
|
||||
return
|
||||
|
||||
/obj/item/melee/robotic/baton/proc/deductcharge()
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/obj/item/cell/bcell
|
||||
if(istype(R))
|
||||
bcell = R.cell
|
||||
if(!bcell)
|
||||
return FALSE
|
||||
if(bcell.checked_use(hitcost))
|
||||
return TRUE
|
||||
return null
|
||||
|
||||
/obj/item/melee/robotic/baton/attack(mob/M, mob/user)
|
||||
if(status)
|
||||
deductcharge(hitcost)
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/robotic/baton/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
if(isrobot(target))
|
||||
return ..()
|
||||
|
||||
var/agony = agonyforce
|
||||
var/stun = stunforce
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
affecting = H.get_organ(hit_zone)
|
||||
|
||||
if(user.a_intent == I_HURT)
|
||||
. = ..()
|
||||
//whacking someone causes a much poorer electrical contact than deliberately prodding them.
|
||||
agony *= 0.5
|
||||
stun *= 0.5
|
||||
|
||||
//We are off!
|
||||
if(!status)
|
||||
if(affecting)
|
||||
target.visible_message(span_warning("[target] has been prodded in the [affecting.name] with [src] by [user]. Luckily it was off."))
|
||||
else
|
||||
target.visible_message(span_warning("[target] has been prodded with [src] by [user]. Luckily it was off."))
|
||||
return
|
||||
|
||||
//We are on!
|
||||
if(affecting)
|
||||
target.visible_message(span_danger("[target] has been prodded in the [affecting.name] with [src] by [user]!"))
|
||||
else
|
||||
target.visible_message(span_danger("[target] has been prodded with [src] by [user]!"))
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
target.stun_effect_act(stun, agony, hit_zone, src)
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].")
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.forcesay(hit_appends)
|
||||
|
||||
/obj/item/melee/robotic/baton/arm
|
||||
name = "electrified arm"
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
icon_state = "shock"
|
||||
|
||||
hitcost = 750
|
||||
agonyforce = 70
|
||||
|
||||
/obj/item/melee/robotic/baton/shocker
|
||||
name = "shocker"
|
||||
desc = "A device that appears to arc electricity into a target to incapacitate or otherwise hurt them, similar to a stun baton. It looks inefficent."
|
||||
description_info = "Hitting a lesser lifeform with this while it is on will compel them to attack you above other nearby targets. Otherwise \
|
||||
it works like a regular stun baton, just less effectively."
|
||||
icon_state = "shocker_active"
|
||||
force = 10
|
||||
agonyforce = 25 // Less efficent than a regular baton.
|
||||
attack_verb = list("poked")
|
||||
|
||||
/obj/item/melee/robotic/baton/shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
..(target, user, hit_zone)
|
||||
if(target.has_AI())
|
||||
target.taunt(user)
|
||||
|
||||
/obj/item/melee/robotic/baton/slime
|
||||
hitcost = 200
|
||||
|
||||
/obj/item/melee/robotic/baton/slime/attack(mob/living/L, mob/user, hit_zone)
|
||||
if(!istype(L))
|
||||
return ..()
|
||||
|
||||
if(L.mob_class & MOB_CLASS_SLIME) // Are they some kind of slime? (Prommies might pass this check someday).
|
||||
if(isslime(L))
|
||||
var/mob/living/simple_mob/slime/S = L
|
||||
S.slimebatoned(user, 5) // Feral and xenobio slimes will react differently to this.
|
||||
else
|
||||
L.Weaken(5)
|
||||
|
||||
// Now for prommies.
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.species && H.species.name == SPECIES_PROMETHEAN)
|
||||
H.apply_damage(35, HALLOSS)
|
||||
..()
|
||||
|
||||
@@ -416,6 +416,10 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
|
||||
var/obj/belly/NB = new(host)
|
||||
NB.name = new_name
|
||||
host.vore_selected = NB
|
||||
//Ensures that new stomachs that are made have the same silicon overlay pref as the first stomach.
|
||||
if(LAZYLEN(host.vore_organs))
|
||||
var/obj/belly/belly_to_check = host.vore_organs[1]
|
||||
NB.silicon_belly_overlay_preference = belly_to_check.silicon_belly_overlay_preference
|
||||
unsaved_changes = TRUE
|
||||
return TRUE
|
||||
if("importpanel")
|
||||
|
||||
@@ -33,11 +33,6 @@
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
// Research borg's version
|
||||
/obj/item/melee/baton/slime/robot
|
||||
hitcost = 200
|
||||
use_external_power = TRUE
|
||||
|
||||
// Xeno stun gun + projectile
|
||||
/obj/item/gun/energy/taser/xeno
|
||||
name = "xeno taser gun"
|
||||
@@ -54,10 +49,6 @@
|
||||
ineffective at stunning non-slimy lifeforms such as humanoids."
|
||||
recoil_mode = 0
|
||||
|
||||
/obj/item/gun/energy/taser/xeno/robot // Borg version
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 3
|
||||
/*
|
||||
VORESTATION REMOVAL
|
||||
/obj/item/gun/energy/taser/xeno/sec //NT's corner-cutting option for their on-station security.
|
||||
|
||||
Reference in New Issue
Block a user