mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
Added alien organs
This commit is contained in:
@@ -14,38 +14,31 @@
|
||||
verb_say = "hisses"
|
||||
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
|
||||
var/nightvision = 1
|
||||
var/storedPlasma = 250
|
||||
var/max_plasma = 500
|
||||
|
||||
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
|
||||
var/has_fine_manipulation = 0
|
||||
|
||||
var/move_delay_add = 0 // movement delay to add
|
||||
|
||||
status_flags = CANPARALYSE|CANPUSH
|
||||
var/heal_rate = 5
|
||||
var/plasma_rate = 5
|
||||
|
||||
var/heat_protection = 0.5
|
||||
var/leaping = 0
|
||||
var/list/obj/effect/proc_holder/alien/abilities = list()
|
||||
gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
unique_name = 1
|
||||
|
||||
/mob/living/carbon/alien/New()
|
||||
verbs += /mob/living/proc/mob_sleep
|
||||
verbs += /mob/living/proc/lay_down
|
||||
|
||||
internal_organs += new /obj/item/organ/internal/brain/alien
|
||||
internal_organs += new /obj/item/organ/internal/alien/hivenode
|
||||
for(var/obj/item/organ/internal/I in internal_organs)
|
||||
I.Insert(src)
|
||||
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/nightvisiontoggle(null))
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/adjustToxLoss(amount)
|
||||
storedPlasma = min(max(storedPlasma + amount,0),max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
updatePlasmaDisplay()
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/adjustFireLoss(amount) // Weak to Fire
|
||||
@@ -55,9 +48,6 @@
|
||||
..(amount)
|
||||
return
|
||||
|
||||
/mob/living/carbon/alien/proc/getPlasma()
|
||||
return storedPlasma
|
||||
|
||||
/mob/living/carbon/alien/check_eye_prot()
|
||||
return ..() + 2
|
||||
|
||||
@@ -65,16 +55,6 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/alien/handle_environment(datum/gas_mixture/environment)
|
||||
|
||||
//If there are alien weeds on the ground then heal if needed or give some toxins
|
||||
if(locate(/obj/structure/alien/weeds) in loc)
|
||||
if(health >= maxHealth - getCloneLoss())
|
||||
adjustToxLoss(plasma_rate)
|
||||
else
|
||||
adjustBruteLoss(-heal_rate)
|
||||
adjustFireLoss(-heal_rate)
|
||||
adjustOxyLoss(-heal_rate)
|
||||
|
||||
if(!environment)
|
||||
return
|
||||
|
||||
@@ -149,27 +129,6 @@
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Intent: [a_intent]")
|
||||
stat(null, "Move Mode: [m_intent]")
|
||||
stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]")
|
||||
|
||||
add_abilities_to_panel()
|
||||
|
||||
/mob/living/carbon/alien/proc/AddAbility(obj/effect/proc_holder/alien/A)
|
||||
abilities.Add(A)
|
||||
A.on_gain(src)
|
||||
if(A.has_action)
|
||||
if(!A.action)
|
||||
A.action = new/datum/action/spell_action/alien
|
||||
A.action.target = A
|
||||
A.action.name = A.name
|
||||
A.action.button_icon = A.action_icon
|
||||
A.action.button_icon_state = A.action_icon_state
|
||||
A.action.background_icon_state = A.action_background_icon_state
|
||||
A.action.Grant(src)
|
||||
|
||||
|
||||
/mob/living/carbon/alien/proc/add_abilities_to_panel()
|
||||
for(var/obj/effect/proc_holder/alien/A in abilities)
|
||||
statpanel("[A.panel]",A.plasma_cost > 0?"([A.plasma_cost])":"",A)
|
||||
|
||||
/mob/living/carbon/alien/Stun(amount)
|
||||
if(status_flags & CANSTUN)
|
||||
@@ -190,7 +149,7 @@ Des: Gives the client of the alien an image on each infected mob.
|
||||
if (client)
|
||||
for (var/mob/living/C in mob_list)
|
||||
if(C.status_flags & XENO_HOST)
|
||||
var/obj/item/organ/internal/body_egg/alien_embryo/A = locate() in C
|
||||
var/obj/item/organ/internal/body_egg/alien_embryo/A = getorgan(/obj/item/organ/internal/body_egg/alien_embryo)
|
||||
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]")
|
||||
client.images += I
|
||||
return
|
||||
|
||||
@@ -24,7 +24,14 @@ Doesn't work on other aliens/AI.*/
|
||||
return 1
|
||||
|
||||
/datum/action/spell_action/alien/CheckRemoval()
|
||||
return !isalien(owner)
|
||||
if(!iscarbon(owner))
|
||||
return 1
|
||||
|
||||
var/mob/living/carbon/C = owner
|
||||
if(target.loc && !(target.loc in C.internal_organs))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien
|
||||
@@ -40,21 +47,24 @@ Doesn't work on other aliens/AI.*/
|
||||
var/action_background_icon_state = "bg_alien"
|
||||
|
||||
/obj/effect/proc_holder/alien/Click()
|
||||
if(!istype(usr,/mob/living/carbon/alien))
|
||||
if(!istype(usr,/mob/living/carbon))
|
||||
return 1
|
||||
var/mob/living/carbon/alien/user = usr
|
||||
var/mob/living/carbon/user = usr
|
||||
if(cost_check(check_turf,user))
|
||||
if(fire(user) && user) // Second check to prevent runtimes when evolving
|
||||
user.adjustToxLoss(-plasma_cost)
|
||||
user.adjustPlasma(-plasma_cost)
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/alien/proc/on_gain(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/proc/on_gain(mob/living/carbon/user)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/alien/proc/fire(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/proc/on_lose(mob/living/carbon/user)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/alien/proc/fire(mob/living/carbon/user)
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/alien/proc/cost_check(check_turf=0,mob/living/carbon/alien/user,silent = 0)
|
||||
/obj/effect/proc_holder/alien/proc/cost_check(check_turf=0,mob/living/carbon/user,silent = 0)
|
||||
if(user.stat)
|
||||
if(!silent)
|
||||
user << "<span class='noticealien'>You must be conscious to do this.</span>"
|
||||
@@ -74,10 +84,9 @@ Doesn't work on other aliens/AI.*/
|
||||
desc = "Plants some alien weeds"
|
||||
plasma_cost = 50
|
||||
check_turf = 1
|
||||
|
||||
action_icon_state = "alien_plant"
|
||||
|
||||
/obj/effect/proc_holder/alien/plant/fire(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/plant/fire(mob/living/carbon/user)
|
||||
if(locate(/obj/structure/alien/weeds/node) in get_turf(user))
|
||||
src << "There's already a weed node here."
|
||||
return 0
|
||||
@@ -90,10 +99,9 @@ Doesn't work on other aliens/AI.*/
|
||||
name = "Whisper"
|
||||
desc = "Whisper to someone"
|
||||
plasma_cost = 10
|
||||
|
||||
action_icon_state = "alien_whisper"
|
||||
|
||||
/obj/effect/proc_holder/alien/whisper/fire(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/whisper/fire(mob/living/carbon/user)
|
||||
var/mob/living/M = input("Select who to whisper to:","Whisper to?",null) as mob in oview(user)
|
||||
if(!M)
|
||||
return 0
|
||||
@@ -110,41 +118,41 @@ Doesn't work on other aliens/AI.*/
|
||||
name = "Transfer Plasma"
|
||||
desc = "Transfer Plasma to another alien"
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_transfer"
|
||||
|
||||
/obj/effect/proc_holder/alien/transfer/fire(mob/living/carbon/alien/user)
|
||||
var/list/mob/living/carbon/alien/aliens_around = list()
|
||||
for(var/mob/living/carbon/alien/A in oview(user))
|
||||
aliens_around.Add(A)
|
||||
var/mob/living/carbon/alien/M = input("Select who to transfer to:","Transfer plasma to?",null) as mob in aliens_around
|
||||
/obj/effect/proc_holder/alien/transfer/fire(mob/living/carbon/user)
|
||||
var/list/mob/living/carbon/aliens_around = list()
|
||||
for(var/mob/living/carbon/A in oview(user))
|
||||
if(A.getorgan(/obj/item/organ/internal/alien/plasmavessel))
|
||||
aliens_around.Add(A)
|
||||
var/mob/living/carbon/M = input("Select who to transfer to:","Transfer plasma to?",null) as mob in aliens_around
|
||||
if(!M)
|
||||
return 0
|
||||
if(isalien(M))
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
|
||||
if (amount)
|
||||
amount = abs(round(amount))
|
||||
if(user.getPlasma() > amount)
|
||||
if (get_dist(user,M) <= 1)
|
||||
M.adjustToxLoss(amount)
|
||||
user.adjustToxLoss(-amount)
|
||||
M << "<span class='noticealien'>[user] has transfered [amount] plasma to you.</span>"
|
||||
user << {"<span class='noticealien'>You trasfer [amount] plasma to [M]</span>"}
|
||||
else
|
||||
user << "<span class='noticealien'>You need to be closer!</span>"
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
|
||||
if (amount)
|
||||
amount = min(abs(round(amount)), user.getPlasma())
|
||||
if (get_dist(user,M) <= 1)
|
||||
M.adjustPlasma(amount)
|
||||
user.adjustPlasma(-amount)
|
||||
M << "<span class='noticealien'>[user] has transfered [amount] plasma to you.</span>"
|
||||
user << {"<span class='noticealien'>You trasfer [amount] plasma to [M]</span>"}
|
||||
else
|
||||
user << "<span class='noticealien'>You need to be closer!</span>"
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/alien/acid
|
||||
name = "Corrossive Acid"
|
||||
desc = "Drench an object in acid, destroying it over time."
|
||||
plasma_cost = 200
|
||||
|
||||
action_icon_state = "alien_acid"
|
||||
|
||||
/obj/effect/proc_holder/alien/acid/on_gain(mob/living/carbon/alien/user)
|
||||
user.verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid)
|
||||
/obj/effect/proc_holder/alien/acid/on_gain(mob/living/carbon/user)
|
||||
user.verbs.Add(/mob/living/carbon/proc/corrosive_acid)
|
||||
|
||||
/obj/effect/proc_holder/alien/acid/proc/corrode(target,mob/living/carbon/alien/user = usr)
|
||||
/obj/effect/proc_holder/alien/acid/on_lose(mob/living/carbon/user)
|
||||
user.verbs.Remove(/mob/living/carbon/proc/corrosive_acid)
|
||||
|
||||
/obj/effect/proc_holder/alien/acid/proc/corrode(target,mob/living/carbon/user = usr)
|
||||
if(target in oview(1,user))
|
||||
// OBJ CHECK
|
||||
if(isobj(target))
|
||||
@@ -175,28 +183,25 @@ Doesn't work on other aliens/AI.*/
|
||||
|
||||
/obj/effect/proc_holder/alien/acid/fire(mob/living/carbon/alien/user)
|
||||
var/O = input("Select what to dissolve:","Dissolve",null) as obj|turf in oview(1,user)
|
||||
if(!O)
|
||||
return 0
|
||||
if(!O) return 0
|
||||
return corrode(O,user)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/corrosive_acid(O as obj|turf in oview(1)) // right click menu verb ugh
|
||||
/mob/living/carbon/proc/corrosive_acid(O as obj|turf in oview(1)) // right click menu verb ugh
|
||||
set name = "Corrossive Acid"
|
||||
|
||||
if(!isalien(usr))
|
||||
if(!iscarbon(usr))
|
||||
return
|
||||
var/mob/living/carbon/alien/humanoid/user = usr
|
||||
var/mob/living/carbon/user = usr
|
||||
var/obj/effect/proc_holder/alien/acid/A = locate() in user.abilities
|
||||
if(!A)
|
||||
return
|
||||
if(!A) return
|
||||
if(user.getPlasma() > A.plasma_cost && A.corrode(O))
|
||||
user.adjustToxLoss(-A.plasma_cost)
|
||||
user.adjustPlasma(-A.plasma_cost)
|
||||
|
||||
|
||||
/obj/effect/proc_holder/alien/neurotoxin
|
||||
name = "Spit Neurotoxin"
|
||||
desc = "Spits neurotoxin at someone, paralyzing them for a short time."
|
||||
plasma_cost = 50
|
||||
|
||||
action_icon_state = "alien_neurotoxin"
|
||||
|
||||
/obj/effect/proc_holder/alien/neurotoxin/fire(mob/living/carbon/alien/user)
|
||||
@@ -221,38 +226,34 @@ Doesn't work on other aliens/AI.*/
|
||||
desc = "Secrete tough malleable resin."
|
||||
plasma_cost = 55
|
||||
check_turf = 1
|
||||
var/list/structures = list(
|
||||
"resin wall" = /obj/structure/alien/resin/wall,
|
||||
"resin membrane" = /obj/structure/alien/resin/membrane,
|
||||
"resin nest" = /obj/structure/stool/bed/nest)
|
||||
|
||||
action_icon_state = "alien_resin"
|
||||
|
||||
/obj/effect/proc_holder/alien/resin/fire(mob/living/carbon/alien/user)
|
||||
if(locate(/obj/structure/alien/resin) in user.loc.contents)
|
||||
/obj/effect/proc_holder/alien/resin/fire(mob/living/carbon/user)
|
||||
if(locate(/obj/structure/alien/resin) in user.loc)
|
||||
user << "<span class='danger'>There is already a resin structure there.</span>"
|
||||
return 0
|
||||
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
|
||||
|
||||
if(!choice)
|
||||
return 0
|
||||
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in structures
|
||||
if(!choice) return 0
|
||||
|
||||
user << "<span class='notice'>You shape a [choice].</span>"
|
||||
user.visible_message("<span class='notice'>[user] vomits up a thick purple substance and begins to shape it.</span>")
|
||||
|
||||
switch(choice)
|
||||
if("resin wall")
|
||||
new /obj/structure/alien/resin/wall(user.loc)
|
||||
if("resin membrane")
|
||||
new /obj/structure/alien/resin/membrane(user.loc)
|
||||
if("resin nest")
|
||||
new /obj/structure/stool/bed/nest(user.loc)
|
||||
choice = structures[choice]
|
||||
new choice(user.loc)
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/alien/regurgitate
|
||||
name = "Regurgitate"
|
||||
desc = "Empties the contents of your stomach"
|
||||
plasma_cost = 0
|
||||
|
||||
action_icon_state = "alien_barf"
|
||||
|
||||
/obj/effect/proc_holder/alien/regurgitate/fire(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/regurgitate/fire(mob/living/carbon/user)
|
||||
if(user.stomach_contents.len)
|
||||
for(var/atom/movable/A in user.stomach_contents)
|
||||
user.stomach_contents.Remove(A)
|
||||
@@ -265,11 +266,9 @@ Doesn't work on other aliens/AI.*/
|
||||
name = "Toggle Night Vision"
|
||||
desc = "Toggles Night Vision"
|
||||
plasma_cost = 0
|
||||
|
||||
has_action = 0 // Has dedicated GUI button already
|
||||
|
||||
/obj/effect/proc_holder/alien/nightvisiontoggle/fire(mob/living/carbon/alien/user)
|
||||
|
||||
if(!user.nightvision)
|
||||
user.see_in_dark = 8
|
||||
user.see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
@@ -283,3 +282,32 @@ Doesn't work on other aliens/AI.*/
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/proc/getPlasma()
|
||||
var/obj/item/organ/internal/alien/plasmavessel/vessel = getorgan(/obj/item/organ/internal/alien/plasmavessel)
|
||||
if(!vessel) return 0
|
||||
return vessel.storedPlasma
|
||||
|
||||
|
||||
/mob/living/carbon/proc/adjustPlasma(amount)
|
||||
var/obj/item/organ/internal/alien/plasmavessel/vessel = getorgan(/obj/item/organ/internal/alien/plasmavessel)
|
||||
if(!vessel) return 0
|
||||
vessel.storedPlasma = max(vessel.storedPlasma + amount,0)
|
||||
vessel.storedPlasma = min(vessel.storedPlasma, vessel.max_plasma) //upper limit of max_plasma, lower limit of 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/alien/adjustPlasma(amount)
|
||||
. = ..()
|
||||
updatePlasmaDisplay()
|
||||
|
||||
/mob/living/carbon/proc/usePlasma(amount)
|
||||
if(getPlasma() >= amount)
|
||||
adjustPlasma(-amount)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/proc/cmp_abilities_cost(obj/effect/proc_holder/alien/a, obj/effect/proc_holder/alien/b)
|
||||
return b.plasma_cost - a.plasma_cost
|
||||
@@ -4,21 +4,15 @@
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
icon_state = "aliend_s"
|
||||
plasma_rate = 15
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone/New()
|
||||
create_reagents(100)
|
||||
if(src.name == "alien drone")
|
||||
src.name = text("alien drone ([rand(1, 1000)])")
|
||||
src.real_name = src.name
|
||||
internal_organs += new /obj/item/organ/internal/alien/plasmavessel/large
|
||||
internal_organs += new /obj/item/organ/internal/alien/resinspinner
|
||||
internal_organs += new /obj/item/organ/internal/alien/acid
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/resin(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/acid(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/evolve(null))
|
||||
|
||||
..()
|
||||
//Drones use the same base as generic humanoids.
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone/movement_delay()
|
||||
. = ..()
|
||||
|
||||
@@ -3,16 +3,10 @@
|
||||
caste = "h"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
storedPlasma = 100
|
||||
max_plasma = 150
|
||||
icon_state = "alienh_s"
|
||||
plasma_rate = 5
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/New()
|
||||
create_reagents(100)
|
||||
if(name == "alien hunter")
|
||||
name = text("alien hunter ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
internal_organs += new /obj/item/organ/internal/alien/plasmavessel/small
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/handle_hud_icons_health()
|
||||
|
||||
@@ -3,21 +3,13 @@
|
||||
caste = "s"
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
storedPlasma = 100
|
||||
max_plasma = 250
|
||||
icon_state = "aliens_s"
|
||||
plasma_rate = 10
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/sentinel/New()
|
||||
create_reagents(100)
|
||||
if(name == "alien sentinel")
|
||||
name = text("alien sentinel ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/acid(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/neurotoxin(null))
|
||||
|
||||
internal_organs += new /obj/item/organ/internal/alien/plasmavessel
|
||||
internal_organs += new /obj/item/organ/internal/alien/acid
|
||||
internal_organs += new /obj/item/organ/internal/alien/neurotoxin
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/sentinel/handle_hud_icons_health()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob/living/carbon/alien/humanoid
|
||||
name = "alien"
|
||||
icon_state = "alien_s"
|
||||
pass_flags = PASSTABLE
|
||||
var/obj/item/r_store = null
|
||||
var/obj/item/l_store = null
|
||||
var/caste = ""
|
||||
@@ -14,23 +15,14 @@
|
||||
//This is fine right now, if we're adding organ specific damage this needs to be updated
|
||||
/mob/living/carbon/alien/humanoid/New()
|
||||
create_reagents(1000)
|
||||
if(name == "alien")
|
||||
name = text("alien ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/plant(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/whisper(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/transfer(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/regurgitate(null))
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/movement_delay()
|
||||
. = ..()
|
||||
. += move_delay_add + config.alien_delay //move_delay_add is used to slow aliens with stuns
|
||||
|
||||
///mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj) taken care of in living
|
||||
|
||||
/mob/living/carbon/alien/humanoid/emp_act(severity)
|
||||
if(r_store) r_store.emp_act(severity)
|
||||
if(l_store) l_store.emp_act(severity)
|
||||
@@ -147,5 +139,5 @@
|
||||
/mob/living/carbon/alien/humanoid/check_ear_prot()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/alien/carbon/alien/humanoid/get_permeability_protection()
|
||||
/mob/living/carbon/alien/humanoid/get_permeability_protection()
|
||||
return 0.8
|
||||
@@ -1,9 +1,5 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
/mob/living/carbon/alien/humanoid
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost)
|
||||
var/temperature = current
|
||||
var/difference = abs(current-loc_temp) //get difference
|
||||
@@ -20,5 +16,3 @@
|
||||
temperature = max(loc_temp, temperature-change)
|
||||
temp_change = (temperature - current)
|
||||
return temp_change
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
health = 250
|
||||
icon_state = "alienq_s"
|
||||
status_flags = CANPARALYSE
|
||||
heal_rate = 5
|
||||
plasma_rate = 20
|
||||
ventcrawler = 0 //pull over that ass too fat
|
||||
unique_name = 0
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen/New()
|
||||
@@ -23,10 +22,11 @@
|
||||
|
||||
real_name = src.name
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/acid(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/neurotoxin(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/resin(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/lay_egg(null))
|
||||
internal_organs += new /obj/item/organ/internal/alien/plasmavessel/large/queen
|
||||
internal_organs += new /obj/item/organ/internal/alien/resinspinner
|
||||
internal_organs += new /obj/item/organ/internal/alien/acid
|
||||
internal_organs += new /obj/item/organ/internal/alien/neurotoxin
|
||||
internal_organs += new /obj/item/organ/internal/alien/eggsac
|
||||
|
||||
..()
|
||||
|
||||
@@ -62,10 +62,9 @@
|
||||
desc = "Lay an egg to produce huggers to impregnate prey with."
|
||||
plasma_cost = 75
|
||||
check_turf = 1
|
||||
|
||||
action_icon_state = "alien_egg"
|
||||
|
||||
/obj/effect/proc_holder/alien/lay_egg/fire(mob/living/carbon/alien/user)
|
||||
/obj/effect/proc_holder/alien/lay_egg/fire(mob/living/carbon/user)
|
||||
if(locate(/obj/structure/alien/egg) in get_turf(user))
|
||||
user << "There's already an egg here."
|
||||
return 0
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
storedPlasma = 50
|
||||
max_plasma = 50
|
||||
|
||||
var/amount_grown = 0
|
||||
var/max_grown = 200
|
||||
@@ -17,11 +15,9 @@
|
||||
|
||||
//This is fine right now, if we're adding organ specific damage this needs to be updated
|
||||
/mob/living/carbon/alien/larva/New()
|
||||
create_reagents(100)
|
||||
if(name == "alien larva")
|
||||
name = "alien larva ([rand(1, 1000)])"
|
||||
real_name = name
|
||||
regenerate_icons()
|
||||
internal_organs += new /obj/item/organ/internal/alien/plasmavessel/small/tiny
|
||||
|
||||
AddAbility(new/obj/effect/proc_holder/alien/hide(null))
|
||||
AddAbility(new/obj/effect/proc_holder/alien/larva_evolve(null))
|
||||
..()
|
||||
@@ -32,8 +28,8 @@
|
||||
if(statpanel("Status"))
|
||||
stat(null, "Progress: [amount_grown]/[max_grown]")
|
||||
|
||||
/mob/living/carbon/alien/larva/adjustToxLoss(amount)
|
||||
if(stat != DEAD)
|
||||
/mob/living/carbon/alien/larva/adjustPlasma(amount)
|
||||
if(stat != DEAD && amount > 0)
|
||||
amount_grown = min(amount_grown + 1, max_grown)
|
||||
..(amount)
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@
|
||||
var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
|
||||
|
||||
if(Toxins_pp) // Detect toxins in air
|
||||
|
||||
adjustToxLoss(breath.toxins*250)
|
||||
adjustPlasma(breath.toxins*250)
|
||||
throw_alert("alien_tox")
|
||||
|
||||
toxins_used = breath.toxins
|
||||
@@ -37,7 +36,6 @@
|
||||
move_delay_add = max(0, move_delay_add - rand(1, 2))
|
||||
|
||||
/mob/living/carbon/alien/update_sight()
|
||||
|
||||
if(stat == DEAD)
|
||||
sight |= SEE_TURFS
|
||||
sight |= SEE_MOBS
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
/obj/item/organ/internal/alien
|
||||
origin_tech = "biotech=5"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xgibmid2"
|
||||
var/list/alien_powers = list()
|
||||
|
||||
/obj/item/organ/internal/alien/New()
|
||||
for(var/A in alien_powers)
|
||||
if(ispath(A))
|
||||
alien_powers -= A
|
||||
alien_powers += new A(src)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/alien/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
for(var/obj/effect/proc_holder/alien/P in alien_powers)
|
||||
M.AddAbility(P)
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/Remove(mob/living/carbon/M, special = 0)
|
||||
for(var/obj/effect/proc_holder/alien/P in alien_powers)
|
||||
M.RemoveAbility(P)
|
||||
..()
|
||||
|
||||
/obj/item/organ/internal/alien/prepare_eat()
|
||||
var/obj/S = ..()
|
||||
S.reagents.add_reagent("sacid", 10)
|
||||
return S
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel
|
||||
name = "plasma vessel"
|
||||
origin_tech = "biotech=5;plasma=2"
|
||||
w_class = 3
|
||||
zone = "chest"
|
||||
slot = "plasmavessel"
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/plant, /obj/effect/proc_holder/alien/transfer)
|
||||
|
||||
var/storedPlasma = 100
|
||||
var/max_plasma = 250
|
||||
var/heal_rate = 5
|
||||
var/plasma_rate = 10
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/prepare_eat()
|
||||
var/obj/S = ..()
|
||||
S.reagents.add_reagent("plasma", storedPlasma/10)
|
||||
return S
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/large
|
||||
name = "large plasma vessel"
|
||||
w_class = 4
|
||||
storedPlasma = 200
|
||||
max_plasma = 500
|
||||
plasma_rate = 15
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/large/queen
|
||||
origin_tech = "biotech=6;plasma=3"
|
||||
plasma_rate = 20
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/small
|
||||
name = "small plasma vessel"
|
||||
w_class = 2
|
||||
storedPlasma = 100
|
||||
max_plasma = 150
|
||||
plasma_rate = 5
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/small/tiny
|
||||
name = "tiny plasma vessel"
|
||||
w_class = 1
|
||||
max_plasma = 100
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/on_life()
|
||||
//If there are alien weeds on the ground then heal if needed or give some plasma
|
||||
if(locate(/obj/structure/alien/weeds) in owner.loc)
|
||||
if(owner.health >= owner.maxHealth - owner.getCloneLoss())
|
||||
owner.adjustPlasma(plasma_rate)
|
||||
else
|
||||
var/mod = 1
|
||||
if(!isalien(owner))
|
||||
mod = 0.2
|
||||
owner.adjustBruteLoss(-heal_rate*mod)
|
||||
owner.adjustFireLoss(-heal_rate*mod)
|
||||
owner.adjustOxyLoss(-heal_rate*mod)
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(isalien(M))
|
||||
var/mob/living/carbon/alien/A = M
|
||||
A.updatePlasmaDisplay()
|
||||
|
||||
/obj/item/organ/internal/alien/plasmavessel/Remove(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
if(isalien(M))
|
||||
var/mob/living/carbon/alien/A = M
|
||||
A.updatePlasmaDisplay()
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/hivenode
|
||||
name = "hive node"
|
||||
zone = "head"
|
||||
slot = "hivenode"
|
||||
origin_tech = "biotech=5;magnets=4;bluespace=3"
|
||||
w_class = 1
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/whisper)
|
||||
|
||||
/obj/item/organ/internal/alien/hivenode/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
M.faction |= "alien"
|
||||
|
||||
/obj/item/organ/internal/alien/hivenode/Remove(mob/living/carbon/M, special = 0)
|
||||
M.faction -= "alien"
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/resinspinner
|
||||
name = "resin spinner"
|
||||
zone = "mouth"
|
||||
slot = "resinspinner"
|
||||
origin_tech = "biotech=5;materials=4"
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/resin)
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/acid
|
||||
name = "acid gland"
|
||||
zone = "mouth"
|
||||
slot = "acidgland"
|
||||
origin_tech = "biotech=5;materials=2;combat=2"
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/acid)
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/neurotoxin
|
||||
name = "neurotoxin gland"
|
||||
zone = "mouth"
|
||||
slot = "neurotoxingland"
|
||||
origin_tech = "biotech=5;combat=5"
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/neurotoxin)
|
||||
|
||||
|
||||
/obj/item/organ/internal/alien/eggsac
|
||||
name = "egg sac"
|
||||
zone = "groin"
|
||||
slot = "eggsac"
|
||||
w_class = 4
|
||||
origin_tech = "biotech=8"
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/lay_egg)
|
||||
@@ -6,23 +6,13 @@
|
||||
/mob/living/proc/alien_talk(message)
|
||||
log_say("[key_name(src)] : [message]")
|
||||
message = trim(message)
|
||||
|
||||
if (!message)
|
||||
return
|
||||
if(!message) return
|
||||
|
||||
var/message_a = say_quote(message)
|
||||
var/rendered = "<i><span class='game say'>Hivemind, <span class='name'>[name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||
for(var/mob/S in player_list)
|
||||
if((!S.stat && (S.hivecheck())) || (S in dead_mob_list))
|
||||
if((!S.stat && S.hivecheck()) || (S in dead_mob_list))
|
||||
S << rendered
|
||||
|
||||
/mob/living/carbon/alien/handle_inherent_channels(message, message_mode)
|
||||
if(!..())
|
||||
if(message_mode == MODE_ALIEN)
|
||||
if(hivecheck())
|
||||
alien_talk(message)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/alien/hivecheck()
|
||||
return 1
|
||||
/mob/living/carbon/hivecheck()
|
||||
return getorgan(/obj/item/organ/internal/alien/hivenode)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/mob/living/carbon/alien/proc/updatePlasmaDisplay()
|
||||
if(hud_used) //clientless aliens
|
||||
hud_used.alien_plasma_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='magenta'>[round(storedPlasma)]</font></div>"
|
||||
hud_used.alien_plasma_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='magenta'>[round(getPlasma())]</font></div>"
|
||||
|
||||
/mob/living/carbon/alien/larva/updatePlasmaDisplay()
|
||||
return
|
||||
@@ -102,8 +102,10 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
icon_state = "[initial(icon_state)]"
|
||||
Attach(hit_atom)
|
||||
|
||||
/obj/item/clothing/mask/facehugger/proc/Attach(mob/M)
|
||||
if( (!iscorgi(M) && !iscarbon(M)) || isalien(M))
|
||||
/obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M)
|
||||
if(!isliving(M)) return 0
|
||||
|
||||
if((!iscorgi(M) && !iscarbon(M)) || isalien(M))
|
||||
return 0
|
||||
if(attached)
|
||||
return 0
|
||||
@@ -112,18 +114,18 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
spawn(MAX_IMPREGNATION_TIME)
|
||||
attached = 0
|
||||
|
||||
var/mob/living/L = M //just so I don't need to use :
|
||||
if(M.getorgan(/obj/item/organ/internal/alien/hivenode)) return 0
|
||||
if(M.getorgan(/obj/item/organ/internal/body_egg/alien_embryo)) return 0
|
||||
|
||||
if(loc == L) return 0
|
||||
if(loc == M) return 0
|
||||
if(stat != CONSCIOUS) return 0
|
||||
if(locate(/obj/item/organ/internal/body_egg/alien_embryo) in L) return 0
|
||||
if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage
|
||||
if(!sterile) M.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage
|
||||
|
||||
L.visible_message("<span class='danger'>[src] leaps at [L]'s face!</span>", \
|
||||
"<span class='userdanger'>[src] leaps at [L]'s face!</span>")
|
||||
M.visible_message("<span class='danger'>[src] leaps at [M]'s face!</span>", \
|
||||
"<span class='userdanger'>[src] leaps at [M]'s face!</span>")
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.is_mouth_covered(head_only = 1))
|
||||
H.visible_message("<span class='danger'>[src] smashes against [H]'s [H.head]!</span>", \
|
||||
"<span class='userdanger'>[src] smashes against [H]'s [H.head]!</span>")
|
||||
@@ -131,7 +133,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
return 0
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/target = L
|
||||
var/mob/living/carbon/target = M
|
||||
if(target.wear_mask)
|
||||
if(prob(20)) return 0
|
||||
var/obj/item/clothing/W = target.wear_mask
|
||||
@@ -144,7 +146,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
src.loc = target
|
||||
target.equip_to_slot(src, slot_wear_mask,,0)
|
||||
|
||||
if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
|
||||
if(!sterile) M.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
|
||||
else if (iscorgi(M))
|
||||
var/mob/living/simple_animal/pet/dog/corgi/C = M
|
||||
loc = C
|
||||
@@ -154,7 +156,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
GoIdle() //so it doesn't jump the people that tear it off
|
||||
|
||||
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
|
||||
Impregnate(L)
|
||||
Impregnate(M)
|
||||
|
||||
return 1
|
||||
|
||||
@@ -228,11 +230,13 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
return
|
||||
|
||||
/proc/CanHug(mob/M)
|
||||
/proc/CanHug(mob/living/M)
|
||||
if(!istype(M))
|
||||
return 0
|
||||
if(M.stat == DEAD)
|
||||
return 0
|
||||
if(M.getorgan(/obj/item/organ/internal/alien/hivenode))
|
||||
return 0
|
||||
|
||||
if(iscorgi(M) || ismonkey(M))
|
||||
return 1
|
||||
|
||||
@@ -537,9 +537,40 @@ var/const/GALOSHES_DONT_HELP = 8
|
||||
O.emp_act(severity)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/carbon/check_eye_prot()
|
||||
var/number = ..()
|
||||
for(var/obj/item/organ/internal/cyberimp/eyes/EFP in internal_organs)
|
||||
number += EFP.flash_protect
|
||||
return number
|
||||
return number
|
||||
|
||||
/mob/living/carbon/proc/AddAbility(obj/effect/proc_holder/alien/A)
|
||||
abilities.Add(A)
|
||||
A.on_gain(src)
|
||||
if(A.has_action)
|
||||
if(!A.action)
|
||||
A.action = new/datum/action/spell_action/alien
|
||||
A.action.target = A
|
||||
A.action.name = A.name
|
||||
A.action.button_icon = A.action_icon
|
||||
A.action.button_icon_state = A.action_icon_state
|
||||
A.action.background_icon_state = A.action_background_icon_state
|
||||
A.action.Grant(src)
|
||||
sortInsert(abilities, /proc/cmp_abilities_cost, 0)
|
||||
|
||||
/mob/living/carbon/proc/RemoveAbility(obj/effect/proc_holder/alien/A)
|
||||
abilities.Remove(A)
|
||||
A.on_lose(src)
|
||||
if(A.action)
|
||||
A.action.Remove(src)
|
||||
|
||||
/mob/living/carbon/proc/add_abilities_to_panel()
|
||||
for(var/obj/effect/proc_holder/alien/A in abilities)
|
||||
statpanel("[A.panel]",A.plasma_cost > 0?"([A.plasma_cost])":"",A)
|
||||
|
||||
/mob/living/carbon/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
var/obj/item/organ/internal/alien/plasmavessel/vessel = getorgan(/obj/item/organ/internal/alien/plasmavessel)
|
||||
if(vessel)
|
||||
stat(null, "Plasma Stored: [vessel.storedPlasma]/[vessel.max_plasma]")
|
||||
add_abilities_to_panel()
|
||||
@@ -1,8 +1,8 @@
|
||||
/mob/living/carbon/
|
||||
/mob/living/carbon
|
||||
gender = MALE
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD)
|
||||
var/list/stomach_contents = list()
|
||||
var/list/internal_organs = list() //List of /obj/item/organ in the mob. they don't go in the contents.
|
||||
var/list/internal_organs = list() //List of /obj/item/organ/internal in the mob. They don't go in the contents for some reason I don't want to know.
|
||||
|
||||
var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
|
||||
|
||||
@@ -28,4 +28,5 @@
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/
|
||||
|
||||
var/remote_view = 0
|
||||
var/list/obj/effect/proc_holder/alien/abilities = list()
|
||||
var/gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
ventcrawler = 1
|
||||
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey
|
||||
gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
unique_name = 1
|
||||
|
||||
/mob/living/carbon/monkey/New()
|
||||
create_reagents(1000)
|
||||
@@ -22,10 +23,6 @@
|
||||
|
||||
for(var/obj/item/organ/internal/I in internal_organs)
|
||||
I.Insert(src)
|
||||
|
||||
if(name == "monkey")
|
||||
name = text("monkey ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
gender = pick(MALE, FEMALE)
|
||||
|
||||
..()
|
||||
|
||||
@@ -20,6 +20,9 @@ Sorry Giacom. Please don't be mad :(
|
||||
else //no choice? force static
|
||||
D.staticOverlays |= staticOverlays["static"]
|
||||
D.client.images |= staticOverlays["static"]
|
||||
if(unique_name)
|
||||
name = "[name] ([rand(1, 1000)])"
|
||||
real_name = name
|
||||
|
||||
|
||||
/mob/living/Destroy()
|
||||
|
||||
@@ -52,3 +52,4 @@
|
||||
var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message"
|
||||
|
||||
var/last_bumped = 0
|
||||
var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666)
|
||||
|
||||
@@ -220,6 +220,10 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
if(1)
|
||||
src << "<i><font color=#800080>Our senses have not evolved enough to be able to communicate this way...</font></i>"
|
||||
return 1
|
||||
if(message_mode == MODE_ALIEN)
|
||||
if(hivecheck())
|
||||
alien_talk(message)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/proc/treat_message(message)
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
minbodytemp = 0
|
||||
faction = list("cult")
|
||||
flying = 1
|
||||
unique_name = 1
|
||||
var/list/construct_spells = list()
|
||||
var/playstyle_string = "<B>You are a generic construct! Your job is to not exist.</B>"
|
||||
|
||||
|
||||
/mob/living/simple_animal/construct/New()
|
||||
..()
|
||||
name = text("[initial(name)] ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
for(var/spell in construct_spells)
|
||||
mob_spell_list += new spell(src)
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
minbodytemp = 0
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_MINIMUM
|
||||
unique_name = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/drone
|
||||
name = "alien drone"
|
||||
@@ -82,6 +83,7 @@
|
||||
projectiletype = /obj/item/projectile/neurotox
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
status_flags = 0
|
||||
unique_name = 0
|
||||
var/sterile = 1
|
||||
var/plants_off = 0
|
||||
var/egg_cooldown = 30
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
ventcrawler = 2
|
||||
attacktext = "bites"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
unique_name = 1
|
||||
|
||||
//nursemaids - these create webs and eggs
|
||||
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
color = "#FFC080" // rgb: 255, 196, 128 Bright orange
|
||||
metabolization_rate = 10 * REAGENTS_METABOLISM // very fast, so it can be applied rapidly. But this changes on an overdose
|
||||
overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle.
|
||||
|
||||
|
||||
/datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(method == TOUCH)
|
||||
@@ -289,7 +289,7 @@
|
||||
N.skin_tone = "caucasian2"
|
||||
if ("albino")
|
||||
N.skin_tone = "caucasian1"
|
||||
|
||||
|
||||
if(MUTCOLORS in N.dna.species.specflags) //take current alien color and darken it slightly
|
||||
var/newcolor = ""
|
||||
var/len = length(N.dna.features["mcolor"])
|
||||
@@ -307,20 +307,20 @@
|
||||
N.dna.features["mcolor"] = newcolor
|
||||
N.regenerate_icons()
|
||||
N.update_body()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(method == INGEST)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>That tasted horrible.</span>"
|
||||
M.AdjustStunned(2)
|
||||
M.AdjustWeakened(2)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/reagent/spraytan/overdose_process(mob/living/M)
|
||||
metabolization_rate = 1 * REAGENTS_METABOLISM
|
||||
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/N = M
|
||||
if(N.dna.species.id == "human") // If they're human, turn em to the "orange" race, and give em spiky black hair
|
||||
@@ -329,7 +329,7 @@
|
||||
N.hair_color = "000"
|
||||
N.update_hair()
|
||||
if(MUTCOLORS in N.dna.species.specflags) //Aliens with custom colors simply get turned orange
|
||||
N.dna.features["mcolor"] = "f80"
|
||||
N.dna.features["mcolor"] = "f80"
|
||||
N.regenerate_icons()
|
||||
N.update_body()
|
||||
if(prob(7))
|
||||
@@ -881,6 +881,13 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/stable_plasma/on_mob_life(mob/living/M)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.adjustPlasma(10)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/iodine
|
||||
name = "Iodine"
|
||||
id = "iodine"
|
||||
|
||||
@@ -60,6 +60,9 @@
|
||||
/datum/reagent/toxin/plasma/on_mob_life(mob/living/M)
|
||||
if(holder.has_reagent("epinephrine"))
|
||||
holder.remove_reagent("epinephrine", 2*REM)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.adjustPlasma(20)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user