Splits mining_mobs.dm into separate files
This commit is contained in:
@@ -85,7 +85,7 @@
|
||||
/obj/item/organ/heart/gland/spiderman = 5,
|
||||
/obj/item/organ/heart/gland/ventcrawling = 1,
|
||||
/obj/item/organ/body_egg/alien_embryo = 1,
|
||||
/obj/item/organ/hivelord_core = 2)
|
||||
/obj/item/organ/regenerative_core = 2)
|
||||
lootcount = 3
|
||||
|
||||
/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner
|
||||
|
||||
10
code/game/objects/items/weapons/storage/belt.dm.rej
Normal file
10
code/game/objects/items/weapons/storage/belt.dm.rej
Normal file
@@ -0,0 +1,10 @@
|
||||
diff a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm (rejected hunks)
|
||||
@@ -200,7 +200,7 @@
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/weapon/ore,
|
||||
/obj/item/weapon/reagent_containers/food/drinks,
|
||||
- /obj/item/organ/hivelord_core,
|
||||
+ /obj/item/organ/regenerative_core,
|
||||
/obj/item/device/wormhole_jaunter,
|
||||
/obj/item/weapon/storage/bag/plants,
|
||||
/obj/item/stack/marker_beacon
|
||||
@@ -66,10 +66,10 @@
|
||||
|
||||
/datum/export/organ/hivelord
|
||||
cost = 1500
|
||||
unit_name = "active hivelord core"
|
||||
export_types = list(/obj/item/organ/hivelord_core)
|
||||
unit_name = "active regenerative core"
|
||||
export_types = list(/obj/item/organ/regenerative_core)
|
||||
|
||||
/datum/export/organ/alien/plasmavessel/get_cost(obj/item/organ/hivelord_core/C)
|
||||
/datum/export/organ/alien/plasmavessel/get_cost(obj/item/organ/regenerative_core/C)
|
||||
if(C.inert)
|
||||
return ..() / 3
|
||||
if(C.preserved)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
name = "goliath cloak"
|
||||
icon_state = "goliath_cloak"
|
||||
desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits."
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear, /obj/item/weapon/twohanded/bonespear, /obj/item/organ/hivelord_core/legion, /obj/item/weapon/kitchen/knife/combat/bone, /obj/item/weapon/kitchen/knife/combat/survival)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear, /obj/item/weapon/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/weapon/kitchen/knife/combat/bone, /obj/item/weapon/kitchen/knife/combat/survival)
|
||||
armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 60, acid = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot
|
||||
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
time = 40
|
||||
reqs = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/steak/goliath = 1,
|
||||
/obj/item/organ/hivelord_core/legion = 1,
|
||||
/obj/item/organ/regenerative_core/legion = 1,
|
||||
/datum/reagent/consumable/ketchup = 2,
|
||||
/datum/reagent/consumable/capsaicin = 2
|
||||
)
|
||||
|
||||
39
code/modules/mining/equipment/goliath_hide.dm
Normal file
39
code/modules/mining/equipment/goliath_hide.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide
|
||||
name = "goliath hide plates"
|
||||
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "goliath_hide"
|
||||
flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
layer = MOB_LAYER
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag)
|
||||
if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/hooded/explorer) || istype(target, /obj/item/clothing/head/hooded/explorer))
|
||||
var/obj/item/clothing/C = target
|
||||
var/list/current_armor = C.armor
|
||||
if(current_armor.["melee"] < 60)
|
||||
current_armor.["melee"] = min(current_armor.["melee"] + 10, 60)
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
use(1)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't improve [C] any further!</span>")
|
||||
return
|
||||
if(istype(target, /obj/mecha/working/ripley))
|
||||
var/obj/mecha/working/ripley/D = target
|
||||
if(D.hides < 3)
|
||||
D.hides++
|
||||
D.armor["melee"] = min(D.armor["melee"] + 10, 70)
|
||||
D.armor["bullet"] = min(D.armor["bullet"] + 5, 50)
|
||||
D.armor["laser"] = min(D.armor["laser"] + 5, 50)
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
D.update_icon()
|
||||
if(D.hides == 3)
|
||||
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - its pilot must be an experienced monster hunter."
|
||||
else
|
||||
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't improve [D] any further!</span>")
|
||||
return
|
||||
128
code/modules/mining/equipment/regenerative_core.dm
Normal file
128
code/modules/mining/equipment/regenerative_core.dm
Normal file
@@ -0,0 +1,128 @@
|
||||
/*********************Hivelord stabilizer****************/
|
||||
/obj/item/weapon/hivelordstabilizer
|
||||
name = "stabilizing serum"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle19"
|
||||
desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=3"
|
||||
|
||||
/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user)
|
||||
var/obj/item/organ/regenerative_core/C = M
|
||||
if(!istype(C, /obj/item/organ/regenerative_core))
|
||||
to_chat(user, "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>")
|
||||
return ..()
|
||||
|
||||
C.preserved()
|
||||
to_chat(user, "<span class='notice'>You inject the [M] with the stabilizer. It will no longer go inert.</span>")
|
||||
qdel(src)
|
||||
|
||||
/************************Hivelord core*******************/
|
||||
/obj/item/organ/regenerative_core
|
||||
name = "regenerative core"
|
||||
desc = "All that remains of a hivelord. It can be used to heal completely, but it will rapidly decay into uselessness."
|
||||
icon_state = "roro core 2"
|
||||
flags = NOBLUDGEON
|
||||
slot = "hivecore"
|
||||
force = 0
|
||||
actions_types = list(/datum/action/item_action/organ_action/use)
|
||||
var/inert = 0
|
||||
var/preserved = 0
|
||||
|
||||
/obj/item/organ/regenerative_core/Initialize()
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, .proc/inert_check), 2400)
|
||||
|
||||
/obj/item/organ/regenerative_core/proc/inert_check()
|
||||
if(!preserved)
|
||||
go_inert()
|
||||
|
||||
/obj/item/organ/regenerative_core/proc/preserved(implanted = 0)
|
||||
inert = FALSE
|
||||
preserved = TRUE
|
||||
update_icon()
|
||||
desc = "All that remains of a hivelord. It is preserved, allowing you to use it to heal completely without danger of decay."
|
||||
if(implanted)
|
||||
SSblackbox.add_details("hivelord_core", "[type]|implanted")
|
||||
else
|
||||
SSblackbox.add_details("hivelord_core", "[type]|stabilizer")
|
||||
|
||||
/obj/item/organ/regenerative_core/proc/go_inert()
|
||||
inert = TRUE
|
||||
name = "decayed regenerative core"
|
||||
desc = "All that remains of a hivelord. It has decayed, and is completely useless."
|
||||
SSblackbox.add_details("hivelord_core", "[type]|inert")
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/regenerative_core/ui_action_click()
|
||||
if(inert)
|
||||
to_chat(owner, "<span class='notice'>[src] breaks down as it tries to activate.</span>")
|
||||
else
|
||||
owner.revive(full_heal = 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/regenerative_core/on_life()
|
||||
..()
|
||||
if(owner.health < HEALTH_THRESHOLD_CRIT)
|
||||
ui_action_click()
|
||||
|
||||
/obj/item/organ/regenerative_core/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(inert)
|
||||
to_chat(user, "<span class='notice'>[src] has decayed and can no longer be used to heal.</span>")
|
||||
return
|
||||
else
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>[src] are useless on the dead.</span>")
|
||||
return
|
||||
if(H != user)
|
||||
H.visible_message("[user] forces [H] to apply [src]... [H.p_they()] quickly regenerate all injuries!")
|
||||
SSblackbox.add_details("hivelord_core","[src.type]|used|other")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments.</span>")
|
||||
SSblackbox.add_details("hivelord_core","[src.type]|used|self")
|
||||
H.revive(full_heal = 1)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/organ/regenerative_core/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
. = ..()
|
||||
if(!preserved && !inert)
|
||||
preserved(TRUE)
|
||||
owner.visible_message("<span class='notice'>[src] stabilizes as it's inserted.</span>")
|
||||
|
||||
/obj/item/organ/regenerative_core/Remove(mob/living/carbon/M, special = 0)
|
||||
if(!inert && !special)
|
||||
owner.visible_message("<span class='notice'>[src] rapidly decays as it's removed.</span>")
|
||||
go_inert()
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/regenerative_core/prepare_eat()
|
||||
return null
|
||||
|
||||
/*************************Legion core********************/
|
||||
/obj/item/organ/regenerative_core/legion
|
||||
desc = "A strange rock that crackles with power. It can be used to heal completely, but it will rapidly decay into uselessness."
|
||||
icon_state = "legion_soul"
|
||||
|
||||
/obj/item/organ/regenerative_core/legion/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/organ/regenerative_core/update_icon()
|
||||
icon_state = inert ? "legion_soul_inert" : "legion_soul"
|
||||
cut_overlays()
|
||||
if(!inert && !preserved)
|
||||
add_overlay("legion_soul_crackle")
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/organ/regenerative_core/legion/go_inert()
|
||||
..()
|
||||
desc = "[src] has become inert. It has decayed, and is completely useless."
|
||||
|
||||
/obj/item/organ/regenerative_core/legion/preserved(implanted = 0)
|
||||
..()
|
||||
desc = "[src] has been stabilized. It is preserved, allowing you to use it to heal completely without danger of decay."
|
||||
@@ -12,22 +12,3 @@
|
||||
|
||||
/obj/item/clothing/mask/facehugger/toy/Die()
|
||||
return
|
||||
|
||||
/*********************Hivelord stabilizer****************/
|
||||
/obj/item/weapon/hivelordstabilizer
|
||||
name = "stabilizing serum"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bottle19"
|
||||
desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=3"
|
||||
|
||||
/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user)
|
||||
var/obj/item/organ/hivelord_core/C = M
|
||||
if(!istype(C, /obj/item/organ/hivelord_core))
|
||||
to_chat(user, "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>")
|
||||
return ..()
|
||||
|
||||
C.preserved()
|
||||
to_chat(user, "<span class='notice'>You inject the [M] with the stabilizer. It will no longer go inert.</span>")
|
||||
qdel(src)
|
||||
|
||||
@@ -380,17 +380,22 @@ Difficulty: Hard
|
||||
break
|
||||
max_amount--
|
||||
var/obj/effect/decal/cleanable/blood/B = H
|
||||
new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/slaughter(B.loc)
|
||||
new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter(B.loc)
|
||||
return max_amount
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/slaughter
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter
|
||||
name = "slaughterling"
|
||||
desc = "Though not yet strong enough to create a true physical form, it's nonetheless determined to murder you."
|
||||
icon_state = "bloodbrood"
|
||||
icon_living = "bloodbrood"
|
||||
icon_aggro = "bloodbrood"
|
||||
attacktext = "pierces"
|
||||
color = "#C80000"
|
||||
density = 0
|
||||
faction = list("mining", "boss")
|
||||
weather_immunities = list("lava","ash")
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/slaughter/CanPass(atom/movable/mover, turf/target, height = 0)
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/slaughter/CanPass(atom/movable/mover, turf/target, height = 0)
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/megafauna/bubblegum))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,80 @@
|
||||
//A beast that fire freezing blasts.
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk
|
||||
name = "basilisk"
|
||||
desc = "A territorial beast, covered in a thick shell that absorbs energy. Its stare causes victims to freeze from the inside."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Basilisk"
|
||||
icon_living = "Basilisk"
|
||||
icon_aggro = "Basilisk_alert"
|
||||
icon_dead = "Basilisk_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
move_to_delay = 20
|
||||
projectiletype = /obj/item/projectile/temp/basilisk
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
ranged = 1
|
||||
ranged_message = "stares"
|
||||
ranged_cooldown_time = 30
|
||||
throw_message = "does nothing against the hard shell of"
|
||||
vision_range = 2
|
||||
speed = 3
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
harm_intent_damage = 5
|
||||
obj_damage = 60
|
||||
melee_damage_lower = 12
|
||||
melee_damage_upper = 12
|
||||
attacktext = "bites into"
|
||||
a_intent = INTENT_HARM
|
||||
speak_emote = list("chitters")
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 2
|
||||
turns_per_move = 5
|
||||
loot = list(/obj/item/weapon/ore/diamond{layer = ABOVE_MOB_LAYER},
|
||||
/obj/item/weapon/ore/diamond{layer = ABOVE_MOB_LAYER})
|
||||
|
||||
/obj/item/projectile/temp/basilisk
|
||||
name = "freezing blast"
|
||||
icon_state = "ice_2"
|
||||
damage = 0
|
||||
damage_type = BURN
|
||||
nodamage = 1
|
||||
flag = "energy"
|
||||
temperature = 50
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/GiveTarget(new_target)
|
||||
if(..()) //we have a target
|
||||
if(isliving(target) && !target.Adjacent(targets_from) && ranged_cooldown <= world.time)//No more being shot at point blank or spammed with RNG beams
|
||||
OpenFire(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
gib()
|
||||
if(2)
|
||||
adjustBruteLoss(140)
|
||||
if(3)
|
||||
adjustBruteLoss(110)
|
||||
|
||||
//Watcher
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher
|
||||
name = "watcher"
|
||||
desc = "A levitating, eye-like creature held aloft by winglike formations of sinew. A sharp spine of crystal protrudes from its body."
|
||||
icon = 'icons/mob/lavaland/watcher.dmi'
|
||||
icon_state = "watcher"
|
||||
icon_living = "watcher"
|
||||
icon_aggro = "watcher"
|
||||
icon_dead = "watcher_dead"
|
||||
pixel_x = -10
|
||||
throw_message = "bounces harmlessly off of"
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "impales"
|
||||
a_intent = INTENT_HARM
|
||||
speak_emote = list("telepathically cries")
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
stat_attack = UNCONSCIOUS
|
||||
movement_type = FLYING
|
||||
robust_searching = 1
|
||||
loot = list()
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
|
||||
@@ -0,0 +1,79 @@
|
||||
//An ore-devouring but easily scared creature
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub
|
||||
name = "goldgrub"
|
||||
desc = "A worm that grows fat from eating everything in its sight. Seems to enjoy precious metals and other shiny things, hence the name."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Goldgrub"
|
||||
icon_living = "Goldgrub"
|
||||
icon_aggro = "Goldgrub_alert"
|
||||
icon_dead = "Goldgrub_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
vision_range = 2
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 2
|
||||
move_to_delay = 5
|
||||
friendly = "harmlessly rolls into"
|
||||
maxHealth = 45
|
||||
health = 45
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
attacktext = "barrels into"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
a_intent = INTENT_HELP
|
||||
speak_emote = list("screeches")
|
||||
throw_message = "sinks in slowly, before being pushed out of "
|
||||
deathmessage = "spits up the contents of its stomach before dying!"
|
||||
status_flags = CANPUSH
|
||||
search_objects = 1
|
||||
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
|
||||
/obj/item/weapon/ore/uranium)
|
||||
|
||||
var/chase_time = 100
|
||||
var/will_burrow = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/Initialize()
|
||||
..()
|
||||
var/i = rand(1,3)
|
||||
while(i)
|
||||
loot += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond)
|
||||
i--
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/GiveTarget(new_target)
|
||||
target = new_target
|
||||
if(target != null)
|
||||
if(istype(target, /obj/item/weapon/ore) && loot.len < 10)
|
||||
visible_message("<span class='notice'>The [src.name] looks at [target.name] with hungry eyes.</span>")
|
||||
else if(isliving(target))
|
||||
Aggro()
|
||||
visible_message("<span class='danger'>The [src.name] tries to flee from [target.name]!</span>")
|
||||
retreat_distance = 10
|
||||
minimum_distance = 10
|
||||
if(will_burrow)
|
||||
addtimer(CALLBACK(src, .proc/Burrow), chase_time)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget()
|
||||
if(istype(target, /obj/item/weapon/ore))
|
||||
EatOre(target)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore)
|
||||
for(var/obj/item/weapon/ore/O in targeted_ore.loc)
|
||||
if(loot.len < 10)
|
||||
loot += O.type
|
||||
qdel(O)
|
||||
visible_message("<span class='notice'>The ore was swallowed whole!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Burrow()//Begin the chase to kill the goldgrub in time
|
||||
if(!stat)
|
||||
visible_message("<span class='danger'>The [src.name] buries into the ground, vanishing from sight!</span>")
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/bullet_act(obj/item/projectile/P)
|
||||
visible_message("<span class='danger'>The [P.name] was repelled by [src.name]'s girth!</span>")
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
idle_vision_range = 9
|
||||
. = ..()
|
||||
@@ -0,0 +1,130 @@
|
||||
//A slow but strong beast that tries to stun using its tentacles
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath
|
||||
name = "goliath"
|
||||
desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Goliath"
|
||||
icon_living = "Goliath"
|
||||
icon_aggro = "Goliath_alert"
|
||||
icon_dead = "Goliath_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
mouse_opacity = 2
|
||||
move_to_delay = 40
|
||||
ranged = 1
|
||||
ranged_cooldown_time = 120
|
||||
friendly = "wails at"
|
||||
speak_emote = list("bellows")
|
||||
vision_range = 4
|
||||
speed = 3
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
harm_intent_damage = 0
|
||||
obj_damage = 100
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attacktext = "pulverizes"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
throw_message = "does nothing to the rocky hide of the"
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
anchored = TRUE //Stays anchored until death as to be unpullable
|
||||
var/pre_attack = 0
|
||||
var/pre_attack_icon = "Goliath_preattack"
|
||||
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
|
||||
..()
|
||||
handle_preattack()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack()
|
||||
if(ranged_cooldown <= world.time + ranged_cooldown_time*0.25 && !pre_attack)
|
||||
pre_attack++
|
||||
if(!pre_attack || stat || AIStatus == AI_IDLE)
|
||||
return
|
||||
icon_state = pre_attack_icon
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/revive(full_heal = 0, admin_revive = 0)
|
||||
if(..())
|
||||
anchored = TRUE
|
||||
. = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed)
|
||||
anchored = 0
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/OpenFire()
|
||||
var/tturf = get_turf(target)
|
||||
if(!isturf(tturf))
|
||||
return
|
||||
if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen
|
||||
visible_message("<span class='warning'>The [src.name] digs its tentacles under [target.name]!</span>")
|
||||
new /obj/effect/goliath_tentacle/original(tturf)
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
icon_state = icon_aggro
|
||||
pre_attack = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
ranged_cooldown -= 10
|
||||
handle_preattack()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/Aggro()
|
||||
vision_range = aggro_vision_range
|
||||
handle_preattack()
|
||||
if(icon_state != icon_aggro)
|
||||
icon_state = icon_aggro
|
||||
|
||||
//Lavaland Goliath
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast
|
||||
name = "goliath"
|
||||
desc = "A hulking, armor-plated beast with long tendrils arching from its back."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "goliath"
|
||||
icon_living = "goliath"
|
||||
icon_aggro = "goliath"
|
||||
icon_dead = "goliath_dead"
|
||||
throw_message = "does nothing to the tough hide of the"
|
||||
pre_attack_icon = "goliath2"
|
||||
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
|
||||
loot = list()
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
|
||||
//tentacles
|
||||
/obj/effect/goliath_tentacle
|
||||
name = "Goliath tentacle"
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Goliath_tentacle"
|
||||
var/latched = FALSE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/goliath_tentacle/Initialize()
|
||||
. = ..()
|
||||
if(ismineralturf(loc))
|
||||
var/turf/closed/mineral/M = loc
|
||||
M.gets_drilled()
|
||||
addtimer(CALLBACK(src, .proc/Trip), 10)
|
||||
|
||||
/obj/effect/goliath_tentacle/original/Initialize()
|
||||
. = ..()
|
||||
for(var/obj/effect/goliath_tentacle/original/O in loc)//No more GG NO RE from 2+ goliaths simultaneously tentacling you
|
||||
if(O != src)
|
||||
qdel(src)
|
||||
var/list/directions = GLOB.cardinal.Copy()
|
||||
for(var/i in 1 to 3)
|
||||
var/spawndir = pick(directions)
|
||||
directions -= spawndir
|
||||
var/turf/T = get_step(src,spawndir)
|
||||
if(T)
|
||||
new /obj/effect/goliath_tentacle(T)
|
||||
|
||||
/obj/effect/goliath_tentacle/proc/Trip()
|
||||
for(var/mob/living/M in src.loc)
|
||||
visible_message("<span class='danger'>The [src.name] grabs hold of [M.name]!</span>")
|
||||
M.Stun(5)
|
||||
M.adjustBruteLoss(rand(10,15))
|
||||
latched = TRUE
|
||||
if(!latched)
|
||||
qdel(src)
|
||||
else
|
||||
QDEL_IN(src, 50)
|
||||
@@ -0,0 +1,113 @@
|
||||
//Gutlunches, passive mods that devour blood and gibs
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch
|
||||
name = "gutlunch"
|
||||
desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "gutlunch"
|
||||
icon_living = "gutlunch"
|
||||
icon_dead = "gutlunch"
|
||||
speak_emote = list("warbles", "quavers")
|
||||
emote_hear = list("trills.")
|
||||
emote_see = list("sniffs.", "burps.")
|
||||
weather_immunities = list("lava","ash")
|
||||
faction = list("mining", "ashwalker")
|
||||
density = 0
|
||||
speak_chance = 1
|
||||
turns_per_move = 8
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
move_to_delay = 15
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "squishes"
|
||||
friendly = "pinches"
|
||||
a_intent = INTENT_HELP
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
gold_core_spawnable = 2
|
||||
stat_attack = UNCONSCIOUS
|
||||
gender = NEUTER
|
||||
stop_automated_movement = FALSE
|
||||
stop_automated_movement_when_pulled = TRUE
|
||||
stat_exclusive = TRUE
|
||||
robust_searching = TRUE
|
||||
search_objects = TRUE
|
||||
del_on_death = TRUE
|
||||
loot = list(/obj/effect/decal/cleanable/blood/gibs)
|
||||
deathmessage = "is pulped into bugmash."
|
||||
|
||||
animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch
|
||||
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55)
|
||||
|
||||
wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/)
|
||||
var/obj/item/udder/gutlunch/udder = null
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize()
|
||||
udder = new()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/Destroy()
|
||||
QDEL_NULL(udder)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/regenerate_icons()
|
||||
cut_overlays()
|
||||
if(udder.reagents.total_volume == udder.reagents.maximum_volume)
|
||||
add_overlay("gl_full")
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/attackby(obj/item/O, mob/user, params)
|
||||
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
|
||||
udder.milkAnimal(O, user)
|
||||
regenerate_icons()
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget()
|
||||
if(is_type_in_typecache(target,wanted_objects)) //we eats
|
||||
udder.generateMilk()
|
||||
regenerate_icons()
|
||||
visible_message("<span class='notice'>[src] slurps up [target].</span>")
|
||||
qdel(target)
|
||||
return ..()
|
||||
|
||||
//Male gutlunch. They're smaller and more colorful!
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck
|
||||
name = "gubbuck"
|
||||
gender = MALE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize()
|
||||
..()
|
||||
add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY)
|
||||
resize = 0.85
|
||||
update_transform()
|
||||
|
||||
//Lady gutlunch. They make the babby.
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen
|
||||
name = "guthen"
|
||||
gender = FEMALE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen/Life()
|
||||
..()
|
||||
if(udder.reagents.total_volume == udder.reagents.maximum_volume) //Only breed when we're full.
|
||||
make_babies()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen/make_babies()
|
||||
. = ..()
|
||||
if(.)
|
||||
udder.reagents.clear_reagents()
|
||||
regenerate_icons()
|
||||
|
||||
//Gutlunch udder
|
||||
/obj/item/udder/gutlunch
|
||||
name = "nutrient sac"
|
||||
|
||||
/obj/item/udder/gutlunch/New()
|
||||
reagents = new(50)
|
||||
reagents.my_atom = src
|
||||
|
||||
/obj/item/udder/gutlunch/generateMilk()
|
||||
if(prob(60))
|
||||
reagents.add_reagent("cream", rand(2, 5))
|
||||
if(prob(45))
|
||||
reagents.add_reagent("salglu_solution", rand(2,5))
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord
|
||||
name = "hivelord"
|
||||
desc = "A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Hivelord"
|
||||
icon_living = "Hivelord"
|
||||
icon_aggro = "Hivelord_alert"
|
||||
icon_dead = "Hivelord_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
mouse_opacity = 2
|
||||
move_to_delay = 14
|
||||
ranged = 1
|
||||
vision_range = 5
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
speed = 3
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
attacktext = "lashes out at"
|
||||
speak_emote = list("telepathically cries")
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
ranged_cooldown = 0
|
||||
ranged_cooldown_time = 20
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
retreat_distance = 3
|
||||
minimum_distance = 3
|
||||
pass_flags = PASSTABLE
|
||||
loot = list(/obj/item/organ/regenerative_core)
|
||||
var/brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/OpenFire(the_target)
|
||||
if(world.time >= ranged_cooldown)
|
||||
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/A = new brood_type(src.loc)
|
||||
A.admin_spawned = admin_spawned
|
||||
A.GiveTarget(target)
|
||||
A.friends = friends
|
||||
A.faction = faction.Copy()
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/AttackingTarget()
|
||||
OpenFire()
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed)
|
||||
mouse_opacity = 1
|
||||
..(gibbed)
|
||||
|
||||
//A fragile but rapidly produced creature
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood
|
||||
name = "hivelord brood"
|
||||
desc = "A fragment of the original Hivelord, rallying behind its original. One isn't much of a threat, but..."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Hivelordbrood"
|
||||
icon_living = "Hivelordbrood"
|
||||
icon_aggro = "Hivelordbrood"
|
||||
icon_dead = "Hivelordbrood"
|
||||
icon_gib = "syndicate_gib"
|
||||
mouse_opacity = 2
|
||||
move_to_delay = 1
|
||||
friendly = "buzzes near"
|
||||
vision_range = 10
|
||||
speed = 3
|
||||
maxHealth = 1
|
||||
health = 1
|
||||
movement_type = FLYING
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 2
|
||||
melee_damage_upper = 2
|
||||
attacktext = "slashes"
|
||||
speak_emote = list("telepathically cries")
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "falls right through the strange body of the"
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
pass_flags = PASSTABLE
|
||||
del_on_death = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/death), 100)
|
||||
|
||||
//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."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "legion"
|
||||
icon_living = "legion"
|
||||
icon_aggro = "legion"
|
||||
icon_dead = "legion"
|
||||
icon_gib = "syndicate_gib"
|
||||
obj_damage = 60
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "lashes out at"
|
||||
speak_emote = list("echoes")
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "bounces harmlessly off of"
|
||||
loot = list(/obj/item/organ/regenerative_core/legion)
|
||||
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
|
||||
del_on_death = 1
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
var/mob/living/carbon/human/stored_mob
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/death(gibbed)
|
||||
visible_message("<span class='warning'>The skulls on [src] wail in anger as they flee from their dying host!</span>")
|
||||
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/damaged(T)
|
||||
..(gibbed)
|
||||
|
||||
//Legion skull
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
|
||||
name = "legion"
|
||||
desc = "One of many."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "legion_head"
|
||||
icon_living = "legion_head"
|
||||
icon_aggro = "legion_head"
|
||||
icon_dead = "legion_head"
|
||||
icon_gib = "syndicate_gib"
|
||||
friendly = "buzzes near"
|
||||
vision_range = 10
|
||||
maxHealth = 1
|
||||
health = 5
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 12
|
||||
melee_damage_upper = 12
|
||||
attacktext = "bites"
|
||||
speak_emote = list("echoes")
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
throw_message = "is shrugged off by"
|
||||
pass_flags = PASSTABLE
|
||||
del_on_death = TRUE
|
||||
stat_attack = UNCONSCIOUS
|
||||
robust_searching = 1
|
||||
var/can_infest_dead = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life()
|
||||
if(isturf(loc))
|
||||
for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat == UNCONSCIOUS || (can_infest_dead && H.stat == DEAD))
|
||||
infest(H)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H)
|
||||
visible_message("<span class='warning'>[name] burrows into the flesh of [H]!</span>")
|
||||
var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L = new(H.loc)
|
||||
visible_message("<span class='warning'>[L] staggers to their feet!</span>")
|
||||
H.death()
|
||||
H.adjustBruteLoss(1000)
|
||||
L.stored_mob = H
|
||||
H.forceMove(L)
|
||||
qdel(src)
|
||||
|
||||
//Advanced Legion is slightly tougher to kill and can raise corpses (revive other legions)
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/advanced
|
||||
stat_attack = 2
|
||||
maxHealth = 120
|
||||
health = 120
|
||||
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced
|
||||
icon_state = "dwarf_legion"
|
||||
icon_living = "dwarf_legion"
|
||||
icon_aggro = "dwarf_legion"
|
||||
icon_dead = "dwarf_legion"
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced
|
||||
stat_attack = 2
|
||||
can_infest_dead = TRUE
|
||||
|
||||
//Legion that spawns Legions
|
||||
/mob/living/simple_animal/hostile/spawner/legion
|
||||
name = "legion"
|
||||
desc = "One of many."
|
||||
icon = 'icons/mob/lavaland/dragon.dmi'
|
||||
icon_state = "legion"
|
||||
icon_living = "legion"
|
||||
icon_dead = "legion"
|
||||
health = 450
|
||||
maxHealth = 450
|
||||
max_mobs = 3
|
||||
spawn_time = 200
|
||||
spawn_text = "peels itself off from"
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
anchored = FALSE
|
||||
AIStatus = AI_ON
|
||||
stop_automated_movement = FALSE
|
||||
wander = TRUE
|
||||
maxbodytemp = INFINITY
|
||||
layer = MOB_LAYER
|
||||
del_on_death = TRUE
|
||||
sentience_type = SENTIENCE_BOSS
|
||||
loot = list(/obj/item/organ/regenerative_core/legion = 3, /obj/effect/mob_spawn/human/corpse/damaged = 5)
|
||||
move_to_delay = 14
|
||||
vision_range = 5
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
speed = 3
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
obj_damage = 30
|
||||
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
@@ -0,0 +1,59 @@
|
||||
//the base mining mob
|
||||
/mob/living/simple_animal/hostile/asteroid
|
||||
vision_range = 2
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
obj_damage = 30
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "strikes"
|
||||
status_flags = 0
|
||||
a_intent = INTENT_HARM
|
||||
var/throw_message = "bounces off of"
|
||||
var/icon_aggro = null // for swapping to when we get aggressive
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/Aggro()
|
||||
..()
|
||||
if(vision_range != aggro_vision_range)
|
||||
icon_state = icon_aggro
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/LoseAggro()
|
||||
..()
|
||||
if(stat == DEAD)
|
||||
return
|
||||
icon_state = icon_living
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/bullet_act(obj/item/projectile/P)//Reduces damage from most projectiles to curb off-screen kills
|
||||
if(!stat)
|
||||
Aggro()
|
||||
if(P.damage < 30 && P.damage_type != BRUTE)
|
||||
P.damage = (P.damage / 3)
|
||||
visible_message("<span class='danger'>[P] has a reduced effect on [src]!</span>")
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hitby(atom/movable/AM)//No floor tiling them to death, wiseguy
|
||||
if(istype(AM, /obj/item))
|
||||
var/obj/item/T = AM
|
||||
if(!stat)
|
||||
Aggro()
|
||||
if(T.throwforce <= 20)
|
||||
visible_message("<span class='notice'>The [T.name] [src.throw_message] [src.name]!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/death(gibbed)
|
||||
SSblackbox.add_details("mobs_killed_mining","[src.type]")
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
|
||||
if(bodytemperature < minbodytemp)
|
||||
adjustBruteLoss(2)
|
||||
else if(bodytemperature > maxbodytemp)
|
||||
adjustBruteLoss(20)
|
||||
@@ -0,0 +1,101 @@
|
||||
//Necropolis Tendrils, which spawn lavaland monsters and break into a chasm when killed
|
||||
/obj/effect/light_emitter/tendril
|
||||
set_luminosity = 4
|
||||
set_cap = 2.5
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland
|
||||
name = "necropolis tendril"
|
||||
desc = "A vile tendril of corruption, originating deep underground. Terrible monsters are pouring out of it."
|
||||
icon = 'icons/mob/nest.dmi'
|
||||
icon_state = "tendril"
|
||||
icon_living = "tendril"
|
||||
icon_dead = "tendril"
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
health = 250
|
||||
maxHealth = 250
|
||||
max_mobs = 3
|
||||
spawn_time = 300 //30 seconds default
|
||||
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher
|
||||
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
|
||||
maxbodytemp = INFINITY
|
||||
loot = list(/obj/effect/collapse, /obj/structure/closet/crate/necropolis/tendril)
|
||||
del_on_death = 1
|
||||
var/gps = null
|
||||
var/obj/effect/light_emitter/tendril/emitted_light
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
|
||||
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
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/Initialize()
|
||||
. = ..()
|
||||
emitted_light = new(loc)
|
||||
for(var/F in RANGE_TURFS(1, src))
|
||||
if(ismineralturf(F))
|
||||
var/turf/closed/mineral/M = F
|
||||
M.ChangeTurf(M.turf_type,FALSE,TRUE)
|
||||
gps = new /obj/item/device/gps/internal(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
|
||||
QDEL_NULL(emitted_light)
|
||||
QDEL_NULL(gps)
|
||||
. = ..()
|
||||
|
||||
#define MEDAL_PREFIX "Tendril"
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland/death()
|
||||
var/last_tendril = TRUE
|
||||
for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
last_tendril = FALSE
|
||||
break
|
||||
if(last_tendril && !admin_spawned)
|
||||
if(global.medal_hub && global.medal_pass && global.medals_enabled)
|
||||
for(var/mob/living/L in view(7,src))
|
||||
if(L.stat)
|
||||
continue
|
||||
if(L.client)
|
||||
var/client/C = L.client
|
||||
var/suffixm = ALL_KILL_MEDAL
|
||||
var/prefix = MEDAL_PREFIX
|
||||
UnlockMedal("[prefix] [suffixm]",C)
|
||||
SetScore(TENDRIL_CLEAR_SCORE,C,1)
|
||||
..()
|
||||
#undef MEDAL_PREFIX
|
||||
|
||||
/obj/effect/collapse
|
||||
name = "collapsing necropolis tendril"
|
||||
desc = "Get clear!"
|
||||
layer = BELOW_OBJ_LAYER
|
||||
icon = 'icons/mob/nest.dmi'
|
||||
icon_state = "tendril"
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
var/obj/effect/light_emitter/tendril/emitted_light
|
||||
|
||||
/obj/effect/collapse/Initialize()
|
||||
. = ..()
|
||||
emitted_light = new(loc)
|
||||
visible_message("<span class='boldannounce'>The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!</span>")
|
||||
visible_message("<span class='warning'>Something falls free of the tendril!</span>")
|
||||
playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1)
|
||||
addtimer(CALLBACK(src, .proc/collapse), 50)
|
||||
|
||||
/obj/effect/collapse/Destroy()
|
||||
QDEL_NULL(emitted_light)
|
||||
return ..()
|
||||
|
||||
/obj/effect/collapse/proc/collapse()
|
||||
for(var/mob/M in range(7,src))
|
||||
shake_camera(M, 15, 1)
|
||||
playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1)
|
||||
visible_message("<span class='boldannounce'>The tendril falls inward, the ground around it widening into a yawning chasm!</span>")
|
||||
for(var/turf/T in range(2,src))
|
||||
if(!T.density)
|
||||
T.TerraformTurf(/turf/open/chasm/straight_down/lava_land_surface)
|
||||
qdel(src)
|
||||
127
code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
Normal file
127
code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm
Normal file
@@ -0,0 +1,127 @@
|
||||
//A fragile mob that becomes temporarily invincible and large to attack
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu
|
||||
name = "wumborian fugu"
|
||||
desc = "The wumborian fugu rapidly increases its body mass in order to ward off its prey. Great care should be taken to avoid it while it's in this state as it is nearly invincible, but it cannot maintain its form forever."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "Fugu"
|
||||
icon_living = "Fugu"
|
||||
icon_aggro = "Fugu"
|
||||
icon_dead = "Fugu_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
mouse_opacity = 2
|
||||
move_to_delay = 5
|
||||
friendly = "floats near"
|
||||
speak_emote = list("puffs")
|
||||
vision_range = 5
|
||||
speed = 0
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
harm_intent_damage = 5
|
||||
obj_damage = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
throw_message = "is avoided by the"
|
||||
aggro_vision_range = 9
|
||||
idle_vision_range = 5
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
var/wumbo = 0
|
||||
var/inflate_cooldown = 0
|
||||
loot = list(/obj/item/asteroid/fugu_gland{layer = ABOVE_MOB_LAYER})
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/Life()
|
||||
if(!wumbo)
|
||||
inflate_cooldown = max((inflate_cooldown - 1), 0)
|
||||
if(target && AIStatus == AI_ON)
|
||||
Inflate()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
if(!forced && wumbo)
|
||||
return FALSE
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/Aggro()
|
||||
..()
|
||||
Inflate()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/verb/Inflate()
|
||||
set name = "Inflate"
|
||||
set category = "Fugu"
|
||||
set desc = "Temporarily increases your size, and makes you significantly more dangerous and tough."
|
||||
if(wumbo)
|
||||
to_chat(src, "<span class='notice'>You're already inflated.</span>")
|
||||
return
|
||||
if(inflate_cooldown)
|
||||
to_chat(src, "<span class='notice'>We need time to gather our strength.</span>")
|
||||
return
|
||||
if(buffed)
|
||||
to_chat(src, "<span class='notice'>Something is interfering with our growth.</span>")
|
||||
return
|
||||
wumbo = 1
|
||||
icon_state = "Fugu_big"
|
||||
obj_damage = 60
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
harm_intent_damage = 0
|
||||
throw_message = "is absorbed by the girth of the"
|
||||
retreat_distance = null
|
||||
minimum_distance = 1
|
||||
move_to_delay = 6
|
||||
transform *= 2
|
||||
environment_smash = ENVIRONMENT_SMASH_WALLS
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
speed = 1
|
||||
addtimer(CALLBACK(src, .proc/Deflate), 100)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/proc/Deflate()
|
||||
if(wumbo)
|
||||
walk(src, 0)
|
||||
wumbo = 0
|
||||
icon_state = "Fugu"
|
||||
obj_damage = 0
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
harm_intent_damage = 5
|
||||
throw_message = "is avoided by the"
|
||||
retreat_distance = 9
|
||||
minimum_distance = 9
|
||||
move_to_delay = 2
|
||||
transform /= 2
|
||||
inflate_cooldown = 4
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
speed = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/death(gibbed)
|
||||
Deflate()
|
||||
..(gibbed)
|
||||
|
||||
/obj/item/asteroid/fugu_gland
|
||||
name = "wumborian fugu gland"
|
||||
desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "fugu_gland"
|
||||
flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
layer = MOB_LAYER
|
||||
origin_tech = "biotech=6"
|
||||
var/list/banned_mobs()
|
||||
|
||||
/obj/item/asteroid/fugu_gland/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && istype(target, /mob/living/simple_animal))
|
||||
var/mob/living/simple_animal/A = target
|
||||
if(A.buffed || (A.type in banned_mobs) || A.stat)
|
||||
to_chat(user, "<span class='warning'>Something's interfering with the [src]'s effects. It's no use.</span>")
|
||||
return
|
||||
A.buffed++
|
||||
A.maxHealth *= 1.5
|
||||
A.health = min(A.maxHealth,A.health*1.5)
|
||||
A.melee_damage_lower = max((A.melee_damage_lower * 2), 10)
|
||||
A.melee_damage_upper = max((A.melee_damage_upper * 2), 10)
|
||||
A.transform *= 2
|
||||
A.environment_smash += 2
|
||||
to_chat(user, "<span class='info'>You increase the size of [A], giving it a surge of strength!</span>")
|
||||
qdel(src)
|
||||
@@ -276,7 +276,7 @@
|
||||
if(!user.dna)
|
||||
return -1
|
||||
user.dna.add_mutation(HULK)
|
||||
var/obj/item/organ/hivelord_core/organ = new /obj/item/organ/hivelord_core
|
||||
var/obj/item/organ/regenerative_core/organ = new /obj/item/organ/regenerative_core
|
||||
organ.Insert(user)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -1748,7 +1748,6 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mecha_pilot.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\nanotrasen.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
|
||||
@@ -1760,6 +1759,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\wizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\wumborian_fugu.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\bosses\paperwizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\megafauna\bubblegum.dm"
|
||||
@@ -1769,6 +1769,13 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\megafauna\megafauna.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\megafauna\swarmer.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\basilisk.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goldgrub.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goliath.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\mining_mobs.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\necropolis_tendril.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm"
|
||||
|
||||
15
tgstation.dme.rej
Normal file
15
tgstation.dme.rej
Normal file
@@ -0,0 +1,15 @@
|
||||
diff a/tgstation.dme b/tgstation.dme (rejected hunks)
|
||||
@@ -1446,11 +1446,13 @@
|
||||
#include "code\modules\mining\satchel_ore_boxdm.dm"
|
||||
#include "code\modules\mining\shelters.dm"
|
||||
#include "code\modules\mining\equipment\explorer_gear.dm"
|
||||
+#include "code\modules\mining\equipment\goliath_hide.dm"
|
||||
#include "code\modules\mining\equipment\kinetic_crusher.dm"
|
||||
#include "code\modules\mining\equipment\lazarus_injector.dm"
|
||||
#include "code\modules\mining\equipment\marker_beacons.dm"
|
||||
#include "code\modules\mining\equipment\mineral_scanner.dm"
|
||||
#include "code\modules\mining\equipment\mining_tools.dm"
|
||||
+#include "code\modules\mining\equipment\regenerative_core.dm"
|
||||
#include "code\modules\mining\equipment\resonator.dm"
|
||||
#include "code\modules\mining\equipment\survival_pod.dm"
|
||||
#include "code\modules\mining\equipment\vendor_items.dm"
|
||||
Reference in New Issue
Block a user