-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathalien.dm
141 lines (118 loc) · 4.31 KB
/
alien.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/mob/living/carbon/alien
name = "alien"
icon = 'icons/mob/alien.dmi'
gender = FEMALE //All xenos are girls!!
dna = null
faction = list(ROLE_ALIEN)
sight = SEE_MOBS
see_in_dark = 4
verb_say = "hisses"
initial_language_holder = /datum/language_holder/alien
bubble_icon = "alien"
type_of_meat = /obj/item/food/meat/slab/xeno
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
var/move_delay_add = 0 // movement delay to add
status_flags = CANUNCONSCIOUS|CANPUSH
heat_protection = 0.5 // minor heat insulation
var/leaping = FALSE
gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs
unique_name = TRUE
var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?")
/mob/living/carbon/alien/Initialize(mapload)
add_verb(src, /mob/living/proc/mob_sleep)
add_verb(src, /mob/living/proc/toggle_resting)
create_bodyparts() //initialize bodyparts
create_internal_organs()
ADD_TRAIT(src, TRAIT_NEVER_WOUNDED, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
. = ..()
/mob/living/carbon/alien/create_internal_organs()
organs += new /obj/item/organ/brain/alien
organs += new /obj/item/organ/alien/hivenode
organs += new /obj/item/organ/tongue/alien
organs += new /obj/item/organ/eyes/night_vision/alien
organs += new /obj/item/organ/liver/alien
organs += new /obj/item/organ/ears
..()
/mob/living/carbon/alien/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) // beepsky won't hunt aliums
return -10
/mob/living/carbon/alien/handle_environment(datum/gas_mixture/environment, delta_time, times_fired)
// Run base mob body temperature proc before taking damage
// this balances body temp to the environment and natural stabilization
. = ..()
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
//Body temperature is too hot.
throw_alert(ALERT_XENO_FIRE, /atom/movable/screen/alert/alien_fire)
switch(bodytemperature)
if(360 to 400)
apply_damage(HEAT_DAMAGE_LEVEL_1 * delta_time, BURN)
if(400 to 460)
apply_damage(HEAT_DAMAGE_LEVEL_2 * delta_time, BURN)
if(460 to INFINITY)
if(on_fire)
apply_damage(HEAT_DAMAGE_LEVEL_3 * delta_time, BURN)
else
apply_damage(HEAT_DAMAGE_LEVEL_2 * delta_time, BURN)
else
clear_alert(ALERT_XENO_FIRE)
/mob/living/carbon/alien/get_status_tab_items()
. = ..()
. += "Combat mode: [combat_mode ? "On" : "Off"]"
/mob/living/carbon/alien/getTrail(being_dragged)
if(getBruteLoss() < 200)
return pick (list("xltrails_1", "xltrails2"))
else
return pick (list("xttrails_1", "xttrails2"))
/*----------------------------------------
Proc: AddInfectionImages()
Des: Gives the client of the alien an image on each infected mob.
----------------------------------------*/
/mob/living/carbon/alien/proc/AddInfectionImages()
if (client)
for (var/i in GLOB.mob_living_list)
var/mob/living/L = i
if(HAS_TRAIT(L, TRAIT_XENO_HOST))
var/obj/item/organ/body_egg/alien_embryo/A = L.getorgan(/obj/item/organ/body_egg/alien_embryo)
if(A)
var/I = image('icons/mob/alien.dmi', loc = L, icon_state = "infected[A.stage]")
client.images += I
return
/*----------------------------------------
Proc: RemoveInfectionImages()
Des: Removes all infected images from the alien.
----------------------------------------*/
/mob/living/carbon/alien/proc/RemoveInfectionImages()
if (client)
for(var/image/I in client.images)
var/searchfor = "infected"
if(findtext(I.icon_state, searchfor, 1, length(searchfor) + 1))
qdel(I)
return
/mob/living/carbon/alien/canBeHandcuffed()
if(num_hands < 2)
return FALSE
return TRUE
/mob/living/carbon/alien/proc/alien_evolve(mob/living/carbon/alien/new_xeno)
visible_message(
span_alertalien("[src] begins to twist and contort!"),
span_noticealien("You begin to evolve!"),
)
new_xeno.setDir(dir)
if(numba && unique_name)
new_xeno.numba = numba
new_xeno.give_unique_name()
if(!alien_name_regex.Find(name))
new_xeno.set_real_name(real_name, FALSE)
new_xeno.name = name
if(mind)
mind.name = new_xeno.real_name
mind.transfer_to(new_xeno)
qdel(src)
/mob/living/carbon/alien/can_hold_items(obj/item/I)
return (I && (I.item_flags & XENOMORPH_HOLDABLE || ISADVANCEDTOOLUSER(src)) && ..())
/mob/living/carbon/alien/on_lying_down(new_lying_angle)
. = ..()
update_icons()
/mob/living/carbon/alien/on_standing_up()
. = ..()
update_icons()