diff --git a/code/__DEFINES/traits/definitions.dm b/code/__DEFINES/traits/definitions.dm index b94e1d8f965..471db7fd4b0 100644 --- a/code/__DEFINES/traits/definitions.dm +++ b/code/__DEFINES/traits/definitions.dm @@ -356,7 +356,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 @@ -458,6 +457,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 85784f687e6..8357741a0d9 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -198,6 +198,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, @@ -333,6 +334,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_grid_types.dm b/code/datums/components/storage/storage_grid_types.dm index 60263f1bfc5..90a733e40f9 100644 --- a/code/datums/components/storage/storage_grid_types.dm +++ b/code/datums/components/storage/storage_grid_types.dm @@ -44,6 +44,11 @@ screen_max_rows = 2 screen_max_columns = 1 +/datum/component/storage/concrete/grid/coin_pouch/book/hollow + max_items = 1 + max_w_class = WEIGHT_CLASS_BULKY + quickdraw = TRUE + /datum/component/storage/concrete/grid/keyring screen_max_rows = 2 screen_max_columns = 5 diff --git a/code/datums/components/storage/storage_types.dm b/code/datums/components/storage/storage_types.dm index 5d59c64a2f6..78e02f55547 100644 --- a/code/datums/components/storage/storage_types.dm +++ b/code/datums/components/storage/storage_types.dm @@ -33,7 +33,6 @@ else I.icon_state += "-sheathed" - /datum/component/storage/concrete/scabbard/knife/New(list/raw_args) . = ..() set_holdable(list(/obj/item/weapon/knife)) 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/clothing/belt/misc.dm b/code/modules/clothing/belt/misc.dm index 62a894095e7..7aab7132a9a 100644 --- a/code/modules/clothing/belt/misc.dm +++ b/code/modules/clothing/belt/misc.dm @@ -221,6 +221,15 @@ /obj/item/reagent_containers/food/snacks/hardtack, ) +/obj/item/storage/belt/pouch/book/hollow + name = "Tome of Justice" + desc = "This seems to be a special edition.." + icon_state = "handtome" + component_type = /datum/component/storage/concrete/grid/coin_pouch/book/hollow + populate_contents = list( + /obj/item/gun/ballistic/powder/wheellock/puffer/preloaded, + ) + /obj/item/storage/belt/pouch/coins/mid/Initialize() . = ..() var/obj/item/coin/silver/pile/H = new(loc) diff --git a/code/modules/crafting/quality_of_crafting/leatherworking.dm b/code/modules/crafting/quality_of_crafting/leatherworking.dm index 737c48c0e62..caf9fa64e84 100644 --- a/code/modules/crafting/quality_of_crafting/leatherworking.dm +++ b/code/modules/crafting/quality_of_crafting/leatherworking.dm @@ -798,7 +798,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, @@ -948,6 +948,16 @@ /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 = 1, + ) + craftdiff = 4 + /datum/repeatable_crafting_recipe/leather/standalone/gloves name = "hardened leather gloves" output = /obj/item/clothing/gloves/leather/advanced @@ -1069,7 +1079,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..e0f3bd17833 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,10 +212,11 @@ /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, + /datum/attribute/skill/combat/firearms = 40, /datum/attribute/skill/combat/swords = 20, /datum/attribute/skill/misc/swimming = 30, /datum/attribute/skill/misc/climbing = 30, @@ -247,10 +251,129 @@ 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/paper/scroll/frumentarii/roundstart = 1, + /obj/item/storage/belt/pouch/book/hollow ) armor = /obj/item/clothing/armor/gambeson/hand pants = /obj/item/clothing/pants/tights/colored/black 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, + /obj/item/storage/fancy/cigarettes/tinzig = 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) + . = ..() + + var/mob/living/simple_animal/hostile/retaliate/hound/pet = new(get_turf(H)) + + if(!pet) + return + + pet.tamed(H) + ADD_TRAIT(pet, TRAIT_CRITICAL_RESISTANCE, INNATE_TRAIT) diff --git a/code/modules/jobs/job_types/peasants/hunter.dm b/code/modules/jobs/job_types/peasants/hunter.dm index dd5f97ed224..33b151cc0d7 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 793c77c1344..8009cea5191 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2537,6 +2537,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..af2d3489b38 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/creacher/hound.dm @@ -0,0 +1,123 @@ +/mob/living/simple_animal/hostile/retaliate/hound + icon = 'icons/roguetown/mob/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, + ) + + 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/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("grey", "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) + +/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") diff --git a/code/modules/projectiles/guns/ballistic/powder/puffer.dm b/code/modules/projectiles/guns/ballistic/powder/puffer.dm index a35126dd963..8674b993a2d 100644 --- a/code/modules/projectiles/guns/ballistic/powder/puffer.dm +++ b/code/modules/projectiles/guns/ballistic/powder/puffer.dm @@ -22,32 +22,40 @@ randomspread = 2 spread = 3 -/obj/item/gun/ballistic/powder/wheellock/puffer/conjured - name = "puffer" - desc = "A magically conjured copy of a eastern styled wheellock. \ - It looks and functions exactly like the original, but seems to be held together by weak magick, it looks like it will crumble at any moment." - - sellprice = 0 //Yeah, Let's not sell this. +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded spawn_magazine_type = /obj/item/ammo_box/magazine/internal/barrel - ramrod_type = null + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/barrel cocked = TRUE wound = TRUE bullet_rammed = TRUE +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/Initialize(mapload) + . = ..() + reagents.add_reagent(/datum/reagent/blastpowder, powder_required) + +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/conjured + name = "puffer" + desc = "A magically conjured copy of a eastern styled wheellock. \ + It looks and functions exactly like the original, but seems to be held together by weak magick, it looks like it will crumble at any moment." + + sellprice = 0 //Yeah, Let's not sell this. + + ramrod_type = null + var/breaking = FALSE -/obj/item/gun/ballistic/powder/wheellock/puffer/conjured/Initialize(mapload) +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/conjured/Initialize(mapload) . = ..() reagents.add_reagent(/datum/reagent/blastpowder, powder_required) -/obj/item/gun/ballistic/powder/wheellock/puffer/conjured/can_shoot(mob/living/user) +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/conjured/can_shoot(mob/living/user) . = ..() return (. && !breaking) -/obj/item/gun/ballistic/powder/wheellock/puffer/conjured/after_firing(atom/target, mob/living/user, empty_chamber, from_firing, chamber_next_round) +/obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/conjured/after_firing(atom/target, mob/living/user, empty_chamber, from_firing, chamber_next_round) . = ..() if(!from_firing) return diff --git a/code/modules/spells/spell_types/undirected/conjure_item/puffer.dm b/code/modules/spells/spell_types/undirected/conjure_item/puffer.dm index 789678be897..a497a2c9bc7 100644 --- a/code/modules/spells/spell_types/undirected/conjure_item/puffer.dm +++ b/code/modules/spells/spell_types/undirected/conjure_item/puffer.dm @@ -7,7 +7,7 @@ associated_skill = /datum/attribute/skill/magic/holy cooldown_time = 2 MINUTES invocation_type = INVOCATION_NONE - item_type = /obj/item/gun/ballistic/powder/wheellock/puffer/conjured + item_type = /obj/item/gun/ballistic/powder/wheellock/puffer/preloaded/conjured item_duration = null item_outline ="#ababab" spell_type = SPELL_STAMINA //It is a way to balance it out since you are not a real miracle user. 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/clothing/storage.dmi b/icons/roguetown/clothing/storage.dmi index 5484aa1138d..22d016d9d52 100644 Binary files a/icons/roguetown/clothing/storage.dmi and b/icons/roguetown/clothing/storage.dmi differ diff --git a/icons/roguetown/mob/greyhound.dmi b/icons/roguetown/mob/greyhound.dmi new file mode 100644 index 00000000000..4aae60b71b8 Binary files /dev/null and b/icons/roguetown/mob/greyhound.dmi differ diff --git a/vanderlin.dme b/vanderlin.dme index 25d0e8de3e8..cec40c3d8a1 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3696,6 +3696,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"