[MIRROR] Adds Gooborgs & Toggleable Stomach Glowing for Borgs (#10418)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
@@ -104,3 +104,9 @@
|
||||
**Creator / Copyright:** Toriate<br>
|
||||
**License Holders:** Matica, Cameron The Raven, Spotteh<br>
|
||||
**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)<br>
|
||||
<br>
|
||||
**Folder:** `icons/mob/robot/gooborgs`<br>
|
||||
**Title:** Gooborgs<br>
|
||||
**Creator / Copyright:** Toriate<br>
|
||||
**License Holders:** Matica<br>
|
||||
**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)<br>
|
||||
@@ -205,6 +205,9 @@ SUBSYSTEM_DEF(robot_sprites)
|
||||
if(findtext(icon, regex("-openpanel_w")))
|
||||
RS.has_custom_open_sprites = TRUE
|
||||
continue
|
||||
if(findtext(icon, regex("-glow")))
|
||||
RS.has_glow_sprites = TRUE
|
||||
continue
|
||||
if(findtext(icon, regex("-\\d-rest")))
|
||||
RS.has_vore_belly_resting_sprites = TRUE
|
||||
continue
|
||||
|
||||
@@ -51,11 +51,6 @@
|
||||
if(!C.battery_module)
|
||||
to_chat(user, span_notice("\The [C] does not have a battery installed."))
|
||||
return
|
||||
if(istype(G, /obj/item/melee/baton))
|
||||
var/obj/item/melee/baton/B = G
|
||||
if(B.use_external_power)
|
||||
to_chat(user, span_notice("\The [B] has no recharge port."))
|
||||
return
|
||||
if(istype(G, /obj/item/flash))
|
||||
var/obj/item/flash/F = G
|
||||
if(F.use_external_power)
|
||||
|
||||
@@ -5,20 +5,6 @@
|
||||
***********************************************************************/
|
||||
//Might want to move this into several files later but for now it works here
|
||||
|
||||
/obj/item/melee/baton/robot/arm
|
||||
name = "electrified arm"
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
icon_state = "shock"
|
||||
|
||||
hitcost = 750
|
||||
agonyforce = 70
|
||||
|
||||
/obj/item/melee/baton/robot/arm/update_icon()
|
||||
if(status)
|
||||
set_light(1.5, 1, lightcolor)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/item/borg/overdrive
|
||||
name = "overdrive"
|
||||
icon = 'icons/obj/decals.dmi'
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
var/status = 0 //whether the thing is on or not
|
||||
var/obj/item/cell/bcell = null
|
||||
var/hitcost = 240
|
||||
var/use_external_power = FALSE //only used to determine if it's a cyborg baton
|
||||
var/grip_safety = TRUE
|
||||
var/taped_safety = FALSE
|
||||
|
||||
@@ -118,8 +117,6 @@
|
||||
. += span_warning("The baton does not have a power source installed.")
|
||||
|
||||
/obj/item/melee/baton/attackby(obj/item/W, mob/user)
|
||||
if(use_external_power)
|
||||
return
|
||||
if(istype(W, /obj/item/cell))
|
||||
if(istype(W, /obj/item/cell/device))
|
||||
if(!bcell)
|
||||
@@ -159,11 +156,6 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/baton/attack_self(mob/user)
|
||||
if(use_external_power)
|
||||
//try to find our power cell
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if (istype(R))
|
||||
bcell = R.cell
|
||||
if(bcell && bcell.charge >= hitcost)
|
||||
status = !status
|
||||
to_chat(user, span_notice("[src] is now [status ? "on" : "off"]."))
|
||||
@@ -229,11 +221,6 @@
|
||||
bcell.emp_act(severity) //let's not duplicate code everywhere if we don't have to please.
|
||||
..()
|
||||
|
||||
//secborg stun baton module
|
||||
/obj/item/melee/baton/robot
|
||||
hitcost = 500
|
||||
use_external_power = TRUE
|
||||
|
||||
//Makeshift stun baton. Replacement for stun gloves.
|
||||
/obj/item/melee/baton/cattleprod
|
||||
name = "stunprod"
|
||||
@@ -291,7 +278,3 @@
|
||||
..(target, user, hit_zone)
|
||||
if(status && target.has_AI())
|
||||
target.taunt(user)
|
||||
|
||||
// Borg version, for the lost module.
|
||||
/obj/item/melee/baton/shocker/robot
|
||||
use_external_power = TRUE
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -27,6 +27,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
|
||||
@@ -455,8 +456,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
|
||||
@@ -482,6 +483,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"
|
||||
@@ -967,31 +979,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)
|
||||
|
||||
@@ -9,7 +9,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)
|
||||
|
||||
@@ -48,7 +48,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
|
||||
|
||||
@@ -435,7 +435,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)
|
||||
@@ -528,7 +528,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)
|
||||
@@ -807,7 +807,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.
|
||||
|
||||
229
code/modules/mob/living/silicon/robot/sprites/gooborgs.dm
Normal file
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -663,6 +663,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.
|
||||
|
||||
@@ -45,6 +45,10 @@
|
||||
failed = TRUE
|
||||
if(check_state(RS,"-openpanel_w"))
|
||||
failed = TRUE
|
||||
// Glow State
|
||||
if(RS.has_glow_sprites)
|
||||
if(check_state(RS,"-glow"))
|
||||
failed = TRUE
|
||||
// Bellies
|
||||
if(RS.has_vore_belly_sprites && !RS.belly_capacity_list)
|
||||
if(RS.has_sleeper_light_indicator)
|
||||
@@ -162,6 +166,9 @@
|
||||
rest_style = "rest"
|
||||
if(check_state(RS,"-[rest_style]"))
|
||||
failed = TRUE
|
||||
if(RS.has_glow_sprites)
|
||||
if(check_state(RS,"-[rest_style]-glow"))
|
||||
failed = TRUE
|
||||
// death
|
||||
if(RS.has_dead_sprite)
|
||||
if(check_state(RS,"-wreck"))
|
||||
|
||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 37 KiB |
1
icons/mob/robot/gooborgs/Credit.txt
Normal file
@@ -0,0 +1 @@
|
||||
Gooborg Art Assets by Toriate
|
||||
BIN
icons/mob/robot/gooborgs/custom/gooborg_ninja.dmi
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
icons/mob/robot/gooborgs/custom/gooborg_syndi.dmi
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_cargo.dmi
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_med.dmi
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_miner.dmi
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_peacekeeper.dmi
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_sec.dmi
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
icons/mob/robot/gooborgs/departmental/gooborg_service.dmi
Normal file
|
After Width: | Height: | Size: 127 KiB |
@@ -1943,12 +1943,7 @@
|
||||
/area/awaymission/snow_outpost/outside)
|
||||
"gD" = (
|
||||
/obj/structure/cable{
|
||||
<<<<<<< HEAD
|
||||
icon_state = "0-2";
|
||||
|
||||
=======
|
||||
icon_state = "0-2"
|
||||
>>>>>>> 0114e94239 (Map adjustments [MDB IGNORE] (#17342))
|
||||
},
|
||||
/obj/machinery/porta_turret/alien/destroyed,
|
||||
/turf/simulated/shuttle/floor/alienplating,
|
||||
|
||||
@@ -3437,6 +3437,7 @@
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\engineering.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\event.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\fluff.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\gooborgs.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\janitor.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\medical.dm"
|
||||
#include "code\modules\mob\living\silicon\robot\sprites\mining.dm"
|
||||
|
||||