diff --git a/code/__DEFINES/~skyrat_defines/robot_defines.dm b/code/__DEFINES/~skyrat_defines/robot_defines.dm new file mode 100644 index 00000000000..1d355e85ec9 --- /dev/null +++ b/code/__DEFINES/~skyrat_defines/robot_defines.dm @@ -0,0 +1,5 @@ +//Module - altborgs +//Defines for dogborgs and stuff +#define ROBOT_REST_NORMAL 1 +#define ROBOT_REST_SITTING 2 +#define ROBOT_REST_BELLY_UP 3 diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 151e40a593e..141ac38294f 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -190,7 +190,11 @@ R.update_module_innate() RM.rebuild_modules() R.radio.recalculateChannels() - + //SKYRAT EDIT ADDITION BEGIN - ALTBORGS + if(RM.dogborg) + R.dogborg = TRUE + RM.dogborg_equip() + //SKYRAT EDIT ADDITION END INVOKE_ASYNC(RM, .proc/do_transform_animation) qdel(src) return RM diff --git a/modular_skyrat/modules/altborgs/code/game/objects/items/robot_items.dm b/modular_skyrat/modules/altborgs/code/game/objects/items/robot_items.dm new file mode 100644 index 00000000000..b8a50034627 --- /dev/null +++ b/modular_skyrat/modules/altborgs/code/game/objects/items/robot_items.dm @@ -0,0 +1,37 @@ +/obj/item/dogborg_tongue + name = "synthetic tongue" + desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." + icon = 'modular_skyrat/modules/altborgs/icons/mob/robot_items.dmi' + icon_state = "synthtongue" + hitsound = 'sound/effects/attackblob.ogg' + desc = "For giving affectionate kisses." + item_flags = NOBLUDGEON + +/obj/item/dogborg_tongue/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity || !isliving(target)) + return + var/mob/living/silicon/robot/R = user + var/mob/living/L = target + + if(check_zone(R.zone_selected) == "head") + R.visible_message("\the [R] affectionally licks \the [L]'s face!", "You affectionally lick \the [L]'s face!") + playsound(R, 'sound/effects/attackblob.ogg', 50, 1) + else + R.visible_message("\the [R] affectionally licks \the [L]!", "You affectionally lick \the [L]!") + playsound(R, 'sound/effects/attackblob.ogg', 50, 1) + +/obj/item/dogborg_nose + name = "boop module" + desc = "The BOOP module" + icon = 'modular_skyrat/modules/altborgs/icons/mob/robot_items.dmi' + icon_state = "nose" + flags_1 = CONDUCT_1|NOBLUDGEON + force = 0 + +/obj/item/dogborg_nose/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity) + return + do_attack_animation(target, null, src) + user.visible_message("[user] [pick("nuzzles", "pushes", "boops")] \the [target.name] with their nose!") diff --git a/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/inventory.dm b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/inventory.dm new file mode 100644 index 00000000000..11b2b6b9b26 --- /dev/null +++ b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/inventory.dm @@ -0,0 +1,21 @@ +/mob/living/silicon/robot/unequip_module_from_slot(obj/item/O) + ..() + if(istype(O,/obj/item/gun/energy/laser/cyborg)) + update_icons() + else if(istype(O,/obj/item/gun/energy/disabler/cyborg) || istype(O,/obj/item/gun/energy/e_gun/advtaser/cyborg)) + update_icons() //PUT THE GUN AWAY + /* - TODO ADD SLEEPERS + else if(istype(O,/obj/item/dogborg/sleeper)) + sleeper_g = FALSE + sleeper_r = FALSE + update_icons() + var/obj/item/dogborg/sleeper/S = O + S.go_out() //this should stop edgecase deletions + */ + +/mob/living/silicon/robot/equip_module_to_slot(obj/item/O) + ..() + if(istype(O,/obj/item/gun/energy/laser/cyborg)) + update_icons() //REEEEEEACH FOR THE SKY + if(istype(O,/obj/item/gun/energy/disabler/cyborg) || istype(O,/obj/item/gun/energy/e_gun/advtaser/cyborg)) + update_icons() diff --git a/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot.dm b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot.dm new file mode 100644 index 00000000000..befb590804b --- /dev/null +++ b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot.dm @@ -0,0 +1,78 @@ +/mob/living/silicon/robot + var/robot_resting = FALSE + var/dogborg = FALSE + +/mob/living/silicon/robot/doMove(atom/destination) //Could potentially be a signal instead + . = ..() + if(robot_resting) + robot_resting = FALSE + update_icons() + +/mob/living/silicon/robot/proc/rest_style() + set name = "Switch Rest Style" + set category = "Robot Commands" + set desc = "Select your resting pose." + if(!dogborg) + to_chat(src, "You can't do that!") + var/choice = alert(src, "Select resting pose", "", "Resting", "Sitting", "Belly up") + switch(choice) + if("Resting") + robot_resting = ROBOT_REST_NORMAL + if("Sitting") + robot_resting = ROBOT_REST_SITTING + if("Belly up") + robot_resting = ROBOT_REST_BELLY_UP + update_icons() + +/mob/living/silicon/robot/proc/robot_lay_down() + set name = "Lay down" + set category = "Robot Commands" + if(!dogborg) + to_chat(src, "You can't do that!") + if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious + return + if(robot_resting) + to_chat(src, "You are now getting up.") + robot_resting = FALSE + mobility_flags = MOBILITY_FLAGS_DEFAULT + else + to_chat(src, "You are now laying down.") + robot_resting = ROBOT_REST_NORMAL + update_icons() + +/mob/living/silicon/robot/update_mobility() + ..() + if(dogborg) + robot_resting = FALSE + update_icons() + +/mob/living/silicon/robot/update_module_innate() + ..() + if(hands) + hands.icon = (module.moduleselect_alternate_icon ? module.moduleselect_alternate_icon : initial(hands.icon)) + +/mob/living/silicon/robot/modules/miner/skyrat + set_module = /obj/item/robot_module/miner/skyrat + +/mob/living/silicon/robot/modules/butler/skyrat + set_module = /obj/item/robot_module/butler/skyrat + +/mob/living/silicon/robot/pick_module() + if(module.type != /obj/item/robot_module) + return + + if(wires.is_cut(WIRE_RESET_MODULE)) + to_chat(src,"ERROR: Module installer reply timeout. Please check internal connections.") + return + + var/list/skyratmodule = list( + "Departmental Modules" = "next", + "Skyrat Service(alt skins)" = /obj/item/robot_module/butler/skyrat, + "Skyrat Miner(alt skins)" = /obj/item/robot_module/miner/skyrat + ) + var/input_module_sk = input("Please select a module, or choose a reskin.", "Robot", null, null) as null|anything in sortList(skyratmodule) + if(input_module_sk == "Departmental Modules" || !input_module_sk || module.type != /obj/item/robot_module) + return ..() + else + module.transform_to(skyratmodule[input_module_sk]) + return diff --git a/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot_modules.dm new file mode 100644 index 00000000000..fcd72d6b133 --- /dev/null +++ b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -0,0 +1,853 @@ +/obj/item/robot_module + var/icon/cyborg_icon_override + var/sleeper_overlay + var/has_snowflake_deadsprite + var/cyborg_pixel_offset + var/moduleselect_alternate_icon + var/dogborg = FALSE //Is this module a wider borg? + +/obj/item/robot_module/proc/dogborg_equip() + has_snowflake_deadsprite = TRUE + cyborg_pixel_offset = -16 + hat_offset = INFINITY + basic_modules += new /obj/item/dogborg_nose(src) + basic_modules += new /obj/item/dogborg_tongue(src) + var/mob/living/silicon/robot/R = loc + add_verb(R , /mob/living/silicon/robot/proc/robot_lay_down) + add_verb(R , /mob/living/silicon/robot/proc/rest_style) +/* - TODO ADD SLEEPERS + var/obj/item/dogborg/sleeper/K9/flavour/I = new(src) + if(istype(src, /obj/item/robot_module/engineering)) + I.icon_state = "decompiler" + if(istype(src, /obj/item/robot_module/security)) + I.icon_state = "sleeperb" + if(istype(src, /obj/item/robot_module/medical)) + I.icon_state = "sleeper" + if(istype(src, /obj/item/robot_module/butler)) + I.icon_state = "servicer" + if(cyborg_base_icon == "scrubpup") + I.icon_state = "compactor" + basic_modules += I +*/ + rebuild_modules() + +//ROBOT ADDITIONAL MODULES + +//STANDARD +/obj/item/robot_module/standard/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/standard_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "robot"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinasd"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavysd"), + "Eyebot" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "eyebotsd"), + "Robot" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "robot_old"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootysd"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootysd"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_standard"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_sd") + ) + var/list/L = list("Fabulous" = "k69") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + standard_icons[a] = wide + standard_icons = sortList(standard_icons) + var/standard_borg_icon = show_radial_menu(R, R , standard_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(standard_borg_icon) + if("Default") + cyborg_base_icon = "robot" + if("Marina") + cyborg_base_icon = "marinasd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Heavy") + cyborg_base_icon = "heavysd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Eyebot") + cyborg_base_icon = "eyebotsd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Robot") + cyborg_base_icon = "robot_old" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Bootyborg") + cyborg_base_icon = "bootysd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootysd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_standard" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_sd" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Fabulous") + cyborg_base_icon = "k69" + sleeper_overlay = "k9sleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + else + return FALSE + return ..() + +//MEDICAL +/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/med_icons + if(!med_icons) + med_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "medical"), + "Droid" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "medical"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekmed"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinamed"), + "Eyebot" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "eyebotmed"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavymed"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootymedical"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootymedical"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_medical"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_med"), + "Qualified Doctor" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "qualified_doctor"), + "Zoomba" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "zoomba_med"), + ) + var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed", "Drake" = "drakemedbox") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + med_icons[a] = wide + med_icons = sortList(med_icons) + var/med_borg_icon = show_radial_menu(R, R , med_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(med_borg_icon) + if("Default") + cyborg_base_icon = "medical" + if("Zoomba") + cyborg_base_icon = "zoomba_med" + if("Droid") + cyborg_base_icon = "medical" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + hat_offset = 4 + if("Sleek") + cyborg_base_icon = "sleekmed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Marina") + cyborg_base_icon = "marinamed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Eyebot") + cyborg_base_icon = "eyebotmed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavymed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootymedical" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootymedical" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_medical" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_med" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Qualified Doctor") + cyborg_base_icon = "qualified_doctor" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Medihound") + cyborg_base_icon = "medihound" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "msleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + dogborg = TRUE + if("Medihound Dark") + cyborg_base_icon = "medihounddark" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "mdsleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + dogborg = TRUE + if("Vale") + cyborg_base_icon = "valemed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "valemedsleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + dogborg = TRUE + if("Alina") + cyborg_base_icon = "alina-med" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + special_light_key = "alina" + sleeper_overlay = "alinasleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + dogborg = TRUE + if("Drake") + cyborg_base_icon = "drakemed" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "drakemedsleeper" + moduleselect_icon = "medihound" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + dogborg = TRUE + else + return FALSE + return ..() + +//ENGINEERING +/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/engi_icons + if(!engi_icons) + engi_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "engineer"), + "Default - Treads" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "engi-tread"), + "Loader" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "loaderborg"), + "Handy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "handyeng"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekeng"), + "Can" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "caneng"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinaeng"), + "Spider" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "spidereng"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavyeng"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootyeng"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootyeng"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_eng"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_eng"), + "Zoomba" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "zoomba_engi"), + ) + var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng", "Hound" = "engihound", "Darkhound" = "engihounddark", "Drake" = "drakeengbox") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + engi_icons[a] = wide + engi_icons = sortList(engi_icons) + var/engi_borg_icon = show_radial_menu(R, R , engi_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(engi_borg_icon) + if("Default") + cyborg_base_icon = "engineer" + if("Zoomba") + cyborg_base_icon = "zoomba_engi" + if("Default - Treads") + cyborg_base_icon = "engi-tread" + special_light_key = "engineer" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Loader") + cyborg_base_icon = "loaderborg" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Handy") + cyborg_base_icon = "handyeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Sleek") + cyborg_base_icon = "sleekeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Can") + cyborg_base_icon = "caneng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Marina") + cyborg_base_icon = "marinaeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Spider") + cyborg_base_icon = "spidereng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavyeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootyeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootyeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_eng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_eng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Pup Dozer") + cyborg_base_icon = "pupdozer" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "dozersleeper" + dogborg = TRUE + if("Vale") + cyborg_base_icon = "valeeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "valeengsleeper" + dogborg = TRUE + if("Hound") + cyborg_base_icon = "engihound" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "engihoundsleeper" + dogborg = TRUE + if("Darkhound") + cyborg_base_icon = "engihounddark" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "engihounddarksleeper" + dogborg = TRUE + if("Alina") + cyborg_base_icon = "alina-eng" + special_light_key = "alina" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "alinasleeper" + dogborg = TRUE + if("Drake") + cyborg_base_icon = "drakeeng" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "drakesecsleeper" + dogborg = TRUE + else + return FALSE + return ..() + +//SECURITY +/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/sec_icons + if(!sec_icons) + sec_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "sec"), + "Default - Treads" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sec-tread"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleeksec"), + "Can" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "cansec"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinasec"), + "Spider" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "spidersec"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavysec"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootysecurity"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootysecurity"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_security"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_security"), + "Zoomba" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "zoomba_sec"), + ) + var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark", "Otie" = "oties", "Drake" = "drakesecbox") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + sec_icons[a] = wide + sec_icons = sortList(sec_icons) + var/sec_borg_icon = show_radial_menu(R, R , sec_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(sec_borg_icon) + if("Default") + cyborg_base_icon = "sec" + if("Zoomba") + cyborg_base_icon = "zoomba_sec" + if("Default - Treads") + cyborg_base_icon = "sec-tread" + special_light_key = "sec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Sleek") + cyborg_base_icon = "sleeksec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Marina") + cyborg_base_icon = "marinasec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Can") + cyborg_base_icon = "cansec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Spider") + cyborg_base_icon = "spidersec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavysec" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootysecurity" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootysecurity" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_security" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_security" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("K9") + cyborg_base_icon = "k9" + sleeper_overlay = "ksleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + if("Otie") + cyborg_base_icon = "oties" + sleeper_overlay = "otiessleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + if("Alina") + cyborg_base_icon = "alina-sec" + special_light_key = "alina" + sleeper_overlay = "alinasleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + if("K9 Dark") + cyborg_base_icon = "k9dark" + sleeper_overlay = "k9darksleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + if("Vale") + cyborg_base_icon = "valesec" + sleeper_overlay = "valesecsleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + if("Drake") + cyborg_base_icon = "drakesec" + sleeper_overlay = "drakesecsleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + else + return FALSE + return ..() + +//PEACEKEEPER +/obj/item/robot_module/peacekeeper/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/peace_icons + if(!peace_icons) + peace_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "peace"), + "Borgi" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "borgi"), + "Spider" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "whitespider"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekpeace"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinapeace"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootypeace"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootypeace"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_peacekeeper") + ) + var/list/L = list("Drake" = "drakepeacebox") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + peace_icons[a] = wide + peace_icons = sortList(peace_icons) + var/peace_borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(peace_borg_icon) + if("Default") + cyborg_base_icon = "peace" + if("Sleek") + cyborg_base_icon = "sleekpeace" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Spider") + cyborg_base_icon = "whitespider" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Borgi") + cyborg_base_icon = "borgi" + moduleselect_icon = "borgi" + moduleselect_alternate_icon = 'modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi' + hat_offset = INFINITY + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Marina") + cyborg_base_icon = "marinapeace" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Bootyborg") + cyborg_base_icon = "bootypeace" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootypeace" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_peacekeeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Drake") + cyborg_base_icon = "drakepeace" + sleeper_overlay = "drakepeacesleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + else + return FALSE + return ..() + +//JANITOR +/obj/item/robot_module/janitor/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/janitor_icons + if(!janitor_icons) + janitor_icons = list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "janitor"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinajan"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekjan"), + "Can" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "canjan"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootyjanitor"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootyjanitor"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_janitor"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_janitor"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavyres"), + "Zoomba" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "zoomba_jani"), + ) + var/list/L = list("Drake" = "drakejanitbox", "Otie" = "otiej", "Scrubpuppy" = "scrubpup") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + janitor_icons[a] = wide + janitor_icons = sortList(janitor_icons) + var/janitor_robot_icon = show_radial_menu(R, R , janitor_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(janitor_robot_icon) + if("Default") + cyborg_base_icon = "janitor" + if("Zoomba") + cyborg_base_icon = "zoomba_jani" + if("Marina") + cyborg_base_icon = "marinajan" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Sleek") + cyborg_base_icon = "sleekjan" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Can") + cyborg_base_icon = "canjan" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavyres" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootyjanitor" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootyjanitor" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_janitor" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_janitor" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Scrubpuppy") + cyborg_base_icon = "scrubpup" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "jsleeper" + dogborg = TRUE + if("Otie") + cyborg_base_icon = "otiej" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "otiejsleeper" + dogborg = TRUE + if("Drake") + cyborg_base_icon = "drakejanit" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "drakesecsleeper" + dogborg = TRUE + else + return FALSE + return ..() + +//CLOWN +/obj/item/robot_module/clown/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/clown_icons = sortList(list( + "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "clown"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootyclown"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootyclown"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marina_mommy"), + "Garish" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "garish"), + "Robot" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "clownbot"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "clownman") + )) + var/clown_borg_icon = show_radial_menu(R, R , clown_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(clown_borg_icon) + if("Default") + cyborg_base_icon = "clown" + if("Bootyborg") + cyborg_base_icon = "bootyclown" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootyclown" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Marina") + cyborg_base_icon = "marina_mommy" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + if("Garish") + cyborg_base_icon = "garish" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Robot") + cyborg_base_icon = "clownbot" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Sleek") + cyborg_base_icon = "clownman" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + has_snowflake_deadsprite = TRUE + else + return FALSE + return ..() + +//SERVICE +/obj/item/robot_module/butler/skyrat + name = "Skyrat Service" + special_light_key = null + +/obj/item/robot_module/butler/skyrat/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/service_icons + if(!service_icons) + service_icons = list( + "Waitress" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_f"), + "Butler" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_m"), + "Bro" = image(icon = 'icons/mob/robots.dmi', icon_state = "brobot"), + "Can" = image(icon = 'icons/mob/robots.dmi', icon_state = "kent"), + "Tophat" = image(icon = 'icons/mob/robots.dmi', icon_state = "tophat"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekserv"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavyserv"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootyservice"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootyservice"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_service"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_service"), + ) + var/list/L = list("DarkK9" = "k50", "Vale" = "valeserv", "ValeDark" = "valeservdark", "Fabulous" = "k69") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + service_icons[a] = wide + service_icons = sortList(service_icons) + var/service_robot_icon = show_radial_menu(R, R , service_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(service_robot_icon) + if("Waitress") + cyborg_base_icon = "service_f" + special_light_key = "service" + if("Butler") + cyborg_base_icon = "service_m" + special_light_key = "service" + if("Bro") + cyborg_base_icon = "brobot" + special_light_key = "service" + if("Can") + cyborg_base_icon = "kent" + special_light_key = "medical" + hat_offset = 3 + if("Tophat") + cyborg_base_icon = "tophat" + special_light_key = null + hat_offset = INFINITY + if("Sleek") + cyborg_base_icon = "sleekserv" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavyserv" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootyservice" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootyservice" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_service" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_service" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("DarkK9") + cyborg_base_icon = "k50" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "ksleeper" + dogborg = TRUE + if("Vale") + cyborg_base_icon = "valeserv" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "valeservsleeper" + dogborg = TRUE + if("ValeDark") + cyborg_base_icon = "valeservdark" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "valeservsleeper" + dogborg = TRUE + if("Fabulous") + cyborg_base_icon = "k69" + sleeper_overlay = "k9sleeper" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + dogborg = TRUE + else + return FALSE + return TRUE + +//MINING +/obj/item/robot_module/miner/skyrat + name = "Skyrat Miner" + special_light_key = null + +/obj/item/robot_module/miner/skyrat/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/mining_icons + if(!mining_icons) + mining_icons = list( + "Lavaland" = image(icon = 'icons/mob/robots.dmi', icon_state = "miner"), + "Asteroid" = image(icon = 'icons/mob/robots.dmi', icon_state = "minerOLD"), + "Droid" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "miner"), + "Sleek" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "sleekmin"), + "Marina" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "marinamin"), + "Can" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "canmin"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "heavymin"), + "Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootyminer"), + "Male Bootyborg" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootyminer"), + "Protectron" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "protectron_miner"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_miner"), + "Zoomba" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "zoomba_miner"), + "Drake" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = "drakeminebox") + ) + var/list/L = list("Blade" = "blade", "Vale" = "valemine") + for(var/a in L) + var/image/wide = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi', icon_state = L[a]) + wide.pixel_x = -16 + mining_icons[a] = wide + mining_icons = sortList(mining_icons) + var/mining_borg_icon = show_radial_menu(R, R , mining_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(mining_borg_icon) + if("Lavaland") + cyborg_base_icon = "miner" + if("Asteroid") + cyborg_base_icon = "minerOLD" + special_light_key = "miner" + if("Droid") + cyborg_base_icon = "miner" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + hat_offset = 4 + if("Sleek") + cyborg_base_icon = "sleekmin" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Can") + cyborg_base_icon = "canmin" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Marina") + cyborg_base_icon = "marinamin" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Spider") + cyborg_base_icon = "spidermin" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "heavymin" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Bootyborg") + cyborg_base_icon = "bootyminer" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Bootyborg") + cyborg_base_icon = "male_bootyminer" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Protectron") + cyborg_base_icon = "protectron_miner" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_miner" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Zoomba") + cyborg_base_icon = "zoomba_miner" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + if("Blade") + cyborg_base_icon = "blade" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "bladesleeper" + dogborg = TRUE + if("Vale") + cyborg_base_icon = "valemine" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "valeminesleeper" + dogborg = TRUE + if("Drake") + cyborg_base_icon = "drakemine" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi' + sleeper_overlay = "drakeminesleeper" + dogborg = TRUE + else + return FALSE + return TRUE + +//SYNDICATE +/obj/item/robot_module/syndicatejack + name = "Syndicate" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/borg/sight/thermal, + /obj/item/extinguisher, + /obj/item/weldingtool/experimental, + /obj/item/screwdriver/nuke, + /obj/item/wrench/cyborg, + /obj/item/crowbar/cyborg, + /obj/item/wirecutters/cyborg, + /obj/item/multitool/cyborg, + /obj/item/lightreplacer/cyborg, + /obj/item/stack/sheet/metal/cyborg, + /obj/item/stack/sheet/glass/cyborg, + /obj/item/stack/sheet/rglass/cyborg, + /obj/item/stack/rods/cyborg, + /obj/item/stack/tile/plasteel/cyborg, + /obj/item/stack/cable_coil/cyborg, + /obj/item/restraints/handcuffs/cable/zipties, + /obj/item/stack/medical/gauze/cyborg, + /obj/item/shockpaddles/cyborg, + /obj/item/healthanalyzer/advanced, + /obj/item/retractor/advanced, + /obj/item/surgicaldrill, + /obj/item/scalpel/advanced, + /obj/item/gun/medbeam, + /obj/item/reagent_containers/borghypo/syndicate, + /obj/item/borg/lollipop, + /obj/item/holosign_creator/cyborg, + /obj/item/stamp/chameleon, + ) + cyborg_base_icon = "synd_engi" + moduleselect_icon = "malf" + magpulsing = TRUE + hat_offset = INFINITY + canDispose = TRUE + +/obj/item/robot_module/syndicatejack/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/static/list/syndicatejack_icons = sortList(list( + "Saboteur" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_engi"), + "Medical" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_medical"), + "Assault" = image(icon = 'icons/mob/robots.dmi', icon_state = "synd_sec"), + "Heavy" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "syndieheavy"), + "Miss m" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "missm_syndie"), + "Spider" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "spidersyndi"), + "Booty Striker" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootynukie"), + "Booty Syndicate" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "bootysyndie"), + "Male Booty Striker" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootynukie"), + "Male Booty Syndicate" = image(icon = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi', icon_state = "male_bootysyndie"), + )) + var/syndiejack_icon = show_radial_menu(R, R , syndicatejack_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) + switch(syndiejack_icon) + if("Saboteur") + cyborg_base_icon = "synd_engi" + cyborg_icon_override = 'icons/mob/robots.dmi' + if("Medical") + cyborg_base_icon = "synd_medical" + cyborg_icon_override = 'icons/mob/robots.dmi' + if("Assault") + cyborg_base_icon = "synd_sec" + cyborg_icon_override = 'icons/mob/robots.dmi' + if("Heavy") + cyborg_base_icon = "syndieheavy" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Miss m") + cyborg_base_icon = "missm_syndie" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Spider") + cyborg_base_icon = "spidersyndi" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Booty Striker") + cyborg_base_icon = "bootynukie" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Booty Syndicate") + cyborg_base_icon = "bootysyndie" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Booty Striker") + cyborg_base_icon = "male_bootynukie" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + if("Male Booty Syndicate") + cyborg_base_icon = "male_bootysyndie" + cyborg_icon_override = 'modular_skyrat/modules/altborgs/icons/mob/robots.dmi' + //Dogborgs + + else + return FALSE + return ..() + +//Stray dog diff --git a/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/update_icons.dm b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/update_icons.dm new file mode 100644 index 00000000000..2dd1532f29c --- /dev/null +++ b/modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/update_icons.dm @@ -0,0 +1,46 @@ +/mob/living/silicon/robot/update_icons() + . = ..() + update_dogborg_icons() + +/mob/living/silicon/robot/proc/update_dogborg_icons() + icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon)) + var/extra_overlay + for(var/i in held_items) + var/obj/item/O = i + if(istype(O,/obj/item/gun/energy/laser/cyborg)) + extra_overlay = "laser" + break + if(istype(O,/obj/item/gun/energy/disabler/cyborg) || istype(O,/obj/item/gun/energy/e_gun/advtaser/cyborg)) + extra_overlay = "disabler" + break + + if(extra_overlay) + add_overlay(extra_overlay) + + + //if(sleeper_g && module.sleeper_overlay) + // add_overlay("[module.sleeper_overlay]_g[sleeper_nv ? "_nv" : ""]") + //if(sleeper_r && module.sleeper_overlay) + // add_overlay("[module.sleeper_overlay]_r[sleeper_nv ? "_nv" : ""]") + + if(stat == DEAD && module.has_snowflake_deadsprite) + icon_state = "[module.cyborg_base_icon]-wreck" + + if(module.cyborg_pixel_offset) + pixel_x = module.cyborg_pixel_offset + + if(module.cyborg_base_icon == "robot") + icon = 'icons/mob/robots.dmi' + pixel_x = initial(pixel_x) + + if(client && stat != DEAD && module.dogborg) + switch(robot_resting) + if(ROBOT_REST_NORMAL) + icon_state = "[module.cyborg_base_icon]-rest" + if(ROBOT_REST_SITTING) + icon_state = "[module.cyborg_base_icon]-sit" + if(ROBOT_REST_BELLY_UP) + icon_state = "[module.cyborg_base_icon]-bellyup" + else + icon_state = "[module.cyborg_base_icon]" + update_fire() diff --git a/modular_skyrat/modules/altborgs/icons/mob/robot_items.dmi b/modular_skyrat/modules/altborgs/icons/mob/robot_items.dmi new file mode 100644 index 00000000000..06521f1a848 Binary files /dev/null and b/modular_skyrat/modules/altborgs/icons/mob/robot_items.dmi differ diff --git a/modular_skyrat/modules/altborgs/icons/mob/robots.dmi b/modular_skyrat/modules/altborgs/icons/mob/robots.dmi new file mode 100644 index 00000000000..55a6730f5a5 Binary files /dev/null and b/modular_skyrat/modules/altborgs/icons/mob/robots.dmi differ diff --git a/modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi b/modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi new file mode 100644 index 00000000000..9ba2e0b9c54 Binary files /dev/null and b/modular_skyrat/modules/altborgs/icons/mob/widerobot.dmi differ diff --git a/modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi b/modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi new file mode 100644 index 00000000000..f87faece91f Binary files /dev/null and b/modular_skyrat/modules/altborgs/icons/ui/screen_cyborg.dmi differ diff --git a/modular_skyrat/modules/altborgs/readme.md b/modular_skyrat/modules/altborgs/readme.md new file mode 100644 index 00000000000..526d3916ba4 --- /dev/null +++ b/modular_skyrat/modules/altborgs/readme.md @@ -0,0 +1,30 @@ +https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 + +## Title: Alternate Borgs + +MODULE ID: ALTBORGS + +### Description: + +Adds all alternate borg presets to the game, ported from Skyrat. + +### TG Proc Changes: +- APPEND: modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot.dm > /mob/living/silicon/robot/doMove() +- ADDITION: code\modules\mob\living\silicon\robot\robot_modules.dm > /obj/item/robot_module/proc/transform_to(new_module_type) + +### Defines: + +- #define JOB_DISPLAY_ORDER_BLUESHIELD 34 +- #define ACCESS_BLUESHIELD 71 + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +Gandalf2k15 - Porting & refactoring diff --git a/tgstation.dme b/tgstation.dme index 8fb6621bcd1..e1d99d45f95 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -131,6 +131,7 @@ #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\~skyrat_defines\blueshield.dm" +#include "code\__DEFINES\~skyrat_defines\robot_defines.dm" #include "code\__DEFINES\~skyrat_defines\DNA.dm" #include "code\__DEFINES\~skyrat_defines\obj_flags.dm" #include "code\__DEFINES\~skyrat_defines\say.dm" @@ -3250,6 +3251,11 @@ #include "interface\menu.dm" #include "interface\stylesheet.dm" #include "interface\skin.dmf" +#include "modular_skyrat\modules\altborgs\code\game\objects\items\robot_items.dm" +#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\inventory.dm" +#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\robot.dm" +#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\robot_modules.dm" +#include "modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\update_icons.dm" #include "modular_skyrat\master_files\code\modules\power\lighting.dm" #include "modular_skyrat\modules\blueshield\code\game\area\Space_Station_13_areas.dm" #include "modular_skyrat\modules\blueshield\code\game\gamemodes\brother\traitor_bro.dm"