mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-27 06:00:23 +01:00
Whitespace Standardization [MDB IGNORE] (#15748)
* Update settings * Whitespace changes * Comment out merger hooks in gitattributes Corrupt maps would have to be resolved in repo before hooks could be updated * Revert "Whitespace changes" This reverts commitafbdd1d844. * Whitespace again minus example * Gitignore example changelog * Restore changelog merge setting * Keep older dmi hook attribute until hooks can be updated * update vscode settings too * Renormalize remaining * Revert "Gitignore example changelog" This reverts commitde22ad375d. * Attempt to normalize example.yml (and another file I guess) * Try again
This commit is contained in:
@@ -1,51 +1,51 @@
|
||||
|
||||
/obj/machinery/artillerycontrol
|
||||
var/reload = 180
|
||||
name = "bluespace artillery control"
|
||||
icon_state = "control_boxp1"
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/artillerycontrol/process()
|
||||
if(src.reload<180)
|
||||
src.reload++
|
||||
|
||||
/obj/structure/artilleryplaceholder
|
||||
name = "artillery"
|
||||
icon = 'icons/obj/machines/artillery.dmi'
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/artilleryplaceholder/decorative
|
||||
density = FALSE
|
||||
|
||||
/obj/machinery/artillerycontrol/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Bluespace Artillery Control:</B><BR>"
|
||||
dat += "Locked on<BR>"
|
||||
dat += "<B>Charge progress: [reload]/180:</B><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
||||
dat += "Deployment of weapon authorized by <br>[using_map.company_name] Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||
user << browse(dat, "window=scroll")
|
||||
onclose(user, "scroll")
|
||||
return
|
||||
|
||||
/obj/machinery/artillerycontrol/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
var/A = tgui_input_list(usr, "Area to jump bombard", "Open Fire", teleportlocs)
|
||||
var/area/thearea = teleportlocs[A]
|
||||
if (usr.stat || usr.restrained()) return
|
||||
if(src.reload < 180) return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
|
||||
message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
L+=T
|
||||
var/loc = pick(L)
|
||||
explosion(loc,2,5,11)
|
||||
reload = 0
|
||||
|
||||
/obj/machinery/artillerycontrol
|
||||
var/reload = 180
|
||||
name = "bluespace artillery control"
|
||||
icon_state = "control_boxp1"
|
||||
icon = 'icons/obj/machines/particle_accelerator2.dmi'
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/artillerycontrol/process()
|
||||
if(src.reload<180)
|
||||
src.reload++
|
||||
|
||||
/obj/structure/artilleryplaceholder
|
||||
name = "artillery"
|
||||
icon = 'icons/obj/machines/artillery.dmi'
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/artilleryplaceholder/decorative
|
||||
density = FALSE
|
||||
|
||||
/obj/machinery/artillerycontrol/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Bluespace Artillery Control:</B><BR>"
|
||||
dat += "Locked on<BR>"
|
||||
dat += "<B>Charge progress: [reload]/180:</B><BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
||||
dat += "Deployment of weapon authorized by <br>[using_map.company_name] Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||
user << browse(dat, "window=scroll")
|
||||
onclose(user, "scroll")
|
||||
return
|
||||
|
||||
/obj/machinery/artillerycontrol/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
var/A = tgui_input_list(usr, "Area to jump bombard", "Open Fire", teleportlocs)
|
||||
var/area/thearea = teleportlocs[A]
|
||||
if (usr.stat || usr.restrained()) return
|
||||
if(src.reload < 180) return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
|
||||
message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
L+=T
|
||||
var/loc = pick(L)
|
||||
explosion(loc,2,5,11)
|
||||
reload = 0
|
||||
|
||||
+381
-381
@@ -1,381 +1,381 @@
|
||||
//These are meant for spawning on maps, namely Away Missions.
|
||||
|
||||
//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/landmark/corpse
|
||||
name = "Unknown"
|
||||
var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now
|
||||
var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse.
|
||||
var/corpsesuit = null
|
||||
var/corpseshoes = null
|
||||
var/corpsegloves = null
|
||||
var/corpseradio = null
|
||||
var/corpseglasses = null
|
||||
var/corpsemask = null
|
||||
var/corpsehelmet = null
|
||||
var/corpsebelt = null
|
||||
var/corpsepocket1 = null
|
||||
var/corpsepocket2 = null
|
||||
var/corpseback = null
|
||||
var/corpseid = 0 //Just set to 1 if you want them to have an ID
|
||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
||||
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
||||
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake.
|
||||
// var/random_appearance = FALSE //TODO: make this work
|
||||
// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death
|
||||
delete_me = TRUE
|
||||
|
||||
/obj/effect/landmark/corpse/Initialize()
|
||||
..()
|
||||
createCorpse()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
M.low_sorting_priority = TRUE
|
||||
if(random_species)
|
||||
var/random_pick = pick(random_species_list)
|
||||
M.set_species(random_pick)
|
||||
src.species = random_pick
|
||||
else
|
||||
M.set_species(species)
|
||||
//TODO: insert appearance randomization, needs to be species-based
|
||||
M.real_name = src.name
|
||||
M.death(1) //Kills the new mob
|
||||
//TODO: insert cause of death handling/wound simulation here
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(src.corpseshoes)
|
||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||
if(src.corpsegloves)
|
||||
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
||||
if(src.corpseradio)
|
||||
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
||||
if(src.corpseglasses)
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
||||
if(src.corpsepocket2)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
||||
if(src.corpseback)
|
||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||
if(src.corpseid == 1)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == corpseidaccess)
|
||||
jobdatum = J
|
||||
break
|
||||
if(src.corpseidicon)
|
||||
W.icon_state = corpseidicon
|
||||
if(src.corpseidaccess)
|
||||
if(jobdatum)
|
||||
W.access = jobdatum.get_access()
|
||||
else
|
||||
W.access = list()
|
||||
if(corpseidjob)
|
||||
W.assignment = corpseidjob
|
||||
M.set_id_info(W)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
// Do suit last to avoid equipping issues
|
||||
if(src.corpsehelmet)
|
||||
M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species)
|
||||
if(src.corpsesuit)
|
||||
M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species)
|
||||
|
||||
|
||||
|
||||
// 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.
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatesoldier
|
||||
name = "Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatecommando
|
||||
name = "Mercenary Commando"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/merc
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
///////////Civilians//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/random_civ
|
||||
name = "Civilian"
|
||||
corpseuniform = /obj/item/clothing/under/color/grey
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
random_species = TRUE
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/chef
|
||||
name = "Chef"
|
||||
corpseuniform = /obj/item/clothing/under/rank/chef
|
||||
corpsesuit = /obj/item/clothing/suit/chef/classic
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpsehelmet = /obj/item/clothing/head/chefhat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseid = 1
|
||||
corpseidjob = "Chef"
|
||||
corpseidaccess = "Chef"
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/doctor
|
||||
name = "Doctor"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_med
|
||||
corpseuniform = /obj/item/clothing/under/rank/medical
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
corpseback = /obj/item/weapon/storage/backpack/medic
|
||||
corpsepocket1 = /obj/item/device/flashlight/pen
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Medical Doctor"
|
||||
corpseidaccess = "Medical Doctor"
|
||||
|
||||
/obj/effect/landmark/corpse/engineer
|
||||
name = "Engineer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_eng
|
||||
corpseuniform = /obj/item/clothing/under/rank/engineer
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/orange
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpsegloves = /obj/item/clothing/gloves/yellow
|
||||
corpsehelmet = /obj/item/clothing/head/hardhat
|
||||
corpseid = 1
|
||||
corpseidjob = "Engineer"
|
||||
corpseidaccess = "Engineer"
|
||||
|
||||
/obj/effect/landmark/corpse/engineer/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/engineering
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
|
||||
/obj/effect/landmark/corpse/clown
|
||||
name = "Clown"
|
||||
corpseuniform = /obj/item/clothing/under/rank/clown
|
||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||
corpseback = /obj/item/weapon/storage/backpack/clown
|
||||
corpseid = 1
|
||||
corpseidjob = "Clown"
|
||||
corpseidaccess = "Clown"
|
||||
|
||||
/obj/effect/landmark/corpse/scientist
|
||||
name = "Scientist"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sci
|
||||
corpseuniform = /obj/item/clothing/under/rank/scientist
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseshoes = /obj/item/clothing/shoes/white
|
||||
corpseid = 1
|
||||
corpseidjob = "Scientist"
|
||||
corpseidaccess = "Scientist"
|
||||
|
||||
/obj/effect/landmark/corpse/security
|
||||
name = "Security Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sec
|
||||
corpseuniform = /obj/item/clothing/under/rank/security
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseback = /obj/item/weapon/storage/backpack/security
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpsehelmet = /obj/item/clothing/head/helmet
|
||||
corpseid = 1
|
||||
corpseidjob = "Security Officer"
|
||||
corpseidaccess = "Security Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig/eva
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security/alt
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt
|
||||
corpseidjob = "Starship Security Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/prisoner
|
||||
name = "Unknown Prisoner"
|
||||
corpseuniform = /obj/item/clothing/under/color/prison
|
||||
corpseshoes = /obj/item/clothing/shoes/orange
|
||||
corpseid = 1
|
||||
corpseidjob = "Prisoner"
|
||||
random_species = TRUE
|
||||
|
||||
/obj/effect/landmark/corpse/miner
|
||||
corpseradio = /obj/item/device/radio/headset/headset_cargo
|
||||
corpseuniform = /obj/item/clothing/under/rank/miner
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Shaft Miner"
|
||||
corpseidaccess = "Shaft Miner"
|
||||
|
||||
/obj/effect/landmark/corpse/miner/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/mining
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
|
||||
/////////////////Vintage//////////////////////
|
||||
|
||||
//define the basic props at this level and only change specifics for variants, e.z.
|
||||
/obj/effect/landmark/corpse/vintage
|
||||
name = "Unknown Crewmate"
|
||||
corpseuniform = /obj/item/clothing/under/utility
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
corpseid = 1
|
||||
corpseidjob = "Crewmate"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/engineering
|
||||
name = "Unknown Engineer"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/engineering
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/engineering
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpseback = /obj/item/weapon/tank/oxygen/yellow
|
||||
corpseidjob = "Engineer"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/marine
|
||||
name = "Unknown Marine"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/marine
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/marine
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseidjob = "Marine"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/medical
|
||||
name = "Unknown Medic"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/medical
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/medical
|
||||
corpsebelt = /obj/item/weapon/storage/belt/medical
|
||||
corpseidjob = "Medic"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/mercenary
|
||||
name = "Unknown Mercenary"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/mercenary
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/mercenary
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseback = /obj/item/weapon/tank/oxygen/red
|
||||
corpseidjob = "Mercenary"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/officer
|
||||
name = "Unknown Captain"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/officer
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/officer
|
||||
corpseback = /obj/item/weapon/tank/oxygen/yellow
|
||||
corpseidjob = "Captain"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/pilot
|
||||
name = "Unknown Pilot"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/pilot
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/pilot
|
||||
corpseidjob = "Pilot"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/research
|
||||
name = "Unknown Researcher"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/research
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/research
|
||||
corpseidjob = "Researcher"
|
||||
|
||||
/////////////////Officers//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/bridgeofficer
|
||||
name = "Bridge Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/heads/hop
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_officer
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses
|
||||
corpseid = 1
|
||||
corpseidjob = "Bridge Officer"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
/obj/effect/landmark/corpse/commander
|
||||
name = "Commander"
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_captain
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseradio = /obj/item/device/radio/headset/heads/captain
|
||||
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
||||
corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
||||
corpsehelmet = /obj/item/clothing/head/centhat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsepocket1 = /obj/item/weapon/flame/lighter/zippo
|
||||
corpseid = 1
|
||||
corpseidjob = "Commander"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
/////////////////Lore Factions//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/sifguard
|
||||
name = "Patrolman"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsemask = /obj/item/clothing/mask/balaclava
|
||||
corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard
|
||||
corpsegloves = /obj/item/clothing/gloves/duty
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard
|
||||
corpseid = 1
|
||||
corpseidjob = "Sif Defense Force Patrolman"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg/merc
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Enforcer"
|
||||
|
||||
//These are meant for spawning on maps, namely Away Missions.
|
||||
|
||||
//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/landmark/corpse
|
||||
name = "Unknown"
|
||||
var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now
|
||||
var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse.
|
||||
var/corpsesuit = null
|
||||
var/corpseshoes = null
|
||||
var/corpsegloves = null
|
||||
var/corpseradio = null
|
||||
var/corpseglasses = null
|
||||
var/corpsemask = null
|
||||
var/corpsehelmet = null
|
||||
var/corpsebelt = null
|
||||
var/corpsepocket1 = null
|
||||
var/corpsepocket2 = null
|
||||
var/corpseback = null
|
||||
var/corpseid = 0 //Just set to 1 if you want them to have an ID
|
||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
||||
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
||||
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake.
|
||||
// var/random_appearance = FALSE //TODO: make this work
|
||||
// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death
|
||||
delete_me = TRUE
|
||||
|
||||
/obj/effect/landmark/corpse/Initialize()
|
||||
..()
|
||||
createCorpse()
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
M.low_sorting_priority = TRUE
|
||||
if(random_species)
|
||||
var/random_pick = pick(random_species_list)
|
||||
M.set_species(random_pick)
|
||||
src.species = random_pick
|
||||
else
|
||||
M.set_species(species)
|
||||
//TODO: insert appearance randomization, needs to be species-based
|
||||
M.real_name = src.name
|
||||
M.death(1) //Kills the new mob
|
||||
//TODO: insert cause of death handling/wound simulation here
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(src.corpseshoes)
|
||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||
if(src.corpsegloves)
|
||||
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
||||
if(src.corpseradio)
|
||||
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
||||
if(src.corpseglasses)
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
||||
if(src.corpsepocket2)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
||||
if(src.corpseback)
|
||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||
if(src.corpseid == 1)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == corpseidaccess)
|
||||
jobdatum = J
|
||||
break
|
||||
if(src.corpseidicon)
|
||||
W.icon_state = corpseidicon
|
||||
if(src.corpseidaccess)
|
||||
if(jobdatum)
|
||||
W.access = jobdatum.get_access()
|
||||
else
|
||||
W.access = list()
|
||||
if(corpseidjob)
|
||||
W.assignment = corpseidjob
|
||||
M.set_id_info(W)
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
// Do suit last to avoid equipping issues
|
||||
if(src.corpsehelmet)
|
||||
M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species)
|
||||
if(src.corpsesuit)
|
||||
M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species)
|
||||
|
||||
|
||||
|
||||
// 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.
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatesoldier
|
||||
name = "Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatecommando
|
||||
name = "Mercenary Commando"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/merc
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/syndicate
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
|
||||
corpseid = 1
|
||||
corpseidjob = "Operative"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
///////////Civilians//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/random_civ
|
||||
name = "Civilian"
|
||||
corpseuniform = /obj/item/clothing/under/color/grey
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
random_species = TRUE
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/chef
|
||||
name = "Chef"
|
||||
corpseuniform = /obj/item/clothing/under/rank/chef
|
||||
corpsesuit = /obj/item/clothing/suit/chef/classic
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpsehelmet = /obj/item/clothing/head/chefhat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpseid = 1
|
||||
corpseidjob = "Chef"
|
||||
corpseidaccess = "Chef"
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/doctor
|
||||
name = "Doctor"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_med
|
||||
corpseuniform = /obj/item/clothing/under/rank/medical
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
corpseback = /obj/item/weapon/storage/backpack/medic
|
||||
corpsepocket1 = /obj/item/device/flashlight/pen
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Medical Doctor"
|
||||
corpseidaccess = "Medical Doctor"
|
||||
|
||||
/obj/effect/landmark/corpse/engineer
|
||||
name = "Engineer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_eng
|
||||
corpseuniform = /obj/item/clothing/under/rank/engineer
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/orange
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpsegloves = /obj/item/clothing/gloves/yellow
|
||||
corpsehelmet = /obj/item/clothing/head/hardhat
|
||||
corpseid = 1
|
||||
corpseidjob = "Engineer"
|
||||
corpseidaccess = "Engineer"
|
||||
|
||||
/obj/effect/landmark/corpse/engineer/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/engineering
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
|
||||
/obj/effect/landmark/corpse/clown
|
||||
name = "Clown"
|
||||
corpseuniform = /obj/item/clothing/under/rank/clown
|
||||
corpseshoes = /obj/item/clothing/shoes/clown_shoes
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas/clown_hat
|
||||
corpsepocket1 = /obj/item/weapon/bikehorn
|
||||
corpseback = /obj/item/weapon/storage/backpack/clown
|
||||
corpseid = 1
|
||||
corpseidjob = "Clown"
|
||||
corpseidaccess = "Clown"
|
||||
|
||||
/obj/effect/landmark/corpse/scientist
|
||||
name = "Scientist"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sci
|
||||
corpseuniform = /obj/item/clothing/under/rank/scientist
|
||||
corpsesuit = /obj/item/clothing/suit/storage/toggle/labcoat/science
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseshoes = /obj/item/clothing/shoes/white
|
||||
corpseid = 1
|
||||
corpseidjob = "Scientist"
|
||||
corpseidaccess = "Scientist"
|
||||
|
||||
/obj/effect/landmark/corpse/security
|
||||
name = "Security Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/headset_sec
|
||||
corpseuniform = /obj/item/clothing/under/rank/security
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseback = /obj/item/weapon/storage/backpack/security
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpsehelmet = /obj/item/clothing/head/helmet
|
||||
corpseid = 1
|
||||
corpseidjob = "Security Officer"
|
||||
corpseidaccess = "Security Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security
|
||||
corpseback = /obj/item/weapon/tank/jetpack/oxygen
|
||||
|
||||
/obj/effect/landmark/corpse/security/rig/eva
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/security/alt
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt
|
||||
corpseidjob = "Starship Security Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/prisoner
|
||||
name = "Unknown Prisoner"
|
||||
corpseuniform = /obj/item/clothing/under/color/prison
|
||||
corpseshoes = /obj/item/clothing/shoes/orange
|
||||
corpseid = 1
|
||||
corpseidjob = "Prisoner"
|
||||
random_species = TRUE
|
||||
|
||||
/obj/effect/landmark/corpse/miner
|
||||
corpseradio = /obj/item/device/radio/headset/headset_cargo
|
||||
corpseuniform = /obj/item/clothing/under/rank/miner
|
||||
corpsegloves = /obj/item/clothing/gloves/black
|
||||
corpseback = /obj/item/weapon/storage/backpack/industrial
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseid = 1
|
||||
corpseidjob = "Shaft Miner"
|
||||
corpseidaccess = "Shaft Miner"
|
||||
|
||||
/obj/effect/landmark/corpse/miner/rig
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/mining
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
|
||||
/////////////////Vintage//////////////////////
|
||||
|
||||
//define the basic props at this level and only change specifics for variants, e.z.
|
||||
/obj/effect/landmark/corpse/vintage
|
||||
name = "Unknown Crewmate"
|
||||
corpseuniform = /obj/item/clothing/under/utility
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb
|
||||
corpsemask = /obj/item/clothing/mask/breath
|
||||
corpseback = /obj/item/weapon/tank/oxygen
|
||||
corpseid = 1
|
||||
corpseidjob = "Crewmate"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/engineering
|
||||
name = "Unknown Engineer"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/engineering
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/engineering
|
||||
corpsebelt = /obj/item/weapon/storage/belt/utility/full
|
||||
corpseback = /obj/item/weapon/tank/oxygen/yellow
|
||||
corpseidjob = "Engineer"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/marine
|
||||
name = "Unknown Marine"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/marine
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/marine
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseidjob = "Marine"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/medical
|
||||
name = "Unknown Medic"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/medical
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/medical
|
||||
corpsebelt = /obj/item/weapon/storage/belt/medical
|
||||
corpseidjob = "Medic"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/mercenary
|
||||
name = "Unknown Mercenary"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/mercenary
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/mercenary
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseback = /obj/item/weapon/tank/oxygen/red
|
||||
corpseidjob = "Mercenary"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/officer
|
||||
name = "Unknown Captain"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/officer
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/officer
|
||||
corpseback = /obj/item/weapon/tank/oxygen/yellow
|
||||
corpseidjob = "Captain"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/pilot
|
||||
name = "Unknown Pilot"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/pilot
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/pilot
|
||||
corpseidjob = "Pilot"
|
||||
|
||||
/obj/effect/landmark/corpse/vintage/research
|
||||
name = "Unknown Researcher"
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/refurb/research
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/research
|
||||
corpseidjob = "Researcher"
|
||||
|
||||
/////////////////Officers//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/bridgeofficer
|
||||
name = "Bridge Officer"
|
||||
corpseradio = /obj/item/device/radio/headset/heads/hop
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_officer
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseshoes = /obj/item/clothing/shoes/black
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses
|
||||
corpseid = 1
|
||||
corpseidjob = "Bridge Officer"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
/obj/effect/landmark/corpse/commander
|
||||
name = "Commander"
|
||||
corpseuniform = /obj/item/clothing/under/rank/centcom_captain
|
||||
corpsesuit = /obj/item/clothing/suit/armor/bulletproof
|
||||
corpseradio = /obj/item/device/radio/headset/heads/captain
|
||||
corpseglasses = /obj/item/clothing/glasses/eyepatch
|
||||
corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba
|
||||
corpsehelmet = /obj/item/clothing/head/centhat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsepocket1 = /obj/item/weapon/flame/lighter/zippo
|
||||
corpseid = 1
|
||||
corpseidjob = "Commander"
|
||||
corpseidaccess = "Captain"
|
||||
|
||||
/////////////////Lore Factions//////////////////////
|
||||
|
||||
/obj/effect/landmark/corpse/sifguard
|
||||
name = "Patrolman"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/hooded/wintercoat/solgov
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsemask = /obj/item/clothing/mask/balaclava
|
||||
corpsehelmet = /obj/item/clothing/head/beret/solgov/sifguard
|
||||
corpsegloves = /obj/item/clothing/gloves/duty
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpsepocket1 = /obj/item/clothing/accessory/armor/tag/sifguard
|
||||
corpseid = 1
|
||||
corpseidjob = "Sif Defense Force Patrolman"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpseuniform = /obj/item/clothing/under/solgov/utility/sifguard
|
||||
corpsesuit = /obj/item/clothing/suit/storage/vest/solgov/hedberg
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/beret/corp/hedberg
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Officer"
|
||||
|
||||
/obj/effect/landmark/corpse/hedberg/merc
|
||||
name = "Hedberg-Hammarstrom Mercenary"
|
||||
corpsebelt = /obj/item/weapon/storage/belt/security/tactical
|
||||
corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/flexitac
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/tactical
|
||||
corpseid = 1
|
||||
corpseidjob = "Hedberg-Hammarstrom Enforcer"
|
||||
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
//////Exile implants will allow you to use the station gate, but not return home. This will allow security to exile badguys/for badguys to exile their kill targets////////
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/exile
|
||||
name = "implanter-exile"
|
||||
|
||||
/obj/item/weapon/implanter/exile/New()
|
||||
src.imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implant/exile
|
||||
name = "exile"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
|
||||
/obj/item/weapon/implant/exile/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> [using_map.company_name] Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implantcase/exile
|
||||
name = "Glass Case- 'Exile'"
|
||||
desc = "A case containing an exile implant."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "implantcase-r"
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/exile/New()
|
||||
src.imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/exile
|
||||
name = "Exile Implants"
|
||||
req_access = list(access_hos)
|
||||
starts_with = list(/obj/item/weapon/implanter/exile = 1, /obj/item/weapon/implantcase/exile = 5)
|
||||
//////Exile implants will allow you to use the station gate, but not return home. This will allow security to exile badguys/for badguys to exile their kill targets////////
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/exile
|
||||
name = "implanter-exile"
|
||||
|
||||
/obj/item/weapon/implanter/exile/New()
|
||||
src.imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implant/exile
|
||||
name = "exile"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
|
||||
/obj/item/weapon/implant/exile/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> [using_map.company_name] Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implantcase/exile
|
||||
name = "Glass Case- 'Exile'"
|
||||
desc = "A case containing an exile implant."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "implantcase-r"
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/exile/New()
|
||||
src.imp = new /obj/item/weapon/implant/exile( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/exile
|
||||
name = "Exile Implants"
|
||||
req_access = list(access_hos)
|
||||
starts_with = list(/obj/item/weapon/implanter/exile = 1, /obj/item/weapon/implantcase/exile = 5)
|
||||
|
||||
@@ -1,367 +1,367 @@
|
||||
/obj/machinery/gateway
|
||||
name = "gateway"
|
||||
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities." //VOREStation Edit
|
||||
icon = 'icons/obj/machines/gateway.dmi'
|
||||
icon_state = "off"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
unacidable = TRUE
|
||||
var/active = 0
|
||||
|
||||
|
||||
/obj/machinery/gateway/Initialize()
|
||||
update_icon()
|
||||
if(dir == SOUTH)
|
||||
density = FALSE
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/gateway/update_icon()
|
||||
if(active)
|
||||
icon_state = "on"
|
||||
return
|
||||
icon_state = "off"
|
||||
|
||||
|
||||
|
||||
//this is da important part wot makes things go
|
||||
GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
|
||||
/obj/machinery/gateway/centerstation
|
||||
density = TRUE
|
||||
icon_state = "offcenter"
|
||||
use_power = USE_POWER_IDLE
|
||||
|
||||
//warping vars
|
||||
var/list/linked = list()
|
||||
var/ready = 0 //have we got all the parts for a gateway?
|
||||
var/wait = 0 //this just grabs world.time at world start
|
||||
var/obj/machinery/gateway/centeraway/awaygate = null
|
||||
|
||||
/obj/machinery/gateway/centerstation/Initialize()
|
||||
if(GLOB.gateway_station)
|
||||
warning("[src] at [x],[y],[z] appears to be an additional station-gateway")
|
||||
else
|
||||
GLOB.gateway_station = src
|
||||
|
||||
update_icon()
|
||||
wait = world.time + config.gateway_delay //+ thirty minutes default
|
||||
|
||||
if(GLOB.gateway_away)
|
||||
awaygate = GLOB.gateway_away
|
||||
else
|
||||
awaygate = locate(/obj/machinery/gateway/centeraway)
|
||||
|
||||
. = ..()
|
||||
density = TRUE //VOREStation Add
|
||||
|
||||
/obj/machinery/gateway/centerstation/Destroy()
|
||||
if(awaygate?.stationgate == src)
|
||||
awaygate.stationgate = null
|
||||
if(GLOB.gateway_station == src)
|
||||
GLOB.gateway_station = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/centerstation/update_icon()
|
||||
if(active)
|
||||
icon_state = "oncenter"
|
||||
return
|
||||
icon_state = "offcenter"
|
||||
/* VOREStation Removal - Doesn't do anything
|
||||
/obj/machinery/gateway/centerstation/New()
|
||||
density = TRUE
|
||||
*/ //VOREStation Removal End
|
||||
|
||||
/obj/machinery/gateway/centerstation/process()
|
||||
if(stat & (NOPOWER))
|
||||
if(active) toggleoff()
|
||||
return
|
||||
|
||||
if(active)
|
||||
use_power(5000)
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/detect()
|
||||
linked = list() //clear the list
|
||||
var/turf/T = loc
|
||||
|
||||
for(var/i in alldirs)
|
||||
T = get_step(loc, i)
|
||||
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
|
||||
if(G)
|
||||
linked.Add(G)
|
||||
continue
|
||||
|
||||
//this is only done if we fail to find a part
|
||||
ready = 0
|
||||
toggleoff()
|
||||
break
|
||||
|
||||
if(linked.len == 8)
|
||||
ready = 1
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/toggleon(mob/user as mob)
|
||||
if(!ready) return
|
||||
if(linked.len != 8) return
|
||||
if(!powered()) return
|
||||
if(!awaygate)
|
||||
to_chat(user, "<span class='notice'>Error: No destination found. Please program gateway.</span>")
|
||||
return
|
||||
if(world.time < wait)
|
||||
to_chat(user, "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.</span>")
|
||||
return
|
||||
if(!awaygate.calibrated && !LAZYLEN(awaydestinations)) //VOREStation Edit
|
||||
to_chat(user, "<span class='notice'>Error: Destination gate uncalibrated. Gateway unsafe to use without far-end calibration update.</span>")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 1
|
||||
G.update_icon()
|
||||
active = 1
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/toggleoff()
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 0
|
||||
G.update_icon()
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/attack_hand(mob/user as mob)
|
||||
if(!ready)
|
||||
detect()
|
||||
return
|
||||
if(!active)
|
||||
toggleon(user)
|
||||
return
|
||||
toggleoff()
|
||||
|
||||
|
||||
//okay, here's the good teleporting stuff
|
||||
/obj/machinery/gateway/centerstation/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
if(!awaygate) return
|
||||
|
||||
use_power(5000)
|
||||
M << 'sound/effects/phasein.ogg'
|
||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||
if(awaygate.calibrated)
|
||||
M.forceMove(get_step(awaygate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
return
|
||||
else
|
||||
//VOREStation Addition Start: Prevent abuse
|
||||
if(istype(M, /obj/item/device/uav))
|
||||
var/obj/item/device/uav/L = M
|
||||
L.power_down()
|
||||
if(istype(M, /mob/living))
|
||||
var/mob/living/L = M
|
||||
if(LAZYLEN(L.buckled_mobs))
|
||||
var/datum/riding/R = L.riding_datum
|
||||
for(var/rider in L.buckled_mobs)
|
||||
R.force_dismount(rider)
|
||||
//VOREStation Addition End: Prevent abuse
|
||||
var/obj/effect/landmark/dest = pick(awaydestinations)
|
||||
if(dest)
|
||||
M.forceMove(dest.loc)
|
||||
M.set_dir(SOUTH)
|
||||
//VOREStation Addition Start: Mcguffin time!
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.client)
|
||||
awaygate.entrydetect()
|
||||
//VOREStation Addition End: Mcguffin time!
|
||||
|
||||
//VOREStation Addition Start: Abduction!
|
||||
if(istype(M, /mob/living) && dest.abductor)
|
||||
var/mob/living/L = M
|
||||
if(L.nutrition > 500)
|
||||
L.nutrition = 500 //If the aim is to negate people overpreparing, then they shouldn't be able to stuff themselves full of food either.
|
||||
//Situations to get the mob out of
|
||||
if(L.buckled)
|
||||
L.buckled.unbuckle_mob()
|
||||
if(istype(L.loc,/obj/mecha))
|
||||
var/obj/mecha/ME = L.loc
|
||||
ME.go_out()
|
||||
else if(istype(L.loc,/obj/machinery/sleeper))
|
||||
var/obj/machinery/sleeper/SL = L.loc
|
||||
SL.go_out()
|
||||
else if(istype(L.loc,/obj/machinery/recharge_station))
|
||||
var/obj/machinery/recharge_station/RS = L.loc
|
||||
RS.go_out()
|
||||
if(!issilicon(L)) //Don't drop borg modules...
|
||||
var/list/mob_contents = list() //Things which are actually drained as a result of the above not being null.
|
||||
mob_contents |= L // The recursive check below does not add the object being checked to its list.
|
||||
mob_contents |= recursive_content_check(L, mob_contents, recursion_limit = 3, client_check = 0, sight_check = 0, include_mobs = 1, include_objects = 1, ignore_show_messages = 1)
|
||||
for(var/obj/item/weapon/holder/I in mob_contents)
|
||||
var/obj/item/weapon/holder/H = I
|
||||
var/mob/living/MI = H.held_mob
|
||||
MI.forceMove(get_turf(H))
|
||||
if(!issilicon(MI)) //Don't drop borg modules...
|
||||
for(var/obj/item/II in MI)
|
||||
if(istype(II,/obj/item/weapon/implant) || istype(II,/obj/item/device/nif))
|
||||
continue
|
||||
MI.drop_from_inventory(II, dest.loc)
|
||||
var/obj/effect/landmark/finaldest = pick(awayabductors)
|
||||
MI.forceMove(finaldest.loc)
|
||||
sleep(1)
|
||||
MI.Paralyse(10)
|
||||
MI << 'sound/effects/bamf.ogg'
|
||||
to_chat(MI,"<span class='warning'>You're starting to come to. You feel like you've been out for a few minutes, at least...</span>")
|
||||
for(var/obj/item/I in L)
|
||||
if(istype(I,/obj/item/weapon/implant) || istype(I,/obj/item/device/nif))
|
||||
continue
|
||||
L.drop_from_inventory(I, dest.loc)
|
||||
var/obj/effect/landmark/finaldest = pick(awayabductors)
|
||||
L.forceMove(finaldest.loc)
|
||||
sleep(1)
|
||||
L.Paralyse(10)
|
||||
L << 'sound/effects/bamf.ogg'
|
||||
to_chat(L,"<span class='warning'>You're starting to come to. You feel like you've been out for a few minutes, at least...</span>")
|
||||
//VOREStation Addition End
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
if(!awaygate)
|
||||
if(GLOB.gateway_away)
|
||||
awaygate = GLOB.gateway_away
|
||||
else
|
||||
awaygate = locate(/obj/machinery/gateway/centeraway)
|
||||
if(!awaygate) // We still can't find the damn thing because there is no destination.
|
||||
to_chat(user, "<span class='notice'>Error: Programming failed. No destination found.</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'><b>Startup programming successful!</b></span>: A destination in another point of space and time has been detected.")
|
||||
else
|
||||
to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
|
||||
return
|
||||
|
||||
/////////////////////////////////////Away////////////////////////
|
||||
GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
|
||||
/obj/machinery/gateway/centeraway
|
||||
density = TRUE
|
||||
icon_state = "offcenter"
|
||||
use_power = USE_POWER_OFF
|
||||
var/calibrated = 1
|
||||
var/list/linked = list() //a list of the connected gateway chunks
|
||||
var/ready = 0
|
||||
var/obj/machinery/gateway/centerstation/stationgate = null
|
||||
|
||||
/obj/machinery/gateway/centeraway/New()
|
||||
density = TRUE
|
||||
|
||||
/obj/machinery/gateway/centeraway/Initialize()
|
||||
if(GLOB.gateway_away)
|
||||
warning("[src] at [x],[y],[z] appears to be an additional away-gateway")
|
||||
else
|
||||
GLOB.gateway_away = src
|
||||
|
||||
update_icon()
|
||||
|
||||
if(GLOB.gateway_station)
|
||||
stationgate = GLOB.gateway_station
|
||||
else
|
||||
stationgate = locate(/obj/machinery/gateway/centerstation)
|
||||
. = ..()
|
||||
density = TRUE //VOREStation Add
|
||||
|
||||
/obj/machinery/gateway/centeraway/Destroy()
|
||||
if(stationgate?.awaygate == src)
|
||||
stationgate.awaygate = null
|
||||
if(GLOB.gateway_away == src)
|
||||
GLOB.gateway_away = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/centeraway/update_icon()
|
||||
if(active)
|
||||
icon_state = "oncenter"
|
||||
return
|
||||
icon_state = "offcenter"
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/detect()
|
||||
linked = list() //clear the list
|
||||
var/turf/T = loc
|
||||
|
||||
for(var/i in alldirs)
|
||||
T = get_step(loc, i)
|
||||
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
|
||||
if(G)
|
||||
linked.Add(G)
|
||||
continue
|
||||
|
||||
//this is only done if we fail to find a part
|
||||
ready = 0
|
||||
toggleoff()
|
||||
break
|
||||
|
||||
if(linked.len == 8)
|
||||
ready = 1
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/toggleon(mob/user as mob)
|
||||
if(!ready) return
|
||||
if(linked.len != 8) return
|
||||
if(!stationgate || !calibrated) // Vorestation edit. Not like Polaris ever touches this anyway.
|
||||
to_chat(user, "<span class='notice'>Error: No destination found. Please calibrate gateway.</span>")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 1
|
||||
G.update_icon()
|
||||
active = 1
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/toggleoff()
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 0
|
||||
G.update_icon()
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/attack_hand(mob/user as mob)
|
||||
if(!ready)
|
||||
detect()
|
||||
return
|
||||
if(!active)
|
||||
toggleon(user)
|
||||
return
|
||||
toggleoff()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
if(istype(M, /mob/living/carbon))
|
||||
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
|
||||
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
|
||||
to_chat(M, span_black("The station gate has detected your exile implant and is blocking your entry."))
|
||||
return
|
||||
M.forceMove(get_step(stationgate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
M << 'sound/effects/phasein.ogg'
|
||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
if(calibrated && stationgate)
|
||||
to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
|
||||
return
|
||||
else
|
||||
// VOREStation Add
|
||||
if(GLOB.gateway_station)
|
||||
stationgate = GLOB.gateway_station
|
||||
else
|
||||
stationgate = locate(/obj/machinery/gateway/centerstation)
|
||||
if(!stationgate)
|
||||
to_chat(user, "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>")
|
||||
return
|
||||
// VOREStation Add End
|
||||
else
|
||||
to_chat(user, span_blue("<b>Recalibration successful!</b>:") + span_black(" This gate's systems have been fine tuned. Travel to this gate will now be on target."))
|
||||
calibrated = 1
|
||||
return
|
||||
/obj/machinery/gateway
|
||||
name = "gateway"
|
||||
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities." //VOREStation Edit
|
||||
icon = 'icons/obj/machines/gateway.dmi'
|
||||
icon_state = "off"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
unacidable = TRUE
|
||||
var/active = 0
|
||||
|
||||
|
||||
/obj/machinery/gateway/Initialize()
|
||||
update_icon()
|
||||
if(dir == SOUTH)
|
||||
density = FALSE
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/gateway/update_icon()
|
||||
if(active)
|
||||
icon_state = "on"
|
||||
return
|
||||
icon_state = "off"
|
||||
|
||||
|
||||
|
||||
//this is da important part wot makes things go
|
||||
GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation)
|
||||
/obj/machinery/gateway/centerstation
|
||||
density = TRUE
|
||||
icon_state = "offcenter"
|
||||
use_power = USE_POWER_IDLE
|
||||
|
||||
//warping vars
|
||||
var/list/linked = list()
|
||||
var/ready = 0 //have we got all the parts for a gateway?
|
||||
var/wait = 0 //this just grabs world.time at world start
|
||||
var/obj/machinery/gateway/centeraway/awaygate = null
|
||||
|
||||
/obj/machinery/gateway/centerstation/Initialize()
|
||||
if(GLOB.gateway_station)
|
||||
warning("[src] at [x],[y],[z] appears to be an additional station-gateway")
|
||||
else
|
||||
GLOB.gateway_station = src
|
||||
|
||||
update_icon()
|
||||
wait = world.time + config.gateway_delay //+ thirty minutes default
|
||||
|
||||
if(GLOB.gateway_away)
|
||||
awaygate = GLOB.gateway_away
|
||||
else
|
||||
awaygate = locate(/obj/machinery/gateway/centeraway)
|
||||
|
||||
. = ..()
|
||||
density = TRUE //VOREStation Add
|
||||
|
||||
/obj/machinery/gateway/centerstation/Destroy()
|
||||
if(awaygate?.stationgate == src)
|
||||
awaygate.stationgate = null
|
||||
if(GLOB.gateway_station == src)
|
||||
GLOB.gateway_station = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/centerstation/update_icon()
|
||||
if(active)
|
||||
icon_state = "oncenter"
|
||||
return
|
||||
icon_state = "offcenter"
|
||||
/* VOREStation Removal - Doesn't do anything
|
||||
/obj/machinery/gateway/centerstation/New()
|
||||
density = TRUE
|
||||
*/ //VOREStation Removal End
|
||||
|
||||
/obj/machinery/gateway/centerstation/process()
|
||||
if(stat & (NOPOWER))
|
||||
if(active) toggleoff()
|
||||
return
|
||||
|
||||
if(active)
|
||||
use_power(5000)
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/detect()
|
||||
linked = list() //clear the list
|
||||
var/turf/T = loc
|
||||
|
||||
for(var/i in alldirs)
|
||||
T = get_step(loc, i)
|
||||
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
|
||||
if(G)
|
||||
linked.Add(G)
|
||||
continue
|
||||
|
||||
//this is only done if we fail to find a part
|
||||
ready = 0
|
||||
toggleoff()
|
||||
break
|
||||
|
||||
if(linked.len == 8)
|
||||
ready = 1
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/toggleon(mob/user as mob)
|
||||
if(!ready) return
|
||||
if(linked.len != 8) return
|
||||
if(!powered()) return
|
||||
if(!awaygate)
|
||||
to_chat(user, "<span class='notice'>Error: No destination found. Please program gateway.</span>")
|
||||
return
|
||||
if(world.time < wait)
|
||||
to_chat(user, "<span class='notice'>Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.</span>")
|
||||
return
|
||||
if(!awaygate.calibrated && !LAZYLEN(awaydestinations)) //VOREStation Edit
|
||||
to_chat(user, "<span class='notice'>Error: Destination gate uncalibrated. Gateway unsafe to use without far-end calibration update.</span>")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 1
|
||||
G.update_icon()
|
||||
active = 1
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/proc/toggleoff()
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 0
|
||||
G.update_icon()
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centerstation/attack_hand(mob/user as mob)
|
||||
if(!ready)
|
||||
detect()
|
||||
return
|
||||
if(!active)
|
||||
toggleon(user)
|
||||
return
|
||||
toggleoff()
|
||||
|
||||
|
||||
//okay, here's the good teleporting stuff
|
||||
/obj/machinery/gateway/centerstation/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
if(!awaygate) return
|
||||
|
||||
use_power(5000)
|
||||
M << 'sound/effects/phasein.ogg'
|
||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||
if(awaygate.calibrated)
|
||||
M.forceMove(get_step(awaygate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
return
|
||||
else
|
||||
//VOREStation Addition Start: Prevent abuse
|
||||
if(istype(M, /obj/item/device/uav))
|
||||
var/obj/item/device/uav/L = M
|
||||
L.power_down()
|
||||
if(istype(M, /mob/living))
|
||||
var/mob/living/L = M
|
||||
if(LAZYLEN(L.buckled_mobs))
|
||||
var/datum/riding/R = L.riding_datum
|
||||
for(var/rider in L.buckled_mobs)
|
||||
R.force_dismount(rider)
|
||||
//VOREStation Addition End: Prevent abuse
|
||||
var/obj/effect/landmark/dest = pick(awaydestinations)
|
||||
if(dest)
|
||||
M.forceMove(dest.loc)
|
||||
M.set_dir(SOUTH)
|
||||
//VOREStation Addition Start: Mcguffin time!
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.client)
|
||||
awaygate.entrydetect()
|
||||
//VOREStation Addition End: Mcguffin time!
|
||||
|
||||
//VOREStation Addition Start: Abduction!
|
||||
if(istype(M, /mob/living) && dest.abductor)
|
||||
var/mob/living/L = M
|
||||
if(L.nutrition > 500)
|
||||
L.nutrition = 500 //If the aim is to negate people overpreparing, then they shouldn't be able to stuff themselves full of food either.
|
||||
//Situations to get the mob out of
|
||||
if(L.buckled)
|
||||
L.buckled.unbuckle_mob()
|
||||
if(istype(L.loc,/obj/mecha))
|
||||
var/obj/mecha/ME = L.loc
|
||||
ME.go_out()
|
||||
else if(istype(L.loc,/obj/machinery/sleeper))
|
||||
var/obj/machinery/sleeper/SL = L.loc
|
||||
SL.go_out()
|
||||
else if(istype(L.loc,/obj/machinery/recharge_station))
|
||||
var/obj/machinery/recharge_station/RS = L.loc
|
||||
RS.go_out()
|
||||
if(!issilicon(L)) //Don't drop borg modules...
|
||||
var/list/mob_contents = list() //Things which are actually drained as a result of the above not being null.
|
||||
mob_contents |= L // The recursive check below does not add the object being checked to its list.
|
||||
mob_contents |= recursive_content_check(L, mob_contents, recursion_limit = 3, client_check = 0, sight_check = 0, include_mobs = 1, include_objects = 1, ignore_show_messages = 1)
|
||||
for(var/obj/item/weapon/holder/I in mob_contents)
|
||||
var/obj/item/weapon/holder/H = I
|
||||
var/mob/living/MI = H.held_mob
|
||||
MI.forceMove(get_turf(H))
|
||||
if(!issilicon(MI)) //Don't drop borg modules...
|
||||
for(var/obj/item/II in MI)
|
||||
if(istype(II,/obj/item/weapon/implant) || istype(II,/obj/item/device/nif))
|
||||
continue
|
||||
MI.drop_from_inventory(II, dest.loc)
|
||||
var/obj/effect/landmark/finaldest = pick(awayabductors)
|
||||
MI.forceMove(finaldest.loc)
|
||||
sleep(1)
|
||||
MI.Paralyse(10)
|
||||
MI << 'sound/effects/bamf.ogg'
|
||||
to_chat(MI,"<span class='warning'>You're starting to come to. You feel like you've been out for a few minutes, at least...</span>")
|
||||
for(var/obj/item/I in L)
|
||||
if(istype(I,/obj/item/weapon/implant) || istype(I,/obj/item/device/nif))
|
||||
continue
|
||||
L.drop_from_inventory(I, dest.loc)
|
||||
var/obj/effect/landmark/finaldest = pick(awayabductors)
|
||||
L.forceMove(finaldest.loc)
|
||||
sleep(1)
|
||||
L.Paralyse(10)
|
||||
L << 'sound/effects/bamf.ogg'
|
||||
to_chat(L,"<span class='warning'>You're starting to come to. You feel like you've been out for a few minutes, at least...</span>")
|
||||
//VOREStation Addition End
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/centerstation/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
if(!awaygate)
|
||||
if(GLOB.gateway_away)
|
||||
awaygate = GLOB.gateway_away
|
||||
else
|
||||
awaygate = locate(/obj/machinery/gateway/centeraway)
|
||||
if(!awaygate) // We still can't find the damn thing because there is no destination.
|
||||
to_chat(user, "<span class='notice'>Error: Programming failed. No destination found.</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'><b>Startup programming successful!</b></span>: A destination in another point of space and time has been detected.")
|
||||
else
|
||||
to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
|
||||
return
|
||||
|
||||
/////////////////////////////////////Away////////////////////////
|
||||
GLOBAL_DATUM(gateway_away, /obj/machinery/gateway/centeraway)
|
||||
/obj/machinery/gateway/centeraway
|
||||
density = TRUE
|
||||
icon_state = "offcenter"
|
||||
use_power = USE_POWER_OFF
|
||||
var/calibrated = 1
|
||||
var/list/linked = list() //a list of the connected gateway chunks
|
||||
var/ready = 0
|
||||
var/obj/machinery/gateway/centerstation/stationgate = null
|
||||
|
||||
/obj/machinery/gateway/centeraway/New()
|
||||
density = TRUE
|
||||
|
||||
/obj/machinery/gateway/centeraway/Initialize()
|
||||
if(GLOB.gateway_away)
|
||||
warning("[src] at [x],[y],[z] appears to be an additional away-gateway")
|
||||
else
|
||||
GLOB.gateway_away = src
|
||||
|
||||
update_icon()
|
||||
|
||||
if(GLOB.gateway_station)
|
||||
stationgate = GLOB.gateway_station
|
||||
else
|
||||
stationgate = locate(/obj/machinery/gateway/centerstation)
|
||||
. = ..()
|
||||
density = TRUE //VOREStation Add
|
||||
|
||||
/obj/machinery/gateway/centeraway/Destroy()
|
||||
if(stationgate?.awaygate == src)
|
||||
stationgate.awaygate = null
|
||||
if(GLOB.gateway_away == src)
|
||||
GLOB.gateway_away = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/gateway/centeraway/update_icon()
|
||||
if(active)
|
||||
icon_state = "oncenter"
|
||||
return
|
||||
icon_state = "offcenter"
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/detect()
|
||||
linked = list() //clear the list
|
||||
var/turf/T = loc
|
||||
|
||||
for(var/i in alldirs)
|
||||
T = get_step(loc, i)
|
||||
var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T
|
||||
if(G)
|
||||
linked.Add(G)
|
||||
continue
|
||||
|
||||
//this is only done if we fail to find a part
|
||||
ready = 0
|
||||
toggleoff()
|
||||
break
|
||||
|
||||
if(linked.len == 8)
|
||||
ready = 1
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/toggleon(mob/user as mob)
|
||||
if(!ready) return
|
||||
if(linked.len != 8) return
|
||||
if(!stationgate || !calibrated) // Vorestation edit. Not like Polaris ever touches this anyway.
|
||||
to_chat(user, "<span class='notice'>Error: No destination found. Please calibrate gateway.</span>")
|
||||
return
|
||||
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 1
|
||||
G.update_icon()
|
||||
active = 1
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/toggleoff()
|
||||
for(var/obj/machinery/gateway/G in linked)
|
||||
G.active = 0
|
||||
G.update_icon()
|
||||
active = 0
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/attack_hand(mob/user as mob)
|
||||
if(!ready)
|
||||
detect()
|
||||
return
|
||||
if(!active)
|
||||
toggleon(user)
|
||||
return
|
||||
toggleoff()
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
if(istype(M, /mob/living/carbon))
|
||||
for(var/obj/item/weapon/implant/exile/E in M)//Checking that there is an exile implant in the contents
|
||||
if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket
|
||||
to_chat(M, span_black("The station gate has detected your exile implant and is blocking your entry."))
|
||||
return
|
||||
M.forceMove(get_step(stationgate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
M << 'sound/effects/phasein.ogg'
|
||||
playsound(src, 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
|
||||
/obj/machinery/gateway/centeraway/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/device/multitool))
|
||||
if(calibrated && stationgate)
|
||||
to_chat(user, span_black("The gate is already calibrated, there is no work for you to do here."))
|
||||
return
|
||||
else
|
||||
// VOREStation Add
|
||||
if(GLOB.gateway_station)
|
||||
stationgate = GLOB.gateway_station
|
||||
else
|
||||
stationgate = locate(/obj/machinery/gateway/centerstation)
|
||||
if(!stationgate)
|
||||
to_chat(user, "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>")
|
||||
return
|
||||
// VOREStation Add End
|
||||
else
|
||||
to_chat(user, span_blue("<b>Recalibration successful!</b>:") + span_black(" This gate's systems have been fine tuned. Travel to this gate will now be on target."))
|
||||
calibrated = 1
|
||||
return
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
//This gateway type takes a special item that you will have to find on the map to activate, instead of using a multitool//
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
calibrated = 0
|
||||
var/mcguffin_type = /obj/item/device/mcguffin/brass //you should be able to change the var to be whatever kind of path you like, so maybe you can use other things on it sometimes
|
||||
var/key //holds a ref to the key we spawned
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(calibrated && stationgate)
|
||||
to_chat(user, "<span class='info'>The gate is already configured, you should be able to activate it.</span>")
|
||||
return
|
||||
else if(!stationgate)
|
||||
to_chat(user, "<span class='danger'>Error: Configuration failed. No destination found... That can't be good.</span>")
|
||||
return
|
||||
|
||||
if(istype(W,mcguffin_type) && !calibrated)
|
||||
to_chat(user, "<span class='emote'>As the device nears the gateway, mechanical clunks and whirrs can be heard. <br>[span_blue("<b>Configuration successful! </b>")]<br>This gate's systems have been fine tuned. Travel to this gate will now be on target.</span>")
|
||||
calibrated = 1
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='danger'>This device does not seem to interface correctly with the gateway. Perhaps you should try something else.</span>")
|
||||
return
|
||||
|
||||
//If you use this kind of gateway you NEED one of these on the map or the players won't be able to leave//
|
||||
//You should use the random spawner though so it won't always be in the same place//
|
||||
/obj/item/device/mcguffin/brass
|
||||
name = "mysterious brass device"
|
||||
desc = "A curious object made of what appears to be brass and silver. Its purpose is unclear by looking at it. Perhaps it should be used with something of similar materials?"
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
icon_state = "mcguffin"
|
||||
drop_sound = 'sound/items/drop/wrench.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wrench.ogg'
|
||||
|
||||
/obj/effect/landmark/mcguffin_spawner
|
||||
name = "gateway key spawner"
|
||||
icon = 'icons/mob/randomlandmarks.dmi'
|
||||
icon_state = "key"
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/entrydetect()
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/entrydetect()
|
||||
if(key)
|
||||
return
|
||||
|
||||
var/list/spawners = list()
|
||||
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
|
||||
spawners += sp
|
||||
|
||||
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
|
||||
|
||||
var/atom/destination = get_turf(the_cool_one)
|
||||
var/obj/structure/closet/CL = locate() in destination
|
||||
if(CL)
|
||||
destination = CL
|
||||
|
||||
if(!destination)
|
||||
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
|
||||
destination = get_turf(src)
|
||||
|
||||
key = new mcguffin_type(destination)
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
M.forceMove(get_step(stationgate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
M << 'sound/effects/swooshygate.ogg'
|
||||
playsound(src, 'sound/effects/swooshygate.ogg', 100, 1)
|
||||
|
||||
/obj/machinery/gateway/brass
|
||||
name = "mysterious brass gateway"
|
||||
desc = "A gateway of strange construction. It appears to be made primarily of materials resembling brass and silver."
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
|
||||
//No, you can't digest the key to leave the gateway.
|
||||
/obj/item/device/mcguffin/digest_act(var/atom/movable/item_storage = null)
|
||||
return FALSE
|
||||
//This gateway type takes a special item that you will have to find on the map to activate, instead of using a multitool//
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
calibrated = 0
|
||||
var/mcguffin_type = /obj/item/device/mcguffin/brass //you should be able to change the var to be whatever kind of path you like, so maybe you can use other things on it sometimes
|
||||
var/key //holds a ref to the key we spawned
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/attackby(obj/item/device/W as obj, mob/user as mob)
|
||||
if(calibrated && stationgate)
|
||||
to_chat(user, "<span class='info'>The gate is already configured, you should be able to activate it.</span>")
|
||||
return
|
||||
else if(!stationgate)
|
||||
to_chat(user, "<span class='danger'>Error: Configuration failed. No destination found... That can't be good.</span>")
|
||||
return
|
||||
|
||||
if(istype(W,mcguffin_type) && !calibrated)
|
||||
to_chat(user, "<span class='emote'>As the device nears the gateway, mechanical clunks and whirrs can be heard. <br>[span_blue("<b>Configuration successful! </b>")]<br>This gate's systems have been fine tuned. Travel to this gate will now be on target.</span>")
|
||||
calibrated = 1
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='danger'>This device does not seem to interface correctly with the gateway. Perhaps you should try something else.</span>")
|
||||
return
|
||||
|
||||
//If you use this kind of gateway you NEED one of these on the map or the players won't be able to leave//
|
||||
//You should use the random spawner though so it won't always be in the same place//
|
||||
/obj/item/device/mcguffin/brass
|
||||
name = "mysterious brass device"
|
||||
desc = "A curious object made of what appears to be brass and silver. Its purpose is unclear by looking at it. Perhaps it should be used with something of similar materials?"
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
icon_state = "mcguffin"
|
||||
drop_sound = 'sound/items/drop/wrench.ogg'
|
||||
pickup_sound = 'sound/items/pickup/wrench.ogg'
|
||||
|
||||
/obj/effect/landmark/mcguffin_spawner
|
||||
name = "gateway key spawner"
|
||||
icon = 'icons/mob/randomlandmarks.dmi'
|
||||
icon_state = "key"
|
||||
|
||||
/obj/machinery/gateway/centeraway/proc/entrydetect()
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/entrydetect()
|
||||
if(key)
|
||||
return
|
||||
|
||||
var/list/spawners = list()
|
||||
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
|
||||
spawners += sp
|
||||
|
||||
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
|
||||
|
||||
var/atom/destination = get_turf(the_cool_one)
|
||||
var/obj/structure/closet/CL = locate() in destination
|
||||
if(CL)
|
||||
destination = CL
|
||||
|
||||
if(!destination)
|
||||
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
|
||||
destination = get_turf(src)
|
||||
|
||||
key = new mcguffin_type(destination)
|
||||
|
||||
/obj/machinery/gateway/centeraway/mcguffin/Bumped(atom/movable/M as mob|obj)
|
||||
if(!ready) return
|
||||
if(!active) return
|
||||
M.forceMove(get_step(stationgate.loc, SOUTH))
|
||||
M.set_dir(SOUTH)
|
||||
M << 'sound/effects/swooshygate.ogg'
|
||||
playsound(src, 'sound/effects/swooshygate.ogg', 100, 1)
|
||||
|
||||
/obj/machinery/gateway/brass
|
||||
name = "mysterious brass gateway"
|
||||
desc = "A gateway of strange construction. It appears to be made primarily of materials resembling brass and silver."
|
||||
icon = 'icons/obj/machines/gateway_vr.dmi'
|
||||
|
||||
//No, you can't digest the key to leave the gateway.
|
||||
/obj/item/device/mcguffin/digest_act(var/atom/movable/item_storage = null)
|
||||
return FALSE
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
/obj/effect/spawner/lootdrop
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x2"
|
||||
var/lootcount = 1 //how many items will be spawned
|
||||
var/lootdoubles = 0 //if the same item can be spawned twice
|
||||
var/loot = "" //a list of possible items to spawn- a string of paths
|
||||
|
||||
/obj/effect/spawner/lootdrop/Initialize()
|
||||
..()
|
||||
var/list/things = params2list(loot)
|
||||
if(things && things.len)
|
||||
for(var/i = lootcount, i > 0, i--)
|
||||
if(!things.len)
|
||||
return
|
||||
var/loot_spawn = pick(things)
|
||||
var/loot_path = text2path(loot_spawn)
|
||||
if(!loot_path || !lootdoubles)
|
||||
things.Remove(loot_spawn)
|
||||
continue
|
||||
new loot_path(get_turf(src))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
/obj/effect/spawner/lootdrop
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x2"
|
||||
var/lootcount = 1 //how many items will be spawned
|
||||
var/lootdoubles = 0 //if the same item can be spawned twice
|
||||
var/loot = "" //a list of possible items to spawn- a string of paths
|
||||
|
||||
/obj/effect/spawner/lootdrop/Initialize()
|
||||
..()
|
||||
var/list/things = params2list(loot)
|
||||
if(things && things.len)
|
||||
for(var/i = lootcount, i > 0, i--)
|
||||
if(!things.len)
|
||||
return
|
||||
var/loot_spawn = pick(things)
|
||||
var/loot_path = text2path(loot_spawn)
|
||||
if(!loot_path || !lootdoubles)
|
||||
things.Remove(loot_spawn)
|
||||
continue
|
||||
new loot_path(get_turf(src))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
/obj/item/weapon/paper/pamphlet
|
||||
name = "pamphlet"
|
||||
icon_state = "pamphlet"
|
||||
info = "<b>Welcome to the Gateway project...</b><br>\
|
||||
Congratulations! If you're reading this, you and your superiors have decided that you're \
|
||||
ready to commit to a life spent colonising the rolling hills of far away worlds. You \
|
||||
must be ready for a lifetime of adventure, a little bit of hard work, and an award \
|
||||
winning dental plan- but that's not all the Gateway project has to offer.<br>\
|
||||
<br>Because we care about you, we feel it is only fair to make sure you know the risks \
|
||||
before you commit to joining the Gateway project. All away destinations have \
|
||||
been fully scanned by a expeditionary team, and are certified to be 100% safe. \
|
||||
We've even left a case of space beer along with the basic materials you'll need to expand \
|
||||
the Project's operational area and start your new life.<br><br>\
|
||||
<b>Gateway Operation Basics</b><br>\
|
||||
All approved Gateways operate on the same basic principals. They operate off \
|
||||
area equipment power as you would expect, but they also require a backup wire with at least \
|
||||
128, 000 Watts of power running through it. Without this supply, it cannot safely function \
|
||||
and will reject all attempts at operation.<br><br>\
|
||||
Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \
|
||||
searching for an output location. The amount of time this takes is variable, but the Gateway \
|
||||
interface will give you an estimate accurate to the minute. Power loss will not interrupt the \
|
||||
searching process. Influenza will not interrupt the searching process. Temporal anomalies \
|
||||
may cause the estimate to be inaccurate, but will not interrupt the searching process.<br><br> \
|
||||
<b>Life On The Other Side</b><br>\
|
||||
Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \
|
||||
This is a normal side effect of travelling vast distances in a short period of time. You should \
|
||||
survey the immediate area, and attempt to locate your complimentary case of space beer. Our \
|
||||
expeditionary teams have ensured the complete safety of all away locations, but in a small \
|
||||
number of cases, the Gateway they have established may not be immediately obvious. \
|
||||
Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \
|
||||
<br><br><b>A New World</b><br>\
|
||||
As a participant in the Gateway Project, you will be on the frontiers of space. \
|
||||
Though complete safety is assured, participants are advised to prepare for inhospitable \
|
||||
environs."
|
||||
|
||||
//we don't want the silly text overlay!
|
||||
/obj/item/weapon/paper/pamphlet/update_icon()
|
||||
/obj/item/weapon/paper/pamphlet
|
||||
name = "pamphlet"
|
||||
icon_state = "pamphlet"
|
||||
info = "<b>Welcome to the Gateway project...</b><br>\
|
||||
Congratulations! If you're reading this, you and your superiors have decided that you're \
|
||||
ready to commit to a life spent colonising the rolling hills of far away worlds. You \
|
||||
must be ready for a lifetime of adventure, a little bit of hard work, and an award \
|
||||
winning dental plan- but that's not all the Gateway project has to offer.<br>\
|
||||
<br>Because we care about you, we feel it is only fair to make sure you know the risks \
|
||||
before you commit to joining the Gateway project. All away destinations have \
|
||||
been fully scanned by a expeditionary team, and are certified to be 100% safe. \
|
||||
We've even left a case of space beer along with the basic materials you'll need to expand \
|
||||
the Project's operational area and start your new life.<br><br>\
|
||||
<b>Gateway Operation Basics</b><br>\
|
||||
All approved Gateways operate on the same basic principals. They operate off \
|
||||
area equipment power as you would expect, but they also require a backup wire with at least \
|
||||
128, 000 Watts of power running through it. Without this supply, it cannot safely function \
|
||||
and will reject all attempts at operation.<br><br>\
|
||||
Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \
|
||||
searching for an output location. The amount of time this takes is variable, but the Gateway \
|
||||
interface will give you an estimate accurate to the minute. Power loss will not interrupt the \
|
||||
searching process. Influenza will not interrupt the searching process. Temporal anomalies \
|
||||
may cause the estimate to be inaccurate, but will not interrupt the searching process.<br><br> \
|
||||
<b>Life On The Other Side</b><br>\
|
||||
Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \
|
||||
This is a normal side effect of travelling vast distances in a short period of time. You should \
|
||||
survey the immediate area, and attempt to locate your complimentary case of space beer. Our \
|
||||
expeditionary teams have ensured the complete safety of all away locations, but in a small \
|
||||
number of cases, the Gateway they have established may not be immediately obvious. \
|
||||
Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \
|
||||
<br><br><b>A New World</b><br>\
|
||||
As a participant in the Gateway Project, you will be on the frontiers of space. \
|
||||
Though complete safety is assured, participants are advised to prepare for inhospitable \
|
||||
environs."
|
||||
|
||||
//we don't want the silly text overlay!
|
||||
/obj/item/weapon/paper/pamphlet/update_icon()
|
||||
return
|
||||
@@ -1,44 +1,44 @@
|
||||
/obj/effect/step_trigger/message
|
||||
var/message //the message to give to the mob
|
||||
var/once = 1
|
||||
|
||||
/obj/effect/step_trigger/message/Trigger(mob/M as mob)
|
||||
if(M.client)
|
||||
to_chat(M, "<span class='info'>[message]</span>")
|
||||
if(once)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/step_trigger/teleport_fancy
|
||||
var/locationx
|
||||
var/locationy
|
||||
var/uses = 1 //0 for infinite uses
|
||||
var/entersparks = 0
|
||||
var/exitsparks = 0
|
||||
var/entersmoke = 0
|
||||
var/exitsmoke = 0
|
||||
|
||||
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
|
||||
var/dest = locate(locationx, locationy, z)
|
||||
M.Move(dest)
|
||||
|
||||
if(entersparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, src)
|
||||
s.start()
|
||||
if(exitsparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, dest)
|
||||
s.start()
|
||||
|
||||
if(entersmoke)
|
||||
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
|
||||
s.set_up(4, 1, src, 0)
|
||||
s.start()
|
||||
if(exitsmoke)
|
||||
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
|
||||
s.set_up(4, 1, dest, 0)
|
||||
s.start()
|
||||
|
||||
uses--
|
||||
if(uses == 0)
|
||||
/obj/effect/step_trigger/message
|
||||
var/message //the message to give to the mob
|
||||
var/once = 1
|
||||
|
||||
/obj/effect/step_trigger/message/Trigger(mob/M as mob)
|
||||
if(M.client)
|
||||
to_chat(M, "<span class='info'>[message]</span>")
|
||||
if(once)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/step_trigger/teleport_fancy
|
||||
var/locationx
|
||||
var/locationy
|
||||
var/uses = 1 //0 for infinite uses
|
||||
var/entersparks = 0
|
||||
var/exitsparks = 0
|
||||
var/entersmoke = 0
|
||||
var/exitsmoke = 0
|
||||
|
||||
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
|
||||
var/dest = locate(locationx, locationy, z)
|
||||
M.Move(dest)
|
||||
|
||||
if(entersparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, src)
|
||||
s.start()
|
||||
if(exitsparks)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, dest)
|
||||
s.start()
|
||||
|
||||
if(entersmoke)
|
||||
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
|
||||
s.set_up(4, 1, src, 0)
|
||||
s.start()
|
||||
if(exitsmoke)
|
||||
var/datum/effect/effect/system/smoke_spread/s = new /datum/effect/effect/system/smoke_spread
|
||||
s.set_up(4, 1, dest, 0)
|
||||
s.start()
|
||||
|
||||
uses--
|
||||
if(uses == 0)
|
||||
qdel(src)
|
||||
@@ -1,91 +1,91 @@
|
||||
/proc/createRandomZlevel()
|
||||
if(awaydestinations.len || UNIT_TEST) //crude, but it saves another var! //VOREStation Edit - No loading away missions during CI testing
|
||||
return
|
||||
|
||||
var/list/potentialRandomZlevels = list()
|
||||
admin_notice(span_red("<B> Searching for away missions...</B>"), R_DEBUG)
|
||||
var/list/Lines = file2list("maps/RandomZLevels/fileList.txt")
|
||||
if(!Lines.len) return
|
||||
for (var/t in Lines)
|
||||
if (!t)
|
||||
continue
|
||||
|
||||
t = trim(t)
|
||||
if (length(t) == 0)
|
||||
continue
|
||||
else if (copytext(t, 1, 2) == "#")
|
||||
continue
|
||||
|
||||
var/pos = findtext(t, " ")
|
||||
var/name = null
|
||||
// var/value = null
|
||||
|
||||
if (pos)
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = copytext(t, 1, pos)
|
||||
// value = copytext(t, pos + 1)
|
||||
else
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = t
|
||||
|
||||
if (!name)
|
||||
continue
|
||||
|
||||
potentialRandomZlevels.Add(name)
|
||||
|
||||
|
||||
if(potentialRandomZlevels.len)
|
||||
admin_notice(span_red("<B>Loading away mission...</B>"), R_DEBUG)
|
||||
|
||||
var/map = pick(potentialRandomZlevels)
|
||||
to_world_log("Away mission picked: [map]") //VOREStation Add for debugging
|
||||
var/file = file(map)
|
||||
if(isfile(file))
|
||||
var/datum/map_template/template = new(file, "away mission")
|
||||
template.load_new_z()
|
||||
to_world_log("away mission loaded: [map]")
|
||||
/* VOREStation Removal - We do this in the special landmark init instead.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name != "awaystart")
|
||||
continue
|
||||
awaydestinations.Add(L)
|
||||
*/ //VOREStation Removal End
|
||||
admin_notice(span_red("<B>Away mission loaded.</B>"), R_DEBUG)
|
||||
|
||||
else
|
||||
admin_notice(span_red("<B>No away missions found.</B>"), R_DEBUG)
|
||||
return
|
||||
|
||||
//VOREStation Add - This landmark type so it's not so ghetto.
|
||||
/obj/effect/landmark/gateway_scatter
|
||||
name = "uncalibrated gateway destination"
|
||||
/obj/effect/landmark/gateway_scatter/Initialize()
|
||||
. = ..()
|
||||
awaydestinations += src
|
||||
|
||||
/obj/effect/landmark/gateway_scatter/abduct
|
||||
name = "uncalibrated gateway abductor"
|
||||
abductor = 1
|
||||
|
||||
/obj/effect/landmark/event_scatter
|
||||
name = "uncalibrated event destination"
|
||||
/obj/effect/landmark/event_scatter/Initialize()
|
||||
. = ..()
|
||||
eventdestinations += src
|
||||
|
||||
/obj/effect/landmark/event_scatter/abduct
|
||||
name = "uncalibrated event abductor"
|
||||
abductor = 1
|
||||
|
||||
/obj/effect/landmark/gateway_abduct_dest
|
||||
name = "abductor gateway destination"
|
||||
/obj/effect/landmark/gateway_abduct_dest/Initialize()
|
||||
. = ..()
|
||||
awayabductors += src
|
||||
|
||||
/obj/effect/landmark/event_abduct_dest
|
||||
name = "abductor event destination"
|
||||
/obj/effect/landmark/event_abduct_dest/Initialize()
|
||||
. = ..()
|
||||
eventabductors += src
|
||||
//VOREStation Add End
|
||||
/proc/createRandomZlevel()
|
||||
if(awaydestinations.len || UNIT_TEST) //crude, but it saves another var! //VOREStation Edit - No loading away missions during CI testing
|
||||
return
|
||||
|
||||
var/list/potentialRandomZlevels = list()
|
||||
admin_notice(span_red("<B> Searching for away missions...</B>"), R_DEBUG)
|
||||
var/list/Lines = file2list("maps/RandomZLevels/fileList.txt")
|
||||
if(!Lines.len) return
|
||||
for (var/t in Lines)
|
||||
if (!t)
|
||||
continue
|
||||
|
||||
t = trim(t)
|
||||
if (length(t) == 0)
|
||||
continue
|
||||
else if (copytext(t, 1, 2) == "#")
|
||||
continue
|
||||
|
||||
var/pos = findtext(t, " ")
|
||||
var/name = null
|
||||
// var/value = null
|
||||
|
||||
if (pos)
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = copytext(t, 1, pos)
|
||||
// value = copytext(t, pos + 1)
|
||||
else
|
||||
// No, don't do lowertext here, that breaks paths on linux
|
||||
name = t
|
||||
|
||||
if (!name)
|
||||
continue
|
||||
|
||||
potentialRandomZlevels.Add(name)
|
||||
|
||||
|
||||
if(potentialRandomZlevels.len)
|
||||
admin_notice(span_red("<B>Loading away mission...</B>"), R_DEBUG)
|
||||
|
||||
var/map = pick(potentialRandomZlevels)
|
||||
to_world_log("Away mission picked: [map]") //VOREStation Add for debugging
|
||||
var/file = file(map)
|
||||
if(isfile(file))
|
||||
var/datum/map_template/template = new(file, "away mission")
|
||||
template.load_new_z()
|
||||
to_world_log("away mission loaded: [map]")
|
||||
/* VOREStation Removal - We do this in the special landmark init instead.
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if (L.name != "awaystart")
|
||||
continue
|
||||
awaydestinations.Add(L)
|
||||
*/ //VOREStation Removal End
|
||||
admin_notice(span_red("<B>Away mission loaded.</B>"), R_DEBUG)
|
||||
|
||||
else
|
||||
admin_notice(span_red("<B>No away missions found.</B>"), R_DEBUG)
|
||||
return
|
||||
|
||||
//VOREStation Add - This landmark type so it's not so ghetto.
|
||||
/obj/effect/landmark/gateway_scatter
|
||||
name = "uncalibrated gateway destination"
|
||||
/obj/effect/landmark/gateway_scatter/Initialize()
|
||||
. = ..()
|
||||
awaydestinations += src
|
||||
|
||||
/obj/effect/landmark/gateway_scatter/abduct
|
||||
name = "uncalibrated gateway abductor"
|
||||
abductor = 1
|
||||
|
||||
/obj/effect/landmark/event_scatter
|
||||
name = "uncalibrated event destination"
|
||||
/obj/effect/landmark/event_scatter/Initialize()
|
||||
. = ..()
|
||||
eventdestinations += src
|
||||
|
||||
/obj/effect/landmark/event_scatter/abduct
|
||||
name = "uncalibrated event abductor"
|
||||
abductor = 1
|
||||
|
||||
/obj/effect/landmark/gateway_abduct_dest
|
||||
name = "abductor gateway destination"
|
||||
/obj/effect/landmark/gateway_abduct_dest/Initialize()
|
||||
. = ..()
|
||||
awayabductors += src
|
||||
|
||||
/obj/effect/landmark/event_abduct_dest
|
||||
name = "abductor event destination"
|
||||
/obj/effect/landmark/event_abduct_dest/Initialize()
|
||||
. = ..()
|
||||
eventabductors += src
|
||||
//VOREStation Add End
|
||||
|
||||
Reference in New Issue
Block a user