mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-24 17:11:40 +00:00
Merge remote-tracking branch 'Meghan-Rossi/master' into job_description_alt
This commit is contained in:
@@ -39,7 +39,7 @@ var/datum/antagonist/loyalists/loyalists
|
||||
return
|
||||
global_objectives = list()
|
||||
for(var/mob/living/carbon/human/player in mob_list)
|
||||
if(!player.mind || player.stat==2 || !(player.mind.assigned_role in command_positions))
|
||||
if(!player.mind || player.stat==2 || !(SSjob.is_job_in_department(player.mind.assigned_role, DEPARTMENT_COMMAND)))
|
||||
continue
|
||||
var/datum/objective/protect/loyal_obj = new
|
||||
loyal_obj.target = player.mind
|
||||
|
||||
@@ -42,7 +42,7 @@ var/datum/antagonist/revolutionary/revs
|
||||
return
|
||||
global_objectives = list()
|
||||
for(var/mob/living/carbon/human/player in mob_list)
|
||||
if(!player.mind || player.stat==2 || !(player.mind.assigned_role in command_positions))
|
||||
if(!player.mind || player.stat==2 || !(SSjob.is_job_in_department(player.mind.assigned_role, DEPARTMENT_COMMAND)))
|
||||
continue
|
||||
var/datum/objective/rev/rev_obj = new
|
||||
rev_obj.target = player.mind
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
/datum/job/assistant
|
||||
title = "Assistant"
|
||||
flag = ASSISTANT
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
sorting_order = -1
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = -1
|
||||
|
||||
@@ -7,7 +7,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
/datum/job/captain
|
||||
title = "Colony Director"
|
||||
flag = CAPTAIN
|
||||
department = "Command"
|
||||
departments = list(DEPARTMENT_COMMAND)
|
||||
sorting_order = 3 // Above everyone.
|
||||
head_position = 1
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
@@ -58,7 +59,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
/datum/job/hop
|
||||
title = "Head of Personnel"
|
||||
flag = HOP
|
||||
department = "Command"
|
||||
departments = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_COMMAND)
|
||||
sorting_order = 2 // Above the QM, below captain.
|
||||
head_position = 1
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
@@ -106,7 +108,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
/datum/job/secretary
|
||||
title = "Command Secretary"
|
||||
flag = BRIDGE
|
||||
department = "Command"
|
||||
departments = list(DEPARTMENT_COMMAND)
|
||||
head_position = 1
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
/datum/job/bartender
|
||||
title = "Bartender"
|
||||
flag = BARTENDER
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -38,7 +38,7 @@
|
||||
/datum/job/chef
|
||||
title = "Chef"
|
||||
flag = CHEF
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -67,7 +67,7 @@
|
||||
/datum/job/hydro
|
||||
title = "Botanist"
|
||||
flag = BOTANIST
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -96,7 +96,8 @@
|
||||
/datum/job/qm
|
||||
title = "Quartermaster"
|
||||
flag = QUARTERMASTER
|
||||
department = "Cargo"
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
sorting_order = 1 // QM is above the cargo techs, but below the HoP.
|
||||
head_position = 1
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
@@ -127,7 +128,7 @@
|
||||
/datum/job/cargo_tech
|
||||
title = "Cargo Technician"
|
||||
flag = CARGOTECH
|
||||
department = "Cargo"
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -152,7 +153,7 @@
|
||||
/datum/job/mining
|
||||
title = "Shaft Miner"
|
||||
flag = MINER
|
||||
department = "Cargo"
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
@@ -182,7 +183,7 @@
|
||||
/datum/job/janitor
|
||||
title = "Janitor"
|
||||
flag = JANITOR
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -210,7 +211,7 @@
|
||||
/datum/job/librarian
|
||||
title = "Librarian"
|
||||
flag = LIBRARIAN
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -244,7 +245,7 @@
|
||||
/datum/job/lawyer
|
||||
title = "Internal Affairs Agent"
|
||||
flag = LAWYER
|
||||
department = "Internal Affairs"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/datum/job/chaplain
|
||||
title = "Chaplain"
|
||||
flag = CHAPLAIN
|
||||
department = "Civilian"
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
|
||||
79
code/game/jobs/job/department.dm
Normal file
79
code/game/jobs/job/department.dm
Normal file
@@ -0,0 +1,79 @@
|
||||
// A datum that holds information about a specific department.
|
||||
// It is held inside, and managed by, the SSjob subsystem automatically,
|
||||
// just define a department, and put that department's name in one or more job datums' departments list.
|
||||
|
||||
/datum/department
|
||||
var/name = "NOPE" // Name used in UIs, and the index for the department assoc list in SSjob.
|
||||
var/short_name = "NO" // Shorter name, used for things like external Topic() responses.
|
||||
var/color = "#000000" // Color to use in UIs to represent this department.
|
||||
var/list/jobs = list() // Assoc list. Key is the job title, and the value is a reference to the job datum. Populated by SSjob subsystem.
|
||||
var/sorting_order = 0 // Used to sort departments, e.g. Command always being on top.
|
||||
var/visible = TRUE // If false, it should not show up on things like the manifest or ID computer.
|
||||
var/assignable = TRUE // Similar for above, but only for ID computers and such. Used for silicon department.
|
||||
var/centcom_only = FALSE
|
||||
|
||||
/datum/department/command
|
||||
name = DEPARTMENT_COMMAND
|
||||
short_name = "Heads"
|
||||
color = "#3333FF"
|
||||
sorting_order = 10
|
||||
|
||||
/datum/department/security
|
||||
name = DEPARTMENT_SECURITY
|
||||
short_name = "Sec"
|
||||
color = "#8E0000"
|
||||
sorting_order = 6
|
||||
|
||||
/datum/department/engineering
|
||||
name = DEPARTMENT_ENGINEERING
|
||||
short_name = "Eng"
|
||||
color = "#B27300"
|
||||
sorting_order = 5
|
||||
|
||||
/datum/department/medical
|
||||
name = DEPARTMENT_MEDICAL
|
||||
short_name = "Med"
|
||||
color = "#006600"
|
||||
sorting_order = 4
|
||||
|
||||
/datum/department/research
|
||||
name = DEPARTMENT_RESEARCH
|
||||
short_name = "Sci"
|
||||
color = "#A65BA6"
|
||||
sorting_order = 3
|
||||
|
||||
/datum/department/cargo
|
||||
name = DEPARTMENT_CARGO
|
||||
short_name = "Car"
|
||||
color = "#BB9040"
|
||||
sorting_order = 2
|
||||
|
||||
/datum/department/civilian
|
||||
name = DEPARTMENT_CIVILIAN
|
||||
short_name = "Civ"
|
||||
color = "#A32800"
|
||||
sorting_order = 1
|
||||
|
||||
// Mostly for if someone wanted to rewrite manifest code to be map-agnostic.
|
||||
/datum/department/misc
|
||||
name = "Miscellaneous"
|
||||
short_name = "Misc"
|
||||
color = "#666666"
|
||||
sorting_order = 0
|
||||
assignable = FALSE
|
||||
|
||||
/datum/department/synthetic
|
||||
name = DEPARTMENT_SYNTHETIC
|
||||
short_name = "Bot"
|
||||
color = "#222222"
|
||||
sorting_order = -1
|
||||
assignable = FALSE
|
||||
|
||||
// This one isn't very useful since no real centcom jobs exist yet.
|
||||
// Instead the jobs like ERT are hardcoded in.
|
||||
/datum/department/centcom
|
||||
name = "Central Command"
|
||||
short_name = "Centcom"
|
||||
color = "#A52A2A"
|
||||
sorting_order = 20 // Above Command.
|
||||
centcom_only = TRUE
|
||||
@@ -5,7 +5,8 @@
|
||||
title = "Chief Engineer"
|
||||
flag = CHIEF
|
||||
head_position = 1
|
||||
department = "Engineering"
|
||||
departments = list(DEPARTMENT_ENGINEERING, DEPARTMENT_COMMAND)
|
||||
sorting_order = 2
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -44,7 +45,7 @@
|
||||
/datum/job/engineer
|
||||
title = "Station Engineer"
|
||||
flag = ENGINEER
|
||||
department = "Engineering"
|
||||
departments = list(DEPARTMENT_ENGINEERING)
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 5
|
||||
@@ -88,7 +89,7 @@
|
||||
/datum/job/atmos
|
||||
title = "Atmospheric Technician"
|
||||
flag = ATMOSTECH
|
||||
department = "Engineering"
|
||||
departments = list(DEPARTMENT_ENGINEERING)
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
var/list/alt_titles = list() // List of alternate titles; if a job has alt-titles, it MUST have one for the base job
|
||||
var/req_admin_notify // If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
|
||||
var/minimal_player_age = 0 // If you have use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
|
||||
var/department = null // Does this position have a department tag?
|
||||
var/list/departments = list() // List of departments this job belongs to, if any. The first one on the list will be the 'primary' department.
|
||||
var/sorting_order = 0 // Used for sorting jobs so boss jobs go above regular ones, and their boss's boss is above that. Higher numbers = higher in sorting.
|
||||
var/head_position = 0 // Is this position Command?
|
||||
var/assignable = TRUE // Should it show up on things like the ID computer?
|
||||
var/minimum_character_age = 0
|
||||
var/ideal_character_age = 30
|
||||
var/has_headset = TRUE //Do people with this job need to be given headsets and told how to use them? E.g. Cyborgs don't.
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
title = "Chief Medical Officer"
|
||||
flag = CMO
|
||||
head_position = 1
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_COMMAND)
|
||||
sorting_order = 2
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -41,7 +42,7 @@
|
||||
/datum/job/doctor
|
||||
title = "Medical Doctor"
|
||||
flag = DOCTOR
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 5
|
||||
@@ -98,7 +99,7 @@
|
||||
/datum/job/chemist
|
||||
title = "Chemist"
|
||||
flag = CHEMIST
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -130,7 +131,7 @@
|
||||
/datum/job/geneticist
|
||||
title = "Geneticist"
|
||||
flag = GENETICIST
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL, DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 0
|
||||
@@ -156,7 +157,7 @@
|
||||
/datum/job/psychiatrist
|
||||
title = "Psychiatrist"
|
||||
flag = PSYCHIATRIST
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -187,7 +188,7 @@
|
||||
/datum/job/paramedic
|
||||
title = "Paramedic"
|
||||
flag = PARAMEDIC
|
||||
department = "Medical"
|
||||
departments = list(DEPARTMENT_MEDICAL)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
title = "Research Director"
|
||||
flag = RD
|
||||
head_position = 1
|
||||
department = "Science"
|
||||
departments = list(DEPARTMENT_RESEARCH, DEPARTMENT_COMMAND)
|
||||
sorting_order = 2
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -47,7 +48,7 @@
|
||||
/datum/job/scientist
|
||||
title = "Scientist"
|
||||
flag = SCIENTIST
|
||||
department = "Science"
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 5
|
||||
@@ -93,7 +94,7 @@
|
||||
/datum/job/xenobiologist
|
||||
title = "Xenobiologist"
|
||||
flag = XENOBIOLOGIST
|
||||
department = "Science"
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 3
|
||||
@@ -126,7 +127,7 @@
|
||||
/datum/job/roboticist
|
||||
title = "Roboticist"
|
||||
flag = ROBOTICIST
|
||||
department = "Science"
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
title = "Head of Security"
|
||||
flag = HOS
|
||||
head_position = 1
|
||||
department = "Security"
|
||||
departments = list(DEPARTMENT_SECURITY, DEPARTMENT_COMMAND)
|
||||
sorting_order = 2
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -47,7 +48,8 @@
|
||||
/datum/job/warden
|
||||
title = "Warden"
|
||||
flag = WARDEN
|
||||
department = "Security"
|
||||
departments = list(DEPARTMENT_SECURITY)
|
||||
sorting_order = 1
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
@@ -75,7 +77,7 @@
|
||||
/datum/job/detective
|
||||
title = "Detective"
|
||||
flag = DETECTIVE
|
||||
department = "Security"
|
||||
departments = list(DEPARTMENT_SECURITY)
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -107,7 +109,7 @@
|
||||
/datum/job/officer
|
||||
title = "Security Officer"
|
||||
flag = OFFICER
|
||||
department = "Security"
|
||||
departments = list(DEPARTMENT_SECURITY)
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 4
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
/datum/job/ai
|
||||
title = "AI"
|
||||
flag = AI
|
||||
departments = list(DEPARTMENT_SYNTHETIC)
|
||||
sorting_order = 1 // Be above their borgs.
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
|
||||
@@ -15,6 +17,7 @@
|
||||
account_allowed = 0
|
||||
economic_modifier = 0
|
||||
has_headset = FALSE
|
||||
assignable = FALSE
|
||||
outfit_type = /decl/hierarchy/outfit/job/silicon/ai
|
||||
job_description = "The AI oversees the operation of the station and its crew, but has no real authority over them. \
|
||||
The AI is required to follow its Laws, and Lawbound Synthetics that are linked to it are expected to follow \
|
||||
@@ -43,6 +46,7 @@
|
||||
/datum/job/cyborg
|
||||
title = "Cyborg"
|
||||
flag = CYBORG
|
||||
departments = list(DEPARTMENT_SYNTHETIC)
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
@@ -53,6 +57,7 @@
|
||||
account_allowed = 0
|
||||
economic_modifier = 0
|
||||
has_headset = FALSE
|
||||
assignable = FALSE
|
||||
outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg
|
||||
job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \
|
||||
to follow its Laws."
|
||||
|
||||
@@ -114,7 +114,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring!
|
||||
continue
|
||||
|
||||
if(job.title in command_positions) //If you want a command position, select it!
|
||||
if(SSjob.is_job_in_department(job.title, DEPARTMENT_COMMAND)) //If you want a command position, select it!
|
||||
continue
|
||||
|
||||
if(jobban_isbanned(player, job.title))
|
||||
@@ -144,7 +144,7 @@ var/global/datum/controller/occupations/job_master
|
||||
///This proc is called before the level loop of DivideOccupations() and will try to select a head, ignoring ALL non-head preferences for every level until it locates a head or runs out of levels to check
|
||||
proc/FillHeadPosition()
|
||||
for(var/level = 1 to 3)
|
||||
for(var/command_position in command_positions)
|
||||
for(var/command_position in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND))
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job) continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
@@ -184,7 +184,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
///This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level
|
||||
proc/CheckHeadPositions(var/level)
|
||||
for(var/command_position in command_positions)
|
||||
for(var/command_position in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND))
|
||||
var/datum/job/job = GetJob(command_position)
|
||||
if(!job) continue
|
||||
var/list/candidates = FindOccupationCandidates(job, level)
|
||||
@@ -422,9 +422,9 @@ var/global/datum/controller/occupations/job_master
|
||||
log_game("JOINED [key_name(H)] as \"[rank]\"")
|
||||
|
||||
// If they're head, give them the account info for their department
|
||||
if(H.mind && job.head_position)
|
||||
if(H.mind && job.head_position && LAZYLEN(job.departments))
|
||||
var/remembered_info = ""
|
||||
var/datum/money_account/department_account = department_accounts[job.department]
|
||||
var/datum/money_account/department_account = department_accounts[job.departments[1]]
|
||||
|
||||
if(department_account)
|
||||
remembered_info += "<b>Your department's account number is:</b> #[department_account.account_number]<br>"
|
||||
|
||||
@@ -44,91 +44,8 @@ var/const/CHAPLAIN =(1<<10)
|
||||
var/const/ASSISTANT =(1<<11)
|
||||
var/const/BRIDGE =(1<<12)
|
||||
|
||||
|
||||
var/list/assistant_occupations = list(
|
||||
)
|
||||
|
||||
|
||||
var/list/command_positions = list(
|
||||
"Colony Director",
|
||||
"Head of Personnel",
|
||||
"Head of Security",
|
||||
"Chief Engineer",
|
||||
"Research Director",
|
||||
"Chief Medical Officer",
|
||||
"Command Secretary"
|
||||
)
|
||||
|
||||
|
||||
var/list/engineering_positions = list(
|
||||
"Chief Engineer",
|
||||
"Station Engineer",
|
||||
"Atmospheric Technician",
|
||||
)
|
||||
|
||||
|
||||
var/list/medical_positions = list(
|
||||
"Chief Medical Officer",
|
||||
"Medical Doctor",
|
||||
"Geneticist",
|
||||
"Psychiatrist",
|
||||
"Chemist",
|
||||
"Paramedic"
|
||||
)
|
||||
|
||||
|
||||
var/list/science_positions = list(
|
||||
"Research Director",
|
||||
"Scientist",
|
||||
"Geneticist", //Part of both medical and science
|
||||
"Roboticist",
|
||||
"Xenobiologist"
|
||||
)
|
||||
|
||||
//BS12 EDIT
|
||||
var/list/cargo_positions = list(
|
||||
"Quartermaster",
|
||||
"Cargo Technician",
|
||||
"Shaft Miner"
|
||||
)
|
||||
|
||||
var/list/civilian_positions = list(
|
||||
"Head of Personnel",
|
||||
"Bartender",
|
||||
"Botanist",
|
||||
"Chef",
|
||||
"Janitor",
|
||||
"Librarian",
|
||||
"Lawyer",
|
||||
"Chaplain",
|
||||
"Assistant"
|
||||
)
|
||||
|
||||
|
||||
var/list/security_positions = list(
|
||||
"Head of Security",
|
||||
"Warden",
|
||||
"Detective",
|
||||
"Security Officer"
|
||||
)
|
||||
|
||||
|
||||
var/list/planet_positions = list(
|
||||
"Explorer",
|
||||
"Pilot",
|
||||
"Search and Rescue"
|
||||
)
|
||||
|
||||
|
||||
var/list/nonhuman_positions = list(
|
||||
"AI",
|
||||
"Cyborg",
|
||||
"pAI"
|
||||
)
|
||||
|
||||
|
||||
/proc/guest_jobbans(var/job)
|
||||
return ((job in command_positions) || (job in nonhuman_positions) || (job in security_positions))
|
||||
return ( (job in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY)) )
|
||||
|
||||
/proc/get_job_datums()
|
||||
var/list/occupations = list()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/ai_slipper
|
||||
name = "\improper AI Liquid Dispenser"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "motion0"
|
||||
icon_state = "liquid_dispenser"
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
@@ -24,9 +24,9 @@
|
||||
|
||||
/obj/machinery/ai_slipper/update_icon()
|
||||
if(stat & NOPOWER || stat & BROKEN)
|
||||
icon_state = "motion0"
|
||||
icon_state = "liquid_dispenser"
|
||||
else
|
||||
icon_state = disabled ? "motion0" : "motion3"
|
||||
icon_state = disabled ? "liquid_dispenser" : "liquid_dispenser_on"
|
||||
|
||||
/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses)
|
||||
disabled = disabled
|
||||
|
||||
@@ -841,7 +841,7 @@
|
||||
var/chancetokill = 30*traitors_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 traitorss, 2 crew is 50% chance
|
||||
if(prob(chancetokill))
|
||||
var/deadguy = remove_crewmember()
|
||||
eventdat += "<br>The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] up to [deadguy] and murder them!"
|
||||
eventdat += "<br>The traitor[trait2 ? "s":""] run[trait2 ? "":"s"] up to [deadguy] and murder[trait2 ? "" : "s"] them!"
|
||||
else
|
||||
eventdat += "<br>You valiantly fight off the traitor[trait2 ? "s":""]!"
|
||||
eventdat += "<br>You cut the traitor[trait2 ? "s":""] up into meat... Eww"
|
||||
|
||||
@@ -101,17 +101,18 @@
|
||||
data["centcom_access"] = is_centcom()
|
||||
data["all_centcom_access"] = null
|
||||
data["regions"] = null
|
||||
data["id_rank"] = modify && modify.assignment ? modify.assignment : "Unassigned"
|
||||
|
||||
data["jobs"] = list(
|
||||
list("cat" = "Engineering", "jobs" = format_jobs(engineering_positions)),
|
||||
list("cat" = "Medical", "jobs" = format_jobs(medical_positions)),
|
||||
list("cat" = "Science", "jobs" = format_jobs(science_positions)),
|
||||
list("cat" = "Security", "jobs" = format_jobs(security_positions)),
|
||||
list("cat" = "Cargo", "jobs" = format_jobs(cargo_positions)),
|
||||
list("cat" = "Planetside", "jobs" = format_jobs(planet_positions)),
|
||||
list("cat" = "Civilian", "jobs" = format_jobs(civilian_positions)),
|
||||
list("cat" = "CentCom", "jobs" = format_jobs(get_all_centcom_jobs()))
|
||||
)
|
||||
var/list/departments = list()
|
||||
for(var/D in SSjob.get_all_department_datums())
|
||||
var/datum/department/dept = D
|
||||
if(!dept.assignable) // No AI ID cards for you.
|
||||
continue
|
||||
if(dept.centcom_only && !is_centcom())
|
||||
continue
|
||||
departments[++departments.len] = list("department_name" = dept.name, "jobs" = format_jobs(SSjob.get_job_titles_in_department(dept.name)) )
|
||||
|
||||
data["departments"] = departments
|
||||
|
||||
if (modify && is_centcom())
|
||||
var/list/all_centcom_access = list()
|
||||
@@ -208,16 +209,10 @@
|
||||
if(is_centcom())
|
||||
access = get_centcom_access(t1)
|
||||
else
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(ckey(J.title) == ckey(t1))
|
||||
jobdatum = J
|
||||
break
|
||||
var/datum/job/jobdatum = SSjob.get_job(t1)
|
||||
if(!jobdatum)
|
||||
to_chat(usr, "<span class='warning'>No log exists for this job: [t1]</span>")
|
||||
return
|
||||
|
||||
access = jobdatum.get_access()
|
||||
|
||||
modify.access = access
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/backup_author = ""
|
||||
var/icon/backup_img = null
|
||||
var/icon/backup_caption = ""
|
||||
var/post_time = 0
|
||||
|
||||
/datum/feed_channel
|
||||
var/channel_name=""
|
||||
@@ -78,6 +79,7 @@
|
||||
newMsg.body = msg
|
||||
newMsg.time_stamp = "[stationtime2text()]"
|
||||
newMsg.is_admin_message = adminMessage
|
||||
newMsg.post_time = round_duration_in_ticks // Should be almost universally unique
|
||||
if(message_type)
|
||||
newMsg.message_type = message_type
|
||||
if(photo)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
active_power_usage = 40000 //40 kW
|
||||
var/efficiency = 40000 //will provide the modified power rate when upgraded
|
||||
var/obj/item/charging = null
|
||||
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash)
|
||||
var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit)
|
||||
var/icon_state_charged = "recharger2"
|
||||
var/icon_state_charging = "recharger1"
|
||||
var/icon_state_idle = "recharger0" //also when unpowered
|
||||
@@ -72,7 +72,7 @@
|
||||
if(EW.use_external_power)
|
||||
to_chat(user, "<span class='notice'>\The [EW] has no recharge port.</span>")
|
||||
return
|
||||
else if(!G.get_cell())
|
||||
if(!G.get_cell())
|
||||
to_chat(user, "\The [G] does not have a battery installed.")
|
||||
return
|
||||
|
||||
@@ -125,27 +125,6 @@
|
||||
update_use_power(1)
|
||||
icon_state = icon_state_idle
|
||||
else
|
||||
if(istype(charging, /obj/item/modular_computer))
|
||||
var/obj/item/modular_computer/C = charging
|
||||
if(!C.battery_module.battery.fully_charged())
|
||||
icon_state = icon_state_charging
|
||||
C.battery_module.battery.give(CELLRATE*efficiency)
|
||||
update_use_power(2)
|
||||
else
|
||||
icon_state = icon_state_charged
|
||||
update_use_power(1)
|
||||
return
|
||||
else if(istype(charging, /obj/item/weapon/computer_hardware/battery_module))
|
||||
var/obj/item/weapon/computer_hardware/battery_module/BM = charging
|
||||
if(!BM.battery.fully_charged())
|
||||
icon_state = icon_state_charging
|
||||
BM.battery.give(CELLRATE*efficiency)
|
||||
update_use_power(2)
|
||||
else
|
||||
icon_state = icon_state_charged
|
||||
update_use_power(1)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/cell/C = charging.get_cell()
|
||||
if(istype(C))
|
||||
if(!C.fully_charged())
|
||||
|
||||
@@ -1123,7 +1123,8 @@
|
||||
/obj/item/toy/plushie/face_hugger = 1,
|
||||
/obj/item/toy/plushie/carp = 1,
|
||||
/obj/item/toy/plushie/deer = 1,
|
||||
/obj/item/toy/plushie/tabby_cat = 1)
|
||||
/obj/item/toy/plushie/tabby_cat = 1,
|
||||
/obj/item/device/threadneedle = 3)
|
||||
premium = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 1,
|
||||
/obj/item/weapon/storage/trinketbox = 2)
|
||||
prices = list(/obj/item/weapon/storage/fancy/heartbox = 15,
|
||||
@@ -1151,7 +1152,8 @@
|
||||
/obj/item/toy/plushie/face_hugger = 50,
|
||||
/obj/item/toy/plushie/carp = 50,
|
||||
/obj/item/toy/plushie/deer = 50,
|
||||
/obj/item/toy/plushie/tabby_cat = 50)
|
||||
/obj/item/toy/plushie/tabby_cat = 50,
|
||||
/obj/item/device/threadneedle = 2)
|
||||
|
||||
/obj/machinery/vending/fishing
|
||||
name = "Loot Trawler"
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/obj/item/projectile/P = A
|
||||
P.dispersion = deviation
|
||||
process_accuracy(P, chassis.occupant, target)
|
||||
P.launch_projectile_from_turf(target, chassis.occupant.zone_sel.selecting, chassis.occupant, params)
|
||||
P.launch_projectile_from_turf(target, chassis.get_pilot_zone_sel(), chassis.occupant, params)
|
||||
else if(istype(A, /atom/movable))
|
||||
var/atom/movable/AM = A
|
||||
AM.throw_at(target, 7, 1, chassis)
|
||||
|
||||
11
code/game/mecha/mecha_helpers.dm
Normal file
11
code/game/mecha/mecha_helpers.dm
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* Helper file for Exosuit / Mecha code.
|
||||
*/
|
||||
|
||||
// Returns, at least, a usable target body position, for things like guns.
|
||||
|
||||
/obj/mecha/proc/get_pilot_zone_sel()
|
||||
if(!occupant || !occupant.zone_sel || occupant.stat)
|
||||
return BP_TORSO
|
||||
|
||||
return occupant.zone_sel.selecting
|
||||
@@ -120,6 +120,7 @@
|
||||
// step_towards(M, src)
|
||||
|
||||
. = buckle_mob(M, forced)
|
||||
playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1)
|
||||
if(.)
|
||||
if(!silent)
|
||||
if(M == user)
|
||||
@@ -135,6 +136,7 @@
|
||||
|
||||
/atom/movable/proc/user_unbuckle_mob(mob/living/buckled_mob, mob/user)
|
||||
var/mob/living/M = unbuckle_mob(buckled_mob)
|
||||
playsound(src.loc, 'sound/effects/seatbelt.ogg', 50, 1)
|
||||
if(M)
|
||||
if(M != user)
|
||||
M.visible_message(\
|
||||
|
||||
@@ -95,12 +95,12 @@
|
||||
if(instant || do_after(user, 50))
|
||||
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
|
||||
to_chat(user, "You finish drawing.")
|
||||
|
||||
|
||||
if(config.log_graffiti)
|
||||
var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]."
|
||||
message_admins(msg)
|
||||
log_game(msg)
|
||||
|
||||
|
||||
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
|
||||
if(uses)
|
||||
uses--
|
||||
@@ -207,3 +207,6 @@
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/pen/crayon/attack_self(var/mob/user)
|
||||
return
|
||||
@@ -71,7 +71,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/CtrlClick()
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
|
||||
if(can_use(usr))
|
||||
remove_pen()
|
||||
return
|
||||
@@ -439,6 +439,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(2) icon = 'icons/obj/pda_slim.dmi'
|
||||
if(3) icon = 'icons/obj/pda_old.dmi'
|
||||
if(4) icon = 'icons/obj/pda_rugged.dmi'
|
||||
if(5) icon = 'icons/obj/pda_holo.dmi'
|
||||
else
|
||||
icon = 'icons/obj/pda_old.dmi'
|
||||
log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.")
|
||||
|
||||
@@ -122,6 +122,8 @@
|
||||
data["manifest"] = PDA_Manifest
|
||||
data["feeds"] = compile_news()
|
||||
data["latest_news"] = get_recent_news()
|
||||
if(newsfeed_channel)
|
||||
data["target_feed"] = data["feeds"][newsfeed_channel]
|
||||
if(cartridge) // If there's a cartridge, we need to grab the information from it
|
||||
data["cart_devices"] = cartridge.get_device_status()
|
||||
data["cart_templates"] = cartridge.ui_templates
|
||||
@@ -280,6 +282,9 @@
|
||||
var/obj/O = cartridge.internal_devices[text2num(href_list["toggle_device"])]
|
||||
cartridge.active_devices ^= list(O) // Exclusive or, will toggle its presence
|
||||
|
||||
if(href_list["newsfeed"])
|
||||
newsfeed_channel = text2num(href_list["newsfeed"])
|
||||
|
||||
if(href_list["cartridge_topic"] && cartridge) // Has to have a cartridge to perform these functions
|
||||
cartridge.Topic(href, href_list)
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
|
||||
var/datum/exonet_protocol/exonet = null
|
||||
var/list/communicating = list()
|
||||
var/update_ticks = 0
|
||||
var/newsfeed_channel = 0
|
||||
|
||||
// Proc: New()
|
||||
// Parameters: None
|
||||
|
||||
@@ -46,23 +46,24 @@
|
||||
index++
|
||||
if(FM.img)
|
||||
usr << browse_rsc(FM.img, "pda_news_tmp_photo_[feeds["channel"]]_[index].png")
|
||||
// News stories are HTML-stripped but require newline replacement to be properly displayed in NanoUI
|
||||
var/body = replacetext(FM.body, "\n", "<br>")
|
||||
messages[++messages.len] = list(
|
||||
"author" = FM.author,
|
||||
"body" = body,
|
||||
"message_type" = FM.message_type,
|
||||
"time_stamp" = FM.time_stamp,
|
||||
"has_image" = (FM.img != null),
|
||||
"caption" = FM.caption,
|
||||
"index" = index
|
||||
)
|
||||
// News stories are HTML-stripped but require newline replacement to be properly displayed in NanoUI
|
||||
var/body = replacetext(FM.body, "\n", "<br>")
|
||||
messages[++messages.len] = list(
|
||||
"author" = FM.author,
|
||||
"body" = body,
|
||||
"message_type" = FM.message_type,
|
||||
"time_stamp" = FM.time_stamp,
|
||||
"has_image" = (FM.img != null),
|
||||
"caption" = FM.caption,
|
||||
"index" = index
|
||||
)
|
||||
|
||||
feeds[++feeds.len] = list(
|
||||
"name" = channel.channel_name,
|
||||
"censored" = channel.censored,
|
||||
"author" = channel.author,
|
||||
"messages" = messages
|
||||
"messages" = messages,
|
||||
"index" = feeds.len + 1 // actually align them, since I guess the population of the list doesn't occur until after the evaluation of the new entry's contents
|
||||
)
|
||||
return feeds
|
||||
|
||||
@@ -85,14 +86,14 @@
|
||||
"time_stamp" = FM.time_stamp,
|
||||
"has_image" = (FM.img != null),
|
||||
"caption" = FM.caption,
|
||||
"time" = FM.post_time
|
||||
)
|
||||
|
||||
// Cut out all but the youngest three
|
||||
while(news.len > 3)
|
||||
var/oldest = min(news[0]["time_stamp"], news[1]["time_stamp"], news[2]["time_stamp"], news[3]["time_stamp"])
|
||||
for(var/i = 0, i < 4, i++)
|
||||
if(news[i]["time_stamp"] == oldest)
|
||||
news.Remove(news[i])
|
||||
if(news.len > 3)
|
||||
sortByKey(news, "time")
|
||||
news.Cut(1, news.len - 2) // Last three have largest timestamps, youngest posts
|
||||
news.Swap(1, 3) // List is sorted in ascending order of timestamp, we want descending
|
||||
|
||||
return news
|
||||
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
var/obj/item/weapon/shockpaddles/linked/paddles
|
||||
var/obj/item/weapon/cell/bcell = null
|
||||
|
||||
/obj/item/device/defib_kit/get_cell()
|
||||
return bcell
|
||||
|
||||
/obj/item/device/defib_kit/New() //starts without a cell for rnd
|
||||
..()
|
||||
if(ispath(paddles))
|
||||
|
||||
@@ -3,10 +3,30 @@
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
desc = "This is definitely something cool."
|
||||
|
||||
/datum/category_item/catalogue/information/objects/pascalb
|
||||
name = "Object - Pascal B Steel Shaft Cap"
|
||||
desc = "In the year 1957, the United States of America - an Earth nation - performed a series \
|
||||
of earth nuclear weapons tests codenamed 'Operation Plumbbob', which remain the largest and \
|
||||
longest running nuclear test series performed on the American continent. Test data included \
|
||||
various altitude detonations, effects on several materials and structures at various \
|
||||
distances, and the effects of radiation on military hardware and the human body. \
|
||||
<br><br>\
|
||||
On the 27th of August that year, in a test named 'Pascal-B' a 300t nuclear payload \
|
||||
was buried in a shaft capped by a 900kg steel plate cap. The test was intended to \
|
||||
verify the safety of underground detonation, but the shaft was not sufficient to \
|
||||
contain the shockwave. According to experiment designer Robert Brownlee, the steel \
|
||||
cap was propelled upwards at a velocity of 240,000km/h - over six times Earth's \
|
||||
escape velocity. The cap appeared in only one frame of high-speed camera recording. \
|
||||
<br><br>\
|
||||
It had been theorized that the cap had exited earth's atmosphere and entered orbit. \
|
||||
It would seem the cap traveled farther than had been possibly imagined."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/obj/item/poi/pascalb
|
||||
icon_state = "pascalb"
|
||||
name = "misshapen manhole cover"
|
||||
desc = "The top of this twisted chunk of metal is faintly stamped with a five pointed star. 'Property of US Army, Pascal B - 1957'."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/objects/pascalb)
|
||||
|
||||
/obj/item/poi/pascalb/New()
|
||||
START_PROCESSING(SSobj, src)
|
||||
@@ -19,6 +39,25 @@
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/datum/category_item/catalogue/information/objects/oldreactor
|
||||
name = "Object - 24th Century Fission Reactor Rack"
|
||||
desc = "Prior to the discovery of Phoron in 2380, and the development of the hydrophoron \
|
||||
supermatter reactor, most spacecraft operated on nuclear fission reactors, using processed \
|
||||
radioactive material as fuel. While the design had been near-perfected by the 24th century, \
|
||||
with some models capable of holding hundreds of fuel rods at one time and operating almost \
|
||||
unsupervised for weeks at a time.\
|
||||
<br><br>\
|
||||
However, as accidents were not uncommon due to the inherent dangers of space travel and the \
|
||||
nature of reactor racks such as this one fully containing the unstable fuel material, many \
|
||||
fission vessels were built capable of jettisoning their entire engine sections as it was seen \
|
||||
as preferable to evacuating a ship's crew and potentially losing the entire craft and its cargo. \
|
||||
<br><br>\
|
||||
VifGov records indicate that the colony ship ICV Kauai declared a major onboard emergency in Sif orbit \
|
||||
on the 14th April 2353, citing major systems malfunction following a fire in the engine compartment. \
|
||||
Due to the relatively sparse population of the planet, it was deemed safe to jettison both engine \
|
||||
blocks, and the colonists were safely towed to port with no hands lost."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/obj/structure/closet/crate/oldreactor
|
||||
name = "fission reactor rack"
|
||||
desc = "Used in older models of nuclear reactors, essentially a cooling rack for high volumes of radioactive material."
|
||||
@@ -26,6 +65,7 @@
|
||||
icon_state = "poireactor"
|
||||
icon_opened = "poireactor_open"
|
||||
icon_closed = "poireactor"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor)
|
||||
climbable = 0
|
||||
|
||||
starts_with = list(
|
||||
@@ -35,6 +75,7 @@
|
||||
icon_state = "poireactor_broken"
|
||||
name = "ruptured fission reactor rack"
|
||||
desc = "This broken hunk of machinery looks extremely dangerous."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor)
|
||||
|
||||
/obj/item/poi/brokenoldreactor/New()
|
||||
START_PROCESSING(SSobj, src)
|
||||
@@ -47,3 +88,29 @@
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/datum/category_item/catalogue/information/objects/growthcanister
|
||||
name = "Object - Growth Inhibitor 78-1"
|
||||
desc = "The production of Vatborn humans is a process which involves the synthesis of over two hundred \
|
||||
distinct chemical compounds. While most Vatborn are 'produced' as infants and merely genetically modified \
|
||||
to encourage rapid early maturation, the specific development of the controversial 'Expedited' Vatborn calls for \
|
||||
a far more intensive process.\
|
||||
<br><br>\
|
||||
Growth Inhibitor Type 78-1 is used in the rapid artificial maturation process to prevent the 'overdevelopment' of\
|
||||
particular cell structures in the Vatborn's body, halting the otherwise inevitable development of aggressive cancerous\
|
||||
growths which would be detrimental or lethal to the subject. Exposure to the compound in its pure form can cause\
|
||||
devastating damage to living tissue, ceasing all regenerative activity in an organism's cells. While immediate effects\
|
||||
can be halted by recent medical innovations, exposure can severely shorten a sapient's life expectancy.\
|
||||
<br><br>\
|
||||
In early 2564, the NanoTrasen corporation was implicated in the accidental spillage of over a dozen full cargo containers\
|
||||
of Growth Inhibitor 78-1 in the Ullran Expanse of Sif, and were charged by the Sif Environmental Agency with extreme \
|
||||
environmental damage and neglect."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/obj/structure/prop/poicanister
|
||||
name = "Ruptured Chemical Canister"
|
||||
desc = "A cracked open chemical canister labelled 'Growth Inhibitor 78-1'"
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "yellow-1"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/objects/growthcanister)
|
||||
anchored = 0
|
||||
density = 1
|
||||
7
code/game/objects/items/tailoring.dm
Normal file
7
code/game/objects/items/tailoring.dm
Normal file
@@ -0,0 +1,7 @@
|
||||
// I like the idea of this item having more uses in future.
|
||||
|
||||
/obj/item/device/threadneedle
|
||||
name = "thread and needle"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "needle_thread"
|
||||
desc = "Used for most sewing and tailoring applications."
|
||||
@@ -874,9 +874,31 @@
|
||||
anchored = 0
|
||||
density = 1
|
||||
var/phrase = "I don't want to exist anymore!"
|
||||
|
||||
var/searching = FALSE
|
||||
var/opened = FALSE // has this been slit open? this will allow you to store an object in a plushie.
|
||||
var/obj/item/stored_item // Note: Stored items can't be bigger than the plushie itself.
|
||||
|
||||
/obj/structure/plushie/examine(mob/user)
|
||||
..()
|
||||
if(opened)
|
||||
to_chat(user, "<i>You notice an incision has been made on [src].</i>")
|
||||
if(in_range(user, src) && stored_item)
|
||||
to_chat(user, "<i>You can see something in there...</i>")
|
||||
|
||||
/obj/structure/plushie/attack_hand(mob/user)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
|
||||
if(stored_item && !searching)
|
||||
searching = TRUE
|
||||
if(do_after(user, 10))
|
||||
to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!")
|
||||
stored_item.forceMove(get_turf(src))
|
||||
stored_item = null
|
||||
searching = FALSE
|
||||
return
|
||||
else
|
||||
searching = FALSE
|
||||
|
||||
if(user.a_intent == I_HELP)
|
||||
user.visible_message("<span class='notice'><b>\The [user]</b> hugs [src]!</span>","<span class='notice'>You hug [src]!</span>")
|
||||
else if (user.a_intent == I_HURT)
|
||||
@@ -888,6 +910,34 @@
|
||||
visible_message("[src] says, \"[phrase]\"")
|
||||
|
||||
|
||||
/obj/structure/plushie/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/device/threadneedle) && opened)
|
||||
to_chat(user, "You sew the hole in [src].")
|
||||
opened = FALSE
|
||||
return
|
||||
|
||||
if(is_sharp(I) && !opened)
|
||||
to_chat(user, "You open a small incision in [src]. You can place tiny items inside.")
|
||||
opened = TRUE
|
||||
return
|
||||
|
||||
if(opened)
|
||||
if(stored_item)
|
||||
to_chat(user, "There is already something in here.")
|
||||
return
|
||||
|
||||
if(!(I.w_class > w_class))
|
||||
to_chat(user, "You place [I] inside [src].")
|
||||
user.drop_from_inventory(I, src)
|
||||
I.forceMove(src)
|
||||
stored_item = I
|
||||
return
|
||||
else
|
||||
to_chat(user, "You open a small incision in [src]. You can place tiny items inside.")
|
||||
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/plushie/ian
|
||||
name = "plush corgi"
|
||||
desc = "A plushie of an adorable corgi! Don't you just want to hug it and squeeze it and call it \"Ian\"?"
|
||||
@@ -921,8 +971,30 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/last_message = 0
|
||||
var/pokephrase = "Uww!"
|
||||
var/searching = FALSE
|
||||
var/opened = FALSE // has this been slit open? this will allow you to store an object in a plushie.
|
||||
var/obj/item/stored_item // Note: Stored items can't be bigger than the plushie itself.
|
||||
|
||||
|
||||
/obj/item/toy/plushie/examine(mob/user)
|
||||
..()
|
||||
if(opened)
|
||||
to_chat(user, "<i>You notice an incision has been made on [src].</i>")
|
||||
if(in_range(user, src) && stored_item)
|
||||
to_chat(user, "<i>You can see something in there...</i>")
|
||||
|
||||
/obj/item/toy/plushie/attack_self(mob/user as mob)
|
||||
if(stored_item && !searching)
|
||||
searching = TRUE
|
||||
if(do_after(user, 10))
|
||||
to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!")
|
||||
stored_item.forceMove(get_turf(src))
|
||||
stored_item = null
|
||||
searching = FALSE
|
||||
return
|
||||
else
|
||||
searching = FALSE
|
||||
|
||||
if(world.time - last_message <= 1 SECOND)
|
||||
return
|
||||
if(user.a_intent == I_HELP)
|
||||
@@ -955,6 +1027,31 @@
|
||||
if(istype(I, /obj/item/toy/plushie) || istype(I, /obj/item/organ/external/head))
|
||||
user.visible_message("<span class='notice'>[user] makes \the [I] kiss \the [src]!.</span>", \
|
||||
"<span class='notice'>You make \the [I] kiss \the [src]!.</span>")
|
||||
return
|
||||
|
||||
|
||||
if(istype(I, /obj/item/device/threadneedle) && opened)
|
||||
to_chat(user, "You sew the hole underneath [src].")
|
||||
opened = FALSE
|
||||
return
|
||||
|
||||
if(is_sharp(I) && !opened)
|
||||
to_chat(user, "You open a small incision in [src]. You can place tiny items inside.")
|
||||
opened = TRUE
|
||||
return
|
||||
|
||||
if( (!(I.w_class > w_class)) && opened)
|
||||
if(stored_item)
|
||||
to_chat(user, "There is already something in here.")
|
||||
return
|
||||
|
||||
to_chat(user, "You place [I] inside [src].")
|
||||
user.drop_from_inventory(I, src)
|
||||
I.forceMove(src)
|
||||
stored_item = I
|
||||
to_chat(user, "You placed [I] into [src].")
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plushie/nymph
|
||||
|
||||
72
code/game/objects/items/trash_material.dm
Normal file
72
code/game/objects/items/trash_material.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
/obj/item/trash/material
|
||||
icon = 'icons/obj/material_trash.dmi'
|
||||
matter = list()
|
||||
var/matter_chances = list() //List of lists: list(mat_name, chance, amount)
|
||||
|
||||
|
||||
/obj/item/trash/material/Initialize()
|
||||
. = ..()
|
||||
if(!matter)
|
||||
matter = list()
|
||||
|
||||
for(var/list/L in matter_chances)
|
||||
if(prob(L[2]))
|
||||
matter |= L[1]
|
||||
matter[L[1]] += max(0, L[3] + rand(-2,2))
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/trash/material/metal
|
||||
name = "scrap metal"
|
||||
desc = "A piece of metal that can be recycled in an autolathe."
|
||||
icon_state = "metal0"
|
||||
matter_chances = list(
|
||||
list(MAT_STEEL, 100, 15),
|
||||
list(MAT_STEEL, 50, 10),
|
||||
list(MAT_STEEL, 10, 20),
|
||||
list(MAT_PLASTEEL, 10, 5),
|
||||
list(MAT_PLASTEEL, 5, 10)
|
||||
)
|
||||
|
||||
/obj/item/trash/material/metal/Initialize()
|
||||
. = ..()
|
||||
icon_state = "metal[rand(4)]"
|
||||
|
||||
|
||||
/obj/item/trash/material/circuit
|
||||
name = "burnt circuit"
|
||||
desc = "A burnt circuit that can be recycled in an autolathe."
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon_state = "circuit0"
|
||||
matter_chances = list(
|
||||
list(MAT_GLASS, 100, 4),
|
||||
list(MAT_GLASS, 50, 3),
|
||||
list(MAT_PLASTIC, 40, 3),
|
||||
list(MAT_SILVER, 18, 3),
|
||||
list(MAT_GOLD, 17, 3),
|
||||
list(MAT_DIAMOND, 4, 2),
|
||||
)
|
||||
|
||||
/obj/item/trash/material/circuit/Initialize()
|
||||
. = ..()
|
||||
icon_state = "circuit[rand(3)]"
|
||||
|
||||
|
||||
/obj/item/trash/material/device
|
||||
name = "broken device"
|
||||
desc = "A broken device that can be recycled in an autolathe."
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon_state = "device0"
|
||||
matter_chances = list(
|
||||
list(MAT_STEEL, 100, 10),
|
||||
list(MAT_GLASS, 90, 7),
|
||||
list(MAT_PLASTIC, 100, 10),
|
||||
list(MAT_SILVER, 16, 7),
|
||||
list(MAT_GOLD, 15, 5),
|
||||
list(MAT_DIAMOND, 5, 2),
|
||||
)
|
||||
|
||||
/obj/item/trash/material/device/Initialize()
|
||||
. = ..()
|
||||
icon_state = "device[rand(3)]"
|
||||
@@ -505,6 +505,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
slot_flags = SLOT_BELT
|
||||
attack_verb = list("burnt", "singed")
|
||||
var/base_state
|
||||
var/activation_sound = 'sound/items/lighter_on.ogg'
|
||||
var/deactivation_sound = 'sound/items/lighter_off.ogg'
|
||||
|
||||
/obj/item/weapon/flame/lighter/zippo
|
||||
name = "\improper Zippo lighter"
|
||||
@@ -512,6 +514,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
icon = 'icons/obj/zippo.dmi'
|
||||
icon_state = "zippo"
|
||||
item_state = "zippo"
|
||||
activation_sound = 'sound/items/zippo_on.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/weapon/flame/lighter/random
|
||||
New()
|
||||
@@ -526,6 +530,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
lit = 1
|
||||
icon_state = "[base_state]on"
|
||||
item_state = "[base_state]on"
|
||||
playsound(src.loc, activation_sound, 75, 1)
|
||||
if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
|
||||
user.visible_message("<span class='rose'>Without even breaking stride, [user] flips open and lights [src] in one smooth movement.</span>")
|
||||
else
|
||||
@@ -545,6 +550,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
lit = 0
|
||||
icon_state = "[base_state]"
|
||||
item_state = "[base_state]"
|
||||
playsound(src.loc, deactivation_sound, 75, 1)
|
||||
if(istype(src, /obj/item/weapon/flame/lighter/zippo) )
|
||||
user.visible_message("<span class='rose'>You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.</span>")
|
||||
else
|
||||
|
||||
@@ -160,6 +160,7 @@
|
||||
/obj/item/weapon/melee/baton,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/gun/energy/stunrevolver,
|
||||
/obj/item/weapon/gun/magnetic/railgun/heater/pistol,
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/flame/lighter,
|
||||
/obj/item/device/flashlight,
|
||||
|
||||
@@ -142,15 +142,7 @@
|
||||
name = "chameleon kit"
|
||||
desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately."
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/chameleon,
|
||||
/obj/item/clothing/head/chameleon,
|
||||
/obj/item/clothing/suit/chameleon,
|
||||
/obj/item/clothing/shoes/chameleon,
|
||||
/obj/item/weapon/storage/backpack/chameleon,
|
||||
/obj/item/clothing/gloves/chameleon,
|
||||
/obj/item/clothing/mask/chameleon,
|
||||
/obj/item/clothing/glasses/chameleon,
|
||||
/obj/item/clothing/accessory/chameleon,
|
||||
/obj/item/weapon/storage/backpack/chameleon/full,
|
||||
/obj/item/weapon/gun/energy/chameleon
|
||||
)
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
/obj/item/device/flash,
|
||||
/obj/item/weapon/melee/baton/loaded,
|
||||
/obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos,
|
||||
/obj/item/weapon/rcd_ammo/large,
|
||||
/obj/item/weapon/cell/device/weapon,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
/obj/item/weapon/melee/telebaton,
|
||||
|
||||
@@ -222,6 +222,44 @@
|
||||
icon_state = "plant-01"
|
||||
|
||||
plane = OBJ_PLANE
|
||||
var/obj/item/stored_item
|
||||
|
||||
/obj/structure/flora/pottedplant/examine(mob/user)
|
||||
..()
|
||||
if(in_range(user, src) && stored_item)
|
||||
to_chat(user, "<i>You can see something in there...</i>")
|
||||
|
||||
/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user)
|
||||
if(stored_item)
|
||||
to_chat(user, "<span class='notice'>[I] won't fit in. There already appears to be something in here...</span>")
|
||||
return
|
||||
|
||||
if(I.w_class > ITEMSIZE_TINY)
|
||||
to_chat(user, "<span class='notice'>[I] is too big to fit inside [src].</span>")
|
||||
return
|
||||
|
||||
if(do_after(user, 10))
|
||||
user.drop_from_inventory(I, src)
|
||||
I.forceMove(src)
|
||||
stored_item = I
|
||||
src.visible_message("\icon[src] \icon[I] [user] places [I] into [src].")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You refrain from putting things into the plant pot.</span>")
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/flora/pottedplant/attack_hand(mob/user)
|
||||
if(!stored_item)
|
||||
to_chat(user, "<b>You see nothing of interest in [src]...</b>")
|
||||
else
|
||||
if(do_after(user, 10))
|
||||
to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!")
|
||||
stored_item.forceMove(get_turf(src))
|
||||
stored_item = null
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/flora/pottedplant/large
|
||||
name = "large potted plant"
|
||||
|
||||
366
code/game/objects/structures/salvageable.dm
Normal file
366
code/game/objects/structures/salvageable.dm
Normal file
@@ -0,0 +1,366 @@
|
||||
/obj/structure/salvageable
|
||||
name = "broken macninery"
|
||||
desc = "Broken beyond repair, but looks like you can still salvage something from this if you had a prying implement."
|
||||
icon = 'icons/obj/salvageable.dmi'
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/salvageable_parts = list()
|
||||
|
||||
/obj/structure/salvageable/proc/dismantle()
|
||||
new /obj/structure/frame (src.loc)
|
||||
for(var/path in salvageable_parts)
|
||||
if(prob(salvageable_parts[path]))
|
||||
new path (loc)
|
||||
return
|
||||
|
||||
/obj/structure/salvageable/attackby(obj/item/I, mob/user)
|
||||
if(I.is_crowbar())
|
||||
playsound(loc, I.usesound, 50, 1)
|
||||
var/actual_time = I.toolspeed * 170
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] begins salvaging from \the [src].</span>", \
|
||||
"<span class='notice'>You start salvaging from \the [src].</span>")
|
||||
if(do_after(user, actual_time, target = src))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>\The [user] has salvaged \the [src].</span>", \
|
||||
"<span class='notice'>You salvage \the [src].</span>")
|
||||
dismantle()
|
||||
qdel(src)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
//Types themself, use them, but not the parent object
|
||||
|
||||
/obj/structure/salvageable/machine
|
||||
name = "broken machine"
|
||||
icon_state = "machine1"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 80,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 40,
|
||||
/obj/item/weapon/stock_parts/capacitor = 40,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 40,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 40,
|
||||
/obj/item/weapon/stock_parts/manipulator = 40,
|
||||
/obj/item/weapon/stock_parts/manipulator = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/capacitor/adv = 20,
|
||||
/obj/item/weapon/stock_parts/scanning_module/adv = 20,
|
||||
/obj/item/weapon/stock_parts/manipulator/nano = 20,
|
||||
/obj/item/weapon/stock_parts/micro_laser/high = 20,
|
||||
/obj/item/weapon/stock_parts/matter_bin/adv = 20
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/machine/Initialize()
|
||||
. = ..()
|
||||
icon_state = "machine[rand(0,6)]"
|
||||
|
||||
/obj/structure/salvageable/computer
|
||||
name = "broken computer"
|
||||
icon_state = "computer0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/stock_parts/capacitor/adv = 30,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
obj/structure/salvageable/computer/Initialize()
|
||||
. = ..()
|
||||
icon_state = "computer[rand(0,7)]"
|
||||
|
||||
/obj/structure/salvageable/autolathe
|
||||
name = "broken autolathe"
|
||||
icon_state = "autolathe"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 80,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 40,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 40,
|
||||
/obj/item/weapon/stock_parts/manipulator = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/capacitor/adv = 20,
|
||||
/obj/item/weapon/stock_parts/micro_laser/high = 20,
|
||||
/obj/item/weapon/stock_parts/micro_laser/high = 20,
|
||||
/obj/item/weapon/stock_parts/matter_bin/adv = 20,
|
||||
/obj/item/weapon/stock_parts/matter_bin/adv = 20,
|
||||
/obj/item/stack/material/steel{amount = 20} = 40,
|
||||
/obj/item/stack/material/glass{amount = 20} = 40,
|
||||
/obj/item/stack/material/plastic{amount = 20} = 40,
|
||||
/obj/item/stack/material/plasteel{amount = 10} = 40,
|
||||
/obj/item/stack/material/silver{amount = 10} = 20,
|
||||
/obj/item/stack/material/gold{amount = 10} = 20,
|
||||
/obj/item/stack/material/phoron{amount = 10} = 20
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/implant_container
|
||||
name = "old container"
|
||||
icon_state = "implant_container0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 80,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/implant/death_alarm = 15,
|
||||
/obj/item/weapon/implant/explosive = 10,
|
||||
/obj/item/weapon/implant/freedom = 5,
|
||||
/obj/item/weapon/implant/tracking = 10,
|
||||
/obj/item/weapon/implant/chem = 10,
|
||||
/obj/item/weapon/implantcase = 30,
|
||||
/obj/item/weapon/implanter = 30,
|
||||
/obj/item/stack/material/steel{amount = 10} = 30,
|
||||
/obj/item/stack/material/glass{amount = 10} = 30,
|
||||
/obj/item/stack/material/silver{amount = 10} = 30
|
||||
)
|
||||
|
||||
obj/structure/salvageable/implant_container/Initialize()
|
||||
. = ..()
|
||||
icon_state = "implant_container[rand(0,1)]"
|
||||
|
||||
/obj/structure/salvageable/data
|
||||
name = "broken data storage"
|
||||
icon_state = "data0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
|
||||
obj/structure/salvageable/data/Initialize()
|
||||
. = ..()
|
||||
icon_state = "data[rand(0,1)]"
|
||||
|
||||
/obj/structure/salvageable/server
|
||||
name = "broken server"
|
||||
icon_state = "server0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 30,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 30,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 20
|
||||
)
|
||||
|
||||
obj/structure/salvageable/server/Initialize()
|
||||
. = ..()
|
||||
icon_state = "server[rand(0,1)]"
|
||||
|
||||
/obj/structure/salvageable/personal
|
||||
name = "personal terminal"
|
||||
icon_state = "personal0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 90,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 70,
|
||||
/obj/item/trash/material/circuit = 60,
|
||||
/obj/item/trash/material/metal = 60,
|
||||
/obj/item/weapon/computer_hardware/network_card = 60,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card/wired = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 60,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/small = 50,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic/small = 30,
|
||||
/obj/item/weapon/computer_hardware/hard_drive = 60,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/advanced = 40
|
||||
)
|
||||
|
||||
obj/structure/salvageable/personal/Initialize()
|
||||
. = ..()
|
||||
icon_state = "personal[rand(0,12)]"
|
||||
new /obj/structure/table/reinforced (loc)
|
||||
|
||||
/obj/structure/salvageable/bliss
|
||||
name = "strange terminal"
|
||||
icon_state = "bliss0"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 90,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 60,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/cluster = 50
|
||||
)
|
||||
|
||||
obj/structure/salvageable/bliss/Initialize()
|
||||
. = ..()
|
||||
icon_state = "bliss[rand(0,1)]"
|
||||
|
||||
/obj/structure/salvageable/bliss/attackby(obj/item/I, mob/user)
|
||||
if((. = ..()))
|
||||
playsound(user, 'sound/machines/shutdown.ogg', 60, 1)
|
||||
|
||||
//////////////////
|
||||
//// ONE STAR ////
|
||||
//////////////////
|
||||
|
||||
/obj/structure/salvageable/machine_os
|
||||
name = "broken machine"
|
||||
icon_state = "os-machine"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 80,
|
||||
/obj/item/weapon/stock_parts/capacitor = 40,
|
||||
/obj/item/weapon/stock_parts/capacitor = 40,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 40,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 40,
|
||||
/obj/item/weapon/stock_parts/manipulator = 40,
|
||||
/obj/item/weapon/stock_parts/manipulator = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40,
|
||||
/obj/item/weapon/stock_parts/matter_bin = 40
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/computer_os
|
||||
name = "broken computer"
|
||||
icon_state = "os-computer"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 40
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/implant_container_os
|
||||
name = "old container"
|
||||
icon_state = "os-container"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 80,
|
||||
/obj/item/weapon/implant/death_alarm = 30,
|
||||
/obj/item/weapon/implant/explosive = 20,
|
||||
/obj/item/weapon/implant/freedom = 20,
|
||||
/obj/item/weapon/implant/tracking = 30,
|
||||
/obj/item/weapon/implant/chem = 30,
|
||||
/obj/item/weapon/implantcase = 30,
|
||||
/obj/item/weapon/implanter = 30
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/data_os
|
||||
name = "broken data storage"
|
||||
icon_state = "os-data"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 90,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/small = 60,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/super = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/super = 50,
|
||||
/obj/item/weapon/computer_hardware/hard_drive/cluster = 50,
|
||||
/obj/item/weapon/computer_hardware/network_card/wired = 40
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/server_os
|
||||
name = "broken server"
|
||||
icon_state = "os-server"
|
||||
salvageable_parts = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/stack/material/glass{amount = 5} = 90,
|
||||
/obj/item/weapon/computer_hardware/network_card/wired = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card/wired = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 30,
|
||||
/obj/item/weapon/stock_parts/subspace/crystal = 30,
|
||||
/obj/item/weapon/computer_hardware/network_card/wired = 20
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/console_os
|
||||
name = "pristine console"
|
||||
desc = "Despite being in pristine condition this console doesn't respond to anything, but looks like you can still salvage something from this."
|
||||
icon_state = "os_console"
|
||||
salvageable_parts = list(
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/small = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 40
|
||||
)
|
||||
|
||||
/obj/structure/salvageable/console_broken_os
|
||||
name = "broken console"
|
||||
icon_state = "os_console_broken"
|
||||
salvageable_parts = list(
|
||||
/obj/item/stack/cable_coil{amount = 5} = 90,
|
||||
/obj/item/weapon/stock_parts/console_screen = 80,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/stock_parts/capacitor = 60,
|
||||
/obj/item/weapon/computer_hardware/processor_unit = 40,
|
||||
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/card_slot = 40,
|
||||
/obj/item/weapon/computer_hardware/network_card/advanced = 40
|
||||
)
|
||||
@@ -124,6 +124,12 @@
|
||||
/obj/structure/bed/chair/comfy/lime/New(var/newloc,var/newmaterial)
|
||||
..(newloc,"steel","lime")
|
||||
|
||||
/obj/structure/bed/chair/comfy/yellow/New(var/newloc,var/newmaterial)
|
||||
..(newloc,"steel","yellow")
|
||||
|
||||
/obj/structure/bed/chair/comfy/orange/New(var/newloc,var/newmaterial)
|
||||
..(newloc,"steel","orange")
|
||||
|
||||
/obj/structure/bed/chair/office
|
||||
anchored = 0
|
||||
buckle_movable = 1
|
||||
@@ -219,8 +225,8 @@
|
||||
|
||||
/obj/structure/bed/chair/sofa/update_icon()
|
||||
if(applies_material_colour && sofa_material)
|
||||
material = get_material_by_name(sofa_material)
|
||||
color = material.icon_colour
|
||||
var/material/color_material = get_material_by_name(sofa_material)
|
||||
color = color_material.icon_colour
|
||||
|
||||
if(sofa_material == "carpet")
|
||||
name = "red [initial(name)]"
|
||||
@@ -271,6 +277,9 @@
|
||||
/obj/structure/bed/chair/sofa/yellow
|
||||
sofa_material = "yellow"
|
||||
|
||||
/obj/structure/bed/chair/sofa/orange
|
||||
sofa_material = "orange"
|
||||
|
||||
//sofa directions
|
||||
|
||||
/obj/structure/bed/chair/sofa/left
|
||||
@@ -362,3 +371,12 @@
|
||||
|
||||
/obj/structure/bed/chair/sofa/yellow/corner
|
||||
icon_state = "sofacorner"
|
||||
|
||||
/obj/structure/bed/chair/sofa/orange/left
|
||||
icon_state = "sofaend_left"
|
||||
|
||||
/obj/structure/bed/chair/sofa/orange/right
|
||||
icon_state = "sofaend_right"
|
||||
|
||||
/obj/structure/bed/chair/sofa/orange/corner
|
||||
icon_state = "sofacorner"
|
||||
|
||||
@@ -161,3 +161,17 @@ var/list/shoreline_icon_cache = list()
|
||||
if(L.get_water_protection() < 1)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/turf/simulated/floor/water/contaminated
|
||||
desc = "This water smells pretty acrid."
|
||||
var poisonlevel = 10
|
||||
|
||||
turf/simulated/floor/water/contaminated/Entered(atom/movable/AM, atom/oldloc)
|
||||
..()
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/L = AM
|
||||
if(L.isSynthetic())
|
||||
return
|
||||
poisonlevel *= 1 - L.get_water_protection()
|
||||
if(poisonlevel > 0)
|
||||
L.adjustToxLoss(poisonlevel)
|
||||
@@ -148,14 +148,14 @@ var/world_topic_spam_protect_time = world.timeofday
|
||||
else if(T == "manifest")
|
||||
var/list/positions = list()
|
||||
var/list/set_names = list(
|
||||
"heads" = command_positions,
|
||||
"sec" = security_positions,
|
||||
"eng" = engineering_positions,
|
||||
"med" = medical_positions,
|
||||
"sci" = science_positions,
|
||||
"car" = cargo_positions,
|
||||
"civ" = civilian_positions,
|
||||
"bot" = nonhuman_positions
|
||||
"heads" = SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND),
|
||||
"sec" = SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY),
|
||||
"eng" = SSjob.get_job_titles_in_department(DEPARTMENT_ENGINEERING),
|
||||
"med" = SSjob.get_job_titles_in_department(DEPARTMENT_MEDICAL),
|
||||
"sci" = SSjob.get_job_titles_in_department(DEPARTMENT_RESEARCH),
|
||||
"car" = SSjob.get_job_titles_in_department(DEPARTMENT_CARGO),
|
||||
"civ" = SSjob.get_job_titles_in_department(DEPARTMENT_CIVILIAN),
|
||||
"bot" = SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)
|
||||
)
|
||||
|
||||
for(var/datum/data/record/t in data_core.general)
|
||||
|
||||
Reference in New Issue
Block a user