Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit156
This commit is contained in:
@@ -1,35 +0,0 @@
|
||||
/datum/controller/subsystem/ticker/proc/generate_crew_objectives()
|
||||
for(var/datum/mind/crewMind in SSticker.minds)
|
||||
if(prob(5) && !issilicon(crewMind.current) && !jobban_isbanned(crewMind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in crewMind.current.client.prefs.be_special)
|
||||
generate_miscreant_objectives(crewMind)
|
||||
else
|
||||
if(CONFIG_GET(flag/allow_crew_objectives))
|
||||
generate_individual_objectives(crewMind)
|
||||
return
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/generate_individual_objectives(var/datum/mind/crewMind)
|
||||
if(!(CONFIG_GET(flag/allow_crew_objectives)))
|
||||
return
|
||||
if(!crewMind)
|
||||
return
|
||||
if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
|
||||
return
|
||||
if(!crewMind.assigned_role)
|
||||
return
|
||||
var/list/validobjs = crewobjjobs["[ckey(crewMind.assigned_role)]"]
|
||||
if(!validobjs || !validobjs.len)
|
||||
return
|
||||
var/selectedObj = pick(validobjs)
|
||||
var/datum/objective/crew/newObjective = new selectedObj
|
||||
if(!newObjective)
|
||||
return
|
||||
newObjective.owner = crewMind
|
||||
crewMind.objectives += newObjective
|
||||
to_chat(crewMind, "<B>As a part of Nanotrasen's anti-tide efforts, you have been assigned an optional objective. It will be checked at the end of the shift. <font color=red>Performing traitorous acts in pursuit of your objective may result in termination of your employment.</font></B>")
|
||||
to_chat(crewMind, "<B>Your optional objective:</B> [newObjective.explanation_text]")
|
||||
|
||||
/datum/objective/crew/
|
||||
var/jobs = ""
|
||||
explanation_text = "Yell on the development discussion channel on Citadels discord if this ever shows up. Something just broke here, dude"
|
||||
|
||||
/datum/objective/crew/proc/setup()
|
||||
@@ -1,52 +0,0 @@
|
||||
/datum/controller/subsystem/ticker/proc/generate_miscreant_objectives(var/datum/mind/crewMind)
|
||||
if(!GLOB.miscreants_allowed)
|
||||
return
|
||||
if(!crewMind)
|
||||
return
|
||||
if(!crewMind.current || !crewMind.objectives || crewMind.special_role)
|
||||
return
|
||||
if(!crewMind.assigned_role)
|
||||
return
|
||||
if(!(ROLE_MISCREANT in crewMind.current.client.prefs.be_special))
|
||||
return
|
||||
if(jobban_isbanned(crewMind, "Syndicate"))
|
||||
return
|
||||
var/list/objectiveTypes = miscreantobjlist
|
||||
if(!objectiveTypes.len)
|
||||
return
|
||||
var/selectedType = pick(objectiveTypes)
|
||||
var/datum/objective/miscreant/newObjective = new selectedType
|
||||
if(!newObjective)
|
||||
return
|
||||
newObjective.owner = crewMind
|
||||
crewMind.objectives += newObjective
|
||||
crewMind.special_role = "miscreant"
|
||||
to_chat(crewMind, "<B><font size=3 color=red>You are a Miscreant.</font></B>")
|
||||
to_chat(crewMind, "<B>Pursuing your objective is entirely optional, as the completion of your objective is unable to be tracked. Performing traitorous acts not directly related to your objective may result in permanent termination of your employment.</B>")
|
||||
to_chat(crewMind, "<B>Your objective:</B> [newObjective.explanation_text]")
|
||||
|
||||
/datum/objective/miscreant
|
||||
explanation_text = "Something broke. Horribly. Dear god, im so sorry. Yell about this in the development discussion channel of citadels discord."
|
||||
|
||||
/* Goon's Miscreant Objectives */
|
||||
|
||||
|
||||
/datum/objective/miscreant/incompetent
|
||||
explanation_text = "Be as useless and incompetent as possible without getting killed."
|
||||
|
||||
/datum/objective/miscreant/litterbug
|
||||
explanation_text = "Make a huge mess wherever you go."
|
||||
|
||||
/datum/objective/miscreant/creepy
|
||||
explanation_text = "Sneak around looking as suspicious as possible without actually doing anything illegal."
|
||||
|
||||
/datum/objective/miscreant/whiny
|
||||
explanation_text = "Complain incessantly about every minor issue you find."
|
||||
|
||||
/* Citadel's Miscreant Objectives */
|
||||
|
||||
/datum/objective/miscreant/immersions
|
||||
explanation_text = "Act as uncharacteristic as you possibly can." // corrected from "Act as out of character as you can" people thought it meant to just ooc in ic
|
||||
|
||||
/datum/objective/miscreant/cargonia
|
||||
explanation_text = "Attempt to establish independence of your department."
|
||||
@@ -1,81 +0,0 @@
|
||||
/* CARGO OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/petsplosion
|
||||
explanation_text = "Ensure there are at least (If you see this, yell on citadels discord in the development discussion channel) pets on the station by the end of the shift. Interpret this as you wish."
|
||||
jobs = "quartermaster,cargotechnician"
|
||||
|
||||
/datum/objective/crew/petsplosion/New()
|
||||
. = ..()
|
||||
target_amount = rand(10,30)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/petsplosion/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Ensure there are at least [target_amount] pets on the station by the end of the shift. Interpret this as you wish."
|
||||
|
||||
/datum/objective/crew/petsplosion/check_completion()
|
||||
var/petcount = target_amount
|
||||
for(var/mob/living/simple_animal/pet/P in GLOB.mob_list)
|
||||
if(!(P.stat == DEAD))
|
||||
if(P.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(P)])
|
||||
petcount--
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(!(H.stat == DEAD))
|
||||
if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
|
||||
if(istype(H.wear_neck, /obj/item/clothing/neck/petcollar))
|
||||
petcount--
|
||||
if(petcount <= 0)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/points //ported from old hippie
|
||||
explanation_text = "Make sure the station has at least (Something broke, report this to the development discussion channel of citadels discord) supply points at the end of the shift."
|
||||
jobs = "quartermaster,cargotechnician"
|
||||
|
||||
/datum/objective/crew/points/New()
|
||||
. = ..()
|
||||
target_amount = rand(25000,100000)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/points/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Make sure the station has at least [target_amount] supply points at the end of the shift."
|
||||
|
||||
/datum/objective/crew/points/check_completion()
|
||||
if(SSshuttle.points >= target_amount)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/bubblegum
|
||||
explanation_text = "Ensure Bubblegum is dead at the end of the shift."
|
||||
jobs = "shaftminer"
|
||||
|
||||
/datum/objective/crew/bubblegum/check_completion()
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list)
|
||||
if(!(B.stat == DEAD))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/crew/fatstacks //ported from old hippie
|
||||
explanation_text = "Have at least (something broke, report this to the development discussion channel of citadels discord) mining points on your ID at the end of the shift."
|
||||
jobs = "shaftminer"
|
||||
|
||||
/datum/objective/crew/fatstacks/New()
|
||||
. = ..()
|
||||
target_amount = rand(15000,50000)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/fatstacks/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Have at least [target_amount] mining points on your ID at the end of the shift."
|
||||
|
||||
/datum/objective/crew/fatstacks/check_completion()
|
||||
if(owner && owner.current)
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
var/obj/item/card/id/theID = H.get_idcard()
|
||||
if(istype(theID))
|
||||
if(theID.mining_points >= target_amount)
|
||||
return TRUE
|
||||
return FALSE
|
||||
-249
@@ -1,249 +0,0 @@
|
||||
/* CIVILIAN OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/druglordbot //ported from old Hippie with adjustments
|
||||
var/targetchem = "none"
|
||||
var/datum/reagent/chempath
|
||||
explanation_text = "Have at least (somethin broke here) harvested plants containing (report this on the development discussion channel of citadel's discord) when the shift ends."
|
||||
jobs = "botanist"
|
||||
|
||||
/datum/objective/crew/druglordbot/New()
|
||||
. = ..()
|
||||
target_amount = rand(3,20)
|
||||
var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
|
||||
var/drugs = typesof(/datum/reagent/drug) - blacklist
|
||||
var/meds = typesof(/datum/reagent/medicine) - blacklist
|
||||
var/chemlist = drugs + meds
|
||||
chempath = pick(chemlist)
|
||||
targetchem = initial(chempath.id)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/druglordbot/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Have at least [target_amount] harvested plants containing [initial(chempath.name)] when the shift ends."
|
||||
|
||||
/datum/objective/crew/druglordbot/check_completion()
|
||||
var/pillcount = target_amount
|
||||
if(owner && owner.current)
|
||||
if(owner.current.contents)
|
||||
for(var/obj/item/reagent_containers/food/snacks/grown/P in owner.current.get_contents())
|
||||
if(P.reagents.has_reagent(targetchem))
|
||||
pillcount--
|
||||
if(pillcount <= 0)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/foodhoard
|
||||
var/datum/crafting_recipe/food/targetfood
|
||||
var/obj/item/reagent_containers/food/foodpath
|
||||
explanation_text = "Personally deliver at least (yo something broke) (report this to the developer discussion channel in citadels discord)s to Centcom."
|
||||
jobs = "cook"
|
||||
|
||||
/datum/objective/crew/foodhoard/New()
|
||||
. = ..()
|
||||
target_amount = rand(2,10)
|
||||
var/blacklist = list(/datum/crafting_recipe/food, /datum/crafting_recipe/food/cak)
|
||||
var/possiblefoods = typesof(/datum/crafting_recipe/food) - blacklist
|
||||
targetfood = pick(possiblefoods)
|
||||
foodpath = initial(targetfood.result)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/foodhoard/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Personally deliver at least [target_amount] [initial(foodpath.name)]s to Centcom."
|
||||
|
||||
/datum/objective/crew/foodhoard/check_completion()
|
||||
if(owner && owner.current && owner.current.check_contents_for(foodpath) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/responsibility
|
||||
explanation_text = "Make sure nobody dies with alcohol poisoning."
|
||||
jobs = "bartender"
|
||||
|
||||
/datum/objective/crew/responsibility/check_completion()
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(H.stat == DEAD && H.drunkenness >= 80)
|
||||
if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/crew/clean //ported from old Hippie
|
||||
var/list/areas = list()
|
||||
var/hardmode = FALSE
|
||||
explanation_text = "Ensure sure that (Yo, something broke. Yell about this in citadels devlopmeent discussion channel.) remain spotless at the end of the shift."
|
||||
jobs = "janitor"
|
||||
|
||||
/datum/objective/crew/clean/New()
|
||||
. = ..()
|
||||
if(prob(1))
|
||||
hardmode = TRUE
|
||||
var/list/blacklistnormal = list(typesof(/area/space) - typesof(/area/lavaland) - typesof(/area/mine) - typesof(/area/ai_monitored/turret_protected) - typesof(/area/tcommsat))
|
||||
var/list/blacklisthard = list(typesof(/area/lavaland) - typesof(/area/mine))
|
||||
var/list/possibleareas = list()
|
||||
if(hardmode)
|
||||
possibleareas = GLOB.teleportlocs - /area - blacklisthard
|
||||
else
|
||||
possibleareas = GLOB.teleportlocs - /area - blacklistnormal
|
||||
for(var/i in 1 to rand(1,6))
|
||||
areas |= pick_n_take(possibleareas)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/clean/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Ensure that the"
|
||||
for(var/i in 1 to areas.len)
|
||||
var/area/A = areas[i]
|
||||
explanation_text += " [A]"
|
||||
if(i != areas.len && areas.len >= 3)
|
||||
explanation_text += ","
|
||||
if(i == areas.len - 1)
|
||||
explanation_text += "and"
|
||||
explanation_text += " [(areas.len ==1) ? "is completely" : "are [(areas.len == 2) ? "completely" : "all"]"] clean at the end of the shift."
|
||||
if(hardmode)
|
||||
explanation_text += " Chop-chop."
|
||||
|
||||
/datum/objective/crew/clean/check_completion()
|
||||
for(var/area/A in areas)
|
||||
for(var/obj/effect/decal/cleanable/C in area_contents(A))
|
||||
if(C && C.alpha >= 150)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/crew/slipster //ported from old Hippie with adjustments
|
||||
explanation_text = "Slip at least (Yell on citadel's development discussion channel if you see this) different people with your PDA, and have it on you at the end of the shift."
|
||||
jobs = "clown"
|
||||
|
||||
/datum/objective/crew/slipster/New()
|
||||
. = ..()
|
||||
target_amount = rand(5, 20)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/slipster/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Slip at least [target_amount] different people with your PDA, and have it on you at the end of the shift."
|
||||
|
||||
/datum/objective/crew/slipster/check_completion()
|
||||
var/list/uniqueslips = list()
|
||||
if(owner && owner.current)
|
||||
for(var/obj/item/pda/clown/PDA in owner.current.get_contents())
|
||||
for(var/mob/living/carbon/human/H in PDA.slipvictims)
|
||||
uniqueslips |= H
|
||||
if(uniqueslips.len >= target_amount)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/vow //ported from old Hippie
|
||||
explanation_text = "Never break your vow of silence."
|
||||
jobs = "mime"
|
||||
|
||||
/datum/objective/crew/vow/check_completion()
|
||||
if(owner && owner.current)
|
||||
var/list/say_log = owner.current.logging[INDIVIDUAL_SAY_LOG]
|
||||
if(say_log.len > 0)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/crew/nullrod
|
||||
explanation_text = "Don't lose your holy rod."
|
||||
jobs = "chaplain"
|
||||
|
||||
/datum/objective/crew/nullrod/check_completion()
|
||||
if(owner && owner.current)
|
||||
for(var/nullrodtypes in typesof(/obj/item/nullrod))
|
||||
if(owner.current.check_contents_for(nullrodtypes))
|
||||
return TRUE
|
||||
if(owner.current.getorgan(/obj/item/organ/genital/penis))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/reporter //ported from old hippie
|
||||
var/charcount = 100
|
||||
explanation_text = "Publish at least (Yo something broke) articles containing at least (Report this to Citadels development channel) characters."
|
||||
jobs = "curator"
|
||||
|
||||
/datum/objective/crew/reporter/New()
|
||||
. = ..()
|
||||
target_amount = rand(2,10)
|
||||
charcount = rand(20,250)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/reporter/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Publish at least [target_amount] articles containing at least [charcount] characters."
|
||||
|
||||
/datum/objective/crew/reporter/check_completion()
|
||||
if(owner && owner.current)
|
||||
var/ownername = "[ckey(owner.current.real_name)][ckey(owner.assigned_role)]"
|
||||
for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels)
|
||||
for(var/datum/newscaster/feed_message/msg in chan.messages)
|
||||
if(ckey(msg.returnAuthor()) == ckey(ownername))
|
||||
if(length(msg.returnBody()) >= charcount)
|
||||
target_amount--
|
||||
if(target_amount <= 0)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/pwrgame //ported from Goon with adjustments
|
||||
var/obj/item/clothing/targettidegarb
|
||||
explanation_text = "Get your grubby hands on a (Dear god something broke. Report this to Citadel's development dicussion channel)."
|
||||
jobs = "assistant"
|
||||
|
||||
/datum/objective/crew/pwrgame/New()
|
||||
. = ..()
|
||||
var/list/muhvalids = list(/obj/item/clothing/mask/gas, /obj/item/clothing/head/welding, /obj/item/clothing/head/ushanka, /obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas/owl_mask)
|
||||
if(prob(10))
|
||||
muhvalids += list(/obj/item/clothing/suit/space)
|
||||
targettidegarb = pick(muhvalids)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/pwrgame/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Get your grubby hands on a [initial(targettidegarb.name)]."
|
||||
/* DM is not a sane language in any way, shape, or form. If anyone wants to try to get this bit functioning proper, I hold no responsibility for broken keyboards.
|
||||
if(owner && owner.current)
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
if(H && H.dna && H.dna.species && H.dna.species.id)
|
||||
explanation_text = "Get your "
|
||||
if(H.dna.species.id == "avian")
|
||||
explanation_text += "scratchy claws "
|
||||
else if(H.dna.species.id == "mammal")
|
||||
explanation_text += "dirty paws "
|
||||
else if(H.dna.species.id == "aquatic")
|
||||
explanation_text += "fishy hands "
|
||||
else if(H.dna.species.id == "xeno")
|
||||
explanation_text += "weird claws "
|
||||
else if(H.dna.species.id == "guilmon")
|
||||
explanation_text += "digital claws "
|
||||
else if(H.dna.species.id == "lizard")
|
||||
explanation_text += "slimy claws "
|
||||
else if(H.dna.species.id == "datashark")
|
||||
explanation_text += "glitchy hands "
|
||||
else if(H.dna.species.id == "insect")
|
||||
explanation_text += "gross grabbers "
|
||||
else
|
||||
explanation_text += "grubby hands "
|
||||
explanation_text += "on a space suit." replace this if you're making this monstrosity work */
|
||||
|
||||
/datum/objective/crew/pwrgame/check_completion()
|
||||
if(owner && owner.current)
|
||||
for(var/tidegarbtypes in typesof(targettidegarb))
|
||||
if(owner.current.check_contents_for(tidegarbtypes))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/promotion //ported from Goon
|
||||
explanation_text = "Have a non-assistant ID registered to you at the end of the shift."
|
||||
jobs = "assistant"
|
||||
|
||||
/datum/objective/crew/promotion/check_completion()
|
||||
if(owner && owner.current)
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
var/obj/item/card/id/theID = H.get_idcard()
|
||||
if(istype(theID))
|
||||
if(!(H.get_assignment() == "Assistant") && !(H.get_assignment() == "No id") && !(H.get_assignment() == "No job"))
|
||||
return TRUE
|
||||
return FALSE
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
/* COMMAND OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/caphat //Ported from Goon
|
||||
explanation_text = "Don't lose your hat."
|
||||
jobs = "captain"
|
||||
|
||||
/datum/objective/crew/caphat/check_completion()
|
||||
if(owner && owner.current && owner.current.check_contents_for(/obj/item/clothing/head/caphat))
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/datfukkendisk //Ported from old Hippie
|
||||
explanation_text = "Defend the nuclear authentication disk at all costs, and be the one to personally deliver it to Centcom."
|
||||
jobs = "captain" //give this to other heads at your own risk.
|
||||
|
||||
/datum/objective/crew/datfukkendisk/check_completion()
|
||||
if(owner && owner.current && owner.current.check_contents_for(/obj/item/disk/nuclear) && SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/ian //Ported from old Hippie
|
||||
explanation_text = "Defend Ian at all costs, and ensure he gets delivered to Centcom at the end of the shift."
|
||||
jobs = "headofpersonnel"
|
||||
|
||||
/datum/objective/crew/ian/check_completion()
|
||||
if(owner && owner.current)
|
||||
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/goodboy in GLOB.mob_list)
|
||||
if(goodboy.stat != DEAD && SSshuttle.emergency.shuttle_areas[get_area(goodboy)])
|
||||
return TRUE
|
||||
return FALSE
|
||||
return FALSE
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
/* ENGINEERING OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/integrity //ported from old Hippie
|
||||
explanation_text = "Ensure the station's integrity rating is at least (Yo something broke, yell on the development discussion channel of citadels discord about this)% when the shift ends."
|
||||
jobs = "chiefengineer,stationengineer"
|
||||
|
||||
/datum/objective/crew/integrity/New()
|
||||
. = ..()
|
||||
target_amount = rand(60,95)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/integrity/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Ensure the station's integrity rating is at least [target_amount]% when the shift ends."
|
||||
|
||||
/datum/objective/crew/integrity/check_completion()
|
||||
var/datum/station_state/end_state = new /datum/station_state()
|
||||
end_state.count()
|
||||
var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100)
|
||||
if(!SSticker.mode.station_was_nuked && station_integrity >= target_amount)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/poly
|
||||
explanation_text = "Make sure Poly keeps his headset, and stays alive until the end of the shift."
|
||||
jobs = "chiefengineer"
|
||||
|
||||
/datum/objective/crew/poly/check_completion()
|
||||
for(var/mob/living/simple_animal/parrot/Poly/dumbbird in GLOB.mob_list)
|
||||
if(!(dumbbird.stat == DEAD) && dumbbird.ears)
|
||||
if(istype(dumbbird.ears, /obj/item/radio/headset))
|
||||
return TRUE
|
||||
return FALSE
|
||||
-86
@@ -1,86 +0,0 @@
|
||||
/* MEDICAL OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/morgue //Ported from old Hippie
|
||||
explanation_text = "Ensure there are no corpses on the station outside of the morgue when the shift ends."
|
||||
jobs = "chiefmedicalofficer,geneticist,medicaldoctor"
|
||||
|
||||
/datum/objective/crew/morgue/check_completion()
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(H.stat == DEAD && H.z == SSmapping.station_start)
|
||||
if(get_area(H) != /area/medical/morgue)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/crew/chems //Ported from old Hippie
|
||||
var/targetchem = "none"
|
||||
var/datum/reagent/chempath
|
||||
explanation_text = "Have (yell about this in the development discussion channel of citadel's discord, something broke) in your bloodstream when the shift ends."
|
||||
jobs = "chiefmedicalofficer,chemist"
|
||||
|
||||
/datum/objective/crew/chems/New()
|
||||
. = ..()
|
||||
var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol, /datum/reagent/medicine, /datum/reagent/medicine/adminordrazine, /datum/reagent/medicine/adminordrazine/nanites, /datum/reagent/medicine/mine_salve, /datum/reagent/medicine/omnizine, /datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/earthsblood, /datum/reagent/medicine/strange_reagent, /datum/reagent/medicine/miningnanites, /datum/reagent/medicine/changelingadrenaline, /datum/reagent/medicine/changelinghaste)
|
||||
var/drugs = typesof(/datum/reagent/drug) - blacklist
|
||||
var/meds = typesof(/datum/reagent/medicine) - blacklist
|
||||
var/chemlist = drugs + meds
|
||||
chempath = pick(chemlist)
|
||||
targetchem = initial(chempath.id)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/chems/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Have [initial(chempath.name)] in your bloodstream when the shift ends."
|
||||
|
||||
/datum/objective/crew/chems/check_completion()
|
||||
if(owner.current)
|
||||
if(!owner.current.stat == DEAD && owner.current.reagents)
|
||||
if(owner.current.reagents.has_reagent(targetchem))
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/druglordchem //ported from old Hippie with adjustments
|
||||
var/targetchem = "none"
|
||||
var/datum/reagent/chempath
|
||||
var/chemamount = 0
|
||||
explanation_text = "Have at least (somethin broke here) pills containing at least (like really broke) units of(report this on the development discussion channel of citadel's discord) when the shift ends."
|
||||
jobs = "chemist"
|
||||
|
||||
/datum/objective/crew/druglordchem/New()
|
||||
. = ..()
|
||||
target_amount = rand(5,50)
|
||||
chemamount = rand(1,20)
|
||||
var/blacklist = list(/datum/reagent/drug, /datum/reagent/drug/nicotine, /datum/reagent/drug/menthol)
|
||||
var/drugs = typesof(/datum/reagent/drug) - blacklist
|
||||
var/chemlist = drugs
|
||||
chempath = pick(chemlist)
|
||||
targetchem = initial(chempath.id)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/druglordchem/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Have at least [target_amount] pills containing at least [chemamount] units of [initial(chempath.name)] when the shift ends."
|
||||
|
||||
/datum/objective/crew/druglordchem/check_completion()
|
||||
var/pillcount = target_amount
|
||||
if(owner.current)
|
||||
if(owner.current.contents)
|
||||
for(var/obj/item/reagent_containers/pill/P in owner.current.get_contents())
|
||||
if(P.reagents.has_reagent(targetchem, chemamount))
|
||||
pillcount--
|
||||
if(pillcount <= 0)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/noinfections
|
||||
explanation_text = "Make sure there are no crew members with harmful diseases at the end of the shift."
|
||||
jobs = "virologist"
|
||||
|
||||
/datum/objective/crew/noinfections/check_completion()
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(!H.stat == DEAD)
|
||||
if(H.z == SSmapping.station_start || SSshuttle.emergency.shuttle_areas[get_area(H)])
|
||||
if(H.check_virus() == 2)
|
||||
return FALSE
|
||||
return TRUE
|
||||
-45
@@ -1,45 +0,0 @@
|
||||
/* SCIENCE OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/cyborgs //Ported from old Hippie
|
||||
explanation_text = "Ensure there are at least (Yo something broke here, yell on citadel's development discussion channel about this) functioning cyborgs when the shift ends."
|
||||
jobs = "researchdirector,roboticist"
|
||||
|
||||
/datum/objective/crew/cyborgs/New()
|
||||
. = ..()
|
||||
target_amount = rand(3,10)
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/cyborgs/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Ensure there are at least [target_amount] functioning cyborgs when the shift ends."
|
||||
|
||||
/datum/objective/crew/cyborgs/check_completion()
|
||||
var/borgcount = target_amount
|
||||
for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list)
|
||||
if(!(R.stat == DEAD))
|
||||
borgcount--
|
||||
if(borgcount <= 0)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/research //inspired by old hippie's research level objective. should hopefully be compatible with techwebs when that gets finished. hopefully. should be easy to update in the event that it is incompatible with techwebs.
|
||||
var/datum/design/targetdesign
|
||||
explanation_text = "Make sure the research required to produce a (something broke, yell on citadel's development discussion channel about this) is available on the R&D server by the end of the shift."
|
||||
jobs = "researchdirector,scientist"
|
||||
|
||||
/datum/objective/crew/research/New()
|
||||
. = ..()
|
||||
targetdesign = pick(subtypesof(/datum/design))
|
||||
update_explanation_text()
|
||||
|
||||
/datum/objective/crew/research/update_explanation_text()
|
||||
. = ..()
|
||||
explanation_text = "Make sure the research required to produce a [initial(targetdesign.name)] is available on the R&D server by the end of the shift."
|
||||
|
||||
/datum/objective/crew/research/check_completion()
|
||||
for(var/obj/machinery/rnd/server/S in GLOB.machines)
|
||||
if(S && S.stored_research)
|
||||
if(S.stored_research.researched_designs[initial(targetdesign.id)])
|
||||
return TRUE
|
||||
return FALSE
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
/* SECURITY OBJECTIVES */
|
||||
|
||||
/datum/objective/crew/enjoyyourstay
|
||||
explanation_text = "Enforce Space Law to the best of your ability."
|
||||
jobs = "headofsecurity,securityofficer,warden,detective"
|
||||
|
||||
/datum/objective/crew/enjoyyourstay/check_completion()
|
||||
if(owner && owner.current)
|
||||
if(owner.current.stat != DEAD)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/objective/crew/justicecrew
|
||||
explanation_text = "Ensure there are no innocent crew members in the brig when the shift ends."
|
||||
jobs = "lawyer"
|
||||
|
||||
/datum/objective/crew/justicecrew/check_completion()
|
||||
if(owner && owner.current)
|
||||
for(var/datum/mind/M in SSticker.minds)
|
||||
if(M.current && isliving(M.current))
|
||||
if(!M.special_role && !(M.assigned_role == "Security Officer") && !(M.assigned_role == "Detective") && !(M.assigned_role == "Head of Security") && !(M.assigned_role == "Lawyer") && !(M.assigned_role == "Warden") && get_area(M.current) != typesof(/area/security))
|
||||
return FALSE
|
||||
return TRUE
|
||||
@@ -1,28 +0,0 @@
|
||||
//supply packs
|
||||
|
||||
/datum/supply_pack/misc/kinkmate
|
||||
name = "Kinkmate construction kit"
|
||||
cost = 2000
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate)
|
||||
crate_name = "Kinkmate construction kit"
|
||||
|
||||
|
||||
//Food and livestocks
|
||||
|
||||
/datum/supply_pack/organic/critter/kiwi
|
||||
name = "Space kiwi Crate"
|
||||
cost = 2000
|
||||
contains = list( /mob/living/simple_animal/kiwi)
|
||||
crate_name = "space kiwi crate"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Miscellaneous ///////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/supply_pack/misc/jukebox
|
||||
name = "Jukebox"
|
||||
cost = 35000
|
||||
contains = list(/obj/machinery/jukebox)
|
||||
crate_name = "Jukebox"
|
||||
@@ -447,4 +447,8 @@ datum/gear/darksabresheath
|
||||
path = /obj/item/clothing/head/blueberet
|
||||
ckeywhitelist = list("foxystalin")
|
||||
|
||||
|
||||
/datum/gear/donorgoggles
|
||||
name = "Flight Goggles"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/glasses/flight
|
||||
ckeywhitelist = list("maxlynchy")
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
icon_state = "hostrench"
|
||||
item_state = "hostrench"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
body_parts_covered = CHEST|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/david
|
||||
name = "red cloak"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/datum/crafting_recipe/toyneb
|
||||
name = "Non-Euplastic Blade"
|
||||
reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
|
||||
result = /obj/item/toy/sword/cx
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/potatos
|
||||
name = "Potat-OS"
|
||||
reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
|
||||
result = /obj/item/aicard/potato
|
||||
category = CAT_ROBOT
|
||||
@@ -447,6 +447,7 @@
|
||||
item_state = "kimono"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/suit/commjacket
|
||||
@@ -456,6 +457,7 @@
|
||||
item_state = "commjacket"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/under/mw2_russian_para
|
||||
@@ -491,3 +493,10 @@
|
||||
item_state = "blueberet"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
|
||||
/obj/item/clothing/glasses/flight
|
||||
name = "flight goggles"
|
||||
desc = "Old style flight goggles with a leather cap attached."
|
||||
icon_state = "flight-g"
|
||||
item_state = "flight-g"
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
|
||||
@@ -1,3 +1,29 @@
|
||||
/obj/item/reagent_containers/food/snacks/carpmeat/aquatic
|
||||
name = "fillet"
|
||||
desc = "A fillet of one of the local water dwelling species."
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
icon = 'modular_citadel/icons/obj/foods.dmi'
|
||||
icon_state = "ipcmeat"
|
||||
desc = "Gross robot meat."
|
||||
filling_color = "#000000"
|
||||
tastes = list("metal" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
|
||||
desc = "Tastes like chicken, that's... not what it is!"
|
||||
icon = 'modular_citadel/icons/obj/foods.dmi'
|
||||
icon_state = "mothmeat"
|
||||
filling_color = "#BF896B"
|
||||
tastes = list("insects" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian
|
||||
desc = "Tastes like chicken, that's because it is!"
|
||||
icon = 'modular_citadel/icons/obj/foods.dmi'
|
||||
icon_state = "birdmeat"
|
||||
filling_color = "#BF896B"
|
||||
tastes = list("chicken" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
|
||||
desc = "Tastes sweet... reminds you vaguely of chicken."
|
||||
filling_color = "#6B8E23"
|
||||
tastes = list("brains" = 1, "meat" = 1)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
/obj/machinery/computer/shuttle/mining
|
||||
req_access = list(ACCESS_MINING)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,6 @@
|
||||
/mob/living/carbon/human/species/mammal
|
||||
race = /datum/species/mammal
|
||||
|
||||
/mob/living/carbon/human/species/avian
|
||||
race = /datum/species/avian
|
||||
|
||||
/mob/living/carbon/human/species/aquatic
|
||||
race = /datum/species/aquatic
|
||||
|
||||
/mob/living/carbon/human/species/insect
|
||||
race = /datum/species/insect
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/mob/living/carbon/human/Life(seconds, times_fired)
|
||||
//citadel code
|
||||
if(stat != DEAD)
|
||||
handle_arousal(times_fired)
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
|
||||
if(ismob(loc))
|
||||
return ONE_ATMOSPHERE
|
||||
if(istype(loc, /obj/item/dogborg/sleeper))
|
||||
return ONE_ATMOSPHERE
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/human/update_health_hud(shown_health_amount)
|
||||
. = ..()
|
||||
if(!client || !hud_used)
|
||||
return
|
||||
if(hud_used.staminas)
|
||||
hud_used.staminas.icon_state = staminahudamount()
|
||||
if(hud_used.staminabuffer)
|
||||
hud_used.staminabuffer.icon_state = staminabufferhudamount()
|
||||
@@ -1,166 +0,0 @@
|
||||
/datum/species
|
||||
var/should_draw_citadel = FALSE
|
||||
|
||||
/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
|
||||
if(!istype(M))
|
||||
return TRUE
|
||||
CHECK_DNA_AND_SPECIES(M)
|
||||
CHECK_DNA_AND_SPECIES(H)
|
||||
|
||||
if(!istype(M)) //sanity check for drones.
|
||||
return TRUE
|
||||
if(M.mind)
|
||||
attacker_style = M.mind.martial_art
|
||||
if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
|
||||
log_combat(M, H, "attempted to touch")
|
||||
H.visible_message("<span class='warning'>[M] attempted to touch [H]!</span>")
|
||||
return TRUE
|
||||
switch(M.a_intent)
|
||||
if(INTENT_HELP)
|
||||
if(M == H)
|
||||
althelp(M, H, attacker_style)
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(INTENT_DISARM)
|
||||
altdisarm(M, H, attacker_style)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
if(user == target && istype(user))
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")
|
||||
return
|
||||
if(!user.resting)
|
||||
to_chat(user, "<span class='notice'>You can only force yourself up if you're on the ground.</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] forces [p_them()]self up to [p_their()] feet!</span>", "<span class='notice'>You force yourself up to your feet!</span>")
|
||||
user.resting = 0
|
||||
user.update_canmove()
|
||||
user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting
|
||||
playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
|
||||
/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted.</span>")
|
||||
return FALSE
|
||||
if(target.check_block())
|
||||
target.visible_message("<span class='warning'>[target] blocks [user]'s shoving attempt!</span>")
|
||||
return FALSE
|
||||
if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return TRUE
|
||||
if(user.resting)
|
||||
return FALSE
|
||||
else
|
||||
if(user == target)
|
||||
return
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
|
||||
user.adjustStaminaLossBuffered(4)
|
||||
playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
|
||||
|
||||
if(target.w_uniform)
|
||||
target.w_uniform.add_fingerprint(user)
|
||||
SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
|
||||
|
||||
if(!target.resting)
|
||||
target.adjustStaminaLoss(5)
|
||||
|
||||
|
||||
var/turf/target_oldturf = target.loc
|
||||
var/shove_dir = get_dir(user.loc, target_oldturf)
|
||||
var/turf/target_shove_turf = get_step(target.loc, shove_dir)
|
||||
var/mob/living/carbon/human/target_collateral_human
|
||||
var/obj/structure/table/target_table
|
||||
var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied
|
||||
|
||||
//Thank you based whoneedsspace
|
||||
target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents
|
||||
if(target_collateral_human)
|
||||
shove_blocked = TRUE
|
||||
else
|
||||
target.Move(target_shove_turf, shove_dir)
|
||||
if(get_turf(target) == target_oldturf)
|
||||
if(target_shove_turf.density)
|
||||
shove_blocked = TRUE
|
||||
else
|
||||
var/thoushallnotpass = FALSE
|
||||
for(var/obj/O in target_shove_turf)
|
||||
if(istype(O, /obj/structure/table))
|
||||
target_table = O
|
||||
else if(!O.CanPass(src, target_shove_turf))
|
||||
shove_blocked = TRUE
|
||||
thoushallnotpass = TRUE
|
||||
if(thoushallnotpass)
|
||||
target_table = null
|
||||
|
||||
if(target.is_shove_knockdown_blocked())
|
||||
return
|
||||
|
||||
if(shove_blocked || target_table)
|
||||
var/directional_blocked = FALSE
|
||||
if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that
|
||||
var/target_turf = get_turf(target)
|
||||
for(var/obj/O in target_turf)
|
||||
if(O.flags_1 & ON_BORDER_1 && O.dir == shove_dir && O.density)
|
||||
directional_blocked = TRUE
|
||||
break
|
||||
if(target_turf != target_shove_turf) //Make sure that we don't run the exact same check twice on the same tile
|
||||
for(var/obj/O in target_shove_turf)
|
||||
if(O.flags_1 & ON_BORDER_1 && O.dir == turn(shove_dir, 180) && O.density)
|
||||
directional_blocked = TRUE
|
||||
break
|
||||
var/targetatrest = target.resting
|
||||
if(((!target_table && !target_collateral_human) || directional_blocked) && !targetatrest)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_SOLID)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name], knocking them down!</span>",
|
||||
"<span class='danger'>You shove [target.name], knocking them down!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, target, "shoved", "knocking them down")
|
||||
else if(target_table)
|
||||
if(!targetatrest)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_TABLE)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name] onto \the [target_table]!</span>",
|
||||
"<span class='danger'>You shove [target.name] onto \the [target_table]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
target.forceMove(target_shove_turf)
|
||||
log_combat(user, target, "shoved", "onto [target_table]")
|
||||
else if(target_collateral_human && !targetatrest)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_HUMAN)
|
||||
if(!target_collateral_human.resting)
|
||||
target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name] into [target_collateral_human.name]!</span>",
|
||||
"<span class='danger'>You shove [target.name] into [target_collateral_human.name]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
log_combat(user, target, "shoved", "into [target_collateral_human.name]")
|
||||
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name]!</span>",
|
||||
"<span class='danger'>You shove [target.name]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
var/target_held_item = target.get_active_held_item()
|
||||
var/knocked_item = FALSE
|
||||
if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
|
||||
target_held_item = null
|
||||
if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID))
|
||||
target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
|
||||
if(target_held_item)
|
||||
target.visible_message("<span class='danger'>[target.name]'s grip on \the [target_held_item] loosens!</span>",
|
||||
"<span class='danger'>Your grip on \the [target_held_item] loosens!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
|
||||
else if(target_held_item)
|
||||
target.dropItemToGround(target_held_item)
|
||||
knocked_item = TRUE
|
||||
target.visible_message("<span class='danger'>[target.name] drops \the [target_held_item]!!</span>",
|
||||
"<span class='danger'>You drop \the [target_held_item]!!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
var/append_message = ""
|
||||
if(target_held_item)
|
||||
if(knocked_item)
|
||||
append_message = "causing them to drop [target_held_item]"
|
||||
else
|
||||
append_message = "loosening their grip on [target_held_item]"
|
||||
log_combat(user, target, "shoved", append_message)
|
||||
|
||||
|
||||
////////////////////
|
||||
/////BODYPARTS/////
|
||||
////////////////////
|
||||
|
||||
|
||||
/obj/item/bodypart
|
||||
var/should_draw_citadel = FALSE
|
||||
@@ -1,237 +0,0 @@
|
||||
/datum/species/mammal
|
||||
name = "Mammal"
|
||||
id = "mammal"
|
||||
default_color = "4B4B4B"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur", "legs")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs")
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
|
||||
liked_food = MEAT | FRIED
|
||||
disliked_food = TOXIC
|
||||
|
||||
//Curiosity killed the cat's wagging tail.
|
||||
/datum/species/mammal/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/mammal/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/mammal/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/mammal/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/mammal/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/mammal/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/species/mammal/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
|
||||
//AVIAN//
|
||||
/datum/species/avian
|
||||
name = "Avian"
|
||||
id = "avian"
|
||||
say_mod = "chirps"
|
||||
default_color = "BCAC9B"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("mam_snouts", "wings", "taur", "mam_tail", "mam_body_markings", "taur")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Beak", "mam_body_markings" = "Hawk", "wings" = "None", "taur" = "None", "mam_tail" = "Hawk")
|
||||
attack_verb = "peck"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
|
||||
/datum/species/avian/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/avian/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/avian/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/avian/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/avian/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/avian/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/avian/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
//AQUATIC//
|
||||
/datum/species/aquatic
|
||||
name = "Aquatic"
|
||||
id = "aquatic"
|
||||
default_color = "BCAC9B"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears","mam_body_markings", "taur", "legs", "mam_snouts")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "Shark", "mam_ears" = "None", "mam_body_markings" = "Shark", "mam_snouts" = "Round", "taur" = "None", "legs" = "Normal Legs")
|
||||
attack_verb = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
liked_food = MEAT
|
||||
disliked_food = TOXIC
|
||||
meat = /obj/item/reagent_containers/food/snacks/carpmeat/aquatic
|
||||
|
||||
/datum/species/aquatic/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/aquatic/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/aquatic/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/aquatic/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/aquatic/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/aquatic/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/aquatic/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
//INSECT//
|
||||
/datum/species/insect
|
||||
name = "Insect"
|
||||
id = "insect"
|
||||
default_color = "BCAC9B"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
|
||||
mutant_bodyparts = list("mam_ears", "mam_body_markings", "mam_tail", "taur", "moth_wings", "mam_snouts")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "moth_wings" = "Plain", "mam_snouts" = "Bug", "mam_body_markings" = "Moth", "taur" = "None")
|
||||
attack_verb = "flutter" //wat?
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
|
||||
/datum/species/insect/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/insect/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/insect/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/insect/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/insect/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/insect/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/insect/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
//Alien//
|
||||
/datum/species/xeno
|
||||
// A cloning mistake, crossing human and xenomorph DNA
|
||||
name = "Xeno Hybrid"
|
||||
id = "xeno"
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
should_draw_citadel = TRUE
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
|
||||
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
|
||||
default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade Legs")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/xeno
|
||||
exotic_bloodtype = "L"
|
||||
damage_overlay_type = "xeno"
|
||||
liked_food = MEAT
|
||||
|
||||
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
. = ..()
|
||||
|
||||
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
|
||||
species_traits -= DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
. = ..()
|
||||
|
||||
//Praise the Omnissiah, A challange worthy of my skills - HS
|
||||
|
||||
//EXOTIC//
|
||||
//These races will likely include lots of downsides and upsides. Keep them relatively balanced.//
|
||||
|
||||
//misc
|
||||
/mob/living/carbon/human/dummy
|
||||
no_vore = TRUE
|
||||
|
||||
/mob/living/carbon/human/vore
|
||||
devourable = TRUE
|
||||
digestable = TRUE
|
||||
feeding = TRUE
|
||||
@@ -1,43 +0,0 @@
|
||||
/datum/species/ipc
|
||||
name = "IPC"
|
||||
id = "ipc"
|
||||
say_mod = "beeps"
|
||||
default_color = "00FF00"
|
||||
should_draw_citadel = TRUE
|
||||
blacklisted = 0
|
||||
sexes = 0
|
||||
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
mutant_bodyparts = list("ipc_screen", "ipc_antenna")
|
||||
default_features = list("ipc_screen" = "Blank", "ipc_antenna" = "None")
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
|
||||
mutanttongue = /obj/item/organ/tongue/robot/ipc
|
||||
|
||||
exotic_blood = "oil"
|
||||
|
||||
var/datum/action/innate/monitor_change/screen
|
||||
|
||||
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
|
||||
if(isipcperson(C) && !screen)
|
||||
screen = new
|
||||
screen.Grant(C)
|
||||
..()
|
||||
|
||||
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
|
||||
if(screen)
|
||||
screen.Remove(C)
|
||||
..()
|
||||
|
||||
/datum/action/innate/monitor_change
|
||||
name = "Screen Change"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
icon_icon = 'icons/mob/actions/actions_silicon.dmi'
|
||||
button_icon_state = "drone_vision"
|
||||
|
||||
/datum/action/innate/monitor_change/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/new_ipc_screen = input(usr, "Choose your character's screen:", "Monitor Display") as null|anything in GLOB.ipc_screens_list
|
||||
if(!new_ipc_screen)
|
||||
return
|
||||
H.dna.features["ipc_screen"] = new_ipc_screen
|
||||
H.update_body()
|
||||
@@ -1,245 +0,0 @@
|
||||
/datum/species/jelly/slime
|
||||
name = "Xenobiological Slimeperson"
|
||||
|
||||
//##########SLIMEPEOPLE##########
|
||||
|
||||
/datum/species/jelly/roundstartslime
|
||||
name = "Slimeperson"
|
||||
id = "slimeperson"
|
||||
limbs_id = "slime"
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "taur")
|
||||
default_features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "Plain", "mam_snouts" = "None", "taur" = "None")
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 160 //a notch brighter so it blends better.
|
||||
coldmod = 3
|
||||
heatmod = 1
|
||||
burnmod = 1
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
|
||||
/datum/species/jelly/roundstartslime/spec_stun(mob/living/carbon/human/H,amount)
|
||||
if(H)
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
/datum/species/jelly/roundstartslime/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/jelly/roundstartslime/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/jelly/roundstartslime/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/action/innate/slime_change
|
||||
name = "Alter Form"
|
||||
check_flags = AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "alter_form" //placeholder
|
||||
icon_icon = 'modular_citadel/icons/mob/actions/actions_slime.dmi'
|
||||
background_icon_state = "bg_alien"
|
||||
|
||||
/datum/action/innate/slime_change/Activate()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!isjellyperson(H))
|
||||
return
|
||||
else
|
||||
H.visible_message("<span class='notice'>[owner] gains a look of \
|
||||
concentration while standing perfectly still.\
|
||||
Their body seems to shift and starts getting more goo-like.</span>",
|
||||
"<span class='notice'>You focus intently on altering your body while \
|
||||
standing perfectly still...</span>")
|
||||
change_form()
|
||||
|
||||
/datum/action/innate/slime_change/proc/change_form()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Snout", "Markings", "Ears", "Taur body", "Penis", "Vagina", "Penis Length", "Breast Size", "Breast Shape", "Cancel")
|
||||
if(select_alteration == "Hair Style")
|
||||
if(H.gender == MALE)
|
||||
var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list
|
||||
if(new_style)
|
||||
H.facial_hair_style = new_style
|
||||
else
|
||||
H.facial_hair_style = "Shaved"
|
||||
//handle normal hair
|
||||
var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list
|
||||
if(new_style)
|
||||
H.hair_style = new_style
|
||||
H.update_hair()
|
||||
else if (select_alteration == "Genitals")
|
||||
var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel")
|
||||
switch(operation)
|
||||
if("add sexual organ")
|
||||
var/new_organ = input("Select sexual organ:", "Organ Manipulation") as null|anything in GLOB.genitals_list
|
||||
if(!new_organ)
|
||||
return
|
||||
H.give_genital(GLOB.genitals_list[new_organ])
|
||||
|
||||
if("remove sexual organ")
|
||||
var/list/organs = list()
|
||||
for(var/obj/item/organ/genital/X in H.internal_organs)
|
||||
var/obj/item/organ/I = X
|
||||
organs["[I.name] ([I.type])"] = I
|
||||
var/obj/item/O = input("Select sexual organ:", "Organ Manipulation", null) as null|anything in organs
|
||||
var/obj/item/organ/genital/G = organs[O]
|
||||
if(!G)
|
||||
return
|
||||
G.forceMove(get_turf(H))
|
||||
qdel(G)
|
||||
H.update_genitals()
|
||||
|
||||
else if (select_alteration == "Ears")
|
||||
var/list/snowflake_ears_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_ears_list)
|
||||
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_ears_list[S.name] = path
|
||||
var/new_ears
|
||||
new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in snowflake_ears_list
|
||||
if(new_ears)
|
||||
H.dna.features["mam_ears"] = new_ears
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Snout")
|
||||
var/list/snowflake_snouts_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_snouts_list)
|
||||
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_snouts_list[S.name] = path
|
||||
var/new_snout
|
||||
new_snout = input(owner, "Choose your character's face:", "Face Alteration") as null|anything in snowflake_snouts_list
|
||||
if(new_snout)
|
||||
H.dna.features["mam_snouts"] = new_snout
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Markings")
|
||||
var/list/snowflake_markings_list = list()
|
||||
for(var/path in GLOB.mam_body_markings_list)
|
||||
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_markings_list[S.name] = path
|
||||
var/new_mam_body_markings
|
||||
new_mam_body_markings = input(H, "Choose your character's body markings:", "Marking Alteration") as null|anything in snowflake_markings_list
|
||||
if(new_mam_body_markings)
|
||||
H.dna.features["mam_body_markings"] = new_mam_body_markings
|
||||
if(new_mam_body_markings == "None")
|
||||
H.dna.features["mam_body_markings"] = "Plain"
|
||||
for(var/X in H.bodyparts) //propagates the markings changes
|
||||
var/obj/item/bodypart/BP = X
|
||||
BP.update_limb(FALSE, H)
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Tail")
|
||||
var/list/snowflake_tails_list = list("Normal" = null)
|
||||
for(var/path in GLOB.mam_tails_list)
|
||||
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_tails_list[S.name] = path
|
||||
var/new_tail
|
||||
new_tail = input(owner, "Choose your character's Tail(s):", "Tail Alteration") as null|anything in snowflake_tails_list
|
||||
if(new_tail)
|
||||
H.dna.features["mam_tail"] = new_tail
|
||||
if(new_tail != "None")
|
||||
H.dna.features["taur"] = "None"
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Taur body")
|
||||
var/list/snowflake_taur_list = list("Normal" = null)
|
||||
for(var/path in GLOB.taur_list)
|
||||
var/datum/sprite_accessory/taur/instance = GLOB.taur_list[path]
|
||||
if(istype(instance, /datum/sprite_accessory))
|
||||
var/datum/sprite_accessory/S = instance
|
||||
if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(H.client.ckey)))
|
||||
snowflake_taur_list[S.name] = path
|
||||
var/new_taur
|
||||
new_taur = input(owner, "Choose your character's tauric body:", "Tauric Alteration") as null|anything in snowflake_taur_list
|
||||
if(new_taur)
|
||||
H.dna.features["taur"] = new_taur
|
||||
if(new_taur != "None")
|
||||
H.dna.features["mam_tail"] = "None"
|
||||
H.update_body()
|
||||
|
||||
else if (select_alteration == "Penis")
|
||||
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Choose your character's dong", "Genital Alteration") as null|anything in GLOB.cock_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["cock_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.give_genital(/obj/item/organ/genital/testicles)
|
||||
H.give_genital(/obj/item/organ/genital/penis)
|
||||
H.apply_overlay()
|
||||
|
||||
|
||||
else if (select_alteration == "Vagina")
|
||||
for(var/obj/item/organ/genital/vagina/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Choose your character's pussy", "Genital Alteration") as null|anything in GLOB.vagina_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["vag_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.give_genital(/obj/item/organ/genital/womb)
|
||||
H.give_genital(/obj/item/organ/genital/vagina)
|
||||
H.apply_overlay()
|
||||
|
||||
else if (select_alteration == "Penis Length")
|
||||
for(var/obj/item/organ/genital/penis/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_length
|
||||
new_length = input(owner, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Genital Alteration") as num|null
|
||||
if(new_length)
|
||||
H.dna.features["cock_length"] = max(min( round(text2num(new_length)), COCK_SIZE_MAX),COCK_SIZE_MIN)
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_genital(/obj/item/organ/genital/testicles)
|
||||
H.give_genital(/obj/item/organ/genital/penis)
|
||||
|
||||
else if (select_alteration == "Breast Size")
|
||||
for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_size
|
||||
new_size = input(owner, "Breast Size", "Genital Alteration") as null|anything in GLOB.breasts_size_list
|
||||
if(new_size)
|
||||
H.dna.features["breasts_size"] = new_size
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_genital(/obj/item/organ/genital/breasts)
|
||||
|
||||
else if (select_alteration == "Breast Shape")
|
||||
for(var/obj/item/organ/genital/breasts/X in H.internal_organs)
|
||||
qdel(X)
|
||||
var/new_shape
|
||||
new_shape = input(owner, "Breast Shape", "Genital Alteration") as null|anything in GLOB.breasts_shapes_list
|
||||
if(new_shape)
|
||||
H.dna.features["breasts_shape"] = new_shape
|
||||
H.update_genitals()
|
||||
H.apply_overlay()
|
||||
H.give_genital(/obj/item/organ/genital/breasts)
|
||||
|
||||
else
|
||||
return
|
||||
@@ -0,0 +1,633 @@
|
||||
// List is required to compile the resources into the game when it loads.
|
||||
// Dynamically loading it has bad results with sounds overtaking each other, even with the wait variable.
|
||||
#ifdef AI_VOX
|
||||
|
||||
GLOBAL_LIST_INIT(vox_sounds_male, list("," = 'modular_citadel/sound/vox/_comma.ogg',
|
||||
"." = 'modular_citadel/sound/vox/_period.ogg',
|
||||
"a" = 'modular_citadel/sound/vox/a.ogg',
|
||||
"accelerating" = 'modular_citadel/sound/vox/accelerating.ogg',
|
||||
"accelerator" = 'modular_citadel/sound/vox/accelerator.ogg',
|
||||
"accepted" = 'modular_citadel/sound/vox/accepted.ogg',
|
||||
"access" = 'modular_citadel/sound/vox/access.ogg',
|
||||
"acknowledge" = 'modular_citadel/sound/vox/acknowledge.ogg',
|
||||
"acknowledged" = 'modular_citadel/sound/vox/acknowledged.ogg',
|
||||
"acquired" = 'modular_citadel/sound/vox/acquired.ogg',
|
||||
"acquisition" = 'modular_citadel/sound/vox/acquisition.ogg',
|
||||
"across" = 'modular_citadel/sound/vox/across.ogg',
|
||||
"activate" = 'modular_citadel/sound/vox/activate.ogg',
|
||||
"activated" = 'modular_citadel/sound/vox/activated.ogg',
|
||||
"activity" = 'modular_citadel/sound/vox/activity.ogg',
|
||||
"adios" = 'modular_citadel/sound/vox/adios.ogg',
|
||||
"administration" = 'modular_citadel/sound/vox/administration.ogg',
|
||||
"advanced" = 'modular_citadel/sound/vox/advanced.ogg',
|
||||
"after" = 'modular_citadel/sound/vox/after.ogg',
|
||||
"agent" = 'modular_citadel/sound/vox/agent.ogg',
|
||||
"alarm" = 'modular_citadel/sound/vox/alarm.ogg',
|
||||
"alert" = 'modular_citadel/sound/vox/alert.ogg',
|
||||
"alien" = 'modular_citadel/sound/vox/alien.ogg',
|
||||
"aligned" = 'modular_citadel/sound/vox/aligned.ogg',
|
||||
"all" = 'modular_citadel/sound/vox/all.ogg',
|
||||
"alpha" = 'modular_citadel/sound/vox/alpha.ogg',
|
||||
"am" = 'modular_citadel/sound/vox/am.ogg',
|
||||
"amigo" = 'modular_citadel/sound/vox/amigo.ogg',
|
||||
"ammunition" = 'modular_citadel/sound/vox/ammunition.ogg',
|
||||
"an" = 'modular_citadel/sound/vox/an.ogg',
|
||||
"and" = 'modular_citadel/sound/vox/and.ogg',
|
||||
"announcement" = 'modular_citadel/sound/vox/announcement.ogg',
|
||||
"anomalous" = 'modular_citadel/sound/vox/anomalous.ogg',
|
||||
"antenna" = 'modular_citadel/sound/vox/antenna.ogg',
|
||||
"any" = 'modular_citadel/sound/vox/any.ogg',
|
||||
"apprehend" = 'modular_citadel/sound/vox/apprehend.ogg',
|
||||
"approach" = 'modular_citadel/sound/vox/approach.ogg',
|
||||
"are" = 'modular_citadel/sound/vox/are.ogg',
|
||||
"area" = 'modular_citadel/sound/vox/area.ogg',
|
||||
"arm" = 'modular_citadel/sound/vox/arm.ogg',
|
||||
"armed" = 'modular_citadel/sound/vox/armed.ogg',
|
||||
"armor" = 'modular_citadel/sound/vox/armor.ogg',
|
||||
"armory" = 'modular_citadel/sound/vox/armory.ogg',
|
||||
"arrest" = 'modular_citadel/sound/vox/arrest.ogg',
|
||||
"ass" = 'modular_citadel/sound/vox/ass.ogg',
|
||||
"at" = 'modular_citadel/sound/vox/at.ogg',
|
||||
"atomic" = 'modular_citadel/sound/vox/atomic.ogg',
|
||||
"attention" = 'modular_citadel/sound/vox/attention.ogg',
|
||||
"authorize" = 'modular_citadel/sound/vox/authorize.ogg',
|
||||
"authorized" = 'modular_citadel/sound/vox/authorized.ogg',
|
||||
"automatic" = 'modular_citadel/sound/vox/automatic.ogg',
|
||||
"away" = 'modular_citadel/sound/vox/away.ogg',
|
||||
"b" = 'modular_citadel/sound/vox/b.ogg',
|
||||
"back" = 'modular_citadel/sound/vox/back.ogg',
|
||||
"backman" = 'modular_citadel/sound/vox/backman.ogg',
|
||||
"bad" = 'modular_citadel/sound/vox/bad.ogg',
|
||||
"bag" = 'modular_citadel/sound/vox/bag.ogg',
|
||||
"bailey" = 'modular_citadel/sound/vox/bailey.ogg',
|
||||
"barracks" = 'modular_citadel/sound/vox/barracks.ogg',
|
||||
"base" = 'modular_citadel/sound/vox/base.ogg',
|
||||
"bay" = 'modular_citadel/sound/vox/bay.ogg',
|
||||
"be" = 'modular_citadel/sound/vox/be.ogg',
|
||||
"been" = 'modular_citadel/sound/vox/been.ogg',
|
||||
"before" = 'modular_citadel/sound/vox/before.ogg',
|
||||
"beyond" = 'modular_citadel/sound/vox/beyond.ogg',
|
||||
"biohazard" = 'modular_citadel/sound/vox/biohazard.ogg',
|
||||
"biological" = 'modular_citadel/sound/vox/biological.ogg',
|
||||
"birdwell" = 'modular_citadel/sound/vox/birdwell.ogg',
|
||||
"bizwarn" = 'modular_citadel/sound/vox/bizwarn.ogg',
|
||||
"black" = 'modular_citadel/sound/vox/black.ogg',
|
||||
"blast" = 'modular_citadel/sound/vox/blast.ogg',
|
||||
"blocked" = 'modular_citadel/sound/vox/blocked.ogg',
|
||||
"bloop" = 'modular_citadel/sound/vox/bloop.ogg',
|
||||
"blue" = 'modular_citadel/sound/vox/blue.ogg',
|
||||
"bottom" = 'modular_citadel/sound/vox/bottom.ogg',
|
||||
"bravo" = 'modular_citadel/sound/vox/bravo.ogg',
|
||||
"breach" = 'modular_citadel/sound/vox/breach.ogg',
|
||||
"breached" = 'modular_citadel/sound/vox/breached.ogg',
|
||||
"break" = 'modular_citadel/sound/vox/break.ogg',
|
||||
"bridge" = 'modular_citadel/sound/vox/bridge.ogg',
|
||||
"bust" = 'modular_citadel/sound/vox/bust.ogg',
|
||||
"but" = 'modular_citadel/sound/vox/but.ogg',
|
||||
"button" = 'modular_citadel/sound/vox/button.ogg',
|
||||
"buzwarn" = 'modular_citadel/sound/vox/buzwarn.ogg',
|
||||
"bypass" = 'modular_citadel/sound/vox/bypass.ogg',
|
||||
"c" = 'modular_citadel/sound/vox/c.ogg',
|
||||
"cable" = 'modular_citadel/sound/vox/cable.ogg',
|
||||
"call" = 'modular_citadel/sound/vox/call.ogg',
|
||||
"called" = 'modular_citadel/sound/vox/called.ogg',
|
||||
"canal" = 'modular_citadel/sound/vox/canal.ogg',
|
||||
"cap" = 'modular_citadel/sound/vox/cap.ogg',
|
||||
"captain" = 'modular_citadel/sound/vox/captain.ogg',
|
||||
"capture" = 'modular_citadel/sound/vox/capture.ogg',
|
||||
"captured" = 'modular_citadel/sound/vox/captured.ogg',
|
||||
"ceiling" = 'modular_citadel/sound/vox/ceiling.ogg',
|
||||
"celsius" = 'modular_citadel/sound/vox/celsius.ogg',
|
||||
"center" = 'modular_citadel/sound/vox/center.ogg',
|
||||
"centi" = 'modular_citadel/sound/vox/centi.ogg',
|
||||
"central" = 'modular_citadel/sound/vox/central.ogg',
|
||||
"chamber" = 'modular_citadel/sound/vox/chamber.ogg',
|
||||
"charlie" = 'modular_citadel/sound/vox/charlie.ogg',
|
||||
"check" = 'modular_citadel/sound/vox/check.ogg',
|
||||
"checkpoint" = 'modular_citadel/sound/vox/checkpoint.ogg',
|
||||
"chemical" = 'modular_citadel/sound/vox/chemical.ogg',
|
||||
"cleanup" = 'modular_citadel/sound/vox/cleanup.ogg',
|
||||
"clear" = 'modular_citadel/sound/vox/clear.ogg',
|
||||
"clearance" = 'modular_citadel/sound/vox/clearance.ogg',
|
||||
"close" = 'modular_citadel/sound/vox/close.ogg',
|
||||
"clown" = 'modular_citadel/sound/vox/clown.ogg',
|
||||
"code" = 'modular_citadel/sound/vox/code.ogg',
|
||||
"coded" = 'modular_citadel/sound/vox/coded.ogg',
|
||||
"collider" = 'modular_citadel/sound/vox/collider.ogg',
|
||||
"command" = 'modular_citadel/sound/vox/command.ogg',
|
||||
"communication" = 'modular_citadel/sound/vox/communication.ogg',
|
||||
"complex" = 'modular_citadel/sound/vox/complex.ogg',
|
||||
"computer" = 'modular_citadel/sound/vox/computer.ogg',
|
||||
"condition" = 'modular_citadel/sound/vox/condition.ogg',
|
||||
"containment" = 'modular_citadel/sound/vox/containment.ogg',
|
||||
"contamination" = 'modular_citadel/sound/vox/contamination.ogg',
|
||||
"control" = 'modular_citadel/sound/vox/control.ogg',
|
||||
"coolant" = 'modular_citadel/sound/vox/coolant.ogg',
|
||||
"coomer" = 'modular_citadel/sound/vox/coomer.ogg',
|
||||
"core" = 'modular_citadel/sound/vox/core.ogg',
|
||||
"correct" = 'modular_citadel/sound/vox/correct.ogg',
|
||||
"corridor" = 'modular_citadel/sound/vox/corridor.ogg',
|
||||
"crew" = 'modular_citadel/sound/vox/crew.ogg',
|
||||
"cross" = 'modular_citadel/sound/vox/cross.ogg',
|
||||
"cryogenic" = 'modular_citadel/sound/vox/cryogenic.ogg',
|
||||
"d" = 'modular_citadel/sound/vox/d.ogg',
|
||||
"dadeda" = 'modular_citadel/sound/vox/dadeda.ogg',
|
||||
"damage" = 'modular_citadel/sound/vox/damage.ogg',
|
||||
"damaged" = 'modular_citadel/sound/vox/damaged.ogg',
|
||||
"danger" = 'modular_citadel/sound/vox/danger.ogg',
|
||||
"day" = 'modular_citadel/sound/vox/day.ogg',
|
||||
"deactivated" = 'modular_citadel/sound/vox/deactivated.ogg',
|
||||
"decompression" = 'modular_citadel/sound/vox/decompression.ogg',
|
||||
"decontamination" = 'modular_citadel/sound/vox/decontamination.ogg',
|
||||
"deeoo" = 'modular_citadel/sound/vox/deeoo.ogg',
|
||||
"defense" = 'modular_citadel/sound/vox/defense.ogg',
|
||||
"degrees" = 'modular_citadel/sound/vox/degrees.ogg',
|
||||
"delta" = 'modular_citadel/sound/vox/delta.ogg',
|
||||
"denied" = 'modular_citadel/sound/vox/denied.ogg',
|
||||
"deploy" = 'modular_citadel/sound/vox/deploy.ogg',
|
||||
"deployed" = 'modular_citadel/sound/vox/deployed.ogg',
|
||||
"destroy" = 'modular_citadel/sound/vox/destroy.ogg',
|
||||
"destroyed" = 'modular_citadel/sound/vox/destroyed.ogg',
|
||||
"detain" = 'modular_citadel/sound/vox/detain.ogg',
|
||||
"detected" = 'modular_citadel/sound/vox/detected.ogg',
|
||||
"detonation" = 'modular_citadel/sound/vox/detonation.ogg',
|
||||
"device" = 'modular_citadel/sound/vox/device.ogg',
|
||||
"did" = 'modular_citadel/sound/vox/did.ogg',
|
||||
"die" = 'modular_citadel/sound/vox/die.ogg',
|
||||
"dimensional" = 'modular_citadel/sound/vox/dimensional.ogg',
|
||||
"dirt" = 'modular_citadel/sound/vox/dirt.ogg',
|
||||
"disengaged" = 'modular_citadel/sound/vox/disengaged.ogg',
|
||||
"dish" = 'modular_citadel/sound/vox/dish.ogg',
|
||||
"disposal" = 'modular_citadel/sound/vox/disposal.ogg',
|
||||
"distance" = 'modular_citadel/sound/vox/distance.ogg',
|
||||
"distortion" = 'modular_citadel/sound/vox/distortion.ogg',
|
||||
"do" = 'modular_citadel/sound/vox/do.ogg',
|
||||
"doctor" = 'modular_citadel/sound/vox/doctor.ogg',
|
||||
"doop" = 'modular_citadel/sound/vox/doop.ogg',
|
||||
"door" = 'modular_citadel/sound/vox/door.ogg',
|
||||
"down" = 'modular_citadel/sound/vox/down.ogg',
|
||||
"dual" = 'modular_citadel/sound/vox/dual.ogg',
|
||||
"duct" = 'modular_citadel/sound/vox/duct.ogg',
|
||||
"e" = 'modular_citadel/sound/vox/e.ogg',
|
||||
"east" = 'modular_citadel/sound/vox/east.ogg',
|
||||
"echo" = 'modular_citadel/sound/vox/echo.ogg',
|
||||
"ed" = 'modular_citadel/sound/vox/ed.ogg',
|
||||
"effect" = 'modular_citadel/sound/vox/effect.ogg',
|
||||
"egress" = 'modular_citadel/sound/vox/egress.ogg',
|
||||
"eight" = 'modular_citadel/sound/vox/eight.ogg',
|
||||
"eighteen" = 'modular_citadel/sound/vox/eighteen.ogg',
|
||||
"eighty" = 'modular_citadel/sound/vox/eighty.ogg',
|
||||
"electric" = 'modular_citadel/sound/vox/electric.ogg',
|
||||
"electromagnetic" = 'modular_citadel/sound/vox/electromagnetic.ogg',
|
||||
"elevator" = 'modular_citadel/sound/vox/elevator.ogg',
|
||||
"eleven" = 'modular_citadel/sound/vox/eleven.ogg',
|
||||
"eliminate" = 'modular_citadel/sound/vox/eliminate.ogg',
|
||||
"emergency" = 'modular_citadel/sound/vox/emergency.ogg',
|
||||
"enemy" = 'modular_citadel/sound/vox/enemy.ogg',
|
||||
"energy" = 'modular_citadel/sound/vox/energy.ogg',
|
||||
"engage" = 'modular_citadel/sound/vox/engage.ogg',
|
||||
"engaged" = 'modular_citadel/sound/vox/engaged.ogg',
|
||||
"engine" = 'modular_citadel/sound/vox/engine.ogg',
|
||||
"enter" = 'modular_citadel/sound/vox/enter.ogg',
|
||||
"entry" = 'modular_citadel/sound/vox/entry.ogg',
|
||||
"environment" = 'modular_citadel/sound/vox/environment.ogg',
|
||||
"error" = 'modular_citadel/sound/vox/error.ogg',
|
||||
"escape" = 'modular_citadel/sound/vox/escape.ogg',
|
||||
"evacuate" = 'modular_citadel/sound/vox/evacuate.ogg',
|
||||
"exchange" = 'modular_citadel/sound/vox/exchange.ogg',
|
||||
"exit" = 'modular_citadel/sound/vox/exit.ogg',
|
||||
"expect" = 'modular_citadel/sound/vox/expect.ogg',
|
||||
"experiment" = 'modular_citadel/sound/vox/experiment.ogg',
|
||||
"experimental" = 'modular_citadel/sound/vox/experimental.ogg',
|
||||
"explode" = 'modular_citadel/sound/vox/explode.ogg',
|
||||
"explosion" = 'modular_citadel/sound/vox/explosion.ogg',
|
||||
"exposure" = 'modular_citadel/sound/vox/exposure.ogg',
|
||||
"exterminate" = 'modular_citadel/sound/vox/exterminate.ogg',
|
||||
"extinguish" = 'modular_citadel/sound/vox/extinguish.ogg',
|
||||
"extinguisher" = 'modular_citadel/sound/vox/extinguisher.ogg',
|
||||
"extreme" = 'modular_citadel/sound/vox/extreme.ogg',
|
||||
"f" = 'modular_citadel/sound/vox/f.ogg',
|
||||
"face" = 'modular_citadel/sound/vox/face.ogg',
|
||||
"facility" = 'modular_citadel/sound/vox/facility.ogg',
|
||||
"fahrenheit" = 'modular_citadel/sound/vox/fahrenheit.ogg',
|
||||
"failed" = 'modular_citadel/sound/vox/failed.ogg',
|
||||
"failure" = 'modular_citadel/sound/vox/failure.ogg',
|
||||
"farthest" = 'modular_citadel/sound/vox/farthest.ogg',
|
||||
"fast" = 'modular_citadel/sound/vox/fast.ogg',
|
||||
"feet" = 'modular_citadel/sound/vox/feet.ogg',
|
||||
"field" = 'modular_citadel/sound/vox/field.ogg',
|
||||
"fifteen" = 'modular_citadel/sound/vox/fifteen.ogg',
|
||||
"fifth" = 'modular_citadel/sound/vox/fifth.ogg',
|
||||
"fifty" = 'modular_citadel/sound/vox/fifty.ogg',
|
||||
"final" = 'modular_citadel/sound/vox/final.ogg',
|
||||
"fine" = 'modular_citadel/sound/vox/fine.ogg',
|
||||
"fire" = 'modular_citadel/sound/vox/fire.ogg',
|
||||
"first" = 'modular_citadel/sound/vox/first.ogg',
|
||||
"five" = 'modular_citadel/sound/vox/five.ogg',
|
||||
"flag" = 'modular_citadel/sound/vox/flag.ogg',
|
||||
"flooding" = 'modular_citadel/sound/vox/flooding.ogg',
|
||||
"floor" = 'modular_citadel/sound/vox/floor.ogg',
|
||||
"fool" = 'modular_citadel/sound/vox/fool.ogg',
|
||||
"for" = 'modular_citadel/sound/vox/for.ogg',
|
||||
"forbidden" = 'modular_citadel/sound/vox/forbidden.ogg',
|
||||
"force" = 'modular_citadel/sound/vox/force.ogg',
|
||||
"forms" = 'modular_citadel/sound/vox/forms.ogg',
|
||||
"found" = 'modular_citadel/sound/vox/found.ogg',
|
||||
"four" = 'modular_citadel/sound/vox/four.ogg',
|
||||
"fourteen" = 'modular_citadel/sound/vox/fourteen.ogg',
|
||||
"fourth" = 'modular_citadel/sound/vox/fourth.ogg',
|
||||
"fourty" = 'modular_citadel/sound/vox/fourty.ogg',
|
||||
"foxtrot" = 'modular_citadel/sound/vox/foxtrot.ogg',
|
||||
"freeman" = 'modular_citadel/sound/vox/freeman.ogg',
|
||||
"freezer" = 'modular_citadel/sound/vox/freezer.ogg',
|
||||
"from" = 'modular_citadel/sound/vox/from.ogg',
|
||||
"front" = 'modular_citadel/sound/vox/front.ogg',
|
||||
"fuel" = 'modular_citadel/sound/vox/fuel.ogg',
|
||||
"g" = 'modular_citadel/sound/vox/g.ogg',
|
||||
"gay" = 'modular_citadel/sound/vox/gay.ogg',
|
||||
"get" = 'modular_citadel/sound/vox/get.ogg',
|
||||
"go" = 'modular_citadel/sound/vox/go.ogg',
|
||||
"going" = 'modular_citadel/sound/vox/going.ogg',
|
||||
"good" = 'modular_citadel/sound/vox/good.ogg',
|
||||
"goodbye" = 'modular_citadel/sound/vox/goodbye.ogg',
|
||||
"gordon" = 'modular_citadel/sound/vox/gordon.ogg',
|
||||
"got" = 'modular_citadel/sound/vox/got.ogg',
|
||||
"government" = 'modular_citadel/sound/vox/government.ogg',
|
||||
"granted" = 'modular_citadel/sound/vox/granted.ogg',
|
||||
"great" = 'modular_citadel/sound/vox/great.ogg',
|
||||
"green" = 'modular_citadel/sound/vox/green.ogg',
|
||||
"grenade" = 'modular_citadel/sound/vox/grenade.ogg',
|
||||
"guard" = 'modular_citadel/sound/vox/guard.ogg',
|
||||
"gulf" = 'modular_citadel/sound/vox/gulf.ogg',
|
||||
"gun" = 'modular_citadel/sound/vox/gun.ogg',
|
||||
"guthrie" = 'modular_citadel/sound/vox/guthrie.ogg',
|
||||
"handling" = 'modular_citadel/sound/vox/handling.ogg',
|
||||
"hangar" = 'modular_citadel/sound/vox/hangar.ogg',
|
||||
"has" = 'modular_citadel/sound/vox/has.ogg',
|
||||
"have" = 'modular_citadel/sound/vox/have.ogg',
|
||||
"hazard" = 'modular_citadel/sound/vox/hazard.ogg',
|
||||
"head" = 'modular_citadel/sound/vox/head.ogg',
|
||||
"health" = 'modular_citadel/sound/vox/health.ogg',
|
||||
"heat" = 'modular_citadel/sound/vox/heat.ogg',
|
||||
"helicopter" = 'modular_citadel/sound/vox/helicopter.ogg',
|
||||
"helium" = 'modular_citadel/sound/vox/helium.ogg',
|
||||
"hello" = 'modular_citadel/sound/vox/hello.ogg',
|
||||
"help" = 'modular_citadel/sound/vox/help.ogg',
|
||||
"here" = 'modular_citadel/sound/vox/here.ogg',
|
||||
"hide" = 'modular_citadel/sound/vox/hide.ogg',
|
||||
"high" = 'modular_citadel/sound/vox/high.ogg',
|
||||
"highest" = 'modular_citadel/sound/vox/highest.ogg',
|
||||
"hit" = 'modular_citadel/sound/vox/hit.ogg',
|
||||
"holds" = 'modular_citadel/sound/vox/holds.ogg',
|
||||
"hole" = 'modular_citadel/sound/vox/hole.ogg',
|
||||
"hostile" = 'modular_citadel/sound/vox/hostile.ogg',
|
||||
"hot" = 'modular_citadel/sound/vox/hot.ogg',
|
||||
"hotel" = 'modular_citadel/sound/vox/hotel.ogg',
|
||||
"hour" = 'modular_citadel/sound/vox/hour.ogg',
|
||||
"hours" = 'modular_citadel/sound/vox/hours.ogg',
|
||||
"hundred" = 'modular_citadel/sound/vox/hundred.ogg',
|
||||
"hydro" = 'modular_citadel/sound/vox/hydro.ogg',
|
||||
"i" = 'modular_citadel/sound/vox/i.ogg',
|
||||
"idiot" = 'modular_citadel/sound/vox/idiot.ogg',
|
||||
"illegal" = 'modular_citadel/sound/vox/illegal.ogg',
|
||||
"immediate" = 'modular_citadel/sound/vox/immediate.ogg',
|
||||
"immediately" = 'modular_citadel/sound/vox/immediately.ogg',
|
||||
"in" = 'modular_citadel/sound/vox/in.ogg',
|
||||
"inches" = 'modular_citadel/sound/vox/inches.ogg',
|
||||
"india" = 'modular_citadel/sound/vox/india.ogg',
|
||||
"ing" = 'modular_citadel/sound/vox/ing.ogg',
|
||||
"inoperative" = 'modular_citadel/sound/vox/inoperative.ogg',
|
||||
"inside" = 'modular_citadel/sound/vox/inside.ogg',
|
||||
"inspection" = 'modular_citadel/sound/vox/inspection.ogg',
|
||||
"inspector" = 'modular_citadel/sound/vox/inspector.ogg',
|
||||
"interchange" = 'modular_citadel/sound/vox/interchange.ogg',
|
||||
"intruder" = 'modular_citadel/sound/vox/intruder.ogg',
|
||||
"invallid" = 'modular_citadel/sound/vox/invallid.ogg',
|
||||
"invasion" = 'modular_citadel/sound/vox/invasion.ogg',
|
||||
"is" = 'modular_citadel/sound/vox/is.ogg',
|
||||
"it" = 'modular_citadel/sound/vox/it.ogg',
|
||||
"johnson" = 'modular_citadel/sound/vox/johnson.ogg',
|
||||
"juliet" = 'modular_citadel/sound/vox/juliet.ogg',
|
||||
"key" = 'modular_citadel/sound/vox/key.ogg',
|
||||
"kill" = 'modular_citadel/sound/vox/kill.ogg',
|
||||
"kilo" = 'modular_citadel/sound/vox/kilo.ogg',
|
||||
"kit" = 'modular_citadel/sound/vox/kit.ogg',
|
||||
"lab" = 'modular_citadel/sound/vox/lab.ogg',
|
||||
"lambda" = 'modular_citadel/sound/vox/lambda.ogg',
|
||||
"laser" = 'modular_citadel/sound/vox/laser.ogg',
|
||||
"last" = 'modular_citadel/sound/vox/last.ogg',
|
||||
"launch" = 'modular_citadel/sound/vox/launch.ogg',
|
||||
"leak" = 'modular_citadel/sound/vox/leak.ogg',
|
||||
"leave" = 'modular_citadel/sound/vox/leave.ogg',
|
||||
"left" = 'modular_citadel/sound/vox/left.ogg',
|
||||
"legal" = 'modular_citadel/sound/vox/legal.ogg',
|
||||
"level" = 'modular_citadel/sound/vox/level.ogg',
|
||||
"lever" = 'modular_citadel/sound/vox/lever.ogg',
|
||||
"lie" = 'modular_citadel/sound/vox/lie.ogg',
|
||||
"lieutenant" = 'modular_citadel/sound/vox/lieutenant.ogg',
|
||||
"life" = 'modular_citadel/sound/vox/life.ogg',
|
||||
"light" = 'modular_citadel/sound/vox/light.ogg',
|
||||
"lima" = 'modular_citadel/sound/vox/lima.ogg',
|
||||
"liquid" = 'modular_citadel/sound/vox/liquid.ogg',
|
||||
"loading" = 'modular_citadel/sound/vox/loading.ogg',
|
||||
"locate" = 'modular_citadel/sound/vox/locate.ogg',
|
||||
"located" = 'modular_citadel/sound/vox/located.ogg',
|
||||
"location" = 'modular_citadel/sound/vox/location.ogg',
|
||||
"lock" = 'modular_citadel/sound/vox/lock.ogg',
|
||||
"locked" = 'modular_citadel/sound/vox/locked.ogg',
|
||||
"locker" = 'modular_citadel/sound/vox/locker.ogg',
|
||||
"lockout" = 'modular_citadel/sound/vox/lockout.ogg',
|
||||
"lower" = 'modular_citadel/sound/vox/lower.ogg',
|
||||
"lowest" = 'modular_citadel/sound/vox/lowest.ogg',
|
||||
"magnetic" = 'modular_citadel/sound/vox/magnetic.ogg',
|
||||
"main" = 'modular_citadel/sound/vox/main.ogg',
|
||||
"maintenance" = 'modular_citadel/sound/vox/maintenance.ogg',
|
||||
"malfunction" = 'modular_citadel/sound/vox/malfunction.ogg',
|
||||
"man" = 'modular_citadel/sound/vox/man.ogg',
|
||||
"mass" = 'modular_citadel/sound/vox/mass.ogg',
|
||||
"materials" = 'modular_citadel/sound/vox/materials.ogg',
|
||||
"maximum" = 'modular_citadel/sound/vox/maximum.ogg',
|
||||
"may" = 'modular_citadel/sound/vox/may.ogg',
|
||||
"med" = 'modular_citadel/sound/vox/med.ogg',
|
||||
"medical" = 'modular_citadel/sound/vox/medical.ogg',
|
||||
"men" = 'modular_citadel/sound/vox/men.ogg',
|
||||
"mercy" = 'modular_citadel/sound/vox/mercy.ogg',
|
||||
"mesa" = 'modular_citadel/sound/vox/mesa.ogg',
|
||||
"message" = 'modular_citadel/sound/vox/message.ogg',
|
||||
"meter" = 'modular_citadel/sound/vox/meter.ogg',
|
||||
"micro" = 'modular_citadel/sound/vox/micro.ogg',
|
||||
"middle" = 'modular_citadel/sound/vox/middle.ogg',
|
||||
"mike" = 'modular_citadel/sound/vox/mike.ogg',
|
||||
"miles" = 'modular_citadel/sound/vox/miles.ogg',
|
||||
"military" = 'modular_citadel/sound/vox/military.ogg',
|
||||
"milli" = 'modular_citadel/sound/vox/milli.ogg',
|
||||
"million" = 'modular_citadel/sound/vox/million.ogg',
|
||||
"minefield" = 'modular_citadel/sound/vox/minefield.ogg',
|
||||
"minimum" = 'modular_citadel/sound/vox/minimum.ogg',
|
||||
"minutes" = 'modular_citadel/sound/vox/minutes.ogg',
|
||||
"mister" = 'modular_citadel/sound/vox/mister.ogg',
|
||||
"mode" = 'modular_citadel/sound/vox/mode.ogg',
|
||||
"motor" = 'modular_citadel/sound/vox/motor.ogg',
|
||||
"motorpool" = 'modular_citadel/sound/vox/motorpool.ogg',
|
||||
"move" = 'modular_citadel/sound/vox/move.ogg',
|
||||
"must" = 'modular_citadel/sound/vox/must.ogg',
|
||||
"nearest" = 'modular_citadel/sound/vox/nearest.ogg',
|
||||
"nice" = 'modular_citadel/sound/vox/nice.ogg',
|
||||
"nine" = 'modular_citadel/sound/vox/nine.ogg',
|
||||
"nineteen" = 'modular_citadel/sound/vox/nineteen.ogg',
|
||||
"ninety" = 'modular_citadel/sound/vox/ninety.ogg',
|
||||
"no" = 'modular_citadel/sound/vox/no.ogg',
|
||||
"nominal" = 'modular_citadel/sound/vox/nominal.ogg',
|
||||
"north" = 'modular_citadel/sound/vox/north.ogg',
|
||||
"not" = 'modular_citadel/sound/vox/not.ogg',
|
||||
"november" = 'modular_citadel/sound/vox/november.ogg',
|
||||
"now" = 'modular_citadel/sound/vox/now.ogg',
|
||||
"number" = 'modular_citadel/sound/vox/number.ogg',
|
||||
"objective" = 'modular_citadel/sound/vox/objective.ogg',
|
||||
"observation" = 'modular_citadel/sound/vox/observation.ogg',
|
||||
"of" = 'modular_citadel/sound/vox/of.ogg',
|
||||
"officer" = 'modular_citadel/sound/vox/officer.ogg',
|
||||
"ok" = 'modular_citadel/sound/vox/ok.ogg',
|
||||
"on" = 'modular_citadel/sound/vox/on.ogg',
|
||||
"one" = 'modular_citadel/sound/vox/one.ogg',
|
||||
"open" = 'modular_citadel/sound/vox/open.ogg',
|
||||
"operating" = 'modular_citadel/sound/vox/operating.ogg',
|
||||
"operations" = 'modular_citadel/sound/vox/operations.ogg',
|
||||
"operative" = 'modular_citadel/sound/vox/operative.ogg',
|
||||
"option" = 'modular_citadel/sound/vox/option.ogg',
|
||||
"order" = 'modular_citadel/sound/vox/order.ogg',
|
||||
"organic" = 'modular_citadel/sound/vox/organic.ogg',
|
||||
"oscar" = 'modular_citadel/sound/vox/oscar.ogg',
|
||||
"out" = 'modular_citadel/sound/vox/out.ogg',
|
||||
"outside" = 'modular_citadel/sound/vox/outside.ogg',
|
||||
"over" = 'modular_citadel/sound/vox/over.ogg',
|
||||
"overload" = 'modular_citadel/sound/vox/overload.ogg',
|
||||
"override" = 'modular_citadel/sound/vox/override.ogg',
|
||||
"pacify" = 'modular_citadel/sound/vox/pacify.ogg',
|
||||
"pain" = 'modular_citadel/sound/vox/pain.ogg',
|
||||
"pal" = 'modular_citadel/sound/vox/pal.ogg',
|
||||
"panel" = 'modular_citadel/sound/vox/panel.ogg',
|
||||
"percent" = 'modular_citadel/sound/vox/percent.ogg',
|
||||
"perimeter" = 'modular_citadel/sound/vox/perimeter.ogg',
|
||||
"permitted" = 'modular_citadel/sound/vox/permitted.ogg',
|
||||
"personnel" = 'modular_citadel/sound/vox/personnel.ogg',
|
||||
"pipe" = 'modular_citadel/sound/vox/pipe.ogg',
|
||||
"plant" = 'modular_citadel/sound/vox/plant.ogg',
|
||||
"platform" = 'modular_citadel/sound/vox/platform.ogg',
|
||||
"please" = 'modular_citadel/sound/vox/please.ogg',
|
||||
"point" = 'modular_citadel/sound/vox/point.ogg',
|
||||
"portal" = 'modular_citadel/sound/vox/portal.ogg',
|
||||
"power" = 'modular_citadel/sound/vox/power.ogg',
|
||||
"presence" = 'modular_citadel/sound/vox/presence.ogg',
|
||||
"press" = 'modular_citadel/sound/vox/press.ogg',
|
||||
"primary" = 'modular_citadel/sound/vox/primary.ogg',
|
||||
"proceed" = 'modular_citadel/sound/vox/proceed.ogg',
|
||||
"processing" = 'modular_citadel/sound/vox/processing.ogg',
|
||||
"progress" = 'modular_citadel/sound/vox/progress.ogg',
|
||||
"proper" = 'modular_citadel/sound/vox/proper.ogg',
|
||||
"propulsion" = 'modular_citadel/sound/vox/propulsion.ogg',
|
||||
"prosecute" = 'modular_citadel/sound/vox/prosecute.ogg',
|
||||
"protective" = 'modular_citadel/sound/vox/protective.ogg',
|
||||
"push" = 'modular_citadel/sound/vox/push.ogg',
|
||||
"quantum" = 'modular_citadel/sound/vox/quantum.ogg',
|
||||
"quebec" = 'modular_citadel/sound/vox/quebec.ogg',
|
||||
"question" = 'modular_citadel/sound/vox/question.ogg',
|
||||
"questioning" = 'modular_citadel/sound/vox/questioning.ogg',
|
||||
"quick" = 'modular_citadel/sound/vox/quick.ogg',
|
||||
"quit" = 'modular_citadel/sound/vox/quit.ogg',
|
||||
"radiation" = 'modular_citadel/sound/vox/radiation.ogg',
|
||||
"radioactive" = 'modular_citadel/sound/vox/radioactive.ogg',
|
||||
"rads" = 'modular_citadel/sound/vox/rads.ogg',
|
||||
"rapid" = 'modular_citadel/sound/vox/rapid.ogg',
|
||||
"reach" = 'modular_citadel/sound/vox/reach.ogg',
|
||||
"reached" = 'modular_citadel/sound/vox/reached.ogg',
|
||||
"reactor" = 'modular_citadel/sound/vox/reactor.ogg',
|
||||
"red" = 'modular_citadel/sound/vox/red.ogg',
|
||||
"relay" = 'modular_citadel/sound/vox/relay.ogg',
|
||||
"released" = 'modular_citadel/sound/vox/released.ogg',
|
||||
"remaining" = 'modular_citadel/sound/vox/remaining.ogg',
|
||||
"renegade" = 'modular_citadel/sound/vox/renegade.ogg',
|
||||
"repair" = 'modular_citadel/sound/vox/repair.ogg',
|
||||
"report" = 'modular_citadel/sound/vox/report.ogg',
|
||||
"reports" = 'modular_citadel/sound/vox/reports.ogg',
|
||||
"required" = 'modular_citadel/sound/vox/required.ogg',
|
||||
"research" = 'modular_citadel/sound/vox/research.ogg',
|
||||
"reset" = 'modular_citadel/sound/vox/reset.ogg',
|
||||
"resevoir" = 'modular_citadel/sound/vox/resevoir.ogg',
|
||||
"resistance" = 'modular_citadel/sound/vox/resistance.ogg',
|
||||
"returned" = 'modular_citadel/sound/vox/returned.ogg',
|
||||
"right" = 'modular_citadel/sound/vox/right.ogg',
|
||||
"rocket" = 'modular_citadel/sound/vox/rocket.ogg',
|
||||
"roger" = 'modular_citadel/sound/vox/roger.ogg',
|
||||
"romeo" = 'modular_citadel/sound/vox/romeo.ogg',
|
||||
"room" = 'modular_citadel/sound/vox/room.ogg',
|
||||
"round" = 'modular_citadel/sound/vox/round.ogg',
|
||||
"run" = 'modular_citadel/sound/vox/run.ogg',
|
||||
"safe" = 'modular_citadel/sound/vox/safe.ogg',
|
||||
"safety" = 'modular_citadel/sound/vox/safety.ogg',
|
||||
"sargeant" = 'modular_citadel/sound/vox/sargeant.ogg',
|
||||
"satellite" = 'modular_citadel/sound/vox/satellite.ogg',
|
||||
"save" = 'modular_citadel/sound/vox/save.ogg',
|
||||
"science" = 'modular_citadel/sound/vox/science.ogg',
|
||||
"scores" = 'modular_citadel/sound/vox/scores.ogg',
|
||||
"scream" = 'modular_citadel/sound/vox/scream.ogg',
|
||||
"screen" = 'modular_citadel/sound/vox/screen.ogg',
|
||||
"search" = 'modular_citadel/sound/vox/search.ogg',
|
||||
"second" = 'modular_citadel/sound/vox/second.ogg',
|
||||
"secondary" = 'modular_citadel/sound/vox/secondary.ogg',
|
||||
"seconds" = 'modular_citadel/sound/vox/seconds.ogg',
|
||||
"sector" = 'modular_citadel/sound/vox/sector.ogg',
|
||||
"secure" = 'modular_citadel/sound/vox/secure.ogg',
|
||||
"secured" = 'modular_citadel/sound/vox/secured.ogg',
|
||||
"security" = 'modular_citadel/sound/vox/security.ogg',
|
||||
"select" = 'modular_citadel/sound/vox/select.ogg',
|
||||
"selected" = 'modular_citadel/sound/vox/selected.ogg',
|
||||
"service" = 'modular_citadel/sound/vox/service.ogg',
|
||||
"seven" = 'modular_citadel/sound/vox/seven.ogg',
|
||||
"seventeen" = 'modular_citadel/sound/vox/seventeen.ogg',
|
||||
"seventy" = 'modular_citadel/sound/vox/seventy.ogg',
|
||||
"severe" = 'modular_citadel/sound/vox/severe.ogg',
|
||||
"sewage" = 'modular_citadel/sound/vox/sewage.ogg',
|
||||
"sewer" = 'modular_citadel/sound/vox/sewer.ogg',
|
||||
"shield" = 'modular_citadel/sound/vox/shield.ogg',
|
||||
"shipment" = 'modular_citadel/sound/vox/shipment.ogg',
|
||||
"shock" = 'modular_citadel/sound/vox/shock.ogg',
|
||||
"shoot" = 'modular_citadel/sound/vox/shoot.ogg',
|
||||
"shower" = 'modular_citadel/sound/vox/shower.ogg',
|
||||
"shut" = 'modular_citadel/sound/vox/shut.ogg',
|
||||
"side" = 'modular_citadel/sound/vox/side.ogg',
|
||||
"sierra" = 'modular_citadel/sound/vox/sierra.ogg',
|
||||
"sight" = 'modular_citadel/sound/vox/sight.ogg',
|
||||
"silo" = 'modular_citadel/sound/vox/silo.ogg',
|
||||
"six" = 'modular_citadel/sound/vox/six.ogg',
|
||||
"sixteen" = 'modular_citadel/sound/vox/sixteen.ogg',
|
||||
"sixty" = 'modular_citadel/sound/vox/sixty.ogg',
|
||||
"slime" = 'modular_citadel/sound/vox/slime.ogg',
|
||||
"slow" = 'modular_citadel/sound/vox/slow.ogg',
|
||||
"soldier" = 'modular_citadel/sound/vox/soldier.ogg',
|
||||
"some" = 'modular_citadel/sound/vox/some.ogg',
|
||||
"someone" = 'modular_citadel/sound/vox/someone.ogg',
|
||||
"something" = 'modular_citadel/sound/vox/something.ogg',
|
||||
"son" = 'modular_citadel/sound/vox/son.ogg',
|
||||
"sorry" = 'modular_citadel/sound/vox/sorry.ogg',
|
||||
"south" = 'modular_citadel/sound/vox/south.ogg',
|
||||
"squad" = 'modular_citadel/sound/vox/squad.ogg',
|
||||
"square" = 'modular_citadel/sound/vox/square.ogg',
|
||||
"stairway" = 'modular_citadel/sound/vox/stairway.ogg',
|
||||
"status" = 'modular_citadel/sound/vox/status.ogg',
|
||||
"sterile" = 'modular_citadel/sound/vox/sterile.ogg',
|
||||
"sterilization" = 'modular_citadel/sound/vox/sterilization.ogg',
|
||||
"stolen" = 'modular_citadel/sound/vox/stolen.ogg',
|
||||
"storage" = 'modular_citadel/sound/vox/storage.ogg',
|
||||
"sub" = 'modular_citadel/sound/vox/sub.ogg',
|
||||
"subsurface" = 'modular_citadel/sound/vox/subsurface.ogg',
|
||||
"sudden" = 'modular_citadel/sound/vox/sudden.ogg',
|
||||
"suit" = 'modular_citadel/sound/vox/suit.ogg',
|
||||
"superconducting" = 'modular_citadel/sound/vox/superconducting.ogg',
|
||||
"supercooled" = 'modular_citadel/sound/vox/supercooled.ogg',
|
||||
"supply" = 'modular_citadel/sound/vox/supply.ogg',
|
||||
"surface" = 'modular_citadel/sound/vox/surface.ogg',
|
||||
"surrender" = 'modular_citadel/sound/vox/surrender.ogg',
|
||||
"surround" = 'modular_citadel/sound/vox/surround.ogg',
|
||||
"surrounded" = 'modular_citadel/sound/vox/surrounded.ogg',
|
||||
"switch" = 'modular_citadel/sound/vox/switch.ogg',
|
||||
"system" = 'modular_citadel/sound/vox/system.ogg',
|
||||
"systems" = 'modular_citadel/sound/vox/systems.ogg',
|
||||
"tactical" = 'modular_citadel/sound/vox/tactical.ogg',
|
||||
"take" = 'modular_citadel/sound/vox/take.ogg',
|
||||
"talk" = 'modular_citadel/sound/vox/talk.ogg',
|
||||
"tango" = 'modular_citadel/sound/vox/tango.ogg',
|
||||
"tank" = 'modular_citadel/sound/vox/tank.ogg',
|
||||
"target" = 'modular_citadel/sound/vox/target.ogg',
|
||||
"team" = 'modular_citadel/sound/vox/team.ogg',
|
||||
"temperature" = 'modular_citadel/sound/vox/temperature.ogg',
|
||||
"temporal" = 'modular_citadel/sound/vox/temporal.ogg',
|
||||
"ten" = 'modular_citadel/sound/vox/ten.ogg',
|
||||
"terminal" = 'modular_citadel/sound/vox/terminal.ogg',
|
||||
"terminated" = 'modular_citadel/sound/vox/terminated.ogg',
|
||||
"termination" = 'modular_citadel/sound/vox/termination.ogg',
|
||||
"test" = 'modular_citadel/sound/vox/test.ogg',
|
||||
"that" = 'modular_citadel/sound/vox/that.ogg',
|
||||
"the" = 'modular_citadel/sound/vox/the.ogg',
|
||||
"then" = 'modular_citadel/sound/vox/then.ogg',
|
||||
"there" = 'modular_citadel/sound/vox/there.ogg',
|
||||
"third" = 'modular_citadel/sound/vox/third.ogg',
|
||||
"thirteen" = 'modular_citadel/sound/vox/thirteen.ogg',
|
||||
"thirty" = 'modular_citadel/sound/vox/thirty.ogg',
|
||||
"this" = 'modular_citadel/sound/vox/this.ogg',
|
||||
"those" = 'modular_citadel/sound/vox/those.ogg',
|
||||
"thousand" = 'modular_citadel/sound/vox/thousand.ogg',
|
||||
"threat" = 'modular_citadel/sound/vox/threat.ogg',
|
||||
"three" = 'modular_citadel/sound/vox/three.ogg',
|
||||
"through" = 'modular_citadel/sound/vox/through.ogg',
|
||||
"time" = 'modular_citadel/sound/vox/time.ogg',
|
||||
"to" = 'modular_citadel/sound/vox/to.ogg',
|
||||
"top" = 'modular_citadel/sound/vox/top.ogg',
|
||||
"topside" = 'modular_citadel/sound/vox/topside.ogg',
|
||||
"touch" = 'modular_citadel/sound/vox/touch.ogg',
|
||||
"towards" = 'modular_citadel/sound/vox/towards.ogg',
|
||||
"track" = 'modular_citadel/sound/vox/track.ogg',
|
||||
"train" = 'modular_citadel/sound/vox/train.ogg',
|
||||
"transportation" = 'modular_citadel/sound/vox/transportation.ogg',
|
||||
"truck" = 'modular_citadel/sound/vox/truck.ogg',
|
||||
"tunnel" = 'modular_citadel/sound/vox/tunnel.ogg',
|
||||
"turn" = 'modular_citadel/sound/vox/turn.ogg',
|
||||
"turret" = 'modular_citadel/sound/vox/turret.ogg',
|
||||
"twelve" = 'modular_citadel/sound/vox/twelve.ogg',
|
||||
"twenty" = 'modular_citadel/sound/vox/twenty.ogg',
|
||||
"two" = 'modular_citadel/sound/vox/two.ogg',
|
||||
"unauthorized" = 'modular_citadel/sound/vox/unauthorized.ogg',
|
||||
"under" = 'modular_citadel/sound/vox/under.ogg',
|
||||
"uniform" = 'modular_citadel/sound/vox/uniform.ogg',
|
||||
"unlocked" = 'modular_citadel/sound/vox/unlocked.ogg',
|
||||
"until" = 'modular_citadel/sound/vox/until.ogg',
|
||||
"up" = 'modular_citadel/sound/vox/up.ogg',
|
||||
"upper" = 'modular_citadel/sound/vox/upper.ogg',
|
||||
"uranium" = 'modular_citadel/sound/vox/uranium.ogg',
|
||||
"us" = 'modular_citadel/sound/vox/us.ogg',
|
||||
"usa" = 'modular_citadel/sound/vox/usa.ogg',
|
||||
"use" = 'modular_citadel/sound/vox/use.ogg',
|
||||
"used" = 'modular_citadel/sound/vox/used.ogg',
|
||||
"user" = 'modular_citadel/sound/vox/user.ogg',
|
||||
"vacate" = 'modular_citadel/sound/vox/vacate.ogg',
|
||||
"valid" = 'modular_citadel/sound/vox/valid.ogg',
|
||||
"vapor" = 'modular_citadel/sound/vox/vapor.ogg',
|
||||
"vent" = 'modular_citadel/sound/vox/vent.ogg',
|
||||
"ventillation" = 'modular_citadel/sound/vox/ventillation.ogg',
|
||||
"victor" = 'modular_citadel/sound/vox/victor.ogg',
|
||||
"violated" = 'modular_citadel/sound/vox/violated.ogg',
|
||||
"violation" = 'modular_citadel/sound/vox/violation.ogg',
|
||||
"voltage" = 'modular_citadel/sound/vox/voltage.ogg',
|
||||
"vox_login" = 'modular_citadel/sound/vox/vox_login.ogg',
|
||||
"walk" = 'modular_citadel/sound/vox/walk.ogg',
|
||||
"wall" = 'modular_citadel/sound/vox/wall.ogg',
|
||||
"want" = 'modular_citadel/sound/vox/want.ogg',
|
||||
"wanted" = 'modular_citadel/sound/vox/wanted.ogg',
|
||||
"warm" = 'modular_citadel/sound/vox/warm.ogg',
|
||||
"warn" = 'modular_citadel/sound/vox/warn.ogg',
|
||||
"warning" = 'modular_citadel/sound/vox/warning.ogg',
|
||||
"waste" = 'modular_citadel/sound/vox/waste.ogg',
|
||||
"water" = 'modular_citadel/sound/vox/water.ogg',
|
||||
"we" = 'modular_citadel/sound/vox/we.ogg',
|
||||
"weapon" = 'modular_citadel/sound/vox/weapon.ogg',
|
||||
"west" = 'modular_citadel/sound/vox/west.ogg',
|
||||
"whiskey" = 'modular_citadel/sound/vox/whiskey.ogg',
|
||||
"white" = 'modular_citadel/sound/vox/white.ogg',
|
||||
"wilco" = 'modular_citadel/sound/vox/wilco.ogg',
|
||||
"will" = 'modular_citadel/sound/vox/will.ogg',
|
||||
"with" = 'modular_citadel/sound/vox/with.ogg',
|
||||
"without" = 'modular_citadel/sound/vox/without.ogg',
|
||||
"woop" = 'modular_citadel/sound/vox/woop.ogg',
|
||||
"xeno" = 'modular_citadel/sound/vox/xeno.ogg',
|
||||
"yankee" = 'modular_citadel/sound/vox/yankee.ogg',
|
||||
"yards" = 'modular_citadel/sound/vox/yards.ogg',
|
||||
"year" = 'modular_citadel/sound/vox/year.ogg',
|
||||
"yellow" = 'modular_citadel/sound/vox/yellow.ogg',
|
||||
"yes" = 'modular_citadel/sound/vox/yes.ogg',
|
||||
"you" = 'modular_citadel/sound/vox/you.ogg',
|
||||
"your" = 'modular_citadel/sound/vox/your.ogg',
|
||||
"yourself" = 'modular_citadel/sound/vox/yourself.ogg',
|
||||
"zero" = 'modular_citadel/sound/vox/zero.ogg',
|
||||
"zone" = 'modular_citadel/sound/vox/zone.ogg',
|
||||
"zulu" = 'modular_citadel/sound/vox/zulu.ogg',))
|
||||
#endif
|
||||
@@ -10,7 +10,7 @@ mob/living/silicon
|
||||
|
||||
/mob/living/silicon/robot/update_canmove()
|
||||
..()
|
||||
if(client && stat != DEAD && dogborg == TRUE)
|
||||
if(client && stat != DEAD && dogborg == FALSE)
|
||||
if(resting)
|
||||
cut_overlays()
|
||||
icon_state = "[module.cyborg_base_icon]-rest"
|
||||
@@ -18,6 +18,9 @@ mob/living/silicon
|
||||
icon_state = "[module.cyborg_base_icon]"
|
||||
update_icons()
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/silicon/robot/adjustStaminaLossBuffered(amount, updating_stamina = 1)
|
||||
if(istype(cell))
|
||||
cell.charge -= amount*5
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
/obj/item/robot_module/k9/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/list/sechoundmodels = list("Default")
|
||||
var/list/sechoundmodels = list("Default", "Dark", "Vale")
|
||||
if(R.client && R.client.ckey in list("nezuli"))
|
||||
sechoundmodels += "Alina"
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in sechoundmodels
|
||||
@@ -70,11 +70,14 @@
|
||||
switch(borg_icon)
|
||||
if("Default")
|
||||
cyborg_base_icon = "k9"
|
||||
moduleselect_icon = "k9"
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-sec"
|
||||
special_light_key = "alina"
|
||||
sleeper_overlay = "alinasleeper"
|
||||
if("Dark")
|
||||
cyborg_base_icon = "k9dark"
|
||||
if("Vale")
|
||||
cyborg_base_icon = "valesec"
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/medihound
|
||||
@@ -109,7 +112,7 @@
|
||||
|
||||
/obj/item/robot_module/medihound/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/list/medhoundmodels = list("Default", "Dark")
|
||||
var/list/medhoundmodels = list("Default", "Dark", "Vale")
|
||||
if(R.client && R.client.ckey in list("nezuli"))
|
||||
medhoundmodels += "Alina"
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medhoundmodels
|
||||
@@ -121,6 +124,9 @@
|
||||
if("Dark")
|
||||
cyborg_base_icon = "medihounddark"
|
||||
sleeper_overlay = "mdsleeper"
|
||||
if("Vale")
|
||||
cyborg_base_icon = "valemed"
|
||||
sleeper_overlay = "valemedsleeper"
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-med"
|
||||
special_light_key = "alina"
|
||||
@@ -313,7 +319,7 @@
|
||||
|
||||
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro")
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Heavy", "Sleek", "Butler", "Tophat", "Kent", "Bro", "DarkK9", "Vale", "ValeDark")
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
@@ -339,11 +345,32 @@
|
||||
cyborg_base_icon = "heavyserv"
|
||||
special_light_key = "heavyserv"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
if("DarkK9")
|
||||
cyborg_base_icon = "k50"
|
||||
special_light_key = "k50"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("Vale")
|
||||
cyborg_base_icon = "valeserv"
|
||||
special_light_key = "valeserv"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("ValeDark")
|
||||
cyborg_base_icon = "valeservdark"
|
||||
special_light_key = "valeservdark"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer")
|
||||
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale")
|
||||
if(R.client && R.client.ckey in list("nezuli"))
|
||||
engymodels += "Alina"
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in engymodels
|
||||
@@ -386,6 +413,14 @@
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("Vale")
|
||||
cyborg_base_icon = "valeeng"
|
||||
can_be_pushed = FALSE
|
||||
hat_offset = INFINITY
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-eng"
|
||||
special_light_key = "alina"
|
||||
|
||||
@@ -1,306 +0,0 @@
|
||||
//Sprites are trademarks of Gamefreak, Nintendo, The Pokemon Company, and Spike Chunsoft.
|
||||
#define ispokemon(A) (istype(A, /mob/living/simple_animal/pokemon))
|
||||
//POKEBALL
|
||||
/obj/item/pokeball
|
||||
name = "pokeball"
|
||||
icon = 'icons/obj/pokeball.dmi'
|
||||
icon_state = "pokeball"
|
||||
force = 0
|
||||
throwforce = 0
|
||||
var/success_chance = 25
|
||||
var/pokemon
|
||||
/obj/item/pokeball/great
|
||||
name = "great ball"
|
||||
icon_state = "pokeball_great"
|
||||
success_chance = 50
|
||||
/obj/item/pokeball/ultra
|
||||
icon_state = "pokeball_ultra"
|
||||
name = "ultra ball"
|
||||
success_chance = 75
|
||||
/obj/item/pokeball/master
|
||||
icon_state = "pokeball_master"
|
||||
name = "master ball"
|
||||
success_chance = 100
|
||||
/* //WIP
|
||||
/obj/item/pokeball/throw_impact(atom/hit_atom)
|
||||
if(ispokemon(hit_atom))
|
||||
var/mob/living/simple_animal/pokemon/pmon = hit_atom
|
||||
var/initial_success_chance = success_chance
|
||||
pmon.resize = 0.1
|
||||
pmon.color = "RED"
|
||||
pmon.canmove = 0
|
||||
sleep(15)
|
||||
if(pmon.pokeball == src)
|
||||
pmon.loc = src
|
||||
pokemon = pmon
|
||||
|
||||
return 1
|
||||
if(pmon.pokeball && pmon.pokeball !=src)
|
||||
return ..()
|
||||
var/bonus_chance = ((pmon.maxHealth - pmon.health) / 2)
|
||||
if(bonus_chance > 100)
|
||||
bonus_chance = 100
|
||||
success_chance = (success_chance + bonus_chance)
|
||||
if(success_chance > 100)
|
||||
success_chance = 100
|
||||
if(success_chance < 0)//just in case
|
||||
success_chance = 0
|
||||
sleep(15)
|
||||
if(prob(success_chance))
|
||||
visible_message("<span class='warning'>[src] shakes...</span>")
|
||||
else
|
||||
escape()
|
||||
sleep(15)
|
||||
if(prob(success_chance))
|
||||
visible_message("<span class='warning'>[src] shakes...</span>")
|
||||
else
|
||||
escape()
|
||||
sleep(15)
|
||||
if(prob(success_chance))
|
||||
visible_message("<span class='warning'>[src] shakes...</span>")
|
||||
else
|
||||
escape()
|
||||
else
|
||||
..()
|
||||
/obj/item/pokeball/proc/capture(mob/living/simple_animal/pokemon/pmon, mob/living/user)
|
||||
|
||||
/obj/item/pokeball/proc/escape(mob/living/simple_animal/pokemon/pmon, mob/living/user)
|
||||
if(!pokemon)
|
||||
return
|
||||
pmon.resize = 10
|
||||
pmon.color = null
|
||||
pmon.canmove = 1
|
||||
pmon.loc = src.loc
|
||||
if(pmon.pokeball != src)
|
||||
visible_message("<span class='warning'>[pmon] breaks free from [src]</span>")
|
||||
PoolOrNew(/obj/effect/particle_effect/sparks, loc)
|
||||
playsound(src.loc, "sparks", 50, 1)
|
||||
qdel(src)
|
||||
|
||||
else
|
||||
/obj/item/pokeball/proc/recall
|
||||
/obj/item/pokeball/proc/release
|
||||
*/
|
||||
/mob/living/simple_animal/pokemon
|
||||
name = "eevee"
|
||||
icon_state = "eevee"
|
||||
icon_living = "eevee"
|
||||
icon_dead = "eevee_d"
|
||||
desc = "Gotta catch 'em all!"
|
||||
icon = 'icons/mob/pokemon.dmi'
|
||||
var/pokeball
|
||||
pixel_x = -16
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5)
|
||||
ventcrawler = 2
|
||||
health = 100
|
||||
maxHealth = 100
|
||||
layer = 4
|
||||
response_help = "pets"
|
||||
wander = 1
|
||||
turns_per_move = 2
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
|
||||
/mob/living/simple_animal/pokemon/proc/simple_lay_down()
|
||||
set name = "Rest"
|
||||
set category = "IC"
|
||||
|
||||
resting = !resting
|
||||
src << "<span class='notice'>You are now [resting ? "resting" : "getting up"].</span>"
|
||||
update_canmove()
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_animal/pokemon/proc/update_icon()
|
||||
if(lying || resting || sleeping)
|
||||
icon_state = "[icon_state]_rest"
|
||||
else
|
||||
icon_state = "[icon_living]"
|
||||
|
||||
/mob/living/simple_animal/pokemon/New()
|
||||
..()
|
||||
verbs += /mob/living/simple_animal/pokemon/proc/simple_lay_down
|
||||
|
||||
/*
|
||||
/////TEMPLATE/////
|
||||
|
||||
/mob/living/simple_animal/pokemon/
|
||||
name = ""
|
||||
icon_state = ""
|
||||
icon_living = ""
|
||||
icon_dead = ""
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/pokemon/leg
|
||||
icon = 'icons/mob/legendary.dmi'
|
||||
pixel_x = -32
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 12)
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
|
||||
|
||||
/mob/living/simple_animal/pokemon/leg/articuno
|
||||
name = "Articuno"
|
||||
icon_state = "articuno"
|
||||
icon_living = "articuno"
|
||||
icon_dead = "articuno_d"
|
||||
flying = 1
|
||||
|
||||
/mob/living/simple_animal/pokemon/leg/rayquaza
|
||||
name = "Rayquaza"
|
||||
icon_state = "rayquaza"
|
||||
icon_living = "rayquaza"
|
||||
icon_dead = "rayquaza_d"
|
||||
flying = 1
|
||||
|
||||
//ALPHABETICAL PLEASE
|
||||
|
||||
/mob/living/simple_animal/pokemon/absol
|
||||
name = "absol"
|
||||
icon_state = "absol"
|
||||
icon_living = "absol"
|
||||
icon_dead = "absol_d"
|
||||
speak = list("Absol!", "Ab-Absol!")
|
||||
|
||||
/mob/living/simple_animal/pokemon/aggron
|
||||
name = "aggron"
|
||||
icon_state = "aggron"
|
||||
icon_living = "aggron"
|
||||
icon_dead = "aggron_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/ampharos
|
||||
name = "ampharos"
|
||||
icon_state = "ampharos"
|
||||
icon_living = "ampharos"
|
||||
icon_dead = "ampharos_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/charmander
|
||||
name = "charmander"
|
||||
icon_state = "charmander"
|
||||
icon_living = "charmander"
|
||||
icon_dead = "charmander_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/ditto
|
||||
name = "ditto"
|
||||
icon_state = "ditto"
|
||||
icon_living = "ditto"
|
||||
icon_dead = "ditto_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/dratini/dragonair
|
||||
name = "dragonair"
|
||||
desc = "A Dragonair stores an enormous amount of energy inside its body. It is said to alter the weather around it by loosing energy from the crystals on its neck and tail."
|
||||
icon_state = "dragonair"
|
||||
icon_living = "dragonair"
|
||||
icon_dead = "dragonair_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/dratini/dragonair/dragonite
|
||||
name = "dragonite"
|
||||
desc = "It can circle the globe in just 16 hours. It is a kindhearted Pokémon that leads lost and foundering ships in a storm to the safety of land."
|
||||
icon_state = "dragonite"
|
||||
icon_living = "dragonite"
|
||||
icon_dead = "dragonite_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/dratini
|
||||
name = "dratini"
|
||||
desc = "A Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels."
|
||||
icon_state = "dratini"
|
||||
icon_living = "dratini"
|
||||
icon_dead = "dratini_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee
|
||||
name = "eevee"
|
||||
desc = "Eevee has an unstable genetic makeup that suddenly mutates due to its environment. Radiation from various stones causes this Pokémon to evolve."
|
||||
icon_state = "eevee"
|
||||
icon_living = "eevee"
|
||||
icon_dead = "eevee_d"
|
||||
speak = list("Eevee!", "Ee-Eevee!")
|
||||
response_help = "pets"
|
||||
response_harm = "hits"
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/espeon
|
||||
name = "espeon"
|
||||
desc = "Espeon is extremely loyal to any trainer it considers to be worthy. It is said to have developed precognitive powers to protect its trainer from harm."
|
||||
icon_state = "espeon"
|
||||
icon_living = "espeon"
|
||||
icon_dead = "espeon_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/flaaffy
|
||||
name = "flaaffy"
|
||||
icon_state = "flaaffy"
|
||||
icon_living = "flaaffy"
|
||||
icon_dead = "flaaffy_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/flareon
|
||||
name = "flareon"
|
||||
desc = "Flareon's fluffy fur releases heat into the air so that its body does not get excessively hot. Its body temperature can rise to a maximum of 1,650 degrees F."
|
||||
icon_state = "flareon"
|
||||
icon_living = "flareon"
|
||||
icon_dead = "flareon_d"
|
||||
speak = list("Flare!", "Flareon!")
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/glaceon
|
||||
name = "glaceon"
|
||||
desc = "By controlling its body heat, it can freeze the atmosphere around it to make a diamond-dust flurry."
|
||||
icon_state = "glaceon"
|
||||
icon_living = "glaceon"
|
||||
icon_dead = "glaceon_d"
|
||||
speak = list("Glace!", "Glaceon!")
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/jolteon
|
||||
name = "jolteon"
|
||||
desc = "Its cells generate weak power that is amplified by its fur's static electricity to drop thunderbolts. The bristling fur is made of electrically charged needles."
|
||||
icon_state = "jolteon"
|
||||
icon_living = "jolteon"
|
||||
icon_dead = "jolteon_d"
|
||||
speak = list("Jolt!", "Jolteon!")
|
||||
|
||||
/mob/living/simple_animal/pokemon/larvitar
|
||||
name = "larvitar"
|
||||
desc = "It is born deep underground. It can't emerge until it has entirely consumed the soil around it."
|
||||
icon_state = "larvitar"
|
||||
icon_living = "larvitar"
|
||||
icon_dead = "larvitar_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/mareep
|
||||
name = "mareep"
|
||||
icon_state = "mareep"
|
||||
icon_living = "mareep"
|
||||
icon_dead = "mareep_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/poochyena/mightyena
|
||||
name = "mightyena"
|
||||
icon_state = "mightyena"
|
||||
icon_living = "mightyena"
|
||||
icon_dead = "mightyena"
|
||||
|
||||
/mob/living/simple_animal/pokemon/miltank
|
||||
name = "miltank"
|
||||
icon_state = "miltank"
|
||||
icon_living = "miltank"
|
||||
icon_dead = "miltank_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/poochyena
|
||||
name = "poochyena"
|
||||
icon_state = "poochyena"
|
||||
icon_living = "poochyena"
|
||||
icon_dead = "poochyena_d"
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/sylveon
|
||||
name = "Sylveon"
|
||||
desc = "Sylveon, the Intertwining Pokémon. Sylveon affectionately wraps its ribbon-like feelers around its Trainer's arm as they walk together."
|
||||
icon_state = "sylveon"
|
||||
icon_living = "sylveon"
|
||||
icon_dead = "sylveon_d"
|
||||
speak = list("Sylveon!", "Syl!")
|
||||
response_help = "pets"
|
||||
response_harm = "hits"
|
||||
|
||||
/mob/living/simple_animal/pokemon/eevee/umbreon
|
||||
name = "umbreon"
|
||||
icon_state = "umbreon"
|
||||
icon_dead = "umbreon_d"
|
||||
icon_living = "umbreon"
|
||||
|
||||
/mob/living/simple_animal/pokemon/vulpix
|
||||
name = "vulpix"
|
||||
icon_state = "vulpix"
|
||||
icon_living = "vulpix"
|
||||
icon_dead = "vulpix_d"
|
||||
@@ -81,9 +81,19 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
SM.real_name = M.real_name
|
||||
M.dna.transfer_identity(SM)
|
||||
SM.updateappearance(mutcolor_update=1)
|
||||
var/mob/dead/observer/C = pick(candies)
|
||||
message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
|
||||
SM.key = C.key
|
||||
|
||||
|
||||
candies = shuffle(candies)//Shake those ghosts up!
|
||||
for(var/mob/dead/observer/C2 in candies)
|
||||
if(C2.key && C2)
|
||||
SM.key = C2.key
|
||||
message_admins("Ghost candidate found! [C2] key [C2.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [C2]")
|
||||
break
|
||||
else
|
||||
candies =- C2
|
||||
if(!SM.mind) //Something went wrong, use alt mechanics
|
||||
return ..()
|
||||
SM.mind.enslave_mind_to_creator(M)
|
||||
|
||||
//If they're a zombie, they can try to negate it with this.
|
||||
|
||||
@@ -6,58 +6,17 @@
|
||||
id = "fermi"
|
||||
taste_description = "affection and love!"
|
||||
can_synth = FALSE
|
||||
SplitChem = TRUE
|
||||
|
||||
//This should process fermichems to find out how pure they are and what effect to do.
|
||||
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount)
|
||||
. = ..()
|
||||
if(!M)
|
||||
return
|
||||
if(purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if (purity == 1 || DoNotSplit == TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
|
||||
return
|
||||
else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]")
|
||||
return
|
||||
else
|
||||
var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
|
||||
M.reagents.remove_reagent(id, (impureVol), FALSE)
|
||||
M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]")
|
||||
return
|
||||
|
||||
|
||||
//When merging two fermichems, see above
|
||||
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging
|
||||
. = ..()
|
||||
if(!ishuman(M))
|
||||
return
|
||||
if (purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if (purity == 1 || DoNotSplit == TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves")
|
||||
return
|
||||
else if (InverseChemVal > purity)
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
|
||||
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
|
||||
if(R.name == "")
|
||||
R.name = name//Negative effects are hidden
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]")
|
||||
return
|
||||
else
|
||||
var/impureVol = amount * (1 - purity)
|
||||
M.reagents.remove_reagent(id, impureVol, FALSE)
|
||||
M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
|
||||
if(R.name == "")
|
||||
R.name = name//Negative effects are hidden
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]")
|
||||
return
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -372,6 +331,8 @@
|
||||
|
||||
//Consumes self on addition and shifts pH
|
||||
/datum/reagent/fermi/acidic_buffer/on_new(datapH)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return ..()
|
||||
data = datapH
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
return
|
||||
@@ -392,6 +353,8 @@
|
||||
can_synth = TRUE
|
||||
|
||||
/datum/reagent/fermi/basic_buffer/on_new(datapH)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return ..()
|
||||
data = datapH
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
return
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
mix_sound = 'sound/effects/bubbles.ogg'
|
||||
|
||||
//Called for every reaction step
|
||||
/datum/chemical_reaction/fermi/proc/FermiCreate(holder)
|
||||
/datum/chemical_reaction/proc/FermiCreate(holder)
|
||||
return
|
||||
|
||||
//Called when reaction STOP_PROCESSING
|
||||
/datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder)
|
||||
/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder)
|
||||
return
|
||||
|
||||
//Called when temperature is above a certain threshold, or if purity is too low.
|
||||
/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
|
||||
/datum/chemical_reaction/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
|
||||
if (Exploding == TRUE)
|
||||
return
|
||||
|
||||
@@ -24,26 +24,32 @@
|
||||
if (500 to 750)
|
||||
for(var/turf/turf in range(1,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.1
|
||||
|
||||
if (751 to 1100)
|
||||
for(var/turf/turf in range(2,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.2
|
||||
|
||||
if (1101 to 1500) //If you're crafty
|
||||
for(var/turf/turf in range(3,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.3
|
||||
|
||||
if (1501 to 2500) //requested
|
||||
for(var/turf/turf in range(4,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.4
|
||||
|
||||
if (2501 to 5000)
|
||||
for(var/turf/turf in range(5,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.5
|
||||
|
||||
if (5001 to INFINITY)
|
||||
for(var/turf/turf in range(6,T))
|
||||
new /obj/effect/hotspot(turf)
|
||||
volume*=1.6
|
||||
|
||||
|
||||
message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot].")
|
||||
@@ -66,7 +72,7 @@
|
||||
|
||||
if (pH > 10) //if alkaline, small explosion.
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(round((volume/30)*(pH-9)), T, 0, 0)
|
||||
e.set_up(round((volume/28)*(pH-9)), T, 0, 0)
|
||||
e.start()
|
||||
|
||||
if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less)
|
||||
@@ -101,10 +107,10 @@
|
||||
PurityMin = 0.4 //The minimum purity something has to be above, otherwise it explodes.
|
||||
|
||||
/datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
|
||||
if(!locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list)
|
||||
var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
|
||||
if(!E)
|
||||
return
|
||||
var/turf/open/location = get_turf(my_atom)
|
||||
var/datum/reagent/fermi/eigenstate/E = locate(/datum/reagent/fermi/eigenstate) in my_atom.reagents.reagent_list
|
||||
if(location)
|
||||
E.location_created = location
|
||||
E.data.["location_created"] = location
|
||||
@@ -137,12 +143,16 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/mob/living/simple_animal/slime/S = new(T,"green")
|
||||
S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
S.name = "Living teratoma"
|
||||
S.real_name = "Living teratoma"
|
||||
S.rabid = 1//Make them an angery boi
|
||||
S.color = "#810010"
|
||||
var/amount_to_spawn = round((volume/100), 1)
|
||||
if(amount_to_spawn <= 0)
|
||||
amount_to_spawn = 1
|
||||
for(var/i in 1 to amount_to_spawn)
|
||||
var/mob/living/simple_animal/slime/S = new(T,"green")
|
||||
S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
S.name = "Living teratoma"
|
||||
S.real_name = "Living teratoma"
|
||||
S.rabid = 1//Make them an angery boi
|
||||
S.color = "#810010"
|
||||
my_atom.reagents.clear_reagents()
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
@@ -353,11 +363,15 @@
|
||||
PurityMin = 0.5
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium/FermiExplode(src, var/atom/my_atom, volume, temp, pH)
|
||||
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
|
||||
hat.animate_atom_living()
|
||||
var/amount_to_spawn = round((volume/100), 1)
|
||||
if(amount_to_spawn <= 0)
|
||||
amount_to_spawn = 1
|
||||
for(var/i in 1 to amount_to_spawn)
|
||||
var/obj/item/clothing/head/hattip/hat = new /obj/item/clothing/head/hattip(get_turf(my_atom))
|
||||
hat.animate_atom_living()
|
||||
var/list/seen = viewers(8, get_turf(my_atom))
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The makes an off sounding pop, as a hat suddenly climbs out of the beaker!</b></span>")
|
||||
to_chat(M, "<span class='warning'>The [my_atom] makes an off sounding pop, as a hat suddenly climbs out of it!</b></span>")
|
||||
my_atom.reagents.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium
|
||||
@@ -382,6 +396,9 @@
|
||||
FermiChem = TRUE
|
||||
PurityMin = 0.3
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium/organic
|
||||
required_reagents = list("aphro" = 0.1, "catnip" = 0.1, "silver" = 0.2, "salglu_solution" = 0.1)
|
||||
|
||||
//FOR INSTANT REACTIONS - DO NOT MULTIPLY LIMIT BY 10.
|
||||
//There's a weird rounding error or something ugh.
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/datum/techweb_node/bluespace_basic/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_monkeys"
|
||||
|
||||
/datum/techweb_node/practical_bluespace/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_slimebasic"
|
||||
|
||||
/datum/techweb_node/adv_bluespace/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_slimeadv"
|
||||
|
||||
/datum/techweb_node/ballistic_weapons/New()
|
||||
. = ..()
|
||||
design_ids += "mag_oldsmg_rubber"
|
||||
|
||||
/datum/techweb_node/computer_board_gaming
|
||||
id = "computer_board_gaming"
|
||||
display_name = "Games and Toys"
|
||||
description = "For the slackers on the station."
|
||||
prereq_ids = list("comptech")
|
||||
design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/ballistic_weapons
|
||||
design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_tx")
|
||||
|
||||
/datum/techweb_node/advanced_illegl_ballistics
|
||||
id = "advanced_illegal_ballistics"
|
||||
display_name = "Advanced Illegal Ballistics"
|
||||
description = "Advanced Ballistic for Illegal weaponds."
|
||||
design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip")
|
||||
prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
|
||||
export_price = 7000
|
||||
@@ -1,33 +0,0 @@
|
||||
/datum/techweb_node/bluespace_basic/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_monkeys"
|
||||
|
||||
/datum/techweb_node/practical_bluespace/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_slimebasic"
|
||||
|
||||
/datum/techweb_node/adv_bluespace/New()
|
||||
. = ..()
|
||||
design_ids += "xenobio_slimeadv"
|
||||
|
||||
/datum/techweb_node/ballistic_weapons/New()
|
||||
. = ..()
|
||||
design_ids += "mag_oldsmg_rubber"
|
||||
|
||||
/datum/techweb_node/computer_board_gaming
|
||||
id = "computer_board_gaming"
|
||||
display_name = "Games and Toys"
|
||||
description = "For the slackers on the station."
|
||||
prereq_ids = list("comptech")
|
||||
design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
|
||||
export_price = 5000
|
||||
|
||||
/datum/techweb_node/advanced_illegl_ballistics
|
||||
id = "advanced_illegal_ballistics"
|
||||
display_name = "Advanced Illegal Ballistics
|
||||
description = "Advanced Ballistic for Illegal weaponds."
|
||||
design_ids = list("10mm","10mmap","10mminc","10mmhp","9mm","point_45","bolt_clip")
|
||||
prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space.
|
||||
export_price = 7000
|
||||
Reference in New Issue
Block a user