mob living simple_animal
This commit is contained in:
@@ -72,7 +72,7 @@
|
||||
var/nearest_beacon // the nearest beacon's tag
|
||||
var/turf/nearest_beacon_loc // the nearest beacon's location
|
||||
|
||||
var/beacon_freq = 1445 // navigation beacon frequency
|
||||
var/beacon_freq = FREQ_NAV_BEACON
|
||||
var/model = "" //The type of bot it is.
|
||||
var/bot_type = 0 //The type of bot it is, for radio control.
|
||||
var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default.
|
||||
@@ -108,6 +108,7 @@
|
||||
if(stat)
|
||||
return FALSE
|
||||
on = TRUE
|
||||
canmove = TRUE
|
||||
set_light(initial(light_range))
|
||||
update_icon()
|
||||
diag_hud_set_botstat()
|
||||
@@ -115,6 +116,7 @@
|
||||
|
||||
/mob/living/simple_animal/bot/proc/turn_off()
|
||||
on = FALSE
|
||||
canmove = FALSE
|
||||
set_light(0)
|
||||
bot_reset() //Resets an AI's call, should it exist.
|
||||
update_icon()
|
||||
@@ -129,7 +131,7 @@
|
||||
Radio = new/obj/item/device/radio(src)
|
||||
if(radio_key)
|
||||
Radio.keyslot = new radio_key
|
||||
Radio.subspace_transmission = 1
|
||||
Radio.subspace_transmission = TRUE
|
||||
Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud.
|
||||
Radio.recalculateChannels()
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
|
||||
if(!target) //Search for decals then.
|
||||
target = scan(/obj/effect/decal/cleanable)
|
||||
|
||||
|
||||
if(!target) //Checks for remains
|
||||
target = scan(/obj/effect/decal/remains)
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
say(phrase)
|
||||
victim.emote("scream")
|
||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
victim.acid_act(5, 2, 100)
|
||||
victim.acid_act(5, 100)
|
||||
else if(A == src) // Wets floors and spawns foam randomly
|
||||
if(prob(75))
|
||||
var/turf/open/T = loc
|
||||
|
||||
@@ -282,8 +282,8 @@
|
||||
var/skin = null //Same as medbot, set to tox or ointment for the respective kits.
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/firstaid_arm_assembly/New()
|
||||
..()
|
||||
/obj/item/firstaid_arm_assembly/Initialize()
|
||||
. = ..()
|
||||
spawn(5)
|
||||
if(skin)
|
||||
add_overlay("kit_skin_[skin]")
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
initial_language_holder = /datum/language_holder/construct
|
||||
deathmessage = "collapses in a shattered heap."
|
||||
var/list/construct_spells = list()
|
||||
var/playstyle_string = "<b>You are a generic construct! Your job is to not exist, and you should probably adminhelp this.</b>"
|
||||
var/playstyle_string = "<span class='big bold'>You are a generic construct!</span><b> Your job is to not exist, and you should probably adminhelp this.</b>"
|
||||
var/master = null
|
||||
var/seeking = FALSE
|
||||
var/can_repair_constructs = FALSE
|
||||
@@ -119,7 +119,7 @@
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
force_threshold = 11
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
||||
playstyle_string = "<b>You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \
|
||||
playstyle_string = "<span class='big bold'>You are a Juggernaut.</span><b> Though slow, your shell can withstand extreme punishment, \
|
||||
create shield walls, rip apart enemies and walls alike, and even deflect energy weapons.</b>"
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things
|
||||
@@ -168,7 +168,7 @@
|
||||
attacktext = "slashes"
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
|
||||
playstyle_string = "<b>You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing.</b>"
|
||||
playstyle_string = "<span class='big bold'>You are a Wraith.</span><b> Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing.</b>"
|
||||
var/attack_refund = 10 //1 second per attack
|
||||
var/crit_refund = 50 //5 seconds when putting a target into critical
|
||||
var/kill_refund = 250 //full refund on kills
|
||||
@@ -222,7 +222,7 @@
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone,
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
|
||||
/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
|
||||
playstyle_string = "<b>You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \
|
||||
playstyle_string = "<span class='big bold'>You are an Artificer.</span><b> You are incredibly weak and fragile, but you are able to construct fortifications, \
|
||||
use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \
|
||||
<i>and, most important of all,</i> create new constructs by producing soulstones to capture souls, \
|
||||
and shells to place those soulstones into.</b>"
|
||||
@@ -296,8 +296,8 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion,
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall)
|
||||
playstyle_string = "<B>You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \
|
||||
Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly.</B>"
|
||||
playstyle_string = "<span class='big bold'>You are a Harvester.</span><b> You are incapable of directly killing humans, but your attacks will remove their limbs: \
|
||||
Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly.</b>"
|
||||
can_repair_constructs = TRUE
|
||||
|
||||
|
||||
@@ -369,18 +369,18 @@
|
||||
the_construct.master = C.cult_team.blood_target
|
||||
|
||||
if(!the_construct.master)
|
||||
to_chat(the_construct, "<span class='cultitalic'>You have no master to seek!</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>You have no master to seek!</span>")
|
||||
the_construct.seeking = FALSE
|
||||
return
|
||||
if(tracking)
|
||||
tracking = FALSE
|
||||
the_construct.seeking = FALSE
|
||||
to_chat(the_construct, "<span class='cultitalic'>You are no longer tracking your master.</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>You are no longer tracking your master.</span>")
|
||||
return
|
||||
else
|
||||
tracking = TRUE
|
||||
the_construct.seeking = TRUE
|
||||
to_chat(the_construct, "<span class='cultitalic'>You are now tracking your master.</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>You are now tracking your master.</span>")
|
||||
|
||||
|
||||
/datum/action/innate/seek_prey
|
||||
@@ -403,14 +403,14 @@
|
||||
desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!"
|
||||
button_icon_state = "cult_mark"
|
||||
the_construct.seeking = FALSE
|
||||
to_chat(the_construct, "<span class='cultitalic'>You are now tracking Nar'Sie, return to reap the harvest!</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>You are now tracking Nar'Sie, return to reap the harvest!</span>")
|
||||
return
|
||||
else
|
||||
if(LAZYLEN(GLOB.cult_narsie.souls_needed))
|
||||
the_construct.master = pick(GLOB.cult_narsie.souls_needed)
|
||||
to_chat(the_construct, "<span class='cultitalic'>You are now tracking your prey, [the_construct.master] - harvest them!</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>You are now tracking your prey, [the_construct.master] - harvest them!</span>")
|
||||
else
|
||||
to_chat(the_construct, "<span class='cultitalic'>Nar'Sie has completed her harvest!</span>")
|
||||
to_chat(the_construct, "<span class='cult italic'>Nar'Sie has completed her harvest!</span>")
|
||||
return
|
||||
desc = "Activate to track Nar'Sie!"
|
||||
button_icon_state = "sintouch"
|
||||
|
||||
@@ -29,8 +29,6 @@
|
||||
var/turns_since_scan = 0
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Initialize()
|
||||
. = ..()
|
||||
@@ -256,7 +254,7 @@
|
||||
if(!B || !B.brainmob || !B.brainmob.mind)
|
||||
return
|
||||
B.brainmob.mind.transfer_to(src)
|
||||
to_chat(src, "<font size=3><b>Y</b></font><b>ou are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \
|
||||
to_chat(src, "<span class='big bold'>You are a cak!</span><b> You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \
|
||||
so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \
|
||||
free cake to the station!</b>")
|
||||
var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change")
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
var/obj/item/inventory_head
|
||||
var/obj/item/inventory_mask
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/crab/Life()
|
||||
..()
|
||||
@@ -75,4 +74,4 @@
|
||||
real_name = "Evil Kreb"
|
||||
icon_state = "evilkreb"
|
||||
icon_living = "evilkreb"
|
||||
icon_dead = "evilkreb_dead"
|
||||
icon_dead = "evilkreb_dead"
|
||||
@@ -12,8 +12,6 @@
|
||||
see_in_dark = 5
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
//Corgis and pugs are now under one dog subtype
|
||||
|
||||
@@ -615,4 +613,4 @@
|
||||
emote("me", 1, "yaps happily!")
|
||||
else
|
||||
if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case)
|
||||
emote("me", 1, "growls!")
|
||||
emote("me", 1, "growls!")
|
||||
|
||||
@@ -12,13 +12,26 @@
|
||||
icon = 'icons/mob/drone.dmi'
|
||||
icon_state = "drone_maint_hat"//yes reuse the _hat state.
|
||||
var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned
|
||||
var/seasonal_hats = TRUE //If TRUE, and there are no default hats, different holidays will grant different hats
|
||||
var/static/list/possible_seasonal_hats //This is built automatically in build_seasonal_hats() but can also be edited by admins!
|
||||
|
||||
/obj/item/drone_shell/New()
|
||||
..()
|
||||
/obj/item/drone_shell/Initialize()
|
||||
. = ..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
GLOB.poi_list |= src
|
||||
if(isnull(possible_seasonal_hats))
|
||||
build_seasonal_hats()
|
||||
|
||||
/obj/item/drone_shell/proc/build_seasonal_hats()
|
||||
possible_seasonal_hats = list()
|
||||
if(!SSevents.holidays.len)
|
||||
return //no holidays, no hats; we'll keep the empty list so we never call this proc again
|
||||
for(var/V in SSevents.holidays)
|
||||
var/datum/holiday/holiday = SSevents.holidays[V]
|
||||
if(holiday.drone_hat)
|
||||
possible_seasonal_hats += holiday.drone_hat
|
||||
|
||||
/obj/item/drone_shell/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
@@ -40,6 +53,10 @@
|
||||
if(be_drone == "No" || QDELETED(src) || !isobserver(user))
|
||||
return
|
||||
var/mob/living/simple_animal/drone/D = new drone_type(get_turf(loc))
|
||||
if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len)
|
||||
var/hat_type = pick(possible_seasonal_hats)
|
||||
var/obj/item/new_hat = new hat_type(D)
|
||||
D.equip_to_slot_or_del(new_hat, slot_head)
|
||||
D.admin_spawned = admin_spawned
|
||||
D.key = user.key
|
||||
qdel(src)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
to_chat(src, "<b>Drone Laws</b>")
|
||||
to_chat(src, laws)
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/verb/drone_ping()
|
||||
set category = "Drone"
|
||||
set name = "Drone ping"
|
||||
@@ -24,7 +24,6 @@
|
||||
var/msg = "<span class='boldnotice'>DRONE PING: [name]: [alert_s] priority alert in [A.name]!</span>"
|
||||
alert_drones(msg)
|
||||
|
||||
|
||||
/mob/living/simple_animal/drone/verb/toggle_statics()
|
||||
set name = "Change Vision Filter"
|
||||
set desc = "Change the filter on the system used to remove non drone beings from your viewscreen."
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
stop_automated_movement_when_pulled = 1
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
|
||||
udder = new()
|
||||
@@ -66,7 +64,7 @@
|
||||
src.visible_message("<span class='danger'>[src] gets an evil-looking gleam in [p_their()] eye.</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Move()
|
||||
..()
|
||||
. = ..()
|
||||
if(!stat)
|
||||
eat_plants()
|
||||
|
||||
@@ -119,8 +117,6 @@
|
||||
var/obj/item/udder/udder = null
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/cow/Initialize()
|
||||
udder = new()
|
||||
@@ -196,7 +192,6 @@
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_TINY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/chick/Initialize()
|
||||
. = ..()
|
||||
@@ -252,8 +247,6 @@
|
||||
var/list/validColors = list("brown","black","white")
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/static/chicken_count = 0
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/chicken/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -18,47 +18,6 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
var/turns_since_scan = 0
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/fox/Life()
|
||||
//MICE!
|
||||
if((src.loc) && isturf(src.loc))
|
||||
if(!stat && !resting && !buckled)
|
||||
for(var/mob/living/simple_animal/mouse/M in view(1,src))
|
||||
if(!M.stat && Adjacent(M))
|
||||
emote("me", 1, "splats \the [M]!")
|
||||
M.splat()
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
break
|
||||
for(var/obj/item/toy/cattoy/T in view(1,src))
|
||||
if (T.cooldown < (world.time - 400))
|
||||
emote("me", 1, "bats \the [T] around with its paw!")
|
||||
T.cooldown = world.time
|
||||
|
||||
..()
|
||||
|
||||
if(!stat && !resting && !buckled)
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
walk_to(src,0)
|
||||
turns_since_scan = 0
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
||||
if(isturf(snack.loc) && !snack.stat)
|
||||
movement_target = snack
|
||||
break
|
||||
if(movement_target)
|
||||
stop_automated_movement = 1
|
||||
walk_to(src,movement_target,0,3)
|
||||
|
||||
//Captain fox
|
||||
/mob/living/simple_animal/pet/fox/Renault
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
obj_damage = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption.
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
var/body_color //brown, gray and white, leave blank for random
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/chew_probability = 1
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/mouse/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
icon = 'icons/mob/penguins.dmi'
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/pet/penguin/emperor
|
||||
name = "Emperor penguin"
|
||||
|
||||
@@ -5,21 +5,23 @@
|
||||
var/collar = ""
|
||||
var/pettag = ""
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
devourable = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar)
|
||||
var/obj/item/clothing/neck/petcollar/P = O
|
||||
pcollar = P
|
||||
collar = "[icon_state]collar"
|
||||
pettag = "[icon_state]tag"
|
||||
regenerate_icons()
|
||||
to_chat(user, "<span class='notice'>You put the [P] around [src]'s neck.</span>")
|
||||
if(P.tagname)
|
||||
real_name = "\proper [P.tagname]"
|
||||
name = real_name
|
||||
qdel(P)
|
||||
return
|
||||
var/pet_icon_states = icon_states("[icon]")
|
||||
if("[icon_state]collar" in pet_icon_states)
|
||||
var/obj/item/clothing/neck/petcollar/P = O
|
||||
pcollar = P
|
||||
collar = "[icon_state]collar"
|
||||
pettag = "[icon_state]tag"
|
||||
regenerate_icons()
|
||||
to_chat(user, "<span class='notice'>You put the [P] around [src]'s neck.</span>")
|
||||
if(P.tagname)
|
||||
real_name = "\proper [P.tagname]"
|
||||
name = real_name
|
||||
qdel(P)
|
||||
return
|
||||
|
||||
if(istype(O, /obj/item/newspaper))
|
||||
if(!stat)
|
||||
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
|
||||
@@ -51,3 +53,4 @@
|
||||
add_overlay(collar)
|
||||
if(pettag)
|
||||
add_overlay(pettag)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
maxHealth = 50
|
||||
speed = 10
|
||||
glide_size = 2
|
||||
devourable = TRUE
|
||||
|
||||
|
||||
//Cargo Sloth
|
||||
/mob/living/simple_animal/sloth/paperwork
|
||||
|
||||
@@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
var/range = 10 //how far from the user the spirit can be
|
||||
var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
|
||||
var/datum/guardianname/namedatum = new/datum/guardianname()
|
||||
var/playstyle_string = "<span class='holoparasite'>You are a standard Guardian. You shouldn't exist!</span>"
|
||||
var/playstyle_string = "<span class='holoparasite bold'>You are a standard Guardian. You shouldn't exist!</span>"
|
||||
var/magic_fluff_string = "<span class='holoparasite'>You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!</span>"
|
||||
var/tech_fluff_string = "<span class='holoparasite'>BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!</span>"
|
||||
var/carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP</span>"
|
||||
@@ -57,7 +57,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/med_hud_set_health()
|
||||
if(!QDELETED(summoner))
|
||||
if(summoner)
|
||||
var/image/holder = hud_list[HEALTH_HUD]
|
||||
holder.icon_state = "hud[RoundHealth(summoner)]"
|
||||
|
||||
@@ -117,7 +117,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(mind)
|
||||
mind.name = "[real_name]"
|
||||
if(!summoner)
|
||||
to_chat(src, "<span class='holoparasitebold'>For some reason, somehow, you have no summoner. Please report this bug immediately.</span>")
|
||||
to_chat(src, "<span class='holoparasite bold'>For some reason, somehow, you have no summoner. Please report this bug immediately.</span>")
|
||||
return
|
||||
to_chat(src, "<span class='holoparasite'>You are <font color=\"[namedatum.colour]\"><b>[real_name]</b></font>, bound to serve [summoner.real_name].</span>")
|
||||
to_chat(src, "<span class='holoparasite'>You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with them privately there.</span>")
|
||||
@@ -358,7 +358,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(!input)
|
||||
return
|
||||
|
||||
var/preliminary_message = "<span class='holoparasitebold'>[input]</span>" //apply basic color/bolding
|
||||
var/preliminary_message = "<span class='holoparasite bold'>[input]</span>" //apply basic color/bolding
|
||||
var/my_message = "<font color=\"[namedatum.colour]\"><b><i>[src]:</i></b></font> [preliminary_message]" //add source, color source with the guardian's color
|
||||
|
||||
to_chat(summoner, my_message)
|
||||
@@ -379,8 +379,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(!input)
|
||||
return
|
||||
|
||||
var/preliminary_message = "<span class='holoparasitebold'>[input]</span>" //apply basic color/bolding
|
||||
var/my_message = "<span class='holoparasitebold'><i>[src]:</i> [preliminary_message]</span>" //add source, color source with default grey...
|
||||
var/preliminary_message = "<span class='holoparasite bold'>[input]</span>" //apply basic color/bolding
|
||||
var/my_message = "<span class='holoparasite bold'><i>[src]:</i> [preliminary_message]</span>" //add source, color source with default grey...
|
||||
|
||||
to_chat(src, my_message)
|
||||
var/list/guardians = hasparasites()
|
||||
@@ -423,7 +423,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(candidates.len)
|
||||
new_stand = pick(candidates)
|
||||
to_chat(G, "<span class='holoparasite'>Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.</span>")
|
||||
to_chat(src, "<span class='holoparasitebold'>Your <font color=\"[G.namedatum.colour]\">[G.real_name]</font> has been successfully reset.</span>")
|
||||
to_chat(src, "<span class='holoparasite bold'>Your <font color=\"[G.namedatum.colour]\">[G.real_name]</font> has been successfully reset.</span>")
|
||||
message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])")
|
||||
G.ghostize(0)
|
||||
G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person
|
||||
@@ -469,9 +469,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
var/mob_name = "Guardian Spirit"
|
||||
var/use_message = "<span class='holoparasite'>You shuffle the deck...</span>"
|
||||
var/used_message = "<span class='holoparasite'>All the cards seem to be blank now.</span>"
|
||||
var/failure_message = "<span class='holoparasitebold'>..And draw a card! It's...blank? Maybe you should try again later.</span>"
|
||||
var/ling_failure = "<span class='holoparasitebold'>The deck refuses to respond to a souless creature such as you.</span>"
|
||||
var/activation_message = "<span class='holoparasite'>The rest of the deck rapidly flashes to ash!</span>"
|
||||
var/failure_message = "<span class='holoparasite bold'>..And draw a card! It's...blank? Maybe you should try again later.</span>"
|
||||
var/ling_failure = "<span class='holoparasite bold'>The deck refuses to respond to a souless creature such as you.</span>"
|
||||
var/list/possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
|
||||
var/random = TRUE
|
||||
var/allowmultiple = FALSE
|
||||
@@ -500,8 +499,6 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
if(candidates.len)
|
||||
theghost = pick(candidates)
|
||||
spawn_guardian(user, theghost.key)
|
||||
to_chat(user, "[activation_message]")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "[failure_message]")
|
||||
used = FALSE
|
||||
@@ -593,9 +590,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
mob_name = "Holoparasite"
|
||||
use_message = "<span class='holoparasite'>You start to power on the injector...</span>"
|
||||
used_message = "<span class='holoparasite'>The injector has already been used.</span>"
|
||||
failure_message = "<span class='holoparasitebold'>...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.</span>"
|
||||
ling_failure = "<span class='holoparasitebold'>The holoparasites recoil in horror. They want nothing to do with a creature like you.</span>"
|
||||
activation_message = "<span class='holoparasite'>The injector self destructs after you inject yourself with it.</span>"
|
||||
failure_message = "<span class='holoparasite bold'>...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER.</span>"
|
||||
ling_failure = "<span class='holoparasite bold'>The holoparasites recoil in horror. They want nothing to do with a creature like you.</span>"
|
||||
|
||||
/obj/item/guardiancreator/tech/choose/traitor
|
||||
possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
|
||||
@@ -608,7 +604,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
|
||||
/obj/item/paper/guides/antag/guardian
|
||||
name = "Holoparasite Guide"
|
||||
icon_state = "alienpaper_words"
|
||||
icon_state = "paper_words"
|
||||
info = {"<b>A list of Holoparasite Types</b><br>
|
||||
|
||||
<br>
|
||||
@@ -677,9 +673,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
mob_name = "Holocarp"
|
||||
use_message = "<span class='holoparasite'>You put the fishsticks in your mouth...</span>"
|
||||
used_message = "<span class='holoparasite'>Someone's already taken a bite out of these fishsticks! Ew.</span>"
|
||||
failure_message = "<span class='holoparasitebold'>You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.</span>"
|
||||
ling_failure = "<span class='holoparasitebold'>Carp'sie is fine with changelings, so you shouldn't be seeing this message.</span>"
|
||||
activation_message = "<span class='holoparasite'>You finish eating the fishsticks! Delicious!>"
|
||||
failure_message = "<span class='holoparasite bold'>You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.</span>"
|
||||
ling_failure = "<span class='holoparasite bold'>Carp'sie is fine with changelings, so you shouldn't be seeing this message.</span>"
|
||||
allowmultiple = TRUE
|
||||
allowling = TRUE
|
||||
random = TRUE
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
death_sound = 'sound/voice/hiss6.ogg'
|
||||
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/drone
|
||||
name = "alien drone"
|
||||
|
||||
@@ -37,8 +37,6 @@
|
||||
|
||||
faction = list("russian")
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
|
||||
/mob/living/simple_animal/hostile/bear/Hudson
|
||||
|
||||
@@ -39,4 +39,4 @@
|
||||
var/mob/living/carbon/C = target
|
||||
C.Knockdown(60)
|
||||
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
|
||||
"<span class='userdanger'>\The [src] knocks you down!</span>")
|
||||
"<span class='userdanger'>\The [src] knocks you down!</span>")
|
||||
@@ -48,7 +48,6 @@
|
||||
see_in_dark = 4
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
var/playable_spider = FALSE
|
||||
devourable = TRUE
|
||||
var/datum/action/innate/spider/lay_web/lay_web
|
||||
var/directive = "" //Message passed down to children, to relay the creator's orders
|
||||
|
||||
|
||||
@@ -35,8 +35,6 @@
|
||||
unique_name = TRUE
|
||||
var/list/gorilla_overlays[GORILLA_TOTAL_LAYERS]
|
||||
var/oogas = 0
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
// Gorillas like to dismember limbs from unconcious mobs.
|
||||
// Returns null when the target is not an unconcious carbon mob; a list of limbs (possibly empty) otherwise.
|
||||
@@ -105,3 +103,4 @@
|
||||
if(oogas >= rand(2,6))
|
||||
playsound(src, "sound/creatures/gorilla.ogg", 200)
|
||||
oogas = 0
|
||||
|
||||
|
||||
@@ -494,4 +494,3 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega
|
||||
. += M
|
||||
else if (M.loc.type in hostile_machines)
|
||||
. += M.loc
|
||||
|
||||
|
||||
@@ -283,9 +283,8 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Move(NewLoc,Dir=0,step_x=0,step_y=0)
|
||||
if(mecha && loc == mecha)
|
||||
mecha.relaymove(src, Dir)
|
||||
return
|
||||
..()
|
||||
return mecha.relaymove(src, Dir)
|
||||
return ..()
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance)
|
||||
|
||||
@@ -251,9 +251,9 @@ Difficulty: Medium
|
||||
|
||||
animate(src, transform = M, pixel_y = -6, dir = final_dir, time = 2, easing = EASE_IN|EASE_OUT)
|
||||
sleep(5)
|
||||
animate(src, color = list("#A7A19E", "#A7A19E", "#A7A19E", list(0, 0, 0)), time = 10, easing = EASE_IN, flags_1 = ANIMATION_PARALLEL)
|
||||
animate(src, color = list("#A7A19E", "#A7A19E", "#A7A19E", list(0, 0, 0)), time = 10, easing = EASE_IN, flags = ANIMATION_PARALLEL)
|
||||
sleep(4)
|
||||
animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags_1 = ANIMATION_PARALLEL)
|
||||
animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/item/device/gps/internal/miner
|
||||
icon_state = null
|
||||
|
||||
@@ -783,4 +783,4 @@ Difficulty: Very Hard
|
||||
#undef ACTIVATE_WEAPON
|
||||
#undef ACTIVATE_MAGIC
|
||||
|
||||
#undef MEDAL_PREFIX
|
||||
#undef MEDAL_PREFIX
|
||||
|
||||
@@ -61,7 +61,6 @@ Difficulty: Medium
|
||||
score_type = DRAKE_SCORE
|
||||
deathmessage = "collapses into a pile of bones, its flesh sloughing away."
|
||||
death_sound = 'sound/magic/demon_dies.ogg'
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
|
||||
. = ..()
|
||||
@@ -192,7 +191,7 @@ Difficulty: Medium
|
||||
qdel(F)
|
||||
if(stat == DEAD)
|
||||
swooping &= ~SWOOP_DAMAGEABLE
|
||||
animate(src, alpha = 255, transform = oldtransform, time = 0, flags_1 = ANIMATION_END_NOW) //reset immediately
|
||||
animate(src, alpha = 255, transform = oldtransform, time = 0, flags = ANIMATION_END_NOW) //reset immediately
|
||||
return
|
||||
animate(src, alpha = 100, transform = matrix()*0.7, time = 7)
|
||||
swooping |= SWOOP_INVULNERABLE
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
var/pre_attack = 0
|
||||
var/pre_attack_icon = "Goliath_preattack"
|
||||
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
|
||||
no_vore = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
|
||||
. = ..()
|
||||
|
||||
@@ -123,7 +123,8 @@
|
||||
/obj/item/udder/gutlunch
|
||||
name = "nutrient sac"
|
||||
|
||||
/obj/item/udder/gutlunch/New()
|
||||
/obj/item/udder/gutlunch/Initialize()
|
||||
. = ..()
|
||||
reagents = new(50)
|
||||
reagents.my_atom = src
|
||||
|
||||
|
||||
@@ -64,3 +64,4 @@
|
||||
projectiletype = /obj/item/projectile/beam/laser
|
||||
loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged,
|
||||
/obj/item/gun/energy/laser)
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
var/growth_time = 1200
|
||||
|
||||
|
||||
/obj/structure/alien/resin/flower_bud_enemy/New()
|
||||
..()
|
||||
/obj/structure/alien/resin/flower_bud_enemy/Initialize()
|
||||
. = ..()
|
||||
var/list/anchors = list()
|
||||
anchors += locate(x-2,y+2,z)
|
||||
anchors += locate(x+2,y+2,z)
|
||||
|
||||
@@ -60,8 +60,6 @@
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
movement_type = FLYING
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
devourable = TRUE
|
||||
no_vore = FALSE
|
||||
|
||||
var/parrot_damage_upper = 10
|
||||
var/parrot_state = PARROT_WANDER //Hunt for a perch when created
|
||||
@@ -1001,6 +999,7 @@
|
||||
parrot_interest = null
|
||||
H.visible_message("<span class='danger'>[src] dive bombs into [H]'s chest and vanishes!</span>", "<span class='userdanger'>[src] dive bombs into your chest, vanishing! This can't be good!</span>")
|
||||
|
||||
|
||||
/mob/living/simple_animal/parrot/clock_hawk
|
||||
name = "clock hawk"
|
||||
desc = "Cbyl jnaan penpxre! Fdhnnnjx!"
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
//domestication
|
||||
var/tame = 0
|
||||
no_vore = TRUE
|
||||
|
||||
var/my_z // I don't want to confuse this with client registered_z
|
||||
|
||||
/mob/living/simple_animal/Initialize()
|
||||
|
||||
Reference in New Issue
Block a user