Lavaland Update Part 2: Mobs

This commit is contained in:
Fox McCloud
2019-09-07 02:26:31 -04:00
parent 006d00c9ee
commit 0119d350b4
35 changed files with 253 additions and 170 deletions
+11
View File
@@ -117,6 +117,17 @@
#define BLOOD_VOLUME_BAD 224
#define BLOOD_VOLUME_SURVIVE 122
//Sizes of mobs, used by mob/living/var/mob_size
#define MOB_SIZE_TINY 0
#define MOB_SIZE_SMALL 1
#define MOB_SIZE_HUMAN 2
#define MOB_SIZE_LARGE 3
//Ventcrawling defines
#define VENTCRAWLER_NONE 0
#define VENTCRAWLER_NUDE 1
#define VENTCRAWLER_ALWAYS 2
//Used for calculations for negative effects of having genetics powers
#define DEFAULT_GENE_STABILITY 100
#define GENE_INSTABILITY_MINOR 5
-5
View File
@@ -30,11 +30,6 @@
#define CLICK_CD_CLICK_ABILITY 6
#define CLICK_CD_RAPID 2
//Sizes of mobs, used by mob/living/var/mob_size
#define MOB_SIZE_TINY 0
#define MOB_SIZE_SMALL 1
#define MOB_SIZE_HUMAN 2
#define MOB_SIZE_LARGE 3
///
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
@@ -733,6 +733,7 @@
item_state = "explorer1"
storage_slots = 6
max_w_class = WEIGHT_CLASS_BULKY
max_combined_w_class = 20
use_item_overlays = 0
can_hold = list(
/obj/item/crowbar,
@@ -750,6 +751,7 @@
/obj/item/resonator,
/obj/item/mining_scanner,
/obj/item/pickaxe,
/obj/item/shovel,
/obj/item/stack/sheet/animalhide,
/obj/item/stack/sheet/sinew,
/obj/item/stack/sheet/bone,
@@ -764,13 +766,25 @@
/obj/item/survivalcapsule,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/reagent_containers/food/pill,
/obj/item/storage/pill_bottle,
/obj/item/stack/ore,
/obj/item/reagent_containers/food/drinks,
/obj/item/organ/internal/hivelord_core,
/obj/item/organ/internal/regenerative_core,
/obj/item/wormhole_jaunter,
/obj/item/storage/bag/plants,
/obj/item/stack/marker_beacon)
/obj/item/storage/belt/mining/New()
..()
new /obj/item/survivalcapsule(src)
/obj/item/storage/belt/mining/vendor/Initialize(mapload)
. = ..()
new /obj/item/survivalcapsule(src)
/obj/item/storage/belt/mining/alt
icon_state = "explorer2"
item_state = "explorer2"
/obj/item/storage/belt/mining/primitive
name = "hunter's belt"
desc = "A versatile belt, woven from sinew."
icon_state = "ebelt"
item_state = "ebelt"
storage_slots = 5
+2 -2
View File
@@ -160,8 +160,8 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me
/turf/simulated/floor/plating/asteroid/airless/cave/volcanic
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
data_having_type = /turf/simulated/floor/plating/asteroid/airless/cave/volcanic/has_data
+3 -3
View File
@@ -520,8 +520,8 @@
icon_state = "goliath_cloak"
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, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear)
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
allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/kitchen/knife/combat/survival)
armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) //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
@@ -530,7 +530,7 @@
icon_state = "golhood"
item_state = "golhood"
desc = "A protective & concealing hood."
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
flags = BLOCKHAIR
flags_cover = HEADCOVERSEYES
@@ -9,8 +9,8 @@
/obj/item/hivelordstabilizer/afterattack(obj/item/organ/internal/M, mob/user)
. = ..()
var/obj/item/organ/internal/hivelord_core/C = M
if(!istype(C, /obj/item/organ/internal/hivelord_core))
var/obj/item/organ/internal/regenerative_core/C = M
if(!istype(C, /obj/item/organ/internal/regenerative_core))
to_chat(user, "<span class='warning'>The stabilizer only works on certain types of monster organs, generally regenerative in nature.</span>")
return ..()
@@ -19,8 +19,8 @@
qdel(src)
/************************Hivelord core*******************/
/obj/item/organ/internal/hivelord_core
name = "hivelord remains"
/obj/item/organ/internal/regenerative_core
name = "regenerative core"
desc = "All that remains of a hivelord. It can be used to help keep your body going, but it will rapidly decay into uselessness."
icon_state = "roro core 2"
flags = NOBLUDGEON
@@ -30,15 +30,15 @@
var/inert = 0
var/preserved = 0
/obj/item/organ/internal/hivelord_core/New()
..()
/obj/item/organ/internal/regenerative_core/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/inert_check), 2400)
/obj/item/organ/internal/hivelord_core/proc/inert_check()
/obj/item/organ/internal/regenerative_core/proc/inert_check()
if(!preserved)
go_inert()
/obj/item/organ/internal/hivelord_core/proc/preserved(implanted = 0)
/obj/item/organ/internal/regenerative_core/proc/preserved(implanted = 0)
inert = FALSE
preserved = TRUE
update_icon()
@@ -48,27 +48,27 @@
else
feedback_add_details("hivelord_core", "[type]|stabilizer")
/obj/item/organ/internal/hivelord_core/proc/go_inert()
/obj/item/organ/internal/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."
feedback_add_details("hivelord_core", "[src.type]|inert")
update_icon()
/obj/item/organ/internal/hivelord_core/ui_action_click()
/obj/item/organ/internal/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()
qdel(src)
/obj/item/organ/internal/hivelord_core/on_life()
/obj/item/organ/internal/regenerative_core/on_life()
..()
if(owner.health < HEALTH_THRESHOLD_CRIT)
ui_action_click()
///Handles applying the core, logging and status/mood events.
/obj/item/organ/internal/hivelord_core/proc/applyto(atom/target, mob/user)
/obj/item/organ/internal/regenerative_core/proc/applyto(atom/target, mob/user)
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(inert)
@@ -88,40 +88,39 @@
user.drop_item()
qdel(src)
/obj/item/organ/internal/hivelord_core/afterattack(atom/target, mob/user, proximity_flag)
/obj/item/organ/internal/regenerative_core/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(proximity_flag)
applyto(target, user)
/obj/item/organ/internal/hivelord_core/attack_self(mob/user)
/obj/item/organ/internal/regenerative_core/attack_self(mob/user)
applyto(user, user)
/obj/item/organ/internal/hivelord_core/insert(mob/living/carbon/M, special = 0)
/obj/item/organ/internal/regenerative_core/insert(mob/living/carbon/M, special = 0)
..()
if(!preserved && !inert)
preserved(TRUE)
owner.visible_message("<span class='notice'>[src] stabilizes as it's inserted.</span>")
/obj/item/organ/internal/hivelord_core/remove(mob/living/carbon/M, special = 0)
/obj/item/organ/internal/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/internal/hivelord_core/prepare_eat()
/obj/item/organ/internal/regenerative_core/prepare_eat()
return null
/*************************Legion core********************/
/obj/item/organ/internal/hivelord_core/legion
name = "legion's soul"
/obj/item/organ/internal/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/internal/hivelord_core/legion/New()
..()
/obj/item/organ/internal/regenerative_core/legion/Initialize(mapload)
. = ..()
update_icon()
/obj/item/organ/internal/hivelord_core/legion/update_icon()
/obj/item/organ/internal/regenerative_core/legion/update_icon()
icon_state = inert ? "legion_soul_inert" : "legion_soul"
cut_overlays()
if(!inert && !preserved)
@@ -130,10 +129,10 @@
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/organ/internal/hivelord_core/legion/go_inert()
/obj/item/organ/internal/regenerative_core/legion/go_inert()
..()
desc = "[src] has become inert. It has decayed, and is completely useless."
/obj/item/organ/internal/hivelord_core/legion/preserved(implanted = 0)
/obj/item/organ/internal/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."
+1 -1
View File
@@ -219,7 +219,7 @@
var/drop_location = drop_location()
switch(selection)
if("Survival Capsule and Explorer's Webbing")
new /obj/item/storage/belt/mining(drop_location)
new /obj/item/storage/belt/mining/vendor(drop_location)
if("Resonator Kit")
new /obj/item/extinguisher/mini(drop_location)
new /obj/item/resonator(drop_location)
@@ -18,7 +18,7 @@
attack_sound = 'sound/creatures/headcrab_attack.ogg'
speak_emote = list("hisses")
var/is_zombie = 0
stat_attack = 1 //so they continue to attack when they are on the ground.
stat_attack = UNCONSCIOUS //so they continue to attack when they are on the ground.
var/host_species = ""
var/list/human_overlays = list()
@@ -15,7 +15,7 @@
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
robust_searching = 1
stat_attack = 2
stat_attack = DEAD
obj_damage = 0
environment_smash = 0
speak_emote = list("squeaks")
@@ -22,7 +22,7 @@
health = 250
obj_damage = 50
robust_searching = 1
stat_attack = 1
stat_attack = UNCONSCIOUS
attacktext = "savages"
attack_sound = 'sound/effects/bite.ogg'
speak_emote = list("growls")
@@ -42,6 +42,8 @@ Difficulty: Medium
wander = FALSE
del_on_death = TRUE
blood_volume = BLOOD_VOLUME_NORMAL
internal_type = /obj/item/gps/internal/miner
medal_type = BOSS_MEDAL_MINER
var/obj/item/melee/energy/cleaving_saw/miner/miner_saw
var/time_until_next_transform = 0
var/dashing = FALSE
@@ -63,7 +65,6 @@ Difficulty: Medium
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize(mapload)
. = ..()
miner_saw = new(src)
internal_gps = new/obj/item/gps/internal/miner(src)
// Add a zone selection UI; otherwise the mob can't melee attack properly.
zone_sel = new /obj/screen/zone_sel()
@@ -45,6 +45,7 @@ Difficulty: Hard
crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher)
loot = list(/obj/structure/closet/crate/necropolis/bubblegum)
var/charging = 0
internal_type = /obj/item/gps/internal/bubblegum
medal_type = BOSS_MEDAL_BUBBLEGUM
score_type = BUBBLEGUM_SCORE
deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now... "
@@ -104,17 +105,17 @@ Difficulty: Hard
spawn(0)
warp_charge()
/mob/living/simple_animal/hostile/megafauna/bubblegum/New()
..()
for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list)
if(B != src)
qdel(src) //There can be only one
break
/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize(mapload)
. = ..()
if(true_spawn)
for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.living_mob_list)
if(B != src)
qdel(src) //There can be only one
return
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
if(istype(loc, /obj/effect/dummy/slaughter))
bloodspell.phased = 1
internal_gps = new/obj/item/gps/internal/bubblegum(src)
/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect, end_pixel_y)
if(!charging)
@@ -43,6 +43,7 @@ Difficulty: Very Hard
ranged = 1
pixel_x = -32
del_on_death = 1
internal_type = /obj/item/gps/internal/colossus
medal_type = BOSS_MEDAL_COLOSSUS
score_type = COLOSSUS_SCORE
crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher)
@@ -92,11 +93,6 @@ Difficulty: Very Hard
spawn(0)
alternating_dir_shots()
/mob/living/simple_animal/hostile/megafauna/colossus/New()
..()
internal_gps = new/obj/item/gps/internal/colossus(src)
/obj/effect/temp_visual/at_shield
name = "anti-toolbox field"
desc = "A shimmering forcefield protecting the colossus."
@@ -48,15 +48,12 @@ Difficulty: Medium
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
var/swooping = 0
var/swoop_cooldown = 0
internal_type = /obj/item/gps/internal/dragon
medal_type = BOSS_MEDAL_DRAKE
score_type = DRAKE_SCORE
deathmessage = "collapses into a pile of bones, its flesh sloughing away."
death_sound = 'sound/misc/demon_dies.ogg'
/mob/living/simple_animal/hostile/megafauna/dragon/New()
..()
internal_gps = new/obj/item/gps/internal/dragon(src)
/mob/living/simple_animal/hostile/megafauna/dragon/ex_act(severity, target)
if(severity == 3)
return
@@ -66,14 +66,14 @@ Difficulty: Hard
var/did_reset = TRUE //if we timed out, returned to our rune, and healed some
//var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...")
//var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.")
internal_type = /obj/item/gps/internal/hierophant
medal_type = BOSS_MEDAL_HIEROPHANT
score_type = HIEROPHANT_SCORE
del_on_death = TRUE
death_sound = 'sound/magic/repulse.ogg'
/mob/living/simple_animal/hostile/megafauna/hierophant/New()
..()
internal_gps = new/obj/item/gps/internal/hierophant(src)
/mob/living/simple_animal/hostile/megafauna/hierophant/Initialize(mapload)
. = ..()
spawned_rune = new(loc)
/mob/living/simple_animal/hostile/megafauna/hierophant/Life(seconds, times_fired)
@@ -108,7 +108,7 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/hierophant/Destroy()
QDEL_NULL(spawned_rune)
. = ..()
return ..()
/mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L)
for(var/obj/item/W in L)
@@ -39,6 +39,7 @@ Difficulty: Medium
ranged_cooldown_time = 20
var/size = 5
var/charging = 0
internal_type = /obj/item/gps/internal/legion
medal_type = BOSS_MEDAL_LEGION
score_type = LEGION_SCORE
pixel_y = -90
@@ -48,11 +49,7 @@ Difficulty: Medium
elimination = 1
appearance_flags = 0
mouse_opacity = MOUSE_OPACITY_ICON
stat_attack = 1 // Overriden from /tg/ - otherwise Legion starts chasing its minions
/mob/living/simple_animal/hostile/megafauna/legion/New()
..()
internal_gps = new/obj/item/gps/internal/legion(src)
stat_attack = UNCONSCIOUS // Overriden from /tg/ - otherwise Legion starts chasing its minions
/mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget()
. = ..()
@@ -132,6 +129,8 @@ Difficulty: Medium
elimination = 0
else if(prob(5))
loot = list(/obj/structure/closet/crate/necropolis/tendril)
if(!true_spawn)
loot = null
return ..()
/mob/living/simple_animal/hostile/megafauna/legion/Process_Spacemove(movement_dir = 0)
@@ -13,7 +13,7 @@
flying = 1
robust_searching = 1
ranged_ignores_vision = TRUE
stat_attack = 2
stat_attack = DEAD
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)
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
minbodytemp = 0
@@ -26,17 +26,21 @@
var/elimination = 0
var/anger_modifier = 0
var/obj/item/gps/internal_gps
var/internal_type
move_force = MOVE_FORCE_OVERPOWERING
move_resist = MOVE_FORCE_OVERPOWERING
pull_force = MOVE_FORCE_OVERPOWERING
mob_size = MOB_SIZE_LARGE
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway
var/true_spawn = TRUE // if this is a megafauna that should grant achievements, or have a gps signal
var/chosen_attack = 1 // chosen attack num
var/list/attack_action_types = list()
/mob/living/simple_animal/hostile/megafauna/New()
..()
/mob/living/simple_animal/hostile/megafauna/Initialize(mapload)
. = ..()
if(internal_type && true_spawn)
internal = new internal_type(src)
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
for(var/action_type in attack_action_types)
var/datum/action/innate/megafauna_attack/attack_action = new action_type()
@@ -44,7 +48,7 @@
/mob/living/simple_animal/hostile/megafauna/Destroy()
QDEL_NULL(internal_gps)
. = ..()
return ..()
/mob/living/simple_animal/hostile/megafauna/can_die()
return ..() && health <= 0
@@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
icon_state = "swarmer_console"
health = 750
maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe
internal_gps = /obj/item/gps/internal/swarmer_beacon
internal_type = /obj/item/gps/internal/swarmer_beacon
medal_type = BOSS_MEDAL_SWARMERS
score_type = SWARMER_BEACON_SCORE
faction = list("mining", "boss", "swarmer")
@@ -1,7 +1,8 @@
//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/animal.dmi'
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "Basilisk"
icon_living = "Basilisk"
icon_aggro = "Basilisk_alert"
@@ -29,15 +30,16 @@
vision_range = 2
aggro_vision_range = 9
turns_per_move = 5
loot = list(/obj/item/stack/ore/diamond{layer = 4.1},
/obj/item/stack/ore/diamond{layer = 4.1})
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER},
/obj/item/stack/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
nodamage = TRUE
flag = "energy"
temperature = 50
@@ -48,13 +50,14 @@
/mob/living/simple_animal/hostile/asteroid/basilisk/ex_act(severity)
switch(severity)
if(1.0)
if(1)
gib()
if(2.0)
if(2)
adjustBruteLoss(140)
if(3.0)
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."
@@ -71,14 +74,14 @@
a_intent = INTENT_HARM
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/bladeslice.ogg'
stat_attack = 1
stat_attack = UNCONSCIOUS
flying = TRUE
robust_searching = 1
crusher_loot = /obj/item/crusher_trophy/watcher_wing
loot = list()
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()
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random/Initialize(mapload)
. = ..()
if(prob(1))
if(prob(75))
@@ -98,7 +101,7 @@
health = 215
light_range = 3
light_power = 2.5
light_color = LIGHT_COLOR_ORANGE
light_color = LIGHT_COLOR_LAVA
projectiletype = /obj/item/projectile/temp/basilisk/magmawing
crusher_loot = /obj/item/crusher_trophy/blaster_tubes/magma_wing
crusher_drop_mod = 60
@@ -1,14 +1,14 @@
//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/animal.dmi'
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
vision_range = 2
aggro_vision_range = 9
move_to_delay = 5
friendly = "harmlessly rolls into"
@@ -22,6 +22,7 @@
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/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver,
@@ -30,8 +31,8 @@
var/chase_time = 100
var/will_burrow = TRUE
/mob/living/simple_animal/hostile/asteroid/goldgrub/New()
..()
/mob/living/simple_animal/hostile/asteroid/goldgrub/Initialize(mapload)
. = ..()
var/i = rand(1,3)
while(i)
loot += pick(/obj/item/stack/ore/silver, /obj/item/stack/ore/gold, /obj/item/stack/ore/uranium, /obj/item/stack/ore/diamond)
@@ -56,24 +57,22 @@
return
return ..()
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(var/atom/targeted_ore)
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore)
for(var/obj/item/stack/ore/O in get_turf(targeted_ore))
if(loot.len < 10)
var/using = min(10 - loot.len, O.amount)
if(length(loot) < 10)
var/using = min(10 - length(loot), O.amount)
for(var/i in 1 to using)
loot += O.type
O.use(using)
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 [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
visible_message("<span class='danger'>[P.name] was repelled by [name]'s girth!</span>")
/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustHealth(amount, updating_health = TRUE)
vision_range = 9
@@ -1,14 +1,14 @@
//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/animal.dmi'
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"
attack_sound = 'sound/weapons/punch4.ogg'
mouse_opacity = MOUSE_OPACITY_OPAQUE
mouse_opacity = MOUSE_OPACITY_ICON
move_to_delay = 40
ranged = TRUE
ranged_cooldown_time = 120
@@ -46,17 +46,21 @@
icon_state = pre_attack_icon
/mob/living/simple_animal/hostile/asteroid/goliath/revive()
move_force = MOVE_FORCE_VERY_STRONG
move_resist = MOVE_FORCE_VERY_STRONG
pull_force = MOVE_FORCE_VERY_STRONG
..()
anchored = TRUE
/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed)
move_force = MOVE_FORCE_DEFAULT
move_resist = MOVE_RESIST_DEFAULT
pull_force = PULL_FORCE_DEFAULT
..(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>")
visible_message("<span class='warning'>[src] digs its tentacles under [target]!</span>")
new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src)
ranged_cooldown = world.time + ranged_cooldown_time
icon_state = icon_aggro
@@ -73,7 +77,7 @@
if(icon_state != icon_aggro)
icon_state = icon_aggro
// Lavaland Goliath
//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."
@@ -87,10 +91,10 @@
crusher_loot = /obj/item/crusher_trophy/goliath_tentacle
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = TRUE
stat_attack = UNCONSCIOUS
robust_searching = TRUE
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize()
/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize(mapload)
. = ..()
if(prob(1))
new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc)
@@ -110,6 +114,7 @@
throw_message = "does nothing to the rocky hide of the"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days
butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/bone = 2)
crusher_drop_mod = 30
wander = FALSE
var/list/cached_tentacle_turfs
var/turf/last_location
@@ -136,7 +141,7 @@
/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
fromtendril = TRUE
// Tentacles
//Tentacles
/obj/effect/temp_visual/goliath_tentacle
name = "goliath tentacle"
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
@@ -1,3 +1,4 @@
//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."
@@ -5,49 +6,47 @@
icon_state = "gutlunch"
icon_living = "gutlunch"
icon_dead = "gutlunch"
icon_aggro = "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
density = FALSE
speak_chance = 1
turns_per_move = 8
obj_damage = 0
environment_smash = 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 = 2
gold_core_spawnable = 2
stat_attack = 1
ventcrawler = VENTCRAWLER_ALWAYS
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
stat_attack = UNCONSCIOUS
gender = NEUTER
stop_automated_movement = FALSE
stop_automated_movement_when_pulled = TRUE
stat_exclusive = TRUE
robust_searching = TRUE
search_objects = 3
search_objects = 3 //Ancient simplemob AI shitcode. This makes them ignore all other mobs.
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)
childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch = 100)
wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/organ/internal)
var/obj/item/udder/gutlunch/udder = null
/mob/living/simple_animal/hostile/asteroid/gutlunch/New()
/mob/living/simple_animal/hostile/asteroid/gutlunch/Initialize(mapload)
udder = new()
..()
. = ..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/Destroy()
qdel(udder)
udder = null
QDEL_NULL(udder)
return ..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/regenerate_icons()
@@ -96,7 +95,8 @@
/obj/item/udder/gutlunch
name = "nutrient sac"
/obj/item/udder/gutlunch/New()
/obj/item/udder/gutlunch/Initialize(mapload)
. = ..()
reagents = new(50)
reagents.my_atom = src
@@ -112,8 +112,8 @@
name = "gubbuck"
gender = MALE
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/New()
..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck/Initialize(mapload)
. = ..()
add_atom_colour(pick("#E39FBB", "#D97D64", "#CF8C4A"), FIXED_COLOUR_PRIORITY)
resize = 0.85
update_transform()
@@ -133,3 +133,34 @@
if(.)
udder.reagents.clear_reagents()
regenerate_icons()
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch
name = "grublunch"
wanted_objects = list() //They don't eat.
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
var/growth = 0
//Baby gutlunch
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Initialize(mapload)
. = ..()
add_atom_colour("#9E9E9E", FIXED_COLOUR_PRIORITY) //Somewhat hidden
resize = 0.45
update_transform()
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/Life()
..()
growth++
if(growth > 50) //originally used a timer for this but was more problem that it's worth.
growUp()
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch/proc/growUp()
var/mob/living/L
if(prob(45))
L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck(loc)
else
L = new /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen(loc)
mind?.transfer_to(L)
L.faction = faction.Copy()
L.setDir(dir)
visible_message("<span class='notice'>[src] grows up into [L].</span>")
qdel(src)
@@ -11,13 +11,11 @@
move_to_delay = 14
ranged = 1
vision_range = 5
vision_range = 5
aggro_vision_range = 9
speed = 3
maxHealth = 75
health = 75
harm_intent_damage = 5
obj_damage = 0
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = "lashes out at"
@@ -26,16 +24,18 @@
throw_message = "falls right through the strange body of the"
ranged_cooldown = 0
ranged_cooldown_time = 20
environment_smash = 0
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
retreat_distance = 3
minimum_distance = 3
pass_flags = PASSTABLE
loot = list(/obj/item/organ/internal/hivelord_core)
loot = list(/obj/item/organ/internal/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)
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/A = new brood_type(loc)
A.admin_spawned = admin_spawned
A.GiveTarget(target)
A.friends = friends
@@ -56,6 +56,7 @@
return FALSE
mouse_opacity = MOUSE_OPACITY_ICON
//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..."
@@ -72,7 +73,7 @@
speed = 3
maxHealth = 1
health = 1
flying = 1
flying = TRUE
harm_intent_damage = 5
melee_damage_lower = 2
melee_damage_upper = 2
@@ -80,14 +81,17 @@
speak_emote = list("telepathically cries")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "falls right through the strange body of the"
environment_smash = 0
pass_flags = PASSTABLE
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
pass_flags = PASSTABLE | PASSMOB
density = FALSE
del_on_death = 1
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/New()
..()
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, .proc/death), 100)
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood
name = "blood brood"
desc = "A living string of blood and alien materials."
@@ -103,9 +107,9 @@
reagents.reaction(get_turf(src))
return ..()
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/New()
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/Initialize(mapload)
. = ..()
create_reagents(30)
..()
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/blood/AttackingTarget()
..()
@@ -145,7 +149,7 @@
C.transfer_blood_to(src, 30)
color = mix_color_from_reagents(reagents.reagent_list)
// Legion
//Legion
/mob/living/simple_animal/hostile/asteroid/hivelord/legion
name = "legion"
desc = "You can still see what was once a person under the shifting mass of corruption."
@@ -155,6 +159,8 @@
icon_aggro = "legion"
icon_dead = "legion"
icon_gib = "syndicate_gib"
mouse_opacity = MOUSE_OPACITY_ICON
obj_damage = 60
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "lashes out at"
@@ -162,15 +168,15 @@
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "bounces harmlessly off of"
crusher_loot = /obj/item/crusher_trophy/legion_skull
loot = list(/obj/item/organ/internal/hivelord_core/legion)
loot = list(/obj/item/organ/internal/regenerative_core/legion)
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
del_on_death = 1
stat_attack = 1
stat_attack = UNCONSCIOUS
robust_searching = 1
var/dwarf_mob = FALSE
var/mob/living/carbon/human/stored_mob
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/Initialize()
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random/Initialize(mapload)
. = ..()
if(prob(5))
new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(loc)
@@ -186,6 +192,7 @@
maxHealth = 60
health = 60
speed = 2 //faster!
crusher_drop_mod = 20
dwarf_mob = TRUE
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
@@ -206,7 +213,7 @@
new /obj/effect/mob_spawn/human/corpse/damaged/legioninfested(T)
..(gibbed)
//Legion skull
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
name = "legion"
desc = "One of many."
@@ -227,15 +234,15 @@
speak_emote = list("echoes")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "is shrugged off by"
pass_flags = PASSTABLE
del_on_death = 1
stat_attack = 1
del_on_death = TRUE
stat_attack = UNCONSCIOUS
robust_searching = 1
var/can_infest_dead = FALSE
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life(seconds, times_fired)
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)
if(H.stat == UNCONSCIOUS || (can_infest_dead && H.stat == DEAD))
infest(H)
..()
@@ -253,13 +260,28 @@
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 = DEAD
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 = DEAD
can_infest_dead = TRUE
/obj/item/legion_skull
name = "legion's head"
desc = "The once living, now empty eyes of the former human's skull cut deep into your soul."
icon = 'icons/obj/mining.dmi'
icon_state = "skull"
//Tendril-spawned Legion remains, the charred skeletons of those whose bodies sank into laval or fell into chasms.
/obj/effect/mob_spawn/human/corpse/charredskeleton
name = "charred skeletal remains"
burn_damage = 1000
@@ -278,22 +300,22 @@
genemutcheck(H, SMALLSIZEBLOCK, null, MUTCHK_FORCED)
H.update_mutations()
/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize()
/obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize(mapload)
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
if(prob(4))
belt = pickweight(list(/obj/item/storage/belt/mining = 2, /obj/item/storage/belt/mining/alt = 2))
else if(prob(10))
belt = pickweight(list(/obj/item/pickaxe = 8, /obj/item/pickaxe/silver = 2, /obj/item/pickaxe/diamond = 1))
belt = pickweight(list(/obj/item/pickaxe = 8, /obj/item/pickaxe/mini = 4, /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
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))
@@ -308,10 +330,11 @@
else
head = /obj/item/clothing/head/helmet/skull
suit = /obj/item/clothing/suit/armor/bone
gloves = /obj/item/clothing/gloves/bracer
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
belt = /obj/item/storage/belt/mining/primitive
if(prob(30))
r_pocket = /obj/item/kitchen/knife/combat/survival/bone
if(prob(30))
@@ -332,7 +355,7 @@
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))
belt = pick(list(/obj/item/storage/belt/mining/vendor, /obj/item/storage/belt/utility/full))
if(prob(50))
back = /obj/item/bedsheet/rd/royal_cape
if(prob(10))
@@ -362,7 +385,6 @@
if("Cultist")
uniform = /obj/item/clothing/under/roman
suit = /obj/item/clothing/suit/hooded/cultrobes
head = /obj/item/clothing/head/hooded/culthood
suit_store = /obj/item/tome
r_pocket = /obj/item/restraints/legcuffs/bola/cult
l_pocket = /obj/item/melee/cultblade/dagger
@@ -1,13 +1,13 @@
//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)
unsuitable_atmos_damage = 15
faction = list("mining")
weather_immunities = list("lava","ash")
obj_damage = 30
environment_smash = 2
environment_smash = ENVIRONMENT_SMASH_WALLS
minbodytemp = 0
heat_damage_per_tick = 20
maxbodytemp = INFINITY
response_help = "pokes"
response_disarm = "shoves"
response_harm = "strikes"
@@ -15,15 +15,15 @@
a_intent = INTENT_HARM
var/crusher_loot
var/throw_message = "bounces off of"
var/icon_aggro = null // for swapping to when we get aggressive
var/fromtendril = FALSE
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
mob_size = MOB_SIZE_LARGE
var/icon_aggro = null
var/crusher_drop_mod = 25
/mob/living/simple_animal/hostile/asteroid/New()
..()
/mob/living/simple_animal/hostile/asteroid/Initialize(mapload)
. = ..()
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
/mob/living/simple_animal/hostile/asteroid/Aggro()
@@ -37,12 +37,12 @@
return
icon_state = icon_living
/mob/living/simple_animal/hostile/asteroid/bullet_act(var/obj/item/projectile/P)//Reduces damage from most projectiles to curb off-screen kills
/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'>The [P] has a reduced effect on [src]!</span>")
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
@@ -62,4 +62,10 @@
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot()
butcher_results[crusher_loot] = 1
butcher_results[crusher_loot] = 1
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
if(bodytemperature < minbodytemp)
adjustBruteLoss(2)
else if(bodytemperature > maxbodytemp)
adjustBruteLoss(20)
@@ -23,17 +23,17 @@
del_on_death = 1
var/gps = null
/mob/living/simple_animal/hostile/spawner/lavaland/New()
..()
/mob/living/simple_animal/hostile/spawner/lavaland/Initialize(mapload)
. = ..()
//for(var/F in RANGE_TURFS(1, src)) TODO: Uncomment
//if(ismineralturf(F))
//var/turf/simulated/mineral/M = F
//var/turf/simulated/mineral/M = F
//M.ChangeTurf(M.turf_type, FALSE, TRUE)
gps = new /obj/item/gps/internal(src)
/mob/living/simple_animal/hostile/spawner/lavaland/Destroy()
qdel(gps)
. = ..()
QDEL_NULL(gps)
return ..()
/mob/living/simple_animal/hostile/spawner/lavaland/death()
var/last_tendril = TRUE
@@ -21,7 +21,7 @@
attack_sound = 'sound/weapons/bite.ogg'
faction = list("mushroom")
environment_smash = 0
stat_attack = 2
stat_attack = DEAD
mouse_opacity = MOUSE_OPACITY_ICON
speed = 1
ventcrawler = 2
@@ -78,7 +78,7 @@
name = "Syndicate Operative"
force_threshold = 6 // Prevents people using punches to bypass eshield
robust_searching = 1 // Together with stat_attack, ensures dionae/etc that regen are killed properly
stat_attack = 1
stat_attack = UNCONSCIOUS
universal_speak = 1
melee_block_chance = 40
del_on_death = 1
@@ -22,7 +22,7 @@
melee_damage_lower = 5
melee_damage_upper = 10
web_type = /obj/structure/spider/terrorweb/black
stat_attack = 1 // ensures they will target people in crit, too!
stat_attack = UNCONSCIOUS // ensures they will target people in crit, too!
spider_tier = TS_TIER_2
@@ -21,7 +21,7 @@
melee_damage_lower = 10
melee_damage_upper = 20
regen_points_per_hp = 2 // 50% higher regen speed
stat_attack = 1 // ensures they will target people in crit, too!
stat_attack = UNCONSCIOUS // ensures they will target people in crit, too!
wander = 0 // wandering defeats the purpose of stealth
vision_range = 3 // very low idle vision range
delay_web = 20 // double speed
+1 -1
View File
@@ -272,7 +272,7 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.update_body()
var/obj/item/organ/internal/hivelord_core/organ = new /obj/item/organ/internal/hivelord_core
var/obj/item/organ/internal/regenerative_core/organ = new /obj/item/organ/internal/regenerative_core
organ.insert(user)
return ..()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB