diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 85a6f8c9e40..ffef9d9206d 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -244,6 +244,7 @@ /turf/simulated/floor/lava, /area/ruin/unpowered/ash_walkers) "aK" = ( +/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, /obj/structure/stone_tile/block/cracked{ dir = 8 }, @@ -251,7 +252,6 @@ dir = 1 }, /obj/structure/stone_tile, -/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck, /turf/simulated/floor/indestructible/boss/indoors, /area/ruin/unpowered/ash_walkers) "aM" = ( @@ -277,6 +277,7 @@ /area/ruin/unpowered/ash_walkers) "aP" = ( /obj/structure/stone_tile, +/obj/item/healthanalyzer/gem_analyzer, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aQ" = ( @@ -372,6 +373,7 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "bc" = ( +/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, /obj/structure/stone_tile/block{ dir = 4 }, @@ -381,7 +383,6 @@ /obj/structure/stone_tile{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen, /turf/simulated/floor/indestructible/boss/indoors, /area/ruin/unpowered/ash_walkers) "bd" = ( @@ -485,7 +486,7 @@ /obj/structure/stone_tile/cracked{ dir = 4 }, -/obj/item/rcd/preloaded, +/obj/item/stack/fireproof_rods/twentyfive, /turf/simulated/floor/indestructible/boss, /area/ruin/unpowered/ash_walkers) "bn" = ( @@ -1410,6 +1411,14 @@ /obj/effect/decal/cleanable/ashrune, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"wR" = ( +/obj/structure/stone_tile{ + dir = 1 + }, +/obj/effect/mapping_helpers/no_lava, +/obj/machinery/smartfridge/drying_rack/ash, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "zz" = ( /obj/effect/mapping_helpers/no_lava, /obj/structure/stone_tile{ @@ -1590,7 +1599,7 @@ ba bn bz ak -cb +wR df bX co diff --git a/code/datums/mapgen/LavalandGenerator.dm b/code/datums/mapgen/LavalandGenerator.dm index fec2ecf9b57..e8828241907 100644 --- a/code/datums/mapgen/LavalandGenerator.dm +++ b/code/datums/mapgen/LavalandGenerator.dm @@ -26,7 +26,8 @@ /obj/structure/flora/ash/stem_shroom = 2, /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, - /obj/structure/flora/ash/fireblossom = 2 + /obj/structure/flora/ash/fireblossom = 2, + /obj/structure/flora/ash/coaltree = 1 ) smoothing_iterations = 50 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index d3620082bb2..d0174fddcc4 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -713,6 +713,17 @@ REAGENT SCANNER origin_tech = "magnets=2;biotech=2" usesound = 'sound/items/deconstruct.ogg' +/obj/item/healthanalyzer/gem_analyzer + name = "eye of health" + icon = 'icons/obj/device.dmi' + icon_state = "Gem_analyzer" + item_state = "gem_analyzer" + desc = "Необычный самоцвет в форме сердца." + origin_tech = null + +/obj/item/healthanalyzer/gem_analyzer/attackby(obj/item/I, mob/user, params) + return ATTACK_CHAIN_BLOCKED_ALL + /obj/item/reagent_scanner name = "reagent scanner" desc = "A hand-held reagent scanner which identifies chemical agents and blood types." diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 36d211ea34b..790f833a94c 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -286,7 +286,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ if(!do_after(user, 5 SECONDS * I.toolspeed, src, category = DA_CAT_TOOL)) return ATTACK_CHAIN_PROCEED to_chat(user, span_notice("You cut the hair from [src].")) - var/obj/item/stack/sheet/hairlesshide/hide = new(drop_location(), amount) + var/obj/item/stack/sheet/hairlesshide/hide = new(drop_location(), 3 * amount) hide.add_fingerprint(user) qdel(src) return ATTACK_CHAIN_BLOCKED_ALL diff --git a/code/game/objects/items/tent.dm b/code/game/objects/items/tent.dm new file mode 100644 index 00000000000..b5bf7342363 --- /dev/null +++ b/code/game/objects/items/tent.dm @@ -0,0 +1,200 @@ +/obj/item/folded_tent + name = "primitive folded tent" + desc = "Сложенная палатка." + icon = 'icons/obj/tent.dmi' + icon_state = "tent_folded" + item_state = "tent_folded" + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + var/unfoldedtent_path = /obj/structure/tent + +/obj/item/folded_tent/attack_self(mob/user) + if(!do_after(user, 15 SECONDS, user)) + return + if(loc == user) + deploy_tent(user, get_turf(user)) + else + deploy_tent(user, get_turf(src)) + +/obj/item/folded_tent/pickup(mob/user) + if(contains(user)) + return FALSE + return ..() + +/obj/item/folded_tent/proc/deploy_tent(mob/user, atom/location) + var/obj/structure/tent/item_tent = new unfoldedtent_path(location) + item_tent.foldedtent_instance = src + user.drop_item_ground(src) + move_to_null_space() + return item_tent + +/obj/structure/tent + name = "Primitive tent" + desc = "Примитивная палатка, способная защитить от бури. Сделана из шкур голиафов." + icon = 'icons/obj/tent.dmi' + icon_state = "tent" + max_integrity = 50 + density = TRUE + anchored = TRUE + var/foldedtent_path = /obj/item/folded_tent + var/obj/item/folded_tent/foldedtent_instance = null + var/mob/living/carbon/human/occupant = null + +/obj/structure/tent/proc/perform_fold(mob/living/carbon/human/the_folder) + var/folding_tent = new foldedtent_path(get_turf(src)) + the_folder.put_in_hands(folding_tent) + +/obj/structure/tent/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(!do_after(usr, 5 SECONDS, usr)) + return + + if(over_object == usr && ishuman(usr) && !usr.incapacitated() && !HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) && !length(contents) && usr.Adjacent(src)) + usr.visible_message( + span_notice("[usr] folds up [src]."), + span_notice("You fold up [src]."), + ) + perform_fold(usr) + qdel(src) + return FALSE + + if(over_object == usr && ishuman(usr) && !usr.incapacitated() && usr.Adjacent(src)) + if(attempt_fold(usr)) + usr.visible_message( + span_notice("[usr] folds up [src]."), + span_notice("You fold up [src]."), + ) + perform_fold(usr) + qdel(src) + return FALSE + + return ..() + +/obj/structure/tent/proc/attempt_fold(mob/living/carbon/human/the_folder) + . = FALSE + if(!istype(the_folder)) + return + + if(LAZYLEN(contents)) + return + + return TRUE + +/obj/structure/tent/grab_attack(mob/living/grabber, atom/movable/grabbed_thing) + . = TRUE + if(grabber.grab_state < GRAB_AGGRESSIVE || !ismob(grabbed_thing)) + return . + + var/mob/target = grabbed_thing + if(occupant) + grabber.balloon_alert(grabber, "палатка занята!") + return . + + visible_message(span_notice("[grabber] starts putting [target] into [src].")) + if(!do_after(grabber, 2 SECONDS, target) || !target || !grabber || grabber.pulling != target || !grabber.Adjacent(src)) + return . + + target.forceMove(src) + occupant = target + +/obj/structure/tent/MouseDrop_T(atom/movable/O, mob/user, params) + if(O.loc == user) + return + + if(user.incapacitated() || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + + if(get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) + return + + if(!ismob(O)) + return + + if(isanimal(O) || issilicon(O)) + return + + if(!isturf(user.loc) || !isturf(O.loc)) + return + + if(occupant) + usr.balloon_alert(usr, "палатка занята!") + return TRUE + + var/mob/living/L = O + if(!istype(L) || L.buckled) + return + + if(L == user) + visible_message(span_notice("[user] starts climbing into the tent.")) + else + visible_message(span_notice("[user] starts putting [L.name] into the tent.")) + + . = TRUE + INVOKE_ASYNC(src, PROC_REF(put_in), L, user) + +/obj/structure/tent/Destroy() + for(var/mob/M in contents) + M.forceMove(get_turf(src)) + REMOVE_TRAIT(M, TRAIT_ASHSTORM_IMMUNE, "ash") + + return ..() + +/obj/structure/tent/proc/put_in(mob/living/L, mob/user) + if(!do_after(user, 2 SECONDS, L)) + return + + if(occupant) + user.balloon_alert(user, "палатка занята!") + return + + if(!L) + return + + L.forceMove(src) + occupant = L + ADD_TRAIT(L, TRAIT_ASHSTORM_IMMUNE, "ash") + +/obj/structure/tent/verb/move_inside() + set name = "Enter Tent" + set category = "Object" + set src in oview(1) + if(!ishuman(usr) || usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || usr.buckled) + return + + if(occupant) + usr.balloon_alert(usr, "палатка занята!") + return + + visible_message(span_notice("[usr] starts climbing into the tent.")) + put_in(usr, usr) + +/obj/structure/tent/verb/eject() + set name = "Eject Tent" + set category = "Object" + set src in oview(1) + + if(usr.default_can_use_topic(src) != UI_INTERACTIVE) + return + + if(usr.incapacitated() || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED)) + return + + go_out() + add_fingerprint(usr) + +/obj/structure/tent/relaymove(mob/user as mob) + go_out() + +/obj/structure/tent/proc/go_out() + if(!occupant) + return + + occupant.forceMove(loc) + if(!istype(occupant, /datum/species/unathi/draconid)) + REMOVE_TRAIT(occupant, TRAIT_ASHSTORM_IMMUNE, "ash") + occupant = null + +/obj/structure/tent/force_eject_occupant(mob/target) + go_out() + +/obj/structure/tent/attack_ai(mob/user) + return attack_hand(user) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 9451a19cd47..50fbc1ddb6c 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -89,7 +89,7 @@ item_state = "goliath_shield" materials = list() origin_tech = "materials=1;combat=3;biotech=2" - block_chance = 30 + block_chance = 45 obj_integrity = 380 max_integrity = 380 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 2d9b7ef9f96..d67c45a9f79 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -450,3 +450,29 @@ w_class = WEIGHT_CLASS_BULKY block_chance = 30 +/obj/item/kolotushka + name = "primitive kolotushka" + desc = "Простейшая дубина из кости, воплощает в себе силу природы и первобытную мощь." + icon_state = "kolotushka" + item_state = "kolotushka" + hitsound = 'sound/weapons/kolotushka_smash.ogg' + slot_flags = ITEM_SLOT_BELT + force = 3 + throwforce = 3 + w_class = WEIGHT_CLASS_NORMAL + var/stamina_damage = 22 + +/obj/item/kolotushka/afterattack(atom/target, mob/user, proximity, params, status) + if(!isliving(target) || !proximity || user.incapacitated() || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) + return + + var/mob/living/victim = target + if(isrobot(victim)) + if(prob(30)) + victim.flash_eyes(3 SECONDS) + victim.Stun(3 SECONDS) + + if(ishuman(victim)) + victim.apply_damage(stamina_damage, STAMINA, blocked = victim.getarmor(user.zone_selected, MELEE)) + if(prob(30)) + victim.Knockdown(3 SECONDS) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index fd275dccef0..20461905d0c 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -702,6 +702,14 @@ can_rotate = 0 resistance_flags = UNACIDABLE +/obj/structure/sink/puddle/Initialize(mapload) + . = ..() + + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + /obj/structure/sink/puddle/attack_hand(mob/user) flick("puddle-splash", src) @@ -731,6 +739,22 @@ return ..() +/obj/structure/sink/puddle/proc/on_entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) + SIGNAL_HANDLER + wash(arrived) + +/obj/structure/sink/puddle/proc/wash(atom/target) + if(isitem(target)) + var/obj/item/item = target + item.extinguish() + + if(isliving(target)) + var/mob/living/l_target = target + l_target.ExtinguishMob() + l_target.adjust_fire_stacks(-20) + to_chat(l_target, span_warning("You've been drenched in water!")) + + target.clean_blood() ////////////////////////////////// // Bathroom Fixture Items // diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index ac3749345c2..4b33fb8c584 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -18,7 +18,36 @@ desc = "Grey gloves without fingertips made from the hide of a dead arachnid found on lavaland. Makes wearer stronger in disarming ability." icon_state = "weaver_chitin" item_state = "weaver_chitin" - extra_knock_chance = 5 + extra_knock_chance = 20 + var/stamdamage_low = 10 + var/stamdamage_high = 15 + +/obj/item/clothing/gloves/fingerless/weaver/Touch(atom/A, proximity) + . = FALSE + if(!ishuman(loc)) + return FALSE + + var/mob/living/carbon/human/user = loc + if(!user.mind || user.mind.martial_art) + return FALSE + + if(user.a_intent != INTENT_HARM || !proximity || isturf(A)) + return FALSE + + var/damage = rand(user.dna.species.punchdamagelow + user.physiology.punch_damage_low, user.dna.species.punchdamagehigh + user.physiology.punch_damage_high) + var/stamindamage = rand(stamdamage_low, stamdamage_high) + if(ishuman(A)) + user.do_attack_animation(A, "kick") + playsound(get_turf(user), 'sound/effects/hit_punch.ogg', 50, 1, -1) + var/mob/living/carbon/human/target = A + var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected)) + add_attack_logs(user, target, "Melee attacked with weaver gloves") + + target.visible_message(span_danger("[user] smash [target] with weaver gloves!")) + + target.apply_damage(damage, BRUTE, affecting) + target.apply_damage(stamindamage, STAMINA, affecting) + return TRUE /obj/item/clothing/gloves/cyborg desc = "beep boop borp" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 32abf1fb95c..85ba6092d50 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -639,7 +639,7 @@ item_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/kitchen/knife/combat/survival, /obj/item/twohanded/kinetic_crusher, /obj/item/hierophant_club, /obj/item/twohanded/fireaxe/boneaxe) - armor = list("melee" = 40, "bullet" = 15, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot + armor = list("melee" = 40, "bullet" = 15, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/goliath body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS @@ -648,7 +648,7 @@ icon_state = "golhood" item_state = "golhood" desc = "A protective & concealing hood." - armor = list("melee" = 40, "bullet" = 15, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list("melee" = 40, "bullet" = 15, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 60) flags_inv = HIDEHAIR flags_cover = HEADCOVERSEYES diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 4dcd10981ba..92fc4cc364f 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -675,6 +675,21 @@ result = /obj/item/stack/medical/splint/tribal category = CAT_PRIMAL +/datum/crafting_recipe/primitive_surgical_kit + name = "Primitive surgical kit" + time = 30 + reqs = list(/obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/sinew = 3) + result = list(/obj/item/retractor/primitive_retractor, + /obj/item/hemostat/primitive_hemostat, + /obj/item/cautery/primitive_cautery, + /obj/item/scalpel/primitive_scalpel, + /obj/item/primitive_saw, + /obj/item/bonegel/primitive_bonegel, + /obj/item/FixOVein/primitive_FixOVein, + /obj/item/bonesetter/primitive_bonesetter) + category = CAT_PRIMAL + /datum/crafting_recipe/bonedagger name = "Bone Dagger" result = /obj/item/kitchen/knife/combat/survival/bone @@ -695,7 +710,7 @@ result = /obj/item/shield/riot/goliath time = 6 SECONDS reqs = list(/obj/item/stack/sheet/bone = 4, - /obj/item/stack/sheet/animalhide/goliath_hide = 3) + /obj/item/stack/sheet/animalhide/goliath_hide = 2) category = CAT_PRIMAL /datum/crafting_recipe/bonespear @@ -798,6 +813,10 @@ category = CAT_PRIMAL alert_admins_on_craft = TRUE +/datum/crafting_recipe/bonfire/coaltree + name = "Bonfire (coaltree)" + reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/coaltree_log = 5) + /datum/crafting_recipe/rake //Category resorting incoming name = "Rake" time = 30 @@ -1477,9 +1496,9 @@ time = 5 SECONDS reqs = list(/obj/item/clothing/suit/hooded/goliath = 1, /obj/item/stack/sheet/animalhide/goliath_hide = 2, //2 plates for the cloak plus 2 here plus 3 for plating the armor = 7 total - /obj/item/stack/sheet/animalhide/weaver_chitin = 10, - /obj/item/stack/sheet/bone = 8, - /obj/item/stack/sheet/sinew = 10) + /obj/item/stack/sheet/animalhide/weaver_chitin = 6, + /obj/item/stack/sheet/bone = 5, + /obj/item/stack/sheet/sinew = 5) category = CAT_PRIMAL /datum/crafting_recipe/pathtreads @@ -1551,7 +1570,7 @@ /obj/item/stack/sheet/mineral/diamond = 5 ) result = list(/obj/item/pickaxe/diamond) - + /datum/crafting_recipe/drone name = "Inactive Drone" result = list(/obj/item/inactive_drone) @@ -1611,3 +1630,28 @@ category = CAT_ROBOT always_availible = FALSE time = 1 SECONDS + +/datum/crafting_recipe/ashrack + name = "Primitive drying rack" + result = /obj/machinery/smartfridge/drying_rack/ash + time = 15 SECONDS + reqs = list(/obj/item/stack/sheet/wood = 2, + /obj/item/stack/sheet/sinew = 1) + category = CAT_PRIMAL + +/datum/crafting_recipe/tent + name = "Primitive tent" + result = /obj/item/folded_tent + time = 15 SECONDS + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 2, + /obj/item/stack/sheet/sinew = 1) + category = CAT_PRIMAL + +/datum/crafting_recipe/kolotushka + name = "Primitive kolotushka" + result = /obj/item/kolotushka + time = 4 SECONDS + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/animalhide/weaver_chitin = 2) + category = CAT_PRIMAL diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 1d40095fe2e..306e0738fc9 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -57,6 +57,21 @@ cutlet.add_fingerprint(user) qdel(src) +/obj/item/reagent_containers/food/snacks/meat/burn() + visible_message(span_notice("[src] finishes cooking!")) + new /obj/item/reagent_containers/food/snacks/roasted_meat(loc) + qdel(src) + +/obj/item/reagent_containers/food/snacks/roasted_meat + name = "roasted meat" + desc = "Хорошо прожаренный стейк." + resistance_flags = LAVA_PROOF | FIRE_PROOF + icon_state = "roasted_meat" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + list_reagents = list("protein" = 4, "vitamin" = 1) + tastes = list("meat" = 1) + foodtype = MEAT /obj/item/reagent_containers/food/snacks/meat/syntiflesh name = "synthetic meat" @@ -420,6 +435,11 @@ list_reagents = list("protein" = 2, "toxin" = 2) tastes = list("cobwebs" = 1, "creepy motion" = 1) +/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg/burn() + visible_message(span_notice("[src] finishes cooking!")) + new /obj/item/reagent_containers/food/snacks/roasted_spiderleg(loc) + qdel(src) + /obj/item/reagent_containers/food/snacks/raw_bacon name = "raw bacon" desc = "God's gift to man in uncooked form." @@ -443,7 +463,7 @@ tastes = list("tough meat" = 1) /obj/item/reagent_containers/food/snacks/monstermeat/goliath/burn() - visible_message("[src] finishes cooking!") + visible_message(span_notice("[src] finishes cooking!")) new /obj/item/reagent_containers/food/snacks/goliath_steak(loc) qdel(src) @@ -456,7 +476,7 @@ tastes = list("meat" = 1) /obj/item/reagent_containers/food/snacks/monstermeat/goldgrub/burn() - visible_message("[src] finishes cooking!") + visible_message(span_notice("[src] finishes cooking!")) new /obj/item/reagent_containers/food/snacks/goldgrubmeat(loc) qdel(src) @@ -700,6 +720,17 @@ tastes = list("meat" = 1) foodtype = MEAT +/obj/item/reagent_containers/food/snacks/roasted_spiderleg + name = "roasted spider leg" + desc = "Жаренная лапка паука, теперь оно точно мертво." + resistance_flags = LAVA_PROOF | FIRE_PROOF + icon_state = "roasted_spiderleg" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + list_reagents = list("protein" = 4, "vitamin" = 1) + tastes = list("cobwebs" = 1, "meat" = 1) + foodtype = MEAT + /obj/item/reagent_containers/food/snacks/goldgrubmeat name= "goldgrub steak" desc = "Cooked intestines with goldgrub skin, retrieved from a Goldgrub. Legends say it is valuable in traditional medicines." diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index b9efa4e202a..216456986c4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -789,6 +789,8 @@ active_power_usage = 200 can_dry = TRUE visible_contents = FALSE + var/primitive = FALSE //used for energy consuming stuff + var/drying_timer = 1 icon_lightmask = null /obj/machinery/smartfridge/drying_rack/Initialize(mapload) @@ -810,6 +812,9 @@ return /obj/machinery/smartfridge/drying_rack/power_change(forced = FALSE) + if(primitive) + return + if(powered() && anchored) stat &= ~NOPOWER else @@ -839,10 +844,10 @@ switch(action) if("drying") drying = !drying - use_power = drying ? ACTIVE_POWER_USE : IDLE_POWER_USE + if(!primitive) + use_power = drying ? ACTIVE_POWER_USE : IDLE_POWER_USE update_icon(UPDATE_OVERLAYS) - /obj/machinery/smartfridge/drying_rack/update_overlays() . = list() if(drying) @@ -852,9 +857,14 @@ /obj/machinery/smartfridge/drying_rack/process() - if(drying && rack_dry())//no need to update unless something got dried - update_icon(UPDATE_OVERLAYS) - + ..() + if(drying)//no need to update unless something got dried + if(drying_timer && length(contents)) + drying_timer-- + else + rack_dry() + drying_timer = initial(drying_timer) + update_icon(UPDATE_OVERLAYS) /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) . = ..() @@ -903,3 +913,25 @@ SStgui.update_uis(src) return TRUE return FALSE + +/obj/machinery/smartfridge/drying_rack/ash + name = "primitive drying rack" + desc = "Самодельная сушилка, используется для сушки кожи и еды." + icon_state = "primitive-drying-rack" + use_power = NO_POWER_USE + can_dry = FALSE //trust me + drying = TRUE + idle_power_usage = 0 + active_power_usage = 0 + drying_timer = 8 + primitive = TRUE + +/obj/machinery/smartfridge/drying_rack/ash/update_overlays() + overlays.Cut() + if(length(contents)) + overlays += "primitive-drying-rack_leather" + +/obj/machinery/smartfridge/drying_rack/ash/on_deconstruction() + new /obj/item/stack/sheet/wood(loc, 2) + new /obj/item/stack/sheet/sinew(loc, 1) + ..() diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index ec3ba9b9d1c..8e275d62d2a 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -178,6 +178,21 @@ regrowth_time_low = 2500 regrowth_time_high = 4000 +/obj/structure/flora/ash/coaltree + icon_state = "coaltree" + name = "coaltree" + desc = "Небольшое мрачное дерево, растущее на просторах такой же мрачной планеты." + harvested_name = "coaltree stump" + harvested_desc = "Голый ствол дерева, оставшийся без своей уродливой кроны." + harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/coaltree_log + harvest_amount_high = 5 + harvest_time = 40 + harvest_message_low = "Вы обрезаете небольшое дерево." + harvest_message_med = "Вы обрезаете дерево среднего размера." + harvest_message_high = "Вы обрезаете большое дерево." + regrowth_time_low = 4000 + regrowth_time_high = 6000 + /obj/item/reagent_containers/food/snacks/grown/ash_flora name = "mushroom shavings" desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." @@ -232,6 +247,35 @@ seed = /obj/item/seeds/lavaland/fireblossom wine_power = 0.4 +/obj/item/reagent_containers/food/snacks/grown/ash_flora/coaltree_log + name = "coaltree log" + desc = "Бревно угледрева, на ощупь мягкое." + icon_state = "coaltree_log" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + item_state = "coaltree_log" + seed = /obj/item/seeds/lavaland/coaltree + wine_power = 0.5 + item_flags = NOBLUDGEON + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/reagent_containers/food/snacks/grown/ash_flora/coaltree_log/attackby(obj/item/I, mob/user, params) + if(is_sharp(I)) + if(!isturf(loc)) + add_fingerprint(user) + to_chat(user, span_warning("You cannot chop [src] [ismob(loc) ? "in inventory" : "in [loc]"].")) + return ATTACK_CHAIN_PROCEED + + to_chat(user, span_notice("You have chopped [src] into planks.")) + var/seed_modifier = 0 + if(seed) + seed_modifier = round(seed.potency / 25) + var/obj/item/stack/planks = new /obj/item/stack/sheet/wood(loc, 1 + seed_modifier) + transfer_fingerprints_to(planks) + planks.add_fingerprint(user) + qdel(src) + return ATTACK_CHAIN_BLOCKED_ALL + //SEEDS /obj/item/seeds/lavaland @@ -316,6 +360,18 @@ genes = list(/datum/plant_gene/trait/fire_resistance, /datum/plant_gene/trait/glow/yellow) reagents_add = list("tinlux" = 0.04, "nutriment" = 0.03, "carbon" = 0.05) +/obj/item/seeds/lavaland/coaltree + name = "pack of coaltree seeds" + desc = "These seeds grow into coaltree." + icon_state = "seed-coaltree" + species = "coaltree" + plantname = "Coaltree" + growthstages = 3 + growing_icon = 'icons/obj/hydroponics/growing.dmi' + product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/coaltree_log + genes = list(/datum/plant_gene/trait/fire_resistance) + reagents_add = list("nutriment" = 0.04, "coaltree_extract" = 0.1) + //CRAFTING //what you can craft with these things diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index b9a6169ab4b..0fd7109c0b7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -245,8 +245,7 @@ pre_attack_icon = "Goliath_preattack" throw_message = "does nothing to the rocky hide of the" crusher_loot = /obj/item/crusher_trophy/eyed_tentacle - loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath = 2, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/animalhide/goliath_hide = 2, /obj/item/stack/sheet/bone = 2) crusher_drop_mod = 30 wander = FALSE var/list/cached_tentacle_turfs diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index 1a4211d78f3..d9105d1aeb9 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -111,6 +111,23 @@ range = 10 damage = 25 damage_type = BRUTE + var/faction_bonus_damage = 13 + var/nemesis_factions = list("mining", "boss") + var/nemesis_faction = FALSE + +/obj/item/projectile/bullet/reusable/arrow/prehit(atom/target) + var/mob/living/H = target + + if(!ismob(H) || !LAZYLEN(nemesis_factions)) + return + + for(var/faction in H.faction) + if(faction in nemesis_factions) + nemesis_faction = TRUE + damage += faction_bonus_damage + break + + . = ..() /obj/item/projectile/bullet/reusable/arrow/bone //A fully upgraded normal arrow; it's got the stats to show. Still *less* damage than a slug, slower, and with negative AP. Only for bone bow! name = "bone-tipped arrow" @@ -119,11 +136,15 @@ range = 12 damage = 45 armour_penetration = -10 + faction_bonus_damage = 23 /obj/item/ammo_casing/caseless/arrow name = "arrow" desc = "Stab, stab, stab." icon_state = "arrow" + item_state = "arrow" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' force = 10 projectile_type = /obj/item/projectile/bullet/reusable/arrow muzzle_flash_effect = null @@ -133,6 +154,9 @@ name = "bone-tipped arrow" desc = "An arrow made from bone, wood, and sinew. Sturdy and sharp." icon_state = "bone_arrow" + item_state = "bone_arrow" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' force = 12 projectile_type = /obj/item/projectile/bullet/reusable/arrow/bone caliber = "bone_arrow" diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index a1afbe1724c..41abf5cdf89 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -192,6 +192,8 @@ desc = "It's got a tip for you - get the point?" icon_state = "bolt" item_state = "bolt" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' throwforce = 20 w_class = WEIGHT_CLASS_SMALL sharp = TRUE @@ -205,6 +207,9 @@ name = "makeshift bolt" desc = "A sharpened metal rod that can be fired out of a crossbow." icon_state = "metal-rod" + item_state = "metal-rod" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' throwforce = 10 /obj/item/arrow/proc/modify_arrow() diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 6cd40966d6d..231e7a4216e 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -370,6 +370,27 @@ M.reagents.remove_reagent(R.id,1) return ..() | update_flags +/datum/reagent/medicine/coaltree_extract + name = "Coaltree extract" + id = "coaltree_extract" + description = "Экстракт полученный из угледрева, выводит из организма токсины ценой больших мучений." + reagent_state = LIQUID + metabolization_rate = 0.4 * REAGENTS_METABOLISM + color = "#000000" + taste_description = "ash" + +/datum/reagent/medicine/coaltree_extract/on_mob_life(mob/living/M) + var/update_flags = STATUS_UPDATE_NONE + update_flags |= M.adjustToxLoss(-3, FALSE) + update_flags |= M.adjustBruteLoss(1, FALSE) + if(prob(10)) + to_chat(M, span_warning("Ваша кожа покрывается кровавыми волдырями.")) + if(prob(50)) + for(var/datum/reagent/R in M.reagents.reagent_list) + if(R != src) + M.reagents.remove_reagent(R.id,1) + return ..() | update_flags + /datum/reagent/medicine/omnizine name = "Omnizine" id = "omnizine" diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 77fd9e7a5f6..a0a4fb5bad5 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -10,12 +10,14 @@ name = "saw bone" begin_sound = list( TOOL_SAW = 'sound/surgery/saw1.ogg', + /obj/item/primitive_saw = 'sound/surgery/scalpel1.ogg', TOOL_WIRECUTTER = 'sound/surgery/scalpel1.ogg', /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', ) end_sound = 'sound/surgery/amputation.ogg' allowed_tools = list( TOOL_SAW = 100, + /obj/item/primitive_saw = 100, /obj/item/hatchet = 90, TOOL_WIRECUTTER = 70 ) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index d639b945111..a4c9bc53116 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -261,11 +261,13 @@ begin_sound = list( TOOL_SAW = 'sound/surgery/saw1.ogg', /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', + /obj/item/primitive_saw = 'sound/surgery/scalpel1.ogg', /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', ) end_sound = 'sound/surgery/amputation.ogg' allowed_tools = list( TOOL_SAW = 100, + /obj/item/primitive_saw = 100, /obj/item/hatchet = 90, /obj/item/melee/arm_blade = 75 ) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 77a40efd088..58f09883216 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -812,6 +812,7 @@ allowed_tools = list( TOOL_SAW = 100, /obj/item/melee/energy/sword/cyborg/saw = 100, + /obj/item/primitive_saw = 100, /obj/item/hatchet = 90, /obj/item/wirecutters = 70 ) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 83b5c23b8f7..37be88b85f1 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -26,6 +26,15 @@ w_class = WEIGHT_CLASS_TINY toolspeed = 0.5 +/obj/item/retractor/primitive_retractor + name = "primitive bone retractor" + desc = "Retracts stuff." + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_retractor" + item_state = "primitive_retractor" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/hemostat name = "hemostat" desc = "You think you have seen this before." @@ -54,6 +63,15 @@ desc = "Tiny servos power a pair of pincers to stop bleeding." toolspeed = 0.5 +/obj/item/hemostat/primitive_hemostat + name = "primitive hemostat" + desc = "You think you have seen this before." + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_hemostat" + item_state = "primitive_hemostat" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/cautery name = "cautery" desc = "This stops bleeding." @@ -75,6 +93,15 @@ desc = "A heated element that cauterizes wounds." toolspeed = 0.5 +/obj/item/cautery/primitive_cautery + name = "primitive cautery" + desc = "This stops bleeding." + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_cautery" + item_state = "primitive_cautery" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/surgicaldrill name = "surgical drill" desc = "You can drill using this item. You dig?" @@ -152,6 +179,15 @@ desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." toolspeed = 0.5 +/obj/item/scalpel/primitive_scalpel + name = "primitive scalpel" + desc = "Cut, cut, and once more cut." + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_scalpel" + item_state = "primitive_scalpel" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /* * Researchable Scalpels */ @@ -241,6 +277,31 @@ w_class = WEIGHT_CLASS_SMALL toolspeed = 0.5 +/obj/item/primitive_saw + name = "primitive circular saw" + desc = "For heavy duty cutting." + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_saw" + item_state = "primitive_saw" + hitsound = 'sound/weapons/slice.ogg' + mob_throw_hit_sound = 'sound/weapons/pierce.ogg' + flags = CONDUCT + force = 15.0 + sharp = 1 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 9.0 + throw_speed = 3 + throw_range = 5 + embed_chance = 20 + embedded_ignore_throwspeed_threshold = TRUE + attack_verb = list("attacked", "slashed", "sawed", "cut") + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + +/obj/item/primitive_saw/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT) + //misc, formerly from code/defines/weapons.dm /obj/item/bonegel name = "bone gel" @@ -260,6 +321,14 @@ /obj/item/bonegel/augment toolspeed = 0.5 +/obj/item/bonegel/primitive_bonegel + name = "primitive bone gel" + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_bonegel" + item_state = "primitive_bonegel" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/FixOVein name = "FixOVein" icon = 'icons/obj/surgery.dmi' @@ -278,6 +347,14 @@ /obj/item/FixOVein/augment toolspeed = 0.5 +/obj/item/FixOVein/primitive_FixOVein + name = "primitive FixOVein" + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_fixovein" + item_state = "primitive_fixovein" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/bonesetter name = "bone setter" icon = 'icons/obj/surgery.dmi' @@ -306,6 +383,14 @@ /obj/item/bonesetter/augment toolspeed = 0.5 +/obj/item/bonesetter/primitive_bonesetter + name = "primitive bone setter" + icon = 'icons/obj/surgery.dmi' + icon_state = "primitive_bonesetter" + item_state = "primitive_bonesetter" + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + /obj/item/surgical_drapes name = "surgical drapes" desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 90f04c72f47..5ce2281f2e3 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 47e1359325f..66073ee3f6c 100644 Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 005f11926b3..d4f0f999619 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 96176eec0f5..5c62a174116 100755 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 6a85c0bdcc6..947d58a8aaf 100755 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index de6221138cd..7c1ba685ad8 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index ac0fda9d2df..68813b20b64 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 134e92be60c..a69ff80dc10 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi index bcaad08e1d7..d9a3c98d77c 100644 Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 4265aa70d3d..d857ca20d25 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index f5191611985..20e6d0ae8ce 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lavaland/ash_flora.dmi b/icons/obj/lavaland/ash_flora.dmi index 61c6155ca25..55f01878d2d 100644 Binary files a/icons/obj/lavaland/ash_flora.dmi and b/icons/obj/lavaland/ash_flora.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 91d3fe17d43..40337084c29 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/tent.dmi b/icons/obj/tent.dmi new file mode 100644 index 00000000000..f74c1e71979 Binary files /dev/null and b/icons/obj/tent.dmi differ diff --git a/icons/obj/weapons/ammo.dmi b/icons/obj/weapons/ammo.dmi index 0e5c1545a30..f118d5aa100 100644 Binary files a/icons/obj/weapons/ammo.dmi and b/icons/obj/weapons/ammo.dmi differ diff --git a/icons/obj/weapons/projectile.dmi b/icons/obj/weapons/projectile.dmi index 4dd37d84e0f..08d60d81da1 100644 Binary files a/icons/obj/weapons/projectile.dmi and b/icons/obj/weapons/projectile.dmi differ diff --git a/paradise.dme b/paradise.dme index 9b96ab95328..aee205beb68 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1153,6 +1153,7 @@ #include "code\game\objects\items\mixing_bowl.dm" #include "code\game\objects\items\random_items.dm" #include "code\game\objects\items\shooting_range.dm" +#include "code\game\objects\items\tent.dm" #include "code\game\objects\items\theft_items.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" diff --git a/sound/weapons/kolotushka_smash.ogg b/sound/weapons/kolotushka_smash.ogg new file mode 100644 index 00000000000..43ba6e50b54 Binary files /dev/null and b/sound/weapons/kolotushka_smash.ogg differ