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