Added survivalist job, wilderness spawn and checkpoint spawn to Cynosure.

This commit is contained in:
MistakeNot4892
2022-06-15 20:16:23 +10:00
parent edb54f137d
commit 8b8e1ecdf4
22 changed files with 714 additions and 441 deletions

View File

@@ -2,9 +2,9 @@ GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u"))
GLOBAL_LIST_EMPTY(meteor_list)
/// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc.
GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value.
// Reference list for disposal sort junctions. Filled up by sorting junction's New()
GLOBAL_LIST_EMPTY(tagger_locations)
GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes
GLOBAL_LIST_EMPTY(crafting_recipes) //list of all table craft recipes

View File

@@ -15,12 +15,13 @@
/decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H, rank, assignment)
var/obj/item/card/id/C = ..()
var/datum/job/J = job_master.GetJob(rank)
if(J)
C.access = J.get_access()
if(H.mind)
var/datum/mind/M = H.mind
if(M.initial_account)
var/datum/money_account/A = M.initial_account
C.associated_account_number = A.account_number
if(C)
var/datum/job/J = job_master.GetJob(rank)
if(J)
C.access = J.get_access()
if(H.mind)
var/datum/mind/M = H.mind
if(M.initial_account)
var/datum/money_account/A = M.initial_account
C.associated_account_number = A.account_number
return C

View File

@@ -34,11 +34,11 @@
var/outfit_type // What outfit datum does this job use in its default title?
var/offmap_spawn = FALSE // Do we require weird and special spawning and datacore handling?
var/substitute_announce_title // Set this to replace the actual job title in join/leave messages (for 'gamey' jobs like Survivalist)
var/mob_type = JOB_CARBON // Bitflags representing mob type this job spawns
// Description of the job's role and minimum responsibilities.
var/job_description = "This Job doesn't have a description! Please report it!"
/datum/job/New()
. = ..()
department_accounts = department_accounts || departments_managed
@@ -177,4 +177,4 @@
if(species_name in banned_job_species)
return TRUE
if(brain_type in banned_job_species)
return TRUE
return TRUE

View File

@@ -618,10 +618,8 @@ var/global/datum/controller/occupations/job_master
/datum/controller/occupations/proc/LateSpawn(var/client/C, var/rank)
var/datum/spawnpoint/spawnpos
var/fail_deadly = FALSE
var/datum/job/J = SSjob.get_job(rank)
fail_deadly = J?.offmap_spawn
var/fail_deadly = !!(J?.offmap_spawn)
//Spawn them at their preferred one
if(C && C.prefs.spawnpoint)
@@ -639,9 +637,9 @@ var/global/datum/controller/occupations/job_master
. = list("turf","msg")
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
.["turf"] = spawnpos.get_spawn_position()
.["msg"] = spawnpos.msg
.["channel"] = spawnpos.announce_channel
.["turf"] = spawnpos.get_spawn_position()
.["msg"] = spawnpos.msg
.["channel"] = spawnpos.announce_channel
else
if(fail_deadly)
to_chat(C, "<span class='warning'>Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Please correct your spawn point choice.</span>")

View File

@@ -43,6 +43,7 @@ var/global/const/LAWYER =(1<<9)
var/global/const/CHAPLAIN =(1<<10)
var/global/const/ASSISTANT =(1<<11)
var/global/const/BRIDGE =(1<<12)
var/global/const/HERMIT =(1<<13)
/proc/guest_jobbans(var/job)
return ( (job in SSjob.get_job_titles_in_department(DEPARTMENT_COMMAND)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)) || (job in SSjob.get_job_titles_in_department(DEPARTMENT_SECURITY)) )

View File

@@ -483,7 +483,8 @@
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
var/datum/job/J = SSjob.get_job(job)
announce.autosay("[to_despawn.real_name], [J?.substitute_announce_title || to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
//This should guarantee that ghosts don't spawn.

View File

@@ -31,6 +31,9 @@
if("JoinLateCheckpoint")
latejoin_checkpoint += loc
delete_me = 1
if("JoinLateWilderness")
latejoin_wilderness += loc
delete_me = 1
if("JoinLateCryo")
latejoin_cryo += loc
delete_me = 1

View File

@@ -62,6 +62,7 @@ var/global/list/latejoin_elevator = list()
var/global/list/latejoin_cryo = list()
var/global/list/latejoin_cyborg = list()
var/global/list/latejoin_checkpoint = list()
var/global/list/latejoin_wilderness = list()
var/global/list/prisonwarp = list() // Prisoners go to these
var/global/list/holdingfacility = list() // Captured people go here

View File

@@ -377,4 +377,3 @@
corpseshoes = /obj/item/clothing/shoes/boots/tactical
corpseid = 1
corpseidjob = "Hedberg-Hammarstrom Enforcer"

View File

@@ -270,17 +270,16 @@
/datum/category_item/player_setup_item/occupation/proc/SetJob(mob/user, role, level)
var/datum/job/job = job_master.GetJob(role)
if(!job)
return 0
return FALSE
if(job.type == /datum/job/assistant)
if(pref.job_civilian_low & job.flag)
pref.job_civilian_low &= ~job.flag
else
pref.job_civilian_low |= job.flag
return 1
return TRUE
SetJobDepartment(job, level)
return 1
return TRUE
/datum/category_item/player_setup_item/occupation/proc/reset_jobhigh()
pref.job_civilian_med |= pref.job_civilian_high
@@ -293,7 +292,7 @@
// Level is equal to the desired new level of the job. So for a value of 4, we want to disable the job.
/datum/category_item/player_setup_item/occupation/proc/SetJobDepartment(var/datum/job/job, var/level)
if(!job || !level)
return 0
return FALSE
switch(job.department_flag)
if(CIVILIAN)
@@ -332,7 +331,7 @@
pref.job_engsec_med |= job.flag
if(3)
pref.job_engsec_low |= job.flag
return 1
return TRUE
/datum/category_item/player_setup_item/occupation/proc/ResetJobs()
pref.job_civilian_high = 0

View File

@@ -12,27 +12,23 @@ var/global/list/spawntypes = list()
var/display_name //Name used in preference setup.
var/list/restrict_job = null
var/list/disallow_job = null
var/list/permit_offsite_job = null
var/announce_channel = "Common"
var/allowed_mob_types = JOB_SILICON|JOB_CARBON
/datum/spawnpoint/proc/check_job_spawning(job)
if(restrict_job && !(job in restrict_job))
return 0
if(disallow_job && (job in disallow_job))
return 0
var/datum/job/J = SSjob.get_job(job)
if(!J) // Couldn't find, admin shenanigans? Allow it
return 1
if(J.offmap_spawn && !(job in restrict_job))
return 0
return TRUE
if(J.offmap_spawn && !(job in permit_offsite_job) && !(job in restrict_job))
return FALSE
if(restrict_job && !(job in restrict_job))
return FALSE
if(disallow_job && (job in disallow_job))
return FALSE
if(!(J.mob_type & allowed_mob_types))
return 0
return 1
return FALSE
return TRUE
/datum/spawnpoint/proc/get_spawn_position()
return get_turf(pick(turfs))
@@ -85,4 +81,12 @@ var/global/list/spawntypes = list()
/datum/spawnpoint/cyborg/New()
..()
turfs = latejoin_cyborg
turfs = latejoin_cyborg
/datum/spawnpoint/wilderness
display_name = "Wilderness"
msg = null
/datum/spawnpoint/wilderness/New()
..()
turfs = latejoin_wilderness

View File

@@ -837,7 +837,7 @@
if(accessory.AltClick(user))
return TRUE
. = ..()
/obj/item/clothing/under/attack_hand(var/mob/user)
if(LAZYLEN(accessories))
..()

View File

@@ -405,7 +405,7 @@
var/join_message = join_props["msg"]
var/announce_channel = join_props["channel"] || "Common"
if(!T || !join_message)
if(!T)
return 0
spawning = 1
@@ -451,9 +451,11 @@
ticker.mode.latespawn(character)
if(J.mob_type & JOB_SILICON)
AnnounceCyborg(character, rank, join_message, announce_channel, character.z)
if(join_message && announce_channel)
AnnounceCyborg(character, rank, join_message, announce_channel, character.z)
else
AnnounceArrival(character, rank, join_message, announce_channel, character.z)
if(join_message && announce_channel)
AnnounceArrival(character, J?.substitute_announce_title || rank, join_message, announce_channel, character.z)
data_core.manifest_inject(character)
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
@@ -647,4 +649,4 @@
return
var/decl/music_track/new_track = using_map.get_lobby_track(using_map.lobby_track.type)
if(new_track)
new_track.play_to(src)
new_track.play_to(src)

View File

@@ -401,7 +401,7 @@
if(muzzle_flash)
set_light(0)
user.hud_used.update_ammo_hud(user, src)
// Similar to the above proc, but does not require a user, which is ideal for things like turrets.
@@ -746,16 +746,16 @@
/obj/item/gun/proc/get_ammo_count()
return FALSE
/obj/item/gun/equipped(mob/living/user, slot) // When a gun is equipped to your hands, we'll add the HUD to the user. Pending porting over TGMC guncode where wielding is far more sensible.
if(slot == slot_l_hand || slot == slot_r_hand)
user.hud_used.add_ammo_hud(user, src)
else
user.hud_used.remove_ammo_hud(user, src)
if(user?.hud_used)
if(slot == slot_l_hand || slot == slot_r_hand)
user.hud_used.add_ammo_hud(user, src)
else
user.hud_used.remove_ammo_hud(user, src)
return ..()
/obj/item/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti.
user.hud_used.remove_ammo_hud(user, src)
..()
/obj/item/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti.
if(user?.hud_used)
user.hud_used.remove_ammo_hud(user, src)
..()

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,13 @@
"bE" = (
/turf/unsimulated/wall/planetary/sif,
/area/surface/outside/wilderness/mountains)
"bW" = (
/obj/effect/landmark{
name = "JoinLateWilderness"
},
/obj/structure/bed,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"ct" = (
/turf/simulated/floor/outdoors/grass/sif,
/area/surface/outside/wilderness/normal)
@@ -18,10 +25,23 @@
},
/turf/simulated/floor/outdoors/mask,
/area/surface/outside/wilderness/mountains)
"dj" = (
/obj/vehicle/boat/sifwood,
/turf/simulated/floor/outdoors/mask,
/area/surface/outside/wilderness/normal)
"eZ" = (
/turf/simulated/wall/sifwood,
/area/surface/wilderness/shack)
"fy" = (
/obj/structure/cliff/automatic,
/turf/simulated/floor/outdoors/mask,
/area/surface/outside/wilderness/mountains)
"fP" = (
/obj/structure/table/sifwoodentable,
/obj/item/storage/firstaid,
/obj/item/stack/medical/splint,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"gl" = (
/obj/structure/cliff/automatic{
dir = 9
@@ -97,12 +117,21 @@
},
/turf/simulated/floor/outdoors/mask,
/area/surface/outside/wilderness/mountains)
"qr" = (
/obj/structure/kitchenspike,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"qT" = (
/obj/effect/map_effect/portal/master/side_b/wilderness_to_plains/river{
dir = 1
},
/turf/simulated/floor/outdoors/grass/sif,
/area/surface/outside/river/gautelfr)
"sn" = (
/obj/structure/table/sifwoodentable,
/obj/item/flashlight/lamp,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"ta" = (
/obj/structure/showcase/sign{
icon_state = "wilderness2";
@@ -110,6 +139,10 @@
},
/turf/simulated/wall/sifwood,
/area/surface/outside/wilderness/normal)
"tC" = (
/obj/structure/simple_door/sifwood,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"tM" = (
/turf/simulated/floor/water,
/area/surface/outside/river/gautelfr)
@@ -119,6 +152,9 @@
},
/turf/simulated/floor/outdoors/dirt/sif,
/area/surface/outside/path/wilderness)
"uk" = (
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"uP" = (
/turf/simulated/floor/outdoors/grass/sif/random{
tree_chance = 0
@@ -227,9 +263,19 @@
tree_chance = 0
},
/area/surface/outside/wilderness/deep)
"JU" = (
/obj/effect/wingrille_spawn,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"KZ" = (
/turf/simulated/floor/wood/sif,
/area/surface/outside/path/wilderness)
"LN" = (
/obj/effect/landmark/start{
name = "Survivalist"
},
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"Mf" = (
/obj/structure/cliff/automatic/corner{
dir = 6
@@ -262,10 +308,19 @@
},
/turf/simulated/floor/outdoors/grass/sif,
/area/surface/outside/path/wilderness)
"RA" = (
/obj/structure/table/sifwoodentable,
/obj/item/material/fishing_rod/built,
/obj/item/stack/cable_coil/white,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"Sa" = (
/obj/effect/zone_divider,
/turf/simulated/floor/water,
/area/surface/outside/river/gautelfr)
"Sc" = (
/turf/simulated/floor/wood/sif/broken,
/area/surface/wilderness/shack)
"Sl" = (
/turf/simulated/floor/outdoors/mud/sif/planetuse,
/area/surface/outside/wilderness/normal)
@@ -273,6 +328,10 @@
/obj/effect/zone_divider,
/turf/simulated/floor/outdoors/snow/sif/planetuse,
/area/surface/outside/wilderness/mountains)
"Tc" = (
/obj/structure/bookcase,
/turf/simulated/floor/wood/sif,
/area/surface/wilderness/shack)
"TP" = (
/obj/structure/railing{
dir = 8
@@ -53952,12 +54011,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
eZ
eZ
eZ
eZ
eZ
eZ
Ax
Ax
Ax
@@ -54209,12 +54268,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
eZ
Tc
bW
LN
bW
eZ
Ax
Ax
Ax
@@ -54466,12 +54525,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
eZ
RA
Sc
uk
LN
JU
Ax
Ax
Ax
@@ -54723,12 +54782,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
JU
sn
uk
uk
LN
JU
Ax
Ax
Ax
@@ -54980,12 +55039,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
JU
fP
qr
uk
bW
eZ
Ax
Ax
Ax
@@ -55237,12 +55296,12 @@ Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
Ax
eZ
eZ
eZ
tC
eZ
eZ
Ax
Ax
Ax
@@ -56525,7 +56584,7 @@ tM
Ax
Ax
Ax
Ax
dj
Ax
Ax
Ax

View File

@@ -15,6 +15,8 @@
#include "datums/supplypacks/munitions.dm"
#include "datums/random_map.dm"
#include "datums/spawn.dm"
#include "items/encryptionkey_cyno.dm"
#include "items/headset_cyno.dm"
#include "items/clothing/cyno_suit.dm"
@@ -42,4 +44,4 @@
#warn A map has already been included, ignoring Cynosure
#endif
#endif

View File

@@ -1974,4 +1974,11 @@
icon_state = "shuttle"
/area/shuttle/large_escape_pod2/transit
icon_state = "shuttle"
icon_state = "shuttle"
// Wilderness spawn areas.
/area/surface/wilderness/shack
name = "Wilderness Shack"
/area/surface/outpost/checkpoint
name = "Exterior Checkpoint"

View File

@@ -83,7 +83,13 @@
NETWORK_SUPPLY
)
usable_email_tlds = list("freemail.nt")
allowed_spawns = list("Arrivals Shuttle", "Cryogenic Storage", "Cyborg Storage")
allowed_spawns = list(
"Arrivals Shuttle",
"Cryogenic Storage",
"Cyborg Storage",
"Checkpoint",
"Wilderness"
)
use_overmap = TRUE
@@ -373,4 +379,4 @@
// Putting this here in order to not disrupt existing maps/downstreams.
/turf/simulated/open
dynamic_lighting = TRUE
dynamic_lighting = TRUE

View File

@@ -56,4 +56,25 @@ var/global/const/access_explorer = 43
access_tox_storage, access_teleporter, access_sec_doors,
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_maint_tunnels, access_explorer, access_eva, access_external_airlocks)
access_network, access_maint_tunnels, access_explorer, access_eva, access_external_airlocks)
/datum/job/survivalist
title = "Survivalist"
departments = list(DEPARTMENT_PLANET)
department_flag = CIVILIAN
flag = HERMIT
selection_color = "#6085a8"
total_positions = 3
spawn_positions = 3
faction = "Station"
supervisors = "your conscience"
economic_modifier = 1
access = list()
minimal_access = list()
outfit_type = /decl/hierarchy/outfit/job/survivalist
job_description = "There are a few small groups of people living in the wilderness of Sif, and they occasionally venture to the Cynosure to trade, ask for help, or just have someone to talk to."
assignable = FALSE
has_headset = FALSE
account_allowed = FALSE
offmap_spawn = TRUE
substitute_announce_title = "Colonist"

View File

@@ -0,0 +1,5 @@
/datum/spawnpoint/wilderness
restrict_job = list("Survivalist") // Nobody except survivalists.
/datum/spawnpoint/checkpoint
permit_offsite_job = list("Survivalist") // Survivalists can spawn here but not on the other 'civilized' spawns.

View File

@@ -62,4 +62,28 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
pda_slot = slot_l_store
id_type = /obj/item/card/id/medical
id_pda_assignment = "Search and Rescue"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
/decl/hierarchy/outfit/job/survivalist
name = OUTFIT_JOB_NAME("Survivalist")
l_ear = null
r_ear = null
pda_slot = null
pda_type = null
id_slot = null
id_type = null
mask = /obj/item/clothing/mask/gas
r_pocket = /obj/item/tank/emergency/oxygen/double
l_pocket = /obj/item/radio
uniform = /obj/item/clothing/under/ascetic
shoes = /obj/item/clothing/shoes/boots/winter
suit = /obj/item/clothing/suit/storage/hooded/wintercoat
belt = /obj/item/gun/energy/phasegun/pistol // better make that cell count
/decl/hierarchy/outfit/job/survivalist/equip(mob/living/carbon/human/H, rank, assignment)
. = ..()
if(H && H.shoes)
var/obj/item/clothing/shoes/shoes = H.shoes
if(istype(shoes) && !shoes.holding && shoes.can_hold_knife)
shoes.holding = new /obj/item/material/knife/tacknife/survival(H)
shoes.update_icon()