diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index aa637dc0332..b04457ac866 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -118,7 +118,7 @@ else if(issilicon(M)) add_attack_logs(user, M, "Flashed with [src]") if(M.flash_eyes(affect_silicon = 1)) - M.Weaken(rand(5,10)) + M.Weaken(rand(4, 6)) user.visible_message("[user] overloads [M]'s sensors with [src]!", "You overload [M]'s sensors with [src]!") return 1 user.visible_message("[user] fails to blind [M] with [src]!", "You fail to blind [M] with [src]!") diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index f1487a09986..52877118b88 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -31,6 +31,115 @@ playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) add_attack_logs(user, M, "Stunned with [src] ([uppertext(user.a_intent)])") +#define CYBORG_HUGS 0 +#define CYBORG_HUG 1 +#define CYBORG_SHOCK 2 +#define CYBORG_CRUSH 3 + +/obj/item/borg/cyborghug + name = "hugging module" + icon_state = "hugmodule" + desc = "For when a someone really needs a hug." + var/mode = CYBORG_HUGS //0 = Hugs 1 = "Hug" 2 = Shock 3 = CRUSH + var/ccooldown = 0 + var/scooldown = 0 + var/shockallowed = FALSE //Can it be a stunarm when emagged. Only PK borgs get this by default. + +/obj/item/borg/cyborghug/attack_self(mob/living/user) + if(isrobot(user)) + var/mob/living/silicon/robot/P = user + if(P.emagged && shockallowed) + if(mode < CYBORG_CRUSH) + mode++ + else + mode = CYBORG_HUGS + else if(mode < CYBORG_HUG) + mode++ + else + mode = CYBORG_HUGS + switch(mode) + if(CYBORG_HUGS) + to_chat(user, "Power reset. Hugs!") + if(CYBORG_HUG) + to_chat(user, "Power increased!") + if(CYBORG_SHOCK) + to_chat(user, "BZZT. Electrifying arms...") + if(CYBORG_CRUSH) + to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.") + +/obj/item/borg/cyborghug/attack(mob/living/M, mob/living/silicon/robot/user, params) + if(M == user) + return + switch(mode) + if(CYBORG_HUGS) + if(M.health >= 0) + if(isanimal(M)) + var/list/modifiers = params2list(params) + M.attack_hand(user, modifiers) //This enables borgs to get the floating heart icon and mob emote from simple_animal's that have petbonus == true. + return + if(user.zone_selected == BODY_ZONE_HEAD) + user.visible_message("[user] playfully boops [M] on the head!", "You playfully boop [M] on the head!") + user.do_attack_animation(M, ATTACK_EFFECT_BOOP) + playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) + else if(ishuman(M)) + if(user.lying) + user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", "You shake [M] trying to get [M.p_them()] up!") + else + user.visible_message("[user] hugs [M] to make [M.p_them()] feel better!", "You hug [M] to make [M.p_them()] feel better!") + if(M.resting) + M.resting = FALSE + M.update_canmove() + else + user.visible_message("[user] pets [M]!", "You pet [M]!") + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + if(CYBORG_HUG) + if(M.health >= 0) + if(ishuman(M)) + if(M.lying) + user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", "You shake [M] trying to get [M.p_them()] up!") + else if(user.zone_selected == BODY_ZONE_HEAD) + user.visible_message("[user] bops [M] on the head!", "You bop [M] on the head!") + user.do_attack_animation(M, ATTACK_EFFECT_PUNCH) + else + user.visible_message("[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...", "You hug [M] firmly to make [M.p_them()] feel better! [M] looks uncomfortable...") + if(M.resting) + M.resting = FALSE + M.update_canmove() + else + user.visible_message("[user] bops [M] on the head!", "You bop [M] on the head!") + playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) + if(CYBORG_SHOCK) + if(scooldown < world.time) + if(M.health >= 0) + if(ishuman(M)) + M.electrocute_act(5, "[user]", flags = SHOCK_NOGLOVES) + user.visible_message("[user] electrocutes [M] with [user.p_their()] touch!", "You electrocute [M] with your touch!") + else + if(!isrobot(M)) + M.adjustFireLoss(10) + user.visible_message("[user] shocks [M]!", "You shock [M]!") + else + user.visible_message("[user] shocks [M]. It does not seem to have an effect", "You shock [M] to no effect.") + playsound(loc, 'sound/effects/sparks2.ogg', 50, TRUE, -1) + user.cell.use(500) + scooldown = world.time + 20 + if(CYBORG_CRUSH) + if(ccooldown < world.time) + if(M.health >= 0) + if(ishuman(M)) + user.visible_message("[user] crushes [M] in [user.p_their()] grip!", "You crush [M] in your grip!") + else + user.visible_message("[user] crushes [M]!", "You crush [M]!") + playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE, -1) + M.adjustBruteLoss(15) + user.cell.use(300) + ccooldown = world.time + 10 + +#undef CYBORG_HUGS +#undef CYBORG_HUG +#undef CYBORG_SHOCK +#undef CYBORG_CRUSH + /obj/item/borg/overdrive name = "Overdrive" icon = 'icons/obj/decals.dmi' diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 5748775558a..8affd317c6a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -300,7 +300,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/proc/pick_module() if(module) return - var/list/modules = list("Generalist", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security") + var/list/modules = list("Engineering", "Medical", "Miner", "Janitor", "Service") if(islist(force_modules) && force_modules.len) modules = force_modules.Copy() if(mmi != null && mmi.alien) @@ -315,14 +315,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( return switch(modtype) - if("Generalist") - module = new /obj/item/robot_module/standard(src) - module.channels = list("Engineering" = 1, "Medical" = 1, "Security" = 1, "Service" = 1, "Supply" = 1) - module_sprites["Basic"] = "robot_old" - module_sprites["Android"] = "droid" - module_sprites["Default"] = "Standard" - module_sprites["Noble-STD"] = "Noble-STD" - if("Service") module = new /obj/item/robot_module/butler(src) module.channels = list("Service" = 1) @@ -365,17 +357,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( see_reagents = TRUE if("Security") - if(!weapons_unlock) - var/count_secborgs = 0 - for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list) - if(R && R.stat != DEAD && R.module && istype(R.module, /obj/item/robot_module/security)) - count_secborgs++ - var/max_secborgs = 2 - if(GLOB.security_level == SEC_LEVEL_GREEN) - max_secborgs = 1 - if(count_secborgs >= max_secborgs) - to_chat(src, "There are too many Security cyborgs active. Please choose another module.") - return module = new /obj/item/robot_module/security(src) module.channels = list("Security" = 1) module_sprites["Basic"] = "secborg" @@ -1349,7 +1330,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( scrambledcodes = 1 req_one_access = list(ACCESS_CENT_SPECOPS) ionpulse = 1 - force_modules = list("Engineering", "Medical", "Security") + force_modules = list("Engineering", "Medical") static_radio_channels = 1 allow_rename = FALSE weapons_unlock = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8a43a2a011e..ab7c4ff9562 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -265,47 +265,6 @@ /obj/item/robot_module/proc/handle_death(mob/living/silicon/robot/R, gibbed) return -// Standard cyborg module. -/obj/item/robot_module/standard - // if station is fine, assist with constructing station goal room, cleaning, and repairing cables chewed by rats - // if medical crisis, assist by providing basic healthcare, retrieving corpses, and monitoring crew lifesigns - // if eng crisis, assist by helping repair hull breaches - // if sec crisis, assist by opening doors for sec and providing backup zipties on patrols - name = "generalist robot module" - module_type = "Standard" - subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor, /mob/living/silicon/proc/subsystem_crew_monitor) - basic_modules = list( - // sec - /obj/item/flash/cyborg, - /obj/item/restraints/handcuffs/cable/zipties/cyborg, - // janitorial - /obj/item/soap/nanotrasen, - /obj/item/lightreplacer/cyborg, - // eng - /obj/item/crowbar/cyborg, - /obj/item/wrench/cyborg, - /obj/item/extinguisher, // for firefighting, and propulsion in space - /obj/item/weldingtool/largetank/cyborg, - // mining - /obj/item/pickaxe, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/storage/bag/ore/cyborg, - // med - /obj/item/healthanalyzer, - /obj/item/reagent_containers/borghypo/basic, - /obj/item/roller_holder, // for taking the injured to medbay without worsening their injuries or leaving a blood trail the whole way - /obj/item/stack/sheet/metal/cyborg, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/plasteel/cyborg - ) - emag_modules = list(/obj/item/melee/energy/sword/cyborg) - special_rechargables = list( - /obj/item/extinguisher, - /obj/item/weldingtool/largetank/cyborg, - /obj/item/lightreplacer/cyborg - ) - // Medical cyborg module. /obj/item/robot_module/medical name = "medical robot module" @@ -319,6 +278,7 @@ /obj/item/borg_defib, /obj/item/handheld_defibrillator, /obj/item/roller_holder, + /obj/item/borg/cyborghug, /obj/item/reagent_containers/borghypo, /obj/item/scalpel/laser/laser1, /obj/item/hemostat, diff --git a/icons/mob/robot_items.dmi b/icons/mob/robot_items.dmi index d84a6c291c1..aada2e5c8b7 100644 Binary files a/icons/mob/robot_items.dmi and b/icons/mob/robot_items.dmi differ