diff --git a/ATTRIBUTIONS.md b/ATTRIBUTIONS.md index 19047a9092..f1e5784a1e 100644 --- a/ATTRIBUTIONS.md +++ b/ATTRIBUTIONS.md @@ -104,3 +104,9 @@ **Creator / Copyright:** Toriate
**License Holders:** Matica, Cameron The Raven, Spotteh
**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)
+
+**Folder:** `icons/mob/robot/gooborgs`
+**Title:** Gooborgs
+**Creator / Copyright:** Toriate
+**License Holders:** Matica
+**License:** [CC BY-NC-SA 3.0](https://creativecommons.org/licenses/by-nc-sa/3.0/)
\ No newline at end of file diff --git a/code/controllers/subsystems/robot_sprites.dm b/code/controllers/subsystems/robot_sprites.dm index 8c9d7c3943..16003c441b 100644 --- a/code/controllers/subsystems/robot_sprites.dm +++ b/code/controllers/subsystems/robot_sprites.dm @@ -203,6 +203,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 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 7687f95d7d..b49d9978fa 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -54,11 +54,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) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 456365e959..389c6e399e 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -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' diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index a03c72af74..5de5168207 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -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 diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 5c00335b03..22b9cb9f61 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -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" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index daffbce878..c733cc5218 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index 26a0d6c477..66b0f6e062 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index eef7cdbe76..70f5c11e9e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm index fe4e1a0256..9928777ebb 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index eff6800d59..9930e588a9 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 2b25c13d8b..6a9159d178 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -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" diff --git a/code/modules/mob/living/silicon/robot/sprites/catborgs.dm b/code/modules/mob/living/silicon/robot/sprites/catborgs.dm index 3ffd0bd2e5..08e623a684 100644 --- a/code/modules/mob/living/silicon/robot/sprites/catborgs.dm +++ b/code/modules/mob/living/silicon/robot/sprites/catborgs.dm @@ -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. diff --git a/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm b/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm new file mode 100644 index 0000000000..c2346ac062 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/sprites/gooborgs.dm @@ -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 ..() diff --git a/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm b/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm index fdeabd911a..78253a9ec4 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm @@ -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 diff --git a/code/modules/projectiles/guns/energy/cyborg.dm b/code/modules/projectiles/guns/energy/cyborg.dm index 7beb5e25df..99e983fdd5 100644 --- a/code/modules/projectiles/guns/energy/cyborg.dm +++ b/code/modules/projectiles/guns/energy/cyborg.dm @@ -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) + ..() diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 801c4a0dac..9809b7842f 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -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") diff --git a/code/modules/xenobio/items/weapons.dm b/code/modules/xenobio/items/weapons.dm index 96f08073c1..306d681b28 100644 --- a/code/modules/xenobio/items/weapons.dm +++ b/code/modules/xenobio/items/weapons.dm @@ -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. diff --git a/code/unit_tests/robot_tests.dm b/code/unit_tests/robot_tests.dm index 677ad8e8d7..915c8ddc12 100644 --- a/code/unit_tests/robot_tests.dm +++ b/code/unit_tests/robot_tests.dm @@ -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")) diff --git a/icons/mob/robot/catborgs/custom/catborg_cameron.dmi b/icons/mob/robot/catborgs/custom/catborg_cameron.dmi index ed850300a0..5c27a787f0 100644 Binary files a/icons/mob/robot/catborgs/custom/catborg_cameron.dmi and b/icons/mob/robot/catborgs/custom/catborg_cameron.dmi differ diff --git a/icons/mob/robot/catborgs/custom/catborg_matica_custom.dmi b/icons/mob/robot/catborgs/custom/catborg_matica_custom.dmi index 96740d64bd..34d49a305b 100644 Binary files a/icons/mob/robot/catborgs/custom/catborg_matica_custom.dmi and b/icons/mob/robot/catborgs/custom/catborg_matica_custom.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_cargo.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_cargo.dmi index 10f0a59c3f..5a7673ddc5 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_cargo.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_cargo.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_combatmed.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_combatmed.dmi index 62b5be0307..f64f8ba7f3 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_combatmed.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_combatmed.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi index bc40777b37..a947c64294 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_medical.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_medical.dmi index 3e4072cc20..86c2c8d671 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_medical.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_medical.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_science.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_science.dmi index 1f2e45b526..7d79f49b3f 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_science.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_science.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_security.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_security.dmi index a8af1cb65c..e0e4103948 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_security.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_security.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/large/catborg_service.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_service.dmi index d4f1d47fca..e34690af4f 100644 Binary files a/icons/mob/robot/catborgs/departmental/large/catborg_service.dmi and b/icons/mob/robot/catborgs/departmental/large/catborg_service.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi index ac0f57a7d3..11c247a3f3 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi index c96d662ede..0a48762068 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi index cbdbd0f672..16c600fb4a 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi index 86df3b6e58..9069e6b309 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi index 9f57e0873c..56ce68b45c 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi index d49afd8336..e9957f94e4 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi differ diff --git a/icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi b/icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi index 81feda3643..be56cd1fbf 100644 Binary files a/icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi and b/icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi differ diff --git a/icons/mob/robot/gooborgs/Credit.txt b/icons/mob/robot/gooborgs/Credit.txt new file mode 100644 index 0000000000..0b569fb1c9 --- /dev/null +++ b/icons/mob/robot/gooborgs/Credit.txt @@ -0,0 +1 @@ +Gooborg Art Assets by Toriate \ No newline at end of file diff --git a/icons/mob/robot/gooborgs/custom/gooborg_ninja.dmi b/icons/mob/robot/gooborgs/custom/gooborg_ninja.dmi new file mode 100644 index 0000000000..16479be64c Binary files /dev/null and b/icons/mob/robot/gooborgs/custom/gooborg_ninja.dmi differ diff --git a/icons/mob/robot/gooborgs/custom/gooborg_syndi.dmi b/icons/mob/robot/gooborgs/custom/gooborg_syndi.dmi new file mode 100644 index 0000000000..7a11624c04 Binary files /dev/null and b/icons/mob/robot/gooborgs/custom/gooborg_syndi.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_cargo.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_cargo.dmi new file mode 100644 index 0000000000..c81bb22e2a Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_cargo.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi new file mode 100644 index 0000000000..21e6025751 Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_engi.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi new file mode 100644 index 0000000000..ba1f715374 Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_jani.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi new file mode 100644 index 0000000000..789e49463f Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_jester.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_med.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_med.dmi new file mode 100644 index 0000000000..55ddc89dba Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_med.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_miner.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_miner.dmi new file mode 100644 index 0000000000..f0735902d0 Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_miner.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_peacekeeper.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_peacekeeper.dmi new file mode 100644 index 0000000000..0d5da0465a Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_peacekeeper.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi new file mode 100644 index 0000000000..27863bbf3b Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_sci.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_sec.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_sec.dmi new file mode 100644 index 0000000000..2c6d614a6e Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_sec.dmi differ diff --git a/icons/mob/robot/gooborgs/departmental/gooborg_service.dmi b/icons/mob/robot/gooborgs/departmental/gooborg_service.dmi new file mode 100644 index 0000000000..d0b11cccb8 Binary files /dev/null and b/icons/mob/robot/gooborgs/departmental/gooborg_service.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 0790fed01a..6e2257be47 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3260,6 +3260,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"