diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 8209b1b3375..e2f9285881c 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -134,7 +134,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \ if(current_armor["melee"] < 60) current_armor["melee"] = min(current_armor["melee"] + 10, 60) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") - qdel(src) + use(1) else to_chat(user, "You can't improve [C] any further.") return @@ -150,7 +150,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \ damage_absorption["fire"] = damage_absorption["fire"] - 0.05 damage_absorption["laser"] = damage_absorption["laser"] - 0.025 to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") - qdel(src) + use(1) D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open") D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates." if(damage_absorption["brute"] == 0.3) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 484151de797..2d11612ecde 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -599,7 +599,7 @@ BLIND // can't see anything .=1 else return 0 - if(accessories.len && (A.slot in list("utility","armband"))) + if(accessories.len && (A.slot in list("utility","armband","skullcodpiece","talisman"))) for(var/obj/item/clothing/accessory/AC in accessories) if(AC.slot == A.slot) return 0 diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 482a56756a7..70c2795690f 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -67,6 +67,7 @@ desc = "A military-grade gas mask that can be connected to an air supply." icon_state = "gas_mining" actions_types = list(/datum/action/item_action/adjust) + armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0) resistance_flags = FIRE_PROOF /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index dc0115dc73f..4aaddea1dde 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -391,6 +391,8 @@ icon_state = "skull" item_state = "skull" item_color = "skull" + slot = "skullcodpiece" + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5) /obj/item/clothing/accessory/necklace/talisman name = "bone talisman" @@ -398,6 +400,8 @@ icon_state = "talisman" item_state = "talisman" item_color = "talisman" + slot = "talisman" + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5) /obj/item/clothing/accessory/necklace/locket name = "gold locket" diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm index 4f456bb79da..a947cace8e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -77,5 +77,65 @@ stat_attack = 1 flying = TRUE robust_searching = 1 + var/fromtendril = FALSE loot = list() - butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) \ No newline at end of file + butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) + +/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/Initialize() + . = ..() + if(prob(1)) + if(prob(75)) + new /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing(loc) + else + new /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing(loc) + return INITIALIZE_HINT_QDEL + +/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing + name = "magmawing watcher" + desc = "When raised very close to lava, some watchers adapt to the extreme heat and use lava as both a weapon and wings." + icon_state = "watcher_magmawing" + icon_living = "watcher_magmawing" + icon_aggro = "watcher_magmawing" + icon_dead = "watcher_magmawing_dead" + maxHealth = 215 //Compensate for the lack of slowdown on projectiles with a bit of extra health + health = 215 + light_range = 3 + light_power = 2.5 + light_color = LIGHT_COLOR_ORANGE + projectiletype = /obj/item/projectile/temp/basilisk/magmawing + +/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing + name = "icewing watcher" + desc = "Very rarely, some watchers will eke out an existence far from heat sources. In the absence of warmth, they become icy and fragile but fire much stronger freezing blasts." + icon_state = "watcher_icewing" + icon_living = "watcher_icewing" + icon_aggro = "watcher_icewing" + icon_dead = "watcher_icewing_dead" + maxHealth = 170 + health = 170 + projectiletype = /obj/item/projectile/temp/basilisk/icewing + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable + +/obj/item/projectile/temp/basilisk/magmawing + name = "scorching blast" + icon_state = "lava" + damage = 5 + damage_type = BURN + nodamage = FALSE + temperature = 500 //Heats you up! + +/obj/item/projectile/temp/basilisk/magmawing/on_hit(atom/target, blocked = FALSE) + . = ..() + if(.) + var/mob/living/L = target + if (istype(L)) + L.adjust_fire_stacks(0.1) + L.IgniteMob() + +/obj/item/projectile/temp/basilisk/icewing + damage = 5 + damage_type = BURN + nodamage = FALSE + +/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril + fromtendril = TRUE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index 74a28c58c3f..030cac745d7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -218,7 +218,7 @@ // Legion /mob/living/simple_animal/hostile/asteroid/hivelord/legion name = "legion" - desc = "You can still see what was once a human under the shifting mass of corruption." + desc = "You can still see what was once a person under the shifting mass of corruption." icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "legion" icon_living = "legion" @@ -236,20 +236,45 @@ del_on_death = 1 stat_attack = 1 robust_searching = 1 + var/fromtendril = FALSE + var/dwarf_mob = FALSE var/mob/living/carbon/human/stored_mob +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/Initialize() + . = ..() + if(prob(5)) + new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(loc) + return INITIALIZE_HINT_QDEL + +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf + name = "dwarf legion" + desc = "You can still see what was once a midget under the shifting mass of corruption." + icon_state = "dwarf_legion" + icon_living = "dwarf_legion" + icon_aggro = "dwarf_legion" + icon_dead = "dwarf_legion" + maxHealth = 60 + health = 60 + speed = 2 //faster! + dwarf_mob = TRUE + +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril + fromtendril = TRUE + /mob/living/simple_animal/hostile/asteroid/hivelord/legion/death(gibbed) - if(can_die()) - visible_message("The skulls on [src] wail in anger as they flee from their dying host!") - var/turf/T = get_turf(src) - if(T) - if(stored_mob) - stored_mob.forceMove(get_turf(src)) - stored_mob = null - else - new /obj/effect/mob_spawn/human/corpse/charredskeleton(T) - // due to `del_on_death` - return ..(gibbed) + visible_message("The skulls on [src] wail in anger as they flee from their dying host!") + var/turf/T = get_turf(src) + if(T) + if(stored_mob) + stored_mob.forceMove(get_turf(src)) + stored_mob = null + else if(fromtendril) + new /obj/effect/mob_spawn/human/corpse/charredskeleton(T) + else if(dwarf_mob) + new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf(T) + else + new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested(T) + ..(gibbed) /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion @@ -286,8 +311,12 @@ /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H) visible_message("[name] burrows into the flesh of [H]!") - var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L = new(H.loc) - visible_message("[L] staggers to their feet!") + var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L + if(H.dna.GetSEState(DWARF)) //dwarf legions aren't just fluff! + L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) + else + L = new(H.loc) + visible_message("[L] staggers to [L.p_their()] feet!") H.death() H.adjustBruteLoss(1000) L.stored_mob = H @@ -337,3 +366,102 @@ husk = FALSE mob_species = /datum/species/skeleton mob_color = "#454545" + +//Legion infested mobs + +/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/dwarf/equip(mob/living/carbon/human/H) + . = ..() + H.dna.SetSEState(DWARF, 1) + H.update_mutations() + +/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() + var/type = pickweight(list("Miner" = 66, "Ashwalker" = 10, "Golem" = 10,"Clown" = 10, pick(list("Shadow", "YeOlde","Operative", "Cultist")) = 4)) + switch(type) + if("Miner") + mob_species = pickweight(list(/datum/species/human = 72, /datum/species/unathi = 28)) + uniform = /obj/item/clothing/under/rank/miner/lavaland + if (prob(4)) + belt = /obj/item/storage/belt/mining + else if(prob(10)) + belt = pickweight(list(/obj/item/pickaxe = 8, /obj/item/pickaxe/silver = 2, /obj/item/pickaxe/diamond = 1)) + else + belt = /obj/item/tank/emergency_oxygen/engi + if(mob_species != /datum/species/unathi) + shoes = /obj/item/clothing/shoes/workboots/mining + gloves = /obj/item/clothing/gloves/color/black + mask = /obj/item/clothing/mask/gas/explorer + if(prob(20)) + suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/goliath = 2)) + if(prob(30)) + r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/autoinjector/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 )) + if(prob(10)) + l_pocket = pickweight(list(/obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/autoinjector/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 )) + if("Ashwalker") + mob_species = /datum/species/unathi/ashwalker + uniform = /obj/item/clothing/under/gladiator/ash_walker + if(prob(95)) + head = /obj/item/clothing/head/helmet/gladiator + else + head = /obj/item/clothing/head/skullhelmet + suit = /obj/item/clothing/suit/armor/bone + if(prob(5)) + back = pickweight(list(/obj/item/twohanded/spear/bonespear = 3, /obj/item/twohanded/fireaxe/boneaxe = 2)) + if(prob(10)) + belt = /obj/item/storage/belt/mining + if(prob(30)) + r_pocket = /obj/item/kitchen/knife/combat/survival/bone + if(prob(30)) + l_pocket = /obj/item/kitchen/knife/combat/survival/bone + if("Clown") + name = pick(GLOB.clown_names) + outfit = /datum/outfit/job/clown + belt = null + backpack_contents = list() + if(prob(70)) + backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/megaphone = 1)) + if(prob(30)) + backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1))) + if(prob(10)) + l_pocket = pickweight(list(/obj/item/bikehorn/golden = 3, /obj/item/bikehorn/airhorn= 1 )) + if("Golem") + mob_species = pick(list(/datum/species/golem/adamantine, /datum/species/golem/plasma, /datum/species/golem/diamond, /datum/species/golem/gold, /datum/species/golem/silver, /datum/species/golem/plasteel, /datum/species/golem/titanium, /datum/species/golem/plastitanium)) + if(prob(30)) + glasses = pickweight(list(/obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/hud/health = 2, /obj/item/clothing/glasses/hud/diagnostic =2, /obj/item/clothing/glasses/science = 2, /obj/item/clothing/glasses/welding = 2, /obj/item/clothing/glasses/night = 1)) + if(prob(10)) + belt = pick(list(/obj/item/storage/belt/mining, /obj/item/storage/belt/utility/full)) + if(prob(50)) + neck = /obj/item/bedsheet/rd/royal_cape + if(prob(10)) + l_pocket = pick(list(/obj/item/crowbar/power, /obj/item/wrench/power, /obj/item/weldingtool/experimental)) + if("YeOlde") + mob_gender = FEMALE + uniform = /obj/item/clothing/under/maid + gloves = /obj/item/clothing/gloves/color/white + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/helmet/riot/knight + suit = /obj/item/clothing/suit/armor/riot/knight + back = /obj/item/shield/riot/buckler + belt = /obj/item/nullrod/claymore + r_pocket = /obj/item/tank/emergency_oxygen + mask = /obj/item/clothing/mask/breath + if("Operative") + id_job = "Operative" + outfit = /datum/outfit/syndicatecommandocorpse + if("Shadow") + mob_species = /datum/species/shadow + uniform = /obj/item/clothing/under/color/black + shoes = /obj/item/clothing/shoes/black + suit = /obj/item/clothing/suit/storage/labcoat + glasses = /obj/item/clothing/glasses/sunglasses/blindfold + back = /obj/item/tank/oxygen + mask = /obj/item/clothing/mask/breath + if("Cultist") + uniform = /obj/item/clothing/under/roman + suit = /obj/item/clothing/suit/hooded/cultrobes + head = /obj/item/clothing/head/culthood + suit_store = /obj/item/tome + r_pocket = /obj/item/restraints/legcuffs/bola/cult + l_pocket = /obj/item/melee/cultblade/dagger + glasses = /obj/item/clothing/glasses/hud/health/night + backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/unholywater = 1, /obj/item/cult_shift = 1, /obj/item/flashlight/flare = 1, /obj/item/stack/sheet/runed_metal = 15) + . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining/spawners.dm b/code/modules/mob/living/simple_animal/hostile/mining/spawners.dm index 9ef81c8b0ba..fe648e07f91 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/spawners.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/spawners.dm @@ -12,7 +12,7 @@ maxHealth = 250 max_mobs = 3 spawn_time = 300 //30 seconds default - mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher + mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril spawn_text = "emerges from" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 @@ -82,4 +82,4 @@ mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast /mob/living/simple_animal/hostile/spawner/lavaland/legion - mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion \ No newline at end of file + mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril \ No newline at end of file diff --git a/icons/mob/lavaland/watcher.dmi b/icons/mob/lavaland/watcher.dmi index 23960478b39..a357e82a13f 100644 Binary files a/icons/mob/lavaland/watcher.dmi and b/icons/mob/lavaland/watcher.dmi differ