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 00000000000..5f436d57823 Binary files /dev/null and b/icons/mob/dog.dmi differ diff --git a/sound/misc/dog_bark.ogg b/sound/misc/dog_bark.ogg new file mode 100644 index 00000000000..71b44f0576d Binary files /dev/null and b/sound/misc/dog_bark.ogg differ