diff --git a/code/controllers/subsystems/robot_sprites.dm b/code/controllers/subsystems/robot_sprites.dm index 9e9bafbf038..8c9d7c39432 100644 --- a/code/controllers/subsystems/robot_sprites.dm +++ b/code/controllers/subsystems/robot_sprites.dm @@ -142,7 +142,7 @@ SUBSYSTEM_DEF(robot_sprites) // testing whitelist functionality ckey-... if(findtext(icon, regex("ckey-"))) var/list/owner = splittext(icon, "-") - RS.whitelist_ckey = owner[3] + RS.whitelist_ckey = owner[2] RS.is_whitelisted = TRUE continue // testing module types slots modules-... @@ -151,6 +151,12 @@ SUBSYSTEM_DEF(robot_sprites) jobs -= "modules" RS.module_type = jobs continue + // special overlays that also can be used as decals, as some names have - in them, seperated by _ + if(findtext(icon, regex("^decals"))) + var/list/decals = splittext(icon, "_") + decals -= "decals" + RS.sprite_decals |= decals + continue // Check for all the possible overlays if(findtext(icon, regex("-roll"))) RS.sprite_flags |= ROBOT_HAS_SPEED_SPRITE @@ -189,7 +195,10 @@ SUBSYSTEM_DEF(robot_sprites) RS.has_eye_light_sprites = TRUE continue if(findtext(icon, regex("-decals"))) - RS.has_robotdecal_sprites = TRUE + RS.sprite_decals |= list("decals") + continue + if(findtext(icon, regex("-struggle"))) + RS.has_vore_struggle_sprite = TRUE continue if(findtext(icon, regex("-openpanel_w"))) RS.has_custom_open_sprites = TRUE diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index a657ecfbf27..41585d4a584 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -52,7 +52,6 @@ var/const/PILOT =(1<<13) var/const/ENTERTAINER =(1<<14) var/const/ENTREPRENEUR =(1<<15) -//VOREStation Add var/const/TALON =(1<<3) var/const/TALCAP =(1<<0) @@ -61,7 +60,17 @@ var/const/TALDOC =(1<<2) var/const/TALSEC =(1<<3) var/const/TALENG =(1<<4) var/const/TALMIN =(1<<5) -//VOREStation Add End + +var/list/command_positions = list( + JOB_SITE_MANAGER, + JOB_HEAD_OF_PERSONNEL, + JOB_HEAD_OF_SECURITY, + JOB_CHIEF_ENGINEER, + JOB_RESEARCH_DIRECTOR, + JOB_CHIEF_MEDICAL_OFFICER, + JOB_COMMAND_SECRETARY + //JOB_BLUESHIELD_GUARD +) /proc/guest_jobbans(var/job) return ( (job in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY)) ) diff --git a/code/game/objects/items/weapons/id cards/id_stacks.dm b/code/game/objects/items/weapons/id cards/id_stacks.dm index 1e0f49133e1..0b5736c3939 100644 --- a/code/game/objects/items/weapons/id cards/id_stacks.dm +++ b/code/game/objects/items/weapons/id cards/id_stacks.dm @@ -290,6 +290,38 @@ initial_sprite_stack = list("base-stamp-silver", "top-olive", "stamp-n", "pips-white") rank = JOB_PATHFINDER +/obj/item/card/id/exploration/borg + var/mob/living/silicon/robot/R + var/last_robot_loc + name = "Robot Exploration ID" + rank = JOB_EXPLORER + +/obj/item/card/id/exploration/borg/Initialize() + . = ..() + if(isrobot(loc?.loc)) + R = loc.loc + registered_name = R.braintype + RegisterSignal(src, COMSIG_OBSERVER_MOVED, PROC_REF(check_loc)) + +/obj/item/card/id/exploration/borg/proc/check_loc(atom/movable/mover, atom/old_loc, atom/new_loc) + if(old_loc == R || old_loc == R.module) + last_robot_loc = old_loc + if(!istype(loc, /obj/machinery) && loc != R && loc != R.module) + if(last_robot_loc) + forceMove(last_robot_loc) + last_robot_loc = null + else + forceMove(R) + if(loc == R) + hud_layerise() + +/obj/item/card/id/exploration/borg/Destroy() + if(R) + UnregisterSignal(src, COMSIG_OBSERVER_MOVED) + R = null + last_robot_loc = null + ..() + //Talon /obj/item/card/id/talon diff --git a/code/global.dm b/code/global.dm index 4c401f7e396..d8cf5e3adfa 100644 --- a/code/global.dm +++ b/code/global.dm @@ -122,9 +122,9 @@ var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J // Used by robots and robot preferences for regular modules. var/list/robot_module_types = list( - "Standard", "Engineering", "Surgeon", "Crisis", - "Miner", "Janitor", "Service", "Clerical", "Security", - "Research" + "Standard", "Engineering", "Surgeon", "Crisis", "Miner", + "Janitor", "Service", "Clown", "Clerical", "Security", + "Research", "Command" //"Exploration" ) // List of modules added during code red var/list/emergency_module_types = list( @@ -132,8 +132,9 @@ var/list/emergency_module_types = list( ) // List of modules available to AI shells var/list/shell_module_types = list( - "Standard", "Engineering", "Surgeon", "Crisis", - "Miner", "Janitor", "Service", "Clerical", "Security", "Research" + "Standard", "Engineering", "Surgeon", "Crisis", "Miner", + "Janitor", "Service", "Clown", "Clerical", "Security", + "Research", "Command" //"Exploration" ) // List of whitelisted modules var/list/whitelisted_module_types = list( @@ -159,10 +160,10 @@ var/static/list/scarySounds = list( 'sound/machines/door/old_airlock.ogg', 'sound/effects/clownstep1.ogg', 'sound/effects/clownstep2.ogg', - 'sound/voice/teppi/roar.ogg', //VOREStation Add - 'sound/voice/moth/scream_moth.ogg', //VOREStation Add - 'sound/voice/nya.ogg', //VOREStation Add - 'sound/voice/succlet_shriek.ogg' //VOREStation Add + 'sound/voice/teppi/roar.ogg', + 'sound/voice/moth/scream_moth.ogg', + 'sound/voice/nya.ogg', + 'sound/voice/succlet_shriek.ogg' ) // Bomb cap! diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index d884906ced4..a293ef71c73 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -731,6 +731,56 @@ add_overlay(I) qdel(I) + if(S.blob_appearance == "dullahan") + icon = 'icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi' + vis_height = 64 + var/image/I = image(icon, "[S.dullahan_overlays[1]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[1]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) + + I = image(icon, "[S.dullahan_overlays[2]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[2]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) + + I = image(icon, "[S.dullahan_overlays[3]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[3]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) + + I = image(icon, "[S.dullahan_overlays[4]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[4]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) + + I = image(icon, "[S.dullahan_overlays[5]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[5]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) + + I = image(icon, "[S.dullahan_overlays[6]][resting? "-rest" : (vore_fullness? "-[vore_fullness]" : null)]", pixel_x = -16) + I.color = S.dullahan_overlays[S.dullahan_overlays[6]] + I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE) + I.plane = MOB_PLANE + I.layer = MOB_LAYER + add_overlay(I) + qdel(I) //You know technically I could just put all the icons into the 128x64.dmi file and off-set them to fit.. if(S.blob_appearance in wide_icons) icon = 'icons/mob/species/protean/protean64x32.dmi' diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index f1420299287..486287507a9 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -528,6 +528,127 @@ S.dragon_overlays[6] = choice S.dragon_overlays[S.dragon_overlays[6]] = new_color S.blob_appearance = "dragon" + if("dullahan") //START OF DULLAHAN PORT. + var/list/options = list("Metalshell","Eyes","Decals","Import","Export") + for(var/option in options) + LAZYSET(options, option, image('icons/mob/robot/dullahan/v1/dullahansigns.dmi', option)) + var/choice = show_radial_menu(protie, protie, options, radius = 60) + if(!choice || QDELETED(protie) || protie.incapacitated()) + return FALSE + . = TRUE + var/list/dullahanmetal_styles = list( + "dullahanmetal", + "dullahanmetal2" + ) + if(mind.assigned_role in command_positions) + dullahanmetal_styles.Add("dullahancommand") + var/list/dullahaneyes_styles = list( + "dullahaneyes" + ) + var/list/dullahandecals_styles = list( + "dullahandecals", + "dullahandecals1", + "dullahandecals2", + "dullahandecals3", + "dullahandecals4", + "dullahandecals5", + "emptydecals" + ) + var/dmetal + var/ddecals + var/deyes + var/ddecalscolor + var/deyescolor + var/dmetalcolor + switch(choice) + if("Metalshell") + var/extraon = "dullahanextendedon" + var/extraoff = "dullahanextendedoff" + options = dullahanmetal_styles + for(var/option in options) + var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16) + LAZYSET(options, option, I) + choice = show_radial_menu(protie, protie, options, radius = 90) + if(!choice || QDELETED(protie) || protie.incapacitated()) + return 0 + var/new_color = tgui_color_picker(src, "Pick shell color:","Shell Color", S.dullahan_overlays[3]) + if(!new_color) + return 0 + S.dullahan_overlays[3] = choice //metal overlay is 3, eyes is 4 + S.dullahan_overlays[S.dullahan_overlays[3]] = new_color + if(choice == "dullahanmetal2") + S.dullahan_overlays[6] = extraon + var/tempcolor ="#FFFFFF" + S.dullahan_overlays[S.dullahan_overlays[6]] = tempcolor + else + S.dullahan_overlays[6] = extraoff + if("Eyes") + options = dullahaneyes_styles + for(var/option in options) + var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16) + LAZYSET(options, option, I) + choice = show_radial_menu(protie, protie, options, radius = 90) + if(!choice || QDELETED(protie) || protie.incapacitated()) + return 0 + var/new_color = tgui_color_picker(src, "Pick eye color:","Eye Color", S.dullahan_overlays[4]) + if(!new_color) + return 0 + S.dullahan_overlays[4] = choice + S.dullahan_overlays[S.dullahan_overlays[4]] = new_color + if("Decals") + options = dullahandecals_styles + for(var/option in options) + var/image/I = image('icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi', option, dir = 2, pixel_x = -16, pixel_y = -16) + LAZYSET(options, option, I) + choice = show_radial_menu(protie, protie, options, radius = 90) + if(!choice || QDELETED(protie) || protie.incapacitated()) + return 0 + var/new_color = tgui_color_picker(src, "Pick decal color:","Decal Color", S.dullahan_overlays[5]) + if(!new_color) + return 0 + S.dullahan_overlays[5] = choice + S.dullahan_overlays[S.dullahan_overlays[5]] = new_color + if("Import") + var/dinput_style + dinput_style = sanitizeSafe(tgui_input_text(protie,"Paste the style string you exported with Export Style.", "Style loading","", 120), 128) + if(dinput_style) + var/list/dinput_style_list = splittext(dinput_style, ";") + if((LAZYLEN(dinput_style_list) == 6) && (dinput_style_list[1] in dullahanmetal_styles) && (dinput_style_list[3] in dullahandecals_styles) && (dinput_style_list[5] in dullahaneyes_styles)) + try + if(dinput_style_list[1] in dullahanmetal_styles) + S.dullahan_overlays[3] = dinput_style_list[1] + if(dinput_style_list[1] == "dullahanmetal2") + S.dullahan_overlays[6] = "dullahanextendedon" + else + S.dullahan_overlays[6] = "dullahanextendedoff" + if(rgb2num(dinput_style_list[2])) + S.dullahan_overlays[S.dullahan_overlays[3]] = dinput_style_list[2] //metal shell color -2- + catch + dmetal = dinput_style_list[1] + try + if(dinput_style_list[3] in dullahandecals_styles) + S.dullahan_overlays[5] = dinput_style_list[3] + if(rgb2num(dinput_style_list[4])) + S.dullahan_overlays[S.dullahan_overlays[5]] = dinput_style_list[4] // decals color + catch + ddecals = dinput_style_list[3] + try + if(dinput_style_list[5] in dullahaneyes_styles) + S.dullahan_overlays[4] = dinput_style_list[5] + if(rgb2num(dinput_style_list[6])) + S.dullahan_overlays[S.dullahan_overlays[4]] = dinput_style_list[6] //eyes color + catch + ddecals = dinput_style_list[5] + if("Export") + dmetal = S.dullahan_overlays[3] + ddecals = S.dullahan_overlays[5] + deyes = S.dullahan_overlays[4] + dmetalcolor = S.dullahan_overlays[S.dullahan_overlays[3]] + ddecalscolor = S.dullahan_overlays[S.dullahan_overlays[5]] + deyescolor = S.dullahan_overlays[S.dullahan_overlays[4]] + var/output_style = jointext(list(dmetal,dmetalcolor,ddecals,ddecalscolor,deyes,deyescolor), ";") + to_chat(protie, span_notice("Exported style string is \" [output_style] \". Use this to get the same style in the future with import style")) + S.blob_appearance = "dullahan" //END OF DULLAHAN PORT. if("Primary") var/new_color = tgui_color_picker(protie, "Pick primary color:","Protean Primary", "#FF0000") if(!new_color) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index dd713c6a5a7..2c987935424 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -130,6 +130,15 @@ "dragon_eyesNormal" = "#FFFFFF" ) + var/list/dullahan_overlays = list( + "dullahanbody" = "#FFFFFF", + "dullahanhead" = "#FFFFFF", + "dullahanmetal" = "#FFFFFF", + "dullahaneyes" = "#FFFFFF", + "dullahandecals" = "#FFFFFF", + "dullahanextended" = "#FFFFFF" + // loads the icons from the DMI file in that order on spawn. they are overlay 1-6. + ) var/pseudodead = 0 /datum/species/protean/New() diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index fae3b5788b5..07b480964f5 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -479,3 +479,166 @@ if(custom_range) range = custom_range to_chat(user, span_notice("Scanner will now look up to [range] tile(s) away.")) + +/* +/obj/item/robot_tongue/examine(user) + . = ..() + if(Adjacent(user)) + if(water.energy) + . += span_notice("[src] is wet. Just like it should be.") + if(water.energy < 5) + . += span_notice("[src] is dry.") +*/ + +/obj/item/shield_projector/line/exploborg + name = "expirmental shield projector" + description_info = "This creates a shield in a straight line perpendicular to the direction where the user was facing when it was activated. \ + The shield allows projectiles to leave from inside but blocks projectiles from outside. Everything else can pass through the shield freely, \ + including other people and thrown objects. The shield also cannot block certain effects which take place over an area, such as flashbangs or explosions." + shield_health = 90 + max_shield_health = 90 + shield_regen_amount = 25 + line_length = 7 // How long the line is. Recommended to be an odd number. + offset_from_center = 2 // How far from the projector will the line's center be. + +// To repair a single module +/obj/item/self_repair_system + name = "plating repair system" + desc = "A nanite control system to repair damaged armour plating and wiring while not moving. Destroyed armour can't be restored." + icon = 'icons/obj/robot_component.dmi' + icon_state = "armor" + var/repair_time = 25 + var/repair_amount = 2.5 + var/power_tick = 25 + var/disabled_icon = "armor" + var/active_icon = "armor_broken" + var/list/target_components = list("armour") + var/repairing = FALSE + +/obj/item/self_repair_system/New() + ..() + flags |= NOBLUDGEON + +/obj/item/self_repair_system/attack_self(mob/user) + if(repairing) + return + var/mob/living/silicon/robot/R = user + var/destroyed_components = FALSE + var/list/repairable_components = list() + for(var/target_component in target_components) + var/datum/robot_component/C = R.components[target_component] + if(!C) + continue + if(istype(C.wrapped, /obj/item/broken_device)) + destroyed_components = TRUE + else if (C.brute_damage != 0 || C.electronics_damage != 0) + repairable_components += C + if(!repairable_components.len && destroyed_components) + to_chat(R, span_warning("Repair system initialization failed. Can't repair destroyed [target_components.len == 1 ? "[R.components[target_components[1]]]'s" : "component's"] plating or wiring.")) + return + if(!repairable_components.len) + to_chat(R, span_warning("No brute or burn damage detected [target_components.len == 1 ? "in [R.components[target_components[1]]]" : ""].")) + return + if(destroyed_components) + to_chat(R, span_warning("WARNING! Destroyed modules detected. Those can not be repaired!")) + icon_state = active_icon + update_icon() + repairing = TRUE + for(var/datum/robot_component/C in repairable_components) + to_chat(R, span_notice("Repair system initializated. Repairing plating and wiring of [C].")) + src.self_repair(R, C, repair_time, repair_amount) + repairing = FALSE + icon_state = disabled_icon + update_icon() + +/obj/item/self_repair_system/proc/self_repair(mob/living/silicon/robot/R, datum/robot_component/C, var/tick_delay, var/heal_per_tick) + if(!C || !R.cell) + return + if(C.brute_damage == 0 && C.electronics_damage == 0) + to_chat(R, span_notice("Repair of [C] completed.")) + return + if(!R.use_direct_power(power_tick, 500)) //We don't want to drain ourselves too far down during exploration + to_chat(R, span_warning("Not enough power to initialize the repair system.")) + return + if(do_after(R, tick_delay)) + if(!C) + return + C.brute_damage -= min(C.brute_damage, heal_per_tick) + C.electronics_damage -= min(C.electronics_damage, heal_per_tick) + R.updatehealth() + src.self_repair(R, C, tick_delay, heal_per_tick) + +// To repair multiple modules +/obj/item/self_repair_system/advanced + name = "self repair system" + desc = "A nanite control system to repair damaged components while not moving. Destroyed components can't be restored." + target_components = list("actuator", "radio", "power cell", "diagnosis unit", "camera", "comms", "armour") + power_tick = 10 + repair_time = 15 + repair_amount = 3 + +// Robot Weapons +/obj/item/gun/energy/robotic/flare + name = "flare gun" + desc = "A flare-gun" + projectile_type = /obj/item/projectile/energy/flash/flare + fire_sound = 'sound/weapons/tablehit1.ogg' + icon = 'icons/obj/gun.dmi' + icon_state = "taser" + charge_cost = 480 + borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_TASER + +/obj/item/gun/energy/robotic/smallmedigun + name = "borg directed restoration system" + desc = "An adapted version of the BL-3 'Phoenix, for expiremental useage in borgs." + projectile_type = /obj/item/projectile/beam/medical_cell/borg + accept_cell_type = /obj/item/cell/device + cell_type = /obj/item/cell/device/weapon + charge_cost = 600 + fire_delay = 6 + force = 5 + icon_state = "medbeam" + icon = 'icons/obj/gun_vr.dmi' + accuracy = 100 + fire_sound = 'sound/weapons/eluger.ogg' + self_recharge = 1 + use_external_power = 1 + +/obj/item/projectile/beam/medical_cell/borg + range = 4 + +/obj/item/projectile/beam/medical_cell/borg/on_hit(var/mob/living/carbon/human/target) + if(istype(target, /mob/living/carbon/human)) + if(target.stat != DEAD) + target.adjustBruteLoss(-3.75) + target.adjustFireLoss(-3.75) + else + return 1 + +/obj/item/melee/robotic/blade/explotailspear + name = "energy tail" + desc = "A glowing tail spear with a moderate range. It appears to be extremely sharp." + force = 45 + armor_penetration = 25 //30 to try and make it not useless against armored mobs but not fully nullify it. + reach = 3 + projectile_parry_chance = 15. + +/obj/item/melee/robotic/jaws/big/explojaws + name = "explo jaws" + desc = "Highly lethal jaws for close range combat." + force = 60 + armor_penetration = 25 //To try and make it not useless against armored mobs but not fully nullify it + projectile_parry_chance = 15 + +/obj/item/gun/energy/robotic/phasegun + name = "EW26 Artemis Mounted" + desc = "The RayZar EW26 Artemis, also known as the 'phase carbine', is a downsized energy-based weapon specifically designed for use against wildlife. This one has a safety interlock that prevents firing while in proximity to the facility." + description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/gun.dmi' + icon_state = "phasecarbine" + charge_cost = 160 + recharge_time = 16 + projectile_type = /obj/item/projectile/energy/phase + use_external_power = 1 + self_recharge = 1 + borg_flags = COUNTS_AS_ROBOT_GUN | COUNTS_AS_ROBOT_LASER diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 363b382a718..1b4200a45ef 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -813,4 +813,30 @@ max_item_count = 35 digest_multiplier = 3 +/obj/item/dogborg/sleeper/command //Command borg belly + name = "Bluespace Filing Belly" + desc = "A mounted bluespace storage unit for carrying paperwork" + icon_state = "sleeperd" + injection_chems = null + compactor = TRUE + recycles = FALSE + max_item_count = 25 + medsensor = FALSE + +/obj/item/dogborg/sleeper/compactor/honkborg + name = "Jiggles Von Hungertron" + desc = "You've heard of Giggles Von Honkerton for the back, now get ready for Jiggles Von Hungertron for the front." + icon_state = "clowngut" + recycles = FALSE + +/obj/item/dogborg/sleeper/exploration + name = "Store-Belly" + desc = "Equipment for a ExploreHound unit. A mounted portable-storage device that holds supplies/person." + icon_state = "sleeperlost" + injection_chems = list(REAGENT_ID_INAPROVALINE) // Only to stabilize during extractions + compactor = TRUE + max_item_count = 4 + medsensor = FALSE + recycles = TRUE + #undef SLEEPER_INJECT_COST diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6c2c70a0c8e..84719998e6e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -24,7 +24,7 @@ var/crisis //Admin-settable for combat module use. var/crisis_override = 0 var/integrated_light_power = 6 - var/robotdecal_on = 0 + var/list/robotdecal_on = list() var/datum/wires/robot/wires can_be_antagged = TRUE @@ -449,8 +449,29 @@ /mob/living/silicon/robot/verb/toggle_robot_decals() // loads overlay UNDER lights. set category = "Abilities.Silicon" set name = "Toggle extras" - robotdecal_on = !robotdecal_on - to_chat(src, span_filter_notice("You [robotdecal_on ? "enable" : "disable"] your extra apperances.")) + + if(!sprite_datum) + return + if(!LAZYLEN(sprite_datum.sprite_decals)) + to_chat(src, span_warning("This module does not support decals.")) + return + + var/extra_message = "Enabled decals:\n" + for(var/decal in robotdecal_on) + extra_message += decal + "\n" + + var/decal_to_toggle = tgui_input_list(src, "Please select which decal you want to toggle\n[extra_message]", "Decal Toggle", sprite_datum.sprite_decals) + if(!decal_to_toggle) + return + + decal_to_toggle = lowertext(decal_to_toggle) + + if(robotdecal_on.Find(decal_to_toggle)) + robotdecal_on -= decal_to_toggle + to_chat(src, span_filter_notice("You disable your \"[decal_to_toggle]\" extra apperances.")) + else + robotdecal_on += decal_to_toggle + to_chat(src, span_filter_notice("You enable your \"[decal_to_toggle]\" extra apperances.")) update_icon() /mob/living/silicon/robot/verb/spark_plug() //So you can still sparkle on demand without violence. @@ -966,11 +987,12 @@ if(eyes_overlay) add_overlay(eyes_overlay) - if(robotdecal_on && sprite_datum.has_robotdecal_sprites) + if(robotdecal_on.len && LAZYLEN(sprite_datum.sprite_decals)) if(!shell || deployed) // Shell borgs that are not deployed will have no eyes. - var/robotdecal_overlay = sprite_datum.get_robotdecal_overlay(src) - if(robotdecal_overlay) - add_overlay(robotdecal_overlay) + for(var/enabled_decal in robotdecal_on) + var/robotdecal_overlay = sprite_datum.get_robotdecal_overlay(src, enabled_decal) + if(robotdecal_overlay) + add_overlay(robotdecal_overlay) if(lights_on && sprite_datum.has_eye_light_sprites) if(!shell || deployed) // Shell borgs that are not deployed will have no eyes. diff --git a/code/modules/mob/living/silicon/robot/robot_bellies.dm b/code/modules/mob/living/silicon/robot/robot_bellies.dm index 51d65064abe..17f97a74751 100644 --- a/code/modules/mob/living/silicon/robot/robot_bellies.dm +++ b/code/modules/mob/living/silicon/robot/robot_bellies.dm @@ -34,3 +34,29 @@ if(isliving(contents)) vore_light_states[b_class] = 1 return + +/mob/living/silicon/robot/vs_animate(var/belly_class) + if(!sprite_datum.has_vore_struggle_sprite) + return + if(belly_class == "sleeper" && sleeper_state == 0 && vore_selected.silicon_belly_overlay_preference == "Sleeper") + return + var/vs_fullness = vore_fullness_ex[belly_class] + if(resting) + cut_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)) + add_overlay("[sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)]-struggle") + else + cut_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)) + add_overlay("[sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)]-struggle") + addtimer(CALLBACK(src, PROC_REF(end_vs_animate), belly_class), 1.2 SECONDS) + +/mob/living/silicon/robot/proc/end_vs_animate(var/belly_class) + var/vs_fullness = vore_fullness_ex[belly_class] + if(resting) + cut_overlay("[sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)]-struggle") + else + cut_overlay("[sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)]-struggle") + if(vs_fullness > 0) + if(resting) + add_overlay(sprite_datum.get_belly_resting_overlay(src, vs_fullness, belly_class)) + else + add_overlay(sprite_datum.get_belly_overlay(src, vs_fullness, belly_class)) 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 397509b91d0..b11696eaaa1 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -2,12 +2,15 @@ var/global/list/robot_modules = list( "Standard" = /obj/item/robot_module/robot/standard, "Service" = /obj/item/robot_module/robot/clerical/butler, "Clerical" = /obj/item/robot_module/robot/clerical/general, + "Clown" = /obj/item/robot_module/robot/clerical/honkborg, + "Command" = /obj/item/robot_module/robot/chound, "Research" = /obj/item/robot_module/robot/research, "Miner" = /obj/item/robot_module/robot/miner, "Crisis" = /obj/item/robot_module/robot/medical/crisis, "Surgeon" = /obj/item/robot_module/robot/medical/surgeon, "Security" = /obj/item/robot_module/robot/security/general, "Combat" = /obj/item/robot_module/robot/security/combat, + "Exploration" = /obj/item/robot_module/robot/exploration, "Engineering" = /obj/item/robot_module/robot/engineering, "Janitor" = /obj/item/robot_module/robot/janitor, "Gravekeeper" = /obj/item/robot_module/robot/gravekeeper, @@ -240,6 +243,10 @@ var/global/list/robot_modules = list( pto_type = PTO_MEDICAL supported_upgrades = list(/obj/item/borg/upgrade/restricted/bellycapupgrade) +//This is a constant back and forth debate. 11 years ago, the 'medical' borg was split into surgery and crisis. +//Two years ago(?), they were combined into Crisis elsewhere and the idea seems to be well appreciated. +//However, given this seems as though it will remain a hot topic for as long as SS13 exists, we are going to leave the surgeon module here in the event that we split them. Again. +//This also goes for the sprite datums. It's be a lot of work to 'clear' them of having surgery in their path just to have to split them again in 2-3 years. /obj/item/robot_module/robot/medical/surgeon name = "surgeon robot module" @@ -324,18 +331,36 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/gripper/no_use/organ(src) src.modules += new /obj/item/gripper/medical(src) src.modules += new /obj/item/shockpaddles/robot(src) + //Surgeon Modules below + src.modules += new /obj/item/autopsy_scanner(src) + src.modules += new /obj/item/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/surgical/hemostat/cyborg(src) + src.modules += new /obj/item/surgical/retractor/cyborg(src) + src.modules += new /obj/item/surgical/cautery/cyborg(src) + src.modules += new /obj/item/surgical/bonegel/cyborg(src) + src.modules += new /obj/item/surgical/FixOVein/cyborg(src) + src.modules += new /obj/item/surgical/bonesetter/cyborg(src) + src.modules += new /obj/item/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/surgical/surgicaldrill/cyborg(src) + src.modules += new /obj/item/surgical/bioregen/cyborg(src) + //Surgeon Modules End src.modules += new /obj/item/inflatable_dispenser/robot(src) + //src.modules += new /obj/item/holosign_creator/medical(src) //Re-enable after Guti's PR. var/obj/item/reagent_containers/spray/PS = new /obj/item/reagent_containers/spray(src) src.emag += PS PS.reagents.add_reagent(REAGENT_ID_PACID, 250) PS.name = "Polyacid spray" - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000) + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(30000) synths += medicine + var/obj/item/stack/medical/advanced/clotting/C = new (src) var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src) var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src) var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) + C.uses_charge = 1 + C.charge_costs = list(5000) + C.synths = list(medicine) O.uses_charge = 1 O.charge_costs = list(1000) O.synths = list(medicine) @@ -348,6 +373,7 @@ var/global/list/robot_modules = list( src.modules += O src.modules += B src.modules += S + src.modules += C src.modules += new /obj/item/dogborg/sleeper(src) src.emag += new /obj/item/dogborg/pounce(src) //Pounce @@ -657,6 +683,42 @@ var/global/list/robot_modules = list( if(PB) PB.reagents.add_reagent(REAGENT_ID_BEER2, 2 * amount) +/obj/item/robot_module/robot/clerical/honkborg + name = "clown robot module" + channels = list("Service" = 1, + "Entertainment" = 1) + pto_type = PTO_CIVILIAN + can_be_pushed = 0 + +/obj/item/robot_module/robot/clerical/honkborg/create_equipment(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/gripper/service(src) + src.modules += new /obj/item/reagent_containers/glass/bucket(src) + src.modules += new /obj/item/material/minihoe(src) + src.modules += new /obj/item/analyzer/plant_analyzer(src) + src.modules += new /obj/item/storage/bag/serviceborg(src) + src.modules += new /obj/item/robot_harvester(src) + src.modules += new /obj/item/multitool(src) + src.modules += new /obj/item/dogborg/pounce(src) + src.modules += new /obj/item/bikehorn(src) + src.modules += new /obj/item/gun/launcher/confetti_cannon/robot(src) + + var/obj/item/rsf/M = new /obj/item/rsf(src) + M.stored_matter = 30 + src.modules += M + + src.modules += new /obj/item/reagent_containers/dropper/industrial(src) + + var/obj/item/flame/lighter/zippo/L = new /obj/item/flame/lighter/zippo(src) + L.lit = 1 + src.modules += L + + src.modules += new /obj/item/tray/robotray(src) + src.modules += new /obj/item/reagent_containers/borghypo/service(src) + + var/obj/item/dogborg/sleeper/compactor/honkborg/B = new /obj/item/dogborg/sleeper/compactor/honkborg(src) + src.modules += B + ..() + /obj/item/robot_module/robot/clerical/general name = "clerical robot module" 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 bf9788a9a21..2b25c13d8b2 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -10,11 +10,11 @@ var/has_eye_sprites = TRUE var/has_eye_light_sprites = FALSE - var/has_robotdecal_sprites = FALSE var/has_custom_open_sprites = FALSE var/has_vore_belly_sprites = FALSE var/has_vore_belly_resting_sprites = FALSE var/has_sleeper_light_indicator = FALSE //Moved here because there's no reason lights should be limited to just medical borgs. Or redefined every time they ARE used. + var/has_vore_struggle_sprite = FALSE var/max_belly_size = 1 //If larger bellies are made, set this to the value of the largest size var/has_rest_sprites = FALSE var/list/rest_sprite_options @@ -32,6 +32,7 @@ var/whitelist_charname var/list/belly_light_list = list() // Support multiple sleepers with r/g light "sleeper" var/list/belly_capacity_list = list() //Support multiple bellies with multiple sizes, default: "sleeper" = 1 + var/list/sprite_decals = list() // Allow extra decals /// Determines if the borg has the proper flags to show an overlay. /datum/robot_sprite/proc/sprite_flag_check(var/flag_to_check) @@ -132,11 +133,18 @@ else return -/datum/robot_sprite/proc/get_robotdecal_overlay(var/mob/living/silicon/robot/ourborg) - if(!(ourborg.resting && has_robotdecal_sprites)) - return "[sprite_icon_state]-decals" - else - return +/datum/robot_sprite/proc/get_robotdecal_overlay(var/mob/living/silicon/robot/ourborg, var/type) + if(LAZYLEN(sprite_decals)) + if(!ourborg.resting) + return "[sprite_icon_state]-[type]" + switch(ourborg.rest_style) + if("Sit") + return "[sprite_icon_state]-[type]-sit" + if("Bellyup") + return "[sprite_icon_state]-[type]-bellyup" + else + return "[sprite_icon_state]-[type]-rest" + /datum/robot_sprite/proc/get_rest_sprite(var/mob/living/silicon/robot/ourborg) if(!(ourborg.rest_style in rest_sprite_options)) diff --git a/code/modules/mob/living/silicon/robot/sprites/catborgs.dm b/code/modules/mob/living/silicon/robot/sprites/catborgs.dm index 5cbd725ab8c..9a07ca68512 100644 --- a/code/modules/mob/living/silicon/robot/sprites/catborgs.dm +++ b/code/modules/mob/living/silicon/robot/sprites/catborgs.dm @@ -42,9 +42,10 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_cargo.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") - belly_capacity_list = list("sleeper" = 2, "throat" =2) + belly_capacity_list = list("sleeper" = 2) sprite_flags = ROBOT_HAS_SHIELD_SPRITE | ROBOT_HAS_GUN_SPRITE /// Engineering @@ -56,6 +57,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_engi.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -71,6 +73,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_jani.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -85,6 +88,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_medicat.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -100,6 +104,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sci.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -114,6 +119,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_sec.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -128,6 +134,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE sprite_icon = 'icons/mob/robot/catborgs/departmental/small/kittyborg_service.dmi' rest_sprite_options = list("Default", "Bellyup", "Sit") belly_capacity_list = list("sleeper" = 2) @@ -228,7 +235,6 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE - has_robotdecal_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) @@ -252,7 +258,7 @@ has_eye_light_sprites = TRUE has_sleeper_light_indicator = FALSE has_vore_belly_resting_sprites = TRUE - has_robotdecal_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. // There is only one version of this borg, so it gets all the departments. diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm index e5d0ee1275e..8d03c223124 100644 --- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm +++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm @@ -68,10 +68,15 @@ sprite_icon_state = "noble" has_custom_open_sprites = TRUE + /datum/robot_sprite/civilian/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-service" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/civilian/uptall name = "Feminine Humanoid" @@ -308,23 +313,30 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/service/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream +/datum/robot_sprite/dogborg/tall/service/dullahan + name = "Dullahan" + sprite_icon_state = "dullahanserv" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_serv.dmi' + rest_sprite_options = list("Default", "Sit") + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + pixel_x = 0 -/datum/robot_sprite/dogborg/tall/service/dullahanv3/basic - name = "Dullahan service v3" +/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt + name = "Dullahan v2" + sprite_icon_state = "dullahanserv_alt" + +/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt2 + name = "Dullahan v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/service.dmi' sprite_icon_state = "dullahanservice" - has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + sprite_decals = list("decals") -/datum/robot_sprite/dogborg/tall/service/dullahanv3/barista - name = "Dullahan matcha v3" +/datum/robot_sprite/dogborg/tall/service/dullahan/servicealt3 + name = "Dullahan v4 matcha" + sprite_icon = 'icons/mob/robot/dullahan/v3/barista.dmi' sprite_icon_state = "dullahanbarista" - has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + sprite_decals = list("decals") // Clerical @@ -401,3 +413,76 @@ // None yet */ + +/datum/robot_sprite/dogborg/clown + module_type = "Clown" + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + +/datum/robot_sprite/dogborg/clown/vale + name = "Honkhound V2" + sprite_icon_state = "honkborg" + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/tall/clown + module_type = "Clown" + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/clown/k4t + name = "K4T" + sprite_icon_state = "k4tclown" + has_eye_light_sprites = TRUE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = FALSE + rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/tall/clown/dullahan/clown + name = "Dullahan Clown" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_clown.dmi' + sprite_icon_state = "dullahanclown" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/clown/stoat + name = "ST-04t" + sprite_icon = 'icons/mob/robot/stoatborg.dmi' + sprite_icon_state = "stoatclown" + has_eye_light_sprites = TRUE + has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/service/valech + name = "ServicehoundV2 - Alt" + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + sprite_icon_state = "servborg" + rest_sprite_options = list("Default") + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/service/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixserv" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/tall/service/mekaserve_alt + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + name = "MEKA Alt" + pixel_x = 0 + sprite_icon_state = "mekaserve_alt" + rest_sprite_options = list("Default", "Sit") + + +/datum/robot_sprite/dogborg/service/smolraptorservicesprite + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_serv.dmi' + +/datum/robot_sprite/dogborg/service/smolraptorservicesprite/smolraptorserv + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm index 8613f4f5ffa..1cce8818271 100644 --- a/code/modules/mob/living/silicon/robot/sprites/combat.dm +++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm @@ -49,9 +49,15 @@ /datum/robot_sprite/combat/worm name = "W02M" - sprite_icon_state = "worm" + sprite_icon_state = "worm-combat" has_custom_open_sprites = TRUE sprite_flags = ROBOT_HAS_SHIELD_SPRITE + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE + /datum/robot_sprite/combat/uptall name = "Feminine Humanoid" @@ -147,3 +153,59 @@ return else return ..() + +/datum/robot_sprite/dogborg/tall/combat/tall + name = "MEKA" + sprite_icon_state = "mekasyndi" + module_type = "Combat" + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + has_vore_belly_sprites = TRUE + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/combat/tall/mmeka + name = "NIKO" + sprite_icon_state = "mmekasyndi" + has_vore_belly_sprites = TRUE + +/datum/robot_sprite/dogborg/tall/combat/tall/fmeka + name = "NIKA" + sprite_icon_state = "fmekasyndi" + has_vore_belly_sprites = TRUE + +/datum/robot_sprite/dogborg/tall/combat/tall/k4t + name = "K4T" + sprite_icon_state = "k4tsyndi" + has_vore_belly_sprites = FALSE + +//Using our own category wide here not to interfere with upstream in case they add wide sprites under just dogborg. +/datum/robot_sprite/dogborg/wide/combat + module_type = "Combat" + has_custom_equipment_sprites = TRUE + has_eye_sprites = FALSE + +/datum/robot_sprite/dogborg/wide/combat/blade/do_equipment_glamour(var/obj/item/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/melee/robotic/blade/CBB = locate() in module.modules + if(CBB) + CBB.name = "combat saw" + CBB.desc = "A high frequency blade attached to the end of a cyborg's tail. It appears to be extremely sharp." + var/obj/item/melee/robotic/borg_combat_shocker/BCS = locate() in module.modules + if(BCS) + BCS.name = "combat jaws" + BCS.desc = "Shockingly chompy!" + BCS.icon_state = "ertjaws" + BCS.hitsound = 'sound/weapons/bite.ogg' + BCS.attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + BCS.dogborg = TRUE + +/datum/robot_sprite/dogborg/wide/combat/blade + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + name = "Blade" + sprite_icon_state = "blade" + sprite_hud_icon_state = "ert" + rest_sprite_options = list() + sprite_flags = ROBOT_HAS_LASER_SPRITE | ROBOT_HAS_DISABLER_SPRITE | ROBOT_HAS_DAGGER_SPRITE diff --git a/code/modules/mob/living/silicon/robot/sprites/command.dm b/code/modules/mob/living/silicon/robot/sprites/command.dm new file mode 100644 index 00000000000..ca93ba00b34 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/sprites/command.dm @@ -0,0 +1,113 @@ +/obj/item/robot_module/robot/chound + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_SIIK = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_GUTTER = 0, + LANGUAGE_SCHECHI = 1, + LANGUAGE_EAL = 1, + LANGUAGE_SIGN = 0, + LANGUAGE_BIRDSONG = 1, + LANGUAGE_SAGARU = 1, + LANGUAGE_CANILUNZT = 1, + LANGUAGE_ECUREUILIAN= 1, + LANGUAGE_DAEMON = 1, + LANGUAGE_ENOCHIAN = 1, + LANGUAGE_DRUDAKAR = 1, + LANGUAGE_TAVAN = 1 + ) + +//Build our Module +/obj/item/robot_module/robot/chound + name = "command robot module" + channels = list( + "Medical" = 1, + "Engineering" = 1, + "Security" = 1, + "Service" = 1, + "Supply" = 0, + "Science" = 1, + "Command" = 1, + "Explorer" = 0 + ) + pto_type = PTO_CIVILIAN + can_be_pushed = 0 + +/obj/item/robot_module/robot/chound/create_equipment(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/pen/robopen(src) + src.modules += new /obj/item/form_printer(src) + src.modules += new /obj/item/gripper/paperwork(src) + src.modules += new /obj/item/hand_labeler(src) + src.modules += new /obj/item/stamp(src) + src.modules += new /obj/item/stamp/denied(src) + //src.modules += new /obj/item/taskmanager(src) //Needs to be ported over. + src.emag += new /obj/item/stamp/chameleon(src) + src.emag += new /obj/item/pen/chameleon(src) + + src.modules += new /obj/item/dogborg/sleeper/command(src) + src.emag += new /obj/item/dogborg/pounce(src) + ..() + +/datum/robot_sprite/dogborg/command + name = "Commandhound V2" + sprite_icon_state = "kcom" + has_eye_light_sprites = TRUE + module_type = "Command" + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + +/datum/robot_sprite/dogborg/command/borgi + name = "Borgi" + sprite_icon_state = "borgi" + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/tall/command + module_type = "Command" + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + pixel_x = 0 + +/datum/robot_sprite/dogborg/raptor/command + module_type = "Command" + sprite_icon = 'icons/mob/robot/raptor.dmi' + +/datum/robot_sprite/dogborg/raptor/command/raptor + name = "Raptor" + sprite_icon_state = "chraptor" + has_dead_sprite_overlay = FALSE + has_custom_equipment_sprites = TRUE + rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/tall/command/meka + name = "MEKA" + sprite_icon_state = "mekaunity" + has_eye_light_sprites = TRUE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/command/mmeka + name = "NIKO" + sprite_icon_state = "mmekaunity" + has_eye_light_sprites = TRUE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/command/fmeka + name = "NIKA" + sprite_icon_state = "fmekaunity" + has_eye_light_sprites = TRUE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/command/smolraptorcommand + name = "Small Raptor" + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_cc.dmi' + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/engineering.dm b/code/modules/mob/living/silicon/robot/sprites/engineering.dm index 96017cfe95d..c09910ca99e 100644 --- a/code/modules/mob/living/silicon/robot/sprites/engineering.dm +++ b/code/modules/mob/living/silicon/robot/sprites/engineering.dm @@ -105,10 +105,16 @@ sprite_icon_state = "zoomba" has_dead_sprite = TRUE + /datum/robot_sprite/engineering/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-engineering" + + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/engineering/uptall name = "Feminine Humanoid" @@ -214,13 +220,38 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/engineering/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream - -/datum/robot_sprite/dogborg/tall/engineering/dullahanv3/engineerdully - name = "Dullahan engineer v3" - sprite_icon_state = "dullahanengineer" +/datum/robot_sprite/dogborg/tall/engineering/dullahan + name = "Dullahan v1" + sprite_icon_state = "dullahaneng" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_eng.dmi' + rest_sprite_options = list("Default", "Sit") + has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv2 + name = "Dullahan v2" + sprite_icon_state = "dullahaneng_alt" + +/datum/robot_sprite/dogborg/tall/engineering/dullahan/engineerv3 + name = "Dullahan v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/engineer.dmi' + sprite_icon_state = "dullahanengineer" + sprite_decals = list("decals") + +/datum/robot_sprite/dogborg/engineering/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixengi" + has_eye_light_sprites = TRUE + has_vore_belly_resting_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/engineering/smolraptorengineeringsprite + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_eng.dmi' + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/fluff.dm b/code/modules/mob/living/silicon/robot/sprites/fluff.dm index 4e83dc4e407..c97676b204c 100644 --- a/code/modules/mob/living/silicon/robot/sprites/fluff.dm +++ b/code/modules/mob/living/silicon/robot/sprites/fluff.dm @@ -38,7 +38,7 @@ sprite_hud_icon_state = "medihound" /datum/robot_sprite/fluff/argonne/surgical - module_type = "Surgeon" + module_type = "Crisis" sprite_icon_state = "argonne-russ-surg" sprite_hud_icon_state = "medihound" diff --git a/code/modules/mob/living/silicon/robot/sprites/janitor.dm b/code/modules/mob/living/silicon/robot/sprites/janitor.dm index 4283153dc3c..524c450c4fb 100644 --- a/code/modules/mob/living/silicon/robot/sprites/janitor.dm +++ b/code/modules/mob/living/silicon/robot/sprites/janitor.dm @@ -96,8 +96,13 @@ /datum/robot_sprite/janitor/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-janitor" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE + /datum/robot_sprite/janitor/uptall name = "Feminine Humanoid" @@ -199,13 +204,48 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/janitor/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream - -/datum/robot_sprite/dogborg/tall/janitor/dullahanv3/janitordully - name = "Dullahan janitor v3" - sprite_icon_state = "dullahanjanitor" +/datum/robot_sprite/dogborg/tall/janitor/dullahan + name = "Dullahan v1" + sprite_icon_state = "dullahanjani" + module_type = "Janitor" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_jani.dmi' + has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt + name = "Dullahan v2" + sprite_icon_state = "dullahanjani_alt" + +/datum/robot_sprite/dogborg/tall/janitor/dullahan/janitoralt2 + name = "Dullahan v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/janitor.dmi' + sprite_icon_state = "dullahanjanitor" + sprite_decals = list("decals") + +/datum/robot_sprite/dogborg/janitor/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixjani" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/smolraptorjanitorsprite + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_jani.dmi' + module_type = "Janitor" + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/janitor/possum + name = "0-P0SSm" + sprite_icon = 'icons/mob/robot/possumborg.dmi' + sprite_icon_state = "possjani" + //has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm index 2d5ec9f1f3b..09f30b40613 100644 --- a/code/modules/mob/living/silicon/robot/sprites/medical.dm +++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm @@ -73,10 +73,14 @@ sprite_icon_state = "noble" has_custom_open_sprites = TRUE -/datum/robot_sprite/medical/worm - name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE +/datum/robot_sprite/surgical/worm + name = "W02M - Surgical" + sprite_icon_state = "worm-surgeon" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE // Wide/dogborg sprites /* @@ -137,76 +141,77 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/medical/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream - -/datum/robot_sprite/dogborg/tall/medical/dullahanv3/medicaldully - name = "Dullahan medical v3" - sprite_icon_state = "dullahanmedical" +/datum/robot_sprite/dogborg/tall/crisis/dullahan + name = "Dullahan" + sprite_icon_state = "dullahanmed" + module_type = "Crisis" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_med.dmi' + has_eye_light_sprites = TRUE has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/crisis/dullahan/crisisalt + name = "Dullahan v2" + sprite_icon_state = "dullahanmed_alt" + +/datum/robot_sprite/dogborg/tall/medical/dullahan/crisisalt2 + name = "Dullahan medical v3" + sprite_decals = list("decals") + sprite_icon = 'icons/mob/robot/dullahan/v3/medical.dmi' + sprite_icon_state = "dullahanmedical" // Surgeon // Regular sprites /datum/robot_sprite/surgical - module_type = "Surgeon" + module_type = "Crisis" sprite_icon = 'icons/mob/robot/surgical.dmi' /datum/robot_sprite/surgical/toiletbot - name = "Telemachus" + name = "Telemachus - Surgical" sprite_icon_state = "toiletbot" /datum/robot_sprite/surgical/sleek - name = "WTOperator" + name = "WTOperator - Surgical" sprite_icon_state = "sleek" /datum/robot_sprite/surgical/drone - name = "AG Model" + name = "AG Model - Surgical" sprite_icon_state = "drone" has_custom_open_sprites = TRUE /datum/robot_sprite/surgical/glitterfly - name = "Pyralis" + name = "Pyralis - Surgical" sprite_icon_state = "glitterfly" has_custom_open_sprites = TRUE /datum/robot_sprite/surgical/decapod - name = "Decapod" + name = "Decapod - Surgical" sprite_icon_state = "decapod" has_custom_open_sprites = TRUE /datum/robot_sprite/surgical/pneuma - name = "Pneuma" + name = "Pneum - Surgical" sprite_icon_state = "pneuma" has_custom_open_sprites = TRUE /datum/robot_sprite/surgical/zoomba - name = "ZOOM-BA" + name = "ZOOM-BA - Surgical" sprite_icon_state = "zoomba" has_dead_sprite = TRUE /datum/robot_sprite/surgical/uptall - name = "Feminine Humanoid" + name = "Feminine Humanoid - Surgical" sprite_icon_state = "uptall" // Wide/dogborg sprites /datum/robot_sprite/dogborg/surgical - module_type = "Surgeon" + module_type = "Crisis" sprite_icon = 'icons/mob/robot/surgical_wide.dmi' -/* //Handled by the normal belly code now. -/datum/robot_sprite/dogborg/surgical/get_belly_overlay(var/mob/living/silicon/robot/ourborg) - if(has_sleeper_light_indicator) - if(ourborg.sleeper_state == 2 && !(ourborg.vore_selected?.silicon_belly_overlay_preference == "Vorebelly")) return "[sprite_icon_state]-sleeper_g" - else return "[sprite_icon_state]-sleeper_r" - else - return ..() -*/ /datum/robot_sprite/dogborg/surgical/do_equipment_glamour(var/obj/item/robot_module/module) if(!has_custom_equipment_sprites) return @@ -229,7 +234,7 @@ has_sleeper_light_indicator = TRUE /datum/robot_sprite/dogborg/surgical/borgi - name = "Borgi" + name = "Borgi - Surgical" sprite_icon_state = "borgi" sprite_hud_icon_state = "medihound" has_eye_sprites = FALSE @@ -237,13 +242,13 @@ has_dead_sprite_overlay = FALSE /datum/robot_sprite/dogborg/surgical/drake - name = "Drake" + name = "Drake - Surgical" sprite_icon_state = "drake" // Tall sprites /datum/robot_sprite/dogborg/tall/surgical - module_type = "Surgeon" + module_type = "Crisis" sprite_icon = 'icons/mob/robot/surgical_large.dmi' /datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/robot_module/module) @@ -261,7 +266,7 @@ SP.attack_verb = list("batted", "pawed", "bopped", "whapped") /datum/robot_sprite/dogborg/tall/surgical/raptor - name = "Raptor V-4" + name = "Raptor V-4 - Surgical" sprite_icon_state = "raptor" has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") @@ -276,11 +281,11 @@ sprite_icon = 'icons/mob/robot/crisis.dmi' /datum/robot_sprite/crisis/toiletbot - name = "Telemachus" + name = "Telemachus - Crisis" sprite_icon_state = "toiletbot" /datum/robot_sprite/crisis/sleek - name = "WTOperator" + name = "WTOperator - Crisis" sprite_icon_state = "sleek" /datum/robot_sprite/crisis/drone @@ -294,27 +299,27 @@ has_custom_open_sprites = TRUE /datum/robot_sprite/crisis/glitterfly - name = "Pyralis" + name = "Pyralis - Crisis" sprite_icon_state = "glitterfly" has_custom_open_sprites = TRUE /datum/robot_sprite/crisis/decapod - name = "Decapod" + name = "Decapod - Crisis" sprite_icon_state = "decapod" has_custom_open_sprites = TRUE /datum/robot_sprite/crisis/pneuma - name = "Pneuma" + name = "Pneuma - Crisis" sprite_icon_state = "pneuma" has_custom_open_sprites = TRUE /datum/robot_sprite/crisis/zoomba - name = "ZOOM-BA" + name = "ZOOM-BA - Crisis" sprite_icon_state = "zoomba" has_dead_sprite = TRUE /datum/robot_sprite/crisis/uptall - name = "Feminine Humanoid" + name = "Feminine Humanoid - Crisis" sprite_icon_state = "uptall" // Wide/dogborg sprites @@ -367,7 +372,7 @@ has_sleeper_light_indicator = TRUE /datum/robot_sprite/dogborg/crisis/borgi - name = "Borgi" + name = "Borgi - Crisis" sprite_icon_state = "borgi" sprite_hud_icon_state = "medihound" has_eye_sprites = FALSE @@ -375,7 +380,7 @@ has_dead_sprite_overlay = FALSE /datum/robot_sprite/dogborg/crisis/drake - name = "Drake" + name = "Drake - Crisis" sprite_icon_state = "drake" // Tall sprites @@ -399,7 +404,49 @@ SP.attack_verb = list("batted", "pawed", "bopped", "whapped") /datum/robot_sprite/dogborg/tall/crisis/raptor - name = "Raptor V-4" + name = "Raptor V-4 - Crisis" sprite_icon_state = "raptor" has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/crisis/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixmed" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_sleeper_light_indicator = TRUE + has_dead_sprite_overlay = FALSE + +//Medical into Crisis type merge +/datum/robot_sprite/surgical + module_type = "Crisis" + +/datum/robot_sprite/dogborg/surgical + module_type = "Crisis" + +//Added sprites +/datum/robot_sprite/dogborg/crisis/vale2 + name = "Mediborg Model V-3" + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + sprite_icon_state = "vale2" + sprite_hud_icon_state = "medihound" + has_eye_light_sprites = TRUE + has_sleeper_light_indicator = TRUE + +/datum/robot_sprite/dogborg/crisis/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixmed" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_sleeper_light_indicator = TRUE + +/datum/robot_sprite/dogborg/crisis/smolraptor + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_med.dmi' + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/mining.dm b/code/modules/mob/living/silicon/robot/sprites/mining.dm index 2eeae517c45..11080709504 100644 --- a/code/modules/mob/living/silicon/robot/sprites/mining.dm +++ b/code/modules/mob/living/silicon/robot/sprites/mining.dm @@ -95,8 +95,12 @@ /datum/robot_sprite/mining/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-miner" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/mining/uptall name = "Feminine Humanoid" @@ -184,13 +188,108 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/mining/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream - -/datum/robot_sprite/dogborg/tall/mining/dullahanv3/miningdully - name = "Dullahan mining v3" - sprite_icon_state = "dullahanmining" +/datum/robot_sprite/dogborg/tall/mining/dullahan + name = "Dullahan Mining unit" + sprite_icon_state = "dullahanmine" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_mine.dmi' has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE + has_custom_open_sprites = FALSE + has_eye_light_sprites = TRUE rest_sprite_options = list("Default", "sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/mining/dullahan/mineralt + name = "Dullahan Mining unit v2" + sprite_icon_state = "dullahanmine_alt" + +/datum/robot_sprite/dogborg/tall/mining/dullahan/miningdully + name = "Dullahan mining v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/mining.dmi' + sprite_icon_state = "dullahanmining" + sprite_decals = list("decals") + +/datum/robot_sprite/dogborg/tall/mining/dullahancarg + name = "Dullahan Cargo" + sprite_icon_state = "dullahancargo" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_cargo.dmi' + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/mining/dullahancarg/cargoalt + name = "Dullahan Cargo v2" + sprite_icon_state = "dullahancargo_alt" + +/datum/robot_sprite/dogborg/mining/cat + name = "Cat - Mining" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixmine" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/mining/catcargo + name = "Cat - Cargo" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixcargo" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/tall/mining/tall + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/mining/tall/mekacargo + name = "MEKA - Cargo" + sprite_icon_state = "mekacargo" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = FALSE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/mining/tall/mmekacargo + name = "NIKO - Cargo" + sprite_icon_state = "mmekacargo" + has_eye_light_sprites = TRUE + has_sleeper_light_indicator = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/mining/tall/fmekacargo + name = "NIKA - Cargo" + sprite_icon_state = "fmekacargo" + has_eye_light_sprites = TRUE + has_sleeper_light_indicator = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/mining/tall/k4tcargo + name = "K4T - Cargo" + sprite_icon_state = "k4tcargo" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = FALSE + rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/tall/mining/tall/k4t_alt1cargo + name = "K4Talt - Cargo" + sprite_icon_state = "k4tcargo_alt1" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = FALSE + rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/mining/smolraptorminer + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_min.dmi' + name = "Small Raptor Miner" + sprite_icon_state = "smolraptor" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + has_dead_sprite_overlay = FALSE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/mining/smolraptorcargo + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_car.dmi' + name = "Small Raptor Cargo" + sprite_icon_state = "smolraptor" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + has_dead_sprite_overlay = FALSE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm index 93b3bc2b61c..ba477539b83 100644 --- a/code/modules/mob/living/silicon/robot/sprites/science.dm +++ b/code/modules/mob/living/silicon/robot/sprites/science.dm @@ -83,10 +83,15 @@ name = "XI-GUS" sprite_icon_state = "spider" + /datum/robot_sprite/science/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-science" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/science/uptall name = "Feminine Humanoid" @@ -206,13 +211,42 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/science/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream -/datum/robot_sprite/dogborg/tall/science/dullahanv3/sciencedully - name = "Dullahan science v3" - sprite_icon_state = "dullahanscience" +/datum/robot_sprite/dogborg/tall/science/dullahan + name = "Dullahan" + sprite_icon_state = "dullahansci" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_sci.dmi' has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE + has_eye_light_sprites = TRUE + sprite_hud_icon_state = "sci-borg" + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/science/dullahan/scialt + name = "Dullahan v2" + sprite_icon_state = "dullahansci_alt" + +/datum/robot_sprite/dogborg/tall/science/dullahan/scialt2 + name = "Dullahan v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/science.dmi' + sprite_icon_state = "dullahanscience" rest_sprite_options = list("Default", "sit") + sprite_decals = list("decals") + +/datum/robot_sprite/dogborg/science/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixsci" + sprite_hud_icon_state = "sci-borg" + has_vore_belly_resting_sprites = TRUE + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + + +/datum/robot_sprite/dogborg/science/smolraptor + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_sci.dmi' + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/security.dm b/code/modules/mob/living/silicon/robot/sprites/security.dm index 67c215ab019..71e7b7c539c 100644 --- a/code/modules/mob/living/silicon/robot/sprites/security.dm +++ b/code/modules/mob/living/silicon/robot/sprites/security.dm @@ -108,8 +108,12 @@ /datum/robot_sprite/security/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-security" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/security/uptall name = "Feminine Humanoid" @@ -212,13 +216,47 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") -/datum/robot_sprite/dogborg/tall/security/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream +/datum/robot_sprite/dogborg/tall/security/dullahan + name = "Dullahan" + sprite_icon_state = "dullahansec" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_sec.dmi' + pixel_x = 0 + sprite_hud_icon_state = "k9" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "sit") -/datum/robot_sprite/dogborg/tall/security/dullahanv3/securitydully +/datum/robot_sprite/dogborg/tall/security/dullahan/secalt + name = "Dullahan v2" + sprite_icon_state = "dullahansec_alt" + +/datum/robot_sprite/dogborg/tall/security/dullahan/securitydully name = "Dullahan security v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/security.dmi' sprite_icon_state = "dullahansecurity" has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE - rest_sprite_options = list("Default", "sit") + sprite_decals = list("decals") + +/datum/robot_sprite/dogborg/security/vale2 + name = "Secborg model V-3" + sprite_icon = 'icons/mob/robot/widerobot/widerobot.dmi' + sprite_icon_state = "secvale" + sprite_hud_icon_state = "k9" + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/security/cat + name = "Cat" + sprite_icon = 'icons/mob/robot/catborg_variant.dmi' + sprite_icon_state = "vixsec" + sprite_hud_icon_state = "k9" + has_eye_light_sprites = TRUE + has_dead_sprite_overlay = FALSE + +/datum/robot_sprite/dogborg/security/smolraptor + sprite_icon = 'icons/mob/robot/smallraptors/smolraptor_pk.dmi' + name = "Small Raptor" + sprite_icon_state = "smolraptor" + has_dead_sprite_overlay = FALSE + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") diff --git a/code/modules/mob/living/silicon/robot/sprites/standard.dm b/code/modules/mob/living/silicon/robot/sprites/standard.dm index e32490f3e39..01a8f6efd25 100644 --- a/code/modules/mob/living/silicon/robot/sprites/standard.dm +++ b/code/modules/mob/living/silicon/robot/sprites/standard.dm @@ -100,8 +100,12 @@ /datum/robot_sprite/standard/worm name = "W02M" - sprite_icon_state = "worm" - has_custom_open_sprites = TRUE + sprite_icon_state = "worm-standard" + sprite_icon = 'icons/mob/robot/wormborg.dmi' + has_dead_sprite_overlay = FALSE + has_custom_open_sprites = FALSE + has_vore_belly_sprites = TRUE + has_dead_sprite = TRUE /datum/robot_sprite/standard/uptall name = "Feminine Humanoid" @@ -132,13 +136,72 @@ module_type = "Standard" //sprite_icon = 'icons/mob/robot/standard_large.dmi' NOT USED YET -/datum/robot_sprite/dogborg/tall/standard/dullahanv3 - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' - //named v3 to avoid conflicts with downstream - /datum/robot_sprite/dogborg/tall/standard/dullahanv3/standarddully name = "Dullahan standard v3" + sprite_icon = 'icons/mob/robot/dullahan/v3/standard.dmi' sprite_icon_state = "dullahanstandard" has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE + sprite_decals = list("decals") rest_sprite_options = list("Default", "sit") + + +/* //This used to be Widerobot_Standard_ch.dm. It was unticked, so it shall be put here instead. +//Modular Standard borg hound edition +//This restructures how borg additions are done to make them sane/modular/maintainable +//Also makes it easier to make new borgs + +//INCOMPLETE and not ready, no sprites other than tall and basically useless, also lacking a belly + +//Add ourselves to the borg list +/hook/startup/proc/Modular_Borg_init_standardhound() + //robot_modules["Honk-Hound"] = /obj/item/robot_module/robot/clerical/honkborg - done in station_vr modular chomp for ordering reasons + robot_module_types += "Standard-Hound" //Add ourselves to global + return 1 + +/obj/item/robot_module/robot/standard/hound + name = "Standard-Hound" + sprites = list( + "MEKA" = list(SKIN_ICON_STATE = "mekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64), + "NIKO" = list(SKIN_ICON_STATE = "mmekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64), + "NIKA" = list(SKIN_ICON_STATE = "fmekastandard", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64), + "K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = 'icons/mob/robot/tallrobot/tallrobots.dmi', SKIN_OFFSET = 0, SKIN_HEIGHT = 64) + ) + + can_be_pushed = 0 + +/obj/item/robot_module/robot/standard/hound/New(var/mob/living/silicon/robot/R) + ..() + src.modules += new /obj/item/melee/baton/loaded(src) + src.modules += new /obj/item/tool/wrench/cyborg(src) + src.modules += new /obj/item/healthanalyzer(src) + src.emag += new /obj/item/melee/energy/sword(src) + + var/datum/matter_synth/water = new /datum/matter_synth(500) + water.name = "Water reserves" + water.recharge_rate = 10 + water.max_energy = 1000 + R.water_res = water + synths += water + + var/obj/item/dogborg/tongue/T = new /obj/item/dogborg/tongue(src) + T.water = water + src.modules += T + + R.icon = 'modular_chomp/icons/mob/widerobot_ch.dmi' + R.wideborg_dept = 'modular_chomp/icons/mob/widerobot_ch.dmi' + R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE + R.pixel_x = -16 + R.old_x = -16 + R.default_pixel_x = -16 + R.dogborg = TRUE + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + R.wideborg = TRUE + add_verb(R,/mob/living/silicon/robot/proc/ex_reserve_refill) + add_verb(R,/mob/living/silicon/robot/proc/robot_mount) + add_verb(R,/mob/living/proc/toggle_rider_reins) + add_verb(R,/mob/living/proc/shred_limb) + add_verb(R,/mob/living/silicon/robot/proc/rest_style) + ..() +*/ diff --git a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm index 685d934225d..b3c3072db87 100644 --- a/code/modules/mob/living/silicon/robot/sprites/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/sprites/syndicate.dm @@ -69,14 +69,23 @@ has_vore_belly_sprites = FALSE rest_sprite_options = list("Default", "Bellyup") +/datum/robot_sprite/dogborg/tall/combat_medic/dullahancombatmedic + name = "Dullahan Combat Medic" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_syndie.dmi' + sprite_icon_state = "dullahansyndi" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + pixel_x = 0 + /datum/robot_sprite/dogborg/tall/syndie/dullahanv3syndi - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' + sprite_icon = 'icons/mob/robot/dullahan/v3/syndi.dmi' sprite_icon_state = "dullahansyndi" name = "Dullahan syndie v3" has_eye_light_sprites = TRUE has_custom_open_sprites = TRUE has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE + sprite_decals = list("decals") rest_sprite_options = list("Default", "sit") // Protector @@ -168,13 +177,13 @@ sprite_hud_icon_state = "malf" /datum/robot_sprite/dogborg/tall/mechanist/dullahanv3mech - sprite_icon = 'icons/mob/tallborg/dullahans64x64.dmi' + sprite_icon = 'icons/mob/robot/dullahan/v3/mechanist.dmi' sprite_icon_state = "dullahanmechanist" name = "Dullahan mechanist v3" has_eye_light_sprites = TRUE has_custom_open_sprites = TRUE has_vore_belly_sprites = TRUE - has_robotdecal_sprites = TRUE + sprite_decals = list("decals") rest_sprite_options = list("Default", "sit") /datum/robot_sprite/dogborg/tall/mechanist/syndimechraptor diff --git a/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm b/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm new file mode 100644 index 00000000000..fdeabd911a3 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/subtypes/boozeborg.dm @@ -0,0 +1,180 @@ +//Attempted unify style implementation of boozeborgs. To lower peoples needed code diving to both understand this module and make new ones. +//Dropping my usual _unify for _ch this time. Commenting it here for github search. + +// code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm //tag so it shows up in gitsearch + +/* +What Borgs are available is sadly handled in the above file in the proc + +/hook/startup/proc/robot_modules_vr() + robot_modules["Medihound"] = /obj/item/robot_module/robot/medihound + robot_modules["K9"] = /obj/item/robot_module/robot/knine + robot_modules["ERT"] = /obj/item/robot_module/robot/ert + robot_modules["Janihound"] = /obj/item/robot_module/robot/scrubpup + robot_modules["Sci-borg"] = /obj/item/robot_module/robot/science + robot_modules["Pupdozer"] = /obj/item/robot_module/robot/engiedog + return 1 +*/ + +/obj/item/robot_module/robot/booze + name = "BoozeHound robot module" + channels = list("Service" = 1) + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_SIIK = 1, + LANGUAGE_AKHANI = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_SKRELLIANFAR = 0, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_GUTTER = 0, + LANGUAGE_SCHECHI = 1, + LANGUAGE_EAL = 1, + LANGUAGE_TERMINUS = 1, + LANGUAGE_SIGN = 0 + ) + +/obj/item/robot_module/robot/booze + sprites = list( + "Beer Buddy" = "boozeborg", + "Brilliant Blue" = "boozeborg(blue)", + "Caffine Dispenser" = "boozeborg(coffee)", + "Gamer Juice Maker" = "boozeborg(green)", + "Liqour Licker" = "boozeborg(orange)", + "The Grapist" = "boozeborg(purple)", + "Vampire's Aid" = "boozeborg(red)", + "Vodka Komrade" = "boozeborg(vodka)" + ) +/obj/item/robot_module/robot/booze/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/gripper/service(src) + //src.modules += new /obj/item/reagent_containers/glass/bucket(src) + //src.modules += new /obj/item/material/minihoe(src) + //src.modules += new /obj/item/analyzer/plant_analyzer(src) + //src.modules += new /obj/item/storage/bag/plants(src) + //src.modules += new /obj/item/robot_harvester(src) + src.modules += new /obj/item/material/knife(src) + src.modules += new /obj/item/material/kitchen/rollingpin(src) + src.modules += new /obj/item/multitool(src) //to freeze trays + src.modules += new /obj/item/dogborg/jaws/small(src) + src.modules += new /obj/item/dogborg/boop_module(src) + src.modules += new /obj/item/dogborg/sleeper/compactor/brewer(src) + src.modules += new /obj/item/reagent_containers/glass/beaker(src)//For holding the ALCOHOL + src.emag = new /obj/item/dogborg/pounce(src) + add_verb(R,/mob/living/silicon/robot/proc/reskin_booze) + + var/obj/item/rsf/M = new /obj/item/rsf(src) + M.stored_matter = 30 + src.modules += M + + src.modules += new /obj/item/reagent_containers/dropper/industrial(src) + + /* Remembered this causes the dogs to catch on fire lol. + var/obj/item/flame/lighter/zippo/L = new /obj/item/flame/lighter/zippo(src) + L.lit = 1 + src.modules += L + */ + + var/datum/matter_synth/water = new /datum/matter_synth() + water.name = "Water reserves" + water.recharge_rate = 0.1 // Recharging water for plants - hehe drooly borg + water.max_energy = 1000 + water.energy = 0 + R.water_res = water + synths += water + + var/obj/item/dogborg/tongue/T = new /obj/item/dogborg/tongue(src) + T.water = water + src.modules += T + + + src.modules += new /obj/item/tray/robotray(src) + src.modules += new /obj/item/reagent_containers/borghypo/service/booze(src) + src.emag = new /obj/item/reagent_containers/food/drinks/bottle/small/beer(src) + + var/datum/reagents/N = new/datum/reagents(50) + src.emag.reagents = N + N.my_atom = src.emag + N.add_reagent("beer2", 50) + src.emag.name = "Mickey Finn's Special Brew" + + R.can_buckle = 1 + R.icon = 'icons/mob/widerobot_colors_ch.dmi' + R.wideborg_dept = 'icons/mob/widerobot_colors_ch.dmi' + R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE + R.pixel_x = -16 + R.old_x = -16 + R.default_pixel_x = -16 + R.dogborg = TRUE + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + R.wideborg = TRUE + add_verb(R,/mob/living/silicon/robot/proc/ex_reserve_refill) //TGPanel + ..() + +/obj/item/robot_module/robot/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + var/obj/item/reagent_containers/food/condiment/enzyme/E = locate() in src.modules + E.reagents.add_reagent("enzyme", 2 * amount) + if(src.emag) + var/obj/item/reagent_containers/food/drinks/bottle/small/beer/B = src.emag + B.reagents.add_reagent("beer2", 2 * amount) + +//BORGHYPO +/obj/item/reagent_containers/borghypo/service/booze + name = "cyborg drink synthesizer" + desc = "A portable drink dispencer." + icon = 'icons/obj/drinks.dmi' + icon_state = "shaker" + charge_cost = 20 + recharge_time = 3 + volume = 120 + possible_transfer_amounts = list(1 ,5, 10, 20, 30) + +//Resking proc for boozos + +/mob/living/silicon/robot/proc/reskin_booze() + set name = "Change Drink Color" + set category = "Abilities.Silicon" //TGPanel + set desc = "Choose the color of drink displayed inside you." + + var/mob/M = usr + var/list/options = list() + options["Beer"] = "Beer Buddy" + options["Curacao"] = "Brilliant Blue" + options["Coffee"] = "Caffine Dispenser" + options["Space Mountain Wind"] = "Gamer Juice Maker" + options["Whiskey Soda"] = "Liqour Licker" + options["Grape Soda"] = "The Grapist" + options["Demon's Blood"] = "Vampire's Aid" + options["Slav Vodka"] = "Vodka Komrade" + var/choice = input(M,"Choose your drink!") in options + if(src && choice && !M.stat && in_range(M,src)) + icontype = options[choice] + var/active_sound = 'sound/effects/bubbles.ogg' + playsound(src.loc, "[active_sound]", 100, 0, 4) + M << "Your Tank now displays [choice]. Drink up and enjoy!" + updateicon() + return 1 + +//SLEEPER "Brewer" +/obj/item/dogborg/sleeper/compactor/brewer //Boozehound gut. + name = "Brew Belly" + desc = "A mounted drunk tank unit with fuel processor." + icon_state = "brewer" + injection_chems = list(REAGENT_ID_VODKA,REAGENT_ID_BEER,REAGENT_ID_GIN) //Injected alcohol is 3 times as strong + max_item_count = 1 + +/obj/item/dogborg/sleeper/compactor/brewer/inject_chem(mob/user, chem) + if(patient && patient.reagents) + if(chem in injection_chems + REAGENT_ID_INAPROVALINE) + if(hound.cell.charge < 200) //This is so borgs don't kill themselves with it. + to_chat(hound, span_notice("You don't have enough power to synthesize fluids.")) + return + else if(patient.reagents.get_reagent_amount(chem) + 10 >= 50) //Preventing people from accidentally killing themselves by trying to inject too many chemicals! + to_chat(hound, span_notice("Your stomach is currently too full of fluids to secrete more fluids of this kind.")) + else if(patient.reagents.get_reagent_amount(chem) + 10 <= 50) //No overdoses for you + patient.reagents.add_reagent(chem, inject_amount) + drain(100) //-100 charge per injection + var/units = round(patient.reagents.get_reagent_amount(chem)) + to_chat(hound, span_notice("Injecting [units] unit\s into occupant.")) //If they were immersed, the reagents wouldn't leave with them. diff --git a/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-modules.dm b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-modules.dm new file mode 100644 index 00000000000..0cae32e2747 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-modules.dm @@ -0,0 +1,44 @@ +/* //Uncomment the exploration modules in code\global.dm +/hook/startup/proc/Modular_Borg_init_Exploration() + robot_modules["Exploration"] = /obj/item/robot_module/robot/exploration //add to array + robot_module_types += "Exploration" //Add to global list + return 1 +*/ +//Explo doggos +/obj/item/robot_module/robot/exploration + name = "exploration robot module" + channels = list("Explorer" = 1) + languages = list( + LANGUAGE_SOL_COMMON = 1, + LANGUAGE_UNATHI = 1, + LANGUAGE_SIIK = 1, + LANGUAGE_AKHANI = 1, + LANGUAGE_SKRELLIAN = 1, + LANGUAGE_SKRELLIANFAR = 0, + LANGUAGE_ROOTLOCAL = 0, + LANGUAGE_TRADEBAND = 1, + LANGUAGE_GUTTER = 0, + LANGUAGE_SCHECHI = 1, + LANGUAGE_EAL = 1, + LANGUAGE_TERMINUS = 1, + LANGUAGE_SIGN = 0 + ) + +/obj/item/robot_module/robot/exploration + can_be_pushed = 0 + +/obj/item/robot_module/robot/exploration/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/dogborg/sleeper/exploration(src) + src.modules += new /obj/item/cataloguer(src) + src.modules += new /obj/item/gun/energy/robotic/flare(src) + src.modules += new /obj/item/dogborg/pounce(src) + src.modules += new /obj/item/melee/robotic/blade/explotailspear(src) + src.modules += new /obj/item/gun/energy/robotic/smallmedigun(src) + src.modules += new /obj/item/shield_projector/line/exploborg(src) + src.modules += new /obj/item/roller_holder(src) + src.modules += new /obj/item/self_repair_system(src) + src.modules += new /obj/item/card/id/exploration/borg(src) + + src.emag += new /obj/item/melee/robotic/jaws/big/explojaws(src) + + ..() diff --git a/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm new file mode 100644 index 00000000000..4369a385484 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/subtypes/exploration/exploration-sprites.dm @@ -0,0 +1,58 @@ +/datum/robot_sprite/dogborg/explorer + module_type = "Exploration" + sprite_icon = 'icons/mob/robot/widerobot/widerobot_exp.dmi' + sprite_hud_icon_state = "platform" + +/datum/robot_sprite/dogborg/explorer/vale2 + name = "Explorationhound V2" + sprite_icon_state = "exploration-v2" + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/explorer/vale + name = "Explorationhound V2 - Pink" + sprite_icon_state = "exploration" + has_eye_light_sprites = TRUE + +/datum/robot_sprite/dogborg/tall/explorer/dullahan + module_type = "Exploration" + sprite_icon = 'icons/mob/robot/dullahan/v1/dullahan_explorer.dmi' + pixel_x = 0 + +/datum/robot_sprite/dogborg/tall/explorer/dullahan/explorer + name = "Dullahan" + sprite_icon_state = "dullahanexplo" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/datum/robot_sprite/dogborg/tall/explorer/dullahan/exploreralt + name = "Dullahan v2" + sprite_icon_state = "dullahanexplo_alt" + has_eye_light_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") + +/* placeholder +/datum/robot_sprite/dogborg/tall/explorer + module_type = "Exploration" + sprite_icon = 'icons/mob/robot/tallrobot/tallrobots.dmi' + pixel_x = 0 + +/datum/robot_sprite/dogborg/raptor/explorer + module_type = "Exploration" + sprite_icon = 'icons/mob/robot/raptor.dmi' + +/datum/robot_sprite/dogborg/raptor/explorer/raptor + name = "Raptor" + sprite_icon_state = "chraptor" + has_custom_equipment_sprites = TRUE + rest_sprite_options = list("Default", "Bellyup") + +/datum/robot_sprite/dogborg/tall/explorer/meka + name = "MEKA" + sprite_icon_state = "mmekaunity" + has_eye_light_sprites = TRUE + has_custom_open_sprites = TRUE + has_vore_belly_sprites = TRUE + rest_sprite_options = list("Default", "Sit") +*/ diff --git a/code/modules/projectiles/guns/launcher/confetti.dm b/code/modules/projectiles/guns/launcher/confetti.dm index 236c627c348..55cffa4c3e0 100644 --- a/code/modules/projectiles/guns/launcher/confetti.dm +++ b/code/modules/projectiles/guns/launcher/confetti.dm @@ -70,6 +70,10 @@ name = "Party Cannon" desc = "Confetti, pies, banana peels, chaos!" +/obj/item/gun/launcher/confetti_cannon/robot + name = "Party Cannon" + desc = "Confetti, pies, banana peels, chaos!" + /obj/item/gun/launcher/confetti_cannon/robot/pump(mob/user) playsound(user, 'sound/weapons/shotgunpump.ogg', 60, 1) if(!chambered) diff --git a/code/unit_tests/robot_tests.dm b/code/unit_tests/robot_tests.dm new file mode 100644 index 00000000000..547aada5a05 --- /dev/null +++ b/code/unit_tests/robot_tests.dm @@ -0,0 +1,189 @@ +/datum/unit_test/all_robot_sprites_must_be_valid + name = "ROBOTS: Robot sprites must be valid" + var/signal_failed = FALSE + +/datum/unit_test/all_robot_sprites_must_be_valid/start_test() + var/failed = 0 + + for(var/sprite in subtypesof(/datum/robot_sprite)) + var/datum/robot_sprite/RS = new sprite() + if(!RS.name) // Parent type, ignore me + continue + + var/list/checks = list( + "[ROBOT_HAS_SPEED_SPRITE]" = "-roll", + "[ROBOT_HAS_SHIELD_SPRITE]" = "-shield", + "[ROBOT_HAS_SHIELD_SPEED_SPRITE]" = "-speed_shield", + "[ROBOT_HAS_MELEE_SPRITE]" = "-melee", + "[ROBOT_HAS_DAGGER_SPRITE]" = "-dagger", + "[ROBOT_HAS_BLADE_SPRITE]" = "-blade", + "[ROBOT_HAS_GUN_SPRITE]" = "-gun", + "[ROBOT_HAS_LASER_SPRITE]" = "-laser", + "[ROBOT_HAS_TASER_SPRITE]" = "-taser", + "[ROBOT_HAS_DISABLER_SPRITE]" = "-disabler" + ) + for(var/C in checks) + if(RS.sprite_flag_check(text2num(C))) + if(check_state(RS,checks[C])) + failed = TRUE + // eyes, lights, markings + if(RS.has_eye_sprites) + if(check_state(RS,"-eyes")) + failed = TRUE + if(RS.has_eye_light_sprites) + if(check_state(RS,"-lights")) + failed = TRUE + if(LAZYLEN(RS.sprite_decals)) + for(var/decal in RS.sprite_decals) + if(check_state(RS,"-[decal]")) + failed = TRUE + // Control panel + if(RS.has_custom_open_sprites) + if(check_state(RS,"-openpanel_nc")) + failed = TRUE + if(check_state(RS,"-openpanel_c")) + failed = TRUE + if(check_state(RS,"-openpanel_w")) + failed = TRUE + // Bellies + if(RS.has_vore_belly_sprites && !RS.belly_capacity_list) + if(RS.has_sleeper_light_indicator) + // belly r/g light + if(check_state(RS,"-sleeper-r")) + failed = TRUE + if(check_state(RS,"-sleeper-g")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-sleeper-r-[rest_style]")) + failed = TRUE + if(check_state(RS,"-sleeper-g-[rest_style]")) + failed = TRUE + // struggling + if(RS.has_vore_struggle_sprite) + if(check_state(RS,"-sleeper-r-struggle")) + failed = TRUE + if(check_state(RS,"-sleeper-g-struggle")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-sleeper-r-[rest_style]-struggle")) + failed = TRUE + if(check_state(RS,"-sleeper-g-[rest_style]-struggle")) + failed = TRUE + else + // belly + if(check_state(RS,"-sleeper")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-sleeper-[rest_style]")) + failed = TRUE + // struggling + if(RS.has_vore_struggle_sprite) + if(check_state(RS,"-sleeper-struggle")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-sleeper-[rest_style]-struggle")) + failed = TRUE + else if (RS.belly_capacity_list) + for(var/belly in RS.belly_capacity_list) + for(var/num = 1 to RS.belly_capacity_list[belly]) + // big belly + if(check_state(RS,"-[belly]-[num]")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-[belly]-[num]-[rest_style]")) + failed = TRUE + // struggling + if(RS.has_vore_struggle_sprite) + if(check_state(RS,"-[belly]-[num]-struggle")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-[belly]-[num]-[rest_style]-struggle")) + failed = TRUE + if(RS.belly_light_list) + for(var/belly in RS.belly_light_list) + for(var/num = 1 to RS.belly_light_list[belly]) + // multi belly r/g light + if(check_state(RS,"-[belly]-[num]-r")) + failed = TRUE + if(check_state(RS,"-[belly]-[num]-g")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-[belly]-[num]-r-[rest_style]")) + failed = TRUE + if(check_state(RS,"-[belly]-[num]-g-[rest_style]")) + failed = TRUE + // struggling + if(RS.has_vore_struggle_sprite) + if(check_state(RS,"-[belly]-[num]-r-struggle")) + failed = TRUE + if(check_state(RS,"-[belly]-[num]-g-struggle")) + failed = TRUE + if(RS.has_vore_belly_resting_sprites) + for(var/rest_style in RS.rest_sprite_options) + rest_style = lowertext(rest_style) + if(rest_style == "Default") + rest_style = "rest" + if(check_state(RS,"-[belly]-[num]-r-[rest_style]-struggle")) + failed = TRUE + if(check_state(RS,"-[belly]-[num]-g-[rest_style]-struggle")) + failed = TRUE + // reseting + if(RS.rest_sprite_options in list("Sit")) + if(check_state(RS,"-sit")) + failed = TRUE + if(RS.rest_sprite_options in list("Default")) + if(check_state(RS,"-rest")) + failed = TRUE + if(RS.rest_sprite_options in list("Bellyup")) + if(check_state(RS,"-bellyup")) + failed = TRUE + // death + if(RS.has_dead_sprite) + if(check_state(RS,"-wreck")) + failed = TRUE + if(RS.has_dead_sprite_overlay) // Only one per dmi + if(!("wreck-overlay" in cached_icon_states(RS.sprite_icon))) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", had wreck-overlay state enabled, but was missing icon_state wreck-overlay, in dmi \"[RS.sprite_icon]\".") + failed = TRUE + qdel(RS) + + if(failed) + fail("One or more /datum/robot_sprite items had invalid flags or icons") + else + pass("All /datum/robot_sprite are valid.") + return 1 + +/datum/unit_test/all_robot_sprites_must_be_valid/proc/check_state(var/datum/robot_sprite/RS,var/append) + var/check_state = "[RS.sprite_icon_state][append]" + if(!(check_state in cached_icon_states(RS.sprite_icon))) + log_unit_test("[RS.type]: Robots - Robot sprite \"[RS.name]\", had [append] state enabled, but was missing icon_state \"[check_state]\", in dmi \"[RS.sprite_icon]\".") + return TRUE + return FALSE diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi index d19ff1c7c8f..ac5c60f8384 100644 Binary files a/icons/mob/dogborg_vr.dmi and b/icons/mob/dogborg_vr.dmi differ diff --git a/icons/mob/robot/catborg_variant.dmi b/icons/mob/robot/catborg_variant.dmi new file mode 100644 index 00000000000..d0c80e0dbd2 Binary files /dev/null and b/icons/mob/robot/catborg_variant.dmi differ diff --git a/icons/mob/robot/catborgs/custom/catborg_cameron.dmi b/icons/mob/robot/catborgs/custom/catborg_cameron.dmi index 5968cba139f..f2c32e36805 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 51c8ff3af2a..71bb525de63 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 bea75ae554b..58b825edc45 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_engineering.dmi b/icons/mob/robot/catborgs/departmental/large/catborg_engineering.dmi index 7e9ee4e026a..a604f8df48c 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 c0a690e8f51..4c5997d3e36 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 1d2912b38a9..a6408839899 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 59ad190074e..4d2847362b2 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 5cd332169cf..7ae0ab3baf3 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 8b450e1e6e3..5bdfe729bc3 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 e8c702dcf07..20c3eb603c0 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 de0ee93e6f7..72a2fae93ae 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 9a5552e7f8f..2667bab2806 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 b5a0a1e562a..0f24ea8f462 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 70047dc55bd..134fe7d1f31 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 bbef461092a..5a91ef599f5 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/dullahan/v1/Dullahanprotean64x64.dmi b/icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi new file mode 100644 index 00000000000..b1c08d1c41e Binary files /dev/null and b/icons/mob/robot/dullahan/v1/Dullahanprotean64x64.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_cargo.dmi b/icons/mob/robot/dullahan/v1/dullahan_cargo.dmi new file mode 100644 index 00000000000..f048476151a Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_cargo.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_clown.dmi b/icons/mob/robot/dullahan/v1/dullahan_clown.dmi new file mode 100644 index 00000000000..f80dede30f0 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_clown.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_credit.txt b/icons/mob/robot/dullahan/v1/dullahan_credit.txt new file mode 100644 index 00000000000..b6d1d91811c --- /dev/null +++ b/icons/mob/robot/dullahan/v1/dullahan_credit.txt @@ -0,0 +1,12 @@ +edit: meka was not the creator of this, fixed. + +Credit: +these sprites were originally made by: +- https://github.com/Cecily-C-Catherine +- Toriate +and was partly canabalized from meka. +: for bubberstation + + +these sprites were edited by asher-49 and MAK for chompstation and roguestar. +- animations made by asher-49 diff --git a/icons/mob/robot/dullahan/v1/dullahan_eng.dmi b/icons/mob/robot/dullahan/v1/dullahan_eng.dmi new file mode 100644 index 00000000000..e12ec2437a6 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_eng.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_explorer.dmi b/icons/mob/robot/dullahan/v1/dullahan_explorer.dmi new file mode 100644 index 00000000000..29f74100e21 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_explorer.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_jani.dmi b/icons/mob/robot/dullahan/v1/dullahan_jani.dmi new file mode 100644 index 00000000000..3d9556beff2 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_jani.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_med.dmi b/icons/mob/robot/dullahan/v1/dullahan_med.dmi new file mode 100644 index 00000000000..6b660e7204f Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_med.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_mine.dmi b/icons/mob/robot/dullahan/v1/dullahan_mine.dmi new file mode 100644 index 00000000000..bcd99510dee Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_mine.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_sci.dmi b/icons/mob/robot/dullahan/v1/dullahan_sci.dmi new file mode 100644 index 00000000000..3d709db9481 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_sci.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_sec.dmi b/icons/mob/robot/dullahan/v1/dullahan_sec.dmi new file mode 100644 index 00000000000..8fff795ec1d Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_sec.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_serv.dmi b/icons/mob/robot/dullahan/v1/dullahan_serv.dmi new file mode 100644 index 00000000000..b8b11203888 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_serv.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahan_syndie.dmi b/icons/mob/robot/dullahan/v1/dullahan_syndie.dmi new file mode 100644 index 00000000000..08f7d70acc2 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahan_syndie.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahanicon.dmi b/icons/mob/robot/dullahan/v1/dullahanicon.dmi new file mode 100644 index 00000000000..86f5c2c8bae Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahanicon.dmi differ diff --git a/icons/mob/robot/dullahan/v1/dullahansigns.dmi b/icons/mob/robot/dullahan/v1/dullahansigns.dmi new file mode 100644 index 00000000000..a8497e57655 Binary files /dev/null and b/icons/mob/robot/dullahan/v1/dullahansigns.dmi differ diff --git a/icons/mob/robot/dullahan/v3/barista.dmi b/icons/mob/robot/dullahan/v3/barista.dmi new file mode 100644 index 00000000000..dc019d47723 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/barista.dmi differ diff --git a/icons/mob/robot/dullahan/v3/coffee.dmi b/icons/mob/robot/dullahan/v3/coffee.dmi new file mode 100644 index 00000000000..24c852989ce Binary files /dev/null and b/icons/mob/robot/dullahan/v3/coffee.dmi differ diff --git a/icons/mob/robot/dullahan/v3/command.dmi b/icons/mob/robot/dullahan/v3/command.dmi new file mode 100644 index 00000000000..a08515eb83a Binary files /dev/null and b/icons/mob/robot/dullahan/v3/command.dmi differ diff --git a/icons/mob/robot/dullahan/v3/engineer.dmi b/icons/mob/robot/dullahan/v3/engineer.dmi new file mode 100644 index 00000000000..dbcf2d7d239 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/engineer.dmi differ diff --git a/icons/mob/robot/dullahan/v3/janitor.dmi b/icons/mob/robot/dullahan/v3/janitor.dmi new file mode 100644 index 00000000000..46d971fff1b Binary files /dev/null and b/icons/mob/robot/dullahan/v3/janitor.dmi differ diff --git a/icons/mob/robot/dullahan/v3/mechanist.dmi b/icons/mob/robot/dullahan/v3/mechanist.dmi new file mode 100644 index 00000000000..3f385e0b64d Binary files /dev/null and b/icons/mob/robot/dullahan/v3/mechanist.dmi differ diff --git a/icons/mob/robot/dullahan/v3/medical.dmi b/icons/mob/robot/dullahan/v3/medical.dmi new file mode 100644 index 00000000000..c5b4f0eb1ab Binary files /dev/null and b/icons/mob/robot/dullahan/v3/medical.dmi differ diff --git a/icons/mob/robot/dullahan/v3/mining.dmi b/icons/mob/robot/dullahan/v3/mining.dmi new file mode 100644 index 00000000000..263c1474e92 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/mining.dmi differ diff --git a/icons/mob/tallborg/MEKANIKA skinline credit.txt b/icons/mob/robot/dullahan/v3/miscinnfo/MEKANIKA skinline credit.txt similarity index 100% rename from icons/mob/tallborg/MEKANIKA skinline credit.txt rename to icons/mob/robot/dullahan/v3/miscinnfo/MEKANIKA skinline credit.txt diff --git a/icons/mob/robot/dullahan/v3/miscinnfo/dullahan assets.dmi b/icons/mob/robot/dullahan/v3/miscinnfo/dullahan assets.dmi new file mode 100644 index 00000000000..81e05bf9a68 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/miscinnfo/dullahan assets.dmi differ diff --git a/icons/mob/tallborg/dullahan_credit.txt b/icons/mob/robot/dullahan/v3/miscinnfo/dullahan_credit.txt similarity index 100% rename from icons/mob/tallborg/dullahan_credit.txt rename to icons/mob/robot/dullahan/v3/miscinnfo/dullahan_credit.txt diff --git a/icons/mob/tallborg/dullahans64x64.txt b/icons/mob/robot/dullahan/v3/miscinnfo/dullahans64x64.txt similarity index 100% rename from icons/mob/tallborg/dullahans64x64.txt rename to icons/mob/robot/dullahan/v3/miscinnfo/dullahans64x64.txt diff --git a/icons/mob/tallborg/tallborg.dmi b/icons/mob/robot/dullahan/v3/miscinnfo/tallborg.dmi similarity index 100% rename from icons/mob/tallborg/tallborg.dmi rename to icons/mob/robot/dullahan/v3/miscinnfo/tallborg.dmi diff --git a/icons/mob/robot/dullahan/v3/ninja.dmi b/icons/mob/robot/dullahan/v3/ninja.dmi new file mode 100644 index 00000000000..4c92261da03 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/ninja.dmi differ diff --git a/icons/mob/robot/dullahan/v3/science.dmi b/icons/mob/robot/dullahan/v3/science.dmi new file mode 100644 index 00000000000..93a9726a89e Binary files /dev/null and b/icons/mob/robot/dullahan/v3/science.dmi differ diff --git a/icons/mob/robot/dullahan/v3/security.dmi b/icons/mob/robot/dullahan/v3/security.dmi new file mode 100644 index 00000000000..7cb6930f822 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/security.dmi differ diff --git a/icons/mob/robot/dullahan/v3/service.dmi b/icons/mob/robot/dullahan/v3/service.dmi new file mode 100644 index 00000000000..77c82472ddd Binary files /dev/null and b/icons/mob/robot/dullahan/v3/service.dmi differ diff --git a/icons/mob/robot/dullahan/v3/standard.dmi b/icons/mob/robot/dullahan/v3/standard.dmi new file mode 100644 index 00000000000..d50525b6087 Binary files /dev/null and b/icons/mob/robot/dullahan/v3/standard.dmi differ diff --git a/icons/mob/robot/dullahan/v3/syndi.dmi b/icons/mob/robot/dullahan/v3/syndi.dmi new file mode 100644 index 00000000000..1ac7357490c Binary files /dev/null and b/icons/mob/robot/dullahan/v3/syndi.dmi differ diff --git a/icons/mob/robot/fluff_wide.dmi b/icons/mob/robot/fluff_wide.dmi index fffe15fecaf..2657179a5c4 100644 Binary files a/icons/mob/robot/fluff_wide.dmi and b/icons/mob/robot/fluff_wide.dmi differ diff --git a/icons/mob/robot/lost_wide.dmi b/icons/mob/robot/lost_wide.dmi index 17a6f3b9b78..b79f0e9c00b 100644 Binary files a/icons/mob/robot/lost_wide.dmi and b/icons/mob/robot/lost_wide.dmi differ diff --git a/icons/mob/robot/possumborg.dmi b/icons/mob/robot/possumborg.dmi new file mode 100644 index 00000000000..ffca42ed80f Binary files /dev/null and b/icons/mob/robot/possumborg.dmi differ diff --git a/icons/mob/robot/raptor.dmi b/icons/mob/robot/raptor.dmi new file mode 100644 index 00000000000..21abab40813 Binary files /dev/null and b/icons/mob/robot/raptor.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_car.dmi b/icons/mob/robot/smallraptors/smolraptor_car.dmi new file mode 100644 index 00000000000..8f6c612e34c Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_car.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_cc.dmi b/icons/mob/robot/smallraptors/smolraptor_cc.dmi new file mode 100644 index 00000000000..ed4caa00810 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_cc.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_eng.dmi b/icons/mob/robot/smallraptors/smolraptor_eng.dmi new file mode 100644 index 00000000000..2693b380ed1 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_eng.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_gen.dmi b/icons/mob/robot/smallraptors/smolraptor_gen.dmi new file mode 100644 index 00000000000..b96d0789540 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_gen.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_jani.dmi b/icons/mob/robot/smallraptors/smolraptor_jani.dmi new file mode 100644 index 00000000000..35d9ea9b2e8 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_jani.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_med.dmi b/icons/mob/robot/smallraptors/smolraptor_med.dmi new file mode 100644 index 00000000000..d644d1182fe Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_med.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_min.dmi b/icons/mob/robot/smallraptors/smolraptor_min.dmi new file mode 100644 index 00000000000..c743b04c6a0 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_min.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_pk.dmi b/icons/mob/robot/smallraptors/smolraptor_pk.dmi new file mode 100644 index 00000000000..4303054abc1 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_pk.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_sci.dmi b/icons/mob/robot/smallraptors/smolraptor_sci.dmi new file mode 100644 index 00000000000..e4192bc119c Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_sci.dmi differ diff --git a/icons/mob/robot/smallraptors/smolraptor_serv.dmi b/icons/mob/robot/smallraptors/smolraptor_serv.dmi new file mode 100644 index 00000000000..d5792633174 Binary files /dev/null and b/icons/mob/robot/smallraptors/smolraptor_serv.dmi differ diff --git a/icons/mob/robot/smallraptors/source.txt b/icons/mob/robot/smallraptors/source.txt new file mode 100644 index 00000000000..c6390a244d2 --- /dev/null +++ b/icons/mob/robot/smallraptors/source.txt @@ -0,0 +1 @@ +bubberstation, artist is https://github.com/aKromatopzia \ No newline at end of file diff --git a/icons/mob/robot/stoatborg.dmi b/icons/mob/robot/stoatborg.dmi new file mode 100644 index 00000000000..0e628ee1b26 Binary files /dev/null and b/icons/mob/robot/stoatborg.dmi differ diff --git a/icons/mob/robot/syndie_large.dmi b/icons/mob/robot/syndie_large.dmi index 12b34658d01..9962e4c9771 100644 Binary files a/icons/mob/robot/syndie_large.dmi and b/icons/mob/robot/syndie_large.dmi differ diff --git a/icons/mob/robot/tallrobot/tallrobot_effects.dmi b/icons/mob/robot/tallrobot/tallrobot_effects.dmi new file mode 100644 index 00000000000..6ec12511aa2 Binary files /dev/null and b/icons/mob/robot/tallrobot/tallrobot_effects.dmi differ diff --git a/icons/mob/robot/tallrobot/tallrobots-wide.dmi b/icons/mob/robot/tallrobot/tallrobots-wide.dmi new file mode 100644 index 00000000000..22a21131f40 Binary files /dev/null and b/icons/mob/robot/tallrobot/tallrobots-wide.dmi differ diff --git a/icons/mob/robot/tallrobot/tallrobots.dmi b/icons/mob/robot/tallrobot/tallrobots.dmi new file mode 100644 index 00000000000..686dfab9d45 Binary files /dev/null and b/icons/mob/robot/tallrobot/tallrobots.dmi differ diff --git a/icons/mob/robot/widerobot/widerobot.dmi b/icons/mob/robot/widerobot/widerobot.dmi new file mode 100644 index 00000000000..2c6b85e6ef8 Binary files /dev/null and b/icons/mob/robot/widerobot/widerobot.dmi differ diff --git a/icons/mob/robot/widerobot/widerobot_car.dmi b/icons/mob/robot/widerobot/widerobot_car.dmi new file mode 100644 index 00000000000..b7a430c1fcb Binary files /dev/null and b/icons/mob/robot/widerobot/widerobot_car.dmi differ diff --git a/icons/mob/robot/widerobot/widerobot_colors.dmi b/icons/mob/robot/widerobot/widerobot_colors.dmi new file mode 100644 index 00000000000..23f72d17d9f Binary files /dev/null and b/icons/mob/robot/widerobot/widerobot_colors.dmi differ diff --git a/icons/mob/robot/widerobot/widerobot_exp.dmi b/icons/mob/robot/widerobot/widerobot_exp.dmi new file mode 100644 index 00000000000..4538d98de9e Binary files /dev/null and b/icons/mob/robot/widerobot/widerobot_exp.dmi differ diff --git a/icons/mob/robot/wormborg.dmi b/icons/mob/robot/wormborg.dmi new file mode 100644 index 00000000000..d7547adc445 Binary files /dev/null and b/icons/mob/robot/wormborg.dmi differ diff --git a/icons/mob/tallborg/dullahans64x64.dmi b/icons/mob/tallborg/dullahans64x64.dmi deleted file mode 100644 index b78f4d543b2..00000000000 Binary files a/icons/mob/tallborg/dullahans64x64.dmi and /dev/null differ diff --git a/vorestation.dme b/vorestation.dme index 54ef1f21fe4..d76100a96e1 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3237,6 +3237,7 @@ #include "code\modules\mob\living\silicon\robot\sprites\catborgs.dm" #include "code\modules\mob\living\silicon\robot\sprites\civilian.dm" #include "code\modules\mob\living\silicon\robot\sprites\combat.dm" +#include "code\modules\mob\living\silicon\robot\sprites\command.dm" #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" @@ -3250,6 +3251,8 @@ #include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm" #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" #include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\exploration\exploration-modules.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\exploration\exploration-sprites.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_interactions.dm" @@ -4438,6 +4441,7 @@ #include "code\unit_tests\reagent_tests.dm" #include "code\unit_tests\recipe_tests.dm" #include "code\unit_tests\research_tests.dm" +#include "code\unit_tests\robot_tests.dm" #include "code\unit_tests\sqlite_tests.dm" #include "code\unit_tests\subsystem_tests.dm" #include "code\unit_tests\unit_test.dm"