diff --git a/code/datums/supplypacks/science_vr.dm b/code/datums/supplypacks/science_vr.dm index ee73bf1089..c3ec833438 100644 --- a/code/datums/supplypacks/science_vr.dm +++ b/code/datums/supplypacks/science_vr.dm @@ -60,11 +60,9 @@ access = access_xenobiology contraband = 1 -/* Removed until Otie code is unfucked. /datum/supply_packs/sci/otie - name = "V.A.R.M.A.corp adoptable reject (Dangerous!)" + name = "VARMAcorp adoptable reject (Dangerous!)" cost = 100 containertype = /obj/structure/largecrate/animal/otie - containername = "V.A.R.M.A.corp adoptable reject (Dangerous!)" + containername = "VARMAcorp adoptable reject (Dangerous!)" access = access_xenobiology -*/ diff --git a/code/datums/supplypacks/security_vr.dm b/code/datums/supplypacks/security_vr.dm index a432b112fa..3c656741ee 100644 --- a/code/datums/supplypacks/security_vr.dm +++ b/code/datums/supplypacks/security_vr.dm @@ -1,13 +1,11 @@ -/* Removed until Otie code is unfucked. /datum/supply_packs/security/guardbeast - name = "V.A.R.M.A.corp autoNOMous security solution" + name = "VARMAcorp autoNOMous security solution" cost = 150 containertype = /obj/structure/largecrate/animal/guardbeast - containername = "V.A.R.M.A.corp autoNOMous security solution crate" + containername = "VARMAcorp autoNOMous security solution crate" access = list( access_security, access_xenobiology) -*/ /datum/supply_packs/security/biosuit contains = list( diff --git a/code/game/objects/structures/crates_lockers/largecrate_vr.dm b/code/game/objects/structures/crates_lockers/largecrate_vr.dm index 964022061a..b64fdab337 100644 --- a/code/game/objects/structures/crates_lockers/largecrate_vr.dm +++ b/code/game/objects/structures/crates_lockers/largecrate_vr.dm @@ -69,19 +69,19 @@ /mob/living/simple_animal/hostile/alien, /mob/living/simple_animal/hostile/alien/drone, /mob/living/simple_animal/hostile/alien/sentinel, - /mob/living/simple_animal/hostile/alien/queen) + /mob/living/simple_animal/hostile/alien/queen, + /mob/living/simple_animal/otie/feral) ..() -/* // Removed until Otie code is unfucked. /obj/structure/largecrate/animal/guardbeast - name = "V.A.R.M.A.corp autoNOMous security solution" - desc = "The V.A.R.M.A.corp bioengineering division flagship product on trained optimal snowflake guard dogs." + name = "VARMAcorp autoNOMous security solution" + desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs." icon = 'icons/obj/storage_vr.dmi' icon_state = "sotiecrate" held_type = /mob/living/simple_animal/otie/friendly/security /obj/structure/largecrate/animal/otie - name = "V.A.R.M.A.corp adoptable reject (Dangerous!)" + name = "VARMAcorp adoptable reject (Dangerous!)" desc = "A warning on the side says the creature inside was returned to the supplier after injuring or devouring several unlucky members of the previous adoption family. It was given a second chance with the next customer. Godspeed and good luck with your new pet!" icon = 'icons/obj/storage_vr.dmi' icon_state = "otiecrate2" @@ -93,5 +93,4 @@ playsound(src, 'sound/items/poster_ripped.ogg', 50, 1) icon_state = "otiecrate" taped = 0 - ..() -*/ \ No newline at end of file + ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index d9083acd57..3186901128 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -1,4 +1,7 @@ // ToDo: Make this code not a fucking snowflaky horrible broken mess. Do not use until it's actually fixed. It's miserably bad right now. +// Also ToDo: Dev-to-dev communication to ensure responsible parties (if available. In this case, yes.) are aware of what's going on and what's broken. +// Probably easier to troubleshoot when we ain't breaking the server by spawning a buttload of heavily extra feature coded snowflake mobs to the wilderness as mass cannonfodder. +// Also ToDo: An actual "simple" mob for that purpose if necessary :v /mob/living/simple_animal/otie //Spawn this one only if you're looking for a bad time. Not friendly. name = "otie" @@ -15,7 +18,6 @@ minbodytemp = 200 move_to_delay = 4 hostile = 1 - //cooperative = 1 // Neutral mobs should not be set like this. investigates = 1 reacts = 1 retaliate = 1 @@ -23,13 +25,12 @@ run_at_them = 0 attack_same = 0 speak_chance = 4 - speak = list("Boof.","Waaf!","Prurrrr.","Growl!","Bork!","Rurrr..","Aruur!","Awoo!") + speak = list("Boof.","Waaf!","Prurr.","Bork!","Rurrr..","Arf.") speak_emote = list("growls", "roars", "yaps", "Awoos") emote_hear = list("rurrs", "rumbles", "rowls", "groans softly", "murrs", "sounds hungry", "yawns") emote_see = list("stares ferociously", "snarls", "licks their chops", "stretches", "yawns") say_maybe_target = list("Ruh?", "Waf?") - say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RAHH!", "Slurp.. RAH!") - say_got_target = list("Rurrr!", "ROAR!", "RERR!", "NOM!", "MINE!", "RAHH!", "RAH!", "WARF!") + say_got_target = list("Rurrr!", "ROAR!", "MARR!", "RERR!", "RAHH!", "RAH!", "WARF!") melee_damage_lower = 5 melee_damage_upper = 15 //Don't break my bones bro response_help = "pets the" @@ -56,7 +57,7 @@ vore_icons = SA_ICON_LIVING /mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin' - name = "feral otie" + name = "mutated feral otie" desc = "The classic bioengineered longdog. No pets. Only bite. This one has mutated from too much time out on the surface of Virgo-3B." icon_state = "siftusian" icon_living = "siftusian" @@ -80,6 +81,7 @@ name = "otie" desc = "The classic bioengineered longdog. This one might even tolerate you!" faction = "neutral" + tamed = 1 /mob/living/simple_animal/otie/friendly/cotie //same as above but has a little collar :v name = "tamed otie" @@ -91,16 +93,16 @@ /mob/living/simple_animal/otie/friendly/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho. name = "guard otie" - desc = "The V.A.R.M.A.corp bioengineering division flagship product on trained optimal snowflake guard dogs." + desc = "The VARMAcorp bioengineering division flagship product on trained optimal snowflake guard dogs." icon_state = "sotie" icon_living = "sotie" icon_rest = "sotie_rest" icon_dead = "sotie-dead" faction = "neutral" - tamed = 1 maxHealth = 200 //armored or something health = 200 loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt) + vore_pounce_chance = 60 // Good boys don't do too much police brutality. var/check_records = 1 // If true, arrests people without a record. var/check_arrest = 1 // If true, arrests people who are set to arrest. @@ -115,8 +117,6 @@ return null if(istype(found_atom,/mob/living/simple_animal/mouse)) return found_atom - if(found_atom in friends) - return null else if(ismob(found_atom)) var/mob/found_mob = found_atom if(found_mob.faction == faction) @@ -128,33 +128,37 @@ else if(tamed == 1 && isrobot(found_atom)) return null else + if(resting) + lay_down() return found_atom else return null /mob/living/simple_animal/otie/friendly/security/Found(var/atom/found_atom) - if(!SA_attackable(found_atom)) - return null - if(istype(found_atom,/mob/living/simple_animal/mouse)) - return found_atom if(check_threat(found_atom) >= 4) + if(resting) + lay_down() return found_atom - if(found_atom in friends) - return null - else if(ismob(found_atom)) - 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 - return found_atom - else - return null + ..() + +/mob/living/simple_animal/otie/friendly/security/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims. + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut)) + qdel(O) + user << "The guard pup accepts your offer for their catch." + for(var/I in vore_organs) + var/datum/belly/B = vore_organs[I] + B.release_all_contents() + return + ..() + +/mob/living/simple_animal/otie/friendly/security/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey) // Make the gut start out safe for bellybrigging. + var/datum/belly/B = user.vore_selected + var/datum/belly/belly_target = user.vore_organs[B] + if(check_threat(target_mob) >= 4) + belly_target.digest_mode = DM_HOLD + if(istype(prey,/mob/living/simple_animal/mouse)) + belly_target.digest_mode = DM_DIGEST + ..() /mob/living/simple_animal/otie/friendly/security/proc/check_threat(var/mob/living/M) if(!M || !ishuman(M) || M.stat == DEAD || src == M) @@ -198,8 +202,8 @@ //Basic friend AI /mob/living/simple_animal/otie/friendly/Life() - . = ..() - if(!. || ai_inactive || !friend) return + ..() + if(!friend) return var/friend_dist = get_dist(src,friend) @@ -220,9 +224,9 @@ visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", - "noses softly at [friend].", + "noses at [friend].", "slobberlicks [friend].", - "murrs.", + "murrs contently.", "leans on [friend].", "nibbles affectionately on [friend].")) else if (friend.health <= 50) @@ -234,65 +238,31 @@ . = ..() if(!. || ai_inactive) return - if(prob(5)) + if(prob(5) && (stance == STANCE_IDLE)) lay_down() //Pet 4 friendly /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() - handle_stance(STANCE_IDLE) - if(prob(tame_chance)) - friend = M - if(tamed != 1) - tamed = 1 - faction = M.faction - sleep(1 SECOND) - return + + switch(M.a_intent) + if(I_HELP) + if (health > 0) + M.visible_message("[M] [response_help] \the [src].") + LoseTarget() + handle_stance(STANCE_IDLE) + if(prob(tame_chance)) + friend = M + if(tamed != 1) + tamed = 1 + faction = M.faction + sleep(1 SECOND) + + else ..() -/mob/living/simple_animal/otie/death() - resting = 0 - icon_state = icon_dead - ..() - /mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!") - density = 0 //We don't block even if we did before - walk(src, 0) //We stop any background-processing walks resting = 0 icon_state = icon_dead - - if(faction_friends.len) - faction_friends -= src - - if(loot_list.len) //Drop any loot - for(var/path in loot_list) - if(prob(loot_list[path])) - new path(get_turf(src)) - - spawn(3) //We'll update our icon in a sec - icon_state = icon_dead //Goddamn triple check. If this ain't working Imma be PISSED! - update_icon() - - return ..(gibbed,deathmessage) \ No newline at end of file + update_icon() + ..() diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 1a41cf5a44..c965415f23 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/vorestation.dme b/vorestation.dme index 185ffe70fc..c6267fbecf 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2007,6 +2007,7 @@ #include "code\modules\mob\living\simple_animal\vore\frog.dm" #include "code\modules\mob\living\simple_animal\vore\gaslamp.dm" #include "code\modules\mob\living\simple_animal\vore\horse.dm" +#include "code\modules\mob\living\simple_animal\vore\otie.dm" #include "code\modules\mob\living\simple_animal\vore\panther.dm" #include "code\modules\mob\living\simple_animal\vore\snake.dm" #include "code\modules\mob\living\simple_animal\vore\solargrub.dm"