diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index be291b8ac25..042a32f12ee 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -19,6 +19,7 @@ // Visual references. var/antaghud_indicator = "hudsyndicate" // Used by the ghost antagHUD. var/antag_indicator // icon_state for icons/mob/mob.dm visual indicator. + var/antag_hud_icon = 'icons/screen/hud_antag.dmi' var/faction_indicator // See antag_indicator, but for factionalized people only. var/faction_invisible // Can members of the faction identify other antagonists? @@ -104,6 +105,17 @@ /decl/special_role/validate() . = ..() + + // Check for our antaghud icons. + if(faction_indicator || antag_indicator) + if(antag_hud_icon) + if(faction_indicator && !check_state_in_icon(faction_indicator, antag_hud_icon)) + . += "missing faction_indicator '[faction_indicator]' from icon 'antag_hud_icon]'" + if(antag_indicator && !check_state_in_icon(antag_indicator, antag_hud_icon)) + . += "missing antag_indicator '[antag_indicator]' from icon 'antag_hud_icon]'" + else + . += "missing antag_hud_icon" + // Grab initial in case it was already successfully loaded. var/initial_base_to_load = initial(base_to_load) if(isnull(initial_base_to_load)) diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 64214125565..fcfd2c5fcdc 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -31,10 +31,12 @@ qdel(I) /decl/special_role/proc/get_indicator(var/datum/mind/recipient, var/datum/mind/other) - if(!antag_indicator || !other.current || !recipient.current) + if(!other.current || !recipient.current) return var/indicator = (faction_indicator && (other in faction_members)) ? faction_indicator : antag_indicator - var/image/I = image('icons/mob/hud.dmi', loc = other.current, icon_state = indicator, layer = ABOVE_HUMAN_LAYER) + if(!indicator) + return + var/image/I = image(antag_hud_icon, loc = other.current, icon_state = indicator, layer = ABOVE_HUMAN_LAYER) var/decl/bodytype/root_bodytype = other.current.get_bodytype() if(istype(root_bodytype)) I.pixel_x = root_bodytype.antaghud_offset_x diff --git a/code/game/jobs/job/_job.dm b/code/game/jobs/job/_job.dm index f5df1fe5197..06e985a8772 100644 --- a/code/game/jobs/job/_job.dm +++ b/code/game/jobs/job/_job.dm @@ -34,7 +34,8 @@ var/announced = TRUE // If their arrival is announced on radio var/latejoin_at_spawnpoints // If this job should use roundstart spawnpoints for latejoin (offstation jobs etc) var/forced_spawnpoint // If set to a spawnpoint name, will use that spawn point for joining as this job. - var/hud_icon // icon used for Sec HUD overlay + var/hud_icon // icon used for secHUD overlay + var/hud_icon_state // icon state used for secHUD overlay // A list of string IDs for keys to grant on join. var/list/lock_keys = list() @@ -69,7 +70,7 @@ if(type == /datum/job && global.using_map.default_job_type == type) title = "Debug Job" - hud_icon = "hudblank" + hud_icon_state = "hudblank" outfit_type = /decl/outfit/job/generic/scientist autoset_department = TRUE @@ -83,7 +84,9 @@ spawn_positions = 0 if(!hud_icon) - hud_icon = "hud[ckey(title)]" + hud_icon = global.using_map.hud_icons + if(!hud_icon_state) + hud_icon_state = "hud[ckey(title)]" ..() diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm index 38e6f1d6c10..ed0df480df7 100644 --- a/code/modules/mob/living/human/human.dm +++ b/code/modules/mob/living/human/human.dm @@ -5,14 +5,12 @@ icon_state = "body_m_s" mob_sort_value = 6 max_health = 150 - - var/list/hud_list[10] var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. /mob/living/human/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) current_health = max_health - setup_hud_overlays() + reset_hud_overlays() var/list/newargs = args.Copy(2) setup_human(arglist(newargs)) global.human_mob_list |= src @@ -32,18 +30,6 @@ if(. != INITIALIZE_HINT_QDEL) post_setup(arglist(newargs)) -/mob/living/human/proc/setup_hud_overlays() - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[ID_HUD] = new /image/hud_overlay(global.using_map.id_hud_icons, src, "hudunknown") - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD_OOC] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") - /mob/living/human/Destroy() global.human_mob_list -= src regenerate_body_icon = FALSE // don't bother regenerating if we happen to be queued to update icon diff --git a/code/modules/mob/living/human/life.dm b/code/modules/mob/living/human/life.dm index 1bb84a587db..ebc47ef1202 100644 --- a/code/modules/mob/living/human/life.dm +++ b/code/modules/mob/living/human/life.dm @@ -746,7 +746,8 @@ if(I) var/datum/job/J = SSjobs.get_by_title(I.GetJobName()) if(J) - holder.icon_state = J.hud_icon + holder.icon = J.hud_icon + holder.icon_state = J.hud_icon_state hud_list[ID_HUD] = holder @@ -781,17 +782,16 @@ var/image/holder2 = hud_list[IMPLOYAL_HUD] var/image/holder3 = hud_list[IMPCHEM_HUD] - holder1.icon_state = "hudblank" - holder2.icon_state = "hudblank" - holder3.icon_state = "hudblank" - + holder1.icon_state = "hud_imp_blank" + holder2.icon_state = "hud_imp_blank" + holder3.icon_state = "hud_imp_blank" for(var/obj/item/implant/I in src) if(I.implanted) if(istype(I,/obj/item/implant/tracking)) holder1.icon_state = "hud_imp_tracking" - if(istype(I,/obj/item/implant/loyalty)) + else if(istype(I,/obj/item/implant/loyalty)) holder2.icon_state = "hud_imp_loyal" - if(istype(I,/obj/item/implant/chem)) + else if(istype(I,/obj/item/implant/chem)) holder3.icon_state = "hud_imp_chem" hud_list[IMPTRACK_HUD] = holder1 diff --git a/code/modules/mob/living/living_hud.dm b/code/modules/mob/living/living_hud.dm new file mode 100644 index 00000000000..5e6b7adfff0 --- /dev/null +++ b/code/modules/mob/living/living_hud.dm @@ -0,0 +1,17 @@ +/mob/living + var/list/hud_list = new(10) + +/mob/living/proc/reset_hud_overlays() + hud_list = new(10) + hud_list[HEALTH_HUD] = new /image/hud_overlay(global.using_map.med_hud_icons, src, "blank") + hud_list[STATUS_HUD] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudhealthy") + hud_list[LIFE_HUD] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudhealthy") + hud_list[ID_HUD] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudunknown") + hud_list[WANTED_HUD] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudblank") + hud_list[IMPLOYAL_HUD] = new /image/hud_overlay(global.using_map.implant_hud_icons, src, "hud_imp_blank") + hud_list[IMPCHEM_HUD] = new /image/hud_overlay(global.using_map.implant_hud_icons, src, "hud_imp_blank") + hud_list[IMPTRACK_HUD] = new /image/hud_overlay(global.using_map.implant_hud_icons, src, "hud_imp_blank") + hud_list[SPECIALROLE_HUD] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudblank") + hud_list[STATUS_HUD_OOC] = new /image/hud_overlay(global.using_map.hud_icons, src, "hudhealthy") + +/datum/map diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e9920873353..230f370eda2 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -149,15 +149,7 @@ var/global/list/ai_verbs_default = list( . = INITIALIZE_HINT_QDEL else if(brainmob.mind) brainmob.mind.transfer_to(src) - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") + reset_hud_overlays() ai_list += src create_powersupply() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 48cc6cf6a6b..4421aabf243 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -88,6 +88,9 @@ ) /mob/living/silicon/robot/Initialize() + + reset_hud_overlays() + . = ..() add_language(/decl/language/binary, 1) @@ -126,16 +129,6 @@ // Disables lay down verb for robots due they're can't lay down and it cause some movement, vision issues. verbs -= /mob/living/verb/lay_down - hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealth100") - hud_list[ID_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[WANTED_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPLOYAL_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPCHEM_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[IMPTRACK_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") - AddMovementHandler(/datum/movement_handler/robot/use_power, /datum/movement_handler/mob/space) /mob/living/silicon/robot/proc/recalculate_synth_capacities() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 52457ceb078..0ec86995aff 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -10,7 +10,6 @@ var/list/stating_laws = list()// Channels laws are currently being stated on var/obj/item/radio/silicon_radio - var/list/hud_list[10] var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer //Used in say.dm. @@ -40,6 +39,7 @@ #define MED_HUD 2 //Medical HUD mode /mob/living/silicon/Initialize() + reset_hud_overlays() global.silicon_mob_list += src . = ..() diff --git a/code/modules/submaps/submap_job.dm b/code/modules/submaps/submap_job.dm index 9bc3687a1ae..89d8b2f3871 100644 --- a/code/modules/submaps/submap_job.dm +++ b/code/modules/submaps/submap_job.dm @@ -7,7 +7,8 @@ create_record = FALSE total_positions = 4 outfit_type = /decl/outfit/job/survivor - hud_icon = "hudblank" + hud_icon_state = "hudblank" + hud_icon = null available_by_default = FALSE allowed_ranks = null allowed_branches = null @@ -55,7 +56,12 @@ if(islist(blacklisted_species) && !length(blacklisted_species)) blacklisted_species |= SSmodpacks.default_submap_blacklisted_species - if(!abstract_job) + if(abstract_job) + if(!hud_icon) + hud_icon = global.using_map.hud_icons + if(!hud_icon_state) + hud_icon_state = "hud[ckey(title)]" + else spawnpoints = list() owner = _owner ..() diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm index 8a25e15a29e..5e4e751e6c9 100644 --- a/code/unit_tests/icon_tests.dm +++ b/code/unit_tests/icon_tests.dm @@ -296,3 +296,64 @@ else pass("All vendors have all icons and icon states.") return 1 + + +/datum/unit_test/HUDS_shall_have_icon_states + name = "ICON STATE: HUD overlays shall have appropriate icon_states" + +/datum/unit_test/HUDS_shall_have_icon_states/start_test() + var/failed_jobs = 0 + var/failed_sanity_checks = 0 + + // Throwing implants and health HUDs in here. + // Antag HUDs are tested by special role validation. + + var/static/list/implant_hud_states = list( + "hud_imp_blank" = "Blank", + "hud_imp_loyal" = "Loyalty", + "hud_imp_unknown" = "Unknown", + "hud_imp_tracking" = "Tracking", + "hud_imp_chem" = "Chemical", + ) + for(var/implant_hud_state in implant_hud_states) + if(!check_state_in_icon(implant_hud_state, global.using_map.implant_hud_icons)) + log_bad("Sanity Check - Missing map [implant_hud_states[implant_hud_state]] implant HUD icon_state '[implant_hud_state]' from icon [global.using_map.implant_hud_icons]") + failed_sanity_checks++ + + var/static/list/med_hud_states = list( + "blank" = "Blank", + "flatline" = "Flatline", + "0" = "Dead", + "1" = "Healthy", + "2" = "Lightly injured", + "3" = "Moderately injured", + "4" = "Severely injured", + "5" = "Dying", + ) + for(var/med_hud_state in med_hud_states) + if(!check_state_in_icon(med_hud_state, global.using_map.med_hud_icons)) + log_bad("Sanity Check - Missing map [med_hud_states[med_hud_state]] medical HUD icon_state '[med_hud_state]' from icon [global.using_map.med_hud_icons]") + failed_sanity_checks++ + var/static/list/global_states = list( + "" = "Default/unnamed", + "hudunknown" = "Unknown role", + "hudhealthy" = "Healthy mob", + "hudill" = "Diseased mob", + "huddead" = "Dead mob" + ) + for(var/global_state in global_states) + if(!check_state_in_icon(global_state, global.using_map.hud_icons)) + log_bad("Sanity Check - Missing map [global_states[global_state]] HUD icon_state '[global_state]' from icon [global.using_map.hud_icons]") + failed_sanity_checks++ + + for(var/job_name in SSjobs.titles_to_datums) + var/datum/job/job = SSjobs.titles_to_datums[job_name] + if(!check_state_in_icon(job.hud_icon_state, job.hud_icon)) + log_bad("[job.title] - Missing HUD icon: [job.hud_icon_state] in icon [job.hud_icon]") + failed_jobs++ + + if(failed_sanity_checks || failed_jobs) + fail("[global.using_map.type] - [failed_sanity_checks] failed sanity check\s, [failed_jobs] job\s with missing HUD icon.") + else + pass("All jobs have a HUD icon.") + return 1 diff --git a/code/unit_tests/job_tests.dm b/code/unit_tests/job_tests.dm index 858063c9bad..b6b652731f8 100644 --- a/code/unit_tests/job_tests.dm +++ b/code/unit_tests/job_tests.dm @@ -35,36 +35,6 @@ pass("All jobs had outfit types.") return 1 -/datum/unit_test/jobs_shall_have_a_HUD_icon - name = "JOB: Shall have a HUD icon" - -/datum/unit_test/jobs_shall_have_a_HUD_icon/start_test() - var/failed_jobs = 0 - var/failed_sanity_checks = 0 - - var/list/job_huds = get_states_in_icon_cached(global.using_map.id_hud_icons) - - if(!job_huds[""]) - log_bad("Sanity Check - Missing default/unnamed HUD icon") - failed_sanity_checks++ - - if(!job_huds["hudunknown"]) - log_bad("Sanity Check - Missing HUD icon: hudunknown") - failed_sanity_checks++ - - for(var/job_name in SSjobs.titles_to_datums) - var/datum/job/J = SSjobs.titles_to_datums[job_name] - var/hud_icon_state = J.hud_icon - if(!job_huds[hud_icon_state]) - log_bad("[J.title] - Missing HUD icon: [hud_icon_state]") - failed_jobs++ - - if(failed_sanity_checks || failed_jobs) - fail("[global.using_map.id_hud_icons] - [failed_sanity_checks] failed sanity check\s, [failed_jobs] job\s with missing HUD icon.") - else - pass("All jobs have a HUD icon.") - return 1 - /datum/unit_test/jobs_shall_have_a_unique_title name = "JOBS: All Job Datums Shall Have A Unique Title" diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi deleted file mode 100644 index ed608471041..00000000000 Binary files a/icons/mob/hud.dmi and /dev/null differ diff --git a/icons/mob/hud_med.dmi b/icons/mob/hud_med.dmi deleted file mode 100644 index 705886a5490..00000000000 Binary files a/icons/mob/hud_med.dmi and /dev/null differ diff --git a/icons/screen/hud.dmi b/icons/screen/hud.dmi new file mode 100644 index 00000000000..b8d98129369 Binary files /dev/null and b/icons/screen/hud.dmi differ diff --git a/icons/screen/hud_antag.dmi b/icons/screen/hud_antag.dmi new file mode 100644 index 00000000000..07840ff2614 Binary files /dev/null and b/icons/screen/hud_antag.dmi differ diff --git a/icons/screen/hud_implants.dmi b/icons/screen/hud_implants.dmi new file mode 100644 index 00000000000..5899f696f70 Binary files /dev/null and b/icons/screen/hud_implants.dmi differ diff --git a/icons/screen/hud_med.dmi b/icons/screen/hud_med.dmi new file mode 100644 index 00000000000..280097c8166 Binary files /dev/null and b/icons/screen/hud_med.dmi differ diff --git a/maps/away/liberia/hud.dmi b/maps/away/liberia/hud.dmi new file mode 100644 index 00000000000..01fe4cbfcd4 Binary files /dev/null and b/maps/away/liberia/hud.dmi differ diff --git a/maps/away/liberia/liberia_jobs.dm b/maps/away/liberia/liberia_jobs.dm index 4d3b627143f..34269ce2cd3 100644 --- a/maps/away/liberia/liberia_jobs.dm +++ b/maps/away/liberia/liberia_jobs.dm @@ -11,7 +11,8 @@ info = "You are free traders who have drifted into unknown distances in search of profit. Travel, trade, make profit!" supervisors = "the invisible hand of the market" selection_color = "#515151" - + hud_icon = 'maps/away/liberia/hud.dmi' + hud_icon_state = "hudmerchant" ideal_character_age = 20 minimal_player_age = 7 diff --git a/maps/example/example_jobs.dm b/maps/example/example_jobs.dm index e3ad5c0c488..28d5cf504c6 100644 --- a/maps/example/example_jobs.dm +++ b/maps/example/example_jobs.dm @@ -1,7 +1,6 @@ /datum/map/example default_job_type = /datum/job/example default_department_type = /decl/department/example - id_hud_icons = 'maps/example/hud.dmi' /datum/job/example title = "Tourist" @@ -13,9 +12,10 @@ access = list() minimal_access = list() outfit_type = /decl/outfit/job/tourist + hud_icon = 'maps/example/hud.dmi' department_types = list( /decl/department/example - ) + ) /decl/outfit/job/tourist name = "Job - Testing Site Tourist" diff --git a/maps/example/hud.dmi b/maps/example/hud.dmi index 89dd2f9a079..c2c456e9d50 100644 Binary files a/maps/example/hud.dmi and b/maps/example/hud.dmi differ diff --git a/maps/exodus/exodus_antagonism.dm b/maps/exodus/exodus_antagonism.dm index 322bebbf1d3..e09d2ddc900 100644 --- a/maps/exodus/exodus_antagonism.dm +++ b/maps/exodus/exodus_antagonism.dm @@ -1,16 +1,16 @@ /decl/special_role/traitor/Initialize() . = ..() LAZYINITLIST(protected_jobs) - protected_jobs |= list(/datum/job/officer, /datum/job/warden, /datum/job/detective, /datum/job/captain, /datum/job/lawyer, /datum/job/hos) + protected_jobs |= list(/datum/job/standard/officer, /datum/job/standard/warden, /datum/job/standard/detective, /datum/job/standard/captain, /datum/job/standard/lawyer, /datum/job/standard/hos) /decl/special_role/cultist/Initialize() . = ..() LAZYINITLIST(restricted_jobs) - restricted_jobs |= list(/datum/job/lawyer, /datum/job/captain, /datum/job/hos) + restricted_jobs |= list(/datum/job/standard/lawyer, /datum/job/standard/captain, /datum/job/standard/hos) LAZYINITLIST(protected_jobs) - protected_jobs |= list(/datum/job/officer, /datum/job/warden, /datum/job/detective) + protected_jobs |= list(/datum/job/standard/officer, /datum/job/standard/warden, /datum/job/standard/detective) LAZYINITLIST(blacklisted_jobs) - blacklisted_jobs |= list(/datum/job/chaplain, /datum/job/counselor) + blacklisted_jobs |= list(/datum/job/standard/chaplain, /datum/job/standard/counselor) /decl/special_role/loyalist command_department_id = /decl/department/command diff --git a/maps/exodus/exodus_goals.dm b/maps/exodus/exodus_goals.dm index 72c324b5c1d..8275bc4173b 100644 --- a/maps/exodus/exodus_goals.dm +++ b/maps/exodus/exodus_goals.dm @@ -29,12 +29,12 @@ var/global/list/exodus_paperwork_end_areas = list() /datum/goal/department/paperwork/exodus paperwork_types = list(/obj/item/paperwork/exodus) signatory_job_list = list( - /datum/job/captain, - /datum/job/hop, - /datum/job/cmo, - /datum/job/chief_engineer, - /datum/job/rd, - /datum/job/hos + /datum/job/standard/captain, + /datum/job/standard/hop, + /datum/job/standard/cmo, + /datum/job/standard/chief_engineer, + /datum/job/standard/rd, + /datum/job/standard/hos ) /datum/goal/department/paperwork/exodus/get_paper_spawn_turfs() diff --git a/maps/exodus/exodus_jobs.dm b/maps/exodus/exodus_jobs.dm index df6c7b54782..6ca8b4d8ab4 100644 --- a/maps/exodus/exodus_jobs.dm +++ b/maps/exodus/exodus_jobs.dm @@ -7,82 +7,81 @@ spawn_decl = /decl/spawnpoint/gateway /datum/map/exodus - default_job_type = /datum/job/assistant + default_job_type = /datum/job/standard/assistant default_department_type = /decl/department/civilian - id_hud_icons = 'maps/exodus/hud.dmi' allowed_jobs = list( - /datum/job/captain, - /datum/job/hop, - /datum/job/chaplain, - /datum/job/bartender, - /datum/job/chef, - /datum/job/hydro, - /datum/job/qm, - /datum/job/cargo_tech, - /datum/job/mining, - /datum/job/janitor, - /datum/job/librarian, - /datum/job/lawyer, - /datum/job/chief_engineer, - /datum/job/engineer, - /datum/job/cmo, - /datum/job/doctor, - /datum/job/chemist, - /datum/job/counselor, - /datum/job/rd, - /datum/job/scientist, - /datum/job/roboticist, - /datum/job/hos, - /datum/job/detective, - /datum/job/warden, - /datum/job/officer, - /datum/job/robot, - /datum/job/computer + /datum/job/standard/captain, + /datum/job/standard/hop, + /datum/job/standard/chaplain, + /datum/job/standard/bartender, + /datum/job/standard/chef, + /datum/job/standard/hydro, + /datum/job/standard/qm, + /datum/job/standard/cargo_tech, + /datum/job/standard/mining, + /datum/job/standard/janitor, + /datum/job/standard/librarian, + /datum/job/standard/lawyer, + /datum/job/standard/chief_engineer, + /datum/job/standard/engineer, + /datum/job/standard/cmo, + /datum/job/standard/doctor, + /datum/job/standard/chemist, + /datum/job/standard/counselor, + /datum/job/standard/rd, + /datum/job/standard/scientist, + /datum/job/standard/roboticist, + /datum/job/standard/hos, + /datum/job/standard/detective, + /datum/job/standard/warden, + /datum/job/standard/officer, + /datum/job/standard/robot, + /datum/job/standard/computer ) species_to_job_whitelist = list( /decl/species/adherent = list( - /datum/job/computer, - /datum/job/robot, - /datum/job/assistant, - /datum/job/janitor, - /datum/job/chef, - /datum/job/bartender, - /datum/job/cargo_tech, - /datum/job/engineer, - /datum/job/roboticist, - /datum/job/chemist, - /datum/job/scientist, - /datum/job/mining + /datum/job/standard/computer, + /datum/job/standard/robot, + /datum/job/standard/assistant, + /datum/job/standard/janitor, + /datum/job/standard/chef, + /datum/job/standard/bartender, + /datum/job/standard/cargo_tech, + /datum/job/standard/engineer, + /datum/job/standard/roboticist, + /datum/job/standard/chemist, + /datum/job/standard/scientist, + /datum/job/standard/mining ), /decl/species/utility_frame = list( - /datum/job/computer, - /datum/job/robot, - /datum/job/assistant, - /datum/job/janitor, - /datum/job/chef, - /datum/job/bartender, - /datum/job/cargo_tech, - /datum/job/engineer, - /datum/job/roboticist, - /datum/job/chemist, - /datum/job/scientist, - /datum/job/mining + /datum/job/standard/computer, + /datum/job/standard/robot, + /datum/job/standard/assistant, + /datum/job/standard/janitor, + /datum/job/standard/chef, + /datum/job/standard/bartender, + /datum/job/standard/cargo_tech, + /datum/job/standard/engineer, + /datum/job/standard/roboticist, + /datum/job/standard/chemist, + /datum/job/standard/scientist, + /datum/job/standard/mining ), /decl/species/serpentid = list( - /datum/job/computer, - /datum/job/robot, - /datum/job/assistant, - /datum/job/janitor, - /datum/job/chef, - /datum/job/bartender, - /datum/job/cargo_tech, - /datum/job/roboticist, - /datum/job/chemist + /datum/job/standard/computer, + /datum/job/standard/robot, + /datum/job/standard/assistant, + /datum/job/standard/janitor, + /datum/job/standard/chef, + /datum/job/standard/bartender, + /datum/job/standard/cargo_tech, + /datum/job/standard/roboticist, + /datum/job/standard/chemist ) ) -#define HUMAN_ONLY_JOBS /datum/job/captain, /datum/job/hop, /datum/job/hos +#define HUMAN_ONLY_JOBS /datum/job/standard/captain, /datum/job/standard/hop, /datum/job/standard/hos species_to_job_blacklist = list( /decl/species/unathi = list( HUMAN_ONLY_JOBS diff --git a/maps/exodus/exodus_loadout.dm b/maps/exodus/exodus_loadout.dm index 107fa0ae8c9..d5f70fdf957 100644 --- a/maps/exodus/exodus_loadout.dm +++ b/maps/exodus/exodus_loadout.dm @@ -2,7 +2,7 @@ name = "religious insignia" path = /obj/item/clothing/insignia cost = 1 - allowed_roles = list(/datum/job/chaplain) + allowed_roles = list(/datum/job/standard/chaplain) uid = "gear_accessory_insignia" /decl/loadout_option/accessory/insignia/Initialize() diff --git a/maps/exodus/hud.dmi b/maps/exodus/hud.dmi deleted file mode 100644 index 952d808b00e..00000000000 Binary files a/maps/exodus/hud.dmi and /dev/null differ diff --git a/maps/ministation/hud.dmi b/maps/ministation/hud.dmi index d4fed05d840..8a3e91cf3a7 100644 Binary files a/maps/ministation/hud.dmi and b/maps/ministation/hud.dmi differ diff --git a/maps/ministation/jobs/civilian.dm b/maps/ministation/jobs/civilian.dm index 3d1601530d6..18024cc2379 100644 --- a/maps/ministation/jobs/civilian.dm +++ b/maps/ministation/jobs/civilian.dm @@ -1,15 +1,14 @@ -/datum/job/assistant/ministation +/datum/job/standard/assistant/ministation title = "Recruit" supervisors = "absolutely everyone" alt_titles = list("Technical Recruit","Medical Recruit","Research Recruit","Visitor") outfit_type = /decl/outfit/job/ministation_assistant event_categories = list(ASSIGNMENT_GARDENER) - hud_icon = "hudassistant" /decl/outfit/job/ministation_assistant name = "Job - Ministation Assistant" -/datum/job/bartender/ministation +/datum/job/standard/bartender/ministation title = "Bartender" alt_titles = list("Cook","Barista") supervisors = "the Lieutenant and the Captain" @@ -30,7 +29,7 @@ ) skill_points = 30 -/datum/job/cargo_tech/ministation +/datum/job/standard/cargo_tech/ministation title = "Cargo Technician" alt_titles = list("Shaft Miner","Drill Technician","Prospector") supervisors = "the Lieutenant and the Captain" @@ -73,7 +72,7 @@ ) skill_points = 30 -/datum/job/janitor/ministation +/datum/job/standard/janitor/ministation total_positions = 2 supervisors = "the Lieutenant and the Captain" economic_power = 3 @@ -84,7 +83,7 @@ ) skill_points = 28 -/datum/job/librarian/ministation +/datum/job/standard/librarian/ministation spawn_positions = 2 supervisors = "the Lieutenant, the Captain, and the smell of old paper" economic_power = 5 diff --git a/maps/ministation/jobs/command.dm b/maps/ministation/jobs/command.dm index a823a716095..1a27ff0736d 100644 --- a/maps/ministation/jobs/command.dm +++ b/maps/ministation/jobs/command.dm @@ -1,6 +1,7 @@ -/datum/job/captain/ministation +/datum/job/standard/captain/ministation supervisors = "your profit margin, your conscience, and the watchful eye of the Tradehouse Rep" outfit_type = /decl/outfit/job/ministation/captain + hud_icon = 'maps/ministation/hud.dmi' min_skill = list( SKILL_LITERACY = SKILL_ADEPT, SKILL_WEAPONS = SKILL_ADEPT, @@ -13,7 +14,7 @@ ) skill_points = 40 -/datum/job/captain/ministation/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/standard/captain/ministation/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) . = ..() if(H) H.verbs |= /mob/proc/freetradeunion_rename_company @@ -33,10 +34,11 @@ command_announcement.Announce("Congratulations to all members of [capitalize(global.using_map.company_name)] on the new name. Their rebranding has changed the [global.using_map.company_short] market value by [0.01*rand(-10,10)]%.", "Trade Union Name Change") verbs -= /mob/proc/freetradeunion_rename_company -/datum/job/hop/ministation +/datum/job/standard/hop/ministation title = "Lieutenant" outfit_type = /decl/outfit/job/ministation/hop - hud_icon = "hudlieutenant" + hud_icon = 'maps/ministation/hud.dmi' + hud_icon_state = "hudlieutenant" min_skill = list( SKILL_LITERACY = SKILL_ADEPT, SKILL_WEAPONS = SKILL_BASIC, diff --git a/maps/ministation/jobs/engineering.dm b/maps/ministation/jobs/engineering.dm index d780f2353d2..a3cb57fbc0a 100644 --- a/maps/ministation/jobs/engineering.dm +++ b/maps/ministation/jobs/engineering.dm @@ -1,4 +1,4 @@ -/datum/job/engineer/ministation +/datum/job/standard/engineer/ministation title = "Station Engineer" supervisors = "the Head Engineer" total_positions = 2 @@ -32,9 +32,8 @@ skill_points = 30 alt_titles = list("Atmospheric Technician", "Electrician", "Maintenance Technician") -/datum/job/chief_engineer/ministation +/datum/job/standard/chief_engineer/ministation title = "Head Engineer" - hud_icon = "hudchiefengineer" access = list( access_engine, access_engine_equip, diff --git a/maps/ministation/jobs/medical.dm b/maps/ministation/jobs/medical.dm index 0e91a2d945b..1dd568c8176 100644 --- a/maps/ministation/jobs/medical.dm +++ b/maps/ministation/jobs/medical.dm @@ -1,4 +1,4 @@ -/datum/job/doctor/ministation +/datum/job/standard/doctor/ministation title = "Medical Doctor" supervisors = "the Head Doctor" total_positions = 2 @@ -35,13 +35,12 @@ ) outfit_type = /decl/outfit/job/ministation/doctor -/datum/job/cmo/ministation +/datum/job/standard/cmo/ministation title = "Head Doctor" supervisors = "the Captain and your own ethics" outfit_type = /decl/outfit/job/ministation/doctor/head alt_titles = list("Chief Medical Officer", "Head Surgeon") skill_points = 38 - hud_icon = "hudheaddoctor" access = list( access_medical, access_medical_equip, diff --git a/maps/ministation/jobs/science.dm b/maps/ministation/jobs/science.dm index f2d80cbe65f..7b8e61e4591 100644 --- a/maps/ministation/jobs/science.dm +++ b/maps/ministation/jobs/science.dm @@ -1,14 +1,13 @@ -/datum/job/scientist/ministation +/datum/job/standard/scientist/ministation title = "Researcher" alt_titles = list("Scientist","Xenobiologist","Roboticist","Xenobotanist") supervisors = "the Head Researcher" spawn_positions = 1 total_positions = 2 outfit_type = /decl/outfit/job/ministation/scientist - hud_icon = "hudscientist" skill_points = 34 -/datum/job/rd/ministation +/datum/job/standard/rd/ministation title = "Research Director" alt_titles = list("Head Researcher", "Chief Researcher") outfit_type = /decl/outfit/job/ministation/scientist/head @@ -27,7 +26,6 @@ SKILL_SCIENCE = SKILL_MAX ) skill_points = 40 - hud_icon = "hudheadscientist" access = list( access_rd, access_bridge, diff --git a/maps/ministation/jobs/security.dm b/maps/ministation/jobs/security.dm index 55ea8e841e2..242c665e7f3 100644 --- a/maps/ministation/jobs/security.dm +++ b/maps/ministation/jobs/security.dm @@ -1,4 +1,4 @@ -/datum/job/officer/ministation +/datum/job/standard/officer/ministation title = "Security Officer" alt_titles = list("Warden") spawn_positions = 1 @@ -22,7 +22,7 @@ ) skill_points = 30 -/datum/job/detective/ministation +/datum/job/standard/detective/ministation alt_titles = list("Inspector") supervisors = "Justice... and the Trademaster" spawn_positions = 1 @@ -55,9 +55,8 @@ ) skill_points = 34 -/datum/job/hos/ministation +/datum/job/standard/hos/ministation outfit_type = /decl/outfit/job/ministation/security/head - hud_icon = "hudhos" access = list( access_security, access_sec_doors, diff --git a/maps/ministation/jobs/tradehouse.dm b/maps/ministation/jobs/tradehouse.dm index 1e167615cf8..daa715dddd5 100644 --- a/maps/ministation/jobs/tradehouse.dm +++ b/maps/ministation/jobs/tradehouse.dm @@ -1,7 +1,8 @@ /datum/job/tradehouse_rep title = "Tradehouse Representative" alt_titles = list("Narc") - hud_icon = "hudnarc" + hud_icon_state = "hudnarc" + hud_icon = 'maps/ministation/hud.dmi' spawn_positions = 1 total_positions = 2 req_admin_notify = 1 diff --git a/maps/ministation/ministation_jobs.dm b/maps/ministation/ministation_jobs.dm index 92e28630c1f..17bb28b7b9e 100644 --- a/maps/ministation/ministation_jobs.dm +++ b/maps/ministation/ministation_jobs.dm @@ -1,25 +1,24 @@ /datum/map/ministation - default_job_type = /datum/job/assistant/ministation + default_job_type = /datum/job/standard/assistant/ministation default_department_type = /decl/department/civilian - id_hud_icons = 'maps/ministation/hud.dmi' allowed_jobs = list( - /datum/job/assistant/ministation, - /datum/job/bartender/ministation, - /datum/job/captain/ministation, - /datum/job/cargo_tech/ministation, - /datum/job/robot, - /datum/job/computer, - /datum/job/detective/ministation, - /datum/job/doctor/ministation, - /datum/job/cmo/ministation, - /datum/job/engineer/ministation, - /datum/job/chief_engineer/ministation, - /datum/job/hop/ministation, - /datum/job/janitor/ministation, - /datum/job/scientist/ministation, - /datum/job/rd/ministation, - /datum/job/officer/ministation, - /datum/job/hos/ministation, - /datum/job/librarian/ministation, + /datum/job/standard/assistant/ministation, + /datum/job/standard/bartender/ministation, + /datum/job/standard/captain/ministation, + /datum/job/standard/cargo_tech/ministation, + /datum/job/standard/robot, + /datum/job/standard/computer, + /datum/job/standard/detective/ministation, + /datum/job/standard/doctor/ministation, + /datum/job/standard/cmo/ministation, + /datum/job/standard/engineer/ministation, + /datum/job/standard/chief_engineer/ministation, + /datum/job/standard/hop/ministation, + /datum/job/standard/janitor/ministation, + /datum/job/standard/scientist/ministation, + /datum/job/standard/rd/ministation, + /datum/job/standard/officer/ministation, + /datum/job/standard/hos/ministation, + /datum/job/standard/librarian/ministation, /datum/job/tradehouse_rep ) \ No newline at end of file diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm index a59a87a79ad..8466fb6b71e 100644 --- a/maps/modpack_testing/modpack_testing.dm +++ b/maps/modpack_testing/modpack_testing.dm @@ -5,6 +5,7 @@ #include "../../mods/content/mundane.dm" #include "../../mods/content/scaling_descriptors.dm" + #include "../../mods/content/standard_jobs/_standard_jobs.dme" #include "../../mods/content/bigpharma/_bigpharma.dme" #include "../../mods/content/byond_membership/_byond_membership.dm" diff --git a/maps/shaded_hills/icons/hud.dmi b/maps/shaded_hills/icons/hud.dmi deleted file mode 100644 index c8c2fcf8bd1..00000000000 Binary files a/maps/shaded_hills/icons/hud.dmi and /dev/null differ diff --git a/maps/shaded_hills/jobs/_jobs.dm b/maps/shaded_hills/jobs/_jobs.dm index 638c6ff7bf5..7eb2719f661 100644 --- a/maps/shaded_hills/jobs/_jobs.dm +++ b/maps/shaded_hills/jobs/_jobs.dm @@ -1,6 +1,5 @@ /datum/map/shaded_hills - id_hud_icons = 'maps/shaded_hills/icons/hud.dmi' - allowed_jobs = list( + allowed_jobs = list( /datum/job/shaded_hills/visitor/traveller, /datum/job/shaded_hills/visitor/traveller/learned, /datum/job/shaded_hills/visitor/beggar_knight, @@ -48,6 +47,7 @@ /datum/job/shaded_hills abstract_type = /datum/job/shaded_hills + hud_icon_state = "hudblank" department_types = list( /decl/department/shaded_hills/locals ) diff --git a/maps/tradeship/jobs/_goals.dm b/maps/tradeship/jobs/_goals.dm index e9d719bd211..ac7cc4422dc 100644 --- a/maps/tradeship/jobs/_goals.dm +++ b/maps/tradeship/jobs/_goals.dm @@ -26,7 +26,7 @@ var/global/list/tradeship_paperwork_end_areas = list() /datum/goal/department/paperwork/tradeship paperwork_types = list(/obj/item/paperwork/tradeship) signatory_job_list = list( - /datum/job/captain/tradeship, + /datum/job/standard/captain/tradeship, /datum/job/tradeship_first_mate ) diff --git a/maps/tradeship/jobs/civilian.dm b/maps/tradeship/jobs/civilian.dm index f491bc953a3..edb03def44a 100644 --- a/maps/tradeship/jobs/civilian.dm +++ b/maps/tradeship/jobs/civilian.dm @@ -1,4 +1,4 @@ -/datum/job/assistant/tradeship +/datum/job/standard/assistant/tradeship title = "Deck Hand" supervisors = "literally everyone, you bottom feeder" outfit_type = /decl/outfit/job/tradeship/hand diff --git a/maps/tradeship/jobs/command.dm b/maps/tradeship/jobs/command.dm index 0d124a9841e..3647a632760 100644 --- a/maps/tradeship/jobs/command.dm +++ b/maps/tradeship/jobs/command.dm @@ -1,4 +1,4 @@ -/datum/job/captain/tradeship +/datum/job/standard/captain/tradeship title = "Captain" supervisors = "your profit margin, your conscience, and the Trademaster" outfit_type = /decl/outfit/job/tradeship/captain @@ -11,7 +11,7 @@ ideal_character_age = 70 forced_spawnpoint = /decl/spawnpoint/cryo/captain -/datum/job/captain/tradeship/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/standard/captain/tradeship/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) . = ..() if(H) H.verbs |= /mob/proc/tradehouse_rename_ship @@ -55,6 +55,7 @@ /datum/job/tradeship_first_mate title = "First Mate" supervisors = "the Captain" + hud_icon = 'maps/tradeship/hud.dmi' outfit_type = /decl/outfit/job/tradeship/mate head_position = 1 department_types = list( diff --git a/maps/tradeship/jobs/engineering.dm b/maps/tradeship/jobs/engineering.dm index 1938f034a31..62a9c6659c4 100644 --- a/maps/tradeship/jobs/engineering.dm +++ b/maps/tradeship/jobs/engineering.dm @@ -1,10 +1,10 @@ -/datum/job/engineer/tradeship +/datum/job/standard/engineer/tradeship title = "Junior Engineer" supervisors = "the Head Engineer" outfit_type = /decl/outfit/job/tradeship/hand/engine alt_titles = list() -/datum/job/chief_engineer/tradeship +/datum/job/standard/chief_engineer/tradeship title = "Head Engineer" outfit_type = /decl/outfit/job/tradeship/chief_engineer alt_titles = list() diff --git a/maps/tradeship/jobs/medical.dm b/maps/tradeship/jobs/medical.dm index 03b480321b8..bedcf558453 100644 --- a/maps/tradeship/jobs/medical.dm +++ b/maps/tradeship/jobs/medical.dm @@ -1,4 +1,4 @@ -/datum/job/doctor/tradeship +/datum/job/standard/doctor/tradeship title = "Junior Doctor" supervisors = "the Head Doctor and the Captain" alt_titles = list() @@ -33,7 +33,7 @@ outfit_type = /decl/outfit/job/tradeship/doc/junior event_categories = list(ASSIGNMENT_MEDICAL) -/datum/job/cmo/tradeship +/datum/job/standard/cmo/tradeship title = "Head Doctor" supervisors = "the Captain and your own ethics" outfit_type = /decl/outfit/job/tradeship/doc diff --git a/maps/tradeship/jobs/science.dm b/maps/tradeship/jobs/science.dm index c14bb9e5b92..d941587b27d 100644 --- a/maps/tradeship/jobs/science.dm +++ b/maps/tradeship/jobs/science.dm @@ -1,4 +1,4 @@ -/datum/job/scientist/tradeship +/datum/job/standard/scientist/tradeship title = "Junior Researcher" supervisors = "the Head Researcher and the Captain" total_positions = 2 @@ -8,7 +8,7 @@ // Smaller crew, more points. skill_points = 24 -/datum/job/rd/tradeship +/datum/job/standard/rd/tradeship title = "Head Researcher" alt_titles = list() outfit_type = /decl/outfit/job/tradeship/hand/researcher diff --git a/maps/tradeship/tradeship_jobs.dm b/maps/tradeship/tradeship_jobs.dm index 61b526624e0..71ba7143cc3 100644 --- a/maps/tradeship/tradeship_jobs.dm +++ b/maps/tradeship/tradeship_jobs.dm @@ -1,19 +1,18 @@ /datum/map/tradeship - default_job_type = /datum/job/assistant/tradeship + default_job_type = /datum/job/standard/assistant/tradeship default_department_type = /decl/department/civilian default_law_type = /datum/ai_laws/corporate - id_hud_icons = 'maps/tradeship/hud.dmi' allowed_jobs = list( - /datum/job/assistant/tradeship, - /datum/job/captain/tradeship, + /datum/job/standard/assistant/tradeship, + /datum/job/standard/captain/tradeship, /datum/job/tradeship_first_mate, - /datum/job/cmo/tradeship, - /datum/job/doctor/tradeship, - /datum/job/chief_engineer/tradeship, - /datum/job/engineer/tradeship, - /datum/job/rd/tradeship, - /datum/job/scientist/tradeship, - /datum/job/robot + /datum/job/standard/cmo/tradeship, + /datum/job/standard/doctor/tradeship, + /datum/job/standard/chief_engineer/tradeship, + /datum/job/standard/engineer/tradeship, + /datum/job/standard/rd/tradeship, + /datum/job/standard/scientist/tradeship, + /datum/job/standard/robot ) /obj/machinery/suit_cycler/tradeship diff --git a/maps/tradeship/tradeship_spawnpoints.dm b/maps/tradeship/tradeship_spawnpoints.dm index c4be5d21c35..36e4d8acdb7 100644 --- a/maps/tradeship/tradeship_spawnpoints.dm +++ b/maps/tradeship/tradeship_spawnpoints.dm @@ -9,7 +9,7 @@ /decl/spawnpoint/cryo name = "Port Cryogenic Storage" spawn_announcement = "has completed revival in the port cryogenics bay" - disallow_job = list(/datum/job/robot) + disallow_job = list(/datum/job/standard/robot) /decl/spawnpoint/cryo/two name = "Starboard Cryogenic Storage" @@ -22,7 +22,7 @@ /decl/spawnpoint/cryo/captain name = "Captain Compartment" spawn_announcement = "has completed revival in the captain compartment" - restrict_job = list(/datum/job/captain/tradeship) + restrict_job = list(/datum/job/standard/captain/tradeship) uid = "spawn_cryo_captain" /obj/abstract/landmark/latejoin/cryo_captain diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm index 3f0e0c3023d..4347eed5419 100644 --- a/maps/~mapsystem/maps.dm +++ b/maps/~mapsystem/maps.dm @@ -113,7 +113,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable var/default_law_type = /datum/ai_laws/asimov // The default lawset use by synth units, if not overriden by their laws var. var/security_state = /decl/security_state/default // The default security state system to use. - var/id_hud_icons = 'icons/mob/hud.dmi' // Used by the ID HUD (primarily sechud) overlay. + var/hud_icons = 'icons/screen/hud.dmi' // Used by the ID HUD (primarily sechud) overlay. + var/implant_hud_icons = 'icons/screen/hud_implants.dmi' + var/med_hud_icons = 'icons/screen/hud_med.dmi' var/num_exoplanets = 0 var/force_exoplanet_type // Used to override exoplanet weighting and always pick the same exoplanet. @@ -274,10 +276,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable if(!allowed_jobs) allowed_jobs = list() - for(var/jtype in subtypesof(/datum/job)) - var/datum/job/job = jtype - if(initial(job.available_by_default)) - allowed_jobs += jtype + for(var/datum/job/job as anything in subtypesof(/datum/job)) + if(!TYPE_IS_ABSTRACT(job) && job::available_by_default) + allowed_jobs += job if(ispath(default_job_type, /datum/job)) var/datum/job/J = default_job_type diff --git a/mods/content/standard_jobs/_standard_jobs.dme b/mods/content/standard_jobs/_standard_jobs.dme index cbba09eacef..a17a75892bb 100644 --- a/mods/content/standard_jobs/_standard_jobs.dme +++ b/mods/content/standard_jobs/_standard_jobs.dme @@ -11,6 +11,7 @@ #include "departments\security.dm" #include "departments\service.dm" #include "departments\supply.dm" +#include "jobs\_job.dm" #include "jobs\captain.dm" #include "jobs\civilian.dm" #include "jobs\engineering.dm" diff --git a/mods/content/standard_jobs/icons/hud.dmi b/mods/content/standard_jobs/icons/hud.dmi new file mode 100644 index 00000000000..ccea1d4a211 Binary files /dev/null and b/mods/content/standard_jobs/icons/hud.dmi differ diff --git a/mods/content/standard_jobs/jobs/_job.dm b/mods/content/standard_jobs/jobs/_job.dm new file mode 100644 index 00000000000..6869734493a --- /dev/null +++ b/mods/content/standard_jobs/jobs/_job.dm @@ -0,0 +1,3 @@ +/datum/job/standard + abstract_type = /datum/job/standard + hud_icon = 'mods/content/standard_jobs/icons/hud.dmi' diff --git a/mods/content/standard_jobs/jobs/captain.dm b/mods/content/standard_jobs/jobs/captain.dm index c0782377252..d7abb62e0cd 100644 --- a/mods/content/standard_jobs/jobs/captain.dm +++ b/mods/content/standard_jobs/jobs/captain.dm @@ -1,5 +1,6 @@ -/datum/job/captain +/datum/job/standard/captain title = "Captain" + hud_icon_state = "hudcaptain" head_position = 1 department_types = list(/decl/department/command) total_positions = 1 @@ -33,16 +34,17 @@ /datum/computer_file/program/reports ) -/datum/job/captain/equip_job(var/mob/living/human/H) +/datum/job/standard/captain/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(src) -/datum/job/captain/get_access() +/datum/job/standard/captain/get_access() return get_all_station_access() -/datum/job/hop +/datum/job/standard/hop title = "Head of Personnel" + hud_icon_state = "hudhop" head_position = 1 department_types = list( /decl/department/command, diff --git a/mods/content/standard_jobs/jobs/civilian.dm b/mods/content/standard_jobs/jobs/civilian.dm index af71d84e536..1ce8eeb39d0 100644 --- a/mods/content/standard_jobs/jobs/civilian.dm +++ b/mods/content/standard_jobs/jobs/civilian.dm @@ -1,5 +1,6 @@ -/datum/job/assistant +/datum/job/standard/assistant title = "Assistant" + hud_icon_state = "hudassistant" total_positions = -1 spawn_positions = -1 supervisors = "absolutely everyone" @@ -10,13 +11,14 @@ outfit_type = /decl/outfit/job/generic/assistant department_types = list(/decl/department/civilian) -/datum/job/assistant/get_access() +/datum/job/standard/assistant/get_access() if(get_config_value(/decl/config/toggle/assistant_maint)) return list(access_maint_tunnels) return list() -/datum/job/chaplain +/datum/job/standard/chaplain title = "Chaplain" + hud_icon_state = "hudchaplain" // TODO: not always a crucifix department_types = list(/decl/department/civilian) total_positions = 1 spawn_positions = 1 @@ -42,9 +44,10 @@ software_on_spawn = list(/datum/computer_file/program/reports) //Food -/datum/job/bartender +/datum/job/standard/bartender title = "Bartender" department_types = list(/decl/department/service) + hud_icon_state = "hudbartender" total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" @@ -68,8 +71,9 @@ SKILL_CHEMISTRY = SKILL_BASIC ) -/datum/job/chef +/datum/job/standard/chef title = "Chef" + hud_icon_state = "hudchef" department_types = list(/decl/department/service) total_positions = 2 spawn_positions = 2 @@ -89,8 +93,9 @@ SKILL_CHEMISTRY = SKILL_BASIC ) -/datum/job/hydro +/datum/job/standard/hydro title = "Gardener" + hud_icon_state = "hudgardener" department_types = list(/decl/department/service) total_positions = 2 spawn_positions = 1 @@ -111,8 +116,9 @@ event_categories = list(ASSIGNMENT_GARDENER) //Cargo -/datum/job/qm +/datum/job/standard/qm title = "Quartermaster" + hud_icon_state = "hudqm" department_types = list(/decl/department/supply) total_positions = 1 spawn_positions = 1 @@ -156,11 +162,12 @@ /datum/computer_file/program/reports ) -/datum/job/cargo_tech +/datum/job/standard/cargo_tech title = "Cargo Technician" department_types = list(/decl/department/supply) total_positions = 2 spawn_positions = 2 + hud_icon_state = "hudcargo" supervisors = "the quartermaster and the head of personnel" access = list( access_maint_tunnels, @@ -192,8 +199,9 @@ /datum/computer_file/program/reports ) -/datum/job/mining +/datum/job/standard/mining title = "Shaft Miner" + hud_icon_state = "hudminer" department_types = list(/decl/department/supply) total_positions = 3 spawn_positions = 3 @@ -227,11 +235,12 @@ SKILL_PILOT = SKILL_MAX ) -/datum/job/janitor +/datum/job/standard/janitor title = "Janitor" department_types = list(/decl/department/service) total_positions = 1 spawn_positions = 1 + hud_icon_state = "hudjanitor" supervisors = "the head of personnel" access = list( access_janitor, @@ -261,8 +270,9 @@ event_categories = list(ASSIGNMENT_JANITOR) //More or less assistants -/datum/job/librarian +/datum/job/standard/librarian title = "Librarian" + hud_icon_state = "hudlibrarian" department_types = list(/decl/department/civilian) total_positions = 1 spawn_positions = 1 @@ -281,8 +291,9 @@ skill_points = 20 software_on_spawn = list(/datum/computer_file/program/reports) -/datum/job/lawyer +/datum/job/standard/lawyer title = "Internal Affairs Agent" + hud_icon_state = "hudia" department_types = list(/decl/department/support) total_positions = 2 spawn_positions = 2 @@ -308,7 +319,7 @@ skill_points = 20 software_on_spawn = list(/datum/computer_file/program/reports) -/datum/job/lawyer/equip_job(var/mob/living/human/H) +/datum/job/standard/lawyer/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(H) diff --git a/mods/content/standard_jobs/jobs/engineering.dm b/mods/content/standard_jobs/jobs/engineering.dm index 7d22402307d..84630cb60ba 100644 --- a/mods/content/standard_jobs/jobs/engineering.dm +++ b/mods/content/standard_jobs/jobs/engineering.dm @@ -1,5 +1,6 @@ -/datum/job/chief_engineer +/datum/job/standard/chief_engineer title = "Chief Engineer" + hud_icon_state = "hudce" head_position = 1 department_types = list( /decl/department/engineering, @@ -87,10 +88,10 @@ ) event_categories = list(ASSIGNMENT_ENGINEER) -/datum/job/engineer +/datum/job/standard/engineer title = "Engineer" department_types = list(/decl/department/engineering) - + hud_icon_state = "hudengineer" total_positions = 8 spawn_positions = 7 supervisors = "the chief engineer" diff --git a/mods/content/standard_jobs/jobs/medical.dm b/mods/content/standard_jobs/jobs/medical.dm index f2c11cb05d1..d1a5517f1c3 100644 --- a/mods/content/standard_jobs/jobs/medical.dm +++ b/mods/content/standard_jobs/jobs/medical.dm @@ -1,5 +1,6 @@ -/datum/job/cmo +/datum/job/standard/cmo title = "Chief Medical Officer" + hud_icon_state = "hudcmo" head_position = 1 department_types = list( /decl/department/medical, @@ -73,8 +74,9 @@ ) event_categories = list(ASSIGNMENT_MEDICAL) -/datum/job/doctor +/datum/job/standard/doctor title = "Medical Doctor" + hud_icon_state = "hudmed" department_types = list(/decl/department/medical) minimal_player_age = 3 total_positions = 5 @@ -126,8 +128,9 @@ skill_points = 22 event_categories = list(ASSIGNMENT_MEDICAL) -/datum/job/chemist +/datum/job/standard/chemist title = "Pharmacist" + hud_icon_state = "hudpharmacist" department_types = list(/decl/department/medical) minimal_player_age = 7 total_positions = 2 @@ -161,8 +164,9 @@ ) skill_points = 16 -/datum/job/counselor +/datum/job/standard/counselor title = "Counselor" + hud_icon_state = "hudmed" alt_titles = list("Mentalist") department_types = list(/decl/department/medical) total_positions = 1 diff --git a/mods/content/standard_jobs/jobs/science.dm b/mods/content/standard_jobs/jobs/science.dm index a7a074efbce..548f9147ea7 100644 --- a/mods/content/standard_jobs/jobs/science.dm +++ b/mods/content/standard_jobs/jobs/science.dm @@ -1,10 +1,11 @@ -/datum/job/rd +/datum/job/standard/rd title = "Chief Science Officer" head_position = 1 department_types = list( /decl/department/science, /decl/department/command ) + hud_icon_state = "hudrd" total_positions = 1 spawn_positions = 1 supervisors = "the captain" @@ -74,13 +75,14 @@ skill_points = 30 event_categories = list(ASSIGNMENT_SCIENTIST) -/datum/job/scientist +/datum/job/standard/scientist title = "Scientist" department_types = list(/decl/department/science) total_positions = 6 spawn_positions = 4 supervisors = "the Chief Science Officer" selection_color = "#633d63" + hud_icon_state = "hudscientist" economic_power = 7 access = list( access_robotics, @@ -122,8 +124,9 @@ skill_points = 20 event_categories = list(ASSIGNMENT_SCIENTIST) -/datum/job/roboticist +/datum/job/standard/roboticist title = "Roboticist" + hud_icon_state = "hudroboticist" department_types = list(/decl/department/science) total_positions = 2 spawn_positions = 2 diff --git a/mods/content/standard_jobs/jobs/security.dm b/mods/content/standard_jobs/jobs/security.dm index 09751719b28..b7ae8b0036b 100644 --- a/mods/content/standard_jobs/jobs/security.dm +++ b/mods/content/standard_jobs/jobs/security.dm @@ -1,5 +1,6 @@ -/datum/job/hos +/datum/job/standard/hos title = "Head of Security" + hud_icon_state = "hudhos" head_position = 1 department_types = list( /decl/department/security, @@ -85,14 +86,15 @@ ) event_categories = list(ASSIGNMENT_SECURITY) -/datum/job/hos/equip_job(var/mob/living/human/H) +/datum/job/standard/hos/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(H) -/datum/job/warden +/datum/job/standard/warden title = "Warden" department_types = list(/decl/department/security) + hud_icon_state = "hudwarden" total_positions = 1 spawn_positions = 1 supervisors = "the head of security" @@ -138,10 +140,10 @@ /datum/computer_file/program/camera_monitor ) -/datum/job/detective +/datum/job/standard/detective title = "Detective" department_types = list(/decl/department/security) - + hud_icon_state = "huddetective" total_positions = 2 spawn_positions = 2 supervisors = "the head of security" @@ -186,8 +188,9 @@ /datum/computer_file/program/camera_monitor ) -/datum/job/officer +/datum/job/standard/officer title = "Security Officer" + hud_icon_state = "hudsec" department_types = list(/decl/department/security) total_positions = 4 spawn_positions = 4 diff --git a/mods/content/standard_jobs/jobs/synthetics.dm b/mods/content/standard_jobs/jobs/synthetics.dm index 3a3dfbcd869..23f768d4ac6 100644 --- a/mods/content/standard_jobs/jobs/synthetics.dm +++ b/mods/content/standard_jobs/jobs/synthetics.dm @@ -1,4 +1,4 @@ -/datum/job/computer +/datum/job/standard/computer title = "Computer" event_categories = list(ASSIGNMENT_COMPUTER) total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm @@ -11,7 +11,8 @@ economic_power = 0 outfit_type = /decl/outfit/job/silicon/ai loadout_allowed = FALSE - hud_icon = "hudblank" + hud_icon_state = "hudblank" + hud_icon = null skill_points = 0 no_skill_buffs = TRUE guestbanned = 1 @@ -19,16 +20,16 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/computer/equip_job(var/mob/living/human/H) +/datum/job/standard/computer/equip_job(var/mob/living/human/H) return !!H -/datum/job/computer/is_position_available() +/datum/job/standard/computer/is_position_available() return (empty_playable_ai_cores.len != 0) -/datum/job/computer/handle_variant_join(var/mob/living/human/H, var/alt_title) +/datum/job/standard/computer/handle_variant_join(var/mob/living/human/H, var/alt_title) return H -/datum/job/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin) +/datum/job/standard/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin) character = character.AIize(move = FALSE) // is_available for AI checks that there is an empty core available in this list @@ -46,7 +47,7 @@ qdel(C) return TRUE -/datum/job/robot +/datum/job/standard/robot title = "Robot" event_categories = list(ASSIGNMENT_ROBOT) total_positions = 2 @@ -58,7 +59,8 @@ economic_power = 0 loadout_allowed = FALSE outfit_type = /decl/outfit/job/silicon/cyborg - hud_icon = "hudblank" + hud_icon_state = "hudblank" + hud_icon = null skill_points = 0 no_skill_buffs = TRUE guestbanned = 1 @@ -66,14 +68,14 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/robot/handle_variant_join(var/mob/living/human/H, var/alt_title) +/datum/job/standard/robot/handle_variant_join(var/mob/living/human/H, var/alt_title) if(H) return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) -/datum/job/robot/equip_job(var/mob/living/human/H) +/datum/job/standard/robot/equip_job(var/mob/living/human/H) return !!H -/datum/job/robot/New() +/datum/job/standard/robot/New() ..() alt_titles = SSrobots.robot_alt_titles.Copy() alt_titles -= title // So the unit test doesn't flip out if a mob or brain type is declared for our main title. diff --git a/mods/mobs/borers/datum/antagonist.dm b/mods/mobs/borers/datum/antagonist.dm index c714ef8e1a1..423297f09f8 100644 --- a/mods/mobs/borers/datum/antagonist.dm +++ b/mods/mobs/borers/datum/antagonist.dm @@ -7,12 +7,12 @@ welcome_text = "Click a target while on GRAB intent to crawl into their ear and infiltrate their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your host with Say, and your fellow borers with ,z." antag_indicator = "hudborer" antaghud_indicator = "hudborer" + antag_hud_icon = 'mods/mobs/borers/icons/hud.dmi' faction_name = "Borer Host" faction_descriptor = "Unity" faction_welcome = "You are now host to a cortical borer. Please listen to what they have to say; they're in your head." faction = "borer" - faction_indicator = "hudalien" hard_cap = 5 hard_cap_round = 8 diff --git a/mods/mobs/borers/datum/symbiote.dm b/mods/mobs/borers/datum/symbiote.dm index f6954fa2bf3..bf2f17e93c4 100644 --- a/mods/mobs/borers/datum/symbiote.dm +++ b/mods/mobs/borers/datum/symbiote.dm @@ -21,7 +21,8 @@ var/global/list/symbiote_starting_points = list() minimal_player_age = 14 economic_power = 0 defer_roundstart_spawn = TRUE - hud_icon = "hudblank" + hud_icon_state = "hudblank" + hud_icon = null outfit_type = /decl/outfit/job/symbiote_host create_record = FALSE var/check_whitelist // = "Symbiote" diff --git a/mods/mobs/borers/icons/hud.dmi b/mods/mobs/borers/icons/hud.dmi new file mode 100644 index 00000000000..8e01986fd47 Binary files /dev/null and b/mods/mobs/borers/icons/hud.dmi differ diff --git a/mods/mobs/borers/mob/overrides.dm b/mods/mobs/borers/mob/overrides.dm index 77c9a2c158e..26b83686f8e 100644 --- a/mods/mobs/borers/mob/overrides.dm +++ b/mods/mobs/borers/mob/overrides.dm @@ -22,8 +22,10 @@ var/mob/living/simple_animal/borer/B = HAS_BRAIN_WORMS(src) if(B.controlling) var/image/holder = hud_list[STATUS_HUD] + holder.icon = 'mods/mobs/borers/icons/hud.dmi' holder.icon_state = "hudbrainworm" var/image/holder2 = hud_list[STATUS_HUD_OOC] + holder2.icon = 'mods/mobs/borers/icons/hud.dmi' holder2.icon_state = "hudbrainworm" /mob/living/human/say_understands(mob/speaker, decl/language/speaking) diff --git a/mods/~compatibility/patches/psionics/psi_jobs.dm b/mods/~compatibility/patches/psionics/psi_jobs.dm index f4579e9d7c0..d62d097022f 100644 --- a/mods/~compatibility/patches/psionics/psi_jobs.dm +++ b/mods/~compatibility/patches/psionics/psi_jobs.dm @@ -1,4 +1,4 @@ -/datum/job/counselor/equip_job(var/mob/living/human/H) +/datum/job/standard/counselor/equip_job(var/mob/living/human/H) if(H.mind.role_alt_title == "Counselor") psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT) if(H.mind.role_alt_title == "Mentalist") diff --git a/nebula.dme b/nebula.dme index ec8cd8d9915..63ee0fdb95b 100644 --- a/nebula.dme +++ b/nebula.dme @@ -2893,6 +2893,7 @@ #include "code\modules\mob\living\living_give.dm" #include "code\modules\mob\living\living_grabs.dm" #include "code\modules\mob\living\living_hallucinations.dm" +#include "code\modules\mob\living\living_hud.dm" #include "code\modules\mob\living\living_maneuvers.dm" #include "code\modules\mob\living\living_organs.dm" #include "code\modules\mob\living\living_powers.dm"