Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into station_traits
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
path_image_color = "#993299"
|
||||
weather_immunities = list("lava","ash")
|
||||
|
||||
var/base_icon = "cleanbot"
|
||||
var/clean_time = 50 //How long do we take to clean?
|
||||
var/upgrades = 0
|
||||
|
||||
@@ -126,13 +127,21 @@
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/turn_on()
|
||||
..()
|
||||
icon_state = "cleanbot[on]"
|
||||
bot_core.updateUsrDialog()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/turn_off()
|
||||
..()
|
||||
icon_state = "cleanbot[on]"
|
||||
bot_core.updateUsrDialog()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/update_icon_state()
|
||||
. = ..()
|
||||
switch(mode)
|
||||
if(BOT_CLEANING)
|
||||
icon_state = "[base_icon]-c"
|
||||
else
|
||||
icon_state = "[base_icon][on]"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/bot_reset()
|
||||
..()
|
||||
@@ -381,6 +390,12 @@
|
||||
target = null
|
||||
mode = BOT_IDLE
|
||||
icon_state = "cleanbot[on]"
|
||||
else if(istype(A, /turf)) //for player-controlled cleanbots so they can clean unclickable messes like dirt
|
||||
var/turf/T = A
|
||||
for(var/atom/S in T.contents)
|
||||
if(istype(S, /obj/effect/decal/cleanable)) //clean the first mess found
|
||||
UnarmedAttack(S)
|
||||
return
|
||||
else if(istype(A, /obj/item) || istype(A, /obj/effect/decal/remains))
|
||||
visible_message("<span class='danger'>[src] sprays hydrofluoric acid at [A]!</span>")
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, TRUE, -6)
|
||||
|
||||
@@ -83,13 +83,12 @@
|
||||
/mob/living/simple_animal/hostile/construct/examine(mob/user)
|
||||
var/t_He = p_they(TRUE)
|
||||
var/t_s = p_s()
|
||||
. = list("<span class='cult'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!\n[desc]")
|
||||
. = list("<span class='cult'>This is [icon2html(src, user)] \a <b>[src]</b>!\n[desc]</span>")
|
||||
if(health < maxHealth)
|
||||
if(health >= maxHealth/2)
|
||||
. += "<span class='warning'>[t_He] look[t_s] slightly dented.</span>"
|
||||
else
|
||||
. += "<span class='warning'><b>[t_He] look[t_s] severely dented!</b></span>"
|
||||
. += "*---------*</span>"
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M)
|
||||
if(isconstruct(M)) //is it a construct?
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
QDEL_NULL(back) // chain destruction baby
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/armsy/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/eldritch/armsy/BiologicalLife(delta_time, times_fired)
|
||||
adjustBruteLoss(-2)
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/armsy/proc/heal()
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
collar_type = "cat"
|
||||
var/held_icon = "cat2"
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
vocal_bark_id = "mutedc4"
|
||||
vocal_pitch = 1.4
|
||||
vocal_pitch_range = 0.4
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -115,7 +118,7 @@
|
||||
Read_Memory()
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/cat/Runtime/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP)
|
||||
@@ -136,6 +139,7 @@
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory()
|
||||
var/saved_color
|
||||
if(fexists("data/npc_saves/Runtime.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Runtime.sav")
|
||||
S["family"] >> family
|
||||
@@ -146,14 +150,21 @@
|
||||
return
|
||||
var/list/json = json_decode(file2text(json_file))
|
||||
family = json["family"]
|
||||
saved_color = json["color"]
|
||||
if(isnull(family))
|
||||
family = list()
|
||||
if(!isnull(saved_color))
|
||||
add_atom_colour(json_decode(saved_color), FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead)
|
||||
var/json_file = file("data/npc_saves/Runtime.json")
|
||||
var/list/file_data = list()
|
||||
family = list()
|
||||
if(!dead)
|
||||
if(color)
|
||||
file_data["color"] = json_encode(color)
|
||||
else
|
||||
file_data["color"] = null
|
||||
for(var/mob/living/simple_animal/pet/cat/kitten/C in children)
|
||||
if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats
|
||||
continue
|
||||
@@ -161,6 +172,8 @@
|
||||
family[C.type] += 1
|
||||
else
|
||||
family[C.type] = 1
|
||||
else
|
||||
file_data["color"] = null
|
||||
file_data["family"] = family
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
@@ -178,7 +191,7 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/cat/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/cat/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && !buckled && !client)
|
||||
@@ -272,7 +285,7 @@
|
||||
to_chat(src, "<span class='notice'>Your name is now <b>\"new_name\"</b>!</span>")
|
||||
name = new_name
|
||||
|
||||
/mob/living/simple_animal/pet/cat/cak/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/cat/cak/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(stat)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
. = ..()
|
||||
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
|
||||
|
||||
/mob/living/simple_animal/crab/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/crab/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
//CRAB movement
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
|
||||
vocal_bark_id = "bullet"
|
||||
vocal_speed = 6
|
||||
|
||||
/mob/living/simple_animal/pet/dog/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/wuv, "yaps happily!", EMOTE_AUDIBLE, /datum/mood_event/pet_animal, "growls!", EMOTE_AUDIBLE)
|
||||
@@ -424,7 +427,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
RemoveElement(/datum/element/mob_holder, held_icon)
|
||||
AddElement(/datum/element/mob_holder, "old_corgi")
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Ian/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/dog/corgi/Ian/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
@@ -438,6 +441,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Ian/proc/Read_Memory()
|
||||
set waitfor = FALSE
|
||||
var/saved_color
|
||||
if(fexists("data/npc_saves/Ian.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Ian.sav")
|
||||
S["age"] >> age
|
||||
@@ -452,12 +456,15 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
age = json["age"]
|
||||
record_age = json["record_age"]
|
||||
saved_head = json["saved_head"]
|
||||
saved_color = json["color"]
|
||||
if(isnull(age))
|
||||
age = 0
|
||||
if(isnull(record_age))
|
||||
record_age = 1
|
||||
if(saved_head)
|
||||
place_on_head(new saved_head)
|
||||
if(!isnull(saved_color))
|
||||
add_atom_colour(json_decode(saved_color), FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Ian/proc/Write_Memory(dead)
|
||||
var/json_file = file("data/npc_saves/Ian.json")
|
||||
@@ -472,10 +479,15 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
file_data["saved_head"] = inventory_head.type
|
||||
else
|
||||
file_data["saved_head"] = null
|
||||
if(color)
|
||||
file_data["color"] = json_encode(color)
|
||||
else
|
||||
file_data["color"] = null
|
||||
else
|
||||
file_data["age"] = 0
|
||||
file_data["record_age"] = record_age
|
||||
file_data["saved_head"] = null
|
||||
file_data["color"] = null
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
@@ -553,7 +565,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
nofur = TRUE
|
||||
unique_pet = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/dog/corgi/narsie/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
for(var/mob/living/simple_animal/pet/P in range(1, src))
|
||||
@@ -632,6 +644,8 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
collar_type = "puppy"
|
||||
|
||||
vocal_pitch = 1.6
|
||||
|
||||
//puppies cannot wear anything.
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/Topic(href, href_list)
|
||||
if(href_list["remove_inv"] || href_list["add_inv"])
|
||||
@@ -653,6 +667,8 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
maxbodytemp = T0C + 40
|
||||
held_icon = "void_puppy"
|
||||
|
||||
vocal_pitch = 0.6
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = 0)
|
||||
return 1 //Void puppies can navigate space.
|
||||
|
||||
@@ -679,7 +695,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/Lisa/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/dog/corgi/Lisa/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
|
||||
@@ -693,7 +709,7 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list(
|
||||
setDir(i)
|
||||
sleep(1)
|
||||
|
||||
/mob/living/simple_animal/pet/dog/pug/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/dog/pug/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND|MOBILITY_MOVE) && !buckled)
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/examine(mob/user)
|
||||
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <b>[src]</b>!")
|
||||
. = list("<span class='info'>This is [icon2html(src, user)] \a <b>[src]</b>!")
|
||||
|
||||
//Hands
|
||||
for(var/obj/item/I in held_items)
|
||||
@@ -214,7 +214,7 @@
|
||||
. += "<span class='deadsay'>A message repeatedly flashes on its display: \"REBOOT -- REQUIRED\".</span>"
|
||||
else
|
||||
. += "<span class='deadsay'>A message repeatedly flashes on its display: \"ERROR -- OFFLINE\".</span>"
|
||||
. += "*---------*</span>"
|
||||
. += "</span>"
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) //Secbots won't hunt maintenance drones.
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
var/datum/reagent/milk_reagent = /datum/reagent/consumable/milk
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_SHOE
|
||||
vocal_bark_id = "banjoc3"
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Initialize(mapload, /datum/reagent/milk_reagent)
|
||||
udder = new (null, milk_reagent)
|
||||
@@ -46,7 +47,7 @@
|
||||
udder = null
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(stat == CONSCIOUS)
|
||||
@@ -143,6 +144,8 @@
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_SHOE
|
||||
vocal_bark_id = "mutedc2"
|
||||
vocal_pitch = 1.2
|
||||
|
||||
/mob/living/simple_animal/cow/Initialize(mapload)
|
||||
udder = new(null, milk_reagent)
|
||||
@@ -160,7 +163,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/cow/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/cow/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(stat == CONSCIOUS)
|
||||
@@ -247,6 +250,8 @@
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
vocal_bark_id = "squeak"
|
||||
vocal_pitch = 1.4
|
||||
|
||||
/mob/living/simple_animal/chick/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -254,7 +259,7 @@
|
||||
pixel_y = rand(0, 10)
|
||||
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
|
||||
|
||||
/mob/living/simple_animal/chick/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/chick/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && !ckey)
|
||||
@@ -263,7 +268,7 @@
|
||||
new /mob/living/simple_animal/chicken(src.loc)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/chick/holo/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/chick/holo/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
amount_grown = 0
|
||||
@@ -309,6 +314,9 @@
|
||||
var/static/chicken_count = 0
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
vocal_bark_id = "synthgrunt"
|
||||
vocal_pitch = 1.4
|
||||
vocal_pitch_range = 0.4
|
||||
|
||||
/mob/living/simple_animal/chicken/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -339,7 +347,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/chicken/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/chicken/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if((!stat && prob(3) && eggsleft > 0) && egg_type)
|
||||
@@ -403,6 +411,8 @@
|
||||
var/static/kiwi_count = 0
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
vocal_bark_id = "squeak"
|
||||
vocal_pitch = 1.4
|
||||
|
||||
/mob/living/simple_animal/kiwi/Destroy()
|
||||
--kiwi_count
|
||||
@@ -414,7 +424,7 @@
|
||||
|
||||
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
|
||||
|
||||
/mob/living/simple_animal/kiwi/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/kiwi/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if((!stat && prob(3) && eggsleft > 0) && egg_type)
|
||||
@@ -481,6 +491,8 @@
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
vocal_bark_id = "squeak"
|
||||
vocal_pitch = 1.4
|
||||
|
||||
/mob/living/simple_animal/babyKiwi/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -489,7 +501,7 @@
|
||||
|
||||
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
|
||||
|
||||
/mob/living/simple_animal/babyKiwi/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/babyKiwi/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && !ckey)
|
||||
@@ -557,3 +569,4 @@
|
||||
maxHealth = 75
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
footstep_type = FOOTSTEP_MOB_SHOE
|
||||
vocal_bark_id = "mutedc4"
|
||||
|
||||
@@ -23,6 +23,11 @@
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
|
||||
vocal_bark_id = "bullet"
|
||||
vocal_speed = 2
|
||||
vocal_pitch = 1.6
|
||||
vocal_pitch_range = 0.4
|
||||
|
||||
/mob/living/simple_animal/pet/fox/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/mob_holder, "fox")
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/chew_probability = 1
|
||||
faction = list("rat")
|
||||
vocal_bark_id = "squeak"
|
||||
vocal_pitch = 1.4
|
||||
|
||||
/mob/living/simple_animal/mouse/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
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
|
||||
pressure_resistance = 200
|
||||
vocal_bark_id = "squeak"
|
||||
vocal_pitch_range = 0.4
|
||||
|
||||
/mob/living/simple_animal/pet/plushie/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -72,7 +74,7 @@
|
||||
qdel(src)
|
||||
|
||||
//low regen over time
|
||||
/mob/living/simple_animal/pet/plushie/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/pet/plushie/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(health < maxHealth)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/charging = 0
|
||||
var/atom/movable/screen/alert/chargealert
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/guardian/charger/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(ranged_cooldown <= world.time)
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/dextrous/examine(mob/user)
|
||||
if(dextrous)
|
||||
. = list("<span class='info'>*---------*\nThis is [icon2html(src)] \a <b>[src]</b>!\n[desc]")
|
||||
. = list("<span class='info'>This is [icon2html(src)] \a <b>[src]</b>!\n[desc]")
|
||||
|
||||
for(var/obj/item/I in held_items)
|
||||
if(!(I.item_flags & ABSTRACT))
|
||||
. += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]."
|
||||
if(internal_storage && !(internal_storage.item_flags & ABSTRACT))
|
||||
. += "It is holding [internal_storage.get_examine_string(user)] in its internal storage."
|
||||
. += "*---------*</span>"
|
||||
. += "</span>"
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Crowd control modules activated. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! OH GOD, EVERYTHING'S ON FIRE. Except you and the fish.</span>"
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/guardian/fire/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(summoner)
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
attack_verb_continuous = "slaps"
|
||||
attack_verb_simple = "slap"
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/butter/BiologicalLife(seconds, times_fired) //Heals butter bear really fast when he takes damage.
|
||||
/mob/living/simple_animal/hostile/bear/butter/BiologicalLife(delta_time, times_fired) //Heals butter bear really fast when he takes damage.
|
||||
if(stat)
|
||||
return
|
||||
if(health < maxHealth)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if(regen_amount)
|
||||
regen_cooldown = world.time + REGENERATION_DELAY
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/carp/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(regen_amount && regen_cooldown < world.time)
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
foes = null
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
walk(src, 0) //stops walking
|
||||
return
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
deathmessage = "vanishes into thin air! It was a fake!"
|
||||
has_field_of_vision = FALSE //not meant to be played anyway.
|
||||
|
||||
/mob/living/simple_animal/hostile/illusion/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/illusion/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(world.time > life_span)
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
if(!hopping)
|
||||
Hop()
|
||||
|
||||
/mob/living/simple_animal/hostile/jungle/leaper/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/jungle/leaper/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
update_icons()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
|
||||
/mob/living/simple_animal/hostile/jungle/mega_arachnid/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/jungle/mega_arachnid/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(target && ranged_cooldown > world.time && iscarbon(target))
|
||||
|
||||
@@ -89,7 +89,7 @@ Difficulty: Normal
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/spawn_crusher_loot()
|
||||
new /obj/item/crusher_trophy/vortex_talisman(get_turf(spawned_beacon))
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(spawned_beacon && !QDELETED(spawned_beacon) && !client)
|
||||
@@ -500,6 +500,8 @@ Difficulty: Normal
|
||||
var/obj/item/projectile/P = mover
|
||||
if(P.firer == caster)
|
||||
return TRUE
|
||||
if(mover != caster)
|
||||
return FALSE
|
||||
if(mover == caster)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
|
||||
step(R, ddir) //Step the swarmers, instead of spawning them there, incase the turf is solid
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
var/createtype = GetUncappedAISwarmerType()
|
||||
|
||||
@@ -118,7 +118,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
|
||||
overlay_googly_eyes = FALSE
|
||||
CopyObject(copy, creator, destroy_original)
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/mimic/copy/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(idledamage && !target && !ckey) //Objects eventually revert to normal if no one is around to terrorize
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
wanted_objects = list(/obj/item/pen/survival, /obj/item/stack/ore/diamond)
|
||||
field_of_vision_type = FOV_270_DEGREES //Obviously, it's one eyeball.
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(stat == CONSCIOUS)
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@
|
||||
if(CALL_CHILDREN)
|
||||
call_children()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/broodmother/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/broodmother/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(health < maxHealth * 0.5 && rand_tent < world.time)
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
if(AOE_SQUARES)
|
||||
aoe_squares(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/elite/pandora/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(health >= maxHealth * 0.5)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
footstep_type = FOOTSTEP_MOB_HEAVY
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
handle_preattack()
|
||||
@@ -129,7 +129,7 @@
|
||||
var/turf/last_location
|
||||
var/tentacle_recheck_cooldown = 100
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(isturf(loc))
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
name = "guthen"
|
||||
gender = FEMALE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(udder.reagents.total_volume == udder.reagents.maximum_volume) //Only breed when we're full.
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
swarming = TRUE
|
||||
var/can_infest_dead = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(isturf(loc))
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
SLEEP_CHECK_DEATH(8)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/ice_demon/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/ice_demon/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(target)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
var/list/burn_turfs = getline(src, T) - get_turf(src)
|
||||
dragon_fire_line(src, burn_turfs)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/ice_whelp/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/ice_whelp/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(target)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
aggressive_message_said = TRUE
|
||||
rapid_melee = 2
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/polarbear/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/polarbear/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(target)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
retreat_message_said = TRUE
|
||||
retreat_distance = 30
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/wolf/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/wolf/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(target)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
else
|
||||
. += "<span class='info'>It looks like it's been roughed up.</span>"
|
||||
|
||||
/mob/living/simple_animal/hostile/mushroom/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/mushroom/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
var/chosen_sound = pick(migo_sounds)
|
||||
playsound(src, chosen_sound, 100, TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/netherworld/migo/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/netherworld/migo/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(stat)
|
||||
|
||||
@@ -86,7 +86,7 @@ GLOBAL_LIST_EMPTY(plague_rats)
|
||||
walk_to(src, entry_vent)
|
||||
break
|
||||
|
||||
/mob/living/simple_animal/hostile/plaguerat/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/plaguerat/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(isopenturf(loc))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
..()
|
||||
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, TRUE)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(banana_time && banana_time < world.time)
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/statue/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/statue/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!client && target) // If we have a target and we're AI controlled
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
del_on_death = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/tree/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/tree/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(isopenturf(loc))
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/ghost_playable
|
||||
playable_plant = TRUE //For admins that want to buss some harmless plants
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
pull_vines()
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
QDEL_NULL(E)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/hostile/asteroid/fugu/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!wumbo)
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
emote_hear = list("squawks.","bawks!")
|
||||
emote_see = list("flutters its wings.")
|
||||
|
||||
vocal_bark_id = "banjoc4"
|
||||
vocal_pitch = 1.4
|
||||
vocal_pitch_range = 0.4
|
||||
|
||||
speak_chance = 1 //1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s
|
||||
turns_per_move = 5
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker/ = 1)
|
||||
@@ -80,7 +84,7 @@
|
||||
var/speech_shuffle_rate = 20
|
||||
var/list/available_channels = list()
|
||||
|
||||
//Headset for Poly to yell at engineers :)
|
||||
//Headset for Polly to yell at engineers :)
|
||||
var/obj/item/radio/headset/ears = null
|
||||
/// spawns with headset
|
||||
var/spawns_with_headset = FALSE
|
||||
@@ -345,7 +349,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
parrot_state |= PARROT_FLEE
|
||||
icon_state = icon_living
|
||||
drop_held_item(0)
|
||||
else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker.
|
||||
else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Polly wants a cracker.
|
||||
qdel(O)
|
||||
if(health < maxHealth)
|
||||
adjustBruteLoss(-10)
|
||||
@@ -372,7 +376,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
/*
|
||||
* AI - Not really intelligent, but I'm calling it AI anyway.
|
||||
*/
|
||||
/mob/living/simple_animal/parrot/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/parrot/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
//Sprite update for when a parrot gets pulled
|
||||
@@ -890,10 +894,10 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
/*
|
||||
* Sub-types
|
||||
*/
|
||||
/mob/living/simple_animal/parrot/Poly
|
||||
name = "Poly"
|
||||
desc = "Poly the Parrot. An expert on quantum cracker theory."
|
||||
speak = list("Poly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE")
|
||||
/mob/living/simple_animal/parrot/Polly
|
||||
name = "Polly"
|
||||
desc = "Polly the Parrot. An expert on quantum cracker theory."
|
||||
speak = list("Polly wanna cracker!", ":e Check the crystal, you chucklefucks!",":e Wire the solars, you lazy bums!",":e WHO TOOK THE DAMN HARDSUITS?",":e OH GOD ITS ABOUT TO DELAMINATE CALL THE SHUTTLE")
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
speak_chance = 3
|
||||
spawns_with_headset = TRUE
|
||||
@@ -902,7 +906,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
var/longest_survival = 0
|
||||
var/longest_deathstreak = 0
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/Initialize(mapload)
|
||||
/mob/living/simple_animal/parrot/Polly/Initialize(mapload)
|
||||
ears = new /obj/item/radio/headset/headset_eng(src)
|
||||
available_channels = list(":e")
|
||||
Read_Memory()
|
||||
@@ -910,11 +914,13 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
speak += pick("...[longest_survival].", "The things I've seen!", "I have lived many lives!", "What are you before me?")
|
||||
desc += " Old as sin, and just as loud. Claimed to be [rounds_survived]."
|
||||
speak_chance = 20 //His hubris has made him more annoying/easier to justify killing
|
||||
add_atom_colour("#EEEE22", FIXED_COLOUR_PRIORITY)
|
||||
if(!color)
|
||||
add_atom_colour("#EEEE22", FIXED_COLOUR_PRIORITY)
|
||||
else if(rounds_survived == longest_deathstreak)
|
||||
speak += pick("What are you waiting for!", "Violence breeds violence!", "Blood! Blood!", "Strike me down if you dare!")
|
||||
desc += " The squawks of [-rounds_survived] dead parrots ring out in your ears..."
|
||||
add_atom_colour("#BB7777", FIXED_COLOUR_PRIORITY)
|
||||
if(!color)
|
||||
add_atom_colour("#BB7777", FIXED_COLOUR_PRIORITY)
|
||||
else if(rounds_survived > 0)
|
||||
speak += pick("...again?", "No, It was over!", "Let me out!", "It never ends!")
|
||||
desc += " Over [rounds_survived] shifts without a \"terrible\" \"accident\"!"
|
||||
@@ -923,30 +929,31 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
/mob/living/simple_animal/parrot/Polly/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
|
||||
. = ..()
|
||||
if(. && !client && prob(1) && prob(1)) //Only the one true bird may speak across dimensions.
|
||||
world.TgsTargetedChatBroadcast("A stray squawk is heard... \"[message]\"", FALSE)
|
||||
if(. && !client && prob(1) && prob(1) && CONFIG_GET(string/chat_squawk_tag)) //Only the one true bird may speak across dimensions.
|
||||
send2chat("A stray squawk is heard... \"[message]\"", CONFIG_GET(string/chat_squawk_tag))
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/parrot/Polly/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory(FALSE)
|
||||
memory_saved = TRUE
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/death(gibbed)
|
||||
/mob/living/simple_animal/parrot/Polly/death(gibbed)
|
||||
if(!memory_saved)
|
||||
Write_Memory(TRUE)
|
||||
if(rounds_survived == longest_survival || rounds_survived == longest_deathstreak || prob(0.666))
|
||||
var/mob/living/simple_animal/parrot/Poly/ghost/G = new(loc)
|
||||
var/mob/living/simple_animal/parrot/Polly/ghost/G = new(loc)
|
||||
if(mind)
|
||||
mind.transfer_to(G)
|
||||
else
|
||||
transfer_ckey(G)
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/proc/Read_Memory()
|
||||
/mob/living/simple_animal/parrot/Polly/proc/Read_Memory()
|
||||
var/saved_color
|
||||
if(fexists("data/npc_saves/Poly.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Poly.sav")
|
||||
S["phrases"] >> speech_buffer
|
||||
@@ -963,10 +970,13 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
rounds_survived = json["roundssurvived"]
|
||||
longest_survival = json["longestsurvival"]
|
||||
longest_deathstreak = json["longestdeathstreak"]
|
||||
saved_color = json["color"]
|
||||
if(!islist(speech_buffer))
|
||||
speech_buffer = list()
|
||||
if(!isnull(saved_color))
|
||||
add_atom_colour(json_decode(saved_color), FIXED_COLOUR_PRIORITY)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/proc/Write_Memory(dead)
|
||||
/mob/living/simple_animal/parrot/Polly/proc/Write_Memory(dead)
|
||||
var/json_file = file("data/npc_saves/Poly.json")
|
||||
var/list/file_data = list()
|
||||
if(islist(speech_buffer))
|
||||
@@ -978,6 +988,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
file_data["longestdeathstreak"] = rounds_survived - 1
|
||||
else
|
||||
file_data["longestdeathstreak"] = longest_deathstreak
|
||||
file_data["color"] = null
|
||||
else
|
||||
file_data["roundssurvived"] = rounds_survived + 1
|
||||
if(rounds_survived + 1 > longest_survival)
|
||||
@@ -985,17 +996,21 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
else
|
||||
file_data["longestsurvival"] = longest_survival
|
||||
file_data["longestdeathstreak"] = longest_deathstreak
|
||||
if(color)
|
||||
file_data["color"] = json_encode(color)
|
||||
else
|
||||
file_data["color"] = null
|
||||
fdel(json_file)
|
||||
WRITE_FILE(json_file, json_encode(file_data))
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ratvar_act()
|
||||
/mob/living/simple_animal/parrot/Polly/ratvar_act()
|
||||
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 75, TRUE)
|
||||
var/mob/living/simple_animal/parrot/clock_hawk/H = new(loc)
|
||||
H.setDir(dir)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost
|
||||
name = "The Ghost of Poly"
|
||||
/mob/living/simple_animal/parrot/Polly/ghost
|
||||
name = "The Ghost of Polly"
|
||||
desc = "Doomed to squawk the Earth."
|
||||
color = "#FFFFFF"
|
||||
alpha = 77
|
||||
@@ -1004,16 +1019,16 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
incorporeal_move = INCORPOREAL_MOVE_BASIC
|
||||
butcher_results = list(/obj/item/ectoplasm = 1)
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/Initialize(mapload)
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/Initialize(mapload)
|
||||
memory_saved = TRUE //At this point nothing is saved
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_speech()
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_speech()
|
||||
if(ismob(loc))
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/handle_automated_movement()
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/handle_automated_movement()
|
||||
if(isliving(parrot_interest))
|
||||
if(!ishuman(parrot_interest))
|
||||
parrot_interest = null
|
||||
@@ -1022,7 +1037,7 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list(
|
||||
Possess(parrot_interest)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/ghost/proc/Possess(mob/living/carbon/human/H)
|
||||
/mob/living/simple_animal/parrot/Polly/ghost/proc/Possess(mob/living/carbon/human/H)
|
||||
if(!ishuman(H))
|
||||
return
|
||||
var/datum/disease/parrot_possession/P = new
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
length += emote_see.len
|
||||
var/randomValue = rand(1,length)
|
||||
if(randomValue <= speak.len)
|
||||
say(pick(speak), forced = "poly")
|
||||
say(pick(speak), forced = "polly")
|
||||
else
|
||||
randomValue -= speak.len
|
||||
if(emote_see && randomValue <= emote_see.len)
|
||||
@@ -233,7 +233,7 @@
|
||||
else
|
||||
emote("me [pick(emote_hear)]", 2)
|
||||
else
|
||||
say(pick(speak), forced = "poly")
|
||||
say(pick(speak), forced = "polly")
|
||||
else
|
||||
if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
|
||||
emote("me", EMOTE_VISIBLE, pick(emote_see))
|
||||
@@ -482,7 +482,7 @@
|
||||
update_action_buttons_icon()
|
||||
return mobility_flags
|
||||
|
||||
/mob/living/simple_animal/update_transform()
|
||||
/mob/living/simple_animal/update_transform(do_animate)
|
||||
var/matrix/ntransform = matrix(transform) //aka transform.Copy()
|
||||
var/changed = 0
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
/datum/emote/slime/mood/run_emote(mob/user, params)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/simple_animal/slime/S = user
|
||||
S.mood = mood
|
||||
S.regenerate_icons()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
typing_indicator_state = /obj/effect/overlay/typing_indicator/slime
|
||||
|
||||
/mob/living/simple_animal/slime/BiologicalLife(seconds, times_fired)
|
||||
/mob/living/simple_animal/slime/BiologicalLife(delta_time, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(buckled)
|
||||
|
||||
@@ -421,7 +421,7 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/slime/examine(mob/user)
|
||||
. = list("<span class='info'>*---------*\nThis is [icon2html(src, user)] \a <EM>[src]</EM>!")
|
||||
. = list("<span class='info'>This is [icon2html(src, user)] \a <EM>[src]</EM>!")
|
||||
if (src.stat == DEAD)
|
||||
. += "<span class='deadsay'>It is limp and unresponsive.</span>"
|
||||
else
|
||||
@@ -446,7 +446,7 @@
|
||||
if(10)
|
||||
. += "<span class='warning'><B>It is radiating with massive levels of electrical activity!</B></span>"
|
||||
|
||||
. += "*---------*</span>"
|
||||
. += "</span>"
|
||||
|
||||
/mob/living/simple_animal/slime/proc/discipline_slime(mob/user)
|
||||
if(stat)
|
||||
|
||||
Reference in New Issue
Block a user