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 b35c3dedd79..217faf94f81 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 @@ -310,3 +310,30 @@ hitsound = 'sound/weapons/blade1.ogg' attack_verb = list("slashed", "stabbed", "jabbed", "mauled", "sliced") w_class = ITEMSIZE_NORMAL + +/obj/item/device/lightreplacer/dogborg + name = "light replacer" + desc = "A device to automatically replace lights. This version is capable to produce a few replacements using your internal matter reserves." + max_uses = 16 + var/cooldown = 0 + +/obj/item/device/lightreplacer/dogborg/attack_self(mob/user)//Boo recharger fill is slow as shit and removes all the extra cyberfat gains you worked so hard for! + if(uses >= max_uses) + user << "[src.name] is full." + return + if(uses < max_uses && cooldown == 0) + var/mob/living/silicon/robot.R = user + if(R.cell.charge <= 800) + user << "Insufficient power reserves. Please recharge." + return + usr << "It has [uses] lights remaining. Attempting to fabricate a replacement. Please stand still." + cooldown = 1 + if(do_after(user, 50)) + R.cell.charge = R.cell.charge - 400 + AddUses(1) + cooldown = 0 + else + cooldown = 0 + else + usr << "It has [uses] lights remaining." + return \ No newline at end of file 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 2b535c450d9..d7eed2dc8b8 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 @@ -514,11 +514,12 @@ return return -/mob/living/silicon/robot/attackby(obj/item/target as obj, mob/user as mob) +/mob/living/silicon/robot/attackby(obj/item/W as obj, mob/user as mob) if(module_active && istype(module_active,/obj/item/device/dogborg/sleeper/compactor)) //Feeding? - if(user.a_intent == I_HELP) - var/obj/item/device/dogborg/sleeper/compactor = src.module_active - compactor.afterattack(target) + if(src == user) return - return - ..() \ No newline at end of file + if(user.a_intent == I_HELP) + var/obj/item/device/dogborg/sleeper/compactor/CR = module_active + user << "You attempt to feed [W] to [src]." + W.attackby(CR,src) + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm index b45d1eb2612..15352214e04 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm @@ -118,7 +118,7 @@ can_be_pushed = 0 /obj/item/weapon/robot_module/scrubpup/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/device/lightreplacer(src) + src.modules += new /obj/item/device/lightreplacer/dogborg(src) src.modules += new /obj/item/weapon/dogborg/jaws/small(src) src.modules += new /obj/item/device/dogborg/boop_module(src) src.modules += new /obj/item/device/dogborg/tongue(src) diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index 428e8dba7cf..297541f593f 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -8,8 +8,8 @@ icon_rest = "otie_rest" faction = "otie" recruitable = 1 - maxHealth = 100 - health = 100 + maxHealth = 150 + health = 150 minbodytemp = 200 move_to_delay = 4 hostile = 1 @@ -29,7 +29,7 @@ say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RAHH!", "Slurp.. RAH!") say_got_target = list("Rurrr!", "ROAR!", "RERR!", "NOM!", "MINE!", "RAHH!", "RAH!", "WARF!") melee_damage_lower = 5 - melee_damage_upper = 20 + melee_damage_upper = 15 //Don't break my bones bro response_help = "pets the" response_disarm = "bops the" response_harm = "hits the" @@ -53,6 +53,8 @@ icon_dead = "siftusian-dead" icon_rest = "siftusian_rest" tame_chance = 5 // Only a 1 in 20 chance of success. It's feral. What do you expect? + melee_damage_lower = 10 + melee_damage_upper = 25 // Lazy way of making sure this otie survives outside. min_oxy = 0.5 max_oxy = 0 @@ -85,8 +87,8 @@ icon_dead = "sotie-dead" faction = "neutral" tamed = 1 - maxHealth = 150 //armored or something - health = 150 + maxHealth = 200 //armored or something + health = 200 loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt) var/check_records = 1 // If true, arrests people without a record. @@ -108,14 +110,16 @@ var/mob/found_mob = found_atom if(found_mob.faction == faction) return null - else if (friend == found_atom) - return null - else if(tamed == 1 && ishuman(found_atom)) - return null - else if(tamed == 1 && isrobot(found_atom)) - return null + else if(friend == found_atom) + return null + else if(tamed == 1 && ishuman(found_atom)) + return null + else if(tamed == 1 && isrobot(found_atom)) + return null + else + return found_atom else - return found_atom + return null /mob/living/simple_animal/otie/friendly/security/Found(var/atom/found_atom) if(!SA_attackable(found_atom)) @@ -130,14 +134,16 @@ var/mob/found_mob = found_atom if(found_mob.faction == faction) return null - else if (friend == found_atom) - return null - else if(tamed == 1 && ishuman(found_atom)) - return null - else if(tamed == 1 && isrobot(found_atom)) - return null + else if(friend == found_atom) + return null + else if(tamed == 1 && ishuman(found_atom)) + return null + else if(tamed == 1 && isrobot(found_atom)) + return null + else + return found_atom else - return found_atom + return null /mob/living/simple_animal/otie/friendly/security/proc/check_threat(var/mob/living/M) if(!M || !ishuman(M) || M.stat == DEAD || src == M) @@ -205,7 +211,9 @@ "rubs against [friend].", "noses softly at [friend].", "slobberlicks [friend].", - "murrs.")) + "murrs.", + "leans on [friend].", + "nibbles affectionately on [friend].")) else if (friend.health <= 50) if (prob(10)) var/verb = pick("whines", "yelps", "whimpers") @@ -222,6 +230,24 @@ /mob/living/simple_animal/otie/attack_hand(mob/living/carbon/human/M as mob) ..() + if(M.a_intent == I_GRAB) + if (M == src) + return + if (!(status_flags & CANPUSH)) + return + if(!incapacitated(INCAPACITATION_ALL) && (stance != STANCE_IDLE) && prob(grab_resist)) + M.visible_message("[M] tries to grab [src] but fails!") + return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src) + M.put_in_active_hand(G) + G.synch() + G.affecting = src + LAssailant = M + M.visible_message("[M] has grabbed [src] passively!") + M.do_attack_animation(src) + ai_log("attack_hand() I was grabbed by: [M]",2) + pixel_x = old_x + react_to_attack(M) if(M.a_intent == I_HELP) if (health > 0) LoseTarget() @@ -240,6 +266,6 @@ /mob/living/simple_animal/otie vore_active = 1 vore_capacity = 1 - vore_escape_chance = 8 - vore_pounce_chance = 16 + vore_escape_chance = 15 + vore_pounce_chance = 20 vore_icons = SA_ICON_LIVING