diff --git a/GainStation13/code/mobs/slugcat.dm b/GainStation13/code/mobs/slugcat.dm new file mode 100644 index 00000000..8f5f0cb7 --- /dev/null +++ b/GainStation13/code/mobs/slugcat.dm @@ -0,0 +1,119 @@ +/mob/living/simple_animal/pet/slugcat + name = "slugcat" + desc = "It's a cat . . . Thing from another planet, maybe from another world. You think it's not dangerous, but you can't be sure. " + icon = 'GainStation13/icons/mob/pets.dmi' + icon_state = "slugcat" + icon_living = "slugcat" + icon_dead = "slugcat_dead" + emote_see = list("stares at the ceiling.", "shivers.") + speak_chance = 1 + turns_per_move = 20 + can_be_held = TRUE + see_in_dark = 6 + ventcrawler = VENTCRAWLER_ALWAYS + pass_flags = PASSTABLE + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + minbodytemp = 200 + maxbodytemp = 400 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + unsuitable_atmos_damage = 0.5 + animal_species = /mob/living/simple_animal/pet/slugcat + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + gold_core_spawnable = FRIENDLY_SPAWN + attack_sound = 'sound/effects/attackblob.ogg' + do_footstep = TRUE + gold_core_spawnable = FRIENDLY_SPAWN + size_multiplier = 0.5 + obj_damage = 0 + melee_damage_lower = 0 + melee_damage_upper = 0 + var/held_icon = "slugcat" + do_footstep = TRUE + //lizard food + devourable = 1 + digestable = 1 + feeding = 1 + var/obj/item/twohanded/spear/weapon + +/mob/living/simple_animal/pet/slugcat/Initialize() + . = ..() + add_verb(src, /mob/living/proc/lay_down) + +/mob/living/simple_animal/pet/slugcat/ComponentInitialize() + . = ..() + AddElement(/datum/element/wuv, "purrs!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "hisses!", EMOTE_AUDIBLE) + AddElement(/datum/element/mob_holder, held_icon) + +/mob/living/simple_animal/pet/slugcat/update_canmove() + ..() + if(client && stat != DEAD) + if (resting) + icon_state = "[icon_living]_rest" + else + icon_state = "[icon_living]" + regenerate_icons() + +/mob/living/simple_animal/pet/slugcat/UnarmedAttack(atom/A) + . = ..() + if(!isitem(A)) + return + + if(!weapon && istype(A, /obj/item/twohanded/spear)) + visible_message("[src] pick up the [A].", "You pick up the [A].") + weapon = A + weapon.forceMove(src) + melee_damage_lower = weapon.force + weapon.force_wielded + melee_damage_upper = weapon.force + weapon.force_wielded + armour_penetration = weapon.armour_penetration + melee_damage_type = weapon.damtype + attack_sound = weapon.hitsound + update_icons() + else if(!weapon && !istype(A, /obj/item/twohanded/spear)) + to_chat(src, "You do not know how to wield the [A]!") + +/mob/living/simple_animal/pet/slugcat/RangedAttack(atom/A, params) + . = ..() + if(!weapon) + return + visible_message("[src] throws the [weapon] at [A]!","You throw the [weapon] at [A]!") + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + armour_penetration = initial(armour_penetration) + melee_damage_type = initial(melee_damage_type) + attack_sound = initial(attack_sound) + weapon.forceMove(get_turf(src)) + weapon.throw_at(A, weapon.throw_range, weapon.throw_speed, src) + weapon = null + update_icons() + +/mob/living/simple_animal/pet/slugcat/update_icons() + . = ..() + if(stat == DEAD || resting) + return + icon_state = weapon ? initial(icon_state) + "_spear" : initial(icon_state) + +/mob/living/simple_animal/pet/slugcat/death(gibbed) + if(weapon) + weapon.forceMove(get_turf(src)) + weapon = null + update_icons() + . = ..() + +/mob/living/simple_animal/pet/slugcat/attack_ghost(mob/user) + if(key) + return + if(CONFIG_GET(flag/use_age_restriction_for_jobs)) + if(!isnum(user.client.player_age)) + return + if(!SSticker.mode) + to_chat(user, "Can't become a slugcat before the game has started.") + return + var/be_scug = alert("Become a slugcat? (Warning, You can no longer be cloned!)",,"Yes","No") + if(be_scug == "No" || QDELETED(src) || !isobserver(user)) + return + sentience_act() + key = user.key + diff --git a/GainStation13/icons/mob/pets.dmi b/GainStation13/icons/mob/pets.dmi new file mode 100644 index 00000000..987afe9d Binary files /dev/null and b/GainStation13/icons/mob/pets.dmi differ diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index 99a6dd00..22dfb0a6 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -172,3 +172,10 @@ /mob/living/simple_animal/hostile/retaliate/bat/secbat, /mob/living/simple_animal/hostile/retaliate/bat/secbat) crate_name = "security bat crate" + +/datum/supply_pack/critter/slugcat + name = "Slugcat Crate" + desc = "It's a cat . . . Thing from another planet, maybe from another world.contain one slugcat." + cost = 5000 + contains = list(/mob/living/simple_animal/pet/slugcat) + crate_name = "slugcat crate" diff --git a/icons/mob/animals_held_lh.dmi b/icons/mob/animals_held_lh.dmi index 6c407c85..14ba559f 100644 Binary files a/icons/mob/animals_held_lh.dmi and b/icons/mob/animals_held_lh.dmi differ diff --git a/icons/mob/animals_held_rh.dmi b/icons/mob/animals_held_rh.dmi index 322dad06..610600c1 100644 Binary files a/icons/mob/animals_held_rh.dmi and b/icons/mob/animals_held_rh.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 8888857a..efd12171 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3092,6 +3092,7 @@ #include "GainStation13\code\mechanics\den abductors\purchaseble_goodies.dm" #include "GainStation13\code\mobs\cakegolem.dm" #include "GainStation13\code\mobs\chocoslime.dm" +#include "GainStation13\code\mobs\slugcat.dm" #include "GainStation13\code\mobs\races\caloritegolem.dm" #include "GainStation13\code\modules\client\preferences\preferences.dm" #include "GainStation13\code\modules\clothing\under\jobs\modcivilian.dm"