diff --git a/code/datums/disease.dm b/code/datums/disease.dm
index 0a4bdcec068..c3ac58455b2 100644
--- a/code/datums/disease.dm
+++ b/code/datums/disease.dm
@@ -7,7 +7,7 @@
/*
IMPORTANT NOTE: Please delete the diseases by using cure() proc or del() instruction.
-Diseases are referenced in global list, so simply setting mob or obj vars
+Diseases are referenced in a global list, so simply setting mob or obj vars
to null does not delete the object itself. Thank you.
*/
@@ -53,9 +53,9 @@ to null does not delete the object itself. Thank you.
stage++
if(stage != 1 && (prob(1) || (cure_present && prob(cure_chance))))
stage--
- else if(stage <= 1 && ((prob(1) && src.curable) || (cure_present && prob(cure_chance))))
+ else if(stage <= 1 && ((prob(1) && curable) || (cure_present && prob(cure_chance))))
// world << "Cured as stage act"
- src.cure()
+ cure()
return
return
@@ -83,7 +83,7 @@ to null does not delete the object itself. Thank you.
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
// world << "Contract_disease called by [src] with virus [virus]"
- if(src.stat >=2) return
+ if(stat >=2) return
if(force_species_check)
@@ -96,21 +96,21 @@ to null does not delete the object itself. Thank you.
if(fail) return
if(skip_this == 1)//be wary, it replaces the current disease...
- if(src.virus)
- src.virus.cure(0)
- src.virus = new virus.type
- src.virus.affected_mob = src
- src.virus.strain_data = virus.strain_data.Copy()
- src.virus.holder = src
+ if(virus)
+ virus.cure(0)
+ virus = new virus.type
+ virus.affected_mob = src
+ virus.strain_data = virus.strain_data.Copy()
+ virus.holder = src
if(prob(5))
- src.virus.carrier = 1
+ virus.carrier = 1
return
- if(src.virus) return
+ if(virus) return
- if(virus.type in src.resistances)
+ if(virus.type in resistances)
if(prob(99.9)) return
- src.resistances.Remove(virus.type)//the resistance is futile
+ resistances.Remove(virus.type)//the resistance is futile
/*
@@ -218,7 +218,7 @@ to null does not delete the object itself. Thank you.
passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod)
//world << "Mask pass [passed]"
- if(passed && virus.spread_type == AIRBORNE && src.internals)
+ if(passed && virus.spread_type == AIRBORNE && internals)
passed = (prob(50*virus.permeability_mod))
if(passed)
@@ -233,11 +233,11 @@ to null does not delete the object itself. Thank you.
if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5
if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5
- if(src.wear_mask)
+ if(wear_mask)
score += 5
- if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !src.internal)
+ if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal)
score += 5
- if(src.internal)
+ if(internal)
score += 5
if(score > 20)
return
@@ -252,33 +252,33 @@ to null does not delete the object itself. Thank you.
else if(prob(15))
return
else*/
- src.virus = new virus.type
- src.virus.strain_data = virus.strain_data.Copy()
- src.virus.affected_mob = src
- src.virus.holder = src
+ virus = new virus.type
+ virus.strain_data = virus.strain_data.Copy()
+ virus.affected_mob = src
+ virus.holder = src
if(prob(5))
- src.virus.carrier = 1
+ virus.carrier = 1
return
return
/datum/disease/proc/spread(var/source=null)
//world << "Disease [src] proc spread was called from holder [source]"
- if(src.spread_type == SPECIAL)//does not spread
+ if(spread_type == SPECIAL)//does not spread
return
- if(src.stage < src.contagious_period) //the disease is not contagious at this stage
+ if(stage < contagious_period) //the disease is not contagious at this stage
return
if(!source)//no holder specified
- if(src.affected_mob)//no mob affected holder
- source = src.affected_mob
+ if(affected_mob)//no mob affected holder
+ source = affected_mob
else //no source and no mob affected. Rogue disease. Break
return
var/check_range = AIRBORNE//defaults to airborne - range 4
- if(src.spread_type != AIRBORNE)
+ if(spread_type != AIRBORNE)
check_range = 0
for(var/mob/living/carbon/M in oviewers(check_range, source))
@@ -288,27 +288,29 @@ to null does not delete the object itself. Thank you.
/datum/disease/proc/process()
- if(!src.holder) return
+ if(!holder) return
if(prob(40))
- src.spread(holder)
- if(src.holder == src.affected_mob)
+ spread(holder)
+ if(holder == affected_mob)
if(affected_mob.stat < 2) //he's alive
- src.stage_act()
+ stage_act()
else //he's dead.
- if(src.spread_type!=SPECIAL)
- src.spread_type = CONTACT_GENERAL
- src.affected_mob = null
- if(!src.affected_mob) //the virus is in inanimate obj
-// world << "[src] longevity = [src.longevity]"
- if(--src.longevity<=0)
- src.cure(0)
+ if(spread_type!=SPECIAL)
+ spread_type = CONTACT_GENERAL
+ affected_mob = null
+ if(!affected_mob) //the virus is in inanimate obj
+// world << "[src] longevity = [longevity]"
+ if(--longevity<=0)
+ cure(0)
return
/datum/disease/proc/cure(var/resistance=1)//if resistance = 0, the mob won't develop resistance to disease
- if(resistance && src.affected_mob && !(src.type in affected_mob.resistances))
+ if(resistance && affected_mob && !(type in affected_mob.resistances))
// world << "Setting res to [src]"
- var/type = "[src.type]"//copy the value, not create the reference to it, so when the object is deleted, the value remains.
- affected_mob.resistances += text2path(type)
+ var/saved_type = "[type]"//copy the value, not create the reference to it, so when the object is deleted, the value remains.
+ affected_mob.resistances += text2path(saved_type)
+ if(istype(src, /datum/disease/alien_embryo))//Get rid of the flag.
+ affected_mob.alien_egg_flag = 0
// world << "Removing [src]"
spawn(0)
del(src)
diff --git a/code/datums/diseases/alien_embryo.dm b/code/datums/diseases/alien_embryo.dm
index e581010e772..86e5d558022 100644
--- a/code/datums/diseases/alien_embryo.dm
+++ b/code/datums/diseases/alien_embryo.dm
@@ -71,7 +71,10 @@
candidates.Add(G)
if(candidates.len)
var/mob/dead/observer/G = pick(candidates)
- G.client.mob = new/mob/living/carbon/alien/larva(affected_mob.loc)
+ var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc)
+ new_xeno.mind_initialize(G,"Larva")
+ new_xeno.key = G.key
+ del(G)
else
if(affected_mob.client)
affected_mob.client.mob = new/mob/living/carbon/alien/larva(affected_mob.loc)
diff --git a/code/datums/diseases/pierrot_throat.dm b/code/datums/diseases/pierrot_throat.dm
index 2a8ee4ac8f0..2938b2120f5 100644
--- a/code/datums/diseases/pierrot_throat.dm
+++ b/code/datums/diseases/pierrot_throat.dm
@@ -4,7 +4,7 @@
spread = "Airborne"
cure = "A whole banana."
cure_id = "banana"
- cure_chance = 5
+ cure_chance = 35
agent = "H0NI<42 Virus"
affected_species = list("Human")
permeability_mod = 0.75
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index ac81e6daf97..bd48d8fa3c9 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -97,14 +97,21 @@ datum/mind
if (cantoggle)
if(src in current_mode.traitors)
- if (special_role == "Fake Wizard")
- out += "Traitor "
- out += "Fake Wizard "
- srole = "Fake Wizard"
- else
- out += "Traitor "
- out += "Fake Wizard "
- srole = "Traitor"
+ switch(special_role)
+ if ("Fake Wizard")
+ out += "Traitor "
+ out += "[special_role]/font> "
+ srole = special_role
+ if ("Death Commando")
+ out += "[special_role] "
+ srole = special_role
+ if ("Space Ninja")
+ out += "[special_role] "
+ srole = special_role
+ else
+ out += "Traitor "
+ out += "Fake Wizard "
+ srole = "Traitor"
else
out += "Traitor "
out += "Fake Wizard "
diff --git a/code/defines/global.dm b/code/defines/global.dm
index 7f335d21b7e..96e08fbfa94 100644
--- a/code/defines/global.dm
+++ b/code/defines/global.dm
@@ -129,6 +129,7 @@ var
list/latejoin = list()
list/prisonwarp = list() //prisoners go to these
list/holdingfacility = list() //captured people go here
+ list/xeno_spawn = list()//Aliens spawn at these.
list/mazewarp = list()
list/tdome1 = list()
list/tdome2 = list()
diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm
index 2df25dc0807..2f14939d222 100644
--- a/code/defines/mob/mob.dm
+++ b/code/defines/mob/mob.dm
@@ -32,7 +32,7 @@
I'll make some notes on where certain variable defines should probably go.
Changing this around would probably require a good look-over the pre-existing code.
*/
- var/alien_egg_flag = 0
+ var/alien_egg_flag = 0//Have you been infected?
var/last_special = 0
var/obj/screen/zone_sel/zone_sel = null
@@ -52,7 +52,7 @@
var/stat = 0.0
var/next_move = null
var/prev_move = null
- var/monkeyizing = null//Human, maybe Carbon
+ var/monkeyizing = null//Carbon
var/other = 0.0
var/hand = null
var/eye_blind = null//Carbon
diff --git a/code/defines/obj/clothing/suit.dm b/code/defines/obj/clothing/suit.dm
index acc4722c5ba..8e805714a20 100644
--- a/code/defines/obj/clothing/suit.dm
+++ b/code/defines/obj/clothing/suit.dm
@@ -404,6 +404,8 @@
obj/item/weapon/cell/cell//Starts out with a high-capacity cell using New().
datum/effects/system/spark_spread/spark_system//To create sparks.
reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","radium","hyronalin")//The reagents ids which are added to the suit at New().
+ stored_research[]//For stealing station research.
+ obj/item/weapon/disk/tech_disk/t_disk//To copy design onto disk.
//Other articles of ninja gear worn together, used to easily reference them after initializing.
obj/item/clothing/head/helmet/space/space_ninja/n_hood
diff --git a/code/game/gamemodes/extra/ninja_abilities.dm b/code/game/gamemodes/extra/ninja_abilities.dm
index 83c55b92dcc..c9d2f217004 100644
--- a/code/game/gamemodes/extra/ninja_abilities.dm
+++ b/code/game/gamemodes/extra/ninja_abilities.dm
@@ -78,7 +78,7 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo
var/mob/living/carbon/human/U = affecting
var/turf/destination = get_teleport_loc(U.loc,U,9,1,3,1,0,1)
var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below.
- if(destination&&istype(mobloc, /turf))
+ if(destination&&istype(mobloc, /turf))//The turf check prevents unusual behavior. Like teleporting out of cryo pods, cloners, mechs, etc.
spawn(0)
playsound(U.loc, "sparks", 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir)
@@ -112,7 +112,7 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo
if(!ninjacost(C,1))
var/mob/living/carbon/human/U = affecting
var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below.
- if(!T.density&&istype(mobloc, /turf))
+ if((!T.density)&&istype(mobloc, /turf))
spawn(0)
playsound(U.loc, 'sparks4.ogg', 50, 1)
anim(mobloc,src,'mob.dmi',,"phaseout",,U.dir)
diff --git a/code/game/gamemodes/extra/ninja_equipment.dm b/code/game/gamemodes/extra/ninja_equipment.dm
index e294c1e3757..b7ca1f8465d 100644
--- a/code/game/gamemodes/extra/ninja_equipment.dm
+++ b/code/game/gamemodes/extra/ninja_equipment.dm
@@ -20,9 +20,12 @@ ________________________________________________________________________________
verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_instruction//for AIs
verbs += /obj/item/clothing/suit/space/space_ninja/proc/ai_holo
//verbs += /obj/item/clothing/suit/space/space_ninja/proc/display_verb_procs//DEBUG. Doesn't work.
- spark_system = new /datum/effects/system/spark_spread()//spark initialize
+ spark_system = new()//spark initialize
spark_system.set_up(5, 0, src)
spark_system.attach(src)
+ stored_research = new()//Stolen research initialize.
+ for(var/T in typesof(/datum/tech) - /datum/tech)//Store up on research.
+ stored_research += new T(src)
var/reagent_amount//reagent initialize
for(var/reagent_id in reagent_list)
reagent_amount += reagent_id == "radium" ? r_maxamount+(a_boost*a_transfer) : r_maxamount//AI can inject radium directly.
@@ -113,7 +116,7 @@ ________________________________________________________________________________
spawn while(cell.charge>=0)
//Let's check for some safeties.
- if(affecting&&affecting.monkeyizing) terminate()//Kills the suit and attached objects.
+ if(s_initialized&&!affecting) terminate()//Kills the suit and attached objects.
if(!s_initialized) return//When turned off the proc stops.
if(AI&&AI.stat==2)//If there is an AI and it's ded. Shouldn't happen without purging, could happen.
if(!s_control)
@@ -266,20 +269,20 @@ ________________________________________________________________________________
if(0)
dat += "
Available Functions:
"
dat += ""
- if(1)
+ if(3)
dat += "
Medical Report:
"
if(U.dna)
dat += "Fingerprints: [md5(U.dna.uni_identity)]
"
@@ -300,7 +303,7 @@ ________________________________________________________________________________
continue
dat += "
Inject [R.name]: [(reagents.get_reagent_amount(R.id)-(R.id=="radium"?(a_boost*a_transfer):0))/(R.id=="nutriment"?5:a_transfer)] left"
dat += ""
- if(2)
+ if(1)
dat += "
Atmospheric Scan:
"//Headers don't need breaks. They are automatically placed.
var/turf/T = get_turf_or_move(U.loc)
if (isnull(T))
@@ -329,7 +332,7 @@ ________________________________________________________________________________
dat += "OTHER: [round(unknown_level)]%
"
dat += "Temperature: [round(environment.temperature-T0C)]°C"
- if(3)
+ if(2)
if(k_unlock==7||!s_control)
dat += "
Hidden Menu"
dat += "
Anonymous Messenger:
"//Anonymous because the receiver will not know the sender's identity.
@@ -436,10 +439,10 @@ ________________________________________________________________________________
dat += "Laws:
"
if (!flush)
- dat += {"Purge AI
"}
+ dat += "Purge AI
"
else
dat += "Purge in progress...
"
- dat += {" [A.control_disabled ? "Enable" : "Disable"] Wireless Activity"}
+ dat += " [A.control_disabled ? "Enable" : "Disable"] Wireless Activity"
if(6)
dat += {"
Activate Abilities:
@@ -454,10 +457,23 @@ ________________________________________________________________________________
Adrenaline Boost
"}
+ if(7)
+ dat += "
Research Stored:
"
+ if(t_disk)
+ dat += "Eject Disk
"
+ dat += ""
+ if(stored_research.len)//If there is stored research. Should be.
+ for(var/datum/tech/current_data in stored_research)
+ dat += "- "
+ dat += "[current_data.name]: [current_data.level]"
+ if(t_disk)//If there is a disk inserted. We can either write or overwrite.
+ dat += " *Copy to Disk
"
+ dat += " "
+ dat += "
"
dat += "