Merge branch 'master' into lets_go_rebind_things

This commit is contained in:
S34N
2022-07-09 17:55:37 +01:00
572 changed files with 15277 additions and 15101 deletions
+6 -5
View File
@@ -95,11 +95,12 @@
if(client.prefs.toggles & PREFTOGGLE_CHAT_GHOSTEARS && (speaker in view(src)))
message = "<b>[message]</b>"
// Check if the language used is innate
for(var/datum/multilingual_say_piece/SP in message_pieces)
if(SP.speaking && SP.speaking.flags & INNATE)
custom_emote(EMOTE_AUDIBLE, message_clean, TRUE)
return
// Ensure only the speaker is forced to emote, and that the spoken language is inname
if(speaker == src)
for(var/datum/multilingual_say_piece/SP in message_pieces)
if(SP.speaking && SP.speaking.flags & INNATE)
custom_emote(EMOTE_AUDIBLE, message_clean, TRUE)
return
if(!can_hear())
// INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set
+1 -1
View File
@@ -54,7 +54,7 @@
if(istype(M))
for(var/atom/A in M.contents)
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/holder))
if(istype(A, /obj/item/holder))
return
M.status_flags &= ~PASSEMOTES
-24
View File
@@ -568,30 +568,6 @@
/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
return TRUE
/datum/language/corticalborer
name = "Cortical Link"
desc = "Cortical borers possess a strange link between their tiny minds."
speech_verb = "sings"
ask_verb = "sings"
exclaim_verbs = list("sings")
colour = "alien"
key = "bo"
flags = RESTRICTED | HIVEMIND | NOBABEL
follow = TRUE
/datum/language/corticalborer/broadcast(mob/living/speaker, message, speaker_mask)
var/mob/living/simple_animal/borer/B
if(iscarbon(speaker))
var/mob/living/carbon/M = speaker
B = M.has_brain_worms()
else if(istype(speaker,/mob/living/simple_animal/borer))
B = speaker
if(B)
speaker_mask = B.truename
..(speaker,message,speaker_mask)
/datum/language/binary
name = "Robot Talk"
desc = "Most human stations support free-use communications protocols and routing hubs for synthetic use."
@@ -30,9 +30,6 @@
continue
no_queen = 0
if(src.has_brain_worms())
to_chat(src, "<span class='warning'>We cannot perform this ability at the present time!</span>")
return
if(no_queen)
adjustPlasma(-500)
to_chat(src, "<span class='noticealien'>You begin to evolve!</span>")
@@ -61,10 +61,6 @@
var/obj/item/organ/internal/brain/B = src
if(!special)
var/mob/living/simple_animal/borer/borer = owner.has_brain_worms()
if(borer)
borer.leave_host() //Should remove borer if the brain is removed - RR
if(owner.mind && !non_primary)//don't transfer if the owner does not have a mind.
B.transfer_identity(user)
+9 -10
View File
@@ -14,10 +14,6 @@
QDEL_LIST(internal_organs)
QDEL_LIST(stomach_contents)
QDEL_LIST(processing_patches)
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(B)
B.leave_host()
qdel(B)
GLOB.carbon_list -= src
return ..()
@@ -518,10 +514,10 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
to_chat(src, "<span class='warning'>This ventilation duct is not connected to anything!</span>")
/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine)
if(!istype(starting_machine) || !starting_machine.returnPipenet() || !starting_machine.can_see_pipes())
/mob/living/proc/add_ventcrawl(obj/machinery/atmospherics/starting_machine, obj/machinery/atmospherics/target_move)
if(!istype(starting_machine) || !starting_machine.returnPipenet(target_move) || !starting_machine.can_see_pipes())
return
var/datum/pipeline/pipeline = starting_machine.returnPipenet()
var/datum/pipeline/pipeline = starting_machine.returnPipenet(target_move)
var/list/totalMembers = list()
totalMembers |= pipeline.members
totalMembers |= pipeline.other_atmosmch
@@ -543,13 +539,15 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
/atom/proc/update_pipe_vision()
return
/mob/living/update_pipe_vision()
if(pipes_shown.len)
/mob/living/update_pipe_vision(obj/machinery/atmospherics/target_move)
if(pipes_shown.len && !(target_move))
if(!is_ventcrawling(src))
remove_ventcrawl()
else
if(is_ventcrawling(src))
add_ventcrawl(loc)
if(target_move)
remove_ventcrawl()
add_ventcrawl(loc, target_move)
//Throwing stuff
@@ -979,6 +977,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
else
REMOVE_TRAIT(src, TRAIT_RESTRAINED, "handcuffed")
clear_alert("handcuffed")
changeNext_move(CLICK_CD_RAPID) //reset click cooldown from handcuffs
update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed.
update_inv_handcuffed()
update_hud_handcuffed()
@@ -14,8 +14,6 @@
var/obj/item/head = null
var/obj/item/clothing/suit/wear_suit = null //TODO: necessary? Are they even used? ~Carn
var/mob/living/simple_animal/borer/borer = null
//Active emote/pose
var/pose = null
@@ -203,9 +203,6 @@
stat("Distribution Pressure", internal.distribute_pressure)
// I REALLY need to split up status panel things into datums
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(B && B.controlling)
stat("Chemicals", B.chemicals)
if(mind)
var/datum/antagonist/changeling/cling = mind.has_antag_datum(/datum/antagonist/changeling)
@@ -489,7 +489,7 @@ emp_act
if(prob(I.force))
visible_message("<span class='combat danger'>[src] has been knocked down!</span>", \
"<span class='combat userdanger'>[src] has been knocked down!</span>")
apply_effect(10 SECONDS, WEAKEN, armor)
KnockDown(10 SECONDS)
AdjustConfused(30 SECONDS)
if(prob(I.force + ((100 - health)/2)) && src != user && I.damtype == BRUTE)
SSticker.mode.remove_revolutionary(mind)
@@ -510,7 +510,7 @@ emp_act
if(stat == CONSCIOUS && I.force && prob(I.force + 10))
visible_message("<span class='combat danger'>[src] has been knocked down!</span>", \
"<span class='combat userdanger'>[src] has been knocked down!</span>")
apply_effect(10 SECONDS, WEAKEN, armor)
KnockDown(8 SECONDS)
if(bloody)
if(wear_suit)
+2 -3
View File
@@ -39,9 +39,6 @@
winset(client, "input", "text=[null]")
/mob/living/carbon/human/say_understands(mob/other, datum/language/speaking = null)
if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak.
return 1
if(dna.species.can_understand(other))
return 1
@@ -100,6 +97,8 @@
// how do species that don't breathe talk? magic, that's what.
var/breathes = (!HAS_TRAIT(src, TRAIT_NOBREATH))
var/obj/item/organ/internal/L = get_organ_slot("lungs")
if(HAS_TRAIT(src, TRAIT_MUTE))
return FALSE
if((breathes && !L) || breathes && L && (L.status & ORGAN_DEAD))
return FALSE
if(getOxyLoss() > 10 || AmountLoseBreath() >= 8 SECONDS)
@@ -504,9 +504,9 @@
target.visible_message("<span class='danger'>[user] [pick(attack.attack_verb)]ed [target]!</span>")
target.apply_damage(damage, BRUTE, affecting, armor_block, sharp = attack.sharp) //moving this back here means Armalis are going to knock you down 70% of the time, but they're pure adminbus anyway.
if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold)
target.visible_message("<span class='danger'>[user] has weakened [target]!</span>", \
"<span class='userdanger'>[user] has weakened [target]!</span>")
target.apply_effect(8 SECONDS, WEAKEN, armor_block)
target.visible_message("<span class='danger'>[user] has knocked down [target]!</span>", \
"<span class='userdanger'>[user] has knocked down [target]!</span>")
target.KnockDown(4 SECONDS)
target.forcesay(GLOB.hit_appends)
else if(IS_HORIZONTAL(target))
target.forcesay(GLOB.hit_appends)
@@ -772,7 +772,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
else
standing = mutable_appearance('icons/mob/clothing/feet.dmi', "[shoes.icon_state]", layer = -SHOES_LAYER)
if(shoes.blood_DNA)
var/image/bloodsies = image("icon" = dna.species.blood_mask, "icon_state" = "shoeblood")
bloodsies.color = shoes.blood_color
@@ -979,13 +978,16 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
remove_overlay(BACK_LAYER)
if(back)
//determine the icon to use
var/t_state = back.item_state
if(!t_state)
t_state = back.icon_state
var/mutable_appearance/standing
if(back.icon_override)
standing = mutable_appearance(back.icon_override, "[back.icon_state]", layer = -BACK_LAYER)
standing = mutable_appearance(back.icon_override, "[t_state]", layer = -BACK_LAYER)
else if(back.sprite_sheets && back.sprite_sheets[dna.species.name])
standing = mutable_appearance(back.sprite_sheets[dna.species.name], "[back.icon_state]", layer = -BACK_LAYER)
standing = mutable_appearance(back.sprite_sheets[dna.species.name], "[t_state]", layer = -BACK_LAYER)
else
standing = mutable_appearance('icons/mob/clothing/back.dmi', "[back.icon_state]", layer = -BACK_LAYER)
standing = mutable_appearance('icons/mob/clothing/back.dmi', "[t_state]", layer = -BACK_LAYER)
//create the image
standing.alpha = back.alpha
-4
View File
@@ -2,7 +2,6 @@
mob_type_allowed_typecache = /mob/living
mob_type_blacklist_typecache = list(
/mob/living/carbon/brain, // nice try
/mob/living/captive_brain,
/mob/living/silicon,
/mob/living/simple_animal/bot
)
@@ -83,7 +82,6 @@
mob_type_blacklist_typecache = list(
/mob/living/carbon/brain,
/mob/living/captive_brain
)
/datum/emote/living/deathgasp/get_sound(mob/living/user)
@@ -346,7 +344,6 @@
mob_type_blacklist_typecache = list(
/mob/living/carbon/brain,
/mob/living/captive_brain
)
/datum/emote/living/tilt
@@ -389,7 +386,6 @@
message = null
mob_type_blacklist_typecache = list(
/mob/living/carbon/brain, // nice try
/mob/living/captive_brain
)
// Custom emotes should be able to be forced out regardless of context.
@@ -74,7 +74,7 @@
maxHealth = 150
melee_damage_lower = 15
melee_damage_upper = 15
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/neurotox
@@ -95,7 +95,7 @@
maxHealth = 250
melee_damage_lower = 15
melee_damage_upper = 15
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
move_to_delay = 4
@@ -63,6 +63,6 @@
melee_damage_upper = 30
a_intent = INTENT_HARM
pass_flags = PASSTABLE
universal_speak = 1
universal_understand = 1
universal_speak = TRUE
universal_understand = TRUE
gold_core_spawnable = NO_SPAWN //badmin only
@@ -18,7 +18,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
stop_automated_movement_when_pulled = 0
stop_automated_movement_when_pulled = FALSE
maxHealth = 60
health = 60
obj_damage = 60
@@ -124,7 +124,7 @@
icon_living = "holocarp"
maxbodytemp = INFINITY
gold_core_spawnable = NO_SPAWN
del_on_death = 1
del_on_death = TRUE
random_color = FALSE
/mob/living/simple_animal/hostile/carp/megacarp
@@ -90,10 +90,10 @@
if(AIStatus == AI_IDLE)
//1% chance to skitter madly away
if(!busy && prob(1))
stop_automated_movement = 1
stop_automated_movement = TRUE
Goto(pick(urange(20, src, 1)), move_to_delay)
spawn(50)
stop_automated_movement = 0
stop_automated_movement = FALSE
walk(src,0)
return 1
@@ -103,7 +103,7 @@
if(cocoon_target == C && get_dist(src,cocoon_target) > 1)
cocoon_target = null
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/handle_automated_movement() //Hacky and ugly.
if(..())
@@ -135,7 +135,7 @@
if(isitem(O) || isstructure(O) || ismachinery(O))
cocoon_target = O
busy = MOVING_TO_TARGET
stop_automated_movement = 1
stop_automated_movement = TRUE
Goto(O, move_to_delay)
//give up if we can't reach them after 10 seconds
GiveUp(O)
@@ -146,7 +146,7 @@
else
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
/mob/living/simple_animal/hostile/poison/giant_spider/verb/Web()
set name = "Lay Web"
@@ -158,12 +158,12 @@
if(busy != SPINNING_WEB)
busy = SPINNING_WEB
src.visible_message("<span class='notice'>\the [src] begins to secrete a sticky substance.</span>")
stop_automated_movement = 1
stop_automated_movement = TRUE
spawn(40)
if(busy == SPINNING_WEB && src.loc == T)
new /obj/structure/spider/stickyweb(T)
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/Wrap()
@@ -198,7 +198,7 @@
if(cocoon_target && busy != SPINNING_COCOON)
busy = SPINNING_COCOON
src.visible_message("<span class='notice'>\the [src] begins to secrete a sticky substance around \the [cocoon_target].</span>")
stop_automated_movement = 1
stop_automated_movement = TRUE
walk(src,0)
spawn(50)
if(busy == SPINNING_COCOON)
@@ -234,7 +234,7 @@
C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3")
cocoon_target = null
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/verb/LayEggs()
set name = "Lay Eggs"
@@ -249,7 +249,7 @@
else if(busy != LAYING_EGGS)
busy = LAYING_EGGS
src.visible_message("<span class='notice'>\the [src] begins to lay a cluster of eggs.</span>")
stop_automated_movement = 1
stop_automated_movement = TRUE
spawn(50)
if(busy == LAYING_EGGS)
E = locate() in get_turf(src)
@@ -259,10 +259,10 @@
C.master_commander = master_commander
C.xenobiology_spawned = xenobiology_spawned
if(ckey)
C.player_spiders = 1
C.player_spiders = TRUE
fed--
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
#undef SPINNING_WEB
#undef LAYING_EGGS
@@ -14,7 +14,7 @@
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("creature")
robust_searching = 1
robust_searching = TRUE
stat_attack = DEAD
obj_damage = 0
environment_smash = 0
@@ -20,14 +20,14 @@
maxHealth = 250 // same as sgt araneus
health = 250
obj_damage = 50
robust_searching = 1
robust_searching = TRUE
stat_attack = UNCONSCIOUS
attacktext = "savages"
attack_sound = 'sound/effects/bite.ogg'
speak_emote = list("growls")
see_in_dark = 9
universal_understand = 1
wander = 0
universal_understand = TRUE
wander = FALSE
var/life_regen_cycles = 0
var/life_regen_cycle_trigger = 10 // heal once for every X number of cycles spent resting
var/life_regen_amount = -10 // negative, because negative = healing
@@ -109,7 +109,7 @@
maxHealth = 400
health = 400
force_threshold = 5 // no punching
universal_speak = 1
universal_speak = TRUE
smoke_freq = 200
life_regen_cycle_trigger = 5
melee_damage_lower = 20
@@ -19,7 +19,7 @@
projectilesound = 'sound/weapons/gunshots/gunshot.ogg'
projectiletype = /obj/item/projectile/hivebotbullet
faction = list("hivebot")
check_friendly_fire = 1
check_friendly_fire = TRUE
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)
minbodytemp = 0
speak_emote = list("states")
@@ -27,18 +27,18 @@
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
deathmessage = "blows apart!"
bubble_icon = "machine"
del_on_death = 1
del_on_death = TRUE
footstep_type = FOOTSTEP_MOB_CLAW
/mob/living/simple_animal/hostile/hivebot/range
name = "Hivebot"
desc = "A smallish robot, this one is armed!"
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
/mob/living/simple_animal/hostile/hivebot/rapid
ranged = 1
ranged = TRUE
rapid = 3
retreat_distance = 5
minimum_distance = 5
@@ -48,7 +48,7 @@
desc = "A robot, this one is armed and looks tough!"
health = 80
maxHealth = 80
ranged = 1
ranged = TRUE
/mob/living/simple_animal/hostile/hivebot/death(gibbed)
// Only execute the below if we successfully died
@@ -66,8 +66,8 @@
health = 200
maxHealth = 200
status_flags = 0
anchored = 1
stop_automated_movement = 1
anchored = TRUE
stop_automated_movement = TRUE
var/bot_type = "norm"
var/bot_amt = 10
var/spawn_delay = 600
@@ -1,6 +1,6 @@
/mob/living/simple_animal/hostile
faction = list("hostile")
stop_automated_movement_when_pulled = 0
stop_automated_movement_when_pulled = FALSE
obj_damage = 40
environment_smash = ENVIRONMENT_SMASH_STRUCTURES //Bitflags. Set to ENVIRONMENT_SMASH_STRUCTURES to break closets,tables,racks, etc; ENVIRONMENT_SMASH_WALLS for walls; ENVIRONMENT_SMASH_RWALLS for rwalls
var/atom/target
@@ -29,13 +29,13 @@
var/ranged_cooldown = 0 //What the current cooldown on ranged attacks is, generally world.time + ranged_cooldown_time
var/ranged_cooldown_time = 30 //How long, in deciseconds, the cooldown of ranged attacks is
var/ranged_ignores_vision = FALSE //if it'll fire ranged attacks even if it lacks vision on its target, only works with environment smash
var/check_friendly_fire = 0 // Should the ranged mob check for friendlies when shooting
var/check_friendly_fire = FALSE // Should the ranged mob check for friendlies when shooting
var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat.
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance
//These vars are related to how mobs locate and target
var/robust_searching = 0 //By default, mobs have a simple searching method, set this to 1 for the more scrutinous searching (stat_attack, stat_exclusive, etc), should be disabled on most mobs
var/robust_searching = FALSE //By default, mobs have a simple searching method, set this to TRUE for the more scrutinous searching (stat_attack, stat_exclusive, etc), should be disabled on most mobs
var/vision_range = 9 //How big of an area to search for targets in, a vision of 9 attempts to find targets as soon as they walk into screen view
var/aggro_vision_range = 9 //If a mob is aggro, we search in this radius. Defaults to 9 to keep in line with original simple mob aggro radius
var/search_objects = 0 //If we want to consider objects when searching around, set this to 1. If you want to search for objects while also ignoring mobs until hurt, set it to 2. To completely ignore mobs, even when attacked, set it to 3
@@ -44,7 +44,7 @@
var/list/wanted_objects = list() //A typecache of objects types that will be checked against to attack, should we have search_objects enabled
var/stat_attack = CONSCIOUS //Mobs with stat_attack to UNCONSCIOUS will attempt to attack things that are unconscious, Mobs with stat_attack set to DEAD will attempt to attack the dead.
var/stat_exclusive = FALSE //Mobs with this set to TRUE will exclusively attack things defined by stat_attack, stat_attack DEAD means they will only attack corpses
var/attack_same = 0 //Set us to 1 to allow us to attack our own faction
var/attack_same = FALSE //Set to TRUE to allow us to attack our own faction
var/atom/targets_from = null //all range/attack/etc. calculations should be done from this atom, defaults to the mob itself, useful for Vehicles and such
var/attack_all_objects = FALSE //if true, equivalent to having a wanted_objects list containing ALL objects.
@@ -257,7 +257,7 @@
AttackingTarget()
/mob/living/simple_animal/hostile/proc/MoveToTarget(list/possible_targets)//Step 5, handle movement between us and our target
stop_automated_movement = 1
stop_automated_movement = TRUE
if(!target || !CanAttack(target))
LoseTarget()
return 0
@@ -334,7 +334,7 @@
taunt_chance = max(taunt_chance-7,2)
/mob/living/simple_animal/hostile/proc/LoseAggro()
stop_automated_movement = 0
stop_automated_movement = FALSE
vision_range = initial(vision_range)
taunt_chance = initial(taunt_chance)
@@ -18,7 +18,7 @@
var/mob/living/parent_mob
var/multiply_chance = 0 //if we multiply on hit
deathmessage = "vanishes into thin air! It was a fake!"
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/illusion/Life()
@@ -18,7 +18,7 @@
response_help = "pets the"
response_disarm = "gently pushes aside the"
response_harm = "hits the"
stop_automated_movement_when_pulled = 0
stop_automated_movement_when_pulled = FALSE
maxHealth = 50
health = 50
pixel_x = -16
@@ -463,7 +463,7 @@ Difficulty: Medium
icon = 'icons/effects/fire.dmi'
icon_state = "1"
anchored = TRUE
opacity = 0
opacity = FALSE
density = TRUE
duration = 82
color = COLOR_DARK_ORANGE
@@ -30,15 +30,15 @@ Difficulty: Medium
armour_penetration = 50
melee_damage_lower = 25
melee_damage_upper = 25
wander = 0
wander = FALSE
speed = 2
ranged = 1
del_on_death = 1
ranged = TRUE
del_on_death = TRUE
retreat_distance = 5
minimum_distance = 5
ranged_cooldown_time = 20
var/size = 5
var/charging = 0
var/charging = FALSE
internal_type = /obj/item/gps/internal/legion
medal_type = BOSS_MEDAL_LEGION
score_type = LEGION_SCORE
@@ -46,7 +46,7 @@ Difficulty: Medium
pixel_x = -75
loot = list(/obj/item/stack/sheet/bone = 3)
vision_range = 13
elimination = 1
elimination = TRUE
appearance_flags = 0
mouse_opacity = MOUSE_OPACITY_ICON
stat_attack = UNCONSCIOUS // Overriden from /tg/ - otherwise Legion starts chasing its minions
@@ -70,20 +70,20 @@ Difficulty: Medium
else
visible_message("<span class='warning'><b>[src] charges!</b></span>")
SpinAnimation(speed = 20, loops = 5, parallel = FALSE)
ranged = 0
ranged = FALSE
retreat_distance = 0
minimum_distance = 0
speed = 0
charging = 1
charging = TRUE
spawn(50)
reset_charge()
/mob/living/simple_animal/hostile/megafauna/legion/proc/reset_charge()
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
speed = 2
charging = 0
charging = FALSE
/mob/living/simple_animal/hostile/megafauna/legion/can_die()
return ..() && health <= 0
@@ -126,7 +126,7 @@ Difficulty: Medium
break
if(last_legion)
loot = list(/obj/item/staff/storm)
elimination = 0
elimination = FALSE
else if(prob(5))
loot = list(/obj/structure/closet/crate/necropolis/tendril)
if(!true_spawn)
@@ -30,7 +30,7 @@
var/list/crusher_loot
var/medal_type
var/score_type = BOSS_SCORE
var/elimination = 0
var/elimination = FALSE
var/anger_modifier = 0
var/obj/item/gps/internal_gps
var/internal_type
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
//AI versions of the swarmer mini-antag
//This is an Abstract Base, it re-enables AI, but does not give the swarmer any goals/targets
/mob/living/simple_animal/hostile/swarmer/ai
wander = 1
wander = TRUE
faction = list("swarmer", "mining")
weather_immunities = list("ash") //wouldn't be fun otherwise
AIStatus = AI_ON
@@ -31,7 +31,7 @@
var/is_electronic = 0
gold_core_spawnable = HOSTILE_SPAWN
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/mimic/emp_act(severity)
if(is_electronic)
@@ -45,9 +45,9 @@
// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies.
/mob/living/simple_animal/hostile/mimic/crate
attacktext = "bites"
stop_automated_movement = 1
wander = 0
var/attempt_open = 0
stop_automated_movement = TRUE
wander = FALSE
var/attempt_open = FALSE
// Pickup loot
/mob/living/simple_animal/hostile/mimic/crate/Initialize(mapload)
@@ -84,7 +84,7 @@
/mob/living/simple_animal/hostile/mimic/crate/proc/trigger()
if(!attempt_open)
visible_message("<b>[src]</b> starts to move!")
attempt_open = 1
attempt_open = TRUE
/mob/living/simple_animal/hostile/mimic/crate/adjustHealth(amount, updating_health = TRUE)
trigger()
@@ -221,7 +221,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
emote_see = list("aims menacingly")
obj_damage = 0
environment_smash = 0 //needed? seems weird for them to do so
ranged = 1
ranged = TRUE
retreat_distance = 1 //just enough to shoot
minimum_distance = 6
var/obj/item/gun/G = O
@@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
Pewgun.chambered.loc = Pewgun
visible_message("<span class='danger'>The <b>[src]</b> cocks itself!</span>")
else
ranged = 0 //BANZAIIII
ranged = FALSE //BANZAIIII
retreat_distance = 0
minimum_distance = 1
return
@@ -12,7 +12,7 @@
move_to_delay = 20
projectiletype = /obj/item/projectile/temp/basilisk
projectilesound = 'sound/weapons/pierce.ogg'
ranged = 1
ranged = TRUE
ranged_message = "stares"
ranged_cooldown_time = 30
throw_message = "does nothing against the hard shell of"
@@ -77,7 +77,7 @@
attack_sound = 'sound/weapons/bladeslice.ogg'
stat_attack = UNCONSCIOUS
flying = TRUE
robust_searching = 1
robust_searching = TRUE
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)
@@ -10,7 +10,7 @@
mob_biotypes = MOB_ORGANIC
mouse_opacity = MOUSE_OPACITY_OPAQUE
move_to_delay = 14
ranged = 1
ranged = TRUE
vision_range = 5
aggro_vision_range = 9
speed = 3
@@ -86,7 +86,7 @@
environment_smash = ENVIRONMENT_SMASH_NONE
pass_flags = PASSTABLE | PASSMOB
density = FALSE
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize(mapload)
. = ..()
@@ -173,9 +173,9 @@
crusher_loot = /obj/item/crusher_trophy/legion_skull
loot = list(/obj/item/organ/internal/regenerative_core/legion)
brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion
del_on_death = 1
del_on_death = TRUE
stat_attack = UNCONSCIOUS
robust_searching = 1
robust_searching = TRUE
var/dwarf_mob = FALSE
var/mob/living/carbon/human/stored_mob
@@ -239,7 +239,7 @@
throw_message = "is shrugged off by"
del_on_death = TRUE
stat_attack = UNCONSCIOUS
robust_searching = 1
robust_searching = TRUE
var/can_infest_dead = FALSE
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life(seconds, times_fired)
@@ -17,7 +17,7 @@
obj_damage = 0
melee_damage_lower = 1
melee_damage_upper = 1
attack_same = 2
attack_same = 2 // this is usually a bool, but mushrooms are a special case
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = list("mushroom")
@@ -26,7 +26,7 @@
mouse_opacity = MOUSE_OPACITY_ICON
speed = 1
ventcrawler = 2
robust_searching = 1
robust_searching = TRUE
speak_emote = list("squeaks")
deathmessage = "fainted"
var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
@@ -27,7 +27,7 @@
speak_emote = list("yarrs")
loot = list(/obj/effect/mob_spawn/human/corpse/pirate,
/obj/item/melee/energy/sword/pirate)
del_on_death = 1
del_on_death = TRUE
faction = list("pirate")
sentience_type = SENTIENCE_OTHER
footstep_type = FOOTSTEP_MOB_SHOE
@@ -38,7 +38,7 @@
icon_living = "pirateranged"
icon_dead = "piratemelee_dead" // Does not actually exist. del_on_death.
projectilesound = 'sound/weapons/laser.ogg'
ranged = 1
ranged = TRUE
rapid = 2
retreat_distance = 5
minimum_distance = 5
@@ -7,7 +7,7 @@
icon_living = "drone3"
icon_dead = "drone_dead"
mob_biotypes = MOB_ROBOTIC
ranged = 1
ranged = TRUE
rapid = 3
retreat_distance = 3
minimum_distance = 3
@@ -29,7 +29,7 @@
minbodytemp = 0
faction = list("malf_drone")
deathmessage = "suddenly breaks apart."
del_on_death = 1
del_on_death = TRUE
var/passive_mode = TRUE // if true, don't target anything.
/mob/living/simple_animal/hostile/malf_drone/Initialize(mapload)
@@ -24,7 +24,7 @@
attack_sound = 'sound/weapons/bite.ogg'
speak_emote = list("gnashes")
faction = list("carp")
flying = 1
flying = TRUE
var/carp_color = "carp" //holder for icon set
var/static/list/carp_colors = list(\
@@ -23,7 +23,7 @@
icon_living = "ghost2"
icon_dead = "ghost"
mob_biotypes = MOB_SPIRIT
density = 0 // ghost
density = FALSE // ghost
invisibility = 60 // no seriously ghost
speak_chance = 0 // fyi, ghost
@@ -52,7 +52,7 @@
gold_core_spawnable = NO_SPAWN //too spooky for science
faction = list("undead") // did I mention ghost
loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm)
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(check_drift = 0)
return 1
@@ -91,7 +91,7 @@
faction = list("undead")
loot = list(/obj/effect/decal/remains/human)
del_on_death = 1
del_on_death = TRUE
footstep_type = FOOTSTEP_MOB_SHOE
/mob/living/simple_animal/hostile/retaliate/zombie
@@ -121,4 +121,4 @@
faction = list("undead")
loot = list(/obj/effect/decal/cleanable/blood/gibs)
del_on_death = 1
del_on_death = TRUE
@@ -26,14 +26,14 @@
status_flags = CANPUSH
loot = list(/obj/effect/mob_spawn/human/corpse/russian,
/obj/item/kitchen/knife)
del_on_death = 1
del_on_death = TRUE
sentience_type = SENTIENCE_OTHER
footstep_type = FOOTSTEP_MOB_SHOE
/mob/living/simple_animal/hostile/russian/ranged
icon_state = "russianranged"
icon_living = "russianranged"
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
projectilesound = 'sound/weapons/gunshots/gunshot.ogg'
@@ -22,7 +22,7 @@
attack_sound = 'sound/hallucinations/growl1.ogg'
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 = 10
robust_searching = 1
robust_searching = TRUE
stat_attack = UNCONSCIOUS
gold_core_spawnable = HOSTILE_SPAWN
faction = list("skeleton")
@@ -21,7 +21,7 @@
maxHealth = 50
health = 50
stop_automated_movement = 1
stop_automated_movement = TRUE
animate_movement = SYNC_STEPS
minbodytemp = 0
@@ -73,7 +73,7 @@
animate_movement = SLIDE_STEPS
AIStatus = AI_ON//The head is conscious
stop_automated_movement = 0 //Ditto ^
stop_automated_movement = FALSE //Ditto ^
faction = list("spaceworms") //head and body both have this faction JIC
@@ -17,7 +17,7 @@
speed = -1
maxHealth = 50000
health = 50000
healable = 0
healable = FALSE
harm_intent_damage = 35
obj_damage = 100
@@ -47,7 +47,7 @@
pull_force = MOVE_FORCE_EXTREMELY_STRONG
status_flags = GODMODE // Cannot push also
var/cannot_be_seen = 1
var/cannot_be_seen = TRUE
var/mob/living/creator = null
@@ -161,7 +161,7 @@
desc = "You will trigger a large amount of lights around you to flicker."
charge_max = 300
clothes_req = 0
clothes_req = FALSE
/obj/effect/proc_holder/spell/aoe_turf/flicker_lights/create_new_targeting()
var/datum/spell_targeting/aoe/turf/T = new()
@@ -181,7 +181,7 @@
message = "<span class='notice'>You glare your eyes.</span>"
charge_max = 600
clothes_req = 0
clothes_req = FALSE
/obj/effect/proc_holder/spell/aoe_turf/blindness/create_new_targeting()
var/datum/spell_targeting/aoe/turf/T = new()
@@ -23,10 +23,10 @@
a_intent = INTENT_HARM
unsuitable_atmos_damage = 15
faction = list("syndicate")
check_friendly_fire = 1
check_friendly_fire = TRUE
status_flags = CANPUSH
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
del_on_death = 1
del_on_death = TRUE
sentience_type = SENTIENCE_OTHER
footstep_type = FOOTSTEP_MOB_SHOE
@@ -82,14 +82,14 @@
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot
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
robust_searching = TRUE // Together with stat_attack, ensures dionae/etc that regen are killed properly
stat_attack = UNCONSCIOUS
universal_speak = 1
universal_speak = TRUE
icon_state = "syndicate_swordonly"
icon_living = "syndicate_swordonly"
melee_block_chance = 0
ranged_block_chance = 0
del_on_death = 1
del_on_death = TRUE
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/alert_on_death = FALSE
@@ -236,7 +236,7 @@
melee_damage_upper = 10
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
ranged = 1
ranged = TRUE
rapid = 3
retreat_distance = 3
minimum_distance = 3
@@ -266,7 +266,7 @@
melee_damage_upper = 10
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
ranged = 1
ranged = TRUE
retreat_distance = 3
minimum_distance = 3
melee_block_chance = 0
@@ -295,7 +295,7 @@
icon_state = "syndicate_space_sword"
icon_living = "syndicate_space_sword"
speed = 1
wander = 0
wander = FALSE
alert_on_spacing = FALSE
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/Process_Spacemove(movement_dir = 0)
@@ -317,7 +317,7 @@
/mob/living/simple_animal/hostile/syndicate/ranged
ranged = 1
ranged = TRUE
rapid = 2
retreat_distance = 5
minimum_distance = 5
@@ -365,7 +365,7 @@
flying = TRUE
bubble_icon = "syndibot"
gold_core_spawnable = HOSTILE_SPAWN
del_on_death = 1
del_on_death = TRUE
deathmessage = "is smashed into pieces!"
/mob/living/simple_animal/hostile/viscerator/Initialize(mapload)
@@ -159,8 +159,8 @@
name = "terror web"
desc = "it's stringy and sticky"
icon = 'icons/effects/effects.dmi'
anchored = 1 // prevents people dragging it
density = 0 // prevents it blocking all movement
anchored = TRUE // prevents people dragging it
density = FALSE // prevents it blocking all movement
max_integrity = 20 // two welders, or one laser shot (15 for the normal spider webs)
icon_state = "stickyweb1"
var/creator_ckey = null
@@ -252,7 +252,7 @@
return
busy = SPINNING_COCOON
visible_message("<span class='notice'>[src] begins to secrete a sticky substance around [cocoon_target].</span>")
stop_automated_movement = 1
stop_automated_movement = TRUE
walk(src,0)
if(do_after(src, 40, target = cocoon_target.loc))
if(busy == SPINNING_COCOON)
@@ -291,7 +291,7 @@
C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3")
cocoon_target = null
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoVentSmash()
var/valid_target = FALSE
@@ -308,7 +308,7 @@
if(do_after(src, 40, target = loc))
for(var/obj/machinery/atmospherics/unary/vent_pump/P in range(1, get_turf(src)))
if(P.welded)
P.welded = 0
P.welded = FALSE
P.update_icon()
P.update_pipe_image()
forceMove(P.loc)
@@ -316,7 +316,7 @@
return
for(var/obj/machinery/atmospherics/unary/vent_scrubber/C in range(1, get_turf(src)))
if(C.welded)
C.welded = 0
C.welded = FALSE
C.update_icon()
C.update_pipe_image()
forceMove(C.loc)
@@ -23,7 +23,7 @@
spider_opens_doors = 2 // Breach specialist.
environment_smash = ENVIRONMENT_SMASH_RWALLS // Breaks anything.
spider_tier = TS_TIER_2
ai_ventbreaker = 1
ai_ventbreaker = TRUE
freq_ventcrawl_combat = 600 // Ventcrawls very frequently, breaking open vents as it goes.
freq_ventcrawl_idle = 1800
web_type = null
@@ -55,7 +55,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/gray/spider_special_action()
if(prob(prob_ai_massweb))
for(var/turf/simulated/T in oview(2,get_turf(src)))
if(T.density == 0)
if(!T.density)
var/obj/structure/spider/terrorweb/W = locate() in T
if(!W)
new web_type(T)
@@ -21,7 +21,7 @@
spider_tier = TS_TIER_3
// Unlike queens, no ranged attack.
ranged = 0
ranged = FALSE
retreat_distance = 0
minimum_distance = 0
projectilesound = null
@@ -111,5 +111,5 @@
/obj/structure/spider/terrorweb/purple
name = "thick web"
desc = "This web is so thick, most cannot see beyond it."
opacity = 1
opacity = TRUE
max_integrity = 40
@@ -27,7 +27,7 @@
ai_ventcrawls = FALSE
idle_ventcrawl_chance = 0
force_threshold = 18 // outright immune to anything of force under 18, this means welders can't hurt it, only guns can
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
projectilesound = 'sound/weapons/pierce.ogg'
@@ -172,7 +172,7 @@
else if(entry_vent)
if(!path_to_vent)
visible_message("<span class='danger'>\The [src] looks around warily - then seeks a better nesting ground.</span>")
path_to_vent = 1
path_to_vent = TRUE
else
neststep = -1
message_admins("Warning: [key_name_admin(src)] was spawned in an area without a vent! This is likely a mapping/spawn mistake. This mob's AI has been permanently deactivated.")
@@ -7,7 +7,7 @@
name = "spiderling"
desc = "A fast-moving tiny spider, prone to making aggressive hissing sounds. Hope it doesn't grow up."
icon_state = "spiderling"
anchored = 0
anchored = FALSE
layer = 2.75
max_integrity = 3
var/stillborn = FALSE
@@ -101,7 +101,7 @@
return
if(travelling_in_vent)
if(isturf(loc))
travelling_in_vent = 0
travelling_in_vent = FALSE
entry_vent = null
else if(entry_vent)
if(get_dist(src, entry_vent) <= 1)
@@ -179,7 +179,7 @@
// --------------------------------------------------------------------------------
/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoLayTerrorEggs(lay_type, lay_number)
stop_automated_movement = 1
stop_automated_movement = TRUE
var/obj/structure/spider/eggcluster/terror_eggcluster/C = new /obj/structure/spider/eggcluster/terror_eggcluster(get_turf(src), lay_type)
C.spiderling_number = lay_number
C.spider_myqueen = spider_myqueen
@@ -189,7 +189,7 @@
C.amount_grown = 250
C.spider_growinstantly = TRUE
spawn(10)
stop_automated_movement = 0
stop_automated_movement = FALSE
/obj/structure/spider/eggcluster/terror_eggcluster
name = "terror egg cluster"
@@ -108,17 +108,17 @@
if(path_to_vent)
if(entry_vent)
if(spider_steps_taken > spider_max_steps)
path_to_vent = 0
stop_automated_movement = 0
path_to_vent = FALSE
stop_automated_movement = FALSE
spider_steps_taken = 0
path_to_vent = 0
path_to_vent = FALSE
entry_vent = null
else if(get_dist(src, entry_vent) <= 1)
path_to_vent = 0
stop_automated_movement = 1
path_to_vent = FALSE
stop_automated_movement = TRUE
spider_steps_taken = 0
spawn(50)
stop_automated_movement = 0
stop_automated_movement = FALSE
TSVentCrawlRandom(entry_vent)
else
spider_steps_taken++
@@ -127,13 +127,13 @@
if(spider_debug)
visible_message("<span class='notice'>[src] moves towards the vent [entry_vent].</span>")
else
path_to_vent = 0
path_to_vent = FALSE
else if(ai_break_lights && world.time > (last_break_light + freq_break_light))
last_break_light = world.time
for(var/obj/machinery/light/L in range(1, src))
if(!L.status)
step_to(src,L)
L.on = 1
L.on = TRUE
L.break_light_tube()
do_attack_animation(L)
visible_message("<span class='danger'>[src] smashes the [L.name].</span>")
@@ -154,7 +154,7 @@
entry_vent = v
vdistance = get_dist(src,v)
if(entry_vent)
path_to_vent = 1
path_to_vent = TRUE
else
// If none of the general actions apply, check for class-specific actions.
spider_special_action()
@@ -206,7 +206,7 @@
spider_steps_taken = 0
cocoon_target = null
busy = 0
stop_automated_movement = 0
stop_automated_movement = FALSE
else
spider_steps_taken++
CreatePath(cocoon_target)
@@ -228,7 +228,7 @@
if(istype(O, /obj/item) || istype(O, /obj/structure) || istype(O, /obj/machinery))
if(!istype(O, /obj/item/paper))
cocoon_target = O
stop_automated_movement = 1
stop_automated_movement = TRUE
spider_steps_taken = 0
return
@@ -250,7 +250,7 @@
spawn(0)
try_open_airlock(A)
for(var/obj/machinery/door/firedoor/F in view(1, src))
if(tgt_dir == get_dir(src,F) && F.density && !F.welded)
if(tgt_dir == get_dir(src, F) && F.density && !F.welded)
visible_message("<span class='danger'>[src] pries open the firedoor!</span>")
F.open()
@@ -269,7 +269,7 @@
if(entry_vent)
if(get_dist(src, entry_vent) <= 2)
if(ai_ventbreaker && entry_vent.welded)
entry_vent.welded = 0
entry_vent.welded = FALSE
entry_vent.update_icon()
entry_vent.visible_message("<span class='danger'>[src] smashes the welded cover off [entry_vent]!</span>")
var/list/vents = list()
@@ -297,7 +297,7 @@
entry_vent = null
return
if(ai_ventbreaker && exit_vent.welded)
exit_vent.welded = 0
exit_vent.welded = FALSE
exit_vent.update_icon()
exit_vent.update_pipe_image()
exit_vent.visible_message("<span class='danger'>[src] smashes the welded cover off [exit_vent]!</span>")
@@ -315,7 +315,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListValidTurfs()
var/list/potentials = list()
for(var/turf/simulated/T in oview(3,get_turf(src)))
if(T.density == 0 && get_dist(get_turf(src),T) == 3)
if(!T.density && get_dist(get_turf(src), T) == 3)
var/obj/structure/spider/terrorweb/W = locate() in T
if(!W)
var/obj/structure/grille/G = locate() in T
@@ -328,7 +328,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListWebbedTurfs()
var/list/webbed = list()
for(var/turf/simulated/T in oview(3,get_turf(src)))
if(T.density == 0 && get_dist(get_turf(src),T) == 3)
if(!T.density && get_dist(get_turf(src), T) == 3)
var/obj/structure/spider/terrorweb/W = locate() in T
if(W)
webbed += T
@@ -337,7 +337,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/proc/ListVisibleTurfs()
var/list/vturfs = list()
for(var/turf/simulated/T in oview(7,get_turf(src)))
if(T.density == 0)
if(!T.density)
vturfs += T
return vturfs
@@ -60,7 +60,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/freq_ventcrawl_combat = 1800 // 3 minutes
var/freq_ventcrawl_idle = 9000 // 15 minutes
var/last_ventcrawl_time = -9000 // Last time the spider crawled. Used to prevent excessive crawling. Setting to freq*-1 ensures they can crawl once on spawn.
var/ai_ventbreaker = 0
var/ai_ventbreaker = FALSE
// AI movement tracking
var/spider_steps_taken = 0 // leave at 0, its a counter for ai steps taken.
@@ -119,11 +119,11 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/spider_opens_doors = 1 // all spiders can open firedoors (they have no security). 1 = can open depowered doors. 2 = can open powered doors
faction = list("terrorspiders")
var/spider_awaymission = 0 // if 1, limits certain behavior in away missions
var/spider_uo71 = 0 // if 1, spider is in the UO71 away mission
var/spider_awaymission = FALSE // if TRUE, limits certain behavior in away missions
var/spider_uo71 = FALSE // if TRUE, spider is in the UO71 away mission
var/spider_unlock_id_tag = "" // if defined, unlock awaymission blast doors with this tag on death
var/spider_role_summary = "UNDEFINED"
var/spider_placed = 0
var/spider_placed = FALSE
// AI variables designed for use in procs
var/atom/movable/cocoon_target // for queen and nurse
@@ -131,15 +131,15 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
var/obj/machinery/atmospherics/unary/vent_pump/exit_vent // remote vent they intend to come out of
var/obj/machinery/atmospherics/unary/vent_pump/nest_vent // home vent, usually used by queens
var/fed = 0
var/travelling_in_vent = 0
var/travelling_in_vent = FALSE
var/list/enemies = list()
var/path_to_vent = 0
var/path_to_vent = FALSE
var/killcount = 0
var/busy = 0 // leave this alone!
var/spider_tier = TS_TIER_1 // 1 for red,gray,green. 2 for purple,black,white, 3 for prince, mother. 4 for queen
/// Does this terror speak loudly on the terror hivemind?
var/loudspeaker = FALSE
var/hasdied = 0
var/hasdied = FALSE
var/list/spider_special_drops = list()
var/attackstep = 0
var/attackcycles = 0
@@ -282,16 +282,16 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
real_name = name
msg_terrorspiders("[src] has grown in [get_area(src)].")
if(is_away_level(z))
spider_awaymission = 1
spider_awaymission = TRUE
GLOB.ts_count_alive_awaymission++
if(spider_tier >= 3)
ai_ventcrawls = FALSE // means that pre-spawned bosses on away maps won't ventcrawl. Necessary to keep prince/mother in one place.
if(istype(get_area(src), /area/awaymission/UO71)) // if we are playing the away mission with our special spiders...
spider_uo71 = 1
spider_uo71 = TRUE
if(world.time < 600)
// these are static spiders, specifically for the UO71 away mission, make them stay in place
ai_ventcrawls = FALSE
spider_placed = 1
spider_placed = TRUE
else
GLOB.ts_count_alive_station++
// after 3 seconds, assuming nobody took control of it yet, offer it to ghosts.
@@ -344,7 +344,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
/mob/living/simple_animal/hostile/poison/terror_spider/proc/handle_dying()
if(!hasdied)
hasdied = 1
hasdied = TRUE
GLOB.ts_count_dead++
GLOB.ts_death_last = world.time
if(spider_awaymission)
@@ -25,7 +25,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/white/LoseTarget()
stop_automated_movement = 0
stop_automated_movement = FALSE
attackstep = 0
attackcycles = 0
..()
@@ -35,7 +35,7 @@
loot = list(/obj/item/stack/sheet/wood)
gold_core_spawnable = HOSTILE_SPAWN
deathmessage = "is hacked into pieces!"
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/tree/AttackingTarget()
. = ..()
@@ -54,7 +54,7 @@
layer = MOB_LAYER + 0.9
health = 50
maxHealth = 50
ranged = 1
ranged = TRUE
harm_intent_damage = 5
obj_damage = 60
melee_damage_lower = 25
@@ -69,7 +69,7 @@
var/grasp_chance = 20
var/grasp_pull_chance = 85
var/grasp_range = 4
del_on_death = 1
del_on_death = TRUE
/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action()
if(..())
@@ -42,13 +42,13 @@
if(prob(20)) //chance to become a stationary snowman structure instead of a corpse
loot.Add(/obj/structure/snowman)
deathmessage = "shimmers as its animating magic fades away!"
del_on_death = 1
del_on_death = TRUE
return ..()
/mob/living/simple_animal/hostile/winter/snowman/ranged
maxHealth = 50
health = 50
ranged = 1
ranged = TRUE
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/snowball
@@ -105,7 +105,7 @@
death_message = "<span class='danger'>YOU'VE BEEN VERY NAUGHTY! PREPARE TO DIE!</span>"
maxHealth = 200 //DID YOU REALLY BELIEVE IT WOULD BE THIS EASY!??!!
health = 200
ranged = 1
ranged = TRUE
projectiletype = /obj/item/projectile/ornament
retreat_distance = 5
minimum_distance = 5
@@ -116,7 +116,7 @@
death_message = "<span class='danger'>FACE MY FINAL FORM AND KNOW DESPAIR!</span>"
maxHealth = 250
health = 250
ranged = 1
ranged = TRUE
rapid = 3
speed = 0 //he's lost some weight from the fighting
projectiletype = /obj/item/projectile/ornament
@@ -164,7 +164,7 @@
health = clamp(health, 0, maxHealth)
med_hud_set_health()
/mob/living/simple_animal/lay_down()
/mob/living/simple_animal/on_lying_down(new_lying_angle)
..()
if(icon_resting && stat != DEAD)
icon_state = icon_resting
@@ -173,7 +173,7 @@
regenerate_icons()
ADD_TRAIT(src, TRAIT_IMMOBILIZED, LYING_DOWN_TRAIT) //simple mobs cannot crawl
/mob/living/simple_animal/stand_up()
/mob/living/simple_animal/on_standing_up()
..()
if(icon_resting && stat != DEAD)
icon_state = icon_living
+1 -1
View File
@@ -923,7 +923,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
if(isliving(M))
var/mob/living/L = M
if(L.mob_size <= MOB_SIZE_SMALL)
return // Stops pAI drones and small mobs (borers, parrots, crabs) from stripping people. --DZD
return // Stops pAI drones and small mobs (parrots, crabs) from stripping people. --DZD
if(!M.can_strip)
return
if(usr == src)
@@ -85,3 +85,7 @@
name = "Raine"
icon_state = "raine"
gender = FEMALE
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_jeremy
name = "Jeremy"
icon_state = "jeremy"