@@ -487,7 +487,7 @@
|
||||
r_pocket = /obj/item/ammo_box/magazine/recharge/ctf
|
||||
r_hand = /obj/item/gun/ballistic/automatic/laser/ctf
|
||||
|
||||
/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE)
|
||||
if(visualsOnly)
|
||||
return
|
||||
var/list/no_drops = list()
|
||||
@@ -529,7 +529,7 @@
|
||||
r_hand = /obj/item/gun/energy/laser/instakill/blue
|
||||
shoes = /obj/item/clothing/shoes/jackboots/fast
|
||||
|
||||
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
var/obj/item/radio/R = H.ears
|
||||
R.set_frequency(FREQ_CTF_RED)
|
||||
@@ -537,7 +537,7 @@
|
||||
R.independent = TRUE
|
||||
H.dna.species.stunmod = 0
|
||||
|
||||
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
|
||||
/datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
var/obj/item/radio/R = H.ears
|
||||
R.set_frequency(FREQ_CTF_BLUE)
|
||||
|
||||
@@ -0,0 +1,650 @@
|
||||
//If someone can do this in a neater way, be my guest-Kor
|
||||
|
||||
//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
|
||||
|
||||
/obj/effect/mob_spawn
|
||||
name = "Unknown"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/job_description = null
|
||||
var/mob_type = null
|
||||
var/mob_name = ""
|
||||
var/mob_gender = null
|
||||
var/death = TRUE //Kill the mob
|
||||
var/roundstart = TRUE //fires on initialize
|
||||
var/instant = FALSE //fires on New
|
||||
var/flavour_text = "The mapper forgot to set this!"
|
||||
var/faction = null
|
||||
var/permanent = FALSE //If true, the spawner will not disappear upon running out of uses.
|
||||
var/random = FALSE //Don't set a name or gender, just go random
|
||||
var/antagonist_type
|
||||
var/objectives = null
|
||||
var/uses = 1 //how many times can we spawn from it. set to -1 for infinite.
|
||||
var/brute_damage = 0
|
||||
var/oxy_damage = 0
|
||||
var/burn_damage = 0
|
||||
var/datum/disease/disease = null //Do they start with a pre-spawned disease?
|
||||
var/mob_color //Change the mob's color
|
||||
var/assignedrole
|
||||
var/show_flavour = TRUE
|
||||
var/banType = "lavaland"
|
||||
var/ghost_usable = TRUE
|
||||
|
||||
//ATTACK GHOST IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling)
|
||||
if(!SSticker.HasRoundStarted() || !loc || !ghost_usable)
|
||||
return
|
||||
if(!uses)
|
||||
to_chat(user, "<span class='warning'>This spawner is out of charges!</span>")
|
||||
return
|
||||
if(jobban_isbanned(user, banType))
|
||||
to_chat(user, "<span class='warning'>You are jobanned!</span>")
|
||||
return
|
||||
if(QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
if(isobserver(user))
|
||||
var/mob/dead/observer/O = user
|
||||
if(!O.can_reenter_round())
|
||||
return FALSE
|
||||
var/ghost_role = alert(latejoinercalling ? "Latejoin as [mob_name]? (This is a ghost role, and as such, it's very likely to be off-station.)" : "Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
|
||||
if(ghost_role == "No" || !loc)
|
||||
return
|
||||
if(QDELETED(src) || QDELETED(user))
|
||||
return
|
||||
if(latejoinercalling)
|
||||
var/mob/dead/new_player/NP = user
|
||||
if(istype(NP))
|
||||
NP.close_spawn_windows()
|
||||
NP.stop_sound_channel(CHANNEL_LOBBYMUSIC)
|
||||
log_game("[key_name(user)] became [mob_name]")
|
||||
create(ckey = user.ckey)
|
||||
return TRUE
|
||||
|
||||
/obj/effect/mob_spawn/Initialize(mapload)
|
||||
. = ..()
|
||||
if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP))))
|
||||
create()
|
||||
else if(ghost_usable)
|
||||
GLOB.poi_list |= src
|
||||
LAZYADD(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
var/job_name = job_description ? job_description : name
|
||||
LAZYREMOVE(GLOB.mob_spawners[job_name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[job_name]))
|
||||
GLOB.mob_spawners -= job_name
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/proc/can_latejoin() //If it can be taken from the lobby.
|
||||
return ghost_usable
|
||||
|
||||
/obj/effect/mob_spawn/proc/special(mob/M)
|
||||
return
|
||||
|
||||
/obj/effect/mob_spawn/proc/equip(mob/M)
|
||||
return
|
||||
|
||||
/obj/effect/mob_spawn/proc/create(ckey, name)
|
||||
var/mob/living/M = new mob_type(get_turf(src)) //living mobs only
|
||||
if(!random)
|
||||
M.real_name = mob_name ? mob_name : M.name
|
||||
if(!mob_gender)
|
||||
mob_gender = pick(MALE, FEMALE)
|
||||
M.gender = mob_gender
|
||||
if(faction)
|
||||
M.faction = list(faction)
|
||||
if(disease)
|
||||
M.ForceContractDisease(new disease)
|
||||
if(death)
|
||||
M.death(1) //Kills the new mob
|
||||
|
||||
M.adjustOxyLoss(oxy_damage)
|
||||
M.adjustBruteLoss(brute_damage)
|
||||
M.adjustFireLoss(burn_damage)
|
||||
M.color = mob_color
|
||||
equip(M)
|
||||
|
||||
if(ckey)
|
||||
M.ckey = ckey
|
||||
if(show_flavour)
|
||||
to_chat(M, "[flavour_text]")
|
||||
var/datum/mind/MM = M.mind
|
||||
var/datum/antagonist/A
|
||||
if(antagonist_type)
|
||||
A = MM.add_antag_datum(antagonist_type)
|
||||
if(objectives)
|
||||
if(!A)
|
||||
A = MM.add_antag_datum(/datum/antagonist/custom)
|
||||
for(var/objective in objectives)
|
||||
var/datum/objective/O = new/datum/objective(objective)
|
||||
O.owner = MM
|
||||
A.objectives += O
|
||||
if(assignedrole)
|
||||
M.mind.assigned_role = assignedrole
|
||||
special(M, name)
|
||||
MM.name = M.real_name
|
||||
if(uses > 0)
|
||||
uses--
|
||||
if(!permanent && !uses)
|
||||
qdel(src)
|
||||
|
||||
// Base version - place these on maps/templates.
|
||||
/obj/effect/mob_spawn/human
|
||||
mob_type = /mob/living/carbon/human
|
||||
//Human specific stuff.
|
||||
var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
|
||||
var/datum/outfit/outfit = /datum/outfit //If this is a path, it will be instanced in Initialize()
|
||||
var/disable_pda = TRUE
|
||||
var/disable_sensors = TRUE
|
||||
//All of these only affect the ID that the outfit has placed in the ID slot
|
||||
var/id_job = null //Such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/id_access = null //This is for access. See access.dm for which jobs give what access. Use "Captain" if you want it to be all access.
|
||||
var/id_access_list = null //Allows you to manually add access to an ID card.
|
||||
assignedrole = "Ghost Role"
|
||||
|
||||
var/husk = null
|
||||
//these vars are for lazy mappers to override parts of the outfit
|
||||
//these cannot be null by default, or mappers cannot set them to null if they want nothing in that slot
|
||||
var/uniform = -1
|
||||
var/r_hand = -1
|
||||
var/l_hand = -1
|
||||
var/suit = -1
|
||||
var/shoes = -1
|
||||
var/gloves = -1
|
||||
var/ears = -1
|
||||
var/glasses = -1
|
||||
var/mask = -1
|
||||
var/head = -1
|
||||
var/belt = -1
|
||||
var/r_pocket = -1
|
||||
var/l_pocket = -1
|
||||
var/back = -1
|
||||
var/id = -1
|
||||
var/neck = -1
|
||||
var/backpack_contents = -1
|
||||
var/suit_store = -1
|
||||
|
||||
var/hair_style
|
||||
var/facial_hair_style
|
||||
var/skin_tone
|
||||
|
||||
/obj/effect/mob_spawn/human/Initialize()
|
||||
if(ispath(outfit))
|
||||
outfit = new outfit()
|
||||
if(!outfit)
|
||||
outfit = new /datum/outfit
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
|
||||
if(mob_species)
|
||||
H.set_species(mob_species)
|
||||
if(husk)
|
||||
H.Drain()
|
||||
else //Because for some reason I can't track down, things are getting turned into husks even if husk = false. It's in some damage proc somewhere.
|
||||
H.cure_husk()
|
||||
H.underwear = "Nude"
|
||||
H.undershirt = "Nude"
|
||||
H.socks = "Nude"
|
||||
if(hair_style)
|
||||
H.hair_style = hair_style
|
||||
else
|
||||
H.hair_style = random_hair_style(gender)
|
||||
if(facial_hair_style)
|
||||
H.facial_hair_style = facial_hair_style
|
||||
else
|
||||
H.facial_hair_style = random_facial_hair_style(gender)
|
||||
if(skin_tone)
|
||||
H.skin_tone = skin_tone
|
||||
else
|
||||
H.skin_tone = random_skin_tone()
|
||||
H.update_hair()
|
||||
H.update_body()
|
||||
if(outfit)
|
||||
var/static/list/slots = list("uniform", "r_hand", "l_hand", "suit", "shoes", "gloves", "ears", "glasses", "mask", "head", "belt", "r_pocket", "l_pocket", "back", "id", "neck", "backpack_contents", "suit_store")
|
||||
for(var/slot in slots)
|
||||
var/T = vars[slot]
|
||||
if(!isnum(T))
|
||||
outfit.vars[slot] = T
|
||||
H.equipOutfit(outfit)
|
||||
if(disable_pda)
|
||||
// We don't want corpse PDAs to show up in the messenger list.
|
||||
var/obj/item/pda/PDA = locate(/obj/item/pda) in H
|
||||
if(PDA)
|
||||
PDA.toff = TRUE
|
||||
if(disable_sensors)
|
||||
// Using crew monitors to find corpses while creative makes finding certain ruins too easy.
|
||||
var/obj/item/clothing/under/C = H.w_uniform
|
||||
if(istype(C))
|
||||
C.sensor_mode = NO_SENSORS
|
||||
|
||||
var/obj/item/card/id/W = H.wear_id
|
||||
if(W)
|
||||
if(id_access)
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == id_access)
|
||||
W.access = J.get_access()
|
||||
break
|
||||
if(id_access_list)
|
||||
if(!islist(W.access))
|
||||
W.access = list()
|
||||
W.access |= id_access_list
|
||||
if(id_job)
|
||||
W.assignment = id_job
|
||||
W.registered_name = H.real_name
|
||||
W.update_label()
|
||||
|
||||
//Instant version - use when spawning corpses during runtime
|
||||
/obj/effect/mob_spawn/human/corpse
|
||||
roundstart = FALSE
|
||||
instant = TRUE
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/damaged
|
||||
brute_damage = 1000
|
||||
|
||||
/obj/effect/mob_spawn/human/alive
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
death = FALSE
|
||||
roundstart = FALSE //you could use these for alive fake humans on roundstart but this is more common scenario
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/delayed
|
||||
ghost_usable = FALSE //These are just not-yet-set corpses.
|
||||
instant = FALSE
|
||||
|
||||
//Non-human spawners
|
||||
|
||||
/obj/effect/mob_spawn/AICorpse/create(ckey, name) //Creates a corrupted AI
|
||||
var/A = locate(/mob/living/silicon/ai) in loc
|
||||
if(A)
|
||||
return
|
||||
var/mob/living/silicon/ai/spawned/M = new(loc) //spawn new AI at landmark as var M
|
||||
M.name = src.name
|
||||
M.real_name = src.name
|
||||
M.aiPDA.toff = TRUE //turns the AI's PDA messenger off, stopping it showing up on player PDAs
|
||||
M.death() //call the AI's death proc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mob_spawn/slime
|
||||
mob_type = /mob/living/simple_animal/slime
|
||||
var/mobcolour = "grey"
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "grey baby slime" //sets the icon in the map editor
|
||||
|
||||
/obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S)
|
||||
S.colour = mobcolour
|
||||
|
||||
/obj/effect/mob_spawn/human/facehugger/create(ckey, name) //Creates a squashed facehugger
|
||||
var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark
|
||||
O.name = src.name
|
||||
O.Die() //call the facehugger's death proc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mob_spawn/mouse
|
||||
name = "sleeper"
|
||||
mob_type = /mob/living/simple_animal/mouse
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Mouse"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
|
||||
/obj/effect/mob_spawn/cow
|
||||
name = "sleeper"
|
||||
mob_type = /mob/living/simple_animal/cow
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Cow"
|
||||
mob_gender = FEMALE
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
|
||||
// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example.
|
||||
|
||||
///////////Civilians//////////////////////
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/assistant
|
||||
name = "Assistant"
|
||||
outfit = /datum/outfit/job/assistant
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection
|
||||
disease = /datum/disease/beesease
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection
|
||||
disease = /datum/disease/brainrot
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection
|
||||
disease = /datum/disease/fluspanish
|
||||
|
||||
/obj/effect/mob_spawn/human/corpse/cargo_tech
|
||||
name = "Cargo Tech"
|
||||
outfit = /datum/outfit/job/cargo_tech
|
||||
|
||||
/obj/effect/mob_spawn/human/cook
|
||||
name = "Cook"
|
||||
outfit = /datum/outfit/job/cook
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/doctor
|
||||
name = "Doctor"
|
||||
outfit = /datum/outfit/job/doctor
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/doctor/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
random = TRUE
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "<span class='big bold'>You are a space doctor!</span>"
|
||||
assignedrole = "Space Doctor"
|
||||
job_description = "Off-station Doctor"
|
||||
|
||||
/obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H)
|
||||
..()
|
||||
// Remove radio and PDA so they wouldn't annoy station crew.
|
||||
var/list/del_types = list(/obj/item/pda, /obj/item/radio/headset)
|
||||
for(var/del_type in del_types)
|
||||
var/obj/item/I = locate(del_type) in H
|
||||
qdel(I)
|
||||
|
||||
/obj/effect/mob_spawn/human/engineer
|
||||
name = "Engineer"
|
||||
outfit = /datum/outfit/job/engineer/gloved
|
||||
|
||||
/obj/effect/mob_spawn/human/engineer/rig
|
||||
outfit = /datum/outfit/job/engineer/gloved/rig
|
||||
|
||||
/obj/effect/mob_spawn/human/clown
|
||||
name = "Clown"
|
||||
outfit = /datum/outfit/job/clown
|
||||
|
||||
/obj/effect/mob_spawn/human/scientist
|
||||
name = "Scientist"
|
||||
outfit = /datum/outfit/job/scientist
|
||||
|
||||
/obj/effect/mob_spawn/human/miner
|
||||
name = "Shaft Miner"
|
||||
outfit = /datum/outfit/job/miner
|
||||
|
||||
/obj/effect/mob_spawn/human/miner/rig
|
||||
outfit = /datum/outfit/job/miner/equipped/hardsuit
|
||||
|
||||
/obj/effect/mob_spawn/human/miner/explorer
|
||||
outfit = /datum/outfit/job/miner/equipped
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/plasmaman
|
||||
mob_species = /datum/species/plasmaman
|
||||
outfit = /datum/outfit/plasmaman
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/bartender
|
||||
name = "Space Bartender"
|
||||
id_job = "Bartender"
|
||||
id_access_list = list(ACCESS_BAR)
|
||||
outfit = /datum/outfit/spacebartender
|
||||
|
||||
/obj/effect/mob_spawn/human/bartender/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
random = TRUE
|
||||
job_description = "Off-station Bartender"
|
||||
name = "bartender sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "<span class='big bold'>You are a space bartender!</span><b> Time to mix drinks and change lives. Smoking space drugs makes it easier to understand your patrons' odd dialect.</b>"
|
||||
assignedrole = "Space Bartender"
|
||||
id_job = "Bartender"
|
||||
|
||||
/datum/outfit/spacebartender
|
||||
name = "Space Bartender"
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
back = /obj/item/storage/backpack
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
id = /obj/item/card/id
|
||||
|
||||
/obj/effect/mob_spawn/human/beach
|
||||
outfit = /datum/outfit/beachbum
|
||||
|
||||
/obj/effect/mob_spawn/human/beach/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
random = TRUE
|
||||
job_description = "Beach Biodome Bum"
|
||||
mob_name = "Beach Bum"
|
||||
name = "beach bum sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "<span class='big bold'>You're, like, totally a dudebro, bruh.</span><b> Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?</b>"
|
||||
assignedrole = "Beach Bum"
|
||||
|
||||
/obj/effect/mob_spawn/human/beach/alive/lifeguard
|
||||
flavour_text = "<span class='big bold'>You're a spunky lifeguard!</span><b> It's up to you to make sure nobody drowns or gets eaten by sharks and stuff.</b>"
|
||||
mob_gender = "female"
|
||||
name = "lifeguard sleeper"
|
||||
id_job = "Lifeguard"
|
||||
job_description = "Beach Biodome Lifeguard"
|
||||
uniform = /obj/item/clothing/under/shorts/red
|
||||
|
||||
/datum/outfit/beachbum
|
||||
name = "Beach Bum"
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
r_pocket = /obj/item/storage/wallet/random
|
||||
l_pocket = /obj/item/reagent_containers/food/snacks/pizzaslice/dank;
|
||||
uniform = /obj/item/clothing/under/pants/youngfolksjeans
|
||||
id = /obj/item/card/id
|
||||
|
||||
/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
..()
|
||||
if(visualsOnly)
|
||||
return
|
||||
H.dna.add_mutation(STONER)
|
||||
|
||||
/////////////////Officers+Nanotrasen Security//////////////////////
|
||||
|
||||
/obj/effect/mob_spawn/human/bridgeofficer
|
||||
name = "Bridge Officer"
|
||||
id_job = "Bridge Officer"
|
||||
id_access_list = list(ACCESS_CENT_CAPTAIN)
|
||||
outfit = /datum/outfit/nanotrasenbridgeofficercorpse
|
||||
|
||||
/datum/outfit/nanotrasenbridgeofficercorpse
|
||||
name = "Bridge Officer Corpse"
|
||||
ears = /obj/item/radio/headset/heads/hop
|
||||
uniform = /obj/item/clothing/under/rank/centcom_officer
|
||||
suit = /obj/item/clothing/suit/armor/bulletproof
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
id = /obj/item/card/id
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/commander
|
||||
name = "Commander"
|
||||
id_job = "Commander"
|
||||
id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE)
|
||||
outfit = /datum/outfit/nanotrasencommandercorpse
|
||||
|
||||
/datum/outfit/nanotrasencommandercorpse
|
||||
name = "Nanotrasen Private Security Commander"
|
||||
uniform = /obj/item/clothing/under/rank/centcom_commander
|
||||
suit = /obj/item/clothing/suit/armor/bulletproof
|
||||
ears = /obj/item/radio/headset/heads/captain
|
||||
glasses = /obj/item/clothing/glasses/eyepatch
|
||||
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
|
||||
head = /obj/item/clothing/head/centhat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
shoes = /obj/item/clothing/shoes/combat/swat
|
||||
r_pocket = /obj/item/lighter
|
||||
id = /obj/item/card/id
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/nanotrasensoldier
|
||||
name = "Nanotrasen Private Security Officer"
|
||||
id_job = "Private Security Force"
|
||||
id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE, ACCESS_SECURITY)
|
||||
outfit = /datum/outfit/nanotrasensoldiercorpse
|
||||
|
||||
/datum/outfit/nanotrasensoldiercorpse
|
||||
name = "NT Private Security Officer Corpse"
|
||||
uniform = /obj/item/clothing/under/rank/security
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
mask = /obj/item/clothing/mask/gas/sechailer/swat
|
||||
head = /obj/item/clothing/head/helmet/swat/nanotrasen
|
||||
back = /obj/item/storage/backpack/security
|
||||
id = /obj/item/card/id
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/commander/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Nanotrasen Commander"
|
||||
mob_name = "Nanotrasen Commander"
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
flavour_text = "<span class='big bold'>You are a Nanotrasen Commander!</span>"
|
||||
|
||||
/obj/effect/mob_spawn/human/nanotrasensoldier/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
mob_name = "Private Security Officer"
|
||||
job_description = "Nanotrasen Security"
|
||||
name = "sleeper"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
faction = "nanotrasenprivate"
|
||||
flavour_text = "<span class='big bold'>You are a Nanotrasen Private Security Officer!</span>"
|
||||
|
||||
|
||||
/////////////////Spooky Undead//////////////////////
|
||||
|
||||
/obj/effect/mob_spawn/human/skeleton
|
||||
name = "skeletal remains"
|
||||
mob_name = "skeleton"
|
||||
mob_species = /datum/species/skeleton
|
||||
mob_gender = NEUTER
|
||||
|
||||
/obj/effect/mob_spawn/human/skeleton/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Skeleton"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
flavour_text = "<span class='big bold'>By unknown powers, your skeletal remains have been reanimated!</span><b> Walk this mortal plain and terrorize all living adventurers who dare cross your path.</b>"
|
||||
assignedrole = "Skeleton"
|
||||
|
||||
/obj/effect/mob_spawn/human/zombie
|
||||
name = "rotting corpse"
|
||||
mob_name = "zombie"
|
||||
mob_species = /datum/species/zombie
|
||||
assignedrole = "Zombie"
|
||||
|
||||
/obj/effect/mob_spawn/human/zombie/alive
|
||||
death = FALSE
|
||||
roundstart = FALSE
|
||||
job_description = "Zombie"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
flavour_text = "<span class='big bold'>By unknown powers, your rotting remains have been resurrected!</span><b> Walk this mortal plain and terrorize all living adventurers who dare cross your path.</b>"
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/abductor
|
||||
name = "abductor"
|
||||
mob_name = "alien"
|
||||
mob_species = /datum/species/abductor
|
||||
outfit = /datum/outfit/abductorcorpse
|
||||
|
||||
/datum/outfit/abductorcorpse
|
||||
name = "Abductor Corpse"
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
|
||||
|
||||
//For ghost bar.
|
||||
/obj/effect/mob_spawn/human/alive/space_bar_patron
|
||||
name = "Bar cryogenics"
|
||||
mob_name = "Bar patron"
|
||||
random = TRUE
|
||||
permanent = TRUE
|
||||
uses = -1
|
||||
outfit = /datum/outfit/spacebartender
|
||||
assignedrole = "Space Bar Patron"
|
||||
job_description = "Space Bar Patron"
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user)
|
||||
var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No")
|
||||
if(despawn == "No" || !loc || !Adjacent(user))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user.name] climbs back into cryosleep...</span>")
|
||||
qdel(user)
|
||||
|
||||
/datum/outfit/cryobartender
|
||||
name = "Cryogenic Bartender"
|
||||
uniform = /obj/item/clothing/under/rank/bartender
|
||||
back = /obj/item/storage/backpack
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight
|
||||
name = "odd cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "a displaced knight from another dimension"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
id_job = "Knight"
|
||||
job_description = "Cydonian Knight"
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
outfit = /datum/outfit/lavaknight
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth."
|
||||
assignedrole = "Cydonian Knight"
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/special(mob/living/new_spawn)
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.dna.features["mam_ears"] = "Cat, Big" //cat people
|
||||
H.dna.features["mcolor"] = H.hair_color
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/Destroy()
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
return ..()
|
||||
|
||||
/datum/outfit/lavaknight
|
||||
name = "Cydonian Knight"
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
r_pocket = /obj/item/melee/transforming/energy/sword/cx
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/lavaknight
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
id = /obj/item/card/id/knight/blue
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/captain
|
||||
name = "odd gilded cryogenics pod"
|
||||
desc = "A humming cryo pod that appears to be gilded. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth. \
|
||||
You feel a natural instict to lead, and as such, you should strive to lead your comrades to safety, and hopefully home. You also feel a burning determination to uphold your vow, as well as your fellow comrade's."
|
||||
outfit = /datum/outfit/lavaknight/captain
|
||||
id_job = "Knight Captain"
|
||||
|
||||
/datum/outfit/lavaknight/captain
|
||||
name ="Cydonian Knight Captain"
|
||||
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
|
||||
id = /obj/item/card/id/knight/captain
|
||||
@@ -0,0 +1,348 @@
|
||||
|
||||
//Academy Areas
|
||||
|
||||
/area/awaymission/academy
|
||||
name = "Academy Asteroids"
|
||||
icon_state = "away"
|
||||
|
||||
/area/awaymission/academy/headmaster
|
||||
name = "Academy Fore Block"
|
||||
icon_state = "away1"
|
||||
|
||||
/area/awaymission/academy/classrooms
|
||||
name = "Academy Classroom Block"
|
||||
icon_state = "away2"
|
||||
|
||||
/area/awaymission/academy/academyaft
|
||||
name = "Academy Ship Aft Block"
|
||||
icon_state = "away3"
|
||||
|
||||
/area/awaymission/academy/academygate
|
||||
name = "Academy Gateway"
|
||||
icon_state = "away4"
|
||||
|
||||
/area/awaymission/academy/academycellar
|
||||
name = "Academy Cellar"
|
||||
icon_state = "away4"
|
||||
|
||||
/area/awaymission/academy/academyengine
|
||||
name = "Academy Engine"
|
||||
icon_state = "away4"
|
||||
|
||||
//Academy Items
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/console_maint
|
||||
name = "Console Maintenance"
|
||||
info = "We're upgrading to the latest mainframes for our consoles, the shipment should be in before spring break is over!"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/class/automotive
|
||||
name = "Automotive Repair 101"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/class/pyromancy
|
||||
name = "Pyromancy 250"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/class/biology
|
||||
name = "Biology Lab"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/grade/aplus
|
||||
name = "Summoning Midterm Exam"
|
||||
info = "Grade: A+ Educator's Notes: Excellent form."
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/grade/bminus
|
||||
name = "Summoning Midterm Exam"
|
||||
info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/grade/dminus
|
||||
name = "Summoning Midterm Exam"
|
||||
info = "Grade: D- Educator's Notes: SEE ME AFTER CLASS."
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/academy/grade/failure
|
||||
name = "Pyromancy Evaluation"
|
||||
info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutelage."
|
||||
|
||||
|
||||
/obj/singularity/academy
|
||||
dissipate = 0
|
||||
move_self = 0
|
||||
grav_pull = 1
|
||||
|
||||
/obj/singularity/academy/admin_investigate_setup()
|
||||
return
|
||||
|
||||
/obj/singularity/academy/process()
|
||||
eat()
|
||||
if(prob(1))
|
||||
mezzer()
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/meson/truesight
|
||||
name = "The Lens of Truesight"
|
||||
desc = "I can see forever!"
|
||||
icon_state = "monocle"
|
||||
item_state = "headset"
|
||||
|
||||
|
||||
/obj/structure/academy_wizard_spawner
|
||||
name = "Academy Defensive System"
|
||||
desc = "Made by Abjuration, Inc."
|
||||
icon = 'icons/obj/cult.dmi'
|
||||
icon_state = "forge"
|
||||
anchored = TRUE
|
||||
max_integrity = 200
|
||||
var/mob/living/current_wizard = null
|
||||
var/next_check = 0
|
||||
var/cooldown = 600
|
||||
var/faction = ROLE_WIZARD
|
||||
var/braindead_check = 0
|
||||
|
||||
/obj/structure/academy_wizard_spawner/New()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/structure/academy_wizard_spawner/Destroy()
|
||||
if(!broken)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/structure/academy_wizard_spawner/process()
|
||||
if(next_check < world.time)
|
||||
if(!current_wizard)
|
||||
for(var/mob/living/L in GLOB.player_list)
|
||||
if(L.z == src.z && L.stat != DEAD && !(faction in L.faction))
|
||||
summon_wizard()
|
||||
break
|
||||
else
|
||||
if(current_wizard.stat == DEAD)
|
||||
current_wizard = null
|
||||
summon_wizard()
|
||||
if(!current_wizard.client)
|
||||
if(!braindead_check)
|
||||
braindead_check = 1
|
||||
else
|
||||
braindead_check = 0
|
||||
give_control()
|
||||
next_check = world.time + cooldown
|
||||
|
||||
/obj/structure/academy_wizard_spawner/proc/give_control()
|
||||
set waitfor = FALSE
|
||||
|
||||
if(!current_wizard)
|
||||
return
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", ROLE_WIZARD, null, ROLE_WIZARD, 50, current_wizard)
|
||||
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Wizard Academy Defender")
|
||||
current_wizard.ghostize() // on the off chance braindead defender gets back in
|
||||
C.transfer_ckey(current_wizard, FALSE)
|
||||
|
||||
/obj/structure/academy_wizard_spawner/proc/summon_wizard()
|
||||
var/turf/T = src.loc
|
||||
var/mob/living/carbon/human/wizbody = new(T)
|
||||
wizbody.fully_replace_character_name(wizbody.real_name, "Academy Teacher")
|
||||
wizbody.mind_initialize()
|
||||
var/datum/mind/wizmind = wizbody.mind
|
||||
wizmind.special_role = "Academy Defender"
|
||||
wizmind.add_antag_datum(/datum/antagonist/wizard/academy)
|
||||
current_wizard = wizbody
|
||||
|
||||
give_control()
|
||||
|
||||
/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE)
|
||||
if(!broken)
|
||||
broken = 1
|
||||
visible_message("<span class='warning'>[src] breaks down!</span>")
|
||||
icon_state = "forge_off"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/datum/outfit/wizard/academy
|
||||
name = "Academy Wizard"
|
||||
r_pocket = null
|
||||
r_hand = null
|
||||
suit = /obj/item/clothing/suit/wizrobe/red
|
||||
head = /obj/item/clothing/head/wizard/red
|
||||
backpack_contents = list(/obj/item/storage/box/survival = 1)
|
||||
|
||||
/obj/item/dice/d20/fate
|
||||
name = "Die of Fate"
|
||||
desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky."
|
||||
icon_state = "d20"
|
||||
sides = 20
|
||||
can_be_rigged = FALSE
|
||||
var/reusable = 1
|
||||
var/used = 0
|
||||
|
||||
/obj/item/dice/d20/fate/one_use
|
||||
reusable = 0
|
||||
|
||||
/obj/item/dice/d20/fate/diceroll(mob/user)
|
||||
..()
|
||||
if(!used)
|
||||
if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards))
|
||||
to_chat(user, "<span class='warning'>You feel the magic of the dice is restricted to ordinary humans!</span>")
|
||||
return
|
||||
if(rigged)
|
||||
effect(user,rigged)
|
||||
else
|
||||
effect(user,result)
|
||||
|
||||
/obj/item/dice/d20/fate/equipped(mob/user, slot)
|
||||
if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards))
|
||||
to_chat(user, "<span class='warning'>You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.</span>")
|
||||
user.dropItemToGround(src)
|
||||
|
||||
|
||||
/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll)
|
||||
if(!reusable)
|
||||
used = 1
|
||||
visible_message("<span class='userdanger'>The die flare briefly.</span>")
|
||||
switch(roll)
|
||||
if(1)
|
||||
//Dust
|
||||
user.dust()
|
||||
if(2)
|
||||
//Death
|
||||
user.death()
|
||||
if(3)
|
||||
//Swarm of creatures
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/turf/T = get_turf(src)
|
||||
new /mob/living/simple_animal/hostile/netherworld(get_step(T,direction))
|
||||
if(4)
|
||||
//Destroy Equipment
|
||||
for (var/obj/item/I in user)
|
||||
qdel(I)
|
||||
if(5)
|
||||
//Monkeying
|
||||
user.monkeyize()
|
||||
if(6)
|
||||
//Cut speed
|
||||
var/datum/species/S = user.dna.species
|
||||
S.speedmod += 1
|
||||
if(7)
|
||||
//Throw
|
||||
user.Stun(60)
|
||||
user.adjustBruteLoss(50)
|
||||
var/throw_dir = pick(GLOB.cardinals)
|
||||
var/atom/throw_target = get_edge_target_turf(user, throw_dir)
|
||||
user.throw_at(throw_target, 200, 4)
|
||||
if(8)
|
||||
//Fueltank Explosion
|
||||
explosion(loc,-1,0,2, flame_range = 2)
|
||||
if(9)
|
||||
//Cold
|
||||
var/datum/disease/D = new /datum/disease/cold()
|
||||
user.ForceContractDisease(D, FALSE, TRUE)
|
||||
if(10)
|
||||
//Nothing
|
||||
visible_message("<span class='notice'>[src] roll perfectly.</span>")
|
||||
if(11)
|
||||
//Cookie
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location())
|
||||
C.name = "Cookie of Fate"
|
||||
if(12)
|
||||
//Healing
|
||||
user.revive(full_heal = 1, admin_revive = 1)
|
||||
if(13)
|
||||
//Mad Dosh
|
||||
var/turf/Start = get_turf(src)
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/turf/T = get_step(Start,direction)
|
||||
if(rand(0,1))
|
||||
new /obj/item/stack/spacecash/c1000(T)
|
||||
else
|
||||
var/obj/item/storage/bag/money/M = new(T)
|
||||
for(var/i in 1 to rand(5,50))
|
||||
new /obj/item/coin/gold(M)
|
||||
if(14)
|
||||
//Free Gun
|
||||
new /obj/item/gun/ballistic/revolver/mateba(drop_location())
|
||||
if(15)
|
||||
//Random One-use spellbook
|
||||
new /obj/item/book/granter/spell/random(drop_location())
|
||||
if(16)
|
||||
//Servant & Servant Summon
|
||||
var/mob/living/carbon/human/H = new(drop_location())
|
||||
H.equipOutfit(/datum/outfit/butler)
|
||||
var/datum/mind/servant_mind = new /datum/mind()
|
||||
var/datum/antagonist/magic_servant/A = new
|
||||
servant_mind.add_antag_datum(A)
|
||||
A.setup_master(user)
|
||||
servant_mind.transfer_to(H)
|
||||
|
||||
var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", ROLE_WIZARD, null, ROLE_WIZARD, 50, H)
|
||||
if(LAZYLEN(candidates))
|
||||
var/mob/dead/observer/C = pick(candidates)
|
||||
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant")
|
||||
C.transfer_ckey(H, FALSE)
|
||||
|
||||
var/obj/effect/proc_holder/spell/targeted/summonmob/S = new
|
||||
S.target_mob = H
|
||||
user.mind.AddSpell(S)
|
||||
|
||||
if(17)
|
||||
//Tator Kit
|
||||
new /obj/item/storage/box/syndicate(drop_location())
|
||||
if(18)
|
||||
//Captain ID
|
||||
new /obj/item/card/id/captains_spare(drop_location())
|
||||
if(19)
|
||||
//Instrinct Resistance
|
||||
to_chat(user, "<span class='notice'>You feel robust.</span>")
|
||||
var/datum/species/S = user.dna.species
|
||||
S.brutemod *= 0.5
|
||||
S.burnmod *= 0.5
|
||||
S.coldmod *= 0.5
|
||||
if(20)
|
||||
//Free wizard!
|
||||
user.mind.make_Wizard()
|
||||
|
||||
|
||||
/datum/outfit/butler
|
||||
name = "Butler"
|
||||
uniform = /obj/item/clothing/under/suit_jacket/really_black
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
head = /obj/item/clothing/head/bowler
|
||||
glasses = /obj/item/clothing/glasses/monocle
|
||||
gloves = /obj/item/clothing/gloves/color/white
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/summonmob
|
||||
name = "Summon Servant"
|
||||
desc = "This spell can be used to call your servant, whenever you need it."
|
||||
charge_max = 100
|
||||
clothes_req = 0
|
||||
invocation = "JE VES"
|
||||
invocation_type = "whisper"
|
||||
range = -1
|
||||
level_max = 0 //cannot be improved
|
||||
cooldown_min = 100
|
||||
include_user = 1
|
||||
|
||||
var/mob/living/target_mob
|
||||
|
||||
action_icon_state = "summons"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets,mob/user = usr)
|
||||
if(!target_mob)
|
||||
return
|
||||
var/turf/Start = get_turf(user)
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/turf/T = get_step(Start,direction)
|
||||
if(!T.density)
|
||||
target_mob.Move(T)
|
||||
|
||||
/obj/structure/ladder/unbreakable/rune
|
||||
name = "\improper Teleportation Rune"
|
||||
desc = "Could lead anywhere."
|
||||
icon = 'icons/obj/rune.dmi'
|
||||
icon_state = "1"
|
||||
color = rgb(0,0,255)
|
||||
|
||||
/obj/structure/ladder/unbreakable/rune/update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user)
|
||||
user.visible_message("[user] activates \the [src].","<span class='notice'>You activate \the [src].</span>")
|
||||
|
||||
/obj/structure/ladder/unbreakable/rune/use(mob/user, is_ghost=FALSE)
|
||||
if(is_ghost || !(user.mind in SSticker.mode.wizards))
|
||||
..()
|
||||
@@ -0,0 +1,681 @@
|
||||
//Snow Valley Areas//--
|
||||
|
||||
/area/awaymission/snowdin
|
||||
name = "Snowdin"
|
||||
icon_state = "awaycontent1"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
|
||||
/area/awaymission/snowdin/outside
|
||||
name = "Snowdin Tundra Plains"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/snowdin/outside/vip
|
||||
name = "Snowdin Tundra Plains"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/snowdin/post
|
||||
name = "Snowdin Outpost"
|
||||
icon_state = "awaycontent2"
|
||||
requires_power = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/snowdin/post/medbay
|
||||
name = "Snowdin Outpost - Medbay"
|
||||
icon_state = "awaycontent3"
|
||||
|
||||
/area/awaymission/snowdin/post/secpost
|
||||
name = "Snowdin Outpost - Security Checkpoint"
|
||||
icon_state = "awaycontent4"
|
||||
|
||||
/area/awaymission/snowdin/post/hydro
|
||||
name = "Snowdin Outpost - Hydroponics"
|
||||
icon_state = "awaycontent5"
|
||||
|
||||
/area/awaymission/snowdin/post/messhall
|
||||
name = "Snowdin Outpost - Mess Hall"
|
||||
icon_state = "awaycontent6"
|
||||
|
||||
/area/awaymission/snowdin/post/gateway
|
||||
name = "Snowdin Outpost - Gateway"
|
||||
icon_state = "awaycontent7"
|
||||
|
||||
/area/awaymission/snowdin/post/dorm
|
||||
name = "Snowdin Outpost - Dorms"
|
||||
icon_state = "awaycontent8"
|
||||
|
||||
/area/awaymission/snowdin/post/kitchen
|
||||
name = "Snowdin Outpost - Kitchen"
|
||||
icon_state = "awaycontent9"
|
||||
|
||||
/area/awaymission/snowdin/post/engineering
|
||||
name = "Snowdin Outpost - Engineering"
|
||||
icon_state = "awaycontent10"
|
||||
|
||||
/area/awaymission/snowdin/post/custodials
|
||||
name = "Snowdin Outpost - Custodials"
|
||||
icon_state = "awaycontent11"
|
||||
|
||||
/area/awaymission/snowdin/post/research
|
||||
name = "Snowdin Outpost - Research Area"
|
||||
icon_state = "awaycontent12"
|
||||
|
||||
/area/awaymission/snowdin/post/garage
|
||||
name = "Snowdin Outpost - Garage"
|
||||
icon_state = "awaycontent13"
|
||||
|
||||
/area/awaymission/snowdin/post/minipost
|
||||
name = "Snowdin Outpost - Recon Post"
|
||||
icon_state = "awaycontent19"
|
||||
|
||||
/area/awaymission/snowdin/post/mining_main
|
||||
name = "Snowdin Outpost - Mining Post"
|
||||
icon_state = "awaycontent21"
|
||||
|
||||
/area/awaymission/snowdin/post/mining_main/mechbay
|
||||
name = "Snowdin Outpost - Mining Post Mechbay"
|
||||
icon_state = "awaycontent25"
|
||||
|
||||
/area/awaymission/snowdin/post/mining_main/robotics
|
||||
name = "Snowdin Outpost - Mining Post Robotics"
|
||||
icon_state = "awaycontent26"
|
||||
|
||||
/area/awaymission/snowdin/post/cavern1
|
||||
name = "Snowdin Outpost - Cavern Outpost 1"
|
||||
icon_state = "awaycontent27"
|
||||
|
||||
/area/awaymission/snowdin/post/cavern2
|
||||
name = "Snowdin Outpost - Cavern Outpost 2"
|
||||
icon_state = "awaycontent28"
|
||||
|
||||
/area/awaymission/snowdin/post/mining_dock
|
||||
name = "Snowdin Outpost - Underground Mine Post"
|
||||
icon_state = "awaycontent22"
|
||||
|
||||
/area/awaymission/snowdin/post/broken_shuttle
|
||||
name = "Snowdin Outpost - Broken Transit Shuttle"
|
||||
icon_state = "awaycontent20"
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/snowdin/igloo
|
||||
name = "Snowdin Igloos"
|
||||
icon_state = "awaycontent14"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
/area/awaymission/snowdin/cave
|
||||
name = "Snowdin Caves"
|
||||
icon_state = "awaycontent15"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
|
||||
/area/awaymission/snowdin/cave/cavern
|
||||
name = "Snowdin Depths"
|
||||
icon_state = "awaycontent23"
|
||||
|
||||
/area/awaymission/snowdin/cave/mountain
|
||||
name = "Snowdin Mountains"
|
||||
icon_state = "awaycontent24"
|
||||
|
||||
|
||||
/area/awaymission/snowdin/base
|
||||
name = "Snowdin Main Base"
|
||||
icon_state = "awaycontent16"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
requires_power = FALSE
|
||||
|
||||
/area/awaymission/snowdin/dungeon1
|
||||
name = "Snowdin Depths"
|
||||
icon_state = "awaycontent17"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
|
||||
/area/awaymission/snowdin/sekret
|
||||
name = "Snowdin Operations"
|
||||
icon_state = "awaycontent18"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
requires_power = TRUE
|
||||
|
||||
/area/shuttle/snowdin/elevator1
|
||||
name = "Excavation Elevator"
|
||||
|
||||
/area/shuttle/snowdin/elevator2
|
||||
name = "Mining Elevator"
|
||||
|
||||
//shuttle console for elevators//
|
||||
|
||||
/obj/machinery/computer/shuttle/snowdin/mining
|
||||
name = "shuttle console"
|
||||
desc = "A shuttle control computer."
|
||||
icon_screen = "shuttle"
|
||||
icon_keyboard = "tech_key"
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
shuttleId = "snowdin_mining"
|
||||
possible_destinations = "snowdin_mining_top;snowdin_mining_down"
|
||||
|
||||
|
||||
//liquid plasma!!!!!!//
|
||||
|
||||
/turf/open/floor/plasteel/dark/snowdin
|
||||
initial_gas_mix = FROZEN_ATMOS
|
||||
planetary_atmos = 1
|
||||
temperature = 180
|
||||
|
||||
/turf/open/lava/plasma
|
||||
name = "liquid plasma"
|
||||
desc = "A flowing stream of chilled liquid plasma. You probably shouldn't get in."
|
||||
icon_state = "liquidplasma"
|
||||
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
|
||||
baseturfs = /turf/open/lava/plasma
|
||||
slowdown = 2
|
||||
|
||||
light_range = 3
|
||||
light_power = 0.75
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
|
||||
/turf/open/lava/plasma/attackby(obj/item/I, mob/user, params)
|
||||
var/obj/item/reagent_containers/glass/C = I
|
||||
if(C.reagents.total_volume >= C.volume)
|
||||
to_chat(user, "<span class='danger'>[C] is full.</span>")
|
||||
return
|
||||
C.reagents.add_reagent("plasma", rand(5, 10))
|
||||
user.visible_message("[user] scoops some plasma from the [src] with \the [C].", "<span class='notice'>You scoop out some plasma from the [src] using \the [C].</span>")
|
||||
|
||||
/turf/open/lava/plasma/burn_stuff(AM)
|
||||
. = 0
|
||||
|
||||
if(is_safe())
|
||||
return FALSE
|
||||
|
||||
var/thing_to_check = src
|
||||
if (AM)
|
||||
thing_to_check = list(AM)
|
||||
for(var/thing in thing_to_check)
|
||||
if(isobj(thing))
|
||||
var/obj/O = thing
|
||||
if((O.resistance_flags & (FREEZE_PROOF)) || O.throwing)
|
||||
continue
|
||||
|
||||
else if (isliving(thing))
|
||||
. = 1
|
||||
var/mob/living/L = thing
|
||||
if(L.movement_type & FLYING)
|
||||
continue //YOU'RE FLYING OVER IT
|
||||
if("snow" in L.weather_immunities)
|
||||
continue
|
||||
|
||||
var/buckle_check = L.buckling
|
||||
if(!buckle_check)
|
||||
buckle_check = L.buckled
|
||||
if(isobj(buckle_check))
|
||||
var/obj/O = buckle_check
|
||||
if(O.resistance_flags & FREEZE_PROOF)
|
||||
continue
|
||||
|
||||
else if(isliving(buckle_check))
|
||||
var/mob/living/live = buckle_check
|
||||
if("snow" in live.weather_immunities)
|
||||
continue
|
||||
|
||||
L.adjustFireLoss(2)
|
||||
if(L)
|
||||
L.adjust_fire_stacks(20) //dipping into a stream of plasma would probably make you more flammable than usual
|
||||
L.adjust_bodytemperature(-rand(50,65)) //its cold, man
|
||||
if(ishuman(L))//are they a carbon?
|
||||
var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs
|
||||
var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman
|
||||
var/mob/living/carbon/human/PP = L
|
||||
var/S = PP.dna.species
|
||||
if(istype(S, /datum/species/plasmaman) || istype(S, /datum/species/android) || istype(S, /datum/species/synth)) //ignore plasmamen/robotic species
|
||||
continue
|
||||
|
||||
for(var/BP in PP.bodyparts)
|
||||
var/obj/item/bodypart/NN = BP
|
||||
if(NN.status == BODYPART_ORGANIC && NN.species_id != "plasmaman") //getting every organic, non-plasmaman limb (augments/androids are immune to this)
|
||||
plasma_parts += NN
|
||||
if(NN.status == BODYPART_ROBOTIC)
|
||||
robo_parts += NN
|
||||
|
||||
if(prob(35)) //checking if the delay is over & if the victim actually has any parts to nom
|
||||
PP.adjustToxLoss(15)
|
||||
PP.adjustFireLoss(25)
|
||||
if(plasma_parts.len)
|
||||
var/obj/item/bodypart/NB = pick(plasma_parts) //using the above-mentioned list to get a choice of limbs for dismember() to use
|
||||
PP.emote("scream")
|
||||
NB.species_id = "plasmaman"//change the species_id of the limb to that of a plasmaman
|
||||
NB.no_update = TRUE
|
||||
NB.change_bodypart_status()
|
||||
PP.visible_message("<span class='warning'>[L] screams in pain as [L.p_their()] [NB] melts down to the bone!</span>", \
|
||||
"<span class='userdanger'>You scream out in pain as your [NB] melts down to the bone, leaving an eerie plasma-like glow where flesh used to be!</span>")
|
||||
if(!plasma_parts.len && !robo_parts.len) //a person with no potential organic limbs left AND no robotic limbs, time to turn them into a plasmaman
|
||||
PP.IgniteMob()
|
||||
PP.set_species(/datum/species/plasmaman)
|
||||
PP.visible_message("<span class='warning'>[L] bursts into a brilliant purple flame as [L.p_their()] entire body is that of a skeleton!</span>", \
|
||||
"<span class='userdanger'>Your senses numb as all of your remaining flesh is turned into a purple slurry, sloshing off your body and leaving only your bones to show in a vibrant purple!</span>")
|
||||
|
||||
|
||||
/obj/vehicle/ridden/lavaboat/plasma
|
||||
name = "plasma boat"
|
||||
desc = "A boat used for traversing the streams of plasma without turning into an icecube."
|
||||
icon_state = "goliath_boat"
|
||||
icon = 'icons/obj/lavaland/dragonboat.dmi'
|
||||
resistance_flags = FREEZE_PROOF
|
||||
can_buckle = TRUE
|
||||
/////////// papers
|
||||
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/foreshadowing
|
||||
name = "scribbled note"
|
||||
info = {"Something's gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me,
|
||||
telling me to mind my own business. I reported him to the officer, said he'd look into it. We only got another 2 months here before we're pulled for another assignment, so this shit can't go any quicker..."}
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/misc1
|
||||
name = "Mission Prologue"
|
||||
info = {"Holy shit, what a rush! Those Nanotrasen bastards didn't even know what hit 'em! All five of us dropped in right on the captain, didn't even have time to yell! We were in and out with that disk in mere minutes!
|
||||
Crew didn't even know what was happening till the delta alert went down and by then we were already gone. We got a case to drink on the way home to celebrate, fuckin' job well done!"}
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/dontdeadopeninside
|
||||
name = "scribbled note"
|
||||
info = {"If you're reading this: GET OUT! The mining go on here has unearthed something that was once-trapped by the layers of ice on this hell-hole. The overseer and Jouslen have gone missing. The officer is
|
||||
keeping the rest of us on lockdown and I swear to god I keep hearing strange noises outside the walls at night. The gateway link has gone dead and without a supply of resources from Central, we're left
|
||||
for dead here. We haven't heard anything back from the mining squad either, so I can only assume whatever the fuck they unearthed got them first before coming for us. I don't want to die here..."}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/saw_usage
|
||||
name = "SAW Usage"
|
||||
info = "YOU SEEN IVAN, WHEN YOU HOLD SAAW LIKE PEESTOL, YOU STRONGER THAN RECOIL FOR FEAR OF HITTING FACE!"
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/research_feed
|
||||
name = "Research Feed"
|
||||
info = {"<i>A page full of graphs and other detailed information on the seismic activity of the surrounding area.</i>"}
|
||||
|
||||
//profile of each of the old crewmembers for the outpost
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/overseer
|
||||
name = "Personnel Record AOP#01"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Caleb Reed<br><b>Age:</b>38<br><b>Gender:</b>Male<br><b>On-Site Profession:</b>Outpost Overseer<br><br><center><b>Information</b></center><br><center>Caleb Reed lead several expeditions
|
||||
among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the
|
||||
expedition of <b>_______</b>, where mis-used of explosive ordinance for tunneling causes a cave-in."}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/sec1
|
||||
name = "Personnel Record AOP#02"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>James Reed<br><b>Age:</b>43<br><b>Gender:</b>Male<br><b>On-Site Profession:</b>Outpost Security<br><br><center><b>Information</b></center><br><center>James Reed has been a part
|
||||
of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen
|
||||
when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1
|
||||
name = "Personnel Record AOP#03"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Katherine Esterdeen<br><b>Age:</b>27<br><b>Gender:</b>Female<br><b>On-Site Profession:</b>Outpost Botanist<br><br><center><b>Information</b></center><br><center>Katherine Esterdeen is a recent
|
||||
graduate with a major in Botany and a PH.D in Ecology. Having a clean record and eager to work, Esterdeen seems to be the right fit for maintaining plants in the middle of nowhere."}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/engi1
|
||||
name = "Personnel Record AOP#04"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Rachel Migro<br><b>Age:</b>35<br><b>Gender:</b>Female<br><b>On-Site Profession:</b>Outpost Engineer<br><br><center><b>Information</b></center><br><center>Recently certified to be a full-time Journeyman, Rachel has
|
||||
been assigned various construction projects in the past 5 years. Competent and has no past infractions, should be of little concern."}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/research1
|
||||
name = "Personnel Record AOP#05"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Jacob Ullman<br><b>Age:</b>27<br><b>Gender:</b>Male<br><b>On-Site Profession:</b>Outpost Researcher<br><br><center><b>Information</b></center><br><center>"}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/research2
|
||||
name = "Personnel Record AOP#06"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Elizabeth Queef<br><b>Age:</b>28<br><b>Gender:</b>Female<br><b>On-Site Profession:</b>Outpost Researcher<br><br><center><b>Information</b></center><br><center>"}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/profile/research3
|
||||
name = "Personnel Record AOP#07"
|
||||
info = {"<b><center>Personnel Log</b></center><br><br><b>Name:</b>Jouslen McGee<br><b>Age:</b>38<br><b>Gender:</b>Male<br><b>On-Site Profession:</b>Outpost Researcher<br><br><center><b>Information</b></center><br><center>"}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/secnotice
|
||||
name = "Security Notice"
|
||||
info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked
|
||||
staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the
|
||||
offending crewmember."}
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/mining
|
||||
name = "Assignment Notice"
|
||||
info = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\
|
||||
Nanotrasen pays by the pound, so get minin' boys!"}
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/lootstructures
|
||||
name = "scribbled note"
|
||||
info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensed mixture of ice and snow. We've already barricaded up the ones we've found so far,
|
||||
since we keep hearing some strange noises from inside. Besides, what sort of fool would wrecklessly run into ancient ruins full of monsters for some old gear, anyway?"}
|
||||
|
||||
/obj/item/paper/crumpled/ruins/snowdin/shovel
|
||||
name = "shoveling duties"
|
||||
info = {"Snow piles up bad here all-year round, even worse during the winter months. Keeping a constant rotation of shoveling that shit out of the way of the airlocks and keeping the paths decently clear
|
||||
is a good step towards not getting stuck walking through knee-deep snow."}
|
||||
|
||||
//holo disk recording//--
|
||||
|
||||
/obj/item/disk/holodisk/snowdin/weregettingpaidright
|
||||
name = "Conversation #AOP#23"
|
||||
preset_image_type = /datum/preset_holoimage/researcher
|
||||
preset_record_text = {"
|
||||
NAME Jacob Ullman
|
||||
DELAY 10
|
||||
SAY Have you gotten anything interesting on the scanners yet? The deep-drilling from the plasma is making it difficult to get anything that isn't useless noise.
|
||||
DELAY 45
|
||||
NAME Elizabeth Queef
|
||||
DELAY 10
|
||||
SAY Nah. I've been feeding the AI the results for the past 2 weeks to sift through the garbage and haven't seen anything out of the usual, at least whatever Nanotrasen is looking for.
|
||||
DELAY 45
|
||||
NAME Jacob Ullman
|
||||
DELAY 10
|
||||
SAY Figured as much. Dunno what Nanotrasen expects to find out here past the plasma. At least we're getting paid to fuck around for a couple months while the AI does the hard work.
|
||||
DELAY 45
|
||||
NAME Elizabeth Queef
|
||||
DELAY 10
|
||||
SAY . . .
|
||||
DELAY 10
|
||||
SAY ..We're getting paid?
|
||||
DELAY 20
|
||||
NAME Jacob Ullman
|
||||
DELAY 10
|
||||
SAY ..We are getting paid, aren't we..?
|
||||
DELAY 15
|
||||
PRESET /datum/preset_holoimage/captain
|
||||
NAME Caleb Reed
|
||||
DELAY 10
|
||||
SAY Paid in experience! That's the Nanotrasen Motto!
|
||||
DELAY 30;"}
|
||||
|
||||
/obj/item/disk/holodisk/snowdin/welcometodie
|
||||
name = "Conversation #AOP#1"
|
||||
preset_image_type = /datum/preset_holoimage/corgi
|
||||
preset_record_text = {"
|
||||
NAME Friendly AI Unit
|
||||
DELAY 10
|
||||
SAY Hello! Welcome to the Arctic Post *338-3**$$!
|
||||
DELAY 30
|
||||
SAY You have been selected out of $)@! potential candidates for this post!
|
||||
DELAY 30
|
||||
SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector!
|
||||
DELAY 30
|
||||
SAY Further job assignment information can be found at your local security post! Have a secure day!
|
||||
DELAY 20;"}
|
||||
|
||||
/obj/item/disk/holodisk/snowdin/overrun
|
||||
name = "Conversation #AOP#55"
|
||||
preset_image_type = /datum/preset_holoimage/nanotrasenprivatesecurity
|
||||
preset_record_text = {"
|
||||
NAME James Reed
|
||||
DELAY 10
|
||||
SAY Jesus christ, what is that thing??
|
||||
DELAY 30
|
||||
PRESET /datum/preset_holoimage/researcher
|
||||
NAME Elizabeth Queef
|
||||
DELAY 10
|
||||
SAY Hell if I know! Just shoot it already!
|
||||
DELAY 30
|
||||
PRESET /datum/preset_holoimage/nanotrasenprivatesecurity
|
||||
NAME James Reed
|
||||
DELAY 10
|
||||
SOUND sound/weapons/laser.ogg
|
||||
DELAY 10
|
||||
SOUND sound/weapons/laser.ogg
|
||||
DELAY 10
|
||||
SOUND sound/weapons/laser.ogg
|
||||
DELAY 10
|
||||
SOUND sound/weapons/laser.ogg
|
||||
DELAY 15
|
||||
SAY Just go! I'll keep it busy, there's an outpost south of here with an elevator to the surface.
|
||||
NAME Jacob Ullman
|
||||
PRESET /datum/preset_holoimage/researcher.
|
||||
DELAY 15
|
||||
Say I don't have to be told twice! Let's get the fuck out of here.
|
||||
DELAY 20;"}
|
||||
|
||||
/obj/item/disk/holodisk/snowdin/ripjacob
|
||||
name = "Conversation #AOP#62"
|
||||
preset_image_type = /datum/preset_holoimage/researcher
|
||||
preset_record_text = {"
|
||||
NAME Jacob Ullman
|
||||
DELAY 10
|
||||
SAY Get the elevator called. We got no idea how many of those fuckers are down here and I'd rather get off this planet as soon as possible.
|
||||
DELAY 45
|
||||
NAME Elizabeth Queef
|
||||
DELAY 10
|
||||
SAY You don't need to tell me twice, I just need to swipe access and then..
|
||||
DELAY 15
|
||||
SOUND sound/effects/glassbr1.ogg
|
||||
DELAY 10
|
||||
SOUND sound/effects/glassbr2.ogg
|
||||
DELAY 15
|
||||
NAME Jacob Ullman
|
||||
DELAY 10
|
||||
SAY What the FUCK was that?
|
||||
DELAY 20
|
||||
SAY OH FUCK THERE'S MORE OF THEM. CALL FASTER JESUS CHRIST.
|
||||
DELAY 20
|
||||
NAME Elizabeth Queef
|
||||
DELAY 10
|
||||
SAY DON'T FUCKING RUSH ME ALRIGHT IT'S BEING CALLED.
|
||||
DELAY 15
|
||||
SOUND sound/effects/huuu.ogg
|
||||
DELAY 5
|
||||
SOUND sound/effects/huuu.ogg
|
||||
DELAY 15
|
||||
SOUND sound/effects/woodhit.ogg
|
||||
DELAY 2
|
||||
SOUND sound/effects/bodyfall3.ogg
|
||||
DELAY 5
|
||||
SOUND sound/effects/meow1.ogg
|
||||
DELAY 15
|
||||
NAME Jacob Ullman
|
||||
DELAY 15
|
||||
SAY OH FUCK IT'S GOT ME JESUS CHRIIIiiii-
|
||||
NAME Elizabeth Queef
|
||||
SAY AAAAAAAAAAAAAAAA FUCK THAT
|
||||
DELAY 15;"}
|
||||
|
||||
//lootspawners//--
|
||||
|
||||
/obj/effect/spawner/lootdrop/snowdin
|
||||
name = "why are you using this dummy"
|
||||
lootdoubles = 0
|
||||
lootcount = 1
|
||||
loot = list(/obj/item/bikehorn = 100)
|
||||
|
||||
/obj/effect/spawner/lootdrop/snowdin/dungeonlite
|
||||
name = "dungeon lite"
|
||||
loot = list(/obj/item/melee/classic_baton = 11,
|
||||
/obj/item/melee/classic_baton/telescopic = 12,
|
||||
/obj/item/book/granter/spell/smoke = 10,
|
||||
/obj/item/book/granter/spell/blind = 10,
|
||||
/obj/item/storage/firstaid/regular = 45,
|
||||
/obj/item/storage/firstaid/toxin = 35,
|
||||
/obj/item/storage/firstaid/brute = 27,
|
||||
/obj/item/storage/firstaid/fire = 27,
|
||||
/obj/item/storage/toolbox/syndicate = 12,
|
||||
/obj/item/grenade/plastic/c4 = 7,
|
||||
/obj/item/grenade/clusterbuster/smoke = 15,
|
||||
/obj/item/clothing/under/chameleon = 13,
|
||||
/obj/item/clothing/shoes/chameleon/noslip = 10,
|
||||
/obj/item/borg/upgrade/ddrill = 3,
|
||||
/obj/item/borg/upgrade/soh = 3)
|
||||
|
||||
/obj/effect/spawner/lootdrop/snowdin/dungeonmid
|
||||
name = "dungeon mid"
|
||||
loot = list(/obj/item/defibrillator/compact = 6,
|
||||
/obj/item/storage/firstaid/tactical = 35,
|
||||
/obj/item/shield/energy = 6,
|
||||
/obj/item/shield/riot/tele = 12,
|
||||
/obj/item/dnainjector/lasereyesmut = 7,
|
||||
/obj/item/gun/magic/wand/fireball/inert = 3,
|
||||
/obj/item/pneumatic_cannon = 15,
|
||||
/obj/item/melee/transforming/energy/sword = 7,
|
||||
/obj/item/book/granter/spell/knock = 15,
|
||||
/obj/item/book/granter/spell/summonitem = 20,
|
||||
/obj/item/book/granter/spell/forcewall = 17,
|
||||
/obj/item/storage/backpack/holding = 12,
|
||||
/obj/item/grenade/spawnergrenade/manhacks = 6,
|
||||
/obj/item/grenade/spawnergrenade/spesscarp = 7,
|
||||
/obj/item/grenade/clusterbuster/inferno = 3,
|
||||
/obj/item/stack/sheet/mineral/diamond{amount = 15} = 10,
|
||||
/obj/item/stack/sheet/mineral/uranium{amount = 15} = 10,
|
||||
/obj/item/stack/sheet/mineral/plasma{amount = 15} = 10,
|
||||
/obj/item/stack/sheet/mineral/gold{amount = 15} = 10,
|
||||
/obj/item/book/granter/spell/barnyard = 4,
|
||||
/obj/item/pickaxe/drill/diamonddrill = 6,
|
||||
/obj/item/borg/upgrade/vtec = 7,
|
||||
/obj/item/borg/upgrade/disablercooler = 7)
|
||||
|
||||
|
||||
/obj/effect/spawner/lootdrop/snowdin/dungeonheavy
|
||||
name = "dungeon heavy"
|
||||
loot = list(/obj/item/twohanded/singularityhammer = 25,
|
||||
/obj/item/twohanded/mjollnir = 10,
|
||||
/obj/item/twohanded/fireaxe = 25,
|
||||
/obj/item/organ/brain/alien = 17,
|
||||
/obj/item/twohanded/dualsaber = 15,
|
||||
/obj/item/organ/heart/demon = 7,
|
||||
/obj/item/gun/ballistic/automatic/c20r/unrestricted = 16,
|
||||
/obj/item/gun/magic/wand/resurrection/inert = 15,
|
||||
/obj/item/gun/magic/wand/resurrection = 10,
|
||||
/obj/item/uplink/old = 2,
|
||||
/obj/item/book/granter/spell/charge = 12,
|
||||
/obj/item/grenade/clusterbuster/spawner_manhacks = 15,
|
||||
/obj/item/book/granter/spell/fireball = 10,
|
||||
/obj/item/pickaxe/drill/jackhammer = 30,
|
||||
/obj/item/borg/upgrade/syndicate = 13,
|
||||
/obj/item/borg/upgrade/selfrepair = 17)
|
||||
|
||||
/obj/effect/spawner/lootdrop/snowdin/dungeonmisc
|
||||
name = "dungeon misc"
|
||||
lootdoubles = 2
|
||||
lootcount = 1
|
||||
|
||||
loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10,
|
||||
/obj/item/toy/snowball = 15,
|
||||
/obj/item/shovel = 10,
|
||||
/obj/item/twohanded/spear = 8,
|
||||
)
|
||||
|
||||
//special items//--
|
||||
|
||||
/obj/structure/barricade/wooden/snowed
|
||||
name = "crude plank barricade"
|
||||
desc = "This space is blocked off by a wooden barricade. It seems to be covered in a layer of snow."
|
||||
icon_state = "woodenbarricade-snow"
|
||||
max_integrity = 125
|
||||
|
||||
/obj/item/clothing/under/syndicate/coldres
|
||||
name = "insulated tactical turtleneck"
|
||||
desc = "A nondescript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection."
|
||||
armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25)
|
||||
cold_protection = CHEST|GROIN|ARMS|LEGS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/clothing/shoes/combat/coldres
|
||||
name = "insulated combat boots"
|
||||
desc = "High speed, low drag combat boots, now with an added layer of insulation."
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
|
||||
/obj/item/gun/magic/wand/fireball/inert
|
||||
name = "weakened wand of fireball"
|
||||
desc = "This wand shoots scorching balls of fire that explode into destructive flames. The years of the cold have weakened the magic inside the wand."
|
||||
max_charges = 4
|
||||
|
||||
/obj/item/gun/magic/wand/resurrection/inert
|
||||
name = "weakened wand of healing"
|
||||
desc = "This wand uses healing magics to heal and revive. The years of the cold have weakened the magic inside the wand."
|
||||
max_charges = 5
|
||||
|
||||
/obj/effect/mob_spawn/human/syndicatesoldier/coldres
|
||||
name = "Syndicate Snow Operative"
|
||||
outfit = /datum/outfit/snowsyndie/corpse
|
||||
|
||||
/datum/outfit/snowsyndie/corpse
|
||||
name = "Syndicate Snow Operative Corpse"
|
||||
implants = null
|
||||
|
||||
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive
|
||||
name = "sleeper"
|
||||
mob_name = "Syndicate Snow Operative"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
job_description = "Syndicate Snow Operative"
|
||||
faction = ROLE_SYNDICATE
|
||||
outfit = /datum/outfit/snowsyndie
|
||||
flavour_text = "<span class='big bold'>You are a syndicate operative recently awoken from cryostasis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be \
|
||||
disposed of swiftly to assure no gathered information is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself.</span>"
|
||||
|
||||
/datum/outfit/snowsyndie
|
||||
name = "Syndicate Snow Operative"
|
||||
uniform = /obj/item/clothing/under/syndicate/coldres
|
||||
shoes = /obj/item/clothing/shoes/combat/coldres
|
||||
ears = /obj/item/radio/headset/syndicate/alt
|
||||
r_pocket = /obj/item/gun/ballistic/automatic/pistol
|
||||
id = /obj/item/card/id/syndicate
|
||||
implants = list(/obj/item/implant/exile)
|
||||
|
||||
/datum/outfit/vr/snowtide
|
||||
name = "Snowdin Outfit"
|
||||
shoes = /obj/item/clothing/shoes/winterboots
|
||||
suit = /obj/item/clothing/suit/hooded/wintercoat
|
||||
back = /obj/item/storage/backpack
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
internals_slot = SLOT_R_STORE
|
||||
|
||||
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
|
||||
mob_gender = FEMALE
|
||||
|
||||
//mobs//--
|
||||
|
||||
//ice spiders moved to giant_spiders.dm
|
||||
|
||||
//objs//--
|
||||
|
||||
/obj/structure/flora/rock/icy
|
||||
name = "icy rock"
|
||||
color = rgb(204,233,235)
|
||||
|
||||
/obj/structure/flora/rock/pile/icy
|
||||
name = "icey rocks"
|
||||
color = rgb(204,233,235)
|
||||
|
||||
//decals//--
|
||||
/obj/effect/turf_decal/snowdin_station_sign
|
||||
icon_state = "AOP1"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/two
|
||||
icon_state = "AOP2"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/three
|
||||
icon_state = "AOP3"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/four
|
||||
icon_state = "AOP4"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/five
|
||||
icon_state = "AOP5"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/six
|
||||
icon_state = "AOP6"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/seven
|
||||
icon_state = "AOP7"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up
|
||||
icon_state = "AOPU1"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/two
|
||||
icon_state = "AOPU2"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/three
|
||||
icon_state = "AOPU3"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/four
|
||||
icon_state = "AOPU4"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/five
|
||||
icon_state = "AOPU5"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/six
|
||||
icon_state = "AOPU6"
|
||||
|
||||
/obj/effect/turf_decal/snowdin_station_sign/up/seven
|
||||
icon_state = "AOPU7"
|
||||
|
||||
/obj/effect/landmark/vr_spawn/snowdin
|
||||
vr_outfit = /datum/outfit/vr/snowtide
|
||||
Reference in New Issue
Block a user