Merge branch 'master' into findnreplace

This commit is contained in:
Mark van Alphen
2017-04-01 23:51:58 +02:00
committed by GitHub
181 changed files with 4952 additions and 4176 deletions
+6 -5
View File
@@ -936,7 +936,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/proc/can_eat(flags = 255)
return 1
/mob/living/carbon/proc/eat(var/obj/item/weapon/reagent_containers/food/toEat, mob/user)
/mob/living/carbon/proc/eat(var/obj/item/weapon/reagent_containers/food/toEat, mob/user, var/bitesize_override)
if(!istype(toEat))
return 0
var/fullness = nutrition + 10
@@ -953,7 +953,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
else
if(!forceFed(toEat, user, fullness))
return 0
consume(toEat)
consume(toEat, bitesize_override)
score_foodeaten++
return 1
@@ -1006,7 +1006,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach
so that different stomachs can handle things in different ways VB*/
/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat)
/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat, var/bitesize_override)
var/this_bite = bitesize_override ? bitesize_override : toEat.bitesize
if(!toEat.reagents)
return
if(satiety > -200)
@@ -1014,9 +1015,9 @@ so that different stomachs can handle things in different ways VB*/
if(toEat.consume_sound)
playsound(loc, toEat.consume_sound, rand(10,50), 1)
if(toEat.reagents.total_volume)
var/fraction = min(toEat.bitesize/toEat.reagents.total_volume, 1)
var/fraction = min(this_bite/toEat.reagents.total_volume, 1)
toEat.reagents.reaction(src, toEat.apply_type, fraction)
toEat.reagents.trans_to(src, toEat.bitesize*toEat.transfer_efficiency)
toEat.reagents.trans_to(src, this_bite*toEat.transfer_efficiency)
/mob/living/carbon/get_access()
. = ..()
@@ -631,8 +631,6 @@
AL.wires.UpdatePulsed(AIRLOCK_WIRE_DOOR_BOLTS)
if(!AL.wires.IsIndexCut(AIRLOCK_WIRE_MAIN_POWER1))
AL.wires.CutWireIndex(AIRLOCK_WIRE_MAIN_POWER1)
if(!AL.wires.IsIndexCut(AIRLOCK_WIRE_MAIN_POWER2))
AL.wires.CutWireIndex(AIRLOCK_WIRE_MAIN_POWER2)
if(prob(mistake_chance) && !AL.wires.IsIndexCut(AIRLOCK_WIRE_SAFETY))
AL.wires.CutWireIndex(AIRLOCK_WIRE_SAFETY)
if(prob(mistake_chance) && !AL.wires.IsIndexCut(AIRLOCK_WIRE_ELECTRIFY))
@@ -958,13 +958,6 @@
adjustToxLoss(-3)
lastpuke = 0
//0.1% chance of playing a scary sound to someone who's in complete darkness
if(isturf(loc) && rand(1,1000) == 1)
var/turf/currentTurf = loc
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in currentTurf
if(L && L.lum_r + L.lum_g + L.lum_b == 0)
playsound_local(src,pick(scarySounds),50, 1, -1)
/mob/living/carbon/human/handle_changeling()
if(mind)
if(mind.changeling)
@@ -56,7 +56,8 @@
reagent_tag = PROCESS_ORG
base_color = "#066000"
//Default styles for created mobs.
default_hair = "Unathi Horns"
default_headacc = "Simple"
default_headacc_colour = "#404040"
butt_sprite = "unathi"
has_organ = list(
@@ -214,6 +215,9 @@
dietflags = DIET_HERB
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
base_color = "#38b661" //RGB: 56, 182, 97.
default_hair_colour = "#38b661"
eyes = "skrell_eyes_s"
//Default styles for created mobs.
default_hair = "Skrell Male Tentacles"
reagent_tag = PROCESS_ORG
@@ -257,6 +261,8 @@
smell.<br/><br/>Most humans will never meet a Vox raider, instead learning of this insular species through \
dealing with their traders and merchants; those that do rarely enjoy the experience."
brute_mod = 1.2 //20% more brute damage. Fragile bird bones.
warning_low_pressure = 50
hazard_low_pressure = 0
@@ -481,11 +487,13 @@
flags = IS_WHITELISTED
clothing_flags = HAS_SOCKS
bodyflags = FEET_CLAWS
eyes = "kidan_eyes"
bodyflags = FEET_CLAWS | HAS_HEAD_ACCESSORY
eyes = "kidan_eyes_s"
dietflags = DIET_HERB
blood_color = "#FB9800"
reagent_tag = PROCESS_ORG
//Default styles for created mobs.
default_headacc = "Normal Antennae"
butt_sprite = "kidan"
has_organ = list(
@@ -100,7 +100,7 @@
if(dronefab)
return
for(var/obj/machinery/drone_fabricator/fab in oview(3,src))
for(var/obj/machinery/drone_fabricator/fab in get_area(src))
if(fab.stat & NOPOWER)
continue
@@ -229,7 +229,7 @@
//Different classes of items give different commodities.
if(istype(W,/obj/item/weapon/cigbutt))
stored_comms["plastic"]++
else if(istype(W,/obj/effect/spider/spiderling))
else if(istype(W,/obj/structure/spider/spiderling))
stored_comms["wood"]++
stored_comms["wood"]++
stored_comms["plastic"]++
@@ -98,7 +98,7 @@
if(prob(5)) //Spawns foam!
visible_message("<span class='danger'>[src] whirs and bubbles violently, before releasing a plume of froth!</span>")
new /obj/effect/effect/foam(loc)
new /obj/structure/foam(loc)
else if(prob(5))
audible_message("[src] makes an excited beeping booping sound!")
@@ -72,6 +72,13 @@
harmbaton = 1
emagged = 2
/mob/living/simple_animal/bot/secbot/armsky
name = "Sergeant-at-Armsky"
health = 45
idcheck = 1
arrest_type = 1
weaponscheck = 1
/mob/living/simple_animal/bot/secbot/New()
..()
icon_state = "[base_icon][on]"
@@ -34,7 +34,7 @@
for(var/direction in shuffle(list(1,2,4,8,5,6,9,10)))
var/step = get_step(src, direction)
if(step)
if(locate(/obj/effect/spacevine) in step)
if(locate(/obj/structure/spacevine) in step)
Move(step, get_dir(src, step))
/mob/living/simple_animal/hostile/retaliate/goat/handle_automated_action()
@@ -47,7 +47,7 @@
LoseTarget()
src.visible_message("<span class='notice'>[src] calms down.</span>")
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
if(SV)
SV.eat(src)
@@ -64,7 +64,7 @@
/mob/living/simple_animal/hostile/retaliate/goat/Move()
..()
if(!stat)
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
if(SV)
SV.eat(src)
@@ -116,7 +116,7 @@
GiveUp(C)
return
//second, spin a sticky spiderweb on this tile
var/obj/effect/spider/stickyweb/W = locate() in get_turf(src)
var/obj/structure/spider/stickyweb/W = locate() in get_turf(src)
if(!W)
Web()
else
@@ -157,7 +157,7 @@
stop_automated_movement = 1
spawn(40)
if(busy == SPINNING_WEB && src.loc == T)
new /obj/effect/spider/stickyweb(T)
new /obj/structure/spider/stickyweb(T)
busy = 0
stop_automated_movement = 0
@@ -187,7 +187,7 @@
spawn(50)
if(busy == SPINNING_COCOON)
if(cocoon_target && istype(cocoon_target.loc, /turf) && get_dist(src,cocoon_target) <= 1)
var/obj/effect/spider/cocoon/C = new(cocoon_target.loc)
var/obj/structure/spider/cocoon/C = new(cocoon_target.loc)
var/large_cocoon = 0
C.pixel_x = cocoon_target.pixel_x
C.pixel_y = cocoon_target.pixel_y
@@ -223,7 +223,7 @@
set category = "Spider"
set desc = "Lay a clutch of eggs, but you must wrap a creature for feeding first."
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
var/obj/structure/spider/eggcluster/E = locate() in get_turf(src)
if(E)
to_chat(src, "<span class='notice'>There is already a cluster of eggs here!</span>")
else if(!fed)
@@ -236,7 +236,7 @@
if(busy == LAYING_EGGS)
E = locate() in get_turf(src)
if(!E)
var/obj/effect/spider/eggcluster/C = new /obj/effect/spider/eggcluster(src.loc)
var/obj/structure/spider/eggcluster/C = new /obj/structure/spider/eggcluster(src.loc)
C.faction = faction
C.master_commander = master_commander
if(ckey)
@@ -90,6 +90,17 @@
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/user = owner
user.QueenFakeLings()
// ---------- EMPRESS
/datum/action/innate/terrorspider/queen/empress/empresserase
name = "Erase Brood"
icon_icon = 'icons/effects/blood.dmi'
button_icon_state = "mgibbl1"
/datum/action/innate/terrorspider/queen/empress/empresserase/Activate()
var/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/user = owner
user.EraseBrood()
// ---------- WEB
/mob/living/simple_animal/hostile/poison/terror_spider/proc/Web(var/thick = 0)
@@ -101,16 +112,20 @@
else if(istype(loc, /turf/space))
to_chat(src, "<span class='danger'>Webs cannot be spun in space.</span>")
else
var/obj/effect/spider/terrorweb/T = locate() in get_turf(src)
var/obj/structure/spider/terrorweb/T = locate() in get_turf(src)
if(T)
to_chat(src, "<span class='danger'>There is already a web here.</span>")
else
var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc)
var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc)
W.creator_ckey = ckey
if(thick)
W.opacity = 1
W.name = "thick terror web"
if(web_infects)
W.infectious = 1
W.name = "sharp terror web"
/obj/effect/spider/terrorweb
/obj/structure/spider/terrorweb
name = "terror web"
desc = "it's stringy and sticky"
icon = 'icons/effects/effects.dmi'
@@ -119,19 +134,20 @@
health = 20 // two welders, or one laser shot (15 for the normal spider webs)
icon_state = "stickyweb1"
var/creator_ckey = null
var/infectious = 0
/obj/effect/spider/terrorweb/New()
/obj/structure/spider/terrorweb/New()
..()
if(prob(50))
icon_state = "stickyweb2"
/obj/effect/spider/terrorweb/proc/DeCloakNearby()
/obj/structure/spider/terrorweb/proc/DeCloakNearby()
for(var/mob/living/simple_animal/hostile/poison/terror_spider/gray/G in view(6,src))
if(!G.ckey && G.stat != DEAD)
G.GrayDeCloak()
G.Aggro()
/obj/effect/spider/terrorweb/CanPass(atom/movable/mover, turf/target)
/obj/structure/spider/terrorweb/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider))
return 1
if(istype(mover, /obj/item/projectile/terrorqueenspit))
@@ -146,8 +162,14 @@
M.Weaken(4) // 8 seconds.
DeCloakNearby()
if(iscarbon(mover))
var/mob/living/carbon/C = mover
if(!IsTSInfected(C) && infectious)
var/inject_target = pick("chest","head")
if(C.can_inject(null, 0, inject_target, 0))
to_chat(C, "<span class='danger'>[src] slices into you!</span>")
new /obj/item/organ/internal/body_egg/terror_eggs(C)
spawn(70)
if(mover.loc == loc)
if(C.loc == loc)
qdel(src)
return 1
else
@@ -156,7 +178,7 @@
return prob(20)
return ..()
/obj/effect/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
/obj/structure/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
if(Proj.damage_type != BRUTE && Proj.damage_type != BURN)
visible_message("<span class='danger'>[src] is undamaged by [Proj]!</span>")
// Webs don't care about disablers, tasers, etc. Or toxin damage. They're organic, but not alive.
@@ -174,7 +196,7 @@
choices += L
for(var/obj/O in oview(1,src))
if(Adjacent(O) && !O.anchored)
if(!istype(O, /obj/effect/spider/terrorweb) && !istype(O, /obj/effect/spider/cocoon) && !istype(O, /obj/effect/spider/spiderling/terror_spiderling))
if(!istype(O, /obj/structure/spider/terrorweb) && !istype(O, /obj/structure/spider/cocoon) && !istype(O, /obj/structure/spider/spiderling/terror_spiderling))
choices += O
if(choices.len)
cocoon_target = input(src,"What do you wish to cocoon?") in null|choices
@@ -193,16 +215,17 @@
if(do_after(src, 40, target = cocoon_target.loc))
if(busy == SPINNING_COCOON)
if(cocoon_target && isturf(cocoon_target.loc) && get_dist(src,cocoon_target) <= 1)
var/obj/effect/spider/cocoon/C = new(cocoon_target.loc)
var/obj/structure/spider/cocoon/C = new(cocoon_target.loc)
var/large_cocoon = 0
C.pixel_x = cocoon_target.pixel_x
C.pixel_y = cocoon_target.pixel_y
for(var/obj/O in C.loc)
if(istype(O, /obj/item))
O.loc = C
else if(istype(O, /obj/machinery) || istype(O, /obj/structure))
O.loc = C
large_cocoon = 1
if(!O.anchored)
if(istype(O, /obj/item))
O.loc = C
else if(istype(O, /obj/machinery) || istype(O, /obj/structure))
O.loc = C
large_cocoon = 1
for(var/mob/living/L in C.loc)
if(istype(L, /mob/living/simple_animal/hostile/poison/terror_spider))
continue
@@ -228,16 +251,17 @@
stop_automated_movement = 0
/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoVentSmash()
for(var/obj/machinery/atmospherics/unary/vent_pump/P in view(1,src))
if(P.welded)
P.welded = 0
P.update_icon()
visible_message("<span class='danger'>[src] smashes the welded cover off [P]!</span>")
return
for(var/obj/machinery/atmospherics/unary/vent_scrubber/C in view(1,src))
if(C.welded)
C.welded = 0
C.update_icon()
visible_message("<span class='danger'>[src] smashes the welded cover off [C]!</span>")
return
to_chat(src, "<span class='danger'>There is no unwelded vent close enough to do this.</span>")
if(do_after(src, 40, target = loc))
for(var/obj/machinery/atmospherics/unary/vent_pump/P in view(1, src))
if(P.welded)
P.welded = 0
P.update_icon()
P.visible_message("<span class='danger'>[src] smashes the welded cover off [P]!</span>")
return
for(var/obj/machinery/atmospherics/unary/vent_scrubber/C in view(1, src))
if(C.welded)
C.welded = 0
C.update_icon()
C.visible_message("<span class='danger'>[src] smashes the welded cover off [C]!</span>")
return
to_chat(src, "<span class='danger'>There is no welded vent or scrubber close enough to do this.</span>")
@@ -31,16 +31,3 @@
M.EyeBlurry(6)
M.Paralyse(5)
..()
// Terror Spider, Queen Toxin
/datum/reagent/terror_queen_toxin
name = "Terror Queen venom"
id = "terror_queen_toxin"
description = "A royally potent venom."
color = "#CF3600"
metabolization_rate = 2
/datum/reagent/terror_queen_toxin/on_mob_life(mob/living/M)
// make them hallucinate a lot, like a changeling sting
M.AdjustHallucinate(50, bound_upper = 400)
@@ -24,9 +24,16 @@
rapid = 1
canlay = 1000
spider_tier = TS_TIER_5
projectiletype = /obj/item/projectile/terrorqueenspit/empress
var/datum/action/innate/terrorspider/queen/empress/empresslings/empresslings_action
var/datum/action/innate/terrorspider/queen/empress/empresserase/empresserase_action
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)
/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/New()
..()
empresserase_action = new()
empresserase_action.Grant(src)
/mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/handle_automated_action()
return
@@ -67,7 +74,7 @@
var/numlings = input("How many?") as null|anything in list(10, 20, 30, 40, 50)
var/sbpc = input("%chance to be stillborn?") as null|anything in list(0, 25, 50, 75, 100)
for(var/i=0, i<numlings, i++)
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, \
/mob/living/simple_animal/hostile/poison/terror_spider/gray, \
/mob/living/simple_animal/hostile/poison/terror_spider/green, \
@@ -84,9 +91,14 @@
if(T.spider_tier < spider_tier)
T.degenerate = 1
to_chat(T, "<span class='userdanger'>Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!</span>")
for(var/obj/effect/spider/eggcluster/terror_eggcluster/T in ts_egg_list)
for(var/obj/structure/spider/eggcluster/terror_eggcluster/T in ts_egg_list)
qdel(T)
for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list)
for(var/obj/structure/spider/spiderling/terror_spiderling/T in ts_spiderling_list)
T.stillborn = 1
to_chat(src, "<span class='userdanger'>Brood will die off shortly.</span>")
to_chat(src, "<span class='userdanger'>All Terror Spiders, except yourself, will die off shortly.</span>")
/obj/item/projectile/terrorqueenspit/empress
damage_type = BURN
damage = 30
bonus_tox = 0
@@ -119,7 +119,7 @@
GrayCloak()
else
// otherwise, pick one of the valid turfs with no web to create a web there.
new /obj/effect/spider/terrorweb(pick(g_turfs_valid))
new /obj/structure/spider/terrorweb(pick(g_turfs_valid))
visible_message("<span class='notice'>[src] spins a web.</span>")
else
if(invisibility == SEE_INVISIBLE_LEVEL_ONE)
@@ -30,7 +30,7 @@
greeneggs_action.Grant(src)
/mob/living/simple_animal/hostile/poison/terror_spider/green/proc/DoLayGreenEggs()
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
var/obj/structure/spider/eggcluster/E = locate() in get_turf(src)
if(E)
to_chat(src, "<span class='notice'>There is already a cluster of eggs here!</span>")
else if(fed < feedings_to_lay)
@@ -46,10 +46,10 @@
if(T.stat != DEAD && !T.spider_placed && spider_awaymission == T.spider_awaymission)
if(T.type == specific_type)
numspiders += 1
for(var/obj/effect/spider/eggcluster/terror_eggcluster/E in ts_egg_list)
for(var/obj/structure/spider/eggcluster/terror_eggcluster/E in ts_egg_list)
if(E.spiderling_type == specific_type && E.z == z)
numspiders += E.spiderling_number
for(var/obj/effect/spider/spiderling/terror_spiderling/L in ts_spiderling_list)
for(var/obj/structure/spider/spiderling/terror_spiderling/L in ts_spiderling_list)
if(!L.stillborn && L.grow_as == specific_type && L.z == z)
numspiders += 1
return numspiders
@@ -36,7 +36,7 @@
if(canspawn)
canspawn = 0
for(var/i in 0 to 30)
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray)
if(prob(66))
S.stillborn = 1
@@ -30,7 +30,7 @@
var/lastnestsetup = 0
var/neststep = 0
var/hasnested = 0
var/spider_max_per_nest = 20 // above this, queen stops spawning more, and declares war.
var/spider_max_per_nest = 25 // above this, AI queens become stable
var/canlay = 4 // main counter for egg-laying ability! # = num uses, incremented at intervals
var/eggslaid = 0
var/spider_can_fakelings = 3 // spawns defective spiderlings that don't grow up, used to freak out crew, atmosphere
@@ -153,7 +153,7 @@
if(3)
if(world.time > (spider_lastspawn + spider_spawnfrequency))
if(prob(20))
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
if(!N)
spider_lastspawn = world.time
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 0)
@@ -161,7 +161,7 @@
if(4)
if(world.time > (spider_lastspawn + spider_spawnfrequency))
if(prob(20))
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
if(!N)
spider_lastspawn = world.time
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1)
@@ -169,7 +169,7 @@
if(5)
if(world.time > (spider_lastspawn + spider_spawnfrequency))
if(prob(20))
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
if(!N)
if(!spider_awaymission)
QueenFakeLings()
@@ -251,6 +251,8 @@
I.flicker()
/mob/living/simple_animal/hostile/poison/terror_spider/queen/proc/LayQueenEggs()
if(stat == DEAD)
return
if(!hasnested)
to_chat(src, "<span class='danger'>You must nest before doing this.</span>")
return
@@ -329,7 +331,7 @@
spider_can_fakelings--
var/numlings = 15
for(var/i in 1 to numlings)
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
S.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/red
S.stillborn = 1
S.name = "Evil-Looking Spiderling"
@@ -344,12 +346,13 @@
damage = 0
icon_state = "toxin"
damage_type = TOX
var/bonus_tox = 30
/obj/item/projectile/terrorqueenspit/on_hit(mob/living/carbon/target)
if(ismob(target))
var/mob/living/L = target
if(L.reagents)
if(L.can_inject(null, 0, "chest", 0))
L.reagents.add_reagent("terror_queen_toxin", 15)
L.Hallucinate(400)
if(!isterrorspider(L))
L.adjustToxLoss(30)
L.adjustToxLoss(bonus_tox)
@@ -54,6 +54,6 @@
if(health > (maxHealth/2))
enrage = 1
visible_message("<span class='notice'>[src] retracts its fangs a little.</span>")
melee_damage_lower = melee_damage_lower_rage0
melee_damage_upper = melee_damage_upper_rage0
melee_damage_lower = melee_damage_lower_rage1
melee_damage_upper = melee_damage_upper_rage1
..()
@@ -3,7 +3,7 @@
// ----------------- TERROR SPIDERS: SPIDERLINGS (USED BY GREEN, WHITE, QUEEN AND MOTHER TYPES)
// --------------------------------------------------------------------------------
/obj/effect/spider/spiderling/terror_spiderling
/obj/structure/spider/spiderling/terror_spiderling
name = "spiderling"
desc = "A fast-moving tiny spider, prone to making aggressive hissing sounds. Hope it doesn't grow up."
icon_state = "spiderling"
@@ -17,15 +17,15 @@
var/list/enemies = list()
var/immediate_ventcrawl = 0
/obj/effect/spider/spiderling/terror_spiderling/New()
/obj/structure/spider/spiderling/terror_spiderling/New()
..()
ts_spiderling_list += src
/obj/effect/spider/spiderling/terror_spiderling/Destroy()
/obj/structure/spider/spiderling/terror_spiderling/Destroy()
ts_spiderling_list -= src
return ..()
/obj/effect/spider/spiderling/terror_spiderling/Bump(atom/A)
/obj/structure/spider/spiderling/terror_spiderling/Bump(atom/A)
if(istype(A, /obj/structure/table))
forceMove(A.loc)
else if(istype(A, /obj/machinery/recharge_station))
@@ -33,7 +33,7 @@
else
..()
/obj/effect/spider/spiderling/terror_spiderling/process()
/obj/structure/spider/spiderling/terror_spiderling/process()
if(travelling_in_vent)
if(isturf(loc))
travelling_in_vent = 0
@@ -104,7 +104,7 @@
/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoLayTerrorEggs(lay_type, lay_number, lay_crawl)
stop_automated_movement = 1
var/obj/effect/spider/eggcluster/terror_eggcluster/C = new /obj/effect/spider/eggcluster/terror_eggcluster(get_turf(src))
var/obj/structure/spider/eggcluster/terror_eggcluster/C = new /obj/structure/spider/eggcluster/terror_eggcluster(get_turf(src))
C.spiderling_type = lay_type
C.spiderling_number = lay_number
C.spiderling_ventcrawl = lay_crawl
@@ -118,7 +118,7 @@
spawn(10)
stop_automated_movement = 0
/obj/effect/spider/eggcluster/terror_eggcluster
/obj/structure/spider/eggcluster/terror_eggcluster
name = "terror egg cluster"
desc = "A cluster of tiny spider eggs. They pulse with a strong inner life, and appear to have sharp thorns on the sides."
icon_state = "eggs"
@@ -130,7 +130,7 @@
var/spiderling_ventcrawl = 1
var/list/enemies = list()
/obj/effect/spider/eggcluster/terror_eggcluster/New()
/obj/structure/spider/eggcluster/terror_eggcluster/New()
..()
ts_egg_list += src
spawn(50)
@@ -153,16 +153,16 @@
else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/queen)
name = "queen of terror eggs"
/obj/effect/spider/eggcluster/terror_eggcluster/Destroy()
/obj/structure/spider/eggcluster/terror_eggcluster/Destroy()
ts_egg_list -= src
return ..()
/obj/effect/spider/eggcluster/terror_eggcluster/process()
/obj/structure/spider/eggcluster/terror_eggcluster/process()
amount_grown += rand(0,2)
if(amount_grown >= 100)
var/num = spiderling_number
for(var/i=0, i<num, i++)
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
if(spiderling_type)
S.grow_as = spiderling_type
S.use_vents = spiderling_ventcrawl
@@ -174,7 +174,7 @@
S.amount_grown = 250
var/rnum = 5 - spiderling_number
for(var/i=0, i<rnum, i++)
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
S.stillborn = 1
// every set of eggs always spawn 5 spiderlings, but most are decoys
qdel(src)
@@ -21,7 +21,7 @@
continue
if(iscarbon(H))
var/mob/living/carbon/C = H
if(IsInfected(C)) // only target the infected if they're attacking us. Even then, lowest priority.
if(IsTSInfected(C)) // only target the infected if they're attacking us. Even then, lowest priority.
if(C in enemies)
targets3 += C
continue
@@ -65,15 +65,13 @@
targets2 += H
else
targets3 += H
if(health < maxHealth)
// if we're hurt, and ONLY if we're hurt, do the additional check for mechs/space pods. Save processing time.
for(var/obj/mecha/M in view(src, vision_range))
if(get_dist(M, src) <= 2)
targets2 += M
else
targets3 += M
for(var/obj/spacepod/S in view(src, vision_range))
targets3 += S
for(var/obj/mecha/M in view(src, vision_range))
if(get_dist(M, src) <= 2)
targets2 += M
else
targets3 += M
for(var/obj/spacepod/S in view(src, vision_range))
targets3 += S
if(targets1.len)
return targets1
if(targets2.len)
@@ -138,9 +136,12 @@
break
else if(ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs))
last_spins_webs = world.time
var/obj/effect/spider/terrorweb/T = locate() in get_turf(src)
var/obj/structure/spider/terrorweb/T = locate() in get_turf(src)
if(!T)
new /obj/effect/spider/terrorweb(get_turf(src))
var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc)
if(web_infects)
W.infectious = 1
W.name = "sharp terror web"
visible_message("<span class='notice'>[src] puts up some spider webs.</span>")
else if(ai_ventcrawls && world.time > (last_ventcrawl_time + my_ventcrawl_freq))
if(prob(idle_ventcrawl_chance))
@@ -181,7 +182,6 @@
var/mob/living/M = A
if(!("terrorspiders" in M.faction))
enemies |= M
visible_message("<span class='danger'>[src] glares at [M]!</span>")
else if(istype(A, /obj/mecha))
var/obj/mecha/M = A
if(M.occupant)
@@ -211,7 +211,7 @@
if(m2 == mylocation)
chasecycles++
ClearObstacle(get_turf(mygoal))
if(chasecycles >= 2)
if(chasecycles >= 1)
chasecycles = 0
if(spider_opens_doors)
var/tgt_dir = get_dir(src,mygoal)
@@ -275,7 +275,7 @@
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)
var/obj/effect/spider/terrorweb/W = locate() in T
var/obj/structure/spider/terrorweb/W = locate() in T
if(!W)
var/obj/structure/grille/G = locate() in T
if(!G)
@@ -288,7 +288,7 @@
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)
var/obj/effect/spider/terrorweb/W = locate() in T
var/obj/structure/spider/terrorweb/W = locate() in T
if(W)
webbed += T
return webbed
@@ -130,6 +130,7 @@ var/global/list/ts_spiderling_list = list()
var/spider_myqueen = null
var/mylocation = null
var/chasecycles = 0
var/web_infects = 0
var/datum/action/innate/terrorspider/web/web_action
var/datum/action/innate/terrorspider/wrap/wrap_action
@@ -167,7 +168,7 @@ var/global/list/ts_spiderling_list = list()
visible_message("<span class='notice'>[src] harmlessly nuzzles [target].</span>")
T.CheckFaction()
CheckFaction()
else if(istype(target, /obj/effect/spider/cocoon))
else if(istype(target, /obj/structure/spider/cocoon))
to_chat(src, "Destroying our own cocoons would not help us.")
else if(istype(target, /obj/machinery/door/firedoor))
var/obj/machinery/door/firedoor/F = target
@@ -263,7 +264,6 @@ var/global/list/ts_spiderling_list = list()
// these are static spiders, specifically for the UO71 away mission, make them stay in place
ai_ventcrawls = 0
spider_placed = 1
wander = 0
else
ts_count_alive_station++
// after 30 seconds, assuming nobody took control of it yet, offer it to ghosts.
@@ -22,6 +22,7 @@
move_to_delay = 4
spider_tier = TS_TIER_2
loot = list(/obj/item/clothing/accessory/medal)
web_infects = 1
/mob/living/simple_animal/hostile/poison/terror_spider/white/LoseTarget()
@@ -42,8 +43,8 @@
return
var/inject_target = pick("chest","head")
L.attack_animal(src)
if(L.stunned || L.paralysis || L.can_inject(null,0,inject_target,0))
if(!IsInfected(L))
if(L.stunned || L.paralysis || L.can_inject(null, 0, inject_target, 0))
if(!IsTSInfected(L))
visible_message("<span class='danger'>[src] buries its long fangs deep into the [inject_target] of [L]!</span>")
new /obj/item/organ/internal/body_egg/terror_eggs(L)
if(!ckey)
@@ -54,7 +55,7 @@
L.Weaken(5)
L.Stun(5)
/mob/living/simple_animal/hostile/poison/terror_spider/proc/IsInfected(mob/living/carbon/C) // Terror AI requires this
/proc/IsTSInfected(mob/living/carbon/C) // Terror AI requires this
if(C.get_int_organ(/obj/item/organ/internal/body_egg))
return 1
return 0
+2
View File
@@ -1093,8 +1093,10 @@ var/list/slot_equipment_priority = list( \
var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
if(self)
visible_message("<span class='warning'>[usr] appears to be trying to extract an object from their body.</span>")
to_chat(src, "<span class='warning'>You attempt to get a good grip on [selection] in your body.</span>")
else
visible_message("<span class='warning'>[usr] attempts to get a good grip on [selection] in [S]'s body.</span>")
to_chat(U, "<span class='warning'>You attempt to get a good grip on [selection] in [S]'s body.</span>")
if(!do_after(U, 80, target = S))
+4 -2
View File
@@ -460,7 +460,7 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
lname = "<span class='name'>[lname]</span> "
to_chat(M, "<span class='deadsay'>[lname][follow][message]</span>")
/proc/notify_ghosts(message, ghost_sound = null, enter_link = null, atom/source = null, image/alert_overlay = null, flashwindow = TRUE, var/action = NOTIFY_JUMP) //Easy notification of ghosts.
/proc/notify_ghosts(message, ghost_sound = null, enter_link = null, title = null, atom/source = null, image/alert_overlay = null, flashwindow = TRUE, var/action = NOTIFY_JUMP) //Easy notification of ghosts.
for(var/mob/dead/observer/O in player_list)
if(O.client)
to_chat(O, "<span class='ghostalert'>[message][(enter_link) ? " [enter_link]" : ""]<span>")
@@ -473,6 +473,8 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
if(A)
if(O.client.prefs && O.client.prefs.UI_style)
A.icon = ui_style2icon(O.client.prefs.UI_style)
if(title)
A.name = title
A.desc = message
A.action = action
A.target = source
@@ -626,4 +628,4 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HARM)
return !!(client.prefs.toggles & toggleflag)
#define isterrorspider(A) (istype((A), /mob/living/simple_animal/hostile/poison/terror_spider))
#define isterrorspider(A) (istype((A), /mob/living/simple_animal/hostile/poison/terror_spider))
@@ -431,106 +431,87 @@
/datum/sprite_accessory/hair/ipc
species_allowed = list("Machine")
glasses_over = 1
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.", "Shellguard Munitions Monitor Series")
/datum/sprite_accessory/hair/ipc/ipc_screen_pink
name = "Pink IPC Screen"
icon_state = "ipc_pink"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_red
name = "Red IPC Screen"
icon_state = "ipc_red"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_green
name = "Green IPC Screen"
icon_state = "ipc_green"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_blue
name = "Blue IPC Screen"
icon_state = "ipc_blue"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_breakout
name = "Breakout IPC Screen"
icon_state = "ipc_breakout"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_eight
name = "Eight IPC Screen"
icon_state = "ipc_eight"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_rainbow
name = "Rainbow IPC Screen"
icon_state = "ipc_rainbow"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_goggles
name = "Goggles IPC Screen"
icon_state = "ipc_goggles"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_heart
name = "Heart IPC Screen"
icon_state = "ipc_heart"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_monoeye
name = "Monoeye IPC Screen"
icon_state = "ipc_monoeye"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_nature
name = "Nature IPC Screen"
icon_state = "ipc_nature"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_orange
name = "Orange IPC Screen"
icon_state = "ipc_orange"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_purple
name = "Purple IPC Screen"
icon_state = "ipc_purple"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_shower
name = "Shower IPC Screen"
icon_state = "ipc_shower"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_static
name = "Static IPC Screen"
icon_state = "ipc_static"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_yellow
name = "Yellow IPC Screen"
icon_state = "ipc_yellow"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_scrolling
name = "Scanline IPC Screen"
icon_state = "ipc_scroll"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_console
name = "Console IPC Screen"
icon_state = "ipc_console"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_rgb
name = "RGB IPC Screen"
icon_state = "ipc_rgb"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/ipc_screen_glider
name = "Glider IPC Screen"
icon_state = "ipc_gol_glider"
models_allowed = list("Bishop Cybernetics mtr.", "Hesphiastos Industries mtr.", "Morpheus Cyberkinetics", "Ward-Takahashi mtr.", "Xion Manufacturing Group mtr.")
/datum/sprite_accessory/hair/ipc/hesphiastos_alt_off
name = "Dark Hesphiastos Screen"
@@ -1151,13 +1132,13 @@
///////////////////////////
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/underwear/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
/datum/sprite_accessory/underwear/male
gender = MALE
@@ -1277,13 +1258,13 @@
////////////////////////////
/datum/sprite_accessory/undershirt
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/undershirt/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
//plain color shirts
/datum/sprite_accessory/undershirt/shirt_white
@@ -1513,13 +1494,13 @@
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/underwear.dmi'
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask")
gender = NEUTER
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Slime People", "Skeleton", "Drask", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox")
/datum/sprite_accessory/socks/white_norm
name = "Normal White"
@@ -1645,7 +1626,7 @@
/datum/sprite_accessory/head_accessory/none
name = "None"
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Kidan", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/head_accessory/unathi
@@ -1768,6 +1749,48 @@
name = "Head Light"
icon_state = "light"
/datum/sprite_accessory/head_accessory/kidan
icon = 'icons/mob/human_face.dmi'
species_allowed = list("Kidan")
over_hair = 1
do_colouration = 0
/datum/sprite_accessory/head_accessory/kidan/perked_antennae
name = "Perked-up Antennae"
icon_state = "kidan_perky"
/datum/sprite_accessory/head_accessory/kidan/mopey_antennae
name = "Mopey Antennae"
icon_state = "kidan_mopey"
/datum/sprite_accessory/head_accessory/kidan/curious_antennae
name = "Curious Antennae"
icon_state = "kidan_curious"
/datum/sprite_accessory/head_accessory/kidan/mopey_antennae
name = "Mopey Antennae"
icon_state = "kidan_mopey"
/datum/sprite_accessory/head_accessory/kidan/crescent_antennae
name = "Crescent Antennae"
icon_state = "kidan_crescent"
/datum/sprite_accessory/head_accessory/kidan/alert_antennae
name = "Alert Antennae"
icon_state = "kidan_alert"
/datum/sprite_accessory/head_accessory/kidan/normal_antennae
name = "Normal Antennae"
icon_state = "kidan_normal"
/datum/sprite_accessory/head_accessory/kidan/long_antennae
name = "Long Antennae"
icon_state = "kidan_long"
/datum/sprite_accessory/head_accessory/kidan/moth_antennae
name = "Moth Antennae"
icon_state = "kidan_moth"
/* BODY MARKINGS */
@@ -1779,7 +1802,7 @@
/datum/sprite_accessory/body_markings/none
name = "None"
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Slime People", "Skeleton", "Vox")
species_allowed = list("Human", "Unathi", "Diona", "Grey", "Machine", "Tajaran", "Vulpkanin", "Skrell", "Slime People", "Skeleton", "Vox")
icon_state = "accessory_none"
/datum/sprite_accessory/body_markings/tiger
@@ -1968,6 +1991,7 @@
/datum/sprite_accessory/body_markings/head/unathi/snout_lower_una_round
name = "Unathi Lower Round Snout"
icon_state = "markings_face_snout_lower_una"
heads_allowed = list("All")
/datum/sprite_accessory/body_markings/head/unathi/banded_una //Companion marking for Unathi Banded.
name = "Unathi Banded Head"