mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-06 07:22:15 +00:00
Added some limited support for alien reagent reactions.
This commit is contained in:
@@ -199,11 +199,12 @@ datum
|
||||
return total_transfered
|
||||
*/
|
||||
|
||||
metabolize(var/mob/M)
|
||||
metabolize(var/mob/M,var/alien)
|
||||
|
||||
for(var/A in reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(M && R)
|
||||
R.on_mob_life(M)
|
||||
R.on_mob_life(M,alien)
|
||||
update_total()
|
||||
|
||||
conditional_update_move(var/atom/A, var/Running = 0)
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
#define REAGENTS_OVERDOSE 30
|
||||
#define REM REAGENTS_EFFECT_MULTIPLIER
|
||||
|
||||
//Some on_mob_life() procs check for alien races.
|
||||
#define IS_DIONA 1
|
||||
#define IS_VOX 2
|
||||
|
||||
//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
|
||||
//so that it can continue working when the reagent is deleted while the proc is still active.
|
||||
|
||||
@@ -68,7 +72,7 @@ datum
|
||||
src = null
|
||||
return
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(!istype(M, /mob/living))
|
||||
return //Noticed runtime errors from pacid trying to damage ghosts, this should fix. --NEO
|
||||
if( (overdose > 0) && (volume >= overdose))//Overdosing, wooo
|
||||
@@ -400,10 +404,15 @@ datum
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose = REAGENTS_OVERDOSE*2
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(!M) M = holder.my_atom
|
||||
if(M.losebreath >= 10)
|
||||
M.losebreath = max(10, M.losebreath-5)
|
||||
|
||||
if(alien && alien == IS_VOX)
|
||||
M.adjustToxLoss(REAGENTS_METABOLISM)
|
||||
else
|
||||
if(M.losebreath >= 10)
|
||||
M.losebreath = max(10, M.losebreath-5)
|
||||
|
||||
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
|
||||
return
|
||||
|
||||
@@ -484,6 +493,14 @@ datum
|
||||
|
||||
custom_metabolism = 0.01
|
||||
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2) return
|
||||
if(alien && alien == IS_VOX)
|
||||
M.adjustToxLoss(REAGENTS_METABOLISM)
|
||||
holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
|
||||
return
|
||||
..()
|
||||
|
||||
copper
|
||||
name = "Copper"
|
||||
id = "copper"
|
||||
@@ -501,6 +518,14 @@ datum
|
||||
|
||||
custom_metabolism = 0.01
|
||||
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2) return
|
||||
if(alien && alien == IS_VOX)
|
||||
M.adjustOxyLoss(-2*REM)
|
||||
holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
|
||||
return
|
||||
..()
|
||||
|
||||
hydrogen
|
||||
name = "Hydrogen"
|
||||
id = "hydrogen"
|
||||
@@ -671,7 +696,10 @@ datum
|
||||
if(prob(5))
|
||||
if(prob(50))
|
||||
M.radiation += 50 // curing it that way may kill you instead
|
||||
M.adjustToxLoss(100)
|
||||
var/mob/living/carbon/human/H
|
||||
if(istype(C,/mob/living/carbon/human))
|
||||
H = C
|
||||
if(!H || (H.species && !(H.species.flags & RAD_ABSORB))) M.adjustToxLoss(100)
|
||||
M:antibodies |= V.antigen
|
||||
..()
|
||||
return
|
||||
@@ -983,6 +1011,7 @@ datum
|
||||
if(M.stat == 2.0)
|
||||
return
|
||||
if(!M) M = holder.my_atom
|
||||
//This needs a diona check but if one is added they won't be able to heal burn damage at all.
|
||||
M.heal_organ_damage(0,2*REM)
|
||||
..()
|
||||
return
|
||||
@@ -995,11 +1024,12 @@ datum
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose = REAGENTS_OVERDOSE/2
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0) //THE GUY IS **DEAD**! BEREFT OF ALL LIFE HE RESTS IN PEACE etc etc. He does NOT metabolise shit anymore, god DAMN
|
||||
return
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(0,3*REM)
|
||||
if(alien && alien != IS_DIONA)
|
||||
M.heal_organ_damage(0,3*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1011,11 +1041,16 @@ datum
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0)
|
||||
return //See above, down and around. --Agouri
|
||||
if(!M) M = holder.my_atom
|
||||
M.adjustOxyLoss(-2*REM)
|
||||
|
||||
if(alien && alien == IS_VOX)
|
||||
M.adjustToxLoss(2*REM)
|
||||
else if(alien && alien != IS_DIONA)
|
||||
M.adjustOxyLoss(-2*REM)
|
||||
|
||||
if(holder.has_reagent("lexorin"))
|
||||
holder.remove_reagent("lexorin", 2*REM)
|
||||
..()
|
||||
@@ -1029,11 +1064,16 @@ datum
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose = REAGENTS_OVERDOSE/2
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0)
|
||||
return
|
||||
if(!M) M = holder.my_atom
|
||||
M.adjustOxyLoss(-M.getOxyLoss())
|
||||
|
||||
if(alien && alien == IS_VOX)
|
||||
M.adjustOxyLoss()
|
||||
else if(alien && alien != IS_DIONA)
|
||||
M.adjustOxyLoss(-M.getOxyLoss())
|
||||
|
||||
if(holder.has_reagent("lexorin"))
|
||||
holder.remove_reagent("lexorin", 2*REM)
|
||||
..()
|
||||
@@ -1046,14 +1086,15 @@ datum
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0)
|
||||
return
|
||||
if(!M) M = holder.my_atom
|
||||
if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM)
|
||||
if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(1*REM,0)
|
||||
if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,1*REM)
|
||||
if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-1*REM)
|
||||
if(alien && alien != IS_DIONA)
|
||||
if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM)
|
||||
if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(1*REM,0)
|
||||
if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,1*REM)
|
||||
if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-1*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1064,12 +1105,13 @@ datum
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(!M) M = holder.my_atom
|
||||
M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1)
|
||||
M.drowsyness = max(M.drowsyness-2*REM, 0)
|
||||
M.hallucination = max(0, M.hallucination - 5*REM)
|
||||
M.adjustToxLoss(-2*REM)
|
||||
if(alien && alien != IS_DIONA)
|
||||
M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1)
|
||||
M.drowsyness = max(M.drowsyness-2*REM, 0)
|
||||
M.hallucination = max(0, M.hallucination - 5*REM)
|
||||
M.adjustToxLoss(-2*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1249,11 +1291,12 @@ datum
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0)
|
||||
return
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(2*REM,0)
|
||||
if(alien != IS_DIONA)
|
||||
M.heal_organ_damage(2*REM,0)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user