From 47481123585c91f249f35f88d0cc79baa9a845ef Mon Sep 17 00:00:00 2001 From: Alberyk Date: Tue, 2 May 2017 15:53:58 -0300 Subject: [PATCH] Guard dogs (#2143) -adds guard dogs, mobs you can command around like the wizard's bear, with basic things like attack, stay and follow -they have a verb that allows one player to become their master, and change their name, by being near them -added the dogs to the random cargo spawn --- baystation12.dme | 1 + .../structures/crates_lockers/largecrate.dm | 10 ++ code/modules/cargo/randomstock.dm | 7 + .../hostile/commanded/guard_dog.dm | 120 ++++++++++++++++++ icons/mob/dog.dmi | Bin 0 -> 2464 bytes sound/misc/dog_bark.ogg | Bin 0 -> 7669 bytes 6 files changed, 138 insertions(+) create mode 100644 code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm create mode 100644 icons/mob/dog.dmi create mode 100644 sound/misc/dog_bark.ogg diff --git a/baystation12.dme b/baystation12.dme index 5c1b234bbb2..6075a79f5fa 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1576,6 +1576,7 @@ #include "code\modules\mob\living\simple_animal\hostile\commanded\_command_defines.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\bear_companion.dm" #include "code\modules\mob\living\simple_animal\hostile\commanded\commanded.dm" +#include "code\modules\mob\living\simple_animal\hostile\commanded\guard_dog.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\drone.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index cbebfae872b..4243a2d8cab 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -77,3 +77,13 @@ name = "chicken crate" held_count = 5 held_type = /mob/living/simple_animal/chick + +/obj/structure/largecrate/animal/dog + name = "dog carrier" + held_type = /mob/living/simple_animal/hostile/commanded/dog + +/obj/structure/largecrate/animal/dog/amaskan + held_type = /mob/living/simple_animal/hostile/commanded/dog/amaskan + +/obj/structure/largecrate/animal/dog/pug + held_type = /mob/living/simple_animal/hostile/commanded/dog/pug diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index fe55225f10d..28d625c9fef 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -262,6 +262,7 @@ var/list/global/random_stock_large = list( "pipemachine" = 1.7, "bike" = 0.3, "sol" = 0.2, + "dog" = 0.2, "nothing" = 0) @@ -1655,6 +1656,12 @@ var/list/global/random_stock_large = list( new /obj/structure/closet/sol/navy(L) else new /obj/structure/closet/sol/marine(L) + if ("dog") + var/list/dogs = list(/obj/structure/largecrate/animal/dog, + /obj/structure/largecrate/animal/dog/amaskan, + /obj/structure/largecrate/animal/dog/pug) + var/type = pick(dogs) + new type(L) //This will be complex //Spawns a random exosuit, Probably not in good condition diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm new file mode 100644 index 00000000000..e96d9a94b52 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm @@ -0,0 +1,120 @@ +/mob/living/simple_animal/hostile/commanded/dog + name = "guard dog" + desc = "A dog trained to listen and obey its owner commands, this one is a german shepherd." + + icon = 'icons/mob/dog.dmi' + icon_state = "german" + icon_living = "german" + icon_dead = "german_dead" + + health = 75 + maxHealth = 75 + + stop_automated_movement_when_pulled = 1 //so people can drag the dog around + density = 1 + + speak_chance = 1 + turns_per_move = 7 + see_in_dark = 6 + + speak = list("Woof!", "Bark!", "AUUUUUU!","AwooOOOoo!") + speak_emote = list("barks", "woofs") + emote_hear = list("barks", "woofs") + + attacktext = "bitten" + attack_sound = 'sound/misc/dog_bark.ogg' + harm_intent_damage = 5 + melee_damage_lower = 15 + melee_damage_upper = 15 + + mob_size = 6 + + response_help = "pets" + response_harm = "hits" + response_disarm = "pushes" + + hunger_enabled = 1 //so you can feed your dog or something + autoseek_food = 0 + beg_for_food = 0 + + known_commands = list("stay", "stop", "attack", "follow") + + var/name_changed = 0 + +/mob/living/simple_animal/hostile/commanded/dog/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) + . = ..() + if(!.) + src.emote("barks!") + +/mob/living/simple_animal/hostile/commanded/dog/attack_hand(mob/living/carbon/human/M as mob) + ..() + if(M.a_intent == I_HURT) + src.emote("barks!") + + +/mob/living/simple_animal/hostile/commanded/dog/verb/befriend() + set name = "Befriend Dog" + set category = "IC" + set src in view(1) + + if(!master) + var/mob/living/carbon/human/H = usr + if(istype(H)) + master = usr + . = 1 + else if(usr == master) + . = 1 //already friends, but show success anyways + + else + usr << "[src] ignores you." + + return + +/mob/living/simple_animal/hostile/commanded/dog/verb/change_name() + set name = "Name Dog" + set category = "IC" + set src in view(1) + + var/mob/M = usr + if(!M.mind) return 0 + + if(!name_changed) + + var/input = sanitizeSafe(input("What do you want to name the dog?", ,""), MAX_NAME_LEN) + + if(src && input && !M.stat && in_range(M,src)) + name = input + real_name = input + name_changed = 1 + return 1 + + else + usr << "[src] already has a name!" + return + +/mob/living/simple_animal/hostile/commanded/dog/amaskan + desc = "A dog trained to listen and obey its owner commands, this one is an amaskan." + + icon_state = "amaskan" + icon_living = "amaskan" + icon_dead = "amaskan_dead" + + +/mob/living/simple_animal/hostile/commanded/dog/pug + name = "pug" + desc = "A small dog with a wrinkly muzzle." + + icon_state = "pug" + icon_living = "pug" + icon_dead = "pug_dead" + + health = 25 + maxHealth = 25 + + density = 0 + + mob_size = 5 + + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 5 diff --git a/icons/mob/dog.dmi b/icons/mob/dog.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5f436d57823aba9a829774df190f95c5be100267 GIT binary patch literal 2464 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 e6Hoixtmim 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 literal 0 HcmV?d00001