diff --git a/code/__DEFINES/traits/definitions.dm b/code/__DEFINES/traits/definitions.dm index e1b72bda8c8..cef0a42e57f 100644 --- a/code/__DEFINES/traits/definitions.dm +++ b/code/__DEFINES/traits/definitions.dm @@ -352,7 +352,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_CANNOT_BE_UNBUCKLED "cannot_be_unbuckled" /// Prevents mob from riding mobs when buckled onto something #define TRAIT_CANT_RIDE "cant_ride" - /// trait that prevents AI controllers from planning detached from ai_status to prevent weird state stuff. #define TRAIT_AI_PAUSED "TRAIT_AI_PAUSED" ///trait that stops our ai controlled mob from moving at all due to ai planning @@ -454,6 +453,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_RECOGNIZE_ADDICTS "Addict Recognition" #define TRAIT_NOENERGY "Boundless Energy" //Specifically, You don't lose fatigue, but you do continue losing stamina. #define TRAIT_KEENEARS "Keen Ears" +#define TRAIT_KEENEYES "Keen Eyes" #define TRAIT_POISON_RESILIENCE "Poison Resilience" #define TRAIT_SEED_FINDER "Seed Finder" /// Cannot count coins diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 8b274173c15..5f24cb9de7f 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -196,6 +196,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "Endless Slumber" = TRAIT_TORPOR, "Boundless Energy" = TRAIT_NOENERGY, "Keen Ears" = TRAIT_KEENEARS, + "Keen Eyes" = TRAIT_KEENEYES, "Poison Resilience" = TRAIT_POISON_RESILIENCE, "Expert Forager" = TRAIT_FORAGER, "Seed Finder" = TRAIT_SEED_FINDER, @@ -331,6 +332,7 @@ GLOBAL_LIST_INIT(roguetraits, list( TRAIT_DUALWIELDER = span_info("I am trained in the art of dual wielding."), TRAIT_NOENERGY = span_info("I don't need rest; I won't ever feel fatigue."), TRAIT_KEENEARS = span_info("I've a good pair of ears, and can tell who is speaking, even when they're out of sight. I can also hear whispers from further away."), + TRAIT_KEENEYES = span_info("Years of hunting and tracking have honed your sight. You're better at noticing details and spotting hidden things."), TRAIT_POISON_RESILIENCE = span_info("I'm more resilient to poisons."), TRAIT_FORAGER = span_info("I can tell which jacksberries are poisonous."), TRAIT_SEED_FINDER = span_info("I find seeds more easily."), diff --git a/code/datums/components/storage/storage_types.dm b/code/datums/components/storage/storage_types.dm index 5d59c64a2f6..592609f0764 100644 --- a/code/datums/components/storage/storage_types.dm +++ b/code/datums/components/storage/storage_types.dm @@ -33,6 +33,9 @@ else I.icon_state += "-sheathed" +/datum/component/storage/concrete/scabbard/book/New(list/raw_args) + . = ..() + set_holdable(list(/obj/item/gun/ballistic/powder/wheellock/puffer)) /datum/component/storage/concrete/scabbard/knife/New(list/raw_args) . = ..() diff --git a/code/game/objects/items/weapons/scabbard.dm b/code/game/objects/items/weapons/scabbard.dm index c259d48c6df..e7e18b11671 100644 --- a/code/game/objects/items/weapons/scabbard.dm +++ b/code/game/objects/items/weapons/scabbard.dm @@ -73,6 +73,34 @@ sellprice = 100 item_weight = 120 GRAMS +/obj/item/weapon/scabbard/book + name = "Tome of Justice" + desc = "This seems to be a special edition.." + icon_state = "handtome" + force = DAMAGE_KNUCKLES - 7 + throwforce = DAMAGE_KNUCKLES - 7 + wdefense = MEDIOCRE_PARRY + wbalance = HARD_TO_DODGE + wlength = WLENGTH_SHORT + w_class = WEIGHT_CLASS_SMALL + slot_flags = ITEM_SLOT_HIP + associated_skill = /datum/attribute/skill/combat/unarmed + sewrepair = /datum/attribute/skill/craft/tanning/patching + salvage_amount = 1 + salvage_result = /obj/item/natural/hide/cured + dyeable = TRUE + sellprice = 0 + experimental_onhip = FALSE + + grid_width = 32 + grid_height = 64 + item_weight = 280 GRAMS + +/obj/item/weapon/scabbard/book/apply_components() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob, slot_flags|ITEM_SLOT_HANDS) + AddComponent(/datum/component/storage/concrete/scabbard/book) + /obj/item/weapon/scabbard/sword name = "scabbard" desc = "A scabbard designed to hold a sword. The natural conclusion for those wishing to carry longblades." diff --git a/code/modules/clothing/armor/gambesson.dm b/code/modules/clothing/armor/gambesson.dm index 89dffacbe88..c49ca71b0b7 100644 --- a/code/modules/clothing/armor/gambesson.dm +++ b/code/modules/clothing/armor/gambesson.dm @@ -112,6 +112,19 @@ detail_color = CLOTHING_ROYAL_PURPLE misc_flags = CRAFTING_TEST_EXCLUDE +/obj/item/clothing/armor/gambeson/hunts + name = "hunting gambeson" + desc = "A thick, protective, rogueish looking gambeson, fashioned not for those looking to just look fancy- No, this is for a true hunter who knows exactly what they want, and how to get it, a hunter who knows what they need to protect them from stray thorns, and savage beasts." + sleeved = 'icons/roguetown/clothing/special/onmob/hand.dmi' + icon_state = "handhunt" + item_state = "handhunt" + armor = ARMOR_PADDED_GOOD + icon = 'icons/roguetown/clothing/special/hand.dmi' + mob_overlay_icon = 'icons/roguetown/clothing/special/onmob/hand.dmi' + icon = 'icons/roguetown/clothing/special/hand.dmi' + mob_overlay_icon = 'icons/roguetown/clothing/special/onmob/hand.dmi' + detail_tag = "_detail" + //................ Padded Dress ............... // /obj/item/clothing/armor/gambeson/heavy/dress name = "padded dress" diff --git a/code/modules/crafting/quality_of_crafting/leatherworking.dm b/code/modules/crafting/quality_of_crafting/leatherworking.dm index 164302b247d..c23cd280f9a 100644 --- a/code/modules/crafting/quality_of_crafting/leatherworking.dm +++ b/code/modules/crafting/quality_of_crafting/leatherworking.dm @@ -760,7 +760,7 @@ craftdiff = 4 /datum/repeatable_crafting_recipe/leather/standalone/hunterboots - name = "hunter boots" + name = "hunting boots" output = /obj/item/clothing/shoes/boots/hunter requirements = list(/obj/item/natural/hide/cured = 2, /obj/item/natural/fur = 1, @@ -910,6 +910,14 @@ /obj/item/natural/fibers = 1) craftdiff = 4 +/datum/repeatable_crafting_recipe/leather/standalone/huntergamb + name = "hunting gambeson" + output = /obj/item/clothing/armor/gambeson/hunts + requirements = list(/obj/item/natural/hide/cured = 2, + /obj/item/natural/fibers/sinew = 1, + /obj/item/clothing/armor/gambeson) + craftdiff = 4 + /datum/repeatable_crafting_recipe/leather/standalone/gloves name = "hardened leather gloves" output = /obj/item/clothing/gloves/leather/advanced @@ -1031,7 +1039,7 @@ craftdiff = 5 /datum/repeatable_crafting_recipe/leather/standalone/hunterboots/masterwork - name = "masterwork hunter boots" + name = "masterwork hunting boots" output = /obj/item/clothing/shoes/boots/hunter/masterwork attacked_atom = /obj/item/clothing/shoes/boots/hunter requirements = list(/obj/item/clothing/shoes/boots/hunter = 1, diff --git a/code/modules/jobs/job_types/adventurer/types/pilgrim/hunter.dm b/code/modules/jobs/job_types/adventurer/types/pilgrim/hunter.dm index 009f82eb40f..ebccf77e6e8 100644 --- a/code/modules/jobs/job_types/adventurer/types/pilgrim/hunter.dm +++ b/code/modules/jobs/job_types/adventurer/types/pilgrim/hunter.dm @@ -56,6 +56,11 @@ attribute_sheet_old = /datum/attribute_holder/sheet/job/pilgrim/hunter/old attribute_sheet = /datum/attribute_holder/sheet/job/pilgrim/hunter + traits = list( + TRAIT_KEENEYES, + TRAIT_FORAGER + ) + /datum/outfit/pilgrim/hunter name = "Hunter (Pilgrim)" pants = /obj/item/clothing/pants/tights/colored/random diff --git a/code/modules/jobs/job_types/nobility/hand.dm b/code/modules/jobs/job_types/nobility/hand.dm index 3ef7c149833..6fb6b266d41 100644 --- a/code/modules/jobs/job_types/nobility/hand.dm +++ b/code/modules/jobs/job_types/nobility/hand.dm @@ -44,7 +44,7 @@ /datum/outfit/hand name = JOB_HAND belt = /obj/item/storage/belt/leather/black - beltr = /obj/item/storage/keyring/hand + neck = /obj/item/storage/keyring/hand /datum/job/hand/after_spawn(mob/living/carbon/human/spawned, client/player_client) @@ -92,7 +92,8 @@ /datum/job/advclass/hand/hand title = JOB_HAND - tutorial = "You have played blademaster and strategist to the Noble-Family for so long that you are a master tactician, something you exploit with potent conviction. Let no man ever forget whose ear you whisper into. You've killed more men with swords than any spymaster could ever claim to." + tutorial = "You have played blademaster and strategist to the Noble-Family for so long that you are a master tactician, something you exploit with potent conviction. \ + Let no man ever forget whose ear you whisper into. You've killed more men with swords than any spymaster could ever claim to." outfit = /datum/outfit/hand/handclassic category_tags = list(CTAG_HAND) cmode_music = 'sound/music/cmode/nobility/combat_noble.ogg' @@ -157,7 +158,8 @@ traits = list( TRAIT_MEDIUMARMOR, - TRAIT_DODGEEXPERT + TRAIT_DODGEEXPERT, + TRAIT_FLIP_JUMP ) /datum/outfit/hand/spymaster @@ -191,8 +193,9 @@ ) raw_attribute_list = list( STAT_INTELLIGENCE = 4, - STAT_PERCEPTION = 3, + STAT_PERCEPTION = 4, /datum/attribute/skill/combat/crossbows = 30, + /datum/attribute/skill/combat/firearms = 40, /datum/attribute/skill/combat/swords = 20, /datum/attribute/skill/misc/swimming = 30, /datum/attribute/skill/misc/climbing = 30, @@ -209,7 +212,7 @@ /datum/attribute_holder/sheet/job/advisor/old raw_attribute_list = list( STAT_INTELLIGENCE = 5, - STAT_PERCEPTION = 4, + STAT_PERCEPTION = 5, STAT_SPEED = -1, STAT_STRENGTH = -1, /datum/attribute/skill/combat/crossbows = 30, @@ -245,6 +248,8 @@ shirt = /obj/item/clothing/shirt/undershirt/fancy backr = /obj/item/storage/backpack/satchel/black backpack_contents = list( + /obj/item/weapon/scabbard/book, + scabbards = list(/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded), /obj/item/weapon/knife/dagger/steel = 1, /obj/item/reagent_containers/glass/bottle/poison = 1, /obj/item/paper/scroll/frumentarii/roundstart = 1 @@ -254,3 +259,128 @@ shoes = /obj/item/clothing/shoes/boots beltl = /obj/item/weapon/sword/rapier/caneblade/hand scabbards = list(/obj/item/weapon/scabbard/cane/hand) + +/datum/attribute_holder/sheet/job/huntsmaster + attribute_variance = list( + STAT_CONSTITUTION = list(0, 1) + ) + raw_attribute_list = list( + STAT_ENDURANCE = 3, + STAT_PERCEPTION = 3, + STAT_SPEED = 2, + /datum/attribute/skill/combat/crossbows = 30, + /datum/attribute/skill/combat/bows = 40, + /datum/attribute/skill/combat/firearms = 20, + /datum/attribute/skill/combat/unarmed = 35, + /datum/attribute/skill/combat/swords = 20, + /datum/attribute/skill/combat/knives = 30, + /datum/attribute/skill/misc/swimming = 40, + /datum/attribute/skill/misc/climbing = 40, + /datum/attribute/skill/misc/athletics = 40, + /datum/attribute/skill/combat/wrestling = 30, + /datum/attribute/skill/misc/reading = 20, + /datum/attribute/skill/misc/riding = 40, + /datum/attribute/skill/labor/taming = 40, + /datum/attribute/skill/misc/medicine = 20, + /datum/attribute/skill/misc/sneaking = 45, + /datum/attribute/skill/labor/butchering = 30, + /datum/attribute/skill/craft/tanning = 35, + /datum/attribute/skill/misc/sewing = 15, + /datum/attribute/skill/craft/traps = 40, + /datum/attribute/skill/craft/crafting = 30, + /datum/attribute/skill/labor/mathematics = 30 + ) + +/datum/attribute_holder/sheet/job/huntsmaster/old + raw_attribute_list = list( + STAT_ENDURANCE = 4, + STAT_PERCEPTION = 2, + STAT_INTELLIGENCE = 2, + STAT_CONSTITUTION = 2, + STAT_SPEED = -1, + STAT_STRENGTH = -1, + /datum/attribute/skill/combat/crossbows = 40, + /datum/attribute/skill/combat/bows = 50, + /datum/attribute/skill/combat/firearms = 20, + /datum/attribute/skill/combat/unarmed = 40, + /datum/attribute/skill/combat/swords = 30, + /datum/attribute/skill/combat/knives = 30, + /datum/attribute/skill/misc/swimming = 40, + /datum/attribute/skill/misc/climbing = 40, + /datum/attribute/skill/misc/athletics = 40, + /datum/attribute/skill/combat/wrestling = 30, + /datum/attribute/skill/misc/reading = 30, + /datum/attribute/skill/misc/riding = 50, + /datum/attribute/skill/labor/taming = 50, + /datum/attribute/skill/misc/medicine = 30, + /datum/attribute/skill/misc/sneaking = 50, + /datum/attribute/skill/labor/butchering = 40, + /datum/attribute/skill/craft/tanning = 50, + /datum/attribute/skill/misc/sewing = 25, + /datum/attribute/skill/craft/traps = 50, + /datum/attribute/skill/craft/crafting = 40, + /datum/attribute/skill/labor/mathematics = 30 + ) + +/datum/job/advclass/hand/huntsmaster + title = "Huntsmaster" + tutorial = " A hunter of the crown, you have tracked more living beings through the Wild than you can remember; \ + a loyal hound by your side, a powerful saiga underneath. You've learnt the rules of the hunt are no different from the court, just simpifed, primal. \ + The strong survive, the weak die. So, loose your bow over these lands, and let no man, no beast, and no demons think themselves safe from your arrows. \ + Your agents by your side, you will rid this town of ruffians, rooting out would-be's like one does with a lowly cabbit. \ + Let the world remember you, the Huntsmaster, as a true slayer of beast, monster, and man." + outfit = /datum/outfit/hand/huntsmaster + category_tags = list(CTAG_HAND) + cmode_music = 'sound/music/cmode/nobility/combat_noble.ogg' + exp_types_granted = list(EXP_TYPE_NOBLE) + + attribute_sheet = /datum/attribute_holder/sheet/job/huntsmaster + attribute_sheet_old = /datum/attribute_holder/sheet/job/huntsmaster/old + honorary = "Huntsmaster" + + traits = list( + TRAIT_KEENEYES, + TRAIT_LIGHT_STEP, + TRAIT_FORAGER + ) + +/datum/outfit/hand/huntsmaster + name = "Huntsmaster (Hand)" + head = /obj/item/clothing/head/roguehood/leather + shirt = /obj/item/clothing/armor/gambeson/hunts + backl = /obj/item/gun/ballistic/bow/long + backr = /obj/item/storage/backpack/satchel + wrists = /obj/item/clothing/wrists/bracers/leather + backpack_contents = list( + /obj/item/weapon/knife/dagger/steel = 1, + /obj/item/reagent_containers/glass/bottle/poison = 1, + /obj/item/paper/scroll/frumentarii/roundstart = 1, + /obj/item/flint = 1, + /obj/item/bait = 1, + /obj/item/flashlight/flare/torch/lantern/bronzelamptern = 1 + ) + armor = /obj/item/clothing/armor/leather/jerkin/belted/long + pants = /obj/item/clothing/pants/trou/leathertights + shoes = /obj/item/clothing/shoes/boots/hunter + beltl = /obj/item/ammo_holder/quiver/arrows + beltr = /obj/item/weapon/sword/rapier/dec + scabbards = list(/obj/item/weapon/scabbard/sword/royal) + +/datum/job/advclass/hand/huntsmaster/after_spawn(mob/living/carbon/human/H) + . = ..() + + if(!get_turf(H)) + addtimer(CALLBACK(src, PROC_REF(after_spawn), H), 0.5 SECONDS) + return + + if(!ishuman(H)) + return + + var/mob/living/simple_animal/hostile/retaliate/hound/pet = new(get_turf(H)) + + if(!pet) + return + + if(pet) + pet.tamed(H) + ADD_TRAIT(pet, TRAIT_CRITICAL_RESISTANCE, "huntsmaster_hound") diff --git a/code/modules/jobs/job_types/peasants/hunter.dm b/code/modules/jobs/job_types/peasants/hunter.dm index 4c0eb413fdf..fa8bf3ca34f 100644 --- a/code/modules/jobs/job_types/peasants/hunter.dm +++ b/code/modules/jobs/job_types/peasants/hunter.dm @@ -71,6 +71,7 @@ attribute_sheet_old = /datum/attribute_holder/sheet/job/hunter/old traits = list( + TRAIT_KEENEYES, TRAIT_FORAGER ) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5969f530b22..91b7a5dc31c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2529,6 +2529,8 @@ var/looktime = 5 SECONDS - (GET_MOB_ATTRIBUTE_VALUE(src, STAT_PERCEPTION) * 2) if(has_quirk(/datum/quirk/boon/keen_eye)) looktime *= 0.25 + if(HAS_TRAIT(src, TRAIT_KEENEYES)) + looktime *= 0.25 if(do_after(src, looktime)) // var/huhsneak SEND_GLOBAL_SIGNAL(COMSIG_MOB_ACTIVE_PERCEPTION, src) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/creacher/hound.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/creacher/hound.dm new file mode 100644 index 00000000000..e3c5b58dffc --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/creacher/hound.dm @@ -0,0 +1,127 @@ +/mob/living/simple_animal/hostile/retaliate/hound + icon = 'icons/roguetown/mob/monster/greyhound.dmi' + name = "hound" + desc = "Loyal beasts, tamed cousins of the common volfs, there is hardly a better friend to have with you in the wild, or lying next to you by a warm fire." + icon_state = "hh" + icon_living = "hh" + icon_dead = "hhd" + + speak_emote = list("barks", "whines") + emote_hear = list("barks.", "growls.") + emote_see = list("back goes stiff, head pointing.", "sniffs around.") + see_in_dark = 9 + move_to_delay = 2 + vision_range = 9 + aggro_vision_range = 9 + + botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/steak = 1, + /obj/item/natural/fur/volf = 1, + /obj/item/alch/bone = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/steak = 2, + /obj/item/natural/hide = 1, + /obj/item/natural/fur/volf = 2, + /obj/item/alch/sinew = 2, + /obj/item/alch/bone = 1) + perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/steak = 2, + /obj/item/reagent_containers/food/snacks/meat/ribs = 1, + /obj/item/natural/hide = 2, + /obj/item/natural/fur/volf = 3, + /obj/item/alch/sinew = 2, + /obj/item/alch/bone = 2) +// head_butcher = /obj/item/natural/head/volf + + indexed = TRUE + health = VOLF_HEALTH + 180 + maxHealth = VOLF_HEALTH + 180 + food_type = list(/obj/item/reagent_containers/food/snacks/meat, + /obj/item/bodypart, + /obj/item/organ) + + base_intents = list(/datum/intent/simple/bite) + attack_sound = list('sound/vo/mobs/vw/attack (1).ogg','sound/vo/mobs/vw/attack (2).ogg','sound/vo/mobs/vw/attack (3).ogg','sound/vo/mobs/vw/attack (4).ogg') + melee_damage_lower = 15 + melee_damage_upper = 20 + + base_constitution = 8 + base_strength = 7 + base_speed = 13 + + simple_detect_bonus = 20 + retreat_distance = 0 + minimum_distance = 0 + deaggroprob = 0 + defprob = 35 + defdrain = 5 + del_on_deaggro = FALSE + retreat_health = 0.4 + + dodgetime = 17 + stat_attack = UNCONSCIOUS + remains_type = /obj/effect/decal/remains/hound + body_eater = TRUE + + ///this mob was updated to new ai + + living_flags = MOVES_ON_ITS_OWN|CAN_BE_FIREMANNED + + ai_controller = /datum/ai_controller/volf + var/static/list/pet_commands = list( + /datum/pet_command/fish, + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/good_boy, + /datum/pet_command/follow, + /datum/pet_command/attack, + /datum/pet_command/fetch, + /datum/pet_command/play_dead, + /datum/pet_command/protect_owner, + /datum/pet_command/aggressive, + /datum/pet_command/calm, + ) + +/obj/effect/decal/remains/hound + name = "loyal remains" + gender = PLURAL + icon_state = "bones" + icon = 'icons/roguetown/mob/monster/greyhound.dmi' + +/mob/living/simple_animal/hostile/retaliate/hound/Initialize() + AddComponent(/datum/component/obeys_commands, pet_commands) // here due to signal overridings from pet commands // due to signal overridings from pet commands + . = ..() + AddComponent(/datum/component/ai_aggro_system) + AddElement(/datum/element/ai_flee_while_injured, 0.75, retreat_health) + + var/color = pick("brown", "black", "white") + icon_state = "hound_[color]" + icon_living = "hound_[color]" + icon_dead = "hound_[color]_dead" + + gender = MALE + if(prob(33)) + gender = FEMALE + ADD_TRAIT(src, TRAIT_CRITICAL_WEAKNESS, TRAIT_GENERIC) + update_appearance(UPDATE_OVERLAYS) + +/mob/living/simple_animal/hostile/retaliate/hound/death(gibbed) + ..() + update_appearance(UPDATE_OVERLAYS) + +/mob/living/simple_animal/hostile/retaliate/hound/get_sound(input) + switch(input) + if("aggro") + return pick('sound/vo/mobs/vw/aggro (1).ogg','sound/vo/mobs/vw/aggro (2).ogg') + if("pain") + return pick('sound/vo/mobs/vw/pain (1).ogg','sound/vo/mobs/vw/pain (2).ogg','sound/vo/mobs/vw/pain (3).ogg') + if("death") + return pick('sound/vo/mobs/vw/death (1).ogg','sound/vo/mobs/vw/death (2).ogg','sound/vo/mobs/vw/death (3).ogg','sound/vo/mobs/vw/death (4).ogg','sound/vo/mobs/vw/death (5).ogg') + if("idle") + return pick('sound/vo/mobs/vw/idle (1).ogg','sound/vo/mobs/vw/idle (2).ogg','sound/vo/mobs/vw/idle (3).ogg','sound/vo/mobs/vw/idle (4).ogg') + if("cidle") + return pick('sound/vo/mobs/vw/bark (1).ogg','sound/vo/mobs/vw/bark (2).ogg','sound/vo/mobs/vw/bark (3).ogg','sound/vo/mobs/vw/bark (4).ogg','sound/vo/mobs/vw/bark (5).ogg','sound/vo/mobs/vw/bark (6).ogg','sound/vo/mobs/vw/bark (7).ogg') + +/mob/living/simple_animal/hostile/retaliate/hound/taunted(mob/user) + emote("aggro") + return + +/mob/living/simple_animal/hostile/retaliate/hound/simple_limb_hit(zone) + return ..() diff --git a/code/modules/projectiles/guns/ballistic/powder/puffer.dm b/code/modules/projectiles/guns/ballistic/powder/puffer.dm index a35126dd963..919e9d43218 100644 --- a/code/modules/projectiles/guns/ballistic/powder/puffer.dm +++ b/code/modules/projectiles/guns/ballistic/powder/puffer.dm @@ -22,6 +22,22 @@ randomspread = 2 spread = 3 +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded + name = "puffer" + desc = "A result of Dwarven and Humen cooperation on the Eastern continent. It uses alchemical blastpowder to propel metal balls for devastating effect." + + sellprice = 200 + + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/barrel + + cocked = TRUE + wound = TRUE + bullet_rammed = TRUE + +/obj/item/gun/ballistic/powder/wheellock/puffer/conjured/Initialize(mapload) + . = ..() + reagents.add_reagent(/datum/reagent/blastpowder, powder_required) + /obj/item/gun/ballistic/powder/wheellock/puffer/conjured name = "puffer" desc = "A magically conjured copy of a eastern styled wheellock. \ diff --git a/icons/roguetown/clothing/special/hand.dmi b/icons/roguetown/clothing/special/hand.dmi index a5e19dea54c..3afc93880e6 100644 Binary files a/icons/roguetown/clothing/special/hand.dmi and b/icons/roguetown/clothing/special/hand.dmi differ diff --git a/icons/roguetown/clothing/special/onmob/hand.dmi b/icons/roguetown/clothing/special/onmob/hand.dmi index 9a1c3e15905..d9867887fb7 100644 Binary files a/icons/roguetown/clothing/special/onmob/hand.dmi and b/icons/roguetown/clothing/special/onmob/hand.dmi differ diff --git a/icons/roguetown/mob/monster/greyhound.dmi b/icons/roguetown/mob/monster/greyhound.dmi new file mode 100644 index 00000000000..4aae60b71b8 Binary files /dev/null and b/icons/roguetown/mob/monster/greyhound.dmi differ diff --git a/vanderlin.dme b/vanderlin.dme index 0f104123918..1b6f352b239 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3633,6 +3633,7 @@ #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\gaseous_form.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\headless.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\honeyspider.dm" +#include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\hound.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\lamia.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\creacher\minotaur.dm"