mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-27 14:08:44 +01:00
Merge branch 'master' of github.com:Kashargul/VOREStation into usr-to-user-up-to-player_effects
This commit is contained in:
@@ -80,3 +80,9 @@
|
||||
**Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/435)<br>
|
||||
**URL:** [Website](https://rogue-star.net/)<br>
|
||||
**License:** Permission granting in writing for use by Virgo and Chomp with proper attribution
|
||||
<br>
|
||||
**File:** `icons/mob/turkey.dmi`
|
||||
**Title:** Turkey<br>
|
||||
**Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/669)<br>
|
||||
**URL:** [Website](https://rogue-star.net/)<br>
|
||||
**License:** Permission granted in writing for use by Virgo and Chomp with proper attribution
|
||||
|
||||
@@ -36,11 +36,11 @@
|
||||
if(!partner)
|
||||
return 0
|
||||
|
||||
if(!air_master || air_master.current_cycle <= update_cycle)
|
||||
if(!SSair || SSair.current_cycle <= update_cycle)
|
||||
return 0
|
||||
|
||||
update_cycle = air_master.current_cycle
|
||||
partner.update_cycle = air_master.current_cycle
|
||||
update_cycle = SSair.current_cycle
|
||||
partner.update_cycle = SSair.current_cycle
|
||||
|
||||
var/air_heat_capacity = air_contents.heat_capacity()
|
||||
var/other_air_heat_capacity = partner.air_contents.heat_capacity()
|
||||
|
||||
+2
-2
@@ -36,11 +36,11 @@
|
||||
|
||||
//Convenience function for atoms to update turfs they occupy
|
||||
/atom/movable/proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master)
|
||||
if(!SSair)
|
||||
return 0
|
||||
|
||||
for(var/turf/simulated/turf in locs)
|
||||
air_master.mark_for_update(turf)
|
||||
SSair.mark_for_update(turf)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/*
|
||||
|
||||
Overview:
|
||||
Connections are made between turfs by air_master.connect(). They represent a single point where two zones converge.
|
||||
Connections are made between turfs by SSair.connect(). They represent a single point where two zones converge.
|
||||
|
||||
Class Vars:
|
||||
A - Always a simulated turf.
|
||||
@@ -60,19 +60,19 @@ Class Procs:
|
||||
|
||||
/connection/New(turf/simulated/A, turf/simulated/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(air_master.has_valid_zone(A))
|
||||
//ASSERT(air_master.has_valid_zone(B))
|
||||
ASSERT(HAS_VALID_ZONE(A))
|
||||
//ASSERT(HAS_VALID_ZONE(B))
|
||||
#endif
|
||||
src.A = A
|
||||
src.B = B
|
||||
zoneA = A.zone
|
||||
if(!istype(B))
|
||||
mark_space()
|
||||
edge = air_master.get_edge(A.zone,B)
|
||||
edge = SSair.get_edge(A.zone,B)
|
||||
edge.add_connection(src)
|
||||
else
|
||||
zoneB = B.zone
|
||||
edge = air_master.get_edge(A.zone,B.zone)
|
||||
edge = SSair.get_edge(A.zone,B.zone)
|
||||
edge.add_connection(src)
|
||||
|
||||
/connection/proc/mark_direct()
|
||||
@@ -108,7 +108,7 @@ Class Procs:
|
||||
erase()
|
||||
return
|
||||
|
||||
var/block_status = air_master.air_blocked(A,B)
|
||||
var/block_status = SSair.air_blocked(A,B)
|
||||
if(block_status & AIR_BLOCKED)
|
||||
//to_world("Blocked connection.")
|
||||
erase()
|
||||
@@ -133,7 +133,7 @@ Class Procs:
|
||||
return
|
||||
else
|
||||
edge.remove_connection(src)
|
||||
edge = air_master.get_edge(A.zone, B)
|
||||
edge = SSair.get_edge(A.zone, B)
|
||||
edge.add_connection(src)
|
||||
zoneA = A.zone
|
||||
|
||||
@@ -155,7 +155,7 @@ Class Procs:
|
||||
//to_world("Zones changed, \...")
|
||||
if(A.zone && B.zone)
|
||||
edge.remove_connection(src)
|
||||
edge = air_master.get_edge(A.zone, B.zone)
|
||||
edge = SSair.get_edge(A.zone, B.zone)
|
||||
edge.add_connection(src)
|
||||
zoneA = A.zone
|
||||
zoneB = B.zone
|
||||
|
||||
+10
-10
@@ -2,7 +2,7 @@
|
||||
|
||||
Overview:
|
||||
These are what handle gas transfers between zones and into space.
|
||||
They are found in a zone's edges list and in air_master.edges.
|
||||
They are found in a zone's edges list and in SSair.edges.
|
||||
Each edge updates every air tick due to their role in gas transfer.
|
||||
They come in two flavors, /connection_edge/zone and /connection_edge/unsimulated.
|
||||
As the type names might suggest, they handle inter-zone and spacelike connections respectively.
|
||||
@@ -82,7 +82,7 @@ Class Procs:
|
||||
/connection_edge/proc/contains_zone(zone/Z)
|
||||
|
||||
/connection_edge/proc/erase()
|
||||
air_master.remove_edge(src)
|
||||
SSair.remove_edge(src)
|
||||
//to_world("[type] Erased.")
|
||||
|
||||
/connection_edge/proc/tick()
|
||||
@@ -169,19 +169,19 @@ Class Procs:
|
||||
if(equiv)
|
||||
if(direct)
|
||||
erase()
|
||||
air_master.merge(A, B)
|
||||
SSair.merge(A, B)
|
||||
return
|
||||
else
|
||||
A.air.equalize(B.air)
|
||||
air_master.mark_edge_sleeping(src)
|
||||
SSair.mark_edge_sleeping(src)
|
||||
|
||||
air_master.mark_zone_update(A)
|
||||
air_master.mark_zone_update(B)
|
||||
SSair.mark_zone_update(A)
|
||||
SSair.mark_zone_update(B)
|
||||
|
||||
/connection_edge/zone/recheck()
|
||||
// Edges with only one side being vacuum need processing no matter how close.
|
||||
if(!A.air.compare(B.air, vacuum_exception = 1))
|
||||
air_master.mark_edge_active(src)
|
||||
SSair.mark_edge_active(src)
|
||||
|
||||
//Helper proc to get connections for a zone.
|
||||
/connection_edge/zone/proc/get_connected_zone(zone/from)
|
||||
@@ -233,16 +233,16 @@ Class Procs:
|
||||
|
||||
if(equiv)
|
||||
A.air.copy_from(air)
|
||||
air_master.mark_edge_sleeping(src)
|
||||
SSair.mark_edge_sleeping(src)
|
||||
|
||||
air_master.mark_zone_update(A)
|
||||
SSair.mark_zone_update(A)
|
||||
|
||||
/connection_edge/unsimulated/recheck()
|
||||
// Edges with only one side being vacuum need processing no matter how close.
|
||||
// Note: This handles the glaring flaw of a room holding pressure while exposed to space, but
|
||||
// does not specially handle the less common case of a simulated room exposed to an unsimulated pressurized turf.
|
||||
if(!A.air.compare(air, vacuum_exception = 1))
|
||||
air_master.mark_edge_active(src)
|
||||
SSair.mark_edge_active(src)
|
||||
|
||||
/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
|
||||
//This implements a simplistic version of the Stefan-Boltzmann law.
|
||||
|
||||
@@ -16,7 +16,7 @@ Class Procs:
|
||||
Preferable to accessing the connection directly because it checks validity.
|
||||
|
||||
place(connection/c, d)
|
||||
Called by air_master.connect(). Sets the connection in the specified direction to c.
|
||||
Called by SSair.connect(). Sets the connection in the specified direction to c.
|
||||
|
||||
update_all()
|
||||
Called after turf/update_air_properties(). Updates the validity of all connections on this turf.
|
||||
|
||||
@@ -1,231 +0,0 @@
|
||||
var/datum/controller/subsystem/air/air_master
|
||||
|
||||
var/tick_multiplier = 2
|
||||
|
||||
/*
|
||||
|
||||
Overview:
|
||||
The air controller does everything. There are tons of procs in here.
|
||||
|
||||
Class Vars:
|
||||
zones - All zones currently holding one or more turfs.
|
||||
edges - All processing edges.
|
||||
|
||||
tiles_to_update - Tiles scheduled to update next tick.
|
||||
zones_to_update - Zones which have had their air changed and need air archival.
|
||||
active_hotspots - All processing fire objects.
|
||||
|
||||
active_zones - The number of zones which were archived last tick. Used in debug verbs.
|
||||
next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function.
|
||||
|
||||
Class Procs:
|
||||
|
||||
mark_for_update(turf/T)
|
||||
Adds the turf to the update list. When updated, update_air_properties() will be called.
|
||||
When stuff changes that might affect airflow, call this. It's basically the only thing you need.
|
||||
|
||||
add_zone(zone/Z) and remove_zone(zone/Z)
|
||||
Adds zones to the zones list. Does not mark them for update.
|
||||
|
||||
air_blocked(turf/A, turf/B)
|
||||
Returns a bitflag consisting of:
|
||||
AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass.
|
||||
ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable.
|
||||
|
||||
has_valid_zone(turf/T)
|
||||
Checks the presence and validity of T's zone.
|
||||
May be called on unsimulated turfs, returning 0.
|
||||
|
||||
merge(zone/A, zone/B)
|
||||
Called when zones have a direct connection and equivalent pressure and temperature.
|
||||
Merges the zones to create a single zone.
|
||||
|
||||
connect(turf/simulated/A, turf/B)
|
||||
Called by turf/update_air_properties(). The first argument must be simulated.
|
||||
Creates a connection between A and B.
|
||||
|
||||
mark_zone_update(zone/Z)
|
||||
Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever
|
||||
air is returned from a simulated turf.
|
||||
|
||||
equivalent_pressure(zone/A, zone/B)
|
||||
Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged.
|
||||
|
||||
get_edge(zone/A, zone/B)
|
||||
get_edge(zone/A, turf/B)
|
||||
Gets a valid connection_edge between A and B, creating a new one if necessary.
|
||||
|
||||
has_same_air(turf/A, turf/B)
|
||||
Used to determine if an unsimulated edge represents a specific turf.
|
||||
Simulated edges use connection_edge/contains_zone() for the same purpose.
|
||||
Returns 1 if A has identical gases and temperature to B.
|
||||
|
||||
remove_edge(connection_edge/edge)
|
||||
Called when an edge is erased. Removes it from processing.
|
||||
|
||||
*/
|
||||
|
||||
//
|
||||
// The rest of the air subsystem is defined in air.dm
|
||||
//
|
||||
|
||||
/datum/controller/subsystem/air
|
||||
//Geometry lists
|
||||
var/list/zones = list()
|
||||
var/list/edges = list()
|
||||
//Geometry updates lists
|
||||
var/list/tiles_to_update = list()
|
||||
var/list/zones_to_update = list()
|
||||
var/list/active_fire_zones = list()
|
||||
var/list/active_hotspots = list()
|
||||
var/list/active_edges = list()
|
||||
|
||||
var/active_zones = 0
|
||||
var/current_cycle = 0
|
||||
var/next_id = 1 //Used to keep track of zone UIDs.
|
||||
|
||||
/datum/controller/subsystem/air/proc/add_zone(zone/z)
|
||||
zones.Add(z)
|
||||
z.name = "Zone [next_id++]"
|
||||
mark_zone_update(z)
|
||||
|
||||
/datum/controller/subsystem/air/proc/remove_zone(zone/z)
|
||||
zones.Remove(z)
|
||||
zones_to_update.Remove(z)
|
||||
|
||||
/datum/controller/subsystem/air/proc/air_blocked(turf/A, turf/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(isturf(A))
|
||||
ASSERT(isturf(B))
|
||||
#endif
|
||||
var/ablock = A.c_airblock(B)
|
||||
if(ablock == BLOCKED) return BLOCKED
|
||||
return ablock | B.c_airblock(A)
|
||||
|
||||
/datum/controller/subsystem/air/proc/has_valid_zone(turf/simulated/T)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(T))
|
||||
#endif
|
||||
return istype(T) && T.zone && !T.zone.invalid
|
||||
|
||||
/datum/controller/subsystem/air/proc/merge(zone/A, zone/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(A))
|
||||
ASSERT(istype(B))
|
||||
ASSERT(!A.invalid)
|
||||
ASSERT(!B.invalid)
|
||||
ASSERT(A != B)
|
||||
#endif
|
||||
if(A.contents.len < B.contents.len)
|
||||
A.c_merge(B)
|
||||
mark_zone_update(B)
|
||||
else
|
||||
B.c_merge(A)
|
||||
mark_zone_update(A)
|
||||
|
||||
/datum/controller/subsystem/air/proc/connect(turf/simulated/A, turf/simulated/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(A))
|
||||
ASSERT(isturf(B))
|
||||
ASSERT(A.zone)
|
||||
ASSERT(!A.zone.invalid)
|
||||
//ASSERT(B.zone)
|
||||
ASSERT(A != B)
|
||||
#endif
|
||||
|
||||
var/block = air_master.air_blocked(A,B)
|
||||
if(block & AIR_BLOCKED) return
|
||||
|
||||
var/direct = !(block & ZONE_BLOCKED)
|
||||
var/space = !istype(B)
|
||||
|
||||
if(!space)
|
||||
if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || current_cycle == 0)))
|
||||
merge(A.zone,B.zone)
|
||||
return
|
||||
|
||||
var/a_to_b = get_dir(A,B)
|
||||
var/b_to_a = get_dir(B,A)
|
||||
|
||||
if(!A.connections) A.connections = new
|
||||
if(!B.connections) B.connections = new
|
||||
|
||||
if(A.connections.get(a_to_b)) return
|
||||
if(B.connections.get(b_to_a)) return
|
||||
if(!space)
|
||||
if(A.zone == B.zone) return
|
||||
|
||||
|
||||
var/connection/c = new /connection(A,B)
|
||||
|
||||
A.connections.place(c, a_to_b)
|
||||
B.connections.place(c, b_to_a)
|
||||
|
||||
if(direct) c.mark_direct()
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_for_update(turf/T)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(isturf(T))
|
||||
#endif
|
||||
if(T.needs_air_update) return
|
||||
tiles_to_update |= T
|
||||
#ifdef ZASDBG
|
||||
T.add_overlay(mark)
|
||||
#endif
|
||||
T.needs_air_update = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_zone_update(zone/Z)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(Z))
|
||||
#endif
|
||||
if(Z.needs_update) return
|
||||
zones_to_update.Add(Z)
|
||||
Z.needs_update = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_edge_sleeping(connection_edge/E)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(E))
|
||||
#endif
|
||||
if(E.sleeping) return
|
||||
active_edges.Remove(E)
|
||||
E.sleeping = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_edge_active(connection_edge/E)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(E))
|
||||
#endif
|
||||
if(!E.sleeping) return
|
||||
active_edges.Add(E)
|
||||
E.sleeping = 0
|
||||
|
||||
/datum/controller/subsystem/air/proc/equivalent_pressure(zone/A, zone/B)
|
||||
return A.air.compare(B.air)
|
||||
|
||||
/datum/controller/subsystem/air/proc/get_edge(zone/A, zone/B)
|
||||
|
||||
if(istype(B))
|
||||
for(var/connection_edge/zone/edge in A.edges)
|
||||
if(edge.contains_zone(B)) return edge
|
||||
var/connection_edge/edge = new/connection_edge/zone(A,B)
|
||||
edges.Add(edge)
|
||||
edge.recheck()
|
||||
return edge
|
||||
else
|
||||
for(var/connection_edge/unsimulated/edge in A.edges)
|
||||
if(has_same_air(edge.B,B)) return edge
|
||||
var/connection_edge/edge = new/connection_edge/unsimulated(A,B)
|
||||
edges.Add(edge)
|
||||
edge.recheck()
|
||||
return edge
|
||||
|
||||
/datum/controller/subsystem/air/proc/has_same_air(turf/A, turf/B)
|
||||
if(A.oxygen != B.oxygen) return 0
|
||||
if(A.nitrogen != B.nitrogen) return 0
|
||||
if(A.phoron != B.phoron) return 0
|
||||
if(A.carbon_dioxide != B.carbon_dioxide) return 0
|
||||
if(A.temperature != B.temperature) return 0
|
||||
return 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/remove_edge(connection_edge/E)
|
||||
edges.Remove(E)
|
||||
if(!E.sleeping) active_edges.Remove(E)
|
||||
@@ -8,12 +8,12 @@
|
||||
/*
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
var/result = air_master.Tick()
|
||||
var/result = SSair.Tick()
|
||||
if(result)
|
||||
to_chat(src, "Successfully Processed.")
|
||||
|
||||
else
|
||||
to_chat(src, "Failed to process! ([air_master.tick_progress])")
|
||||
to_chat(src, "Failed to process! ([SSair.tick_progress])")
|
||||
*/
|
||||
|
||||
/client/proc/Zone_Info(turf/T as null|turf)
|
||||
|
||||
+4
-4
@@ -58,7 +58,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
fuel_objs.Cut()
|
||||
|
||||
if(!fire_tiles.len)
|
||||
air_master.active_fire_zones.Remove(src)
|
||||
SSair.active_fire_zones.Remove(src)
|
||||
|
||||
/zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
|
||||
if(!fuel_objs.len)
|
||||
@@ -94,7 +94,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
return 1
|
||||
|
||||
fire = new(src, fl)
|
||||
air_master.active_fire_zones |= zone
|
||||
SSair.active_fire_zones |= zone
|
||||
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src
|
||||
zone.fire_tiles |= src
|
||||
@@ -191,7 +191,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
set_light(3, 1, color)
|
||||
|
||||
firelevel = fl
|
||||
air_master.active_hotspots.Add(src)
|
||||
SSair.active_hotspots.Add(src)
|
||||
|
||||
/obj/fire/proc/fire_color(var/env_temperature)
|
||||
var/temperature = max(4000*sqrt(firelevel/vsc.fire_firelevel_multiplier), env_temperature)
|
||||
@@ -209,7 +209,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin
|
||||
|
||||
T.fire = null
|
||||
loc = null
|
||||
air_master.active_hotspots.Remove(src)
|
||||
SSair.active_hotspots.Remove(src)
|
||||
|
||||
|
||||
/turf/simulated/var/fire_protection = 0 //Protects newly extinguished tiles from being overrun again.
|
||||
|
||||
+7
-8
@@ -41,9 +41,8 @@
|
||||
if(istype(unsim, /turf/simulated))
|
||||
|
||||
var/turf/simulated/sim = unsim
|
||||
if(air_master.has_valid_zone(sim))
|
||||
|
||||
air_master.connect(sim, src)
|
||||
if(HAS_VALID_ZONE(sim))
|
||||
SSair.connect(sim, src)
|
||||
|
||||
/*
|
||||
Simple heuristic for determining if removing the turf from it's zone will not partition the zone (A very bad thing).
|
||||
@@ -162,7 +161,7 @@
|
||||
var/turf/simulated/sim = unsim
|
||||
sim.open_directions |= reverse_dir[d]
|
||||
|
||||
if(air_master.has_valid_zone(sim))
|
||||
if(HAS_VALID_ZONE(sim))
|
||||
|
||||
//Might have assigned a zone, since this happens for each direction.
|
||||
if(!zone)
|
||||
@@ -195,7 +194,7 @@
|
||||
if(verbose) to_world("Connecting to [sim.zone]")
|
||||
#endif
|
||||
|
||||
air_master.connect(src, sim)
|
||||
SSair.connect(src, sim)
|
||||
|
||||
|
||||
#ifdef ZASDBG
|
||||
@@ -210,7 +209,7 @@
|
||||
if(!postponed) postponed = list()
|
||||
postponed.Add(unsim)
|
||||
|
||||
if(!air_master.has_valid_zone(src)) //Still no zone, make a new one.
|
||||
if(!HAS_VALID_ZONE(src)) //Still no zone, make a new one.
|
||||
var/zone/newzone = new/zone()
|
||||
newzone.add(src)
|
||||
|
||||
@@ -223,7 +222,7 @@
|
||||
//At this point, a zone should have happened. If it hasn't, don't add more checks, fix the bug.
|
||||
|
||||
for(var/turf/T in postponed)
|
||||
air_master.connect(src, T)
|
||||
SSair.connect(src, T)
|
||||
|
||||
/turf/proc/post_update_air_properties()
|
||||
if(connections) connections.update_all()
|
||||
@@ -279,7 +278,7 @@
|
||||
/turf/simulated/return_air()
|
||||
if(zone)
|
||||
if(!zone.invalid)
|
||||
air_master.mark_zone_update(zone)
|
||||
SSair.mark_zone_update(zone)
|
||||
return zone.air
|
||||
else
|
||||
if(!air)
|
||||
|
||||
+9
-9
@@ -56,7 +56,7 @@ Class Procs:
|
||||
/zone/var/list/graphic_remove = list()
|
||||
|
||||
/zone/New()
|
||||
air_master.add_zone(src)
|
||||
SSair.add_zone(src)
|
||||
air.temperature = TCMB
|
||||
air.group_multiplier = 1
|
||||
air.volume = CELL_VOLUME
|
||||
@@ -65,7 +65,7 @@ Class Procs:
|
||||
#ifdef ZASDBG
|
||||
ASSERT(!invalid)
|
||||
ASSERT(istype(T))
|
||||
ASSERT(!air_master.has_valid_zone(T))
|
||||
ASSERT(!HAS_VALID_ZONE(T))
|
||||
#endif
|
||||
|
||||
var/datum/gas_mixture/turf_air = T.return_air()
|
||||
@@ -75,7 +75,7 @@ Class Procs:
|
||||
if(T.fire)
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T
|
||||
fire_tiles.Add(T)
|
||||
air_master.active_fire_zones |= src
|
||||
SSair.active_fire_zones |= src
|
||||
if(fuel) fuel_objs += fuel
|
||||
if(air.graphic)
|
||||
T.update_graphic(air.graphic)
|
||||
@@ -122,11 +122,11 @@ Class Procs:
|
||||
if(E.contains_zone(into))
|
||||
continue //don't need to rebuild this edge
|
||||
for(var/turf/T in E.connecting_turfs)
|
||||
air_master.mark_for_update(T)
|
||||
SSair.mark_for_update(T)
|
||||
|
||||
/zone/proc/c_invalidate()
|
||||
invalid = 1
|
||||
air_master.remove_zone(src)
|
||||
SSair.remove_zone(src)
|
||||
#ifdef ZASDBG
|
||||
for(var/turf/simulated/T in contents)
|
||||
T.dbg(invalid_zone)
|
||||
@@ -141,7 +141,7 @@ Class Procs:
|
||||
T.update_graphic(graphic_remove = air_graphic) //we need to remove the overlays so they're not doubled when the zone is rebuilt
|
||||
//T.dbg(invalid_zone)
|
||||
T.needs_air_update = 0 //Reset the marker so that it will be added to the list.
|
||||
air_master.mark_for_update(T)
|
||||
SSair.mark_for_update(T)
|
||||
|
||||
/zone/proc/add_tile_air(datum/gas_mixture/tile_air)
|
||||
//air.volume += CELL_VOLUME
|
||||
@@ -152,7 +152,7 @@ Class Procs:
|
||||
air.group_multiplier = contents.len+1
|
||||
|
||||
/zone/proc/tick()
|
||||
if(air.temperature >= PHORON_FLASHPOINT && !(src in air_master.active_fire_zones) && air.check_combustability() && contents.len)
|
||||
if(air.temperature >= PHORON_FLASHPOINT && !(src in SSair.active_fire_zones) && air.check_combustability() && contents.len)
|
||||
var/turf/T = pick(contents)
|
||||
if(istype(T))
|
||||
T.create_fire(vsc.fire_firelevel_multiplier)
|
||||
@@ -171,7 +171,7 @@ Class Procs:
|
||||
to_chat(M,name)
|
||||
for(var/g in air.gas)
|
||||
to_chat(M, "[gas_data.name[g]]: [air.gas[g]]")
|
||||
to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)")
|
||||
to_chat(M, "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]�K ([air.temperature - T0C]�C)")
|
||||
to_chat(M, "O2 per N2: [(air.gas["nitrogen"] ? air.gas["oxygen"]/air.gas["nitrogen"] : "N/A")] Moles: [air.total_moles]")
|
||||
to_chat(M, "Simulated: [contents.len] ([air.group_multiplier])")
|
||||
//to_chat(M, "Unsimulated: [unsimulated_contents.len]")
|
||||
@@ -192,4 +192,4 @@ Class Procs:
|
||||
to_chat(M, "Space Edges: [space_edges] ([space_coefficient] connections)")
|
||||
|
||||
//for(var/turf/T in unsimulated_contents)
|
||||
// to_chat(M, "[T] at ([T.x],[T.y])")
|
||||
// to_chat(M, "[T] at ([T.x],[T.y])")
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ Every air tick:
|
||||
|
||||
Important Functions:
|
||||
|
||||
air_master.mark_for_update(turf)
|
||||
SSair.mark_for_update(turf)
|
||||
When stuff happens, call this. It works on everything. You basically don't need to worry about any other
|
||||
functions besides CanPass().
|
||||
|
||||
|
||||
@@ -11,3 +11,5 @@
|
||||
#define ATMOS_PASS_NO 2 // Never blocks air or zones.
|
||||
#define ATMOS_PASS_DENSITY 3 // Blocks air and zones if density = TRUE, allows both if density = FALSE
|
||||
#define ATMOS_PASS_PROC 4 // Call CanZASPass() using c_airblock
|
||||
|
||||
#define HAS_VALID_ZONE(T) (T.zone && !T.zone.invalid)
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#define CE_DARKSIGHT "darksight" // Gives perfect vision in dark
|
||||
|
||||
#define REAGENTS_PER_SHEET 20
|
||||
#define REAGENTS_PER_ORE 20
|
||||
|
||||
// Attached to CE_ANTIBIOTIC
|
||||
#define ANTIBIO_NORM 1
|
||||
|
||||
@@ -105,6 +105,7 @@
|
||||
#define FACTION_SWARMER "swarmer"
|
||||
#define FACTION_TEPPI "teppi"
|
||||
#define FACTION_TUNNELCLOWN "tunnelclown"
|
||||
#define FACTION_TURKEY "turkey"
|
||||
#define FACTION_WILD_ANIMAL "wild animal"
|
||||
#define FACTION_WOLFGIRL "wolfgirl"
|
||||
#define FACTION_WOLFTAUR "wolftaur"
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
#define ACCESSORY_SLOT_ARMOR_M 0x8000
|
||||
#define ACCESSORY_SLOT_HELM_C 0x10000 //24 bit - higher than 0x80000 will overflow
|
||||
|
||||
#define ACCESSORY_SLOT_RING 0x20000 //rings, knuckledusters
|
||||
#define ACCESSORY_SLOT_WRIST 0x40000 //wristwatches, wrist PDA maybe?
|
||||
|
||||
// Bitmasks for the /obj/item/var/flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses.
|
||||
// WARNING: The following flags apply only to the external suit!
|
||||
#define HIDEGLOVES 0x1
|
||||
|
||||
@@ -201,6 +201,7 @@
|
||||
#define JOB_ALT_CONSTRUCTION_ENGINEER "Construction Engineer"
|
||||
#define JOB_ALT_ENGINEERING_CONTRACTOR "Engineering Contractor"
|
||||
#define JOB_ALT_COMPUTER_TECHNICIAN "Computer Technician"
|
||||
#define JOB_ALT_SALVAGE_TECHNICIAN "Salvage Technician"
|
||||
|
||||
#define JOB_ATMOSPHERIC_TECHNICIAN "Atmospheric Technician"
|
||||
// Atmospheric Technician alt titles
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
if(ismob(I))
|
||||
if(!sight_check || isInSight(I, O))
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects, ignore_show_messages)
|
||||
if(include_mobs)
|
||||
if(client_check)
|
||||
var/mob/M = I
|
||||
@@ -185,7 +185,7 @@
|
||||
var/obj/check_obj = I
|
||||
if(ignore_show_messages || check_obj.show_messages)
|
||||
if(!sight_check || isInSight(I, O))
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects, ignore_show_messages)
|
||||
if(include_objects)
|
||||
L |= I
|
||||
|
||||
|
||||
+11
-5
@@ -343,16 +343,17 @@
|
||||
//The icon var could be local in the proc, but it's a waste of resources
|
||||
// to always create it and then throw it out.
|
||||
/var/icon/text_tag_icons = 'icons/chattags.dmi'
|
||||
/var/list/text_tag_cache = list()
|
||||
GLOBAL_LIST_EMPTY(text_tag_cache)
|
||||
|
||||
/proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null)
|
||||
if(!(C && C.prefs?.read_preference(/datum/preference/toggle/chat_tags)))
|
||||
return tagdesc
|
||||
if(!text_tag_cache[tagname])
|
||||
var/icon/tag = icon(text_tag_icons, tagname)
|
||||
text_tag_cache[tagname] = tag
|
||||
if(!GLOB.text_tag_cache[tagname])
|
||||
var/datum/asset/spritesheet/chatassets = get_asset_datum(/datum/asset/spritesheet/chat)
|
||||
GLOB.text_tag_cache[tagname] = chatassets.icon_tag(tagname)
|
||||
if(!C.tgui_panel.is_ready() || C.tgui_panel.oldchat)
|
||||
return "<IMG src='\ref[text_tag_icons]' class='text_tag' iconstate='[tagname]'" + (tagdesc ? " alt='[tagdesc]'" : "") + ">"
|
||||
return icon2html(text_tag_cache[tagname], C, extra_classes = "text_tag")
|
||||
return GLOB.text_tag_cache[tagname]
|
||||
|
||||
/proc/create_text_tag_old(var/tagname, var/tagdesc = tagname, var/client/C = null)
|
||||
if(!(C && C.prefs?.read_preference(/datum/preference/toggle/chat_tags)))
|
||||
@@ -620,3 +621,8 @@
|
||||
return json_decode(data)
|
||||
catch
|
||||
return null
|
||||
|
||||
/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts
|
||||
/proc/sanitize_css_class_name(name)
|
||||
var/static/regex/regex = new(@"[^a-zA-Z0-9]","g")
|
||||
return replacetext(name, regex, "")
|
||||
|
||||
@@ -974,7 +974,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
|
||||
if(toupdate.len)
|
||||
for(var/turf/simulated/T1 in toupdate)
|
||||
air_master.mark_for_update(T1)
|
||||
SSair.mark_for_update(T1)
|
||||
|
||||
return copiedobjs
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ var/global/datum/controller/game_controller/master_controller //Set in world.New
|
||||
var/global/controller_iteration = 0
|
||||
var/global/last_tick_duration = 0
|
||||
|
||||
var/global/pipe_processing_killed = 0
|
||||
|
||||
/datum/controller/game_controller
|
||||
var/list/shuttle_list // For debugging and VV
|
||||
|
||||
|
||||
@@ -1,3 +1,60 @@
|
||||
/*
|
||||
Overview:
|
||||
SSair does everything. There are tons of procs in here.
|
||||
|
||||
Class Vars:
|
||||
zones - All zones currently holding one or more turfs.
|
||||
edges - All processing edges.
|
||||
|
||||
tiles_to_update - Tiles scheduled to update next tick.
|
||||
zones_to_update - Zones which have had their air changed and need air archival.
|
||||
active_hotspots - All processing fire objects.
|
||||
|
||||
active_zones - The number of zones which were archived last tick. Used in debug verbs.
|
||||
next_id - The next UID to be applied to a zone. Mostly useful for debugging purposes as zones do not need UIDs to function.
|
||||
|
||||
Class Procs:
|
||||
|
||||
mark_for_update(turf/T)
|
||||
Adds the turf to the update list. When updated, update_air_properties() will be called.
|
||||
When stuff changes that might affect airflow, call this. It's basically the only thing you need.
|
||||
|
||||
add_zone(zone/Z) and remove_zone(zone/Z)
|
||||
Adds zones to the zones list. Does not mark them for update.
|
||||
|
||||
air_blocked(turf/A, turf/B)
|
||||
Returns a bitflag consisting of:
|
||||
AIR_BLOCKED - The connection between turfs is physically blocked. No air can pass.
|
||||
ZONE_BLOCKED - There is a door between the turfs, so zones cannot cross. Air may or may not be permeable.
|
||||
|
||||
merge(zone/A, zone/B)
|
||||
Called when zones have a direct connection and equivalent pressure and temperature.
|
||||
Merges the zones to create a single zone.
|
||||
|
||||
connect(turf/simulated/A, turf/B)
|
||||
Called by turf/update_air_properties(). The first argument must be simulated.
|
||||
Creates a connection between A and B.
|
||||
|
||||
mark_zone_update(zone/Z)
|
||||
Adds zone to the update list. Unlike mark_for_update(), this one is called automatically whenever
|
||||
air is returned from a simulated turf.
|
||||
|
||||
equivalent_pressure(zone/A, zone/B)
|
||||
Currently identical to A.air.compare(B.air). Returns 1 when directly connected zones are ready to be merged.
|
||||
|
||||
get_edge(zone/A, zone/B)
|
||||
get_edge(zone/A, turf/B)
|
||||
Gets a valid connection_edge between A and B, creating a new one if necessary.
|
||||
|
||||
has_same_air(turf/A, turf/B)
|
||||
Used to determine if an unsimulated edge represents a specific turf.
|
||||
Simulated edges use connection_edge/contains_zone() for the same purpose.
|
||||
Returns 1 if A has identical gases and temperature to B.
|
||||
|
||||
remove_edge(connection_edge/edge)
|
||||
Called when an edge is erased. Removes it from processing.
|
||||
*/
|
||||
|
||||
// Air update stages
|
||||
#define SSAIR_TURFS 1
|
||||
#define SSAIR_EDGES 2
|
||||
@@ -30,8 +87,19 @@ SUBSYSTEM_DEF(air)
|
||||
// This is used to tell CI WHERE the edges are.
|
||||
var/list/startup_active_edge_log = list()
|
||||
|
||||
/datum/controller/subsystem/air/PreInit()
|
||||
air_master = src
|
||||
//Geometry lists
|
||||
var/list/zones = list()
|
||||
var/list/edges = list()
|
||||
//Geometry updates lists
|
||||
var/list/tiles_to_update = list()
|
||||
var/list/zones_to_update = list()
|
||||
var/list/active_fire_zones = list()
|
||||
var/list/active_hotspots = list()
|
||||
var/list/active_edges = list()
|
||||
|
||||
var/active_zones = 0
|
||||
var/current_cycle = 0
|
||||
var/next_id = 1 //Used to keep track of zone UIDs.
|
||||
|
||||
/datum/controller/subsystem/air/Initialize(timeofday)
|
||||
report_progress("Processing Geometry...")
|
||||
@@ -109,7 +177,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
|
||||
log_and_message_admins("SSair: Was told to start a new run, but the previous run wasn't finished! currentrun.len=[currentrun.len], current_step=[current_step]")
|
||||
resumed = TRUE
|
||||
else
|
||||
current_cycle++ // Begin a new air_master cycle!
|
||||
current_cycle++ // Begin a new SSair cycle!
|
||||
current_step = SSAIR_TURFS // Start with Step 1 of course
|
||||
|
||||
INTERNAL_PROCESS_STEP(SSAIR_TURFS, TRUE, process_tiles_to_update, cost_turfs, SSAIR_EDGES)
|
||||
@@ -118,7 +186,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
|
||||
INTERNAL_PROCESS_STEP(SSAIR_HOTSPOTS, FALSE, process_active_hotspots, cost_hotspots, SSAIR_ZONES)
|
||||
INTERNAL_PROCESS_STEP(SSAIR_ZONES, FALSE, process_zones_to_update, cost_zones, SSAIR_DONE)
|
||||
|
||||
// Okay, we're done! Woo! Got thru a whole air_master cycle!
|
||||
// Okay, we're done! Woo! Got thru a whole SSair cycle!
|
||||
if(LAZYLEN(currentrun) || current_step != SSAIR_DONE)
|
||||
log_and_message_admins("SSair: Was not able to complete a full air cycle despite reaching the end of fire(). This shouldn't happen.")
|
||||
else
|
||||
@@ -305,9 +373,162 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
|
||||
next_fire = world.time + wait
|
||||
can_fire = TRUE // Unpause
|
||||
|
||||
//
|
||||
// The procs from the ZAS Air Controller are in ZAS/Controller.dm
|
||||
//
|
||||
/datum/controller/subsystem/air/proc/add_zone(zone/z)
|
||||
zones.Add(z)
|
||||
z.name = "Zone [next_id++]"
|
||||
mark_zone_update(z)
|
||||
|
||||
/datum/controller/subsystem/air/proc/remove_zone(zone/z)
|
||||
zones.Remove(z)
|
||||
zones_to_update.Remove(z)
|
||||
|
||||
/datum/controller/subsystem/air/proc/air_blocked(turf/A, turf/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(isturf(A))
|
||||
ASSERT(isturf(B))
|
||||
#endif
|
||||
var/ablock = A.c_airblock(B)
|
||||
if(ablock == BLOCKED)
|
||||
return BLOCKED
|
||||
return ablock | B.c_airblock(A)
|
||||
|
||||
/datum/controller/subsystem/air/proc/merge(zone/A, zone/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(A))
|
||||
ASSERT(istype(B))
|
||||
ASSERT(!A.invalid)
|
||||
ASSERT(!B.invalid)
|
||||
ASSERT(A != B)
|
||||
#endif
|
||||
if(A.contents.len < B.contents.len)
|
||||
A.c_merge(B)
|
||||
mark_zone_update(B)
|
||||
else
|
||||
B.c_merge(A)
|
||||
mark_zone_update(A)
|
||||
|
||||
/datum/controller/subsystem/air/proc/connect(turf/simulated/A, turf/simulated/B)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(A))
|
||||
ASSERT(isturf(B))
|
||||
ASSERT(A.zone)
|
||||
ASSERT(!A.zone.invalid)
|
||||
//ASSERT(B.zone)
|
||||
ASSERT(A != B)
|
||||
#endif
|
||||
|
||||
var/block = SSair.air_blocked(A,B)
|
||||
if(block & AIR_BLOCKED) return
|
||||
|
||||
var/direct = !(block & ZONE_BLOCKED)
|
||||
var/space = !istype(B)
|
||||
|
||||
if(!space)
|
||||
if(min(A.zone.contents.len, B.zone.contents.len) < ZONE_MIN_SIZE || (direct && (equivalent_pressure(A.zone,B.zone) || current_cycle == 0)))
|
||||
merge(A.zone,B.zone)
|
||||
return
|
||||
|
||||
var/a_to_b = get_dir(A,B)
|
||||
var/b_to_a = get_dir(B,A)
|
||||
|
||||
if(!A.connections)
|
||||
A.connections = new
|
||||
if(!B.connections)
|
||||
B.connections = new
|
||||
|
||||
if(A.connections.get(a_to_b))
|
||||
return
|
||||
if(B.connections.get(b_to_a))
|
||||
return
|
||||
if(!space)
|
||||
if(A.zone == B.zone)
|
||||
return
|
||||
|
||||
|
||||
var/connection/c = new /connection(A,B)
|
||||
|
||||
A.connections.place(c, a_to_b)
|
||||
B.connections.place(c, b_to_a)
|
||||
|
||||
if(direct) c.mark_direct()
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_for_update(turf/T)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(isturf(T))
|
||||
#endif
|
||||
if(T.needs_air_update)
|
||||
return
|
||||
tiles_to_update |= T
|
||||
#ifdef ZASDBG
|
||||
T.add_overlay(mark)
|
||||
#endif
|
||||
T.needs_air_update = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_zone_update(zone/Z)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(Z))
|
||||
#endif
|
||||
if(Z.needs_update)
|
||||
return
|
||||
zones_to_update.Add(Z)
|
||||
Z.needs_update = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_edge_sleeping(connection_edge/E)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(E))
|
||||
#endif
|
||||
if(E.sleeping)
|
||||
return
|
||||
active_edges.Remove(E)
|
||||
E.sleeping = 1
|
||||
|
||||
/datum/controller/subsystem/air/proc/mark_edge_active(connection_edge/E)
|
||||
#ifdef ZASDBG
|
||||
ASSERT(istype(E))
|
||||
#endif
|
||||
if(!E.sleeping)
|
||||
return
|
||||
active_edges.Add(E)
|
||||
E.sleeping = 0
|
||||
|
||||
/datum/controller/subsystem/air/proc/equivalent_pressure(zone/A, zone/B)
|
||||
return A.air.compare(B.air)
|
||||
|
||||
/datum/controller/subsystem/air/proc/get_edge(zone/A, zone/B)
|
||||
if(istype(B))
|
||||
for(var/connection_edge/zone/edge in A.edges)
|
||||
if(edge.contains_zone(B))
|
||||
return edge
|
||||
var/connection_edge/edge = new /connection_edge/zone(A,B)
|
||||
edges.Add(edge)
|
||||
edge.recheck()
|
||||
return edge
|
||||
else
|
||||
for(var/connection_edge/unsimulated/edge in A.edges)
|
||||
if(has_same_air(edge.B,B))
|
||||
return edge
|
||||
var/connection_edge/edge = new /connection_edge/unsimulated(A,B)
|
||||
edges.Add(edge)
|
||||
edge.recheck()
|
||||
return edge
|
||||
|
||||
/datum/controller/subsystem/air/proc/has_same_air(turf/A, turf/B)
|
||||
if(A.oxygen != B.oxygen)
|
||||
return FALSE
|
||||
if(A.nitrogen != B.nitrogen)
|
||||
return FALSE
|
||||
if(A.phoron != B.phoron)
|
||||
return FALSE
|
||||
if(A.carbon_dioxide != B.carbon_dioxide)
|
||||
return FALSE
|
||||
if(A.temperature != B.temperature)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/controller/subsystem/air/proc/remove_edge(connection_edge/E)
|
||||
edges.Remove(E)
|
||||
if(!E.sleeping)
|
||||
active_edges.Remove(E)
|
||||
|
||||
#undef SSAIR_TURFS
|
||||
#undef SSAIR_EDGES
|
||||
|
||||
@@ -89,7 +89,6 @@
|
||||
|
||||
//Goon PS stuff, and other yet-to-be-subsystem things.
|
||||
options["LEGACY: master_controller"] = master_controller
|
||||
options["LEGACY: air_master"] = air_master
|
||||
options["LEGACY: job_master"] = job_master
|
||||
options["LEGACY: radio_controller"] = radio_controller
|
||||
options["LEGACY: emergency_shuttle"] = emergency_shuttle
|
||||
|
||||
@@ -443,7 +443,7 @@
|
||||
|
||||
/datum/category_item/autolathe/arms/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
path =/obj/item/clothing/gloves/knuckledusters
|
||||
path =/obj/item/clothing/accessory/knuckledusters
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tacknife
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(prob(15/D.permeability_mod))
|
||||
return
|
||||
|
||||
if(nutrition > 300 && prob(nutrition/10))
|
||||
if(nutrition > 300 && prob(nutrition/50))
|
||||
return
|
||||
|
||||
var/list/zone_weights = list(
|
||||
@@ -178,16 +178,13 @@
|
||||
return FALSE
|
||||
|
||||
var/disease = tgui_input_list(usr, "Choose virus", "Viruses", subtypesof(/datum/disease), subtypesof(/datum/disease))
|
||||
var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
var/mob/living/carbon/human/H = tgui_input_list(usr, "Choose infectee", "Characters", human_mob_list)
|
||||
|
||||
var/datum/disease/D = new disease
|
||||
|
||||
if(isnull(D) || isnull(H))
|
||||
return FALSE
|
||||
|
||||
if(H.stat == DEAD)
|
||||
return FALSE
|
||||
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
|
||||
var/cures_found = 0
|
||||
for(var/C_id in cures)
|
||||
if(affected_mob.reagents.has_reagent(C_id))
|
||||
if(affected_mob.bloodstr.has_reagent(C_id) || affected_mob.ingested.has_reagent(C_id))
|
||||
cures_found++
|
||||
|
||||
if(needs_all_cures && cures_found < length(cures))
|
||||
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
if((spread_flags & SPECIAL || spread_flags & NON_CONTAGIOUS || spread_flags & BLOOD) && !force_spread)
|
||||
return
|
||||
|
||||
if(affected_mob.reagents.has_reagent("spaceacilin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/10)))
|
||||
if(affected_mob.bloodstr.has_reagent("spaceacillin") || (affected_mob.nutrition > 300 && prob(affected_mob.nutrition/50)))
|
||||
return
|
||||
|
||||
var/spread_range = 1
|
||||
|
||||
@@ -2,7 +2,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
|
||||
|
||||
GLOBAL_LIST_INIT(advance_cures, list(
|
||||
"sodiumchloride", "sugar", "orangejuice",
|
||||
"spaceacilin", "glucose", "ethanol",
|
||||
"spaceacillin", "glucose", "ethanol",
|
||||
"dyloteane", "impedrezene", "hepanephrodaxon",
|
||||
"gold", "silver"
|
||||
))
|
||||
@@ -16,6 +16,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
spread_text = "Unknown"
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
|
||||
var/s_processing = FALSE
|
||||
var/list/symptoms = list()
|
||||
var/id = ""
|
||||
|
||||
@@ -36,7 +37,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
return
|
||||
|
||||
/datum/disease/advance/Destroy()
|
||||
if(processing)
|
||||
if(s_processing)
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
S.End(src)
|
||||
return ..()
|
||||
@@ -46,8 +47,8 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
return FALSE
|
||||
if(symptoms && length(symptoms))
|
||||
|
||||
if(!processing)
|
||||
processing = TRUE
|
||||
if(!s_processing)
|
||||
s_processing = TRUE
|
||||
for(var/datum/symptom/S in symptoms)
|
||||
S.Start(src)
|
||||
|
||||
@@ -361,7 +362,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
for(var/datum/disease/advance/AD in active_diseases)
|
||||
AD.Refresh()
|
||||
|
||||
H = tgui_input_list(usr, "Choose infectee", human_mob_list)
|
||||
H = tgui_input_list(usr, "Choose infectee", "Infectees", human_mob_list)
|
||||
|
||||
if(isnull(H))
|
||||
return FALSE
|
||||
|
||||
@@ -10,7 +10,8 @@ Coughing
|
||||
Low Level.
|
||||
|
||||
BONUS
|
||||
Will force the affected mob to drop small items!
|
||||
Will force the affected mob to drop small items.
|
||||
Small spread if not wearing a mask
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
@@ -36,4 +37,6 @@ BONUS
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I && I.w_class == ITEMSIZE_SMALL)
|
||||
M.drop_item()
|
||||
if(!M.wear_mask) // Small spread if not wearing a mask
|
||||
A.spread(2)
|
||||
return
|
||||
|
||||
@@ -35,6 +35,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/fever/proc/Heat(var/mob/living/M, var/datum/disease/advance/A)
|
||||
var/get_heat = (sqrt(21+A.totalTransmittable()*2))+(sqrt(20+A.totalStageSpeed()*3))
|
||||
var/get_heat = (sqrtor0(21+A.totalTransmittable()*2))+(sqrtor0(20+A.totalStageSpeed()*3))
|
||||
M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1)
|
||||
return TRUE
|
||||
|
||||
@@ -37,6 +37,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = ((sqrt(16-A.totalStealth()))*5)
|
||||
var/get_damage = ((sqrtor0(16-A.totalStealth()))*5)
|
||||
M.adjustBruteLoss(get_damage)
|
||||
return 1
|
||||
|
||||
@@ -33,7 +33,7 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = (sqrt(20+A.totalStageSpeed())*(1+rand()))
|
||||
var/get_damage = max(0, (sqrtor0(20+A.totalStageSpeed())*(1+rand())))
|
||||
M.adjustToxLoss(-get_damage)
|
||||
return TRUE
|
||||
|
||||
@@ -144,7 +144,7 @@ Bonus
|
||||
level = 5
|
||||
|
||||
/datum/symptom/heal/dna/Heal(var/mob/living/carbon/M, var/datum/disease/advance/A)
|
||||
var/amt_healed = (sqrt(20+A.totalStageSpeed()*(3+rand())))-(sqrt(16+A.totalStealth()*rand()))
|
||||
var/amt_healed = max(0, (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand())))
|
||||
M.adjustBrainLoss(-amt_healed)
|
||||
M.radiation = max(M.radiation - 3, 0)
|
||||
return TRUE
|
||||
|
||||
@@ -30,14 +30,14 @@ Bonus
|
||||
var/mob/living/M = A.affected_mob
|
||||
|
||||
if(A.stage >= 3)
|
||||
M.slurring = min(0, M.slurring-4)
|
||||
M.druggy = min(0, M.druggy-4)
|
||||
M.slurring = max(0, M.slurring-4)
|
||||
M.druggy = max(0, M.druggy-4)
|
||||
M.reagents.remove_reagent("ethanol", 3)
|
||||
if(A.stage >= 4)
|
||||
M.drowsyness = min(0, M.drowsyness-4)
|
||||
M.drowsyness = max(0, M.drowsyness-4)
|
||||
if(M.reagents.has_reagent("bliss"))
|
||||
M.reagents.del_reagent("bliss")
|
||||
M.hallucination = min(0, M.hallucination-4)
|
||||
M.hallucination = max(0, M.hallucination-4)
|
||||
if(A.stage >= 5)
|
||||
if(M.reagents.get_reagent_amount("alkysine") < 10)
|
||||
M.reagents.add_reagent("alkysine", 5)
|
||||
|
||||
@@ -34,6 +34,6 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/advance/A)
|
||||
var/get_cold = (sqrt(16+A.totalStealth()*2))+(sqrt(21+A.totalResistance()*2))
|
||||
var/get_cold = (sqrtor0(16+A.totalStealth()*2))+(sqrtor0(21+A.totalResistance()*2))
|
||||
M.bodytemperature = max(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1)
|
||||
return 1
|
||||
|
||||
@@ -34,8 +34,10 @@ Bonus
|
||||
M.emote("sniff")
|
||||
else
|
||||
M.emote("sneeze")
|
||||
A.spread(5)
|
||||
if(prob(30))
|
||||
if(!M.wear_mask) // Spread only if they're not covering their face
|
||||
A.spread(5)
|
||||
|
||||
if(prob(30) && !M.wear_mask) // Same for mucus
|
||||
var/obj/effect/decal/cleanable/mucus/icky = new(get_turf(M))
|
||||
icky.viruses |= A.Copy()
|
||||
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
max_stages = 3
|
||||
spread_text = "Airborne"
|
||||
spread_flags = AIRBORNE
|
||||
cure_text = "Rest & Spaceacilin"
|
||||
cures = list("spaceacilin")
|
||||
cure_text = "Rest & Spaceacillin"
|
||||
cures = list("spaceacillin", "chicken_soup")
|
||||
needs_all_cures = FALSE
|
||||
agent = "XY-rhinovirus"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
|
||||
permeability_mod = 0.5
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
name = "The Flu"
|
||||
max_stages = 3
|
||||
spread_text = "Airborne"
|
||||
cure_text = "Spaceacilin"
|
||||
cures = list("spaceacilin")
|
||||
cure_text = "Spaceacillin"
|
||||
cures = list("spaceacillin", "chicken_soup")
|
||||
needs_all_cures = FALSE
|
||||
cure_chance = 10
|
||||
agent = "H13N1 flu virion"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
stage_prob = 2
|
||||
spread_text = "Blood and close contact"
|
||||
spread_flags = BLOOD
|
||||
cure_text = "Spaceacilin"
|
||||
cure_text = "Spaceacillin"
|
||||
agent = "Chimera cells"
|
||||
cures = list("spaceacilin")
|
||||
cures = list("spaceacillin")
|
||||
cure_chance = 10
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
desc = "If left untreated, subject will become a xenochimera upon perishing."
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
gloves = /obj/item/clothing/gloves/black
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
head = /obj/item/clothing/head/chaplain_hood
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/monocle
|
||||
suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie
|
||||
r_pocket = /obj/item/bikehorn
|
||||
@@ -15,6 +14,10 @@
|
||||
id_type = /obj/item/card/id/syndicate/station_access
|
||||
id_pda_assignment = "Tunnel Clown!"
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/masked_killer
|
||||
name = "Masked Killer"
|
||||
uniform = /obj/item/clothing/under/overalls
|
||||
@@ -22,13 +25,16 @@
|
||||
gloves = /obj/item/clothing/gloves/sterile/latex
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
head = /obj/item/clothing/head/welding
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/monocle
|
||||
suit = /obj/item/clothing/suit/storage/apron
|
||||
l_pocket = /obj/item/material/knife/tacknife
|
||||
r_pocket = /obj/item/surgical/scalpel
|
||||
r_hand = /obj/item/material/twohanded/fireaxe
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H)
|
||||
var/victim = get_mannequin(H.ckey)
|
||||
for(var/obj/item/carried_item in H.get_equipped_items(TRUE))
|
||||
@@ -39,7 +45,6 @@
|
||||
uniform = /obj/item/clothing/under/suit_jacket{ starting_accessories=list(/obj/item/clothing/accessory/wcoat) }
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
gloves = /obj/item/clothing/gloves/black
|
||||
l_ear = /obj/item/radio/headset
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
l_pocket = /obj/item/melee/energy/sword
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
@@ -49,6 +54,10 @@
|
||||
pda_slot = slot_belt
|
||||
pda_type = /obj/item/pda/heads
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset/alt
|
||||
headset_earbud = /obj/item/radio/headset/earbud
|
||||
|
||||
/decl/hierarchy/outfit/professional/post_equip(var/mob/living/carbon/human/H)
|
||||
var/obj/item/storage/secure/briefcase/sec_briefcase = new(H)
|
||||
for(var/obj/item/briefcase_item in sec_briefcase)
|
||||
|
||||
@@ -4,24 +4,30 @@
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
head = /obj/item/clothing/head/beret/centcom/officer
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
glasses = /obj/item/clothing/glasses/omnihud/all
|
||||
id_type = /obj/item/card/id/centcom
|
||||
pda_type = /obj/item/pda/centcom
|
||||
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/job/emergency_responder
|
||||
name = OUTFIT_JOB_NAME("Emergency Responder")
|
||||
uniform = /obj/item/clothing/under/ert
|
||||
shoes = /obj/item/clothing/shoes/boots/swat
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
id_type = /obj/item/card/id/centcom/ERT
|
||||
pda_type = /obj/item/pda/centcom
|
||||
flags = OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/job/emergency_responder/post_equip(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
ert.add_antagonist(H.mind)
|
||||
|
||||
@@ -2,4 +2,6 @@
|
||||
name = "Military Uniform"
|
||||
hierarchy_type = /decl/hierarchy/outfit/military
|
||||
|
||||
l_ear = /obj/item/radio/headset
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
@@ -29,7 +29,6 @@
|
||||
/decl/hierarchy/outfit/soviet_soldier/admiral
|
||||
name = "Soviet admiral"
|
||||
head = /obj/item/clothing/head/hgpiratecap
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch
|
||||
suit = /obj/item/clothing/suit/hgpirate
|
||||
|
||||
@@ -37,10 +36,13 @@
|
||||
id_type = /obj/item/card/id/centcom //station
|
||||
id_pda_assignment = "Admiral"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
/decl/hierarchy/outfit/merchant
|
||||
name = "Merchant"
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
l_ear = /obj/item/radio/headset
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
id_slot = slot_wear_id
|
||||
id_type = /obj/item/card/id/civilian //merchant
|
||||
@@ -48,6 +50,10 @@
|
||||
pda_type = /obj/item/pda/chef //cause I like the look
|
||||
id_pda_assignment = "Merchant"
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
|
||||
/decl/hierarchy/outfit/merchant/vox
|
||||
name = "Merchant - Vox"
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots/toeless
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
uniform = /obj/item/clothing/under/rank/centcom
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
l_ear = /obj/item/radio/headset/heads/hop
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
|
||||
id_slot = slot_wear_id
|
||||
@@ -11,6 +10,10 @@
|
||||
pda_slot = slot_r_store
|
||||
pda_type = /obj/item/pda/heads
|
||||
|
||||
headset = /obj/item/radio/headset/heads/hop
|
||||
headset_alt = /obj/item/radio/headset/heads/hop
|
||||
headset_earbud = /obj/item/radio/headset/heads/hop
|
||||
|
||||
/decl/hierarchy/outfit/nanotrasen/representative
|
||||
name = "Nanotrasen representative"
|
||||
belt = /obj/item/clipboard
|
||||
@@ -19,14 +22,20 @@
|
||||
/decl/hierarchy/outfit/nanotrasen/officer
|
||||
name = "Nanotrasen officer"
|
||||
head = /obj/item/clothing/head/beret/centcom/officer
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
belt = /obj/item/gun/energy
|
||||
id_pda_assignment = "NanoTrasen Navy Officer"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
/decl/hierarchy/outfit/nanotrasen/captain
|
||||
name = "Nanotrasen captain"
|
||||
uniform = /obj/item/clothing/under/rank/centcom_captain
|
||||
l_ear = /obj/item/radio/headset/heads/captain
|
||||
head = /obj/item/clothing/head/beret/centcom/captain
|
||||
belt = /obj/item/gun/energy
|
||||
id_pda_assignment = "NanoTrasen Navy Captain"
|
||||
|
||||
headset = /obj/item/radio/headset/heads/captain
|
||||
headset_alt = /obj/item/radio/headset/heads/captain
|
||||
headset_earbud = /obj/item/radio/headset/heads/captain
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
uniform = /obj/item/clothing/under/solgov/utility/army/urban
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
r_pocket = /obj/item/ammo_magazine/m95
|
||||
l_pocket = /obj/item/ammo_magazine/m95
|
||||
l_hand = /obj/item/ammo_magazine/m95
|
||||
@@ -15,6 +14,10 @@
|
||||
suit = /obj/item/clothing/suit/armor/combat/USDF
|
||||
belt = /obj/item/storage/belt/security/tactical
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/USDF/Marine/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s military ID Card"
|
||||
@@ -29,7 +32,6 @@
|
||||
name = "USDF officer"
|
||||
head = /obj/item/clothing/head/dress/army/command
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
uniform = /obj/item/clothing/under/solgov/mildress/army/command
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
belt = /obj/item/gun/projectile/revolver/consul
|
||||
@@ -38,6 +40,10 @@
|
||||
r_hand = /obj/item/clothing/accessory/holster/hip
|
||||
l_hand = /obj/item/clothing/accessory/tie/black
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/USDF/Officer/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s military ID Card"
|
||||
@@ -51,7 +57,6 @@
|
||||
/decl/hierarchy/outfit/solcom/representative
|
||||
name = "SolCom Representative"
|
||||
shoes = /obj/item/clothing/shoes/laceup
|
||||
l_ear = /obj/item/radio/headset/centcom
|
||||
uniform = /obj/item/clothing/under/suit_jacket/navy
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
l_pocket = /obj/item/pen/blue
|
||||
@@ -59,6 +64,10 @@
|
||||
r_hand = /obj/item/pda/centcom
|
||||
l_hand = /obj/item/clipboard
|
||||
|
||||
headset = /obj/item/radio/headset/centcom
|
||||
headset_alt = /obj/item/radio/headset/centcom
|
||||
headset_earbud = /obj/item/radio/headset/centcom
|
||||
|
||||
/decl/hierarchy/outfit/solcom/representative/equip_id(mob/living/carbon/human/H)
|
||||
var/obj/item/card/id/C = ..()
|
||||
C.name = "[H.real_name]'s SolCom ID Card"
|
||||
@@ -74,7 +83,6 @@
|
||||
head = /obj/item/clothing/head/helmet/combat/imperial
|
||||
shoes =/obj/item/clothing/shoes/leg_guard/combat/imperial
|
||||
gloves = /obj/item/clothing/gloves/arm_guard/combat/imperial
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
uniform = /obj/item/clothing/under/imperial
|
||||
mask = /obj/item/clothing/mask/gas/imperial
|
||||
suit = /obj/item/clothing/suit/armor/combat/imperial
|
||||
@@ -86,12 +94,15 @@
|
||||
l_hand = /obj/item/shield/energy/imperial
|
||||
suit_store = /obj/item/gun/energy/imperial
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/syndicate
|
||||
|
||||
/decl/hierarchy/outfit/imperial/officer
|
||||
name = "Imperial officer"
|
||||
head = /obj/item/clothing/head/helmet/combat/imperial/centurion
|
||||
shoes = /obj/item/clothing/shoes/leg_guard/combat/imperial
|
||||
gloves = /obj/item/clothing/gloves/arm_guard/combat/imperial
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
uniform = /obj/item/clothing/under/imperial
|
||||
mask = /obj/item/clothing/mask/gas/imperial
|
||||
suit = /obj/item/clothing/suit/armor/combat/imperial/centurion
|
||||
@@ -102,6 +113,10 @@
|
||||
l_hand = /obj/item/shield/energy/imperial
|
||||
suit_store = /obj/item/gun/energy/imperial
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/syndicate
|
||||
|
||||
/*
|
||||
SOUTHERN CROSS OUTFITS
|
||||
Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead goes in lockers. Keep this in mind if editing.
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Special ops - Officer"
|
||||
uniform = /obj/item/clothing/under/syndicate/combat
|
||||
suit = /obj/item/clothing/suit/armor/swat/officer
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
glasses = /obj/item/clothing/glasses/thermal/plain/eyepatch
|
||||
mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana
|
||||
head = /obj/item/clothing/head/beret //deathsquad
|
||||
@@ -16,6 +15,10 @@
|
||||
id_desc = "Special operations ID."
|
||||
id_pda_assignment = "Special Operations Officer"
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/spec_op_officer/space
|
||||
name = "Special ops - Officer in space"
|
||||
suit = /obj/item/clothing/suit/armor/swat //obj/item/clothing/suit/space/void/swat
|
||||
@@ -29,7 +32,6 @@
|
||||
uniform = /obj/item/clothing/under/ert
|
||||
shoes = /obj/item/clothing/shoes/boots/swat
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
l_ear = /obj/item/radio/headset/ert
|
||||
belt = /obj/item/gun/energy/gun
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
back = /obj/item/storage/backpack/satchel
|
||||
@@ -37,6 +39,10 @@
|
||||
id_slot = slot_wear_id
|
||||
id_type = /obj/item/card/id/centcom/ERT
|
||||
|
||||
headset = /obj/item/radio/headset/ert
|
||||
headset_alt = /obj/item/radio/headset/ert
|
||||
headset_earbud = /obj/item/radio/headset/ert
|
||||
|
||||
/decl/hierarchy/outfit/death_command
|
||||
name = "Spec ops - Death commando"
|
||||
|
||||
@@ -55,7 +61,6 @@
|
||||
name = "Spec ops - Mercenary"
|
||||
uniform = /obj/item/clothing/under/syndicate
|
||||
shoes = /obj/item/clothing/shoes/boots/combat
|
||||
l_ear = /obj/item/radio/headset/syndicate
|
||||
belt = /obj/item/storage/belt/security
|
||||
glasses = /obj/item/clothing/glasses/sunglasses
|
||||
gloves = /obj/item/clothing/gloves/swat
|
||||
@@ -66,4 +71,8 @@
|
||||
id_type = /obj/item/card/id/syndicate
|
||||
id_pda_assignment = "Mercenary"
|
||||
|
||||
headset = /obj/item/radio/headset/syndicate
|
||||
headset_alt = /obj/item/radio/headset/alt/syndicate
|
||||
headset_earbud = /obj/item/radio/headset/earbud/syndicate
|
||||
|
||||
flags = OUTFIT_HAS_BACKPACK
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/decl/hierarchy/outfit/wizard
|
||||
uniform = /obj/item/clothing/under/color/lightpurple
|
||||
shoes = /obj/item/clothing/shoes/sandal
|
||||
l_ear = /obj/item/radio/headset
|
||||
r_pocket = /obj/item/teleportation_scroll
|
||||
l_hand = /obj/item/staff
|
||||
r_hand = /obj/item/spellbook
|
||||
@@ -9,6 +8,10 @@
|
||||
backpack_contents = list(/obj/item/storage/box = 1)
|
||||
hierarchy_type = /decl/hierarchy/outfit/wizard
|
||||
|
||||
headset = /obj/item/radio/headset
|
||||
headset_alt = /obj/item/radio/headset
|
||||
headset_earbud = /obj/item/radio/headset
|
||||
|
||||
/decl/hierarchy/outfit/wizard/blue
|
||||
name = "Wizard - Blue"
|
||||
head = /obj/item/clothing/head/wizard
|
||||
|
||||
@@ -95,6 +95,13 @@
|
||||
containername = "Chicken crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_pack/hydro/turkey
|
||||
name = "Turkey crate"
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/animal/turkey
|
||||
containername = "Turkey crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_pack/hydro/seeds
|
||||
name = "Seeds crate"
|
||||
contains = list(
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
/obj/item/toy/plushie/slimeplushie,
|
||||
/obj/item/toy/plushie/box,
|
||||
/obj/item/toy/plushie/borgplushie,
|
||||
/obj/item/toy/plushie/borgplushie/drake/eng,
|
||||
/obj/item/toy/plushie/borgplushie/medihound,
|
||||
/obj/item/toy/plushie/borgplushie/scrubpuppy,
|
||||
/obj/item/toy/plushie/foxbear,
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/obj/item/material/knife/tacknife/survival,
|
||||
/obj/item/material/knife/machete,
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost=25
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
@@ -200,7 +200,7 @@
|
||||
/obj/item/clothing/head/pilot_vr,
|
||||
/obj/item/clothing/under/rank/pilot1,
|
||||
/obj/item/gun/energy/gun/protector/pilotgun/locked,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost=20
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
@@ -236,7 +236,7 @@
|
||||
/obj/item/clothing/accessory/holster/machete,
|
||||
/obj/item/storage/box/explorerkeys,
|
||||
/obj/item/mapping_unit,
|
||||
/obj/item/clothing/gloves/watch/survival
|
||||
/obj/item/clothing/accessory/watch/survival
|
||||
)
|
||||
cost = 75
|
||||
containertype = /obj/structure/closet/crate/secure/xion
|
||||
|
||||
@@ -58,12 +58,6 @@
|
||||
item_cost = 20
|
||||
path = /obj/item/pen/blade/fountain
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/angrybuzzer
|
||||
name = "Morphium Shock Ring"
|
||||
desc = "An enigmatic ring used to create powerful electric shocks when punching. Can be used as a brute-force method of defibrillation."
|
||||
item_cost = 40
|
||||
path = /obj/item/clothing/gloves/ring/buzzer
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/huntingtrap
|
||||
name = "Camonetted Beartraps"
|
||||
desc = "A box of unique beartraps which will partially cloak when deployed, allowing for more effective hunting."
|
||||
|
||||
@@ -57,3 +57,118 @@
|
||||
title_blurb = "A " + JOB_ALT_RESIDENT + " is an individual who resides on the station, frequently in a different part of the station than what is seen. \
|
||||
They are considered to be part of the crew for most purposes, but have no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/resident
|
||||
|
||||
//////////////////////////////////
|
||||
// Intern
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/intern
|
||||
title = JOB_INTERN
|
||||
flag = INTERN
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = ENGSEC // Ran out of bits
|
||||
faction = FACTION_STATION
|
||||
total_positions = -1
|
||||
spawn_positions = -1
|
||||
supervisors = "the staff from the department you're interning in"
|
||||
selection_color = "#555555"
|
||||
economic_modifier = 2
|
||||
access = list() //See /datum/job/intern/get_access()
|
||||
minimal_access = list() //See /datum/job/intern/get_access()
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/intern
|
||||
alt_titles = list(JOB_ALT_APPRENTICE_ENGINEER = /datum/alt_title/intern_eng,
|
||||
JOB_ALT_MEDICAL_INTERN = /datum/alt_title/intern_med,
|
||||
JOB_ALT_RESEARCH_INTERN = /datum/alt_title/intern_sci,
|
||||
JOB_ALT_SECURITY_CADET = /datum/alt_title/intern_sec,
|
||||
JOB_ALT_JR_CARGO_TECH = /datum/alt_title/intern_crg,
|
||||
JOB_ALT_SERVER = /datum/alt_title/server,
|
||||
JOB_ALT_ASSISTANT = /datum/alt_title/assistant)
|
||||
job_description = "An " + JOB_INTERN + " does whatever is requested of them, often doing so in process of learning \
|
||||
another job. Though they are part of the crew, they have no real authority."
|
||||
timeoff_factor = 0 // Interns, noh
|
||||
requestable = FALSE
|
||||
|
||||
/datum/alt_title/intern_eng
|
||||
title = JOB_ALT_APPRENTICE_ENGINEER
|
||||
title_blurb = "An " + JOB_ALT_APPRENTICE_ENGINEER + " attempts to provide whatever the Engineering department needs. They are not proper Engineers, and are \
|
||||
often in training to become an Engineer. An " + JOB_ALT_APPRENTICE_ENGINEER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/engineer
|
||||
|
||||
/datum/alt_title/intern_med
|
||||
title = JOB_ALT_MEDICAL_INTERN
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_INTERN + " attempts to provide whatever the Medical department needs. They are not proper Doctors, and are \
|
||||
often in training to become a Doctor. A " + JOB_ALT_MEDICAL_INTERN + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/medic
|
||||
|
||||
/datum/alt_title/intern_sci
|
||||
title = JOB_ALT_RESEARCH_INTERN
|
||||
title_blurb = "A " + JOB_ALT_RESEARCH_INTERN + " attempts to provide whatever the Research department needs. They are not proper " + JOB_SCIENTIST + "s, and are \
|
||||
often in training to become a " + JOB_SCIENTIST + ". A " + JOB_ALT_RESEARCH_INTERN + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/scientist
|
||||
|
||||
/datum/alt_title/intern_sec
|
||||
title = JOB_ALT_SECURITY_CADET
|
||||
title_blurb = "A " + JOB_ALT_SECURITY_CADET + " attempts to provide whatever the Security department needs. They are not proper Officers, and are \
|
||||
often in training to become an Officer. A " + JOB_ALT_SECURITY_CADET + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/officer
|
||||
|
||||
/datum/alt_title/intern_crg
|
||||
title = JOB_ALT_JR_CARGO_TECH
|
||||
title_blurb = "A " + JOB_ALT_JR_CARGO_TECH + " attempts to provide whatever the Cargo department needs. They are not proper Cargo Technicians, and are \
|
||||
often in training to become a " + JOB_CARGO_TECHNICIAN + ". A " + JOB_ALT_JR_CARGO_TECH + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/cargo
|
||||
/*
|
||||
/datum/alt_title/intern_exp
|
||||
title = "Jr. " + JOB_EXPLORER + ""
|
||||
title_blurb = "A Jr. " + JOB_EXPLORER + " attempts to provide whatever the Exploration department needs. They are not proper " + JOB_EXPLORER + "s, and are \
|
||||
often in training to become an " + JOB_EXPLORER + ". A Jr. " + JOB_EXPLORER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/explorer
|
||||
*/
|
||||
/datum/alt_title/server
|
||||
title = JOB_ALT_SERVER
|
||||
title_blurb = "A " + JOB_ALT_SERVER + " helps out kitchen and diner staff with various tasks, primarily food delivery. A " + JOB_ALT_SERVER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/alt_title/assistant
|
||||
title = JOB_ALT_ASSISTANT
|
||||
title_blurb = "An " + JOB_ALT_ASSISTANT + " helps out wherever they might be needed. They have no authority, but can volunteer to help if help is needed."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/job/intern/New()
|
||||
..()
|
||||
if(config)
|
||||
total_positions = CONFIG_GET(number/limit_interns)
|
||||
spawn_positions = CONFIG_GET(number/limit_interns)
|
||||
|
||||
/datum/job/intern/get_access()
|
||||
if(CONFIG_GET(flag/assistant_maint))
|
||||
return list(access_maint_tunnels)
|
||||
else
|
||||
return list()
|
||||
|
||||
//////////////////////////////////
|
||||
// Visitor
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/assistant // Visitor
|
||||
title = JOB_ALT_VISITOR
|
||||
supervisors = "nobody! You don't work here"
|
||||
job_description = "A " + JOB_ALT_VISITOR + " is just there to visit the place. They have no real authority or responsibility."
|
||||
timeoff_factor = 0
|
||||
requestable = FALSE
|
||||
alt_titles = list("Guest" = /datum/alt_title/guest, "Traveler" = /datum/alt_title/traveler)
|
||||
|
||||
/datum/job/assistant/New()
|
||||
..()
|
||||
if(config)
|
||||
total_positions = CONFIG_GET(number/limit_visitors)
|
||||
spawn_positions = CONFIG_GET(number/limit_visitors)
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
return list()
|
||||
|
||||
/datum/alt_title/guest
|
||||
title = "Guest"
|
||||
|
||||
/datum/alt_title/traveler
|
||||
title = "Traveler"
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
//////////////////////////////////
|
||||
// Intern
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/intern
|
||||
title = JOB_INTERN
|
||||
flag = INTERN
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = ENGSEC // Ran out of bits
|
||||
faction = FACTION_STATION
|
||||
total_positions = -1
|
||||
spawn_positions = -1
|
||||
supervisors = "the staff from the department you're interning in"
|
||||
selection_color = "#555555"
|
||||
economic_modifier = 2
|
||||
access = list() //See /datum/job/intern/get_access()
|
||||
minimal_access = list() //See /datum/job/intern/get_access()
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/intern
|
||||
alt_titles = list(JOB_ALT_APPRENTICE_ENGINEER = /datum/alt_title/intern_eng,
|
||||
JOB_ALT_MEDICAL_INTERN = /datum/alt_title/intern_med,
|
||||
JOB_ALT_RESEARCH_INTERN = /datum/alt_title/intern_sci,
|
||||
JOB_ALT_SECURITY_CADET = /datum/alt_title/intern_sec,
|
||||
JOB_ALT_JR_CARGO_TECH = /datum/alt_title/intern_crg,
|
||||
JOB_ALT_SERVER = /datum/alt_title/server,
|
||||
JOB_ALT_ASSISTANT = /datum/alt_title/assistant)
|
||||
job_description = "An " + JOB_INTERN + " does whatever is requested of them, often doing so in process of learning \
|
||||
another job. Though they are part of the crew, they have no real authority."
|
||||
timeoff_factor = 0 // Interns, noh
|
||||
requestable = FALSE
|
||||
|
||||
/datum/alt_title/intern_eng
|
||||
title = JOB_ALT_APPRENTICE_ENGINEER
|
||||
title_blurb = "An " + JOB_ALT_APPRENTICE_ENGINEER + " attempts to provide whatever the Engineering department needs. They are not proper Engineers, and are \
|
||||
often in training to become an Engineer. An " + JOB_ALT_APPRENTICE_ENGINEER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/engineer
|
||||
|
||||
/datum/alt_title/intern_med
|
||||
title = JOB_ALT_MEDICAL_INTERN
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_INTERN + " attempts to provide whatever the Medical department needs. They are not proper Doctors, and are \
|
||||
often in training to become a Doctor. A " + JOB_ALT_MEDICAL_INTERN + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/medic
|
||||
|
||||
/datum/alt_title/intern_sci
|
||||
title = JOB_ALT_RESEARCH_INTERN
|
||||
title_blurb = "A " + JOB_ALT_RESEARCH_INTERN + " attempts to provide whatever the Research department needs. They are not proper " + JOB_SCIENTIST + "s, and are \
|
||||
often in training to become a " + JOB_SCIENTIST + ". A " + JOB_ALT_RESEARCH_INTERN + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/scientist
|
||||
|
||||
/datum/alt_title/intern_sec
|
||||
title = JOB_ALT_SECURITY_CADET
|
||||
title_blurb = "A " + JOB_ALT_SECURITY_CADET + " attempts to provide whatever the Security department needs. They are not proper Officers, and are \
|
||||
often in training to become an Officer. A " + JOB_ALT_SECURITY_CADET + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/officer
|
||||
|
||||
/datum/alt_title/intern_crg
|
||||
title = JOB_ALT_JR_CARGO_TECH
|
||||
title_blurb = "A " + JOB_ALT_JR_CARGO_TECH + " attempts to provide whatever the Cargo department needs. They are not proper Cargo Technicians, and are \
|
||||
often in training to become a " + JOB_CARGO_TECHNICIAN + ". A " + JOB_ALT_JR_CARGO_TECH + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/cargo
|
||||
/*
|
||||
/datum/alt_title/intern_exp
|
||||
title = "Jr. " + JOB_EXPLORER + ""
|
||||
title_blurb = "A Jr. " + JOB_EXPLORER + " attempts to provide whatever the Exploration department needs. They are not proper " + JOB_EXPLORER + "s, and are \
|
||||
often in training to become an " + JOB_EXPLORER + ". A Jr. " + JOB_EXPLORER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/explorer
|
||||
*/
|
||||
/datum/alt_title/server
|
||||
title = JOB_ALT_SERVER
|
||||
title_blurb = "A " + JOB_ALT_SERVER + " helps out kitchen and diner staff with various tasks, primarily food delivery. A " + JOB_ALT_SERVER + " has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/alt_title/assistant
|
||||
title = JOB_ALT_ASSISTANT
|
||||
title_blurb = "An " + JOB_ALT_ASSISTANT + " helps out wherever they might be needed. They have no authority, but can volunteer to help if help is needed."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/job/intern/New()
|
||||
..()
|
||||
if(config)
|
||||
total_positions = CONFIG_GET(number/limit_interns)
|
||||
spawn_positions = CONFIG_GET(number/limit_interns)
|
||||
|
||||
/datum/job/intern/get_access()
|
||||
if(CONFIG_GET(flag/assistant_maint))
|
||||
return list(access_maint_tunnels)
|
||||
else
|
||||
return list()
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
// Visitor
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/assistant // Visitor
|
||||
title = JOB_ALT_VISITOR
|
||||
supervisors = "nobody! You don't work here"
|
||||
job_description = "A " + JOB_ALT_VISITOR + " is just there to visit the place. They have no real authority or responsibility."
|
||||
timeoff_factor = 0
|
||||
requestable = FALSE
|
||||
alt_titles = list("Guest" = /datum/alt_title/guest, "Traveler" = /datum/alt_title/traveler)
|
||||
|
||||
/datum/job/assistant/New()
|
||||
..()
|
||||
if(config)
|
||||
total_positions = CONFIG_GET(number/limit_visitors)
|
||||
spawn_positions = CONFIG_GET(number/limit_visitors)
|
||||
|
||||
/datum/job/assistant/get_access()
|
||||
return list()
|
||||
|
||||
/datum/alt_title/guest
|
||||
title = "Guest"
|
||||
|
||||
/datum/alt_title/traveler
|
||||
title = "Traveler"
|
||||
@@ -28,11 +28,16 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 55) /// Vatborn live shorter, no other race eligible for captain besides human/skrell
|
||||
banned_job_species = list(SPECIES_UNATHI, SPECIES_TAJ, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "mechanical", "digital")
|
||||
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
dept_time_required = 80 //Pending something more complicated
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/captain
|
||||
job_description = "The " + JOB_SITE_MANAGER + " manages the other Command Staff, and through them the rest of the station. Though they have access to everything, \
|
||||
they do not understand everything, and are expected to delegate tasks to the appropriate crew member. The " + JOB_SITE_MANAGER + " is expected to \
|
||||
have an understanding of Standard Operating Procedure, and is subject to it, and legal action, in the same way as every other crew member."
|
||||
alt_titles = list(JOB_ALT_OVERSEER= /datum/alt_title/overseer)
|
||||
alt_titles = list(JOB_ALT_OVERSEER= /datum/alt_title/overseer, JOB_ALT_FACILITY_DIRECTOR = /datum/alt_title/facility_director, JOB_ALT_CHIEF_SUPERVISOR = /datum/alt_title/chief_supervisor,
|
||||
JOB_ALT_CAPTAIN = /datum/alt_title/captain)
|
||||
|
||||
|
||||
/*
|
||||
@@ -45,11 +50,22 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_station_access().Copy()
|
||||
|
||||
/datum/job/captain/get_request_reasons()
|
||||
return list("Training crew", "Assembling expedition team")
|
||||
|
||||
// Captain Alt Titles
|
||||
/datum/alt_title/overseer
|
||||
title = JOB_ALT_OVERSEER
|
||||
|
||||
/datum/alt_title/facility_director
|
||||
title = JOB_ALT_FACILITY_DIRECTOR
|
||||
|
||||
/datum/alt_title/chief_supervisor
|
||||
title = JOB_ALT_CHIEF_SUPERVISOR
|
||||
|
||||
/datum/alt_title/captain
|
||||
title = JOB_ALT_CAPTAIN
|
||||
|
||||
//////////////////////////////////
|
||||
// Head of Personnel
|
||||
//////////////////////////////////
|
||||
@@ -75,29 +91,42 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, SPECIES_TESHARI = 27, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_DIONA)
|
||||
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CIVILIAN)
|
||||
departments_managed = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_PLANET)
|
||||
dept_time_required = 60
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/hop
|
||||
job_description = "The " + JOB_HEAD_OF_PERSONNEL + " manages the Service department, the Exploration team, and most other civilians. They also \
|
||||
manage the Supply department, through the " + JOB_QUARTERMASTER + ". In addition, the " + JOB_HEAD_OF_PERSONNEL + " oversees the personal accounts \
|
||||
of the crew, including their money and access. If necessary, the " + JOB_HEAD_OF_PERSONNEL + " is first in line to assume Acting Command."
|
||||
alt_titles = list(JOB_ALT_CREW_RESOURCE_OFFICER = /datum/alt_title/cro)
|
||||
|
||||
access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
|
||||
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
|
||||
minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
|
||||
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
|
||||
access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers, access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth, access_gateway, access_entertainment)
|
||||
minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth, access_gateway, access_entertainment)
|
||||
|
||||
alt_titles = list(JOB_ALT_CREW_RESOURCE_OFFICER = /datum/alt_title/cro, JOB_ALT_DEPUTY_MANAGER = /datum/alt_title/deputy_manager, JOB_ALT_STAFF_MANAGER = /datum/alt_title/staff_manager,
|
||||
JOB_ALT_FACILITY_STEWARD = /datum/alt_title/facility_steward, JOB_ALT_FIRST_MATE = /datum/alt_title/first_mate)
|
||||
|
||||
/datum/job/hop/get_request_reasons()
|
||||
return list("ID modification", "Training crew", "Assembling expedition team")
|
||||
|
||||
// HOP Alt Titles
|
||||
/datum/alt_title/cro
|
||||
title = JOB_ALT_CREW_RESOURCE_OFFICER
|
||||
|
||||
/datum/alt_title/deputy_manager
|
||||
title = JOB_ALT_DEPUTY_MANAGER
|
||||
|
||||
/datum/alt_title/staff_manager
|
||||
title = JOB_ALT_STAFF_MANAGER
|
||||
|
||||
/datum/alt_title/facility_steward
|
||||
title = JOB_ALT_FACILITY_STEWARD
|
||||
|
||||
/datum/alt_title/first_mate
|
||||
title = JOB_ALT_FIRST_MATE
|
||||
|
||||
//////////////////////////////////
|
||||
// Command Secretary
|
||||
//////////////////////////////////
|
||||
@@ -116,9 +145,29 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
minimal_player_age = 5
|
||||
economic_modifier = 7
|
||||
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_COMMAND_LIAISON = /datum/alt_title/command_liaison, JOB_ALT_COMMAND_ASSISTANT = /datum/alt_title/command_assistant, JOB_ALT_COMMAND_INTERN = /datum/alt_title/command_intern,
|
||||
JOB_ALT_BRIDGE_SECRETARY = /datum/alt_title/bridge_secretary, JOB_ALT_BRIDGE_ASSISTANT = /datum/alt_title/bridge_assistant)
|
||||
|
||||
access = list(access_heads, access_keycard_auth)
|
||||
minimal_access = list(access_heads, access_keycard_auth)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/secretary
|
||||
job_description = "A " + JOB_COMMAND_SECRETARY + " handles paperwork duty for the Heads of Staff, so they can better focus on managing their departments. \
|
||||
They are not Heads of Staff, and have no real authority."
|
||||
|
||||
/datum/alt_title/command_liaison
|
||||
title = JOB_ALT_COMMAND_LIAISON
|
||||
|
||||
/datum/alt_title/command_assistant
|
||||
title = JOB_ALT_COMMAND_ASSISTANT
|
||||
|
||||
/datum/alt_title/command_intern
|
||||
title = JOB_ALT_COMMAND_INTERN
|
||||
|
||||
/datum/alt_title/bridge_secretary
|
||||
title = JOB_ALT_BRIDGE_SECRETARY
|
||||
|
||||
/datum/alt_title/bridge_assistant
|
||||
title = JOB_ALT_BRIDGE_ASSISTANT
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
/datum/job/captain
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
dept_time_required = 80 //Pending something more complicated
|
||||
alt_titles = list(JOB_ALT_OVERSEER= /datum/alt_title/overseer, JOB_ALT_FACILITY_DIRECTOR = /datum/alt_title/facility_director, JOB_ALT_CHIEF_SUPERVISOR = /datum/alt_title/chief_supervisor,
|
||||
JOB_ALT_CAPTAIN = /datum/alt_title/captain)
|
||||
|
||||
/datum/alt_title/facility_director
|
||||
title = JOB_ALT_FACILITY_DIRECTOR
|
||||
|
||||
/datum/alt_title/chief_supervisor
|
||||
title = JOB_ALT_CHIEF_SUPERVISOR
|
||||
|
||||
/datum/alt_title/captain
|
||||
title = JOB_ALT_CAPTAIN
|
||||
|
||||
/datum/job/captain/get_request_reasons()
|
||||
return list("Training crew", "Assembling expedition team")
|
||||
|
||||
/datum/job/hop
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
departments = list(DEPARTMENT_COMMAND, DEPARTMENT_CIVILIAN)
|
||||
departments_managed = list(DEPARTMENT_CIVILIAN, DEPARTMENT_CARGO, DEPARTMENT_PLANET)
|
||||
dept_time_required = 60
|
||||
|
||||
alt_titles = list(JOB_ALT_CREW_RESOURCE_OFFICER = /datum/alt_title/cro, JOB_ALT_DEPUTY_MANAGER = /datum/alt_title/deputy_manager, JOB_ALT_STAFF_MANAGER = /datum/alt_title/staff_manager,
|
||||
JOB_ALT_FACILITY_STEWARD = /datum/alt_title/facility_steward, JOB_ALT_FIRST_MATE = /datum/alt_title/first_mate)
|
||||
|
||||
access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
|
||||
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth, access_gateway, access_entertainment)
|
||||
minimal_access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers,
|
||||
access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station,
|
||||
access_hop, access_RC_announce, access_clown, access_tomfoolery, access_mime, access_keycard_auth, access_gateway, access_entertainment)
|
||||
|
||||
/datum/alt_title/deputy_manager
|
||||
title = JOB_ALT_DEPUTY_MANAGER
|
||||
|
||||
/datum/alt_title/staff_manager
|
||||
title = JOB_ALT_STAFF_MANAGER
|
||||
|
||||
/datum/alt_title/facility_steward
|
||||
title = JOB_ALT_FACILITY_STEWARD
|
||||
|
||||
/datum/alt_title/first_mate
|
||||
title = JOB_ALT_FIRST_MATE
|
||||
|
||||
/datum/job/hop/get_request_reasons()
|
||||
return list("ID modification", "Training crew", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/secretary
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_COMMAND_LIAISON = /datum/alt_title/command_liaison, JOB_ALT_COMMAND_ASSISTANT = /datum/alt_title/command_assistant, JOB_ALT_COMMAND_INTERN = /datum/alt_title/command_intern,
|
||||
JOB_ALT_BRIDGE_SECRETARY = /datum/alt_title/bridge_secretary, JOB_ALT_BRIDGE_ASSISTANT = /datum/alt_title/bridge_assistant)
|
||||
|
||||
/datum/alt_title/command_liaison
|
||||
title = JOB_ALT_COMMAND_LIAISON
|
||||
|
||||
/datum/alt_title/command_assistant
|
||||
title = JOB_ALT_COMMAND_ASSISTANT
|
||||
|
||||
/datum/alt_title/command_intern
|
||||
title = JOB_ALT_COMMAND_INTERN
|
||||
|
||||
/datum/alt_title/bridge_secretary
|
||||
title = JOB_ALT_BRIDGE_SECRETARY
|
||||
|
||||
/datum/alt_title/bridge_assistant
|
||||
title = JOB_ALT_BRIDGE_ASSISTANT
|
||||
@@ -0,0 +1,122 @@
|
||||
//Cargo
|
||||
//////////////////////////////////
|
||||
// Quartermaster
|
||||
//////////////////////////////////
|
||||
/datum/job/qm
|
||||
title = JOB_QUARTERMASTER
|
||||
flag = QUARTERMASTER
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
sorting_order = 1 // QM is above the cargo techs, but below the HoP.
|
||||
departments_managed = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
pto_type = PTO_CARGO
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#9b633e"
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce)
|
||||
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce)
|
||||
banned_job_species = list("digital", SPECIES_PROMETHEAN)
|
||||
|
||||
ideal_character_age = 40
|
||||
dept_time_required = 20
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/qm
|
||||
job_description = "The " + JOB_QUARTERMASTER + " manages the Supply department, checking cargo orders and ensuring supplies get to where they are needed."
|
||||
alt_titles = list(JOB_ALT_SUPPLY_CHIEF = /datum/alt_title/supply_chief, JOB_ALT_LOGISTICS_MANAGER = /datum/alt_title/logistics_manager, JOB_ALT_CARGO_SUPERVISOR = /datum/alt_title/cargo_supervisor)
|
||||
|
||||
/datum/job/qm/get_request_reasons()
|
||||
return list("Training crew")
|
||||
|
||||
// Quartermaster Alt Titles
|
||||
/datum/alt_title/supply_chief
|
||||
title = JOB_ALT_SUPPLY_CHIEF
|
||||
|
||||
/datum/alt_title/logistics_manager
|
||||
title = JOB_ALT_LOGISTICS_MANAGER
|
||||
|
||||
/datum/alt_title/cargo_supervisor
|
||||
title = JOB_ALT_CARGO_SUPERVISOR
|
||||
|
||||
//////////////////////////////////
|
||||
// Cargo Tech
|
||||
//////////////////////////////////
|
||||
/datum/job/cargo_tech
|
||||
title = JOB_CARGO_TECHNICIAN
|
||||
flag = CARGOTECH
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_CARGO
|
||||
supervisors = "the " + JOB_QUARTERMASTER + " and the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#7a4f33"
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/cargo_tech
|
||||
job_description = "A " + JOB_CARGO_TECHNICIAN + " fills and delivers cargo orders. They are encouraged to return delivered crates to the Cargo Shuttle, \
|
||||
because Central Command gives a partial refund."
|
||||
|
||||
alt_titles = list(JOB_ALT_CARGO_LOADER = /datum/alt_title/cargo_loader, JOB_ALT_CARGO_HANDLER = /datum/alt_title/cargo_handler, JOB_ALT_SUPPLY_COURIER = /datum/alt_title/supply_courier,
|
||||
JOB_ALT_DISPOSALS_SORTER = /datum/alt_title/disposal_sorter)
|
||||
|
||||
/datum/alt_title/supply_courier
|
||||
title = JOB_ALT_SUPPLY_COURIER
|
||||
title_blurb = "A " + JOB_ALT_SUPPLY_COURIER + " is usually tasked with delivering packages or cargo directly to whoever requires it."
|
||||
|
||||
/datum/alt_title/cargo_loader
|
||||
title = JOB_ALT_CARGO_LOADER
|
||||
title_blurb = "A " + JOB_ALT_CARGO_LOADER + " is usually tasked with more menial labor within Supply department, such as loading and unloading supply shuttle."
|
||||
|
||||
/datum/alt_title/cargo_handler
|
||||
title = JOB_ALT_CARGO_HANDLER
|
||||
title_blurb = "A " + JOB_ALT_CARGO_HANDLER + " is usually tasked with more menial labor within Supply department, such as loading and unloading supply shuttle."
|
||||
|
||||
/datum/alt_title/disposal_sorter
|
||||
title = JOB_ALT_DISPOSALS_SORTER
|
||||
title_blurb = "A " + JOB_ALT_DISPOSALS_SORTER + " is usually tasked with operating disposals delivery system, sorting the trash and tagging parcels for delivery."
|
||||
|
||||
//////////////////////////////////
|
||||
// Shaft Miner
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/mining
|
||||
title = JOB_SHAFT_MINER
|
||||
flag = MINER
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
pto_type = PTO_CARGO
|
||||
supervisors = "the " + JOB_QUARTERMASTER + " and the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#7a4f33"
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/mining
|
||||
job_description = "A " + JOB_SHAFT_MINER + " mines and processes minerals to be delivered to departments that need them."
|
||||
alt_titles = list(JOB_ALT_DEEP_SPACE_MINER = /datum/alt_title/deep_space_miner, JOB_ALT_DRILL_TECHNICIAN = /datum/alt_title/drill_tech, JOB_ALT_PROSPECTOR = /datum/alt_title/prospector,
|
||||
JOB_ALT_EXCAVATOR = /datum/alt_title/excavator)
|
||||
|
||||
/datum/job/mining/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
/datum/alt_title/drill_tech
|
||||
title = JOB_ALT_DRILL_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_DRILL_TECHNICIAN + " specializes in operating and maintaining the machinery needed to extract ore from veins deep below the surface."
|
||||
|
||||
/datum/alt_title/deep_space_miner
|
||||
title = JOB_ALT_DEEP_SPACE_MINER
|
||||
title_blurb = "A " + JOB_ALT_DEEP_SPACE_MINER + " specializes primarily in mining operations in zero-g environments, mostly in asteroid and debris fields."
|
||||
|
||||
/datum/alt_title/prospector
|
||||
title = JOB_ALT_PROSPECTOR
|
||||
|
||||
/datum/alt_title/excavator
|
||||
title = JOB_ALT_EXCAVATOR
|
||||
+315
-87
@@ -12,6 +12,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
@@ -19,7 +20,7 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/service/bartender
|
||||
job_description = "A " + JOB_BARTENDER + " mixes drinks for the crew. They generally have permission to charge for drinks or deny service to unruly patrons."
|
||||
alt_titles = list(JOB_ALT_BARISTA = /datum/alt_title/barista)
|
||||
alt_titles = list(JOB_ALT_BARKEEPR = /datum/alt_title/barkeeper, JOB_ALT_BARMAID = /datum/alt_title/barmaid, JOB_ALT_BARISTA = /datum/alt_title/barista, JOB_ALT_MIXOLOGIST = /datum/alt_title/mixologist)
|
||||
|
||||
// Bartender Alt Titles
|
||||
/datum/alt_title/barista
|
||||
@@ -28,6 +29,15 @@
|
||||
or deny service to unruly patrons."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/bartender/barista
|
||||
|
||||
/datum/alt_title/barkeeper
|
||||
title = JOB_ALT_BARKEEPR
|
||||
|
||||
/datum/alt_title/barmaid
|
||||
title = JOB_ALT_BARMAID
|
||||
|
||||
/datum/alt_title/mixologist
|
||||
title = JOB_ALT_MIXOLOGIST
|
||||
|
||||
//////////////////////////////////
|
||||
// Chef
|
||||
//////////////////////////////////
|
||||
@@ -40,6 +50,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the "+ JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
@@ -47,13 +58,20 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/service/chef
|
||||
job_description = "A " + JOB_CHEF + " cooks food for the crew. They generally have permission to charge for food or deny service to unruly diners."
|
||||
alt_titles = list(JOB_ALT_COOK = /datum/alt_title/cook)
|
||||
alt_titles = list(JOB_ALT_SOUSCHEF = /datum/alt_title/souschef, JOB_ALT_COOK = /datum/alt_title/cook, JOB_ALT_KITCHEN_WORKER = /datum/alt_title/kitchen_worker)
|
||||
|
||||
// Chef Alt Titles
|
||||
/datum/alt_title/cook
|
||||
title = JOB_ALT_COOK
|
||||
title_blurb = "A " + JOB_ALT_COOK + " has the same duties, though they may be less experienced."
|
||||
|
||||
/datum/alt_title/souschef
|
||||
title = JOB_ALT_SOUSCHEF
|
||||
|
||||
/datum/alt_title/kitchen_worker
|
||||
title = JOB_ALT_KITCHEN_WORKER
|
||||
title_blurb = "A " + JOB_ALT_KITCHEN_WORKER + " has the same duties, though they may be less experienced."
|
||||
|
||||
//////////////////////////////////
|
||||
// Botanist
|
||||
//////////////////////////////////
|
||||
@@ -66,6 +84,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_hydroponics, access_bar, access_kitchen)
|
||||
@@ -73,89 +92,30 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/service/gardener
|
||||
job_description = "A " + JOB_BOTANIST+ " grows plants for the " + JOB_CHEF + " and " + JOB_BARTENDER + "."
|
||||
alt_titles = list(JOB_ALT_GARDENER = /datum/alt_title/gardener)
|
||||
alt_titles = list(JOB_ALT_HYDROPONICIST = /datum/alt_title/hydroponicist, JOB_ALT_CULTIVATOR = /datum/alt_title/cultivator, JOB_ALT_FARMER = /datum/alt_title/farmer,
|
||||
JOB_ALT_GARDENER = /datum/alt_title/gardener, JOB_ALT_FLORIST = /datum/alt_title/florsit, JOB_ALT_RANCHER = /datum/alt_title/rancher)
|
||||
|
||||
//Botanist Alt Titles
|
||||
/datum/alt_title/gardener
|
||||
title = JOB_ALT_GARDENER
|
||||
title_blurb = "A " + JOB_ALT_GARDENER + " may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere."
|
||||
|
||||
//Cargo
|
||||
//////////////////////////////////
|
||||
// Quartermaster
|
||||
//////////////////////////////////
|
||||
/datum/job/qm
|
||||
title = JOB_QUARTERMASTER
|
||||
flag = QUARTERMASTER
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
sorting_order = 1 // QM is above the cargo techs, but below the HoP.
|
||||
departments_managed = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#9b633e"
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce)
|
||||
minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce)
|
||||
banned_job_species = list("digital", SPECIES_PROMETHEAN)
|
||||
/datum/alt_title/hydroponicist
|
||||
title = JOB_ALT_HYDROPONICIST
|
||||
|
||||
ideal_character_age = 40
|
||||
/datum/alt_title/cultivator
|
||||
title = JOB_ALT_CULTIVATOR
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/qm
|
||||
job_description = "The " + JOB_QUARTERMASTER + " manages the Supply department, checking cargo orders and ensuring supplies get to where they are needed."
|
||||
alt_titles = list(JOB_ALT_SUPPLY_CHIEF = /datum/alt_title/supply_chief)
|
||||
/datum/alt_title/farmer
|
||||
title = JOB_ALT_FARMER
|
||||
|
||||
// Quartermaster Alt Titles
|
||||
/datum/alt_title/supply_chief
|
||||
title = JOB_ALT_SUPPLY_CHIEF
|
||||
/datum/alt_title/florsit
|
||||
title = JOB_ALT_FLORIST
|
||||
title_blurb = "A " + JOB_ALT_FLORIST + " may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere."
|
||||
|
||||
//////////////////////////////////
|
||||
// Cargo Tech
|
||||
//////////////////////////////////
|
||||
/datum/job/cargo_tech
|
||||
title = JOB_CARGO_TECHNICIAN
|
||||
flag = CARGOTECH
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the " + JOB_QUARTERMASTER + " and the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#7a4f33"
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/cargo_tech
|
||||
job_description = "A " + JOB_CARGO_TECHNICIAN + " fills and delivers cargo orders. They are encouraged to return delivered crates to the Cargo Shuttle, \
|
||||
because Central Command gives a partial refund."
|
||||
|
||||
//////////////////////////////////
|
||||
// Shaft Miner
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/mining
|
||||
title = JOB_SHAFT_MINER
|
||||
flag = MINER
|
||||
departments = list(DEPARTMENT_CARGO)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
supervisors = "the " + JOB_QUARTERMASTER + " and the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#7a4f33"
|
||||
economic_modifier = 5
|
||||
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
|
||||
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/cargo/mining
|
||||
job_description = "A " + JOB_SHAFT_MINER + " mines and processes minerals to be delivered to departments that need them."
|
||||
alt_titles = list(JOB_ALT_DRILL_TECHNICIAN = /datum/alt_title/drill_tech)
|
||||
|
||||
/datum/alt_title/drill_tech
|
||||
title = JOB_ALT_DRILL_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_DRILL_TECHNICIAN + " specializes in operating and maintaining the machinery needed to extract ore from veins deep below the surface."
|
||||
/datum/alt_title/rancher
|
||||
title = JOB_ALT_RANCHER
|
||||
title_blurb = "A " + JOB_ALT_RANCHER + " is tasked with the care, feeding, raising, and harvesting of livestock."
|
||||
|
||||
//Service
|
||||
//////////////////////////////////
|
||||
@@ -167,8 +127,9 @@
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_janitor, access_maint_tunnels)
|
||||
@@ -176,12 +137,23 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/service/janitor
|
||||
job_description = "A " + JOB_JANITOR + " keeps the station clean, as long as it doesn't interfere with active crime scenes."
|
||||
alt_titles = list(JOB_ALT_CUSTODIAN = /datum/alt_title/custodian)
|
||||
alt_titles = list(JOB_ALT_CUSTODIAN = /datum/alt_title/custodian, JOB_ALT_SANITATION_TECHNICIAN = /datum/alt_title/sanitation_tech,
|
||||
JOB_ALT_MAID = /datum/alt_title/maid, JOB_ALT_GARBAGE_COLLECTOR = /datum/alt_title/garbage_collector)
|
||||
|
||||
// Janitor Alt Titles
|
||||
/datum/alt_title/custodian
|
||||
title = JOB_ALT_CUSTODIAN
|
||||
|
||||
/datum/alt_title/sanitation_tech
|
||||
title = JOB_ALT_SANITATION_TECHNICIAN
|
||||
|
||||
/datum/alt_title/maid
|
||||
title = JOB_ALT_MAID
|
||||
|
||||
/datum/alt_title/garbage_collector
|
||||
title = JOB_ALT_GARBAGE_COLLECTOR
|
||||
title_blurb = "A " + JOB_ALT_GARBAGE_COLLECTOR + " keeps the station clean, though focuses moreso on collecting larger trash, with wet cleaning being secondary task."
|
||||
|
||||
//More or less assistants
|
||||
//////////////////////////////////
|
||||
// Librarian
|
||||
@@ -192,8 +164,9 @@
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_library, access_maint_tunnels)
|
||||
@@ -201,7 +174,9 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/librarian
|
||||
job_description = "The " + JOB_LIBRARIAN + " curates the book selection in the Library, so the crew might enjoy it."
|
||||
alt_titles = list(JOB_ALT_JOURNALIST = /datum/alt_title/journalist, JOB_ALT_WRITER = /datum/alt_title/writer)
|
||||
alt_titles = list(JOB_ALT_JOURNALIST = /datum/alt_title/journalist, JOB_ALT_REPORTER = /datum/alt_title/reporter, JOB_ALT_WRITER = /datum/alt_title/writer,
|
||||
JOB_ALT_HISTORIAN = /datum/alt_title/historian, JOB_ALT_ARCHIVIST = /datum/alt_title/archivist, JOB_ALT_PROFESSOR = /datum/alt_title/professor,
|
||||
JOB_ALT_ACADEMIC = /datum/alt_title/academic, JOB_ALT_PHILOSOPHER = /datum/alt_title/philosopher, JOB_ALT_CURATOR = /datum/alt_title/curator)
|
||||
|
||||
// Librarian Alt Titles
|
||||
/datum/alt_title/journalist
|
||||
@@ -213,6 +188,34 @@
|
||||
title = JOB_ALT_WRITER
|
||||
title_blurb = "The " + JOB_ALT_WRITER + " uses the Library as a quiet place to write whatever it is they choose to write."
|
||||
|
||||
/datum/alt_title/reporter
|
||||
title = JOB_ALT_REPORTER
|
||||
title_blurb = "The " + JOB_ALT_REPORTER + " uses the Library as a base of operations, from which they can report the news and goings-on on the station with their camera."
|
||||
|
||||
/datum/alt_title/historian
|
||||
title = JOB_ALT_HISTORIAN
|
||||
title_blurb = "The " + JOB_ALT_HISTORIAN + " uses the Library as a base of operation to record any important events occurring on station."
|
||||
|
||||
/datum/alt_title/archivist
|
||||
title = JOB_ALT_ARCHIVIST
|
||||
title_blurb = "The " + JOB_ALT_ARCHIVIST + " uses the Library as a base of operation to record any important events occurring on station."
|
||||
|
||||
/datum/alt_title/professor
|
||||
title = JOB_ALT_PROFESSOR
|
||||
title_blurb = "The " + JOB_ALT_PROFESSOR + " uses the Library as a base of operations to share their vast knowledge with the crew."
|
||||
|
||||
/datum/alt_title/academic
|
||||
title = JOB_ALT_ACADEMIC
|
||||
title_blurb = "The " + JOB_ALT_ACADEMIC + " uses the Library as a base of operations to share their vast knowledge with the crew."
|
||||
|
||||
/datum/alt_title/philosopher
|
||||
title = JOB_ALT_PHILOSOPHER
|
||||
title_blurb = "The " + JOB_ALT_PHILOSOPHER + " uses the Library as a base of operation to ruminate on nature of life and other great questions, and share their opinions with the crew."
|
||||
|
||||
/datum/alt_title/curator
|
||||
title = JOB_ALT_CURATOR
|
||||
title_blurb = "The " + JOB_ALT_CURATOR + " uses the Library as a base of operation to gather the finest of art for display and preservation."
|
||||
|
||||
//////////////////////////////////
|
||||
// Internal Affairs Agent
|
||||
//////////////////////////////////
|
||||
@@ -226,6 +229,8 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
disallow_jobhop = TRUE
|
||||
supervisors = "company officials and Corporate Regulations"
|
||||
selection_color = "#515151"
|
||||
economic_modifier = 7
|
||||
@@ -238,10 +243,233 @@
|
||||
job_description = "An " + JOB_INTERNAL_AFFAIRS_AGENT + " makes sure that the crew is following Standard Operating Procedure. They also \
|
||||
handle complaints against crew members, and can have issues brought to the attention of Central Command, \
|
||||
assuming their paperwork is in order."
|
||||
alt_titles = list(JOB_ALT_INTERNAL_AFFAIRS_LIAISON = /datum/alt_title/ia_liaison, JOB_ALT_INTERNAL_AFFAIRS_DELEGATE = /datum/alt_title/ia_delegate,
|
||||
JOB_ALT_INTERNAL_AFFAIRS_INVESTIGATOR = /datum/alt_title/ia_investigator)
|
||||
|
||||
/*
|
||||
/datum/job/lawyer/equip(var/mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
if(.)
|
||||
H.implant_loyalty(H)
|
||||
*/
|
||||
/datum/alt_title/ia_liaison
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_LIAISON
|
||||
|
||||
/datum/alt_title/ia_delegate
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_DELEGATE
|
||||
|
||||
/datum/alt_title/ia_investigator
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_INVESTIGATOR
|
||||
|
||||
//////////////////////////////////
|
||||
// Pilot
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/pilot
|
||||
title = JOB_PILOT
|
||||
flag = PILOT
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
economic_modifier = 5
|
||||
minimal_player_age = 3
|
||||
pto_type = PTO_CIVILIAN
|
||||
access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
outfit_type = /decl/hierarchy/outfit/job/pilot
|
||||
job_description = "A " + JOB_PILOT + " flies the various shuttles in the Virgo-Erigone System."
|
||||
alt_titles = list(JOB_ALT_COPILOT = /datum/alt_title/co_pilot, JOB_ALT_NAVIGATOR = /datum/alt_title/navigator, JOB_ALT_HELMSMAN = /datum/alt_title/helmsman)
|
||||
|
||||
/datum/alt_title/co_pilot
|
||||
title = JOB_ALT_COPILOT
|
||||
title_blurb = "A Co-" + JOB_ALT_COPILOT + " is there primarily to assist main pilot as well as learn from them"
|
||||
|
||||
/datum/alt_title/navigator
|
||||
title = JOB_ALT_NAVIGATOR
|
||||
|
||||
/datum/alt_title/helmsman
|
||||
title = JOB_ALT_HELMSMAN
|
||||
|
||||
/datum/job/pilot/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
//////////////////////////////////
|
||||
// Entertainer
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/entertainer
|
||||
title = JOB_ENTERTAINER
|
||||
flag = ENTERTAINER
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_entertainment)
|
||||
minimal_access = list(access_entertainment)
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/entertainer
|
||||
job_description = "An " + JOB_ENTERTAINER + " does just that, entertains! Put on plays, play music, sing songs, tell stories, or read your favorite fanfic."
|
||||
alt_titles = list(JOB_ALT_PERFORMER = /datum/alt_title/performer, JOB_ALT_MUSICIAN = /datum/alt_title/musician, JOB_ALT_STAGEHAND = /datum/alt_title/stagehand,
|
||||
JOB_ALT_ACTOR = /datum/alt_title/actor, JOB_ALT_DANCER = /datum/alt_title/dancer, JOB_ALT_SINGER = /datum/alt_title/singer,
|
||||
JOB_ALT_MAGICIAN = /datum/alt_title/magician, JOB_ALT_COMEDIAN = /datum/alt_title/comedian, JOB_ALT_ARTIST = /datum/alt_title/tragedian,
|
||||
JOB_ALT_ARTIST = /datum/alt_title/artist, JOB_ALT_GAME_MASTER = /datum/alt_title/game_master)
|
||||
|
||||
// Entertainer Alt Titles
|
||||
/datum/alt_title/actor
|
||||
title = JOB_ALT_ACTOR
|
||||
title_blurb = "An " + JOB_ALT_ACTOR + " is someone who acts out a role! Whatever sort of character it is, get into it and impress people with power of comedy and tragedy!"
|
||||
|
||||
/datum/alt_title/performer
|
||||
title = JOB_ALT_PERFORMER
|
||||
title_blurb = "A " + JOB_ALT_PERFORMER + " is someone who performs! Whatever sort of performance will come to your mind, the world's a stage!"
|
||||
|
||||
/datum/alt_title/musician
|
||||
title = JOB_ALT_MUSICIAN
|
||||
title_blurb = "A " + JOB_ALT_MUSICIAN + " is someone who makes music with a wide variety of musical instruments!"
|
||||
|
||||
/datum/alt_title/stagehand
|
||||
title = JOB_ALT_STAGEHAND
|
||||
title_blurb = "A " + JOB_ALT_STAGEHAND + " typically performs everything the rest of the entertainers don't. Operate lights, shutters, windows, or narrate through your voicebox!"
|
||||
|
||||
/datum/alt_title/dancer
|
||||
title = JOB_ALT_DANCER
|
||||
title_blurb = "A " + JOB_ALT_DANCER + " is someone who impresses people through power of their own body! From waltz to breakdance, as long as crowd as cheering!"
|
||||
|
||||
/datum/alt_title/singer
|
||||
title = JOB_ALT_SINGER
|
||||
title_blurb = "A " + JOB_ALT_SINGER + " is someone with gift of melodious voice! Impress people with your vocal range!"
|
||||
|
||||
/datum/alt_title/magician
|
||||
title = JOB_ALT_MAGICIAN
|
||||
title_blurb = "A " + JOB_ALT_MAGICIAN + " is someone who awes those around them with impossible! Show off your repertoire of magic tricks, while keeping the secret hidden!"
|
||||
|
||||
/datum/alt_title/comedian
|
||||
title = JOB_ALT_COMEDIAN
|
||||
title_blurb = "A " + JOB_ALT_COMEDIAN + " will focus on making people laugh with the power of wit! Telling jokes, stand-up comedy, you are here to make others smile!"
|
||||
|
||||
/datum/alt_title/tragedian
|
||||
title = JOB_ALT_ARTIST
|
||||
title_blurb = "A " + JOB_ALT_ARTIST + " will focus on making people think about life and world around them! Life is a tragedy, and who's better to convey its emotions than you?"
|
||||
|
||||
/datum/alt_title/artist
|
||||
title = JOB_ALT_ARTIST
|
||||
title_blurb = "An " + JOB_ALT_ARTIST + "'s calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
|
||||
|
||||
/datum/alt_title/game_master
|
||||
title = JOB_ALT_GAME_MASTER
|
||||
title_blurb = "A " + JOB_ALT_GAME_MASTER + " provides recreation for the crew by hosting variety of games. From cards to roleplaying to something more personalized."
|
||||
|
||||
//////////////////////////////////
|
||||
// Entrepreneur
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/entrepreneur
|
||||
title = JOB_ENTREPRENEUR
|
||||
flag = ENTREPRENEUR
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list()
|
||||
minimal_access = list()
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/entrepreneur
|
||||
job_description = "An " + JOB_ENTREPRENEUR + " is basically a visitor that obtained special permission to offer personal services to people on station. \
|
||||
They will offer people these services and, potentially, even demand payment!"
|
||||
alt_titles = list(JOB_ALT_LAWYER = /datum/alt_title/lawyer, JOB_ALT_PRIVATE_EYE = /datum/alt_title/private_eye, JOB_ALT_BODYGUARD = /datum/alt_title/bodyguard,
|
||||
JOB_ALT_PERSONAL_PHYSICIAN = /datum/alt_title/personal_physician, JOB_ALT_DENTIST = /datum/alt_title/dentist, JOB_ALT_FITNESS_INSTRUCTOR = /datum/alt_title/fitness_instructor,
|
||||
JOB_ALT_YOGA_TEACHER = /datum/alt_title/yoga_teacher, JOB_ALT_MASSEUSE = /datum/alt_title/masseuse, JOB_ALT_TRADESPERSON = /datum/alt_title/tradesperson,
|
||||
JOB_ALT_STREAMER = /datum/alt_title/streamer, JOB_ALT_INFLUENCER = /datum/alt_title/influencer, JOB_ALT_PARANORMAL_INVESTIGATOR = /datum/alt_title/paranormal_investigator,
|
||||
JOB_ALT_PERSONAL_SECRETARY = /datum/alt_title/personal_secretary, JOB_ALT_STYLIST = /datum/alt_title/stylist, JOB_ALT_FISHER = /datum/alt_title/fisher,
|
||||
JOB_ALT_FORTUNE_TELLER = /datum/alt_title/fortune_teller, JOB_ALT_SPIRIT_HEALER = /datum/alt_title/spirit_healer)
|
||||
|
||||
/datum/alt_title/lawyer
|
||||
title = JOB_ALT_LAWYER
|
||||
title_blurb = "A " + JOB_ALT_LAWYER + " is knowledgable in various legal systems, including station's operations. They can try to offer their legal counsel, although nobody is really obliged to listen."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_secretary
|
||||
|
||||
/datum/alt_title/private_eye
|
||||
title = JOB_ALT_PRIVATE_EYE
|
||||
title_blurb = "A " + JOB_ALT_PRIVATE_EYE + " is a detective that has no credentials or equipment. But if someone wants something found without security's knowledge, they are the one to go to."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/private_eye
|
||||
|
||||
/datum/alt_title/bodyguard
|
||||
title = JOB_ALT_BODYGUARD
|
||||
title_blurb = "A " + JOB_ALT_BODYGUARD + " offers service of personal protection. They may not be allowed any weapons, but their own body is weapon enough."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/bodyguard
|
||||
|
||||
/datum/alt_title/personal_physician
|
||||
title = JOB_ALT_PERSONAL_PHYSICIAN
|
||||
title_blurb = "A " + JOB_ALT_PERSONAL_PHYSICIAN + " is a doctor dedicated less to Hippocratic Oath and more to the moneymaking grind. Their license may be expired, but the grindset never will be."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_physician
|
||||
|
||||
/datum/alt_title/dentist
|
||||
title = JOB_ALT_DENTIST
|
||||
title_blurb = "A " + JOB_ALT_DENTIST + " is a doctor that specializes in oral care. Company may not recognize them as a proper doctor, but surely their customers will."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/dentist
|
||||
|
||||
/datum/alt_title/fitness_instructor
|
||||
title = JOB_ALT_FITNESS_INSTRUCTOR
|
||||
title_blurb = "A " + JOB_ALT_FITNESS_INSTRUCTOR + " dedicates themselves to improving the health of the crew through physical activity, and boy, do they need the help."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fitness_instructor
|
||||
|
||||
/datum/alt_title/yoga_teacher
|
||||
title = JOB_ALT_YOGA_TEACHER
|
||||
title_blurb = "A " + JOB_ALT_YOGA_TEACHER + " is similar to a fitness instructor, but rather than turning the round bodies into firm ones, they focus on helping people find balance and harmony."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/yoga_teacher
|
||||
|
||||
/datum/alt_title/masseuse
|
||||
title = JOB_ALT_MASSEUSE
|
||||
title_blurb = "A " + JOB_ALT_MASSEUSE + " is master of physical therapy and working others' bodies with their hands."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/masseuse
|
||||
|
||||
/datum/alt_title/tradesperson
|
||||
title = JOB_ALT_TRADESPERSON
|
||||
title_blurb = "A " + JOB_ALT_TRADESPERSON + " is someone attempting to make money via the most obvious act of all - buying and selling. Now if only customs allowed you to bring your goods along..."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/tradesperson
|
||||
|
||||
/datum/alt_title/streamer
|
||||
title = JOB_ALT_STREAMER
|
||||
title_blurb = "A " + JOB_ALT_STREAMER + " is here to entertain. Not the crew! Their audience across exonet!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/streamer
|
||||
|
||||
/datum/alt_title/influencer
|
||||
title = JOB_ALT_INFLUENCER
|
||||
title_blurb = "An " + JOB_ALT_INFLUENCER + " has lucked out with some exonet following, and was given permission to go onstation to provide free exposure. Don't let it go to your head."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/influencer
|
||||
|
||||
/datum/alt_title/paranormal_investigator
|
||||
title = JOB_ALT_PARANORMAL_INVESTIGATOR
|
||||
title_blurb = "A " + JOB_ALT_PARANORMAL_INVESTIGATOR + " looks beyond what is accepted by modern science, and searches for the true unknown. Aliens, alternate dimensions, ghosts... The truth is out there!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/paranormal_investigator
|
||||
|
||||
/datum/alt_title/personal_secretary
|
||||
title = JOB_ALT_PERSONAL_SECRETARY
|
||||
title_blurb = "A " + JOB_ALT_PERSONAL_SECRETARY + " offers services of general assistance. Although it's doubtful anyone will ever actually need those."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_secretary
|
||||
|
||||
/datum/alt_title/stylist
|
||||
title = JOB_ALT_STYLIST
|
||||
title_blurb = "A " + JOB_ALT_STYLIST + " offers fashion advice, as well as helps with adjusting appearance of the crew to better suit their beauty standards."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/stylist
|
||||
|
||||
/datum/alt_title/fisher
|
||||
title = JOB_ALT_FISHER
|
||||
title_blurb = "A " + JOB_ALT_FISHER + " is a capable angler, who is good at obtaining large amounts of marine goods. Whether you generously give them to station or attempt to make a quick thaler by selling, it's up to you!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fisher
|
||||
|
||||
/datum/alt_title/fortune_teller
|
||||
title = JOB_ALT_FORTUNE_TELLER
|
||||
title_blurb = "A " + JOB_ALT_FORTUNE_TELLER + " peers into the future, and offers these visions to others. Occasionally those visions may even come true!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fortune_teller
|
||||
|
||||
/datum/alt_title/spirit_healer
|
||||
title = JOB_ALT_SPIRIT_HEALER
|
||||
title_blurb = "A " + JOB_ALT_SPIRIT_HEALER + " offers alternative forms of medicine. Rituals, magic rocks, seances... It totally works. What's that about placebo?"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/spirit_healer
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
pto_type = PTO_CIVILIAN
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_morgue, access_chapel_office, access_crematorium, access_maint_tunnels)
|
||||
@@ -14,13 +15,34 @@
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/chaplain
|
||||
job_description = "The " + JOB_CHAPLAIN + " ministers to the spiritual needs of the crew."
|
||||
alt_titles = list(JOB_ALT_COUNSELOR = /datum/alt_title/counselor)
|
||||
alt_titles = list(JOB_ALT_MISSIONARY = /datum/alt_title/missionary, JOB_ALT_PREACHER = /datum/alt_title/preacher, JOB_ALT_PRIEST = /datum/alt_title/priest,
|
||||
JOB_ALT_NUN = /datum/alt_title/nun, JOB_ALT_MONK = /datum/alt_title/monk, JOB_ALT_COUNSELOR = /datum/alt_title/counselor,
|
||||
JOB_ALT_GURU = /datum/alt_title/guru)
|
||||
|
||||
// Chaplain Alt Titles
|
||||
/datum/alt_title/counselor
|
||||
title = JOB_ALT_COUNSELOR
|
||||
title_blurb = "The " + JOB_ALT_COUNSELOR + " attends to the emotional needs of the crew, without a specific medicinal or spiritual focus."
|
||||
|
||||
/datum/alt_title/guru
|
||||
title = JOB_ALT_GURU
|
||||
title_blurb = "The " + JOB_ALT_GURU + " primarily tries to offer spiritual guidance to those who come seeking it."
|
||||
|
||||
/datum/alt_title/missionary
|
||||
title = JOB_ALT_MISSIONARY
|
||||
|
||||
/datum/alt_title/preacher
|
||||
title = JOB_ALT_PREACHER
|
||||
|
||||
/datum/alt_title/priest
|
||||
title = JOB_ALT_PRIEST
|
||||
|
||||
/datum/alt_title/nun
|
||||
title = JOB_ALT_NUN
|
||||
|
||||
/datum/alt_title/monk
|
||||
title = JOB_ALT_MONK
|
||||
|
||||
/datum/job/chaplain/equip(var/mob/living/carbon/human/H, var/alt_title, var/ask_questions = TRUE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
|
||||
@@ -1,426 +0,0 @@
|
||||
/datum/job/bartender
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_BARKEEPR = /datum/alt_title/barkeeper, JOB_ALT_BARMAID = /datum/alt_title/barmaid, JOB_ALT_BARISTA = /datum/alt_title/barista, JOB_ALT_MIXOLOGIST = /datum/alt_title/mixologist)
|
||||
|
||||
/datum/alt_title/barkeeper
|
||||
title = JOB_ALT_BARKEEPR
|
||||
|
||||
/datum/alt_title/barmaid
|
||||
title = JOB_ALT_BARMAID
|
||||
|
||||
/datum/alt_title/mixologist
|
||||
title = JOB_ALT_MIXOLOGIST
|
||||
|
||||
|
||||
/datum/job/chef
|
||||
total_positions = 2 //IT TAKES A LOT TO MAKE A STEW
|
||||
spawn_positions = 2 //A PINCH OF SALT AND LAUGHTER, TOO
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_SOUSCHEF = /datum/alt_title/souschef, JOB_ALT_COOK = /datum/alt_title/cook, JOB_ALT_KITCHEN_WORKER = /datum/alt_title/kitchen_worker)
|
||||
|
||||
/datum/alt_title/souschef
|
||||
title = JOB_ALT_SOUSCHEF
|
||||
|
||||
/datum/alt_title/kitchen_worker
|
||||
title = JOB_ALT_KITCHEN_WORKER
|
||||
title_blurb = "A " + JOB_ALT_KITCHEN_WORKER + " has the same duties, though they may be less experienced."
|
||||
|
||||
|
||||
/datum/job/hydro
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_HYDROPONICIST = /datum/alt_title/hydroponicist, JOB_ALT_CULTIVATOR = /datum/alt_title/cultivator, JOB_ALT_FARMER = /datum/alt_title/farmer,
|
||||
JOB_ALT_GARDENER = /datum/alt_title/gardener, JOB_ALT_FLORIST = /datum/alt_title/florsit, JOB_ALT_RANCHER = /datum/alt_title/rancher)
|
||||
|
||||
/datum/alt_title/hydroponicist
|
||||
title = JOB_ALT_HYDROPONICIST
|
||||
|
||||
/datum/alt_title/cultivator
|
||||
title = JOB_ALT_CULTIVATOR
|
||||
|
||||
/datum/alt_title/farmer
|
||||
title = JOB_ALT_FARMER
|
||||
|
||||
/datum/alt_title/florsit
|
||||
title = JOB_ALT_FLORIST
|
||||
title_blurb = "A " + JOB_ALT_FLORIST + " may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere."
|
||||
|
||||
/datum/alt_title/rancher
|
||||
title = JOB_ALT_RANCHER
|
||||
title_blurb = "A " + JOB_ALT_RANCHER + " is tasked with the care, feeding, raising, and harvesting of livestock."
|
||||
|
||||
|
||||
/datum/job/qm
|
||||
pto_type = PTO_CARGO
|
||||
dept_time_required = 20
|
||||
alt_titles = list(JOB_ALT_SUPPLY_CHIEF = /datum/alt_title/supply_chief, JOB_ALT_LOGISTICS_MANAGER = /datum/alt_title/logistics_manager, JOB_ALT_CARGO_SUPERVISOR = /datum/alt_title/cargo_supervisor)
|
||||
|
||||
/datum/alt_title/logistics_manager
|
||||
title = JOB_ALT_LOGISTICS_MANAGER
|
||||
|
||||
/datum/alt_title/cargo_supervisor
|
||||
title = JOB_ALT_CARGO_SUPERVISOR
|
||||
|
||||
/datum/job/qm/get_request_reasons()
|
||||
return list("Training crew")
|
||||
|
||||
|
||||
/datum/job/cargo_tech
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_CARGO
|
||||
alt_titles = list(JOB_ALT_CARGO_LOADER = /datum/alt_title/cargo_loader, JOB_ALT_CARGO_HANDLER = /datum/alt_title/cargo_handler, JOB_ALT_SUPPLY_COURIER = /datum/alt_title/supply_courier,
|
||||
JOB_ALT_DISPOSALS_SORTER = /datum/alt_title/disposal_sorter)
|
||||
|
||||
/datum/alt_title/supply_courier
|
||||
title = JOB_ALT_SUPPLY_COURIER
|
||||
title_blurb = "A " + JOB_ALT_SUPPLY_COURIER + " is usually tasked with delivering packages or cargo directly to whoever requires it."
|
||||
|
||||
/datum/alt_title/cargo_loader
|
||||
title = JOB_ALT_CARGO_LOADER
|
||||
title_blurb = "A " + JOB_ALT_CARGO_LOADER + " is usually tasked with more menial labor within Supply department, such as loading and unloading supply shuttle."
|
||||
|
||||
/datum/alt_title/cargo_handler
|
||||
title = JOB_ALT_CARGO_HANDLER
|
||||
title_blurb = "A " + JOB_ALT_CARGO_HANDLER + " is usually tasked with more menial labor within Supply department, such as loading and unloading supply shuttle."
|
||||
|
||||
/datum/alt_title/disposal_sorter
|
||||
title = JOB_ALT_DISPOSALS_SORTER
|
||||
title_blurb = "A " + JOB_ALT_DISPOSALS_SORTER + " is usually tasked with operating disposals delivery system, sorting the trash and tagging parcels for delivery."
|
||||
|
||||
|
||||
/datum/job/mining
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
pto_type = PTO_CARGO
|
||||
alt_titles = list(JOB_ALT_DEEP_SPACE_MINER = /datum/alt_title/deep_space_miner, JOB_ALT_DRILL_TECHNICIAN = /datum/alt_title/drill_tech, JOB_ALT_PROSPECTOR = /datum/alt_title/prospector,
|
||||
JOB_ALT_EXCAVATOR = /datum/alt_title/excavator)
|
||||
|
||||
/datum/alt_title/deep_space_miner
|
||||
title = JOB_ALT_DEEP_SPACE_MINER
|
||||
title_blurb = "A " + JOB_ALT_DEEP_SPACE_MINER + " specializes primarily in mining operations in zero-g environments, mostly in asteroid and debris fields."
|
||||
|
||||
/datum/alt_title/prospector
|
||||
title = JOB_ALT_PROSPECTOR
|
||||
|
||||
/datum/alt_title/excavator
|
||||
title = JOB_ALT_EXCAVATOR
|
||||
|
||||
/datum/job/mining/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/janitor //Lots of janitor substations on station.
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_CUSTODIAN = /datum/alt_title/custodian, JOB_ALT_SANITATION_TECHNICIAN = /datum/alt_title/sanitation_tech,
|
||||
JOB_ALT_MAID = /datum/alt_title/maid, JOB_ALT_GARBAGE_COLLECTOR = /datum/alt_title/garbage_collector)
|
||||
|
||||
/datum/alt_title/sanitation_tech
|
||||
title = JOB_ALT_SANITATION_TECHNICIAN
|
||||
|
||||
/datum/alt_title/maid
|
||||
title = JOB_ALT_MAID
|
||||
|
||||
/datum/alt_title/garbage_collector
|
||||
title = JOB_ALT_GARBAGE_COLLECTOR
|
||||
title_blurb = "A " + JOB_ALT_GARBAGE_COLLECTOR + " keeps the station clean, though focuses moreso on collecting larger trash, with wet cleaning being secondary task."
|
||||
|
||||
|
||||
/datum/job/librarian
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
alt_titles = list(JOB_ALT_JOURNALIST = /datum/alt_title/journalist, JOB_ALT_REPORTER = /datum/alt_title/reporter, JOB_ALT_WRITER = /datum/alt_title/writer,
|
||||
JOB_ALT_HISTORIAN = /datum/alt_title/historian, JOB_ALT_ARCHIVIST = /datum/alt_title/archivist, JOB_ALT_PROFESSOR = /datum/alt_title/professor,
|
||||
JOB_ALT_ACADEMIC = /datum/alt_title/academic, JOB_ALT_PHILOSOPHER = /datum/alt_title/philosopher, JOB_ALT_CURATOR = /datum/alt_title/curator)
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
/datum/alt_title/reporter
|
||||
title = JOB_ALT_REPORTER
|
||||
title_blurb = "The " + JOB_ALT_REPORTER + " uses the Library as a base of operations, from which they can report the news and goings-on on the station with their camera."
|
||||
|
||||
/datum/alt_title/historian
|
||||
title = JOB_ALT_HISTORIAN
|
||||
title_blurb = "The " + JOB_ALT_HISTORIAN + " uses the Library as a base of operation to record any important events occurring on station."
|
||||
|
||||
/datum/alt_title/archivist
|
||||
title = JOB_ALT_ARCHIVIST
|
||||
title_blurb = "The " + JOB_ALT_ARCHIVIST + " uses the Library as a base of operation to record any important events occurring on station."
|
||||
|
||||
/datum/alt_title/professor
|
||||
title = JOB_ALT_PROFESSOR
|
||||
title_blurb = "The " + JOB_ALT_PROFESSOR + " uses the Library as a base of operations to share their vast knowledge with the crew."
|
||||
|
||||
/datum/alt_title/academic
|
||||
title = JOB_ALT_ACADEMIC
|
||||
title_blurb = "The " + JOB_ALT_ACADEMIC + " uses the Library as a base of operations to share their vast knowledge with the crew."
|
||||
|
||||
/datum/alt_title/philosopher
|
||||
title = JOB_ALT_PHILOSOPHER
|
||||
title_blurb = "The " + JOB_ALT_PHILOSOPHER + " uses the Library as a base of operation to ruminate on nature of life and other great questions, and share their opinions with the crew."
|
||||
|
||||
/datum/alt_title/curator
|
||||
title = JOB_ALT_CURATOR
|
||||
title_blurb = "The " + JOB_ALT_CURATOR + " uses the Library as a base of operation to gather the finest of art for display and preservation."
|
||||
|
||||
/datum/job/lawyer
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_INTERNAL_AFFAIRS_LIAISON = /datum/alt_title/ia_liaison, JOB_ALT_INTERNAL_AFFAIRS_DELEGATE = /datum/alt_title/ia_delegate,
|
||||
JOB_ALT_INTERNAL_AFFAIRS_INVESTIGATOR = /datum/alt_title/ia_investigator)
|
||||
|
||||
/datum/alt_title/ia_liaison
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_LIAISON
|
||||
|
||||
/datum/alt_title/ia_delegate
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_DELEGATE
|
||||
|
||||
/datum/alt_title/ia_investigator
|
||||
title = JOB_ALT_INTERNAL_AFFAIRS_INVESTIGATOR
|
||||
|
||||
|
||||
/datum/job/chaplain
|
||||
pto_type = PTO_CIVILIAN
|
||||
alt_titles = list(JOB_ALT_MISSIONARY = /datum/alt_title/missionary, JOB_ALT_PREACHER = /datum/alt_title/preacher, JOB_ALT_PRIEST = /datum/alt_title/priest,
|
||||
JOB_ALT_NUN = /datum/alt_title/nun, JOB_ALT_MONK = /datum/alt_title/monk, JOB_ALT_COUNSELOR = /datum/alt_title/counselor,
|
||||
JOB_ALT_GURU = /datum/alt_title/guru)
|
||||
|
||||
/datum/alt_title/guru
|
||||
title = JOB_ALT_GURU
|
||||
title_blurb = "The " + JOB_ALT_GURU + " primarily tries to offer spiritual guidance to those who come seeking it."
|
||||
|
||||
/datum/alt_title/missionary
|
||||
title = JOB_ALT_MISSIONARY
|
||||
|
||||
/datum/alt_title/preacher
|
||||
title = JOB_ALT_PREACHER
|
||||
|
||||
/datum/alt_title/priest
|
||||
title = JOB_ALT_PRIEST
|
||||
|
||||
/datum/alt_title/nun
|
||||
title = JOB_ALT_NUN
|
||||
|
||||
/datum/alt_title/monk
|
||||
title = JOB_ALT_MONK
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
// Pilot
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/pilot
|
||||
title = JOB_PILOT
|
||||
flag = PILOT
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
economic_modifier = 5
|
||||
minimal_player_age = 3
|
||||
pto_type = PTO_CIVILIAN
|
||||
access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
outfit_type = /decl/hierarchy/outfit/job/pilot
|
||||
job_description = "A " + JOB_PILOT + " flies the various shuttles in the Virgo-Erigone System."
|
||||
alt_titles = list(JOB_ALT_COPILOT = /datum/alt_title/co_pilot, JOB_ALT_NAVIGATOR = /datum/alt_title/navigator, JOB_ALT_HELMSMAN = /datum/alt_title/helmsman)
|
||||
|
||||
/datum/alt_title/co_pilot
|
||||
title = JOB_ALT_COPILOT
|
||||
title_blurb = "A Co-" + JOB_ALT_COPILOT + " is there primarily to assist main pilot as well as learn from them"
|
||||
|
||||
/datum/alt_title/navigator
|
||||
title = JOB_ALT_NAVIGATOR
|
||||
|
||||
/datum/alt_title/helmsman
|
||||
title = JOB_ALT_HELMSMAN
|
||||
|
||||
/datum/job/pilot/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
//////////////////////////////////
|
||||
// Entertainer
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/entertainer
|
||||
title = JOB_ENTERTAINER
|
||||
flag = ENTERTAINER
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list(access_entertainment)
|
||||
minimal_access = list(access_entertainment)
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/entertainer
|
||||
job_description = "An " + JOB_ENTERTAINER + " does just that, entertains! Put on plays, play music, sing songs, tell stories, or read your favorite fanfic."
|
||||
alt_titles = list(JOB_ALT_PERFORMER = /datum/alt_title/performer, JOB_ALT_MUSICIAN = /datum/alt_title/musician, JOB_ALT_STAGEHAND = /datum/alt_title/stagehand,
|
||||
JOB_ALT_ACTOR = /datum/alt_title/actor, JOB_ALT_DANCER = /datum/alt_title/dancer, JOB_ALT_SINGER = /datum/alt_title/singer,
|
||||
JOB_ALT_MAGICIAN = /datum/alt_title/magician, JOB_ALT_COMEDIAN = /datum/alt_title/comedian, JOB_ALT_ARTIST = /datum/alt_title/tragedian,
|
||||
JOB_ALT_ARTIST = /datum/alt_title/artist, JOB_ALT_GAME_MASTER = /datum/alt_title/game_master)
|
||||
|
||||
// Entertainer Alt Titles
|
||||
/datum/alt_title/actor
|
||||
title = JOB_ALT_ACTOR
|
||||
title_blurb = "An " + JOB_ALT_ACTOR + " is someone who acts out a role! Whatever sort of character it is, get into it and impress people with power of comedy and tragedy!"
|
||||
|
||||
/datum/alt_title/performer
|
||||
title = JOB_ALT_PERFORMER
|
||||
title_blurb = "A " + JOB_ALT_PERFORMER + " is someone who performs! Whatever sort of performance will come to your mind, the world's a stage!"
|
||||
|
||||
/datum/alt_title/musician
|
||||
title = JOB_ALT_MUSICIAN
|
||||
title_blurb = "A " + JOB_ALT_MUSICIAN + " is someone who makes music with a wide variety of musical instruments!"
|
||||
|
||||
/datum/alt_title/stagehand
|
||||
title = JOB_ALT_STAGEHAND
|
||||
title_blurb = "A " + JOB_ALT_STAGEHAND + " typically performs everything the rest of the entertainers don't. Operate lights, shutters, windows, or narrate through your voicebox!"
|
||||
|
||||
/datum/alt_title/dancer
|
||||
title = JOB_ALT_DANCER
|
||||
title_blurb = "A " + JOB_ALT_DANCER + " is someone who impresses people through power of their own body! From waltz to breakdance, as long as crowd as cheering!"
|
||||
|
||||
/datum/alt_title/singer
|
||||
title = JOB_ALT_SINGER
|
||||
title_blurb = "A " + JOB_ALT_SINGER + " is someone with gift of melodious voice! Impress people with your vocal range!"
|
||||
|
||||
/datum/alt_title/magician
|
||||
title = JOB_ALT_MAGICIAN
|
||||
title_blurb = "A " + JOB_ALT_MAGICIAN + " is someone who awes those around them with impossible! Show off your repertoire of magic tricks, while keeping the secret hidden!"
|
||||
|
||||
/datum/alt_title/comedian
|
||||
title = JOB_ALT_COMEDIAN
|
||||
title_blurb = "A " + JOB_ALT_COMEDIAN + " will focus on making people laugh with the power of wit! Telling jokes, stand-up comedy, you are here to make others smile!"
|
||||
|
||||
/datum/alt_title/tragedian
|
||||
title = JOB_ALT_ARTIST
|
||||
title_blurb = "A " + JOB_ALT_ARTIST + " will focus on making people think about life and world around them! Life is a tragedy, and who's better to convey its emotions than you?"
|
||||
|
||||
/datum/alt_title/artist
|
||||
title = JOB_ALT_ARTIST
|
||||
title_blurb = "An " + JOB_ALT_ARTIST + "'s calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
|
||||
|
||||
/datum/alt_title/game_master
|
||||
title = JOB_ALT_GAME_MASTER
|
||||
title_blurb = "A " + JOB_ALT_GAME_MASTER + " provides recreation for the crew by hosting variety of games. From cards to roleplaying to something more personalized."
|
||||
|
||||
//////////////////////////////////
|
||||
// Entrepreneur
|
||||
//////////////////////////////////
|
||||
|
||||
/datum/job/entrepreneur
|
||||
title = JOB_ENTREPRENEUR
|
||||
flag = ENTREPRENEUR
|
||||
departments = list(DEPARTMENT_CIVILIAN)
|
||||
department_flag = CIVILIAN
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
supervisors = "the " + JOB_HEAD_OF_PERSONNEL
|
||||
selection_color = "#515151"
|
||||
access = list()
|
||||
minimal_access = list()
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/assistant/entrepreneur
|
||||
job_description = "An " + JOB_ENTREPRENEUR + " is basically a visitor that obtained special permission to offer personal services to people on station. \
|
||||
They will offer people these services and, potentially, even demand payment!"
|
||||
alt_titles = list(JOB_ALT_LAWYER = /datum/alt_title/lawyer, JOB_ALT_PRIVATE_EYE = /datum/alt_title/private_eye, JOB_ALT_BODYGUARD = /datum/alt_title/bodyguard,
|
||||
JOB_ALT_PERSONAL_PHYSICIAN = /datum/alt_title/personal_physician, JOB_ALT_DENTIST = /datum/alt_title/dentist, JOB_ALT_FITNESS_INSTRUCTOR = /datum/alt_title/fitness_instructor,
|
||||
JOB_ALT_YOGA_TEACHER = /datum/alt_title/yoga_teacher, JOB_ALT_MASSEUSE = /datum/alt_title/masseuse, JOB_ALT_TRADESPERSON = /datum/alt_title/tradesperson,
|
||||
JOB_ALT_STREAMER = /datum/alt_title/streamer, JOB_ALT_INFLUENCER = /datum/alt_title/influencer, JOB_ALT_PARANORMAL_INVESTIGATOR = /datum/alt_title/paranormal_investigator,
|
||||
JOB_ALT_PERSONAL_SECRETARY = /datum/alt_title/personal_secretary, JOB_ALT_STYLIST = /datum/alt_title/stylist, JOB_ALT_FISHER = /datum/alt_title/fisher,
|
||||
JOB_ALT_FORTUNE_TELLER = /datum/alt_title/fortune_teller, JOB_ALT_SPIRIT_HEALER = /datum/alt_title/spirit_healer)
|
||||
|
||||
/datum/alt_title/lawyer
|
||||
title = JOB_ALT_LAWYER
|
||||
title_blurb = "A " + JOB_ALT_LAWYER + " is knowledgable in various legal systems, including station's operations. They can try to offer their legal counsel, although nobody is really obliged to listen."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_secretary
|
||||
|
||||
/datum/alt_title/private_eye
|
||||
title = JOB_ALT_PRIVATE_EYE
|
||||
title_blurb = "A " + JOB_ALT_PRIVATE_EYE + " is a detective that has no credentials or equipment. But if someone wants something found without security's knowledge, they are the one to go to."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/private_eye
|
||||
|
||||
/datum/alt_title/bodyguard
|
||||
title = JOB_ALT_BODYGUARD
|
||||
title_blurb = "A " + JOB_ALT_BODYGUARD + " offers service of personal protection. They may not be allowed any weapons, but their own body is weapon enough."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/bodyguard
|
||||
|
||||
/datum/alt_title/personal_physician
|
||||
title = JOB_ALT_PERSONAL_PHYSICIAN
|
||||
title_blurb = "A " + JOB_ALT_PERSONAL_PHYSICIAN + " is a doctor dedicated less to Hippocratic Oath and more to the moneymaking grind. Their license may be expired, but the grindset never will be."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_physician
|
||||
|
||||
/datum/alt_title/dentist
|
||||
title = JOB_ALT_DENTIST
|
||||
title_blurb = "A " + JOB_ALT_DENTIST + " is a doctor that specializes in oral care. Company may not recognize them as a proper doctor, but surely their customers will."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/dentist
|
||||
|
||||
/datum/alt_title/fitness_instructor
|
||||
title = JOB_ALT_FITNESS_INSTRUCTOR
|
||||
title_blurb = "A " + JOB_ALT_FITNESS_INSTRUCTOR + " dedicates themselves to improving the health of the crew through physical activity, and boy, do they need the help."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fitness_instructor
|
||||
|
||||
/datum/alt_title/yoga_teacher
|
||||
title = JOB_ALT_YOGA_TEACHER
|
||||
title_blurb = "A " + JOB_ALT_YOGA_TEACHER + " is similar to a fitness instructor, but rather than turning the round bodies into firm ones, they focus on helping people find balance and harmony."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/yoga_teacher
|
||||
|
||||
/datum/alt_title/masseuse
|
||||
title = JOB_ALT_MASSEUSE
|
||||
title_blurb = "A " + JOB_ALT_MASSEUSE + " is master of physical therapy and working others' bodies with their hands."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/masseuse
|
||||
|
||||
/datum/alt_title/tradesperson
|
||||
title = JOB_ALT_TRADESPERSON
|
||||
title_blurb = "A " + JOB_ALT_TRADESPERSON + " is someone attempting to make money via the most obvious act of all - buying and selling. Now if only customs allowed you to bring your goods along..."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/tradesperson
|
||||
|
||||
/datum/alt_title/streamer
|
||||
title = JOB_ALT_STREAMER
|
||||
title_blurb = "A " + JOB_ALT_STREAMER + " is here to entertain. Not the crew! Their audience across exonet!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/streamer
|
||||
|
||||
/datum/alt_title/influencer
|
||||
title = JOB_ALT_INFLUENCER
|
||||
title_blurb = "An " + JOB_ALT_INFLUENCER + " has lucked out with some exonet following, and was given permission to go onstation to provide free exposure. Don't let it go to your head."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/influencer
|
||||
|
||||
/datum/alt_title/paranormal_investigator
|
||||
title = JOB_ALT_PARANORMAL_INVESTIGATOR
|
||||
title_blurb = "A " + JOB_ALT_PARANORMAL_INVESTIGATOR + " looks beyond what is accepted by modern science, and searches for the true unknown. Aliens, alternate dimensions, ghosts... The truth is out there!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/paranormal_investigator
|
||||
|
||||
/datum/alt_title/personal_secretary
|
||||
title = JOB_ALT_PERSONAL_SECRETARY
|
||||
title_blurb = "A " + JOB_ALT_PERSONAL_SECRETARY + " offers services of general assistance. Although it's doubtful anyone will ever actually need those."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/personal_secretary
|
||||
|
||||
/datum/alt_title/stylist
|
||||
title = JOB_ALT_STYLIST
|
||||
title_blurb = "A " + JOB_ALT_STYLIST + " offers fashion advice, as well as helps with adjusting appearance of the crew to better suit their beauty standards."
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/stylist
|
||||
|
||||
/datum/alt_title/fisher
|
||||
title = JOB_ALT_FISHER
|
||||
title_blurb = "A " + JOB_ALT_FISHER + " is a capable angler, who is good at obtaining large amounts of marine goods. Whether you generously give them to station or attempt to make a quick thaler by selling, it's up to you!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fisher
|
||||
|
||||
/datum/alt_title/fortune_teller
|
||||
title = JOB_ALT_FORTUNE_TELLER
|
||||
title_blurb = "A " + JOB_ALT_FORTUNE_TELLER + " peers into the future, and offers these visions to others. Occasionally those visions may even come true!"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/fortune_teller
|
||||
|
||||
/datum/alt_title/spirit_healer
|
||||
title = JOB_ALT_SPIRIT_HEALER
|
||||
title_blurb = "A " + JOB_ALT_SPIRIT_HEALER + " offers alternative forms of medicine. Rituals, magic rocks, seances... It totally works. What's that about placebo?"
|
||||
title_outfit = /decl/hierarchy/outfit/job/assistant/entrepreneur/spirit_healer
|
||||
@@ -60,7 +60,7 @@
|
||||
name = "Miscellaneous"
|
||||
short_name = "Misc"
|
||||
color = "#666666"
|
||||
sorting_order = 0
|
||||
sorting_order = -5
|
||||
assignable = FALSE
|
||||
|
||||
/datum/department/synthetic
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
/datum/department/misc
|
||||
name = "Off-Duty"
|
||||
short_name = "Offduty"
|
||||
color = "#666666"
|
||||
sorting_order = -5
|
||||
assignable = FALSE
|
||||
@@ -22,15 +22,20 @@
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_ENGINEERING
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction, access_sec_doors,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
|
||||
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction, access_sec_doors,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
alt_titles = list(JOB_ALT_HEAD_ENGINEER = /datum/alt_title/head_engineer, JOB_ALT_FOREMAN = /datum/alt_title/foreman, JOB_ALT_MAINTENANCE_MANAGER = /datum/alt_title/maintenance_manager)
|
||||
minimal_player_age = 7
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/engineering/chief_engineer
|
||||
@@ -38,6 +43,18 @@
|
||||
of manpower as much as they handle hands-on operations and repairs. They are also expected to keep the rest of the station informed of \
|
||||
any structural threats to the station that may be hazardous to health or disruptive to work."
|
||||
|
||||
/datum/job/chief_engineer/get_request_reasons()
|
||||
return list("Engine setup", "Construction project", "Repairs necessary", "Training crew", "Assembling expedition team")
|
||||
|
||||
/datum/alt_title/head_engineer
|
||||
title = JOB_ALT_HEAD_ENGINEER
|
||||
|
||||
/datum/alt_title/foreman
|
||||
title = JOB_ALT_FOREMAN
|
||||
|
||||
/datum/alt_title/maintenance_manager
|
||||
title = JOB_ALT_MAINTENANCE_MANAGER
|
||||
|
||||
//////////////////////////////////
|
||||
// Engineer
|
||||
//////////////////////////////////
|
||||
@@ -52,10 +69,12 @@
|
||||
supervisors = "the "+ JOB_CHIEF_ENGINEER
|
||||
selection_color = "#5B4D20"
|
||||
economic_modifier = 5
|
||||
pto_type = PTO_ENGINEERING
|
||||
|
||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
|
||||
minimal_access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction)
|
||||
alt_titles = list(JOB_ALT_MAINTENANCE_TECHNICIAN = /datum/alt_title/maint_tech,
|
||||
JOB_ALT_ENGINE_TECHNICIAN = /datum/alt_title/engine_tech, JOB_ALT_ELECTRICIAN = /datum/alt_title/electrician)
|
||||
alt_titles = list(JOB_ALT_MAINTENANCE_TECHNICIAN = /datum/alt_title/maint_tech, JOB_ALT_ENGINE_TECHNICIAN = /datum/alt_title/engine_tech,
|
||||
JOB_ALT_ELECTRICIAN = /datum/alt_title/electrician, JOB_ALT_CONSTRUCTION_ENGINEER = /datum/alt_title/construction_engi, JOB_ALT_ENGINEERING_CONTRACTOR = /datum/alt_title/engineering_contractor, JOB_ALT_COMPUTER_TECHNICIAN = /datum/alt_title/computer_tech)
|
||||
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
@@ -64,6 +83,9 @@
|
||||
job_description = "An " + JOB_ENGINEER + " keeps the station running. They repair damages, keep the atmosphere stable, and ensure that power is being \
|
||||
generated and distributed. On quiet shifts, they may be called upon to make cosmetic alterations to the station."
|
||||
|
||||
/datum/job/engineer/get_request_reasons()
|
||||
return list("Engine setup", "Construction project", "Repairs necessary", "Assembling expedition team")
|
||||
|
||||
// Engineer Alt Titles
|
||||
/datum/alt_title/maint_tech
|
||||
title = JOB_ALT_MAINTENANCE_TECHNICIAN
|
||||
@@ -80,6 +102,23 @@
|
||||
title_blurb = "An " + JOB_ALT_ELECTRICIAN + "'s primary duty is making sure power is properly distributed thoughout the station, utilizing solars, substations, and other \
|
||||
methods to ensure every department has power in an emergency."
|
||||
|
||||
/datum/alt_title/construction_engi
|
||||
title = JOB_ALT_CONSTRUCTION_ENGINEER
|
||||
title_blurb = "A " + JOB_ALT_CONSTRUCTION_ENGINEER + " fulfills similar duties to other engineers, but usually occupies spare time with construction of extra facilities in dedicated areas or \
|
||||
as additions to station layout."
|
||||
|
||||
/datum/alt_title/engineering_contractor
|
||||
title = JOB_ALT_ENGINEERING_CONTRACTOR
|
||||
title_blurb = "An " + JOB_ALT_ENGINEERING_CONTRACTOR + " fulfills similar duties to other engineers, but isn't directly employed by NT proper."
|
||||
|
||||
/datum/alt_title/computer_tech
|
||||
title = JOB_ALT_COMPUTER_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_COMPUTER_TECHNICIAN + " fulfills similar duties to other engineers, but specializes in working with software and computers. They also often deal with integrated circuits."
|
||||
|
||||
/datum/alt_title/salvage_tech
|
||||
title = JOB_ALT_SALVAGE_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_SALVAGE_TECHNICIAN + " is responsible for breaking down debris and obsolete equipment to recover useful components and materials."
|
||||
|
||||
//////////////////////////////////
|
||||
// Atmos Tech
|
||||
//////////////////////////////////
|
||||
@@ -90,16 +129,36 @@
|
||||
department_flag = ENGSEC
|
||||
faction = FACTION_STATION
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_ENGINEERING
|
||||
supervisors = "the " + JOB_CHIEF_ENGINEER
|
||||
selection_color = "#5B4D20"
|
||||
economic_modifier = 5
|
||||
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_external_airlocks)
|
||||
minimal_access = list(access_eva, access_engine, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction, access_external_airlocks)
|
||||
|
||||
alt_titles = list(JOB_ALT_ATMOSPHERIC_ENGINEER = /datum/alt_title/atmos_engi, JOB_ALT_ATMOSPHERIC_MAINTAINER = /datum/alt_title/atmos_maint, JOB_ALT_DISPOSALS_TECHNICIAN = /datum/alt_title/disposals_tech,
|
||||
JOB_ALT_FUEL_TECHNICIAN = /datum/alt_title/refuel_tech)
|
||||
|
||||
minimal_player_age = 3
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/engineering/atmos
|
||||
job_description = "An " + JOB_ATMOSPHERIC_TECHNICIAN + " is primarily concerned with keeping the station's atmosphere breathable. They are expected to have a good \
|
||||
understanding of the pipes, vents, and scrubbers that move gasses around the station, and to be familiar with proper firefighting procedure."
|
||||
|
||||
/datum/job/atmos/get_request_reasons()
|
||||
return list("Construction project", "Repairs necessary", "Assembling expedition team")
|
||||
|
||||
/datum/alt_title/refuel_tech
|
||||
title = JOB_ALT_FUEL_TECHNICIAN
|
||||
|
||||
/datum/alt_title/atmos_maint
|
||||
title = JOB_ALT_ATMOSPHERIC_MAINTAINER
|
||||
|
||||
/datum/alt_title/atmos_engi
|
||||
title = JOB_ALT_ATMOSPHERIC_ENGINEER
|
||||
|
||||
/datum/alt_title/disposals_tech
|
||||
title = JOB_ALT_DISPOSALS_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_DISPOSALS_TECHNICIAN + " is an " + JOB_ATMOSPHERIC_TECHNICIAN + " still and can fulfill all the same duties, although specializes more in disposals delivery system's operations and configurations."
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
/datum/job/chief_engineer
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_ENGINEERING
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
|
||||
minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels,
|
||||
access_teleporter, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva,
|
||||
access_heads, access_construction,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload, access_gateway)
|
||||
alt_titles = list(JOB_ALT_HEAD_ENGINEER = /datum/alt_title/head_engineer, JOB_ALT_FOREMAN = /datum/alt_title/foreman, JOB_ALT_MAINTENANCE_MANAGER = /datum/alt_title/maintenance_manager)
|
||||
|
||||
/datum/alt_title/head_engineer
|
||||
title = JOB_ALT_HEAD_ENGINEER
|
||||
|
||||
/datum/alt_title/foreman
|
||||
title = JOB_ALT_FOREMAN
|
||||
|
||||
/datum/alt_title/maintenance_manager
|
||||
title = JOB_ALT_MAINTENANCE_MANAGER
|
||||
|
||||
/datum/job/chief_engineer/get_request_reasons()
|
||||
return list("Engine setup", "Construction project", "Repairs necessary", "Training crew", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/engineer
|
||||
pto_type = PTO_ENGINEERING
|
||||
alt_titles = list(JOB_ALT_MAINTENANCE_TECHNICIAN = /datum/alt_title/maint_tech, JOB_ALT_ENGINE_TECHNICIAN = /datum/alt_title/engine_tech,
|
||||
JOB_ALT_ELECTRICIAN = /datum/alt_title/electrician, JOB_ALT_CONSTRUCTION_ENGINEER = /datum/alt_title/construction_engi, JOB_ALT_ENGINEERING_CONTRACTOR = /datum/alt_title/engineering_contractor, JOB_ALT_COMPUTER_TECHNICIAN = /datum/alt_title/computer_tech)
|
||||
|
||||
/datum/alt_title/construction_engi
|
||||
title = JOB_ALT_CONSTRUCTION_ENGINEER
|
||||
title_blurb = "A " + JOB_ALT_CONSTRUCTION_ENGINEER + " fulfills similar duties to other engineers, but usually occupies spare time with construction of extra facilities in dedicated areas or \
|
||||
as additions to station layout."
|
||||
|
||||
/datum/alt_title/engineering_contractor
|
||||
title = JOB_ALT_ENGINEERING_CONTRACTOR
|
||||
title_blurb = "An " + JOB_ALT_ENGINEERING_CONTRACTOR + " fulfills similar duties to other engineers, but isn't directly employed by NT proper."
|
||||
|
||||
/datum/job/engineer/get_request_reasons()
|
||||
return list("Engine setup", "Construction project", "Repairs necessary", "Assembling expedition team")
|
||||
|
||||
/datum/alt_title/computer_tech
|
||||
title = JOB_ALT_COMPUTER_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_COMPUTER_TECHNICIAN + " fulfills similar duties to other engineers, but specializes in working with software and computers. They also often deal with integrated circuits."
|
||||
|
||||
/datum/job/atmos
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_ENGINEERING
|
||||
alt_titles = list(JOB_ALT_ATMOSPHERIC_ENGINEER = /datum/alt_title/atmos_engi, JOB_ALT_ATMOSPHERIC_MAINTAINER = /datum/alt_title/atmos_maint, JOB_ALT_DISPOSALS_TECHNICIAN = /datum/alt_title/disposals_tech,
|
||||
JOB_ALT_FUEL_TECHNICIAN = /datum/alt_title/refuel_tech)
|
||||
|
||||
/datum/alt_title/atmos_maint
|
||||
title = JOB_ALT_ATMOSPHERIC_MAINTAINER
|
||||
|
||||
/datum/alt_title/atmos_engi
|
||||
title = JOB_ALT_ATMOSPHERIC_ENGINEER
|
||||
|
||||
/datum/alt_title/disposals_tech
|
||||
title = JOB_ALT_DISPOSALS_TECHNICIAN
|
||||
title_blurb = "A " + JOB_ALT_DISPOSALS_TECHNICIAN + " is an " + JOB_ATMOSPHERIC_TECHNICIAN + " still and can fulfill all the same duties, although specializes more in disposals delivery system's operations and configurations."
|
||||
|
||||
/datum/alt_title/refuel_tech
|
||||
title = JOB_ALT_FUEL_TECHNICIAN
|
||||
|
||||
/datum/job/atmos/get_request_reasons()
|
||||
return list("Construction project", "Repairs necessary", "Assembling expedition team")
|
||||
@@ -39,6 +39,29 @@
|
||||
// Description of the job's role and minimum responsibilities.
|
||||
var/job_description = "This Job doesn't have a description! Please report it!"
|
||||
|
||||
//Requires a ckey to be whitelisted in jobwhitelist.txt
|
||||
var/whitelist_only = 0
|
||||
|
||||
//Does not display this job on the occupation setup screen
|
||||
var/latejoin_only = 0
|
||||
|
||||
//Every hour playing this role gains this much time off. (Can be negative for off duty jobs!)
|
||||
var/timeoff_factor = 3
|
||||
|
||||
//What type of PTO is that job earning?
|
||||
var/pto_type
|
||||
|
||||
//Disallow joining as this job midround from off-duty position via going on-duty
|
||||
var/disallow_jobhop = FALSE
|
||||
|
||||
//Time required in the department as other jobs before playing this one (in hours)
|
||||
var/dept_time_required = 0
|
||||
|
||||
//Do we forbid ourselves from earning PTO?
|
||||
var/playtime_only = FALSE
|
||||
|
||||
var/requestable = TRUE
|
||||
|
||||
/datum/job/New()
|
||||
. = ..()
|
||||
department_accounts = department_accounts || departments_managed
|
||||
@@ -184,3 +207,47 @@
|
||||
if(brain_type in banned_job_species)
|
||||
return TRUE
|
||||
*/
|
||||
|
||||
|
||||
// Check client-specific availability rules.
|
||||
/datum/job/proc/player_has_enough_pto(client/C)
|
||||
return timeoff_factor >= 0 || (C && LAZYACCESS(C.department_hours, pto_type) > 0)
|
||||
|
||||
/datum/job/proc/player_has_enough_playtime(client/C)
|
||||
return (available_in_playhours(C) == 0)
|
||||
|
||||
/datum/job/proc/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
if(isnum(C.play_hours[pto_type])) // Has played that department before
|
||||
return max(0, dept_time_required - C.play_hours[pto_type])
|
||||
else // List doesn't have that entry, maybe never played, maybe invalid PTO type (you should fix that...)
|
||||
return dept_time_required // Could be 0, too, which is fine! They can play that
|
||||
return 0
|
||||
|
||||
// Special treatment for some the more complicated heads
|
||||
|
||||
// Captain gets every department combined
|
||||
/datum/job/captain/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
var/remaining_time_needed = dept_time_required
|
||||
for(var/key in C.play_hours)
|
||||
if(isnum(C.play_hours[key]) && !(key == PTO_TALON))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[key])
|
||||
return remaining_time_needed
|
||||
return 0
|
||||
|
||||
// HoP gets civilian, cargo, and exploration combined
|
||||
/datum/job/hop/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
var/remaining_time_needed = dept_time_required
|
||||
if(isnum(C.play_hours[PTO_CIVILIAN]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_CIVILIAN])
|
||||
if(isnum(C.play_hours[PTO_CARGO]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_CARGO])
|
||||
if(isnum(C.play_hours[PTO_EXPLORATION]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_EXPLORATION])
|
||||
return remaining_time_needed
|
||||
return 0
|
||||
|
||||
/datum/job/proc/get_request_reasons()
|
||||
return list()
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
/datum/job
|
||||
//Requires a ckey to be whitelisted in jobwhitelist.txt
|
||||
var/whitelist_only = 0
|
||||
|
||||
//Does not display this job on the occupation setup screen
|
||||
var/latejoin_only = 0
|
||||
|
||||
//Every hour playing this role gains this much time off. (Can be negative for off duty jobs!)
|
||||
var/timeoff_factor = 3
|
||||
|
||||
//What type of PTO is that job earning?
|
||||
var/pto_type
|
||||
|
||||
//Disallow joining as this job midround from off-duty position via going on-duty
|
||||
var/disallow_jobhop = FALSE
|
||||
|
||||
//Time required in the department as other jobs before playing this one (in hours)
|
||||
var/dept_time_required = 0
|
||||
|
||||
//Do we forbid ourselves from earning PTO?
|
||||
var/playtime_only = FALSE
|
||||
|
||||
var/requestable = TRUE
|
||||
|
||||
// Check client-specific availability rules.
|
||||
/datum/job/proc/player_has_enough_pto(client/C)
|
||||
return timeoff_factor >= 0 || (C && LAZYACCESS(C.department_hours, pto_type) > 0)
|
||||
|
||||
/datum/job/proc/player_has_enough_playtime(client/C)
|
||||
return (available_in_playhours(C) == 0)
|
||||
|
||||
/datum/job/proc/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
if(isnum(C.play_hours[pto_type])) // Has played that department before
|
||||
return max(0, dept_time_required - C.play_hours[pto_type])
|
||||
else // List doesn't have that entry, maybe never played, maybe invalid PTO type (you should fix that...)
|
||||
return dept_time_required // Could be 0, too, which is fine! They can play that
|
||||
return 0
|
||||
|
||||
// Special treatment for some the more complicated heads
|
||||
|
||||
// Captain gets every department combined
|
||||
/datum/job/captain/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
var/remaining_time_needed = dept_time_required
|
||||
for(var/key in C.play_hours)
|
||||
if(isnum(C.play_hours[key]) && !(key == PTO_TALON))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[key])
|
||||
return remaining_time_needed
|
||||
return 0
|
||||
|
||||
// HoP gets civilian, cargo, and exploration combined
|
||||
/datum/job/hop/available_in_playhours(client/C)
|
||||
if(C && CONFIG_GET(flag/use_playtime_restriction_for_jobs) && dept_time_required)
|
||||
var/remaining_time_needed = dept_time_required
|
||||
if(isnum(C.play_hours[PTO_CIVILIAN]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_CIVILIAN])
|
||||
if(isnum(C.play_hours[PTO_CARGO]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_CARGO])
|
||||
if(isnum(C.play_hours[PTO_EXPLORATION]))
|
||||
remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_EXPLORATION])
|
||||
return remaining_time_needed
|
||||
return 0
|
||||
|
||||
/datum/job/proc/get_request_reasons()
|
||||
return list()
|
||||
@@ -16,11 +16,13 @@
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 10
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels)
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels, access_gateway)
|
||||
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels)
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels, access_gateway)
|
||||
alt_titles = list(JOB_ALT_CHIEF_PHYSICIAN = /datum/alt_title/chief_physician, JOB_ALT_MEDICAL_DIRECTOR = /datum/alt_title/medical_director, JOB_ALT_HEALTHCARE_MANAGER = /datum/alt_title/healthcare_manager)
|
||||
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_UNATHI = 70, "mechanical" = 10, SPECIES_HUMAN_VATBORN = 14)
|
||||
@@ -29,12 +31,28 @@
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_MEDICAL
|
||||
dept_time_required = 60
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/cmo
|
||||
job_description = "The CMO manages the Medical department and is a position requiring experience and skill; their goal is to ensure that their \
|
||||
staff keep the station's crew healthy and whole. They are primarily interested in making sure that patients are safely found and \
|
||||
transported to Medical for treatment. They are expected to keep the crew informed about threats to their health and safety, and \
|
||||
about the importance of Suit Sensors."
|
||||
|
||||
/datum/job/cmo/get_request_reasons()
|
||||
return list("Surgery pending", "Viral outbreak", "Training crew", "Assembling expedition team")
|
||||
|
||||
/datum/alt_title/chief_physician
|
||||
title = JOB_ALT_CHIEF_PHYSICIAN
|
||||
|
||||
/datum/alt_title/medical_director
|
||||
title = JOB_ALT_MEDICAL_DIRECTOR
|
||||
|
||||
/datum/alt_title/healthcare_manager
|
||||
title = JOB_ALT_HEALTHCARE_MANAGER
|
||||
|
||||
//////////////////////////////////
|
||||
// Medical Doctor
|
||||
//////////////////////////////////
|
||||
@@ -45,7 +63,8 @@
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_MEDICAL
|
||||
supervisors = "the " + JOB_CHIEF_MEDICAL_OFFICER
|
||||
selection_color = "#013D3B"
|
||||
economic_modifier = 7
|
||||
@@ -55,14 +74,15 @@
|
||||
job_description = "A " + JOB_MEDICAL_DOCTOR + " is a Jack-of-All-Trades Medical title, covering a variety of skill levels and minor specializations. They are likely \
|
||||
familiar with basic first aid, and a number of accompanying medications, and can generally save, if not cure, a majority of the \
|
||||
patients they encounter."
|
||||
alt_titles = list(
|
||||
JOB_ALT_SURGEON = /datum/alt_title/surgeon,
|
||||
JOB_ALT_EMERGENCY_PHYSICIAN = /datum/alt_title/emergency_physician,
|
||||
JOB_ALT_NURSE = /datum/alt_title/nurse,
|
||||
JOB_ALT_VIROLOGIST = /datum/alt_title/virologist)
|
||||
alt_titles = list(JOB_ALT_PHYSICIAN = /datum/alt_title/physician, JOB_ALT_MEDICAL_PRACTITIONER = /datum/alt_title/medical_practitioner, JOB_ALT_SURGEON = /datum/alt_title/surgeon,
|
||||
JOB_ALT_EMERGENCY_PHYSICIAN = /datum/alt_title/emergency_physician, JOB_ALT_NURSE = /datum/alt_title/nurse, JOB_ALT_ORDERLY = /datum/alt_title/orderly,
|
||||
JOB_ALT_VIROLOGIST = /datum/alt_title/virologist, JOB_ALT_MEDICAL_CONTRACTOR = /datum/alt_title/medical_contractor)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 3)
|
||||
|
||||
/datum/job/doctor/get_request_reasons()
|
||||
return list("Surgery pending", "Viral outbreak", "Assembling expedition team")
|
||||
|
||||
//Medical Doctor Alt Titles
|
||||
/datum/alt_title/surgeon
|
||||
title = JOB_ALT_SURGEON
|
||||
@@ -90,7 +110,22 @@
|
||||
to produce the various types of virus foods or mutagens."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/doctor/virologist
|
||||
|
||||
//Chemist is a medical job damnit //YEAH FUCK YOU SCIENCE -Pete //Guys, behave -Erro
|
||||
/datum/alt_title/physician
|
||||
title = JOB_ALT_PHYSICIAN
|
||||
|
||||
/datum/alt_title/medical_practitioner
|
||||
title = JOB_ALT_MEDICAL_PRACTITIONER
|
||||
|
||||
/datum/alt_title/orderly
|
||||
title = JOB_ALT_ORDERLY
|
||||
title_blurb = "An " + JOB_ALT_ORDERLY + " acts as Medbay's general helping hand, assisting any doctor that might need some form of help, as well as handling manual \
|
||||
and dirty labor around the department."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse
|
||||
|
||||
/datum/alt_title/medical_contractor
|
||||
title = JOB_ALT_MEDICAL_CONTRACTOR
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_CONTRACTOR + " can be anything from a full-blown doctor to the likes of a nurse or orderly, but isn't directly employed by NT proper."
|
||||
|
||||
//////////////////////////////////
|
||||
// Chemist
|
||||
//////////////////////////////////
|
||||
@@ -102,6 +137,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_MEDICAL
|
||||
supervisors = "the " + JOB_CHIEF_MEDICAL_OFFICER
|
||||
selection_color = "#013D3B"
|
||||
economic_modifier = 5
|
||||
@@ -113,13 +149,17 @@
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/chemist
|
||||
job_description = "A " + JOB_CHEMIST + " produces and maintains a stock of basic to advanced chemicals for medical and occasionally research use. \
|
||||
They are likely to know the use and dangers of many lab-produced chemicals."
|
||||
alt_titles = list(JOB_ALT_PHARMACIST = /datum/alt_title/pharmacist)
|
||||
alt_titles = list(JOB_ALT_PHARMACIST = /datum/alt_title/pharmacist, JOB_ALT_PHARMACOLOGIST = /datum/alt_title/pharmacologist)
|
||||
|
||||
// Chemist Alt Titles
|
||||
/datum/alt_title/pharmacist
|
||||
title = JOB_ALT_PHARMACIST
|
||||
title_blurb = "A " + JOB_ALT_PHARMACIST + " focuses on the chemical needs of the Medical Department, and often offers to fill crew prescriptions at their discretion."
|
||||
|
||||
/datum/alt_title/pharmacologist
|
||||
title = JOB_ALT_PHARMACOLOGIST
|
||||
title_blurb = "A " + JOB_ALT_PHARMACOLOGIST + " focuses on the chemical needs of the Medical Department, primarily specializing in producing more advanced forms of medicine."
|
||||
|
||||
/* I'm commenting out Geneticist so you can't actually see it in the job menu, given that you can't play as one - Jon.
|
||||
//////////////////////////////////
|
||||
// Geneticist
|
||||
@@ -154,6 +194,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
pto_type = PTO_MEDICAL
|
||||
economic_modifier = 5
|
||||
supervisors = "the " + JOB_CHIEF_MEDICAL_OFFICER
|
||||
selection_color = "#013D3B"
|
||||
@@ -162,7 +203,7 @@
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/psychiatrist
|
||||
job_description = "A " + JOB_PSYCHIATRIST + " provides mental health services to crew members in need. They may also be called upon to determine whatever \
|
||||
ails the mentally unwell, frequently under Security supervision. They understand the effects of various psychoactive drugs."
|
||||
alt_titles = list(JOB_ALT_PSYCHOLOGIST = /datum/alt_title/psychologist)
|
||||
alt_titles = list(JOB_ALT_PSYCHOLOGIST = /datum/alt_title/psychologist, JOB_ALT_PSYCHOANALYST = /datum/alt_title/psychoanalyst, JOB_ALT_PSYCHOTHERAPIST = /datum/alt_title/psychotherapist)
|
||||
banned_job_species = list(SPECIES_PROMETHEAN, SPECIES_DIONA)
|
||||
|
||||
//Psychiatrist Alt Titles
|
||||
@@ -172,6 +213,18 @@
|
||||
called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||
|
||||
/datum/alt_title/psychoanalyst
|
||||
title = JOB_ALT_PSYCHOANALYST
|
||||
title_blurb = "A " + JOB_ALT_PSYCHOANALYST + " provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \
|
||||
called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||
|
||||
/datum/alt_title/psychotherapist
|
||||
title = JOB_ALT_PSYCHOTHERAPIST
|
||||
title_blurb = "A " + JOB_ALT_PSYCHOTHERAPIST + " provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \
|
||||
called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||
|
||||
//////////////////////////////////
|
||||
// Paramedic
|
||||
//////////////////////////////////
|
||||
@@ -181,8 +234,9 @@
|
||||
departments = list(DEPARTMENT_MEDICAL)
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_MEDICAL
|
||||
supervisors = "the " + JOB_CHIEF_MEDICAL_OFFICER
|
||||
selection_color = "#013D3B"
|
||||
economic_modifier = 4
|
||||
@@ -191,14 +245,26 @@
|
||||
outfit_type = /decl/hierarchy/outfit/job/medical/paramedic
|
||||
job_description = "A " + JOB_PARAMEDIC + " is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their own. \
|
||||
They may also be called upon to keep patients stable when Medical is busy or understaffed."
|
||||
alt_titles = list(JOB_ALT_EMERGENCY_MEDICAL_TECHNICIAN = /datum/alt_title/emt)
|
||||
alt_titles = list(JOB_ALT_EMERGENCY_MEDICAL_TECHNICIAN = /datum/alt_title/emt, JOB_ALT_MEDICAL_RESPONDER = /datum/alt_title/medical_responder, JOB_ALT_SEARCH_AND_RESCUE = /datum/alt_title/sar)
|
||||
banned_job_species = list(SPECIES_DIONA)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
|
||||
/datum/job/paramedic/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
// Paramedic Alt Titles
|
||||
/datum/alt_title/emt
|
||||
title = JOB_ALT_EMERGENCY_MEDICAL_TECHNICIAN
|
||||
title_blurb = "An " + JOB_ALT_EMERGENCY_MEDICAL_TECHNICIAN + " is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \
|
||||
own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt
|
||||
|
||||
/datum/alt_title/medical_responder
|
||||
title = JOB_ALT_MEDICAL_RESPONDER
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_RESPONDER + " is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \
|
||||
own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt
|
||||
|
||||
/datum/alt_title/sar
|
||||
title = JOB_ALT_SEARCH_AND_RESCUE
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
/datum/job/cmo
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_MEDICAL
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels, access_gateway)
|
||||
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_genetics, access_heads,
|
||||
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
|
||||
access_keycard_auth, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels, access_gateway)
|
||||
alt_titles = list(JOB_ALT_CHIEF_PHYSICIAN = /datum/alt_title/chief_physician, JOB_ALT_MEDICAL_DIRECTOR = /datum/alt_title/medical_director, JOB_ALT_HEALTHCARE_MANAGER = /datum/alt_title/healthcare_manager)
|
||||
|
||||
/datum/alt_title/chief_physician
|
||||
title = JOB_ALT_CHIEF_PHYSICIAN
|
||||
|
||||
/datum/alt_title/medical_director
|
||||
title = JOB_ALT_MEDICAL_DIRECTOR
|
||||
|
||||
/datum/alt_title/healthcare_manager
|
||||
title = JOB_ALT_HEALTHCARE_MANAGER
|
||||
|
||||
/datum/job/cmo/get_request_reasons()
|
||||
return list("Surgery pending", "Viral outbreak", "Training crew", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/doctor
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_MEDICAL
|
||||
alt_titles = list(JOB_ALT_PHYSICIAN = /datum/alt_title/physician, JOB_ALT_MEDICAL_PRACTITIONER = /datum/alt_title/medical_practitioner, JOB_ALT_SURGEON = /datum/alt_title/surgeon,
|
||||
JOB_ALT_EMERGENCY_PHYSICIAN = /datum/alt_title/emergency_physician, JOB_ALT_NURSE = /datum/alt_title/nurse, JOB_ALT_ORDERLY = /datum/alt_title/orderly,
|
||||
JOB_ALT_VIROLOGIST = /datum/alt_title/virologist, JOB_ALT_MEDICAL_CONTRACTOR = /datum/alt_title/medical_contractor)
|
||||
|
||||
/datum/alt_title/physician
|
||||
title = JOB_ALT_PHYSICIAN
|
||||
|
||||
/datum/alt_title/medical_practitioner
|
||||
title = JOB_ALT_MEDICAL_PRACTITIONER
|
||||
|
||||
/datum/alt_title/orderly
|
||||
title = JOB_ALT_ORDERLY
|
||||
title_blurb = "An " + JOB_ALT_ORDERLY + " acts as Medbay's general helping hand, assisting any doctor that might need some form of help, as well as handling manual \
|
||||
and dirty labor around the department."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse
|
||||
|
||||
/datum/alt_title/medical_contractor
|
||||
title = JOB_ALT_MEDICAL_CONTRACTOR
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_CONTRACTOR + " can be anything from a full-blown doctor to the likes of a nurse or orderly, but isn't directly employed by NT proper."
|
||||
|
||||
/datum/job/doctor/get_request_reasons()
|
||||
return list("Surgery pending", "Viral outbreak", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/chemist
|
||||
pto_type = PTO_MEDICAL
|
||||
alt_titles = list(JOB_ALT_PHARMACIST = /datum/alt_title/pharmacist, JOB_ALT_PHARMACOLOGIST = /datum/alt_title/pharmacologist)
|
||||
|
||||
/datum/alt_title/pharmacologist
|
||||
title = JOB_ALT_PHARMACOLOGIST
|
||||
title_blurb = "A " + JOB_ALT_PHARMACOLOGIST + " focuses on the chemical needs of the Medical Department, primarily specializing in producing more advanced forms of medicine."
|
||||
|
||||
|
||||
/datum/job/psychiatrist
|
||||
pto_type = PTO_MEDICAL
|
||||
alt_titles = list(JOB_ALT_PSYCHOLOGIST = /datum/alt_title/psychologist, JOB_ALT_PSYCHOANALYST = /datum/alt_title/psychoanalyst, JOB_ALT_PSYCHOTHERAPIST = /datum/alt_title/psychotherapist)
|
||||
|
||||
/datum/alt_title/psychoanalyst
|
||||
title = JOB_ALT_PSYCHOANALYST
|
||||
title_blurb = "A " + JOB_ALT_PSYCHOANALYST + " provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \
|
||||
called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||
|
||||
/datum/alt_title/psychotherapist
|
||||
title = JOB_ALT_PSYCHOTHERAPIST
|
||||
title_blurb = "A " + JOB_ALT_PSYCHOTHERAPIST + " provides mental health services to crew members in need, focusing more on therapy than medication. They may also be \
|
||||
called upon to determine whatever ails the mentally unwell, frequently under Security supervision."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/psychiatrist/psychologist
|
||||
|
||||
|
||||
/datum/job/paramedic
|
||||
pto_type = PTO_MEDICAL
|
||||
alt_titles = list(JOB_ALT_EMERGENCY_MEDICAL_TECHNICIAN = /datum/alt_title/emt, JOB_ALT_MEDICAL_RESPONDER = /datum/alt_title/medical_responder, JOB_ALT_SEARCH_AND_RESCUE = /datum/alt_title/sar)
|
||||
total_positions = 3
|
||||
spawn_positions = 3
|
||||
|
||||
/datum/alt_title/medical_responder
|
||||
title = JOB_ALT_MEDICAL_RESPONDER
|
||||
title_blurb = "A " + JOB_ALT_MEDICAL_RESPONDER + " is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \
|
||||
own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training."
|
||||
title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt
|
||||
|
||||
/datum/alt_title/sar
|
||||
title = JOB_ALT_SEARCH_AND_RESCUE
|
||||
|
||||
/datum/job/paramedic/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
+118
-16
@@ -16,13 +16,13 @@
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 15
|
||||
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter, access_sec_doors,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network)
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter, access_sec_doors,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_network)
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
|
||||
minimum_character_age = 25
|
||||
minimal_player_age = 14
|
||||
@@ -30,19 +30,34 @@
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_UNATHI = 140, "mechanical" = 20, SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital")
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_SCIENCE
|
||||
dept_time_required = 60
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/rd
|
||||
job_description = "The " + JOB_RESEARCH_DIRECTOR + " manages and maintains the Research department. They are required to ensure the safety of the entire crew, \
|
||||
at least with regards to anything occurring in the Research department, and to inform the crew of any disruptions that \
|
||||
might originate from Research. The " + JOB_RESEARCH_DIRECTOR + " often has at least passing knowledge of most of the Research department, but \
|
||||
are encouraged to allow their staff to perform their own duties."
|
||||
alt_titles = list(JOB_ALT_RESEARCH_SUPERVISOR = /datum/alt_title/research_supervisor)
|
||||
alt_titles = list(JOB_ALT_RESEARCH_SUPERVISOR = /datum/alt_title/research_supervisor, JOB_ALT_RESEARCH_MANAGER = /datum/alt_title/research_manager,
|
||||
JOB_ALT_HEAD_OF_DEVELOPMENT = /datum/alt_title/head_of_development,JOB_ALT_HEAD_SCIENTIST = /datum/alt_title/head_scientist)
|
||||
|
||||
/datum/job/rd/get_request_reasons()
|
||||
return list("Repairs needed", "Training crew", "Assembling expedition team")
|
||||
|
||||
// " + JOB_RESEARCH_DIRECTOR + " Alt Titles
|
||||
/datum/alt_title/research_supervisor
|
||||
title = JOB_ALT_RESEARCH_SUPERVISOR
|
||||
|
||||
/datum/alt_title/research_manager
|
||||
title = JOB_ALT_RESEARCH_MANAGER
|
||||
|
||||
/datum/alt_title/head_of_development
|
||||
title = JOB_ALT_HEAD_OF_DEVELOPMENT
|
||||
|
||||
/datum/alt_title/head_scientist
|
||||
title = JOB_ALT_HEAD_SCIENTIST
|
||||
|
||||
//////////////////////////////////
|
||||
// Scientist
|
||||
//////////////////////////////////
|
||||
@@ -53,11 +68,12 @@
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 5
|
||||
spawn_positions = 3
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_SCIENCE
|
||||
supervisors = "the " + JOB_RESEARCH_DIRECTOR
|
||||
selection_color = "#633D63"
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch)
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch, access_xenobotany)
|
||||
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch)
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 2)
|
||||
banned_job_species = list("digital")
|
||||
@@ -68,8 +84,12 @@
|
||||
job_description = "A " + JOB_SCIENTIST + " is a generalist working in the Research department, with general knowledge of the scientific process, as well as \
|
||||
the principles and requirements of Research and Development. They may also formulate experiments of their own devising, if \
|
||||
they find an appropriate topic."
|
||||
alt_titles = list(JOB_ALT_XENOARCHAEOLOGIST = /datum/alt_title/xenoarch, JOB_ALT_ANOMALIST = /datum/alt_title/anomalist, \
|
||||
JOB_ALT_PHORON_RESEARCHER = /datum/alt_title/phoron_research)
|
||||
alt_titles = list(JOB_ALT_RESEARCHER = /datum/alt_title/researcher, JOB_ALT_LAB_ASSISTANT = /datum/alt_title/lab_assistant, JOB_ALT_XENOARCHAEOLOGIST = /datum/alt_title/xenoarch,
|
||||
JOB_ALT_XENOPALEONTOLOGIST = /datum/alt_title/xenopaleontologist, JOB_ALT_ANOMALIST = /datum/alt_title/anomalist, JOB_ALT_PHORON_RESEARCHER = /datum/alt_title/phoron_research,
|
||||
JOB_ALT_GAS_PHYSICIST = /datum/alt_title/gas_physicist, JOB_ALT_CIRCUIT_DESIGNER = /datum/alt_title/circuit_designer, JOB_ALT_CIRCUIT_PROGRAMMER = /datum/alt_title/circuit_programmer)
|
||||
|
||||
/datum/job/scientist/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
// Scientist Alt Titles
|
||||
/datum/alt_title/xenoarch
|
||||
@@ -88,6 +108,35 @@
|
||||
Many " + JOB_ALT_PHORON_RESEARCHER + "s are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \
|
||||
of working with the substance in that state."
|
||||
|
||||
/datum/alt_title/researcher
|
||||
title = JOB_ALT_RESEARCHER
|
||||
|
||||
/datum/alt_title/lab_assistant
|
||||
title = JOB_ALT_LAB_ASSISTANT
|
||||
title_blurb = "A " + JOB_ALT_LAB_ASSISTANT + " is a lower-level member of research staff, whose main purpose is to help scientists with their specialized work in more menial fashion, while also \
|
||||
learning the specializations in process."
|
||||
|
||||
/datum/alt_title/xenopaleontologist
|
||||
title = JOB_ALT_XENOPALEONTOLOGIST
|
||||
title_blurb = "A " + JOB_ALT_XENOPALEONTOLOGIST + " enters digsites in search of fossils and other ancient remants of alien life. These digsites are frequently in vacuum or other inhospitable \
|
||||
locations, and as such a " + JOB_ALT_XENOPALEONTOLOGIST + " should be prepared to handle hostile evironmental conditions."
|
||||
|
||||
/datum/alt_title/gas_physicist
|
||||
title = JOB_ALT_GAS_PHYSICIST
|
||||
title_blurb = "A " + JOB_ALT_GAS_PHYSICIST + " is a specialist in various practical applications of gasses, but currently focuses their attention on phoron, and has knowledge of its practical uses and dangers. \
|
||||
Many " + JOB_ALT_GAS_PHYSICIST + "s are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \
|
||||
of working with the substance in that state."
|
||||
|
||||
/datum/alt_title/circuit_designer
|
||||
title = JOB_ALT_CIRCUIT_DESIGNER
|
||||
title_blurb = "A " + JOB_ALT_CIRCUIT_DESIGNER + " is a " + JOB_SCIENTIST + " whose expertise is working with integrated circuits. They are familar with the workings and programming of those devices. \
|
||||
They work to create various useful devices using the capabilities of integrated circuitry."
|
||||
|
||||
/datum/alt_title/circuit_programmer
|
||||
title = JOB_ALT_CIRCUIT_PROGRAMMER
|
||||
title_blurb = "A " + JOB_ALT_CIRCUIT_PROGRAMMER + " is a " + JOB_SCIENTIST + " whose expertise is working with integrated circuits. They are familar with the workings and programming of those devices. \
|
||||
They work to create various useful devices using the capabilities of integrated circuitry."
|
||||
|
||||
//////////////////////////////////
|
||||
// Xenobiologist
|
||||
//////////////////////////////////
|
||||
@@ -98,7 +147,8 @@
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_SCIENCE
|
||||
supervisors = "the " + JOB_RESEARCH_DIRECTOR
|
||||
selection_color = "#633D63"
|
||||
economic_modifier = 7
|
||||
@@ -112,15 +162,21 @@
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
|
||||
job_description = "A " + JOB_XENOBIOLOGIST + " studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \
|
||||
from the byproducts of these lifeforms, and their main subject at present is the Giant Slime."
|
||||
/*VR edit start
|
||||
alt_titles = list(JOB_XENOBOTANIST = /datum/alt_title/xenobot)
|
||||
|
||||
Xenibiologist Alt Titles
|
||||
alt_titles = list(JOB_ALT_XENOZOOLOGIST = /datum/alt_title/xenozoologist, JOB_ALT_XENOANTHROPOLOGIST = /datum/alt_title/xenoanthropologist)
|
||||
|
||||
// Xenobiologist Alt Titles
|
||||
/datum/alt_title/xenobot
|
||||
title = JOB_XENOBOTANIST
|
||||
title_blurb = "A " + JOB_XENOBOTANIST + " grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \
|
||||
is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew."
|
||||
VR edit end*/
|
||||
|
||||
/datum/alt_title/xenozoologist
|
||||
title = JOB_ALT_XENOZOOLOGIST
|
||||
|
||||
/datum/alt_title/xenoanthropologist
|
||||
title = JOB_ALT_XENOANTHROPOLOGIST
|
||||
title_blurb = JOB_ALT_XENOANTHROPOLOGIST + " still heavily focuses their study on alien lifeforms, but their specialty leans more towards fellow sapient beings than simple animals."
|
||||
|
||||
//////////////////////////////////
|
||||
// Roboticist
|
||||
@@ -131,8 +187,9 @@ VR edit end*/
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
total_positions = 3
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_SCIENCE
|
||||
supervisors = "the " + JOB_RESEARCH_DIRECTOR
|
||||
selection_color = "#633D63"
|
||||
economic_modifier = 5
|
||||
@@ -145,7 +202,14 @@ VR edit end*/
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/roboticist
|
||||
job_description = "A " + JOB_ROBOTICIST + " maintains and repairs the station's synthetics, including crew with prosthetic limbs. \
|
||||
They can also assist the station by producing simple robots and even pilotable exosuits."
|
||||
alt_titles = list(JOB_ALT_BIOMECHANICAL_ENGINEER = /datum/alt_title/biomech, JOB_ALT_MECHATRONIC_ENGINEER = /datum/alt_title/mech_tech)
|
||||
alt_titles = list(
|
||||
JOB_ALT_ASSEMBLY_TECHNICIAN = /datum/alt_title/assembly_tech,
|
||||
JOB_ALT_BIOMECHANICAL_ENGINEER = /datum/alt_title/biomech,
|
||||
JOB_ALT_MECHATRONIC_ENGINEER = /datum/alt_title/mech_tech,
|
||||
JOB_ALT_SOFTWARE_ENGINEER = /datum/alt_title/software_engi)
|
||||
|
||||
/datum/job/roboticist/get_request_reasons()
|
||||
return list("Repairs needed")
|
||||
|
||||
// Roboticist Alt Titles
|
||||
/datum/alt_title/biomech
|
||||
@@ -157,3 +221,41 @@ VR edit end*/
|
||||
title = JOB_ALT_MECHATRONIC_ENGINEER
|
||||
title_blurb = "A " + JOB_ALT_MECHATRONIC_ENGINEER + " focuses on the construction and maintenance of Exosuits, and should be well versed in their use. \
|
||||
They may also be called upon to work on synthetics and prosthetics, if needed."
|
||||
|
||||
/datum/alt_title/software_engi
|
||||
title = JOB_ALT_SOFTWARE_ENGINEER
|
||||
title_blurb = "A " + JOB_ALT_SOFTWARE_ENGINEER + " specializes in working with software and firmware. They also often deal with integrated circuits."
|
||||
|
||||
/datum/alt_title/assembly_tech
|
||||
title = JOB_ALT_ASSEMBLY_TECHNICIAN
|
||||
|
||||
//////////////////////////////////
|
||||
// Xenobotanist
|
||||
//////////////////////////////////
|
||||
/datum/job/xenobotanist
|
||||
title = JOB_XENOBOTANIST
|
||||
flag = XENOBOTANIST
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the " + JOB_RESEARCH_DIRECTOR
|
||||
selection_color = "#633D63"
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobotany, access_hydroponics)
|
||||
minimal_access = list(access_research, access_xenobotany, access_hydroponics, access_tox_storage)
|
||||
pto_type = PTO_SCIENCE
|
||||
|
||||
minimal_player_age = 14
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
|
||||
job_description = "A " + JOB_XENOBOTANIST + " grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \
|
||||
are both safe and beneficial to the station, they may choose to introduce it to the rest of the crew."
|
||||
alt_titles = list(JOB_ALT_XENOHYDROPONICIST = /datum/alt_title/xenohydroponicist, JOB_ALT_XENOFLORIST = /datum/alt_title/xenoflorist)
|
||||
|
||||
/datum/alt_title/xenoflorist
|
||||
title = JOB_ALT_XENOFLORIST
|
||||
|
||||
/datum/alt_title/xenohydroponicist
|
||||
title = JOB_ALT_XENOHYDROPONICIST
|
||||
@@ -1,134 +0,0 @@
|
||||
/datum/job/rd
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_SCIENCE
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue,
|
||||
access_tox_storage, access_teleporter,
|
||||
access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage,
|
||||
access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch, access_eva, access_network, access_xenobotany)
|
||||
alt_titles = list(JOB_ALT_RESEARCH_SUPERVISOR = /datum/alt_title/research_supervisor, JOB_ALT_RESEARCH_MANAGER = /datum/alt_title/research_manager,
|
||||
JOB_ALT_HEAD_OF_DEVELOPMENT = /datum/alt_title/head_of_development,JOB_ALT_HEAD_SCIENTIST = /datum/alt_title/head_scientist)
|
||||
|
||||
/datum/alt_title/research_manager
|
||||
title = JOB_ALT_RESEARCH_MANAGER
|
||||
|
||||
/datum/alt_title/head_of_development
|
||||
title = JOB_ALT_HEAD_OF_DEVELOPMENT
|
||||
|
||||
/datum/alt_title/head_scientist
|
||||
title = JOB_ALT_HEAD_SCIENTIST
|
||||
|
||||
/datum/job/rd/get_request_reasons()
|
||||
return list("Repairs needed", "Training crew", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/scientist
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_SCIENCE
|
||||
alt_titles = list(JOB_ALT_RESEARCHER = /datum/alt_title/researcher, JOB_ALT_LAB_ASSISTANT = /datum/alt_title/lab_assistant, JOB_ALT_XENOARCHAEOLOGIST = /datum/alt_title/xenoarch,
|
||||
JOB_ALT_XENOPALEONTOLOGIST = /datum/alt_title/xenopaleontologist, JOB_ALT_ANOMALIST = /datum/alt_title/anomalist, JOB_ALT_PHORON_RESEARCHER = /datum/alt_title/phoron_research,
|
||||
JOB_ALT_GAS_PHYSICIST = /datum/alt_title/gas_physicist, JOB_ALT_CIRCUIT_DESIGNER = /datum/alt_title/circuit_designer, JOB_ALT_CIRCUIT_PROGRAMMER = /datum/alt_title/circuit_programmer)
|
||||
|
||||
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_xenoarch, access_xenobotany)
|
||||
minimal_access = list(access_tox, access_tox_storage, access_research, access_xenoarch) // Unchanged (for now?), mostly here for reference
|
||||
|
||||
/datum/alt_title/researcher
|
||||
title = JOB_ALT_RESEARCHER
|
||||
|
||||
/datum/alt_title/lab_assistant
|
||||
title = JOB_ALT_LAB_ASSISTANT
|
||||
title_blurb = "A " + JOB_ALT_LAB_ASSISTANT + " is a lower-level member of research staff, whose main purpose is to help scientists with their specialized work in more menial fashion, while also \
|
||||
learning the specializations in process."
|
||||
|
||||
/datum/alt_title/xenopaleontologist
|
||||
title = JOB_ALT_XENOPALEONTOLOGIST
|
||||
title_blurb = "A " + JOB_ALT_XENOPALEONTOLOGIST + " enters digsites in search of fossils and other ancient remants of alien life. These digsites are frequently in vacuum or other inhospitable \
|
||||
locations, and as such a " + JOB_ALT_XENOPALEONTOLOGIST + " should be prepared to handle hostile evironmental conditions."
|
||||
|
||||
/datum/alt_title/gas_physicist
|
||||
title = JOB_ALT_GAS_PHYSICIST
|
||||
title_blurb = "A " + JOB_ALT_GAS_PHYSICIST + " is a specialist in various practical applications of gasses, but currently focuses their attention on phoron, and has knowledge of its practical uses and dangers. \
|
||||
Many " + JOB_ALT_GAS_PHYSICIST + "s are interested in the combustability and explosive properties of gaseous phoron, as well as the specific hazards \
|
||||
of working with the substance in that state."
|
||||
|
||||
/datum/alt_title/circuit_designer
|
||||
title = JOB_ALT_CIRCUIT_DESIGNER
|
||||
title_blurb = "A " + JOB_ALT_CIRCUIT_DESIGNER + " is a " + JOB_SCIENTIST + " whose expertise is working with integrated circuits. They are familar with the workings and programming of those devices. \
|
||||
They work to create various useful devices using the capabilities of integrated circuitry."
|
||||
|
||||
/datum/alt_title/circuit_programmer
|
||||
title = JOB_ALT_CIRCUIT_PROGRAMMER
|
||||
title_blurb = "A " + JOB_ALT_CIRCUIT_PROGRAMMER + " is a " + JOB_SCIENTIST + " whose expertise is working with integrated circuits. They are familar with the workings and programming of those devices. \
|
||||
They work to create various useful devices using the capabilities of integrated circuitry."
|
||||
|
||||
/datum/job/scientist/get_request_reasons()
|
||||
return list("Assembling expedition team")
|
||||
|
||||
/datum/job/xenobiologist
|
||||
spawn_positions = 3
|
||||
pto_type = PTO_SCIENCE
|
||||
alt_titles = list(JOB_ALT_XENOZOOLOGIST = /datum/alt_title/xenozoologist, JOB_ALT_XENOANTHROPOLOGIST = /datum/alt_title/xenoanthropologist)
|
||||
|
||||
/datum/alt_title/xenozoologist
|
||||
title = JOB_ALT_XENOZOOLOGIST
|
||||
|
||||
/datum/alt_title/xenoanthropologist
|
||||
title = JOB_ALT_XENOANTHROPOLOGIST
|
||||
title_blurb = JOB_ALT_XENOANTHROPOLOGIST + " still heavily focuses their study on alien lifeforms, but their specialty leans more towards fellow sapient beings than simple animals."
|
||||
|
||||
|
||||
/datum/job/roboticist
|
||||
total_positions = 3
|
||||
pto_type = PTO_SCIENCE
|
||||
alt_titles = list(
|
||||
JOB_ALT_ASSEMBLY_TECHNICIAN = /datum/alt_title/assembly_tech,
|
||||
JOB_ALT_BIOMECHANICAL_ENGINEER = /datum/alt_title/biomech,
|
||||
JOB_ALT_MECHATRONIC_ENGINEER = /datum/alt_title/mech_tech,
|
||||
JOB_ALT_SOFTWARE_ENGINEER = /datum/alt_title/software_engi)
|
||||
|
||||
/datum/alt_title/software_engi
|
||||
title = JOB_ALT_SOFTWARE_ENGINEER
|
||||
title_blurb = "A " + JOB_ALT_SOFTWARE_ENGINEER + " specializes in working with software and firmware. They also often deal with integrated circuits."
|
||||
|
||||
/datum/alt_title/assembly_tech
|
||||
title = JOB_ALT_ASSEMBLY_TECHNICIAN
|
||||
|
||||
/datum/job/roboticist/get_request_reasons()
|
||||
return list("Repairs needed")
|
||||
|
||||
//////////////////////////////////
|
||||
// Xenobotanist
|
||||
//////////////////////////////////
|
||||
/datum/job/xenobotanist
|
||||
title = JOB_XENOBOTANIST
|
||||
flag = XENOBOTANIST
|
||||
departments = list(DEPARTMENT_RESEARCH)
|
||||
department_flag = MEDSCI
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the " + JOB_RESEARCH_DIRECTOR
|
||||
selection_color = "#633D63"
|
||||
economic_modifier = 7
|
||||
access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobotany, access_hydroponics)
|
||||
minimal_access = list(access_research, access_xenobotany, access_hydroponics, access_tox_storage)
|
||||
pto_type = PTO_SCIENCE
|
||||
|
||||
minimal_player_age = 14
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist
|
||||
job_description = "A " + JOB_XENOBOTANIST + " grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \
|
||||
are both safe and beneficial to the station, they may choose to introduce it to the rest of the crew."
|
||||
alt_titles = list(JOB_ALT_XENOHYDROPONICIST = /datum/alt_title/xenohydroponicist, JOB_ALT_XENOFLORIST = /datum/alt_title/xenoflorist)
|
||||
|
||||
/datum/alt_title/xenoflorist
|
||||
title = JOB_ALT_XENOFLORIST
|
||||
|
||||
/datum/alt_title/xenohydroponicist
|
||||
title = JOB_ALT_XENOHYDROPONICIST
|
||||
@@ -16,26 +16,31 @@
|
||||
req_admin_notify = 1
|
||||
economic_modifier = 10
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_construction,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_construction,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
minimum_character_age = 25
|
||||
min_age_by_species = list(SPECIES_HUMAN_VATBORN = 14)
|
||||
minimal_player_age = 14
|
||||
ideal_character_age = 50
|
||||
ideal_age_by_species = list(SPECIES_HUMAN_VATBORN = 20)
|
||||
banned_job_species = list(SPECIES_TESHARI, SPECIES_DIONA, SPECIES_PROMETHEAN, SPECIES_ZADDAT, "digital", SPECIES_UNATHI, "mechanical")
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_SECURITY
|
||||
dept_time_required = 60
|
||||
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/hos
|
||||
job_description = " The " + JOB_HEAD_OF_SECURITY + " manages the Security Department, keeping the station safe and making sure the rules are followed. They are expected to \
|
||||
keep the other Department Heads, and the rest of the crew, aware of developing situations that may be a threat. If necessary, the HoS may \
|
||||
perform the duties of absent Security roles, such as distributing gear from the Armory."
|
||||
alt_titles = list(JOB_ALT_SECURITY_COMMANDER = /datum/alt_title/sec_commander, JOB_ALT_CHIEF_OF_SECURITY = /datum/alt_title/sec_chief)
|
||||
alt_titles = list(JOB_ALT_SECURITY_COMMANDER = /datum/alt_title/sec_commander, JOB_ALT_CHIEF_OF_SECURITY = /datum/alt_title/sec_chief, JOB_ALT_SECURITY_MANAGER = /datum/alt_title/security_manager)
|
||||
|
||||
/datum/job/hos/get_request_reasons()
|
||||
return list("Wildlife management", "Forensic investigation", "Training crew", "Assembling expedition team")
|
||||
|
||||
// Head of Security Alt Titles
|
||||
/datum/alt_title/sec_commander
|
||||
@@ -44,6 +49,9 @@
|
||||
/datum/alt_title/sec_chief
|
||||
title = JOB_ALT_CHIEF_OF_SECURITY
|
||||
|
||||
/datum/alt_title/security_manager
|
||||
title = JOB_ALT_SECURITY_MANAGER
|
||||
|
||||
//////////////////////////////////
|
||||
// Warden
|
||||
//////////////////////////////////
|
||||
@@ -59,17 +67,32 @@
|
||||
supervisors = "the " + JOB_HEAD_OF_SECURITY
|
||||
selection_color = "#601C1C"
|
||||
economic_modifier = 5
|
||||
pto_type = PTO_SECURITY
|
||||
dept_time_required = 20
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||
minimal_player_age = 5
|
||||
banned_job_species = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN, SPECIES_TESHARI, SPECIES_DIONA)
|
||||
|
||||
alt_titles = list(JOB_ALT_BRIG_SENTRY = /datum/alt_title/brig_sentry, JOB_ALT_ARMORY_SUPERINTENDENT = /datum/alt_title/armory_superintendent, JOB_ALT_MASTERATARMS = /datum/alt_title/master_at_arms)
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/warden
|
||||
job_description = "The " + JOB_WARDEN + " watches over the physical Security Department, making sure the Brig and Armoury are secure and in order at all times. They oversee \
|
||||
prisoners that have been processed and brigged, and are responsible for their well being. The " + JOB_WARDEN + " is also in charge of distributing \
|
||||
Armoury gear in a crisis, and retrieving it when the crisis has passed. In an emergency, the " + JOB_WARDEN + " may be called upon to direct the \
|
||||
Security Department as a whole."
|
||||
|
||||
/datum/job/warden/get_request_reasons()
|
||||
return list("Wildlife management")
|
||||
|
||||
//Warden Alt Titles
|
||||
/datum/alt_title/brig_sentry
|
||||
title = JOB_ALT_BRIG_SENTRY
|
||||
|
||||
/datum/alt_title/armory_superintendent
|
||||
title = JOB_ALT_ARMORY_SUPERINTENDENT
|
||||
|
||||
/datum/alt_title/master_at_arms
|
||||
title = JOB_ALT_MASTERATARMS
|
||||
|
||||
//////////////////////////////////
|
||||
// Detective
|
||||
//////////////////////////////////
|
||||
@@ -81,6 +104,7 @@
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_SECURITY
|
||||
supervisors = "the " + JOB_HEAD_OF_SECURITY
|
||||
selection_color = "#601C1C"
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks, access_brig) //Vorestation edit - access_brig
|
||||
@@ -92,7 +116,10 @@
|
||||
outfit_type = /decl/hierarchy/outfit/job/security/detective
|
||||
job_description = "A " + JOB_DETECTIVE + " works to help Security find criminals who have not properly been identified, through interviews and forensic work. \
|
||||
For crimes only witnessed after the fact, or those with no survivors, they attempt to piece together what they can from pure evidence."
|
||||
alt_titles = list(JOB_ALT_FORENSIC_TECHNICIAN = /datum/alt_title/forensic_tech)
|
||||
alt_titles = list(JOB_ALT_INVESTIGATOR = /datum/alt_title/investigator, JOB_ALT_SECURITY_INSPECTOR = /datum/alt_title/security_inspector, JOB_ALT_FORENSIC_TECHNICIAN = /datum/alt_title/forensic_tech)
|
||||
|
||||
/datum/job/detective/get_request_reasons()
|
||||
return list("Forensic investigation")
|
||||
|
||||
// Detective Alt Titles
|
||||
/datum/alt_title/forensic_tech
|
||||
@@ -100,6 +127,12 @@
|
||||
title_blurb = "A " + JOB_ALT_FORENSIC_TECHNICIAN + " works more with hard evidence and labwork than a " + JOB_DETECTIVE + ", but they share the purpose of solving crimes."
|
||||
title_outfit = /decl/hierarchy/outfit/job/security/detective/forensic
|
||||
|
||||
/datum/alt_title/investigator
|
||||
title = JOB_ALT_INVESTIGATOR
|
||||
|
||||
/datum/alt_title/security_inspector
|
||||
title = JOB_ALT_SECURITY_INSPECTOR
|
||||
|
||||
//////////////////////////////////
|
||||
// Security Officer
|
||||
//////////////////////////////////
|
||||
@@ -109,8 +142,9 @@
|
||||
departments = list(DEPARTMENT_SECURITY)
|
||||
department_flag = ENGSEC
|
||||
faction = FACTION_STATION
|
||||
total_positions = 4
|
||||
spawn_positions = 4
|
||||
total_positions = 5
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_SECURITY
|
||||
supervisors = "the " + JOB_HEAD_OF_SECURITY
|
||||
selection_color = "#601C1C"
|
||||
economic_modifier = 4
|
||||
@@ -123,13 +157,29 @@
|
||||
job_description = "A " + JOB_SECURITY_OFFICER + " is concerned with maintaining the safety and security of the station as a whole, dealing with external threats and \
|
||||
apprehending criminals. A " + JOB_SECURITY_OFFICER + " is responsible for the health, safety, and processing of any prisoner they arrest. \
|
||||
No one is above the Law, not Security or Command."
|
||||
alt_titles = list(JOB_ALT_JUNIOR_OFFICER = /datum/alt_title/junior_officer)
|
||||
alt_titles = list(JOB_ALT_PATROL_OFFICER = /datum/alt_title/patrol_officer, JOB_ALT_SECURITY_GUARD = /datum/alt_title/security_guard,
|
||||
JOB_ALT_SECURITY_DEPUTY = /datum/alt_title/security_guard, JOB_ALT_JUNIOR_OFFICER = /datum/alt_title/junior_officer, JOB_ALT_SECURITY_CONTRACTOR = /datum/alt_title/security_contractor)
|
||||
|
||||
min_age_by_species = list(SPECIES_PROMETHEAN = 3)
|
||||
|
||||
/datum/job/officer/get_request_reasons()
|
||||
return list("Wildlife management", "Assembling expedition team")
|
||||
|
||||
// Security Officer Alt Titles
|
||||
/datum/alt_title/junior_officer
|
||||
title = JOB_ALT_JUNIOR_OFFICER
|
||||
title_blurb = "A " + JOB_ALT_JUNIOR_OFFICER + " is an inexperienced " + JOB_SECURITY_OFFICER + ". They likely have training, but not experience, and are frequently \
|
||||
paired off with a more senior co-worker. Junior Officers may also be expected to take over the boring duties of other Officers \
|
||||
including patrolling the station or maintaining specific posts."
|
||||
|
||||
/datum/alt_title/patrol_officer
|
||||
title = JOB_ALT_PATROL_OFFICER
|
||||
|
||||
/datum/alt_title/security_guard
|
||||
title = JOB_ALT_SECURITY_GUARD
|
||||
|
||||
/datum/alt_title/security_deputy
|
||||
title = JOB_ALT_SECURITY_DEPUTY
|
||||
|
||||
/datum/alt_title/security_contractor
|
||||
title = JOB_ALT_SECURITY_CONTRACTOR
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/datum/job/hos
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_SECURITY
|
||||
dept_time_required = 60
|
||||
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_construction,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_construction,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
alt_titles = list(JOB_ALT_SECURITY_COMMANDER = /datum/alt_title/sec_commander, JOB_ALT_CHIEF_OF_SECURITY = /datum/alt_title/sec_chief, JOB_ALT_SECURITY_MANAGER = /datum/alt_title/security_manager)
|
||||
|
||||
/datum/alt_title/security_manager
|
||||
title = JOB_ALT_SECURITY_MANAGER
|
||||
|
||||
/datum/job/hos/get_request_reasons()
|
||||
return list("Wildlife management", "Forensic investigation", "Training crew", "Assembling expedition team")
|
||||
|
||||
|
||||
/datum/job/warden
|
||||
pto_type = PTO_SECURITY
|
||||
dept_time_required = 20
|
||||
alt_titles = list(JOB_ALT_BRIG_SENTRY = /datum/alt_title/brig_sentry, JOB_ALT_ARMORY_SUPERINTENDENT = /datum/alt_title/armory_superintendent, JOB_ALT_MASTERATARMS = /datum/alt_title/master_at_arms)
|
||||
|
||||
/datum/alt_title/brig_sentry
|
||||
title = JOB_ALT_BRIG_SENTRY
|
||||
|
||||
/datum/alt_title/armory_superintendent
|
||||
title = JOB_ALT_ARMORY_SUPERINTENDENT
|
||||
|
||||
/datum/alt_title/master_at_arms
|
||||
title = JOB_ALT_MASTERATARMS
|
||||
|
||||
/datum/job/warden/get_request_reasons()
|
||||
return list("Wildlife management")
|
||||
|
||||
|
||||
/datum/job/detective
|
||||
pto_type = PTO_SECURITY
|
||||
alt_titles = list(JOB_ALT_INVESTIGATOR = /datum/alt_title/investigator, JOB_ALT_SECURITY_INSPECTOR = /datum/alt_title/security_inspector, JOB_ALT_FORENSIC_TECHNICIAN = /datum/alt_title/forensic_tech)
|
||||
|
||||
/datum/alt_title/investigator
|
||||
title = JOB_ALT_INVESTIGATOR
|
||||
|
||||
/datum/alt_title/security_inspector
|
||||
title = JOB_ALT_SECURITY_INSPECTOR
|
||||
|
||||
/datum/job/detective/get_request_reasons()
|
||||
return list("Forensic investigation")
|
||||
|
||||
|
||||
/datum/job/officer
|
||||
total_positions = 5
|
||||
spawn_positions = 5
|
||||
pto_type = PTO_SECURITY
|
||||
alt_titles = list(JOB_ALT_PATROL_OFFICER = /datum/alt_title/patrol_officer, JOB_ALT_SECURITY_GUARD = /datum/alt_title/security_guard,
|
||||
JOB_ALT_SECURITY_DEPUTY = /datum/alt_title/security_guard, JOB_ALT_JUNIOR_OFFICER = /datum/alt_title/junior_officer, JOB_ALT_SECURITY_CONTRACTOR = /datum/alt_title/security_contractor)
|
||||
|
||||
/datum/alt_title/patrol_officer
|
||||
title = JOB_ALT_PATROL_OFFICER
|
||||
|
||||
/datum/alt_title/security_guard
|
||||
title = JOB_ALT_SECURITY_GUARD
|
||||
|
||||
/datum/alt_title/security_deputy
|
||||
title = JOB_ALT_SECURITY_DEPUTY
|
||||
|
||||
/datum/alt_title/security_contractor
|
||||
title = JOB_ALT_SECURITY_CONTRACTOR
|
||||
|
||||
/datum/job/officer/get_request_reasons()
|
||||
return list("Wildlife management", "Assembling expedition team")
|
||||
@@ -19,6 +19,8 @@
|
||||
has_headset = FALSE
|
||||
assignable = FALSE
|
||||
mob_type = JOB_SILICON_AI
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
outfit_type = /decl/hierarchy/outfit/job/silicon/ai
|
||||
job_description = "The " + JOB_AI + " oversees the operation of the station and its crew, but has no real authority over them. \
|
||||
The " + JOB_AI + " is required to follow its Laws, and Lawbound Synthetics that are linked to it are expected to follow \
|
||||
@@ -46,8 +48,10 @@
|
||||
departments = list(DEPARTMENT_SYNTHETIC)
|
||||
department_flag = ENGSEC
|
||||
faction = FACTION_STATION
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
pto_type = PTO_CYBORG
|
||||
minimal_player_age = 3 //1 day is a little too little time
|
||||
total_positions = 4 //Along with one able to spawn later in the round.
|
||||
spawn_positions = 3 //Let's have 3 able to spawn in roundstart
|
||||
supervisors = "your Laws and the " + JOB_AI //Nodrak
|
||||
selection_color = "#254C25"
|
||||
minimal_player_age = 1
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/datum/job/ai
|
||||
disallow_jobhop = TRUE
|
||||
pto_type = PTO_CIVILIAN
|
||||
|
||||
/datum/job/cyborg
|
||||
pto_type = PTO_CYBORG
|
||||
minimal_player_age = 3 //1 day is a little too little time
|
||||
total_positions = 4 //Along with one able to spawn later in the round.
|
||||
spawn_positions = 3 //Let's have 3 able to spawn in roundstart
|
||||
@@ -22,7 +22,6 @@
|
||||
/obj/item/toy/redbutton = 2,
|
||||
/obj/item/toy/gnome = 2,
|
||||
/obj/item/toy/AI = 2,
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy = 2,
|
||||
/obj/item/storage/box/handcuffs/fake = 2,
|
||||
/obj/item/toy/nuke = 2,
|
||||
/obj/item/toy/minigibber = 2,
|
||||
|
||||
@@ -437,12 +437,12 @@
|
||||
return ..(M)
|
||||
|
||||
/obj/machinery/door/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master)
|
||||
if(!SSair)
|
||||
return 0
|
||||
|
||||
for(var/turf/simulated/turf in locs)
|
||||
update_heat_protection(turf)
|
||||
air_master.mark_for_update(turf)
|
||||
SSair.mark_for_update(turf)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -501,15 +501,15 @@
|
||||
|
||||
|
||||
update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
if(!SSair) return 0
|
||||
|
||||
var/turf/simulated/source = loc
|
||||
var/turf/simulated/destination = get_step(source,dir)
|
||||
|
||||
update_heat_protection(loc)
|
||||
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(destination)) air_master.tiles_to_update += destination
|
||||
if(istype(source)) SSair.tiles_to_update += source
|
||||
if(istype(destination)) SSair.tiles_to_update += destination
|
||||
return 1
|
||||
*/
|
||||
|
||||
|
||||
@@ -34,3 +34,5 @@
|
||||
/obj/effect/decal/cleanable/chemcoating/update_icon()
|
||||
..()
|
||||
color = reagents.get_color()
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon()
|
||||
color = "#FFFFFF"
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/xeno/up
|
||||
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1")
|
||||
@@ -30,4 +32,4 @@
|
||||
random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3")
|
||||
|
||||
/obj/effect/decal/cleanable/blood/xtracks
|
||||
basecolor = "#05EE05"
|
||||
basecolor = "#05EE05"
|
||||
|
||||
@@ -70,6 +70,8 @@ var/global/list/image/splatter_cache=list()
|
||||
else
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
if(perp.is_incorporeal())
|
||||
@@ -210,6 +212,7 @@ var/global/list/image/splatter_cache=list()
|
||||
icon = blood
|
||||
cut_overlays()
|
||||
add_overlay(giblets)
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
|
||||
color = "#FFFFFF"
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like
|
||||
return
|
||||
@@ -49,4 +51,4 @@
|
||||
|
||||
/obj/effect/decal/cleanable/blood/oil/streak
|
||||
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
||||
amount = 2
|
||||
amount = 2
|
||||
|
||||
@@ -142,6 +142,7 @@ var/global/list/image/fluidtrack_cache=list()
|
||||
stack[stack_idx]=track
|
||||
add_overlay(I)
|
||||
updatedtracks=0 // Clear our memory of updated tracks.
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/footprints
|
||||
name = "wet footprints"
|
||||
|
||||
@@ -12,7 +12,6 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
var/generic_filth = FALSE
|
||||
var/age = 0
|
||||
var/list/random_icon_states = list()
|
||||
var/obj/effect/decal/jan_hud/jan_icon = null
|
||||
|
||||
/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age)
|
||||
if(!isnull(_age))
|
||||
@@ -21,12 +20,11 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
src.icon_state = pick(src.random_icon_states)
|
||||
if(!mapload || !CONFIG_GET(flag/persistence_ignore_mapload))
|
||||
SSpersistence.track_value(src, /datum/persistent/filth)
|
||||
jan_icon = new/obj/effect/decal/jan_hud(src.loc)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/Destroy()
|
||||
SSpersistence.forget_value(src, /datum/persistent/filth)
|
||||
QDEL_NULL(jan_icon)
|
||||
. = ..()
|
||||
|
||||
/obj/effect/decal/cleanable/clean_blood(var/ignore = 0)
|
||||
@@ -40,13 +38,25 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for
|
||||
src.icon_state = pick(src.random_icon_states)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/jan_hud
|
||||
plane = PLANE_JANHUD
|
||||
layer = BELOW_MOB_LAYER
|
||||
vis_flags = VIS_HIDE
|
||||
persist_storable = FALSE
|
||||
icon = 'icons/mob/hud.dmi'
|
||||
mouse_opacity = 0
|
||||
|
||||
/obj/effect/decal/jan_hud/Initialize()
|
||||
src.icon_state = "janhud[rand(1,9)]"
|
||||
/obj/effect/decal/cleanable/update_icon()
|
||||
// Overrides should not inheret from this, and instead replace it entirely to match this in some form.
|
||||
// add_janitor_hud_overlay() does not pre-cut overlays, so cut_overlays() must be called first.
|
||||
// This is so it may be used with update_icon() overrides that use overlays, while adding the janitor overlay at the end.
|
||||
cut_overlays()
|
||||
add_janitor_hud_overlay()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/proc/add_janitor_hud_overlay()
|
||||
// This was original a seperate object that followed the grime, it got stuck in everything you can imagine!
|
||||
// It also likely doubled the memory use of every cleanable decal on station...
|
||||
var/image/hud = image('icons/mob/hud.dmi', src, "janhud[rand(1,9)]")
|
||||
hud.appearance_flags = (RESET_COLOR|PIXEL_SCALE|KEEP_APART)
|
||||
hud.plane = PLANE_JANHUD
|
||||
hud.layer = BELOW_MOB_LAYER
|
||||
hud.mouse_opacity = 0
|
||||
//HUD VARIANT: Allows the hud to show up with it's normal alpha, even if the 'dirty thing' it's attached to has a low alpha (ex: dirt). If you want to disable it, simply comment out the lines between the 'HUD VARIANT' tag!
|
||||
hud.appearance_flags = RESET_ALPHA
|
||||
hud.alpha = 255
|
||||
//HUD VARIANT end
|
||||
add_overlay(hud)
|
||||
|
||||
@@ -6,26 +6,39 @@
|
||||
layer = DIRTY_LAYER
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
var/art_type
|
||||
var/art_color
|
||||
var/art_shade
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(var/ml, main = "#FFFFFF",shade = "#000000",var/type = "rune", new_age = 0)
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
|
||||
// Persistence vars. Unused here but used downstream. If someone updates the persistance code, it's here.
|
||||
art_type = type
|
||||
art_color = main
|
||||
art_shade = shade
|
||||
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
|
||||
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1)
|
||||
. = ..(ml, new_age) // mapload, age
|
||||
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
/obj/effect/decal/cleanable/crayon/update_icon()
|
||||
cut_overlays()
|
||||
var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[art_type]s",2.1)
|
||||
|
||||
add_overlay(mainOverlay)
|
||||
add_overlay(shadeOverlay)
|
||||
if(mainOverlay && shadeOverlay)
|
||||
mainOverlay.Blend(art_color,ICON_ADD)
|
||||
shadeOverlay.Blend(art_shade,ICON_ADD)
|
||||
|
||||
add_hiddenprint(usr)
|
||||
add_overlay(mainOverlay)
|
||||
add_overlay(shadeOverlay)
|
||||
|
||||
add_janitor_hud_overlay()
|
||||
return
|
||||
// CHOMPEdit End
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
// Special case to prevent us from being part of a zone during the first air master tick.
|
||||
// We must merge ourselves into a zone on next tick. This will cause a bit of lag on
|
||||
// startup, but it can't really be helped you know?
|
||||
if(air_master && air_master.current_cycle == 0)
|
||||
if(SSair && SSair.current_cycle == 0)
|
||||
spawn(1)
|
||||
air_master.mark_for_update(get_turf(src))
|
||||
SSair.mark_for_update(get_turf(src))
|
||||
return FALSE
|
||||
return is_zone ? FALSE : TRUE // Anything except zones can pass
|
||||
|
||||
@@ -118,7 +118,6 @@
|
||||
to speak with your team, and learn what their plan is for today."))
|
||||
|
||||
R.key = C.key
|
||||
// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed.
|
||||
|
||||
spawn(1)
|
||||
mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE)
|
||||
|
||||
@@ -251,9 +251,9 @@
|
||||
if (!isturf(NT) || (NT in found) || (NT in pending))
|
||||
continue
|
||||
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
|
||||
if(air_master.air_blocked(T, NT))
|
||||
if(SSair.air_blocked(T, NT))
|
||||
// Okay thats the edge of the room
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
|
||||
@@ -678,9 +678,9 @@
|
||||
if(!visual && forbiddenAreas[NT.loc.type])
|
||||
return ROOM_ERR_FORBIDDEN
|
||||
// We ask ZAS to determine if its airtight. Thats what matters anyway right?
|
||||
if(air_master.air_blocked(T, NT))
|
||||
if(SSair.air_blocked(T, NT))
|
||||
// Okay thats the edge of the room
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT))
|
||||
if(get_area_type(NT.loc) == AREA_SPACE && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
@@ -835,9 +835,9 @@
|
||||
if(!get_new_area_type(NT.loc) == 1) //The contains somewhere that is NOT a buildable area.
|
||||
return 3 //NOT A BUILDABLE AREA
|
||||
|
||||
if(air_master.air_blocked(T, NT)) //Is the room airtight?
|
||||
if(SSair.air_blocked(T, NT)) //Is the room airtight?
|
||||
// Okay thats the edge of the room
|
||||
if(get_new_area_type(NT.loc) == 1 && air_master.air_blocked(NT, NT))
|
||||
if(get_new_area_type(NT.loc) == 1 && SSair.air_blocked(NT, NT))
|
||||
found += NT // So we include walls/doors not already in any area
|
||||
continue
|
||||
if (istype(NT, /turf/space))
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
if(D.visibility_flags & HIDDEN_SCANNER)
|
||||
continue
|
||||
else
|
||||
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacilin. Limit exposure to other personnel.<br>"
|
||||
dat += span_bold("Viral Infection") + " - Inform a Virologist or the Chief Medical Officer and administer antiviral chemicals such as Spaceacillin. Limit exposure to other personnel.<br>"
|
||||
if(robotparts)
|
||||
dat += span_bold("Robotic body parts") + " - Should not be repaired by medical personnel, refer to robotics if damaged."
|
||||
|
||||
|
||||
@@ -225,7 +225,6 @@
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.namepick()
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -556,35 +556,6 @@
|
||||
/obj/item/toy/AI/proc/cooldownreset()
|
||||
cooldown = 0
|
||||
|
||||
/*
|
||||
* Hand buzzer
|
||||
*/
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy
|
||||
name = "steel ring"
|
||||
desc = "Torus shaped finger decoration. It has a small piece of metal on the palm-side."
|
||||
icon_state = "seal-signet"
|
||||
drop_sound = 'sound/items/drop/ring.ogg'
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/Touch(var/atom/A, var/proximity)
|
||||
if(proximity && istype(usr, /mob/living/carbon/human))
|
||||
|
||||
return zap(usr, A, proximity)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/gloves/ring/buzzer/toy/zap(var/mob/living/carbon/human/user, var/atom/movable/target, var/proximity)
|
||||
. = FALSE
|
||||
if(user.a_intent == I_HELP && battery.percent() >= 50)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
|
||||
to_chat(L, span_warning("You feel a powerful shock!"))
|
||||
if(!.)
|
||||
playsound(L, 'sound/effects/sparks7.ogg', 40, 1)
|
||||
L.electrocute_act(battery.percent() * 0, src)
|
||||
return .
|
||||
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Toy cuffs
|
||||
*/
|
||||
|
||||
@@ -115,6 +115,12 @@
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/turkeybones
|
||||
name = "turkey bones"
|
||||
icon_state = "turkeybones"
|
||||
drop_sound = 'sound/items/drop/food.ogg'
|
||||
pickup_sound = 'sound/items/pickup/food.ogg'
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios packet"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
@@ -65,8 +65,7 @@
|
||||
var/light_glove_d = rand(2, 4)
|
||||
var/no_glove_d = rand(4, 6)
|
||||
var/list/forbidden_gloves = list(
|
||||
/obj/item/clothing/gloves/sterile,
|
||||
/obj/item/clothing/gloves/knuckledusters
|
||||
/obj/item/clothing/gloves/sterile
|
||||
)
|
||||
|
||||
if(src == user.l_hand)
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
to_chat(user, span_notice("\the [src] is too full to possibly fit anything else inside of it."))
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/ore))
|
||||
if (istype(W, /obj/item/ore) && !istype(W, /obj/item/ore/slag))
|
||||
var/obj/item/ore/ore = W
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
@@ -178,6 +178,8 @@
|
||||
if(current_pickup >= max_pickup)
|
||||
max_pickup_reached = 1
|
||||
break
|
||||
if(istype(O, /obj/item/ore/slag))
|
||||
continue
|
||||
var/obj/item/ore/ore = O
|
||||
stored_ore[ore.material]++
|
||||
current_capacity++
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
/obj/item/storage/firstaid/surgery
|
||||
can_hold = list(
|
||||
/obj/item/surgical/bone_clamp,
|
||||
/obj/item/surgical/bonesetter,
|
||||
/obj/item/surgical/cautery,
|
||||
/obj/item/surgical/circular_saw,
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
prob(6);/obj/item/material/butterflyblade,
|
||||
prob(6);/obj/item/material/butterflyhandle,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
prob(1);/obj/item/beartrap,
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
prob(4);/obj/item/storage/pill_bottle/zoom,
|
||||
prob(4);/obj/item/material/butterfly,
|
||||
prob(2);/obj/item/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(2);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(2);/obj/item/reagent_containers/syringe/drugs,
|
||||
prob(1);/obj/item/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
|
||||
@@ -39,6 +39,23 @@ LINEN BINS
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/bedsheet/verb/turn_around()
|
||||
set name = "Turn Around"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(!usr || !isturf(usr.loc))
|
||||
return
|
||||
if(usr.stat || usr.restrained())
|
||||
return
|
||||
if(ismouse(usr) || (isobserver(usr) && !CONFIG_GET(flag/ghost_interaction)))
|
||||
return
|
||||
|
||||
if(dir >= 2)
|
||||
src.set_dir(1)
|
||||
else
|
||||
src.set_dir(2)
|
||||
|
||||
/obj/item/bedsheet/blue
|
||||
icon_state = "sheetblue"
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
/obj/item/radio,
|
||||
/obj/item/gps/explorer,
|
||||
/obj/item/gun/energy/gun/protector/pilotgun/locked,
|
||||
/obj/item/clothing/gloves/watch/survival,
|
||||
/obj/item/clothing/accessory/watch/survival,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot1,
|
||||
/obj/item/clothing/accessory/storage/webbing/pilot2,
|
||||
/obj/item/emergency_beacon
|
||||
|
||||
@@ -127,6 +127,10 @@
|
||||
name = "chicken crate"
|
||||
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
|
||||
|
||||
/obj/structure/largecrate/animal/turkey
|
||||
name = "turkey crate"
|
||||
starts_with = list(/mob/living/simple_mob/vore/turkey)
|
||||
|
||||
/obj/structure/largecrate/animal/catslug
|
||||
name = "catslug carrier"
|
||||
starts_with = list(/mob/living/simple_mob/vore/alienanimals/catslug)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user