mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-24 09:02:27 +00:00
This reverts commit 0167ad4e80.
This commit is contained in:
@@ -130,16 +130,4 @@
|
||||
space_chance = 10
|
||||
|
||||
/datum/language/terminator/get_random_name()
|
||||
return "HK [pick(list("Hera","Zeus","Artemis","Athena","Ares","Hades","Poseidon","Demeter","Apollo","Aphrodite","Hermes","Hestia","Dionysus","Persephone","Kronos","Odysseus","Ajax","Agamemnon","Chiron","Charon"))]-[rand(100, 999)]"
|
||||
|
||||
/datum/language/snake
|
||||
name = "Snake Language"
|
||||
desc = "The tongue of the snake people, a lot of hissing."
|
||||
speech_verb = "hisses"
|
||||
ask_verb = "hisses"
|
||||
exclaim_verb = "hisses"
|
||||
colour = "vox"
|
||||
key = "&"
|
||||
flags = RESTRICTED
|
||||
space_chance = 100
|
||||
syllables = list("ssssss", "Hisss", "hSSSSS", "SSSSSSSSSSSSSS", "his!", "ssssSSSssss", "Sssssshshshshs", "S", "Hisss")
|
||||
return "HK [pick(list("Hera","Zeus","Artemis","Athena","Ares","Hades","Poseidon","Demeter","Apollo","Aphrodite","Hermes","Hestia","Dionysus","Persephone","Kronos","Odysseus","Ajax","Agamemnon","Chiron","Charon"))]-[rand(100, 999)]"
|
||||
@@ -78,8 +78,6 @@
|
||||
pixel_y = species.icon_y_offset
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
qdel(tail_trail)
|
||||
tail_trail = null
|
||||
human_mob_list -= src
|
||||
for(var/organ in organs)
|
||||
qdel(organ)
|
||||
@@ -89,7 +87,7 @@
|
||||
organs_by_name = null
|
||||
bad_internal_organs = null
|
||||
bad_external_organs = null
|
||||
|
||||
|
||||
QDEL_NULL(DS)
|
||||
// qdel and null out our equipment.
|
||||
QDEL_NULL(shoes)
|
||||
@@ -1212,11 +1210,6 @@
|
||||
nutrition = (rand(25,100)*0.01)*max_nutrition//Starting nutrition is randomised between 25-100% of max
|
||||
|
||||
nutrition_loss = HUNGER_FACTOR * species.nutrition_loss_factor
|
||||
|
||||
if(species.tail_stance)
|
||||
if(!tail_trail) tail_trail = new(src)
|
||||
tail_trail.sync_to_owner()
|
||||
|
||||
if(species)
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -40,26 +40,18 @@
|
||||
if(shoes)
|
||||
tally += shoes.slowdown
|
||||
|
||||
if(species.tail_stance)
|
||||
// If your groin is missing outright, you are dead, so, whatever. No point tallying stump etc. for it.
|
||||
var/obj/item/organ/external/E = get_organ("groin")
|
||||
if(E.status & ORGAN_BROKEN)
|
||||
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || E.is_stump())
|
||||
tally += 4
|
||||
else if(E.status & ORGAN_SPLINTED)
|
||||
tally += 0.5
|
||||
else if(E.status & ORGAN_BROKEN)
|
||||
tally += 1.5
|
||||
|
||||
else
|
||||
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || E.is_stump())
|
||||
tally += 4
|
||||
else if(E.status & ORGAN_SPLINTED)
|
||||
tally += 0.5
|
||||
else if(E.status & ORGAN_BROKEN)
|
||||
tally += 1.5
|
||||
|
||||
if(shock_stage >= 10) tally += 3
|
||||
|
||||
|
||||
|
||||
if(aiming && aiming.aiming_at) tally += 5 // Iron sights make you slower, it's a well-known fact.
|
||||
|
||||
if (drowsyness) tally += 6
|
||||
|
||||
@@ -74,32 +74,19 @@
|
||||
return
|
||||
|
||||
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
||||
|
||||
if(species.tail_stance)
|
||||
var/obj/item/organ/external/groin/checkgroin = organs_by_name["groin"]
|
||||
if(!istype(checkgroin))
|
||||
stance_damage = 4
|
||||
else
|
||||
if (checkgroin.is_broken() || !checkgroin.is_usable() || ((checkgroin.status & ORGAN_ROBOT) && checkgroin.is_malfunctioning()))
|
||||
stance_damage = 2
|
||||
else if ((checkgroin.status & (ORGAN_MUTATED|ORGAN_DEAD)) || checkgroin.is_stump())
|
||||
stance_damage = 4
|
||||
else
|
||||
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||
if(!E || (E.status & (ORGAN_MUTATED|ORGAN_DEAD)) || E.is_stump()) //should just be !E.is_usable() here but dislocation screws that up.
|
||||
stance_damage += 2 // let it fail even if just foot&leg
|
||||
else if (E.is_malfunctioning())
|
||||
//malfunctioning only happens intermittently so treat it as a missing limb when it procs
|
||||
stance_damage += 2
|
||||
if(prob(10))
|
||||
visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!")
|
||||
spark(src, 5)
|
||||
else if (E.is_broken() || !E.is_usable())
|
||||
stance_damage += 1
|
||||
else if (E.is_dislocated())
|
||||
stance_damage += 0.5
|
||||
|
||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||
if(!E || (E.status & (ORGAN_MUTATED|ORGAN_DEAD)) || E.is_stump()) //should just be !E.is_usable() here but dislocation screws that up.
|
||||
stance_damage += 2 // let it fail even if just foot&leg
|
||||
else if (E.is_malfunctioning())
|
||||
//malfunctioning only happens intermittently so treat it as a missing limb when it procs
|
||||
stance_damage += 2
|
||||
if(prob(10))
|
||||
visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!")
|
||||
spark(src, 5)
|
||||
else if (E.is_broken() || !E.is_usable())
|
||||
stance_damage += 1
|
||||
else if (E.is_dislocated())
|
||||
stance_damage += 0.5
|
||||
|
||||
// Canes and crutches help you stand (if the latter is ever added)
|
||||
// One cane mitigates a broken leg+foot, or a missing foot.
|
||||
|
||||
@@ -460,37 +460,3 @@
|
||||
var/obj/item/weapon/arrow/quill/A = new /obj/item/weapon/arrow/quill(usr.loc)
|
||||
A.throw_at(target, 10, 30, user)
|
||||
msg_admin_attack("[key_name_admin(src)] launched a quill at [key_name_admin(target)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
|
||||
|
||||
/mob/living/carbon/human/proc/venomspit(mob/target as mob in oview())
|
||||
set name = "Spit Venom"
|
||||
set desc = "Spits venom at your target."
|
||||
set category = "Abilities"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
src << "You cannot spit venom in your current state."
|
||||
return
|
||||
|
||||
visible_message("<span class='warning'>[src] spits venom at [target]!</span>", "<span class='warning'>You spit venom at [target].</span>")
|
||||
|
||||
var/turf/T = loc
|
||||
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
|
||||
|
||||
if(!U || !T)
|
||||
return
|
||||
while(U && !istype(U,/turf))
|
||||
U = U.loc
|
||||
if(!istype(T, /turf))
|
||||
return
|
||||
if (U == T)
|
||||
usr.bullet_act(new /obj/item/projectile/energy/venom(usr.loc), get_organ_target())
|
||||
return
|
||||
if(!istype(U, /turf))
|
||||
return
|
||||
|
||||
last_special = world.time + 25
|
||||
|
||||
var/obj/item/projectile/energy/venom/A = new /obj/item/projectile/energy/venom(usr.loc)
|
||||
A.launch(target, get_organ_target())
|
||||
|
||||
@@ -1,257 +0,0 @@
|
||||
var/list/human_tail_cache = list()
|
||||
|
||||
/mob/living/carbon/human/proc/coil_up()
|
||||
set name = "Coil Up"
|
||||
set category = "Abilities"
|
||||
set desc = "Retract your tail around yourself."
|
||||
if(stat || paralysis || !tail_trail)
|
||||
return
|
||||
src.visible_message("<span class='notice'>\The [src] coils up!</span>")
|
||||
tail_trail.update_moved(src)
|
||||
sleep(-1)
|
||||
if(istype(src.loc, /turf))
|
||||
tail_trail.update_moved(src.loc)
|
||||
|
||||
/mob/living/carbon/human
|
||||
var/obj/effect/tail/underlay/tail_trail // Tail ref for critters that drag tails behind them.
|
||||
|
||||
/obj/effect/tail
|
||||
icon = null
|
||||
icon_state = ""
|
||||
simulated = 0
|
||||
anchored = 1
|
||||
density = 0
|
||||
opacity = 0
|
||||
w_class = 5
|
||||
|
||||
var/base_colour = "#000000"
|
||||
var/markings_colour = "#000000"
|
||||
var/mob/living/carbon/human/owner
|
||||
var/moved_from
|
||||
var/tail_type
|
||||
|
||||
/obj/effect/tail/Crossed(var/atom/movable/crossing)
|
||||
. = ..()
|
||||
if(crossing == owner || loc == owner.loc || prob(30))
|
||||
return .
|
||||
if(istype(crossing, /mob/living))
|
||||
var/mob/living/M = crossing
|
||||
var/damage_taken
|
||||
if(istype(crossing, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = crossing
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.item_flags & NOSLIP))
|
||||
damage_taken = rand(5,8)
|
||||
if(!damage_taken)
|
||||
damage_taken = rand(1,3)
|
||||
if(prob(50))
|
||||
M.visible_message("<span class='danger'>\The [M] trips over \the [owner]'s tail!</span>")
|
||||
M.Weaken(rand(5,8))
|
||||
else
|
||||
M.visible_message("<span class='danger'>\The [M] treads on \the [owner]'s tail!</span>")
|
||||
owner << "<span class='danger'>Your tail is being brutalized!</span>"
|
||||
owner.apply_damage(damage_taken, BRUTE, "groin")
|
||||
else if(istype(crossing, /obj/vehicle) || istype(crossing, /obj/mecha))
|
||||
crossing.visible_message("<span class='danger'>\The [crossing] runs over \the [owner]'s tail!</span>")
|
||||
owner << "<span class='danger'>Your tail is being brutalized!</span>"
|
||||
owner.apply_damage(rand(5,8), BRUTE, "groin")
|
||||
return .
|
||||
|
||||
/obj/effect/tail/Destroy()
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/tail/underlay/Destroy()
|
||||
for(var/obj/effect/tail/segment in segments)
|
||||
qdel(segment)
|
||||
segments.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/effect/tail/New(var/mob/living/carbon/human/newowner)
|
||||
owner = newowner
|
||||
if(!istype(owner))
|
||||
owner = null
|
||||
qdel(src)
|
||||
return
|
||||
..(get_turf(owner))
|
||||
|
||||
/obj/effect/tail/proc/sync_to_owner()
|
||||
name = "[owner]'\s [initial(name)]"
|
||||
base_colour = rgb(owner.r_skin, owner.g_skin, owner.b_skin)
|
||||
markings_colour = rgb(owner.r_hair, owner.g_hair, owner.b_hair)
|
||||
update_icon(1)
|
||||
|
||||
/obj/effect/tail/attack_generic(var/mob/user, var/damage, var/attack_message)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(owner.loc == loc) return
|
||||
return owner.attack_generic(user, damage, attack_message)
|
||||
|
||||
/obj/effect/tail/attackby(var/obj/item/thing, var/mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(owner.loc == loc) return
|
||||
return owner.attack_hand(user, thing)
|
||||
|
||||
/obj/effect/tail/attack_hand(var/mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(owner.loc == loc) return
|
||||
return owner.attack_hand(user)
|
||||
|
||||
/obj/effect/tail/bullet_act(var/obj/item/projectile/proj)
|
||||
if(owner.loc == loc) return
|
||||
return owner.bullet_act(proj)
|
||||
|
||||
/obj/effect/tail/fire_act(var/datum/gas_mixture/air, var/exposed_temperature, var/exposed_volume)
|
||||
if(owner.loc == loc) return
|
||||
return owner.fire_act(air, exposed_temperature, exposed_volume)
|
||||
|
||||
/obj/effect/tail/ex_act(var/severity)
|
||||
if(owner.loc == loc) return
|
||||
return owner.ex_act(severity) // Damage to the tail should damage the mob in general.
|
||||
|
||||
/obj/effect/tail/emp_act(var/severity)
|
||||
if(loc == owner.loc)
|
||||
return
|
||||
return owner.ex_act(severity)
|
||||
|
||||
/obj/effect/tail/update_icon(var/force_override)
|
||||
overlays.Cut()
|
||||
// Build base.
|
||||
var/cache_key = "[owner.species.name]-[tail_type]-[base_colour]"
|
||||
if(!human_tail_cache[cache_key] || force_override)
|
||||
var/icon/I = icon(icon=owner.species.icobase, icon_state=tail_type)
|
||||
I.Blend(base_colour, ICON_ADD)
|
||||
human_tail_cache[cache_key] = I
|
||||
overlays += human_tail_cache[cache_key]
|
||||
// Build markings.
|
||||
cache_key = "[owner.species.name]-[tail_type]_markings-[markings_colour]"
|
||||
if(!human_tail_cache[cache_key] || force_override)
|
||||
var/icon/I = icon(icon=owner.species.icobase, icon_state="[tail_type]_markings")
|
||||
I.Blend(markings_colour, ICON_ADD)
|
||||
human_tail_cache[cache_key] = I
|
||||
overlays += human_tail_cache[cache_key]
|
||||
|
||||
/obj/effect/tail/underlay
|
||||
name = "coils"
|
||||
var/list/segments = list()
|
||||
|
||||
/obj/effect/tail/underlay/New()
|
||||
..()
|
||||
layer = owner.layer - 0.01
|
||||
if(owner && segments)
|
||||
for(var/i = 1 to owner.species.tail_length)
|
||||
var/obj/effect/tail/trailing/segment= new (owner, (i == owner.species.tail_length))
|
||||
segment.layer = (owner.layer - (0.01 * (i+1)))
|
||||
segments += segment
|
||||
|
||||
/obj/effect/tail/underlay/sync_to_owner()
|
||||
..()
|
||||
for(var/obj/effect/tail/trailing/segment in segments)
|
||||
segment.owner = owner
|
||||
segment.sync_to_owner()
|
||||
|
||||
/obj/effect/tail/trailing
|
||||
name = "tail"
|
||||
var/terminating
|
||||
animate_movement = SYNC_STEPS
|
||||
|
||||
/obj/effect/tail/trailing/New(var/newloc, var/term)
|
||||
terminating = term
|
||||
..(newloc)
|
||||
|
||||
/obj/effect/tail/trailing/update_icon()
|
||||
if(reverse_dir[moved_from] == dir)
|
||||
tail_type = "tail_straight[terminating ? "_end" : ""]"
|
||||
else
|
||||
// Way, way too tired to work this shit out.
|
||||
// TODO bug GN or Psi about bit magic.
|
||||
if(dir == NORTH)
|
||||
if(moved_from == WEST)
|
||||
tail_type = "tail_bent_1[terminating ? "_end" : ""]"
|
||||
else if(moved_from == EAST)
|
||||
tail_type = "tail_bent_2[terminating ? "_end" : ""]"
|
||||
else if(dir == SOUTH)
|
||||
if(moved_from == WEST)
|
||||
tail_type = "tail_bent_1[terminating ? "_end" : ""]"
|
||||
else if(moved_from == EAST)
|
||||
tail_type = "tail_bent_2[terminating ? "_end" : ""]"
|
||||
else if(dir == EAST)
|
||||
if(moved_from == NORTH)
|
||||
tail_type = "tail_bent_1[terminating ? "_end" : ""]"
|
||||
else if(moved_from == SOUTH)
|
||||
tail_type = "tail_bent_2[terminating ? "_end" : ""]"
|
||||
else if(dir == WEST)
|
||||
if(moved_from == NORTH)
|
||||
tail_type = "tail_bent_1[terminating ? "_end" : ""]"
|
||||
else if(moved_from == SOUTH)
|
||||
tail_type = "tail_bent_2[terminating ? "_end" : ""]"
|
||||
..()
|
||||
|
||||
/obj/effect/tail/proc/update_moved(var/turf/newloc, var/turf/predecessor)
|
||||
if(!newloc || newloc == owner || !istype(owner.loc, /turf))
|
||||
forceMove(owner)
|
||||
return
|
||||
if(src.loc == owner)
|
||||
forceMove(get_turf(owner))
|
||||
var/turf/oldloc = src.loc
|
||||
if(!istype(oldloc))
|
||||
forceMove(owner)
|
||||
return
|
||||
if(newloc == oldloc)
|
||||
return
|
||||
forceMove(newloc)
|
||||
if(predecessor)
|
||||
moved_from = get_dir(newloc, oldloc)
|
||||
dir = get_dir(newloc, predecessor)
|
||||
if(dir in cornerdirs)
|
||||
forceMove(owner)
|
||||
return
|
||||
update_icon()
|
||||
|
||||
/obj/effect/tail/trailing/update_moved(var/turf/newloc, var/turf/predecessor)
|
||||
..(newloc, predecessor)
|
||||
if(loc == owner || owner.loc == loc)
|
||||
invisibility = 101
|
||||
else
|
||||
invisibility = 0
|
||||
|
||||
/obj/effect/tail/underlay/update_moved(var/turf/newloc, var/turf/predecessor)
|
||||
var/oldloc = src.loc
|
||||
..(newloc, predecessor)
|
||||
if(loc == owner)
|
||||
for(var/obj/effect/tail/T in segments)
|
||||
T.update_moved(owner)
|
||||
else
|
||||
var/obj/effect/lastsegment = src
|
||||
for(var/obj/effect/tail/segment in segments)
|
||||
var/segmentloc = segment.loc
|
||||
segment.update_moved(oldloc, get_turf(lastsegment))
|
||||
oldloc = segmentloc
|
||||
lastsegment = segment
|
||||
|
||||
// Do this here instead of update_icon() because we have to wait for all the other segments to have moved.
|
||||
dir = owner.dir
|
||||
tail_type = "tail_underlay"
|
||||
for(var/obj/effect/tail/trailing/segment in segments)
|
||||
if(get_turf(segment) != newloc)
|
||||
return
|
||||
tail_type = "tail_underlay_static"
|
||||
update_icon()
|
||||
|
||||
/mob/living/carbon/human/Move()
|
||||
. = ..()
|
||||
if(. && species.tail_stance)
|
||||
if(!tail_trail) tail_trail = new(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
tail_trail.update_moved(T)
|
||||
else
|
||||
tail_trail.update_moved(src)
|
||||
|
||||
/mob/living/carbon/human/forceMove()
|
||||
. = ..()
|
||||
if(species.tail_stance)
|
||||
if(!tail_trail) tail_trail = new(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T))
|
||||
tail_trail.update_moved(T)
|
||||
else
|
||||
tail_trail.update_moved(src)
|
||||
@@ -1,106 +0,0 @@
|
||||
/mob/living/carbon/human/snake/New(var/new_loc)
|
||||
..(new_loc, "Snake People")
|
||||
|
||||
/datum/species/snake
|
||||
name = "Snake People"
|
||||
short_name = "snek"
|
||||
name_plural = "Snake Folk"
|
||||
bodytype = "Snake"
|
||||
icobase = 'icons/mob/human_races/r_snake.dmi'
|
||||
deform = 'icons/mob/human_races/r_snake.dmi'
|
||||
blurb = "A race of snakelike sapients from somewhere beyond the frontier. They are a new threat, arriving in the galaxy as invaders."
|
||||
eyes = "eyes_snake"
|
||||
breakcuffs = list(MALE,FEMALE,NEUTER)
|
||||
|
||||
tail_stance = 1
|
||||
tail_length = 5
|
||||
|
||||
mob_size = 15
|
||||
gluttonous = 3
|
||||
vision_flags = SEE_SELF | SEE_MOBS
|
||||
rarity_value = 10
|
||||
slowdown = -1 // Compensating for a total inability to wear shoes.
|
||||
|
||||
darksight = 8
|
||||
brute_mod = 0.5
|
||||
ethanol_resistance = 0.7
|
||||
|
||||
virus_immune = 1
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
cold_level_1 = 280
|
||||
cold_level_2 = 220
|
||||
cold_level_3 = 130
|
||||
heat_level_1 = 420
|
||||
heat_level_2 = 480
|
||||
heat_level_3 = 1100
|
||||
heat_discomfort_level = 295
|
||||
|
||||
heat_discomfort_strings = list(
|
||||
"You feel soothingly warm.",
|
||||
"You feel the heat sink into your bones.",
|
||||
"You feel warm enough to take a nap."
|
||||
)
|
||||
cold_discomfort_level = 292
|
||||
cold_discomfort_strings = list(
|
||||
"You feel chilly.",
|
||||
"You feel sluggish and cold.",
|
||||
"Your scales bristle against the cold."
|
||||
)
|
||||
|
||||
hud_type = /datum/hud_data/snake
|
||||
unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp)
|
||||
|
||||
default_language = "Snake Language"
|
||||
language = "Ceti Basic"
|
||||
num_alternate_languages = 1
|
||||
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
flags = NO_SLIP
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/proc/devour,
|
||||
/mob/living/carbon/human/proc/regurgitate,
|
||||
/mob/living/carbon/human/proc/venomspit,
|
||||
/mob/living/carbon/human/proc/coil_up
|
||||
)
|
||||
|
||||
flesh_color = "#006600"
|
||||
blood_color = "#1D2CBF"
|
||||
base_color = "#006666"
|
||||
|
||||
reagent_tag = IS_UNATHI
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/snake),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/snake),
|
||||
"head" = list("path" = /obj/item/organ/external/head/snake),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right)
|
||||
)
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes,
|
||||
"venom gland" = /obj/item/organ/venomgland
|
||||
)
|
||||
|
||||
stamina = 120
|
||||
sprint_speed_factor = 3
|
||||
stamina_recovery = 1
|
||||
sprint_cost_factor = 1
|
||||
|
||||
/datum/species/snake
|
||||
autohiss_basic_map = list(
|
||||
"s" = list("ssss", "sssss", "ssssss"),
|
||||
"c" = list("cksss", "ckssss", "cksssss"),
|
||||
"k" = list("ksss", "kssss", "ksssss"),
|
||||
"x" = list("ksss", "kssss", "ksssss")
|
||||
)
|
||||
@@ -32,8 +32,6 @@
|
||||
var/base_color // Used by changelings. Should also be used for icon previes..
|
||||
var/tail // Name of tail state in species effects icon file.
|
||||
var/tail_animation // If set, the icon to obtain tail animation states from.
|
||||
var/tail_stance
|
||||
var/tail_length
|
||||
var/tail_hair
|
||||
var/race_key = 0 // Used for mob icon cache string.
|
||||
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
|
||||
|
||||
@@ -73,21 +73,3 @@
|
||||
"mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back")
|
||||
)
|
||||
|
||||
/datum/hud_data/snake
|
||||
gear = list(
|
||||
"i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1),
|
||||
"o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "suit", "toggle" = 1),
|
||||
"mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "mask", "toggle" = 1),
|
||||
"gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
|
||||
"eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
|
||||
"l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
|
||||
"r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
|
||||
"head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
|
||||
"suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "suitstore"),
|
||||
"back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back"),
|
||||
"id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id"),
|
||||
"storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
|
||||
"storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
|
||||
"belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
|
||||
)
|
||||
|
||||
@@ -150,9 +150,6 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
update_hud() //TODO: remove the need for this
|
||||
overlays.Cut()
|
||||
|
||||
if(species.tail_stance)
|
||||
if(!tail_trail) tail_trail = new(src)
|
||||
tail_trail.sync_to_owner()
|
||||
|
||||
if(cloaked)
|
||||
icon = 'icons/mob/human.dmi'
|
||||
@@ -396,12 +393,12 @@ var/global/list/damage_icon_parts = list()
|
||||
var/col = species.get_light_color(h_style)
|
||||
if (!col)
|
||||
col = "#FFFFFF"
|
||||
|
||||
|
||||
set_light(species.light_range, species.light_power, col, uv = 0, angle = LIGHT_WIDE)
|
||||
|
||||
|
||||
else if (species.light_range)
|
||||
set_light(FALSE)
|
||||
|
||||
set_light(FALSE)
|
||||
|
||||
overlays_standing[HAIR_LAYER] = image(face_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
@@ -104,39 +104,3 @@
|
||||
name = "skull"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
|
||||
/obj/item/organ/external/groin/snake
|
||||
name = "tail"
|
||||
max_damage = 200
|
||||
min_broken_damage = 160
|
||||
body_hair = "markings"
|
||||
|
||||
/obj/item/organ/external/head/snake
|
||||
body_hair = "markings"
|
||||
|
||||
/obj/item/organ/external/chest/snake
|
||||
body_hair = "markings"
|
||||
|
||||
/obj/item/organ/venomgland
|
||||
name = "venom gland"
|
||||
desc = "Oversized glands, filled with a venomous liquid."
|
||||
parent_organ = "head"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xgibtorso"
|
||||
organ_tag = "venom gland"
|
||||
|
||||
/obj/item/organ/venomgland/process()
|
||||
if (is_broken())
|
||||
owner.verbs -= /mob/living/carbon/human/proc/venomspit
|
||||
owner << "<span class='notice'> Your fangs dries as the glands are crushed by the violence!</span>"
|
||||
..()
|
||||
|
||||
/obj/item/organ/venomgland/replaced(var/mob/living/carbon/human/target)
|
||||
owner.verbs += /mob/living/carbon/human/proc/venomspit
|
||||
owner << "<span class='notice'> Venom runs through your fangs!</span>"
|
||||
..()
|
||||
|
||||
/obj/item/organ/venomgland/removed(var/mob/living/carbon/human/target)
|
||||
target.verbs -= /mob/living/carbon/human/proc/venomspit
|
||||
target << "<span class='warning'>Your fangs dries as the glands are torn away from you.</span>"
|
||||
..()
|
||||
|
||||
@@ -232,15 +232,3 @@
|
||||
kill_count = 75
|
||||
embed = 0
|
||||
incinerate = 10*/
|
||||
|
||||
/obj/item/projectile/energy/venom
|
||||
name = "venom spit"
|
||||
icon_state = "neurotoxin"
|
||||
damage = 10
|
||||
damage_type = TOX
|
||||
|
||||
/obj/item/projectile/energy/venom/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
if(M.reagents) M.reagents.add_reagent("toxin", 5)
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user