diff --git a/code/__DEFINES/camera.dm b/code/__DEFINES/camera.dm index f50d7d8e2c72..b13adf43e8cd 100644 --- a/code/__DEFINES/camera.dm +++ b/code/__DEFINES/camera.dm @@ -3,6 +3,7 @@ #define CAMERA_NET_CONTAINMENT "Containment" #define CAMERA_NET_CONTAINMENT_HIDDEN "Containment Hidden" #define CAMERA_NET_RESEARCH "Research" +#define CAMERA_NET_BRIG "Brig" #define CAMERA_NET_ALAMO "Alamo" #define CAMERA_NET_NORMANDY "Normandy" #define CAMERA_NET_COLONY "Colony" diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm index a6a7aa53f182..17fd8b32c280 100644 --- a/code/__DEFINES/conflict.dm +++ b/code/__DEFINES/conflict.dm @@ -54,24 +54,25 @@ #define GUN_TRIGGER_SAFETY (1<<1) #define GUN_UNUSUAL_DESIGN (1<<2) #define GUN_SILENCED (1<<3) +#define GUN_CANT_EXECUTE (1<<4) ///If checking for ammo with current.mag you have to check it against numerical values, as booleans will not trigger. -#define GUN_INTERNAL_MAG (1<<4) -#define GUN_AUTO_EJECTOR (1<<5) -#define GUN_AMMO_COUNTER (1<<6) -#define GUN_BURST_FIRING (1<<7) -#define GUN_FLASHLIGHT_ON (1<<8) -#define GUN_WY_RESTRICTED (1<<9) -#define GUN_SPECIALIST (1<<10) -#define GUN_WIELDED_FIRING_ONLY (1<<11) +#define GUN_INTERNAL_MAG (1<<5) +#define GUN_AUTO_EJECTOR (1<<6) +#define GUN_AMMO_COUNTER (1<<7) +#define GUN_BURST_FIRING (1<<8) +#define GUN_FLASHLIGHT_ON (1<<9) +#define GUN_WY_RESTRICTED (1<<10) +#define GUN_SPECIALIST (1<<11) +#define GUN_WIELDED_FIRING_ONLY (1<<12) /// removes unwielded accuracy and scatter penalties (not recoil) -#define GUN_ONE_HAND_WIELDED (1<<12) -#define GUN_ANTIQUE (1<<13) +#define GUN_ONE_HAND_WIELDED (1<<13) +#define GUN_ANTIQUE (1<<14) /// Whether the gun has been fired by its current user (reset upon `dropped()`) -#define GUN_RECOIL_BUILDUP (1<<14) +#define GUN_RECOIL_BUILDUP (1<<15) /// support weapon, bipod will grant autofire -#define GUN_SUPPORT_PLATFORM (1<<15) +#define GUN_SUPPORT_PLATFORM (1<<16) /// No gun description, only base desc -#define GUN_NO_DESCRIPTION (1<<16) +#define GUN_NO_DESCRIPTION (1<<17) // NOTE: Don't add flags past 1<<23, it'll break things due to BYOND limitations. You can usually use a Component instead. #define USES_STREAKS (1<<0) diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 79f40c89bb53..3fd552f5369f 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -360,6 +360,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define JOB_XENOMORPH_QUEEN "Queen" // For coloring the ranks in the statistics menu +#define JOB_PLAYTIME_TIER_0 (0 HOURS) #define JOB_PLAYTIME_TIER_1 (10 HOURS) #define JOB_PLAYTIME_TIER_2 (25 HOURS) #define JOB_PLAYTIME_TIER_3 (70 HOURS) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 77f2393e6542..d8f820ab382b 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -113,7 +113,7 @@ #define CANROOT (1<<6) #define GODMODE (1<<12) #define FAKEDEATH (1<<13) //Replaces stuff like changeling.changeling_fakedeath -#define DISFIGURED (1<<14) //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system +//#define DISFIGURED (1<<14) //unused #define XENO_HOST (1<<15) //Tracks whether we're gonna be a baby alien's mummy. #define IMMOBILE_ACTION (1<<16) // If you are performing an action that prevents you from being pushed by your own people. #define PERMANENTLY_DEAD (1<<17) diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index d33e26c1c3f6..e4965907f707 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -70,10 +70,11 @@ // engineer skill #define SKILL_ENGINEER_DEFAULT 0 -#define SKILL_ENGINEER_TRAINED 1 //barricade repair && c4 use (mini-engis, specs) -#define SKILL_ENGINEER_ENGI 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (Combat Engi, OT, etc.) -#define SKILL_ENGINEER_MASTER 3 //Synths -#define SKILL_ENGINEER_MAX 3 +#define SKILL_ENGINEER_NOVICE 1 //barricade repair && c4 use (mini-engis, specs) +#define SKILL_ENGINEER_TRAINED 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (OT, etc.) +#define SKILL_ENGINEER_ENGI 3 // Slightly faster at everything (Combat Technicians) +#define SKILL_ENGINEER_MASTER 4 //Synths +#define SKILL_ENGINEER_MAX 4 //medical skill #define SKILL_MEDICAL_DEFAULT 0 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 47aa0e732c76..88496c79d630 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -123,6 +123,7 @@ #define SS_INIT_NIGHTMARE 21.5 #define SS_INIT_TIMETRACK 21.1 #define SS_INIT_HUMANS 21 +#define SS_INIT_WHO 20 #define SS_INIT_POWER 19 #define SS_INIT_INFLUXMCSTATS 12 #define SS_INIT_INFLUXSTATS 11 diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index e2c89df90e9b..17464b44dae8 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "7.1.2" +#define TGS_DMAPI_VERSION "7.1.3" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index e46c92df543a..aa73d6008e02 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -128,17 +128,23 @@ * You should only pass integers in. */ /proc/pick_weight(list/list_to_pick) + if(length(list_to_pick) == 0) + return null + var/total = 0 - var/item - for(item in list_to_pick) + for(var/item in list_to_pick) if(!list_to_pick[item]) list_to_pick[item] = 0 total += list_to_pick[item] - total = rand(0, total) - for(item in list_to_pick) - total -= list_to_pick[item] - if(total <= 0 && list_to_pick[item]) + total = rand(1, total) + for(var/item in list_to_pick) + var/item_weight = list_to_pick[item] + if(item_weight == 0) + continue + + total -= item_weight + if(total <= 0) return item return null diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 31308ac5812f..e27add2c9601 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -57,6 +57,9 @@ GLOBAL_LIST_INIT(cmp_field, "name") /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") +/proc/cmp_typepaths_name_asc(atom/A, atom/B) + return sorttext(initial(A.name), initial(B.name)) + /// Compares mobs based on their timeofdeath value in ascending order /proc/cmp_mob_deathtime_asc(mob/A, mob/B) return A.timeofdeath - B.timeofdeath diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index d5212611a04b..32ea0f5ec32e 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -87,22 +87,6 @@ result = first ^ second return result -//Pretends to pick an element based on its weight but really just seems to pick a random element. -/proc/pickweight(list/L) - var/total = 0 - var/item - for (item in L) - if (!L[item]) - L[item] = 1 - total += L[item] - - total = rand(1, total) - for (item in L) - total -=L [item] - if (total <= 0) - return item - return null - /// Pick a random element from the list and remove it from the list. /proc/pick_n_take(list/L) RETURN_TYPE(L[_].type) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d8eebf79bca6..f442ca3b1a32 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1100,11 +1100,17 @@ GLOBAL_DATUM(action_purple_power_up, /image) else air_master.tiles_to_update += T2*/ -/proc/get_cardinal_dir(atom/A, atom/B) - var/dx = abs(B.x - A.x) - var/dy = abs(B.y - A.y) - return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12) - +/// Returns the nearest cardinal dir between two atoms. Favors NORTH/SOUTH on perfect diagonals. Consistent and reversible. +/proc/get_cardinal_dir(atom/start, atom/end) as num + var/dx = end.x - start.x + var/dy = end.y - start.y + if(!(dx || dy)) + return 0 //returns 0 when on same x/y, consistent with get_dir() + + if(abs(dx) > abs(dy)) + return dx < 0 ? WEST : EAST + else + return dy < 0 ? SOUTH : NORTH //Returns the 2 dirs perpendicular to the arg /proc/get_perpen_dir(dir) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index facc2b951ad3..72e02deb8c1a 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -108,6 +108,7 @@ DEFINE_BITFIELD(flags_gun_features, list( "GUN_TRIGGER_SAFETY" = GUN_TRIGGER_SAFETY, "GUN_UNUSUAL_DESIGN" = GUN_UNUSUAL_DESIGN, "GUN_SILENCED" = GUN_SILENCED, + "GUN_CANT_EXECUTE" = GUN_CANT_EXECUTE, "GUN_INTERNAL_MAG" = GUN_INTERNAL_MAG, "GUN_AUTO_EJECTOR" = GUN_AUTO_EJECTOR, "GUN_AMMO_COUNTER" = GUN_AMMO_COUNTER, @@ -356,7 +357,6 @@ DEFINE_BITFIELD(status_flags, list( "PASSEMOTES" = PASSEMOTES, "GODMODE" = GODMODE, "FAKEDEATH" = FAKEDEATH, - "DISFIGURED" = DISFIGURED, "XENO_HOST" = XENO_HOST, "IMMOBILE_ACTION" = IMMOBILE_ACTION, "PERMANENTLY_DEAD" = PERMANENTLY_DEAD, diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index 7397d98a0d52..e0ca12c341bd 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -272,7 +272,6 @@ SUBSYSTEM_DEF(radio) "[VAI_FREQ]" = "vairadio", "[RMC_FREQ]" = "rmcradio", "[CMB_FREQ]" = "cmbradio", - "[CLF_FREQ]" = "clfradio", "[ALPHA_FREQ]" = "alpharadio", "[BRAVO_FREQ]" = "bravoradio", "[CHARLIE_FREQ]" = "charlieradio", @@ -287,6 +286,17 @@ SUBSYSTEM_DEF(radio) "[COLONY_FREQ]" = "deptradio", "[BUG_A_FREQ]" = "airadio", "[BUG_B_FREQ]" = "aiprivradio", + "[UPP_FREQ]" = "syndradio", + "[UPP_CMD_FREQ]" = "opforcmd", + "[UPP_ENGI_FREQ]" = "opforeng", + "[UPP_MED_FREQ]" = "opformed", + "[UPP_CCT_FREQ]" = "opforcct", + "[UPP_KDO_FREQ]" = "opforspe", + "[CLF_FREQ]" = "clfradio", + "[CLF_CMD_FREQ]" = "opforcmd", + "[CLF_ENGI_FREQ]" = "opforeng", + "[CLF_MED_FREQ]" = "opformed", + "[CLF_CCT_FREQ]" = "opforcct", ) /datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null) @@ -359,10 +369,6 @@ SUBSYSTEM_DEF(radio) return freq_span if(frequency in PMC_FREQS) return "pmcradio" - if(frequency in UPP_FREQS) - return "syndradio" - if(frequency in CLF_FREQS) - return "clfradio" if(frequency in ERT_FREQS) return "centradio" if(frequency in DEPT_FREQS) diff --git a/code/controllers/subsystem/init/lobby_art.dm b/code/controllers/subsystem/init/lobby_art.dm index 7c49d5fe1787..4b26d576b8df 100644 --- a/code/controllers/subsystem/init/lobby_art.dm +++ b/code/controllers/subsystem/init/lobby_art.dm @@ -6,5 +6,5 @@ SUBSYSTEM_DEF(lobby_art) /datum/controller/subsystem/lobby_art/Initialize() var/list/lobby_arts = CONFIG_GET(str_list/lobby_art_images) if(length(lobby_arts)) - force_lobby_art(rand(1,length(lobby_arts))) + force_lobby_art(rand(1, length(lobby_arts))) return SS_INIT_SUCCESS diff --git a/code/controllers/subsystem/sound.dm b/code/controllers/subsystem/sound.dm index 13dd6a0dddf1..3cc3f0ef8090 100644 --- a/code/controllers/subsystem/sound.dm +++ b/code/controllers/subsystem/sound.dm @@ -19,7 +19,7 @@ SUBSYSTEM_DEF(sound) if(!run_hearers) // Initialize for handling next template run_hearers = run_queue[run_template] // get base hearers if(run_template.range) // ranging - run_hearers |= SSquadtree.players_in_range(SQUARE(run_template.x, run_template.y, run_template.range), run_template.z) + run_hearers |= SSquadtree.players_in_range(SQUARE(run_template.x, run_template.y, run_template.range * 2), run_template.z) if(MC_TICK_CHECK) return while(length(run_hearers)) // Output sound to hearers diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm new file mode 100644 index 000000000000..43ecbb435587 --- /dev/null +++ b/code/controllers/subsystem/who.dm @@ -0,0 +1,312 @@ +SUBSYSTEM_DEF(who) + name = "Who" + flags = SS_BACKGROUND + runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY + init_order = SS_INIT_WHO + wait = 5 SECONDS + + var/datum/player_list/who = new + var/datum/player_list/staff/staff_who = new + +/datum/controller/subsystem/who/Initialize() + who.update_data() + staff_who.update_data() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/who/fire(resumed = TRUE) + who.update_data() + staff_who.update_data() + +//datum +/datum/player_list + var/tgui_name = "Who" + var/tgui_interface_name = "Who" + var/list/mobs_ckey = list() + var/list/list_data = list() + +/datum/player_list/proc/update_data() + var/list/new_list_data = list() + var/list/new_mobs_ckey = list() + var/list/additional_data = list( + "lobby" = 0, + "admin_observers" = 0, + "observers" = 0, + "yautja" = 0, + "infected_preds" = 0, + "humans" = 0, + "infected_humans" = 0, + "uscm" = 0, + "uscm_marines" = 0, + ) + new_list_data["additional_info"] = list() + var/list/counted_factions = list() + for(var/client/client as anything in sortTim(GLOB.clients, GLOBAL_PROC_REF(cmp_ckey_asc))) + CHECK_TICK + new_list_data["all_clients"]++ + var/list/client_payload = list() + client_payload["ckey"] = "[client.key]" + client_payload["text"] = "[client.key]" + client_payload["ckey_color"] = "white" + var/mob/client_mob = client.mob + new_mobs_ckey[client.key] = client_mob + if(client_mob) + if(istype(client_mob, /mob/new_player)) + client_payload["text"] += " - in Lobby" + additional_data["lobby"]++ + + else if(isobserver(client_mob)) + client_payload["text"] += " - Playing as [client_mob.real_name]" + if(CLIENT_IS_STAFF(client)) + additional_data["admin_observers"]++ + else + additional_data["observers"]++ + + var/mob/dead/observer/observer = client_mob + if(observer.started_as_observer) + client_payload["color"] += "#ce89cd" + client_payload["text"] += " - Spectating" + else + client_payload["color"] += "#A000D0" + client_payload["text"] += " - DEAD" + + else + client_payload["text"] += " - Playing as [client_mob.real_name]" + + switch(client_mob.stat) + if(UNCONSCIOUS) + client_payload["color"] += "#B0B0B0" + client_payload["text"] += " - Unconscious" + if(DEAD) + client_payload["color"] += "#A000D0" + client_payload["text"] += " - DEAD" + + if(client_mob.stat != DEAD) + if(isxeno(client_mob)) + client_payload["color"] += "#ec3535" + client_payload["text"] += " - Xenomorph" + + else if(ishuman(client_mob)) + if(client_mob.faction == FACTION_ZOMBIE) + counted_factions[FACTION_ZOMBIE]++ + client_payload["color"] += "#2DACB1" + client_payload["text"] += " - Zombie" + else if(client_mob.faction == FACTION_YAUTJA) + client_payload["color"] += "#7ABA19" + client_payload["text"] += " - Yautja" + additional_data["yautja"]++ + if(client_mob.status_flags & XENO_HOST) + additional_data["infected_preds"]++ + else + additional_data["humans"]++ + if(client_mob.status_flags & XENO_HOST) + additional_data["infected_humans"]++ + if(client_mob.faction == FACTION_MARINE) + additional_data["uscm"]++ + if(client_mob.job in (GLOB.ROLES_MARINES)) + additional_data["uscm_marines"]++ + else + counted_factions[client_mob.faction]++ + + new_list_data["total_players"] += list(client_payload) + + new_list_data["additional_info"] += list(list( + "content" = "In Lobby: [additional_data["lobby"]]", + "color" = "#777", + "text" = "Player in lobby", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Spectating Players: [additional_data["observers"]]", + "color" = "#777", + "text" = "Spectating players", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Spectating Admins: [additional_data["admin_observers"]]", + "color" = "#777", + "text" = "Spectating administrators", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Humans: [additional_data["humans"]]", + "color" = "#2C7EFF", + "text" = "Players playing as Human", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Infected Humans: [additional_data["infected_humans"]]", + "color" = "#ec3535", + "text" = "Players playing as Infected Human", + )) + + new_list_data["additional_info"] += list(list( + "content" = "[MAIN_SHIP_NAME] Personnel: [additional_data["uscm"]]", + "color" = "#5442bd", + "text" = "Players playing as [MAIN_SHIP_NAME] Personnel", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Marines: [additional_data["uscm_marines"]]", + "color" = "#5442bd", + "text" = "Players playing as Marines", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Yautjas: [additional_data["yautja"]]", + "color" = "#7ABA19", + "text" = "Players playing as Yautja", + )) + + new_list_data["additional_info"] += list(list( + "content" = "Infected Predators: [additional_data["infected_preds"]]", + "color" = "#7ABA19", + "text" = "Players playing as Infected Yautja", + )) + + for(var/i in 1 to length(counted_factions)) + if(counted_factions[counted_factions[i]]) + new_list_data["factions"] += list(list( + "content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]", + "color" = "#2C7EFF", + "text" = "Other", + )) + if(counted_factions[FACTION_NEUTRAL]) + new_list_data["factions"] += list(list( + "content" = "[FACTION_NEUTRAL] Humans: [counted_factions[FACTION_NEUTRAL]]", + "color" = "#688944", + "text" = "Neutrals", + )) + + for(var/faction_to_get in ALL_XENO_HIVES) + var/datum/hive_status/hive = GLOB.hive_datum[faction_to_get] + if(hive && length(hive.totalXenos)) + new_list_data["xenomorphs"] += list(list( + "content" = "[hive.name]: [length(hive.totalXenos)]", + "color" = hive.color ? hive.color : "#8200FF", + "text" = "Queen: [hive.living_xeno_queen ? "Alive" : "Dead"]", + )) + + list_data = new_list_data + mobs_ckey = new_mobs_ckey + +/datum/player_list/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, tgui_name, tgui_interface_name) + ui.open() + ui.set_autoupdate(TRUE) + +/datum/player_list/ui_data(mob/user) + . = list_data + +/datum/player_list/ui_static_data(mob/user) + . = list() + + .["admin"] = CLIENT_IS_STAFF(user.client) + +/datum/player_list/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("get_player_panel") + if(mobs_ckey[params["ckey"]]) + GLOB.admin_datums[usr.client.ckey].show_player_panel(mobs_ckey[params["ckey"]]) + +/datum/player_list/ui_status(mob/user, datum/ui_state/state) + return UI_INTERACTIVE + + +/datum/player_list/staff + tgui_name = "StaffWho" + tgui_interface_name = "Staff Who" + + var/list/category_colors = list( + "Management" = "purple", + "Maintainers" = "blue", + "Administrators" = "red", + "Moderators" = "orange", + "Mentors" = "green" + ) + +/datum/player_list/staff/update_data() + var/list/new_list_data = list() + mobs_ckey = list() + + var/list/listings + var/list/mappings + if(CONFIG_GET(flag/show_manager)) + LAZYSET(mappings, "Management", R_PERMISSIONS) + if(CONFIG_GET(flag/show_devs)) + LAZYSET(mappings, "Maintainers", R_PROFILER) + LAZYSET(mappings, "Administrators", R_ADMIN) + if(CONFIG_GET(flag/show_mods)) + LAZYSET(mappings, "Moderators", R_MOD && R_BAN) + if(CONFIG_GET(flag/show_mentors)) + LAZYSET(mappings, "Mentors", R_MENTOR) + + for(var/category in mappings) + LAZYSET(listings, category, list()) + + for(var/client/client as anything in GLOB.admins) + if(client.admin_holder?.fakekey && !CLIENT_IS_STAFF(client)) + continue + + for(var/category in mappings) + if(CLIENT_HAS_RIGHTS(client, mappings[category])) + LAZYADD(listings[category], client) + break + + for(var/category in listings) + var/list/admins = list() + for(var/client/entry as anything in listings[category]) + var/list/admin = list() + var/rank = entry.admin_holder.rank + if(entry.admin_holder.extra_titles?.len) + for(var/srank in entry.admin_holder.extra_titles) + rank += " & [srank]" + + admin["content"] = "[entry.key] ([rank])" + admin["text"] = "" + + if(entry.admin_holder?.fakekey) + admin["text"] += " (HIDDEN)" + + if(istype(entry.mob, /mob/dead/observer)) + admin["color"] = "#808080" + admin["text"] += " Spectating" + + else if(istype(entry.mob, /mob/new_player)) + admin["color"] = "#688944" + admin["text"] += " in Lobby" + else + admin["color"] = "#688944" + admin["text"] += " Playing" + + if(entry.is_afk()) + admin["color"] = "#A040D0" + admin["text"] += " (AFK)" + + admins += list(admin) + + new_list_data["administrators"] += list(list( + "category" = category, + "category_color" = category_colors[category], + "category_administrators" = length(listings[category]), + "admins" = admins, + )) + + list_data = new_list_data + +/mob/verb/who() + set category = "OOC" + set name = "Who" + + SSwho.who.tgui_interact(src) + +/mob/verb/staffwho() + set category = "Admin" + set name = "StaffWho" + + SSwho.staff_who.tgui_interact(src) diff --git a/code/datums/action.dm b/code/datums/action.dm index 8dbf6c9df5a5..e6c87eca6a0d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -187,12 +187,6 @@ holder_item = null return ..() -/datum/action/item_action/action_activate() - . = ..() - if(target) - var/obj/item/I = target - I.ui_action_click(owner, holder_item) - /datum/action/item_action/can_use_action() if(ishuman(owner) && !owner.is_mob_incapacitated()) var/mob/living/carbon/human/human = owner @@ -213,6 +207,17 @@ name = "Toggle [target]" button.name = name +/datum/action/item_action/toggle/action_activate() + . = ..() + if(target) + var/obj/item/I = target + I.ui_action_click(owner, holder_item) + +/datum/action/item_action/toggle/use/New(target) + . = ..() + name = "Use [target]" + button.name = name + //This is the proc used to update all the action buttons. /mob/proc/update_action_buttons(reload_screen) if(!client) diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm index 022909691cfc..587ffd805b6c 100644 --- a/code/datums/ammo/ammo.dm +++ b/code/datums/ammo/ammo.dm @@ -173,6 +173,10 @@ living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET) /datum/ammo/proc/slowdown(mob/living/living_mob, obj/projectile/fired_projectile) + if(isxeno(living_mob)) + var/mob/living/carbon/xenomorph/xeno = living_mob + if(xeno.caste.tier > 2 || (xeno.caste.tier == 0 && xeno.mob_size >= MOB_SIZE_BIG)) + return //tier 3 and big tier 0 (like queen) are not affected if(iscarbonsizexeno(living_mob)) var/mob/living/carbon/xenomorph/target = living_mob target.apply_effect(1, SUPERSLOW) diff --git a/code/datums/ammo/bullet/pistol.dm b/code/datums/ammo/bullet/pistol.dm index ced951241754..8b5239ba9127 100644 --- a/code/datums/ammo/bullet/pistol.dm +++ b/code/datums/ammo/bullet/pistol.dm @@ -180,12 +180,12 @@ headshot_state = HEADSHOT_OVERLAY_MEDIUM debilitate = list(0,0,0,0,0,0,0,2) - effective_range_max = 3 + effective_range_max = 6 accuracy = HIT_ACCURACY_TIER_4 damage = 45 penetration= ARMOR_PENETRATION_TIER_6 shrapnel_chance = SHRAPNEL_CHANCE_TIER_2 - damage_falloff = DAMAGE_FALLOFF_TIER_6 //"VP78 - the only pistol viable as a primary."-Vampmare, probably. + damage_falloff = DAMAGE_FALLOFF_TIER_6 /datum/ammo/bullet/pistol/squash/toxin name = "toxic squash-head pistol bullet" diff --git a/code/datums/ammo/misc.dm b/code/datums/ammo/misc.dm index 9a9ed2fb505b..28610f283df2 100644 --- a/code/datums/ammo/misc.dm +++ b/code/datums/ammo/misc.dm @@ -49,10 +49,21 @@ drop_flame(get_turf(P), P.weapon_cause_data) /datum/ammo/flamethrower/tank_flamer - flamer_reagent_id = "napalmx" - + flamer_reagent_id = "highdamagenapalm" max_range = 8 +/datum/ammo/flamethrower/tank_flamer/drop_flame(turf/turf, datum/cause_data/cause_data) + if(!istype(turf)) + return + + var/datum/reagent/napalm/high_damage/reagent = new() + new /obj/flamer_fire(turf, cause_data, reagent, 1) + + var/datum/effect_system/smoke_spread/landingsmoke = new /datum/effect_system/smoke_spread + landingsmoke.set_up(1, 0, turf, null, 4, cause_data) + landingsmoke.start() + landingsmoke = null + /datum/ammo/flamethrower/sentry_flamer flags_ammo_behavior = AMMO_IGNORE_ARMOR|AMMO_IGNORE_COVER|AMMO_FLAME flamer_reagent_id = "napalmx" diff --git a/code/datums/autocells/explosion.dm b/code/datums/autocells/explosion.dm index ecc6f9925800..ec310e80367c 100644 --- a/code/datums/autocells/explosion.dm +++ b/code/datums/autocells/explosion.dm @@ -264,7 +264,9 @@ as having entered the turf. falloff = max(falloff, power/100) - msg_admin_attack("Explosion with Power: [power], Falloff: [falloff], Shape: [falloff_shape] in [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]).", epicenter.x, epicenter.y, epicenter.z) + var/obj/causing_obj = explosion_cause_data?.resolve_cause() + var/mob/causing_mob = explosion_cause_data?.resolve_mob() + msg_admin_attack("Explosion with Power: [power], Falloff: [falloff], Shape: [falloff_shape],[causing_obj ? " from [causing_obj]" : ""][causing_mob ? " by [key_name(causing_mob)]" : ""] in [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]).", epicenter.x, epicenter.y, epicenter.z) playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power^2,1)) diff --git a/code/datums/components/bonus_damage_stack.dm b/code/datums/components/bonus_damage_stack.dm index 78da5e036ce4..7a9bf5aa9560 100644 --- a/code/datums/components/bonus_damage_stack.dm +++ b/code/datums/components/bonus_damage_stack.dm @@ -60,7 +60,7 @@ var/color = COLOR_BONUS_DAMAGE var/intensity = bonus_damage_stacks / (initial(bonus_damage_cap) * 2) // if intensity is too high of a value, the hex code will become invalid - color += num2text(BONUS_DAMAGE_MAX_ALPHA * clamp(intensity, 0, 0.5), 1, 16) + color += num2text(BONUS_DAMAGE_MAX_ALPHA * clamp(intensity, 0, 0.5), 2, 16) if(parent) var/atom/A = parent A.add_filter("bonus_damage_stacks", 2, list("type" = "outline", "color" = color, "size" = 1 + clamp(intensity, 0, 1))) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index ca4eca8a1a49..e10096059bda 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -6,6 +6,8 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) var/security[] = list() //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). var/locked[] = list() + var/leveled_riflemen = 0 + var/leveled_riflemen_max = 7 /datum/datacore/proc/get_manifest(monochrome, OOC, nonHTML) var/list/cic = GLOB.ROLES_CIC.Copy() diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index e0daaee74a8c..d93b07234c9d 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -126,6 +126,14 @@ to_chat(user, SPAN_WARNING("You can't do this right now.")) return FALSE + if (user.is_mob_incapacitated()) + to_chat(user, SPAN_WARNING("You can't do this right now.")) + return FALSE + + if (HAS_TRAIT(user, TRAIT_IMMOBILIZED) || HAS_TRAIT(user, TRAIT_FLOORED)) + to_chat(user, SPAN_WARNING("You can't do this right now.")) + return FALSE + if ((item.flags_inventory & CANTSTRIP) || ((item.flags_item & NODROP) && !(item.flags_item & FORCEDROP_CONDITIONAL)) || (item.flags_item & ITEM_ABSTRACT)) return FALSE diff --git a/code/datums/emergency_calls/cryo_spec.dm b/code/datums/emergency_calls/cryo_spec.dm index 8d563b0693f8..945ab474d4c9 100644 --- a/code/datums/emergency_calls/cryo_spec.dm +++ b/code/datums/emergency_calls/cryo_spec.dm @@ -8,6 +8,16 @@ shuttle_id = "" spawn_max_amount = TRUE +/datum/emergency_call/cryo_spec/remove_nonqualifiers(list/datum/mind/candidates_list) + var/list/datum/mind/candidates_clean = list() + for(var/datum/mind/single_candidate in candidates_list) + if(check_timelock(single_candidate.current?.client, JOB_SQUAD_ROLES_LIST, time_required_for_job)) + candidates_clean.Add(single_candidate) + continue + if(single_candidate.current) + to_chat(single_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you don't have the specialist job unlocked!")) + return candidates_clean + /datum/emergency_call/cryo_spec/create_member(datum/mind/mind, turf/override_spawn_loc) set waitfor = FALSE if(SSmapping.configs[GROUND_MAP].map_name == MAP_WHISKEY_OUTPOST) diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index 99b31ab41f19..885844b6ec2e 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -224,11 +224,15 @@ addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), quiet_launch, announce_incoming, override_spawn_loc), 30 SECONDS) +/datum/emergency_call/proc/remove_nonqualifiers(list/datum/mind/candidates_list) + return candidates_list //everyone gets selected on 99% of distress beacons. + /datum/emergency_call/proc/spawn_candidates(quiet_launch = FALSE, announce_incoming = TRUE, override_spawn_loc) if(SSticker.mode) SSticker.mode.picked_calls -= src SEND_SIGNAL(src, COMSIG_ERT_SETUP) + candidates = remove_nonqualifiers(candidates) if(length(candidates) < mob_min && !spawn_max_amount) message_admins("Aborting distress beacon, not enough candidates: found [length(candidates)].") diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm index e473466f4fb8..4a1a8ecb62be 100644 --- a/code/datums/emergency_calls/inspection.dm +++ b/code/datums/emergency_calls/inspection.dm @@ -1,6 +1,6 @@ //USCM Provost /datum/emergency_call/inspection_provost - name = "Inspection - USCM Provost - ML knowledge required." + name = "Inspection - USCM Provost - ML knowledge and MP playtime required." mob_max = 2 mob_min = 1 probability = 0 @@ -9,6 +9,15 @@ ..() objectives = "Investigate any issues with ML enforcement on the [MAIN_SHIP_NAME]." +/datum/emergency_call/inspection_provost/remove_nonqualifiers(list/datum/mind/candidates_list) + var/list/datum/mind/candidates_clean = list() + for(var/datum/mind/single_candidate in candidates_list) + if(check_timelock(single_candidate.current?.client, JOB_POLICE, time_required_for_job)) + candidates_clean.Add(single_candidate) + continue + if(single_candidate.current) + to_chat(single_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you don't have enough playtime (5 Hours) as military police!")) + return candidates_clean /datum/emergency_call/inspection_provost/create_member(datum/mind/M, turf/override_spawn_loc) var/turf/T = override_spawn_loc ? override_spawn_loc : get_spawn_point() diff --git a/code/datums/looping_sounds/misc_sounds.dm b/code/datums/looping_sounds/misc_sounds.dm index 6411b3f51f4a..318ac7b331b7 100644 --- a/code/datums/looping_sounds/misc_sounds.dm +++ b/code/datums/looping_sounds/misc_sounds.dm @@ -1,3 +1,24 @@ /datum/looping_sound/looping_launch_announcement_alarm mid_sounds = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) start_sound = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) + +/datum/looping_sound/telephone/ring + start_sound = 'sound/machines/telephone/dial.ogg' + start_length = 3.2 SECONDS + mid_sounds = 'sound/machines/telephone/ring_outgoing.ogg' + mid_length = 2.1 SECONDS + volume = 10 + +/datum/looping_sound/telephone/busy + start_sound = 'sound/voice/callstation_unavailable.ogg' + start_length = 5.7 SECONDS + mid_sounds = 'sound/machines/telephone/phone_busy.ogg' + mid_length = 5 SECONDS + volume = 15 + +/datum/looping_sound/telephone/hangup + start_sound = 'sound/machines/telephone/remote_hangup.ogg' + start_length = 0.6 SECONDS + mid_sounds = 'sound/machines/telephone/phone_busy.ogg' + mid_length = 5 SECONDS + volume = 15 diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 603f9a05d702..011dc8e25dba 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -408,7 +408,6 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( var/revive_enabled = stat == DEAD && check_tod() && is_revivable() if(stat == DEAD) revive_enabled = check_tod() && is_revivable() - var/datum/internal_organ/heart/heart = islist(internal_organs_by_name) ? internal_organs_by_name["heart"] : null var/holder2_set = 0 if(hivenumber) @@ -475,7 +474,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( holder3.icon_state = "huddead" holder2_set = 1 else - if(heart && (heart.organ_status >= ORGAN_BROKEN && check_tod())) // broken heart icon + if(is_heart_broken()) // broken heart icon holder.icon_state = "huddeadheart" if(!holder2_set) holder2.icon_state = "huddeadheart" @@ -784,7 +783,7 @@ GLOBAL_DATUM(hud_icon_hudfocus, /image) // Vampire Execute HUD /mob/living/carbon/human/proc/update_execute_hud() var/image/execute_holder = hud_list[XENO_EXECUTE] - + execute_holder.icon_state = "hudblank" execute_holder.overlays.Cut() diff --git a/code/datums/quadtree.dm b/code/datums/quadtree.dm index 200a51b358a0..9056dfd6bd59 100644 --- a/code/datums/quadtree.dm +++ b/code/datums/quadtree.dm @@ -82,7 +82,7 @@ /// Returns TRUE if this shape's bounding box intersects the provided shape's bounding box, otherwise FALSE. Generally faster than a full intersection test. /datum/shape/proc/intersects_aabb(datum/shape/aabb) - return (abs(src.center_x - aabb.center_x) <= (src.bounds_x + aabb.bounds_x) * 0.5) && (abs(src.center_y - aabb.center_y) <= (src.bounds_x + aabb.bounds_x) * 0.5) + return (abs(src.center_x - aabb.center_x) <= (src.bounds_x + aabb.bounds_x) * 0.5) && (abs(src.center_y - aabb.center_y) <= (src.bounds_y + aabb.bounds_y) * 0.5) /// Returns TRUE if this shape intersects the provided rectangle shape, otherwise FALSE. /datum/shape/proc/intersects_rect(datum/shape/rectangle/rect) diff --git a/code/datums/skills/civilian.dm b/code/datums/skills/civilian.dm index 0ff13ae67225..ff9cadf02913 100644 --- a/code/datums/skills/civilian.dm +++ b/code/datums/skills/civilian.dm @@ -20,7 +20,7 @@ CIVILIAN SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, SKILL_INTEL = SKILL_INTEL_EXPERT, ) @@ -31,7 +31,7 @@ CIVILIAN SKILL_CQC = SKILL_CQC_DEFAULT, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //The ASRS consoles + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //The ASRS consoles SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN, SKILL_POLICE = SKILL_POLICE_SKILLED, //The CMB Tradeband Compliance Device ) @@ -43,7 +43,7 @@ CIVILIAN SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, @@ -115,7 +115,7 @@ CIVILIAN SKILL_ENDURANCE = SKILL_ENDURANCE_SURVIVOR, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, ) @@ -131,7 +131,7 @@ CIVILIAN /datum/skills/civilian/survivor/clf name = "Survivor CLF" additional_skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, @@ -158,7 +158,7 @@ CIVILIAN name = "Survivor Miner" additional_skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, ) @@ -167,7 +167,7 @@ CIVILIAN name = "Survivor Trucker" additional_skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_VEHICLE = SKILL_VEHICLE_CREWMAN, ) @@ -176,7 +176,7 @@ CIVILIAN name = "Survivor Engineer" additional_skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, @@ -192,7 +192,7 @@ CIVILIAN /datum/skills/civilian/survivor/marshal name = "Survivor Marshal" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -201,7 +201,7 @@ CIVILIAN SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, ) diff --git a/code/datums/skills/clf.dm b/code/datums/skills/clf.dm index 88aa14a41f79..64a8864d3c51 100644 --- a/code/datums/skills/clf.dm +++ b/code/datums/skills/clf.dm @@ -12,7 +12,7 @@ COLONIAL LIBERATION FRONT SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, SKILL_ENDURANCE = SKILL_ENDURANCE_WEAK, @@ -24,7 +24,7 @@ COLONIAL LIBERATION FRONT skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, @@ -48,7 +48,7 @@ COLONIAL LIBERATION FRONT skills = list( SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set. + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set. SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, @@ -60,7 +60,7 @@ COLONIAL LIBERATION FRONT name = "CLF Leader" skills = list( SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, // to use their C4 + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, // to use their C4 SKILL_CQC = SKILL_CQC_SKILLED, SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -78,7 +78,7 @@ COLONIAL LIBERATION FRONT name = "CLF Cell Commander" skills = list( SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CQC = SKILL_CQC_SKILLED, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, diff --git a/code/datums/skills/cmb.dm b/code/datums/skills/cmb.dm index b29a4c314567..8fa7ca4dd892 100644 --- a/code/datums/skills/cmb.dm +++ b/code/datums/skills/cmb.dm @@ -26,7 +26,7 @@ COLONIAL MARSHALS SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_MASTER, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, diff --git a/code/datums/skills/commando.dm b/code/datums/skills/commando.dm index ed5e5ee086e4..5133cb0e55ea 100644 --- a/code/datums/skills/commando.dm +++ b/code/datums/skills/commando.dm @@ -9,7 +9,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_EXPERT, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -24,7 +24,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_EXPERT, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, @@ -40,7 +40,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_EXPERT, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, @@ -56,7 +56,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_MASTER, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, @@ -71,7 +71,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_MASTER, SKILL_FIREMAN = SKILL_FIREMAN_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, @@ -87,7 +87,7 @@ SPEC-OPS skills = list( SKILL_CQC = SKILL_CQC_MASTER, SKILL_FIREMAN = SKILL_FIREMAN_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, @@ -105,7 +105,7 @@ SPEC-OPS SKILL_CQC = SKILL_CQC_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, diff --git a/code/datums/skills/contractor.dm b/code/datums/skills/contractor.dm index 183e95c941f5..5e079e5664d4 100644 --- a/code/datums/skills/contractor.dm +++ b/code/datums/skills/contractor.dm @@ -7,7 +7,7 @@ CONTRACTORS name = "Contractor Standard" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_POLICE = SKILL_POLICE_SKILLED, @@ -22,7 +22,7 @@ CONTRACTORS /datum/skills/contractor/leader name = "Contractor Leader" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, @@ -45,7 +45,7 @@ CONTRACTORS SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, SKILL_SURGERY = SKILL_SURGERY_TRAINED, SKILL_VEHICLE = SKILL_VEHICLE_LARGE, @@ -76,7 +76,7 @@ CONTRACTORS name = "Contractor Machinegunner" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_POLICE = SKILL_POLICE_SKILLED, diff --git a/code/datums/skills/dutch.dm b/code/datums/skills/dutch.dm index 4f19233e66d0..ec550f8e2bdf 100644 --- a/code/datums/skills/dutch.dm +++ b/code/datums/skills/dutch.dm @@ -4,7 +4,7 @@ SKILL_CQC = SKILL_CQC_MASTER, SKILL_FIREMAN = SKILL_FIREMAN_MAX, SKILL_MELEE_WEAPONS = SKILL_MELEE_MAX, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, @@ -20,7 +20,7 @@ name = "Dutch's Dozen Mercenary" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -35,7 +35,7 @@ name = "Dutch's Dozen Medic" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, diff --git a/code/datums/skills/forecon.dm b/code/datums/skills/forecon.dm index 724a49ee98ca..aef187ce05dd 100644 --- a/code/datums/skills/forecon.dm +++ b/code/datums/skills/forecon.dm @@ -8,7 +8,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_standard name = "Reconnaissance Rifleman" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -24,7 +24,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_techician name = "Reconnaissance Support Technician" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -41,7 +41,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_marksman name = "Reconnaissance Designated Marksman" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -58,7 +58,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_smartgunner name = "Reconnaissance Smartgunner" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -75,7 +75,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_sniper name = "Reconnaissance Sniper" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -92,7 +92,7 @@ MILITARY SURVIVORS /datum/skills/military/survivor/forecon_squad_leader name = "Reconnaissance Squad Leader" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_CQC = SKILL_CQC_SKILLED, diff --git a/code/datums/skills/freelancer.dm b/code/datums/skills/freelancer.dm index 09df9f32369c..cf7baa15532b 100644 --- a/code/datums/skills/freelancer.dm +++ b/code/datums/skills/freelancer.dm @@ -11,7 +11,7 @@ FREELANCERS skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, ) @@ -20,7 +20,7 @@ FREELANCERS skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_TRAINED, @@ -31,7 +31,7 @@ FREELANCERS skills = list( SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_CQC = SKILL_CQC_TRAINED, diff --git a/code/datums/skills/mercenary.dm b/code/datums/skills/mercenary.dm index 1dc18eaa2fbc..35a6378f51a4 100644 --- a/code/datums/skills/mercenary.dm +++ b/code/datums/skills/mercenary.dm @@ -3,7 +3,7 @@ skills = list( SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -16,7 +16,7 @@ skills = list( SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -31,7 +31,7 @@ skills = list( SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_MEDICAL = SKILL_MEDICAL_MASTER, @@ -62,7 +62,7 @@ skills = list( SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, @@ -78,7 +78,7 @@ skills = list( SKILL_CQC = SKILL_CQC_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, diff --git a/code/datums/skills/misc.dm b/code/datums/skills/misc.dm index 0f0ca657f995..204890685b91 100644 --- a/code/datums/skills/misc.dm +++ b/code/datums/skills/misc.dm @@ -11,7 +11,7 @@ MISCELLANEOUS SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_JTAC = SKILL_JTAC_EXPERT, @@ -23,7 +23,7 @@ MISCELLANEOUS SKILL_CQC = SKILL_CQC_MASTER, SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_EXPERT, @@ -52,7 +52,7 @@ MISCELLANEOUS name = "Souto Man" skills = list( SKILL_CQC = SKILL_CQC_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, diff --git a/code/datums/skills/pmc.dm b/code/datums/skills/pmc.dm index df7027e2a7ab..1860157c0a54 100644 --- a/code/datums/skills/pmc.dm +++ b/code/datums/skills/pmc.dm @@ -14,7 +14,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, ) @@ -26,7 +26,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, @@ -40,7 +40,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_RESEARCH = SKILL_RESEARCH_TRAINED, @@ -54,7 +54,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_JTAC = SKILL_JTAC_BEGINNER, @@ -68,7 +68,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, @@ -83,7 +83,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CQC = SKILL_CQC_SKILLED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -99,7 +99,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CQC = SKILL_CQC_SKILLED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -116,7 +116,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_JTAC = SKILL_JTAC_TRAINED, @@ -131,7 +131,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, SKILL_SURGERY = SKILL_SURGERY_EXPERT, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, //trained in medicine more than combat @@ -160,7 +160,7 @@ Private Military Contractors SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_CQC = SKILL_CQC_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, diff --git a/code/datums/skills/rmc.dm b/code/datums/skills/rmc.dm index 89aa39b154ad..4385253e9a28 100644 --- a/code/datums/skills/rmc.dm +++ b/code/datums/skills/rmc.dm @@ -14,7 +14,7 @@ Royal Marines Commando SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, @@ -28,7 +28,7 @@ Royal Marines Commando SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, @@ -44,7 +44,7 @@ Royal Marines Commando SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, @@ -61,7 +61,7 @@ Royal Marines Commando SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, diff --git a/code/datums/skills/synthetic.dm b/code/datums/skills/synthetic.dm index 3925dd9605b3..c4d7296dee5d 100644 --- a/code/datums/skills/synthetic.dm +++ b/code/datums/skills/synthetic.dm @@ -33,7 +33,7 @@ SYNTHETIC name = SYNTH_COLONY skills = list( SKILL_CQC = SKILL_CQC_EXPERT, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL, diff --git a/code/datums/skills/upp.dm b/code/datums/skills/upp.dm index e367372719d6..8ada7ccad124 100644 --- a/code/datums/skills/upp.dm +++ b/code/datums/skills/upp.dm @@ -10,7 +10,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Private" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_CQC = SKILL_CQC_DEFAULT, @@ -22,7 +22,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Sapper" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_CQC = SKILL_CQC_DEFAULT, @@ -45,7 +45,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Specialist" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_CQC = SKILL_CQC_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, @@ -60,7 +60,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Squad Leader" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_CQC = SKILL_CQC_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, @@ -78,7 +78,7 @@ UNITED PROGRESSIVE PEOPLES SKILL_FIREMAN = SKILL_FIREMAN_EXPERT, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, ) @@ -93,7 +93,7 @@ UNITED PROGRESSIVE PEOPLES SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, @@ -109,7 +109,7 @@ UNITED PROGRESSIVE PEOPLES SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, @@ -126,7 +126,7 @@ UNITED PROGRESSIVE PEOPLES SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, @@ -147,7 +147,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Private" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -161,7 +161,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Sapper" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -176,7 +176,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Medic" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, SKILL_SURGERY = SKILL_SURGERY_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, @@ -192,7 +192,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Specialist" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -210,7 +210,7 @@ UNITED PROGRESSIVE PEOPLES name = "UPP Squad Leader" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP, SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm index f694e8789dcd..1bfb58996b4e 100644 --- a/code/datums/skills/uscm.dm +++ b/code/datums/skills/uscm.dm @@ -12,7 +12,7 @@ United States Colonial Marines name = "Crafty Private" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, ) /datum/skills/combat_medic @@ -28,7 +28,7 @@ United States Colonial Marines name = "Crafty Combat Medic" skills = list( SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, ) /datum/skills/combat_engineer @@ -55,7 +55,7 @@ United States Colonial Marines SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set. + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set. SKILL_SPEC_WEAPONS = SKILL_SPEC_TRAINED, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, @@ -66,7 +66,7 @@ United States Colonial Marines name = "Fireteam Leader" skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_JTAC = SKILL_JTAC_EXPERT, ) @@ -77,7 +77,7 @@ United States Colonial Marines SKILL_CQC = SKILL_CQC_TRAINED, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, @@ -90,7 +90,7 @@ United States Colonial Marines name = "Intelligence Officer" skills = list( SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_CQC = SKILL_CQC_TRAINED, @@ -157,7 +157,7 @@ MILITARY NONCOMBATANT SKILL_MEDICAL = SKILL_MEDICAL_MEDIC, SKILL_SURGERY = SKILL_SURGERY_NOVICE, SKILL_JTAC = SKILL_JTAC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, ) /datum/skills/MP @@ -180,7 +180,7 @@ MILITARY NONCOMBATANT SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, ) /datum/skills/provost @@ -216,7 +216,7 @@ MILITARY NONCOMBATANT name = "Mess Technician" skills = list( SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, // need to hunt food somehow - SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, SKILL_FIREMAN = SKILL_FIREMAN_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED, SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER @@ -240,7 +240,7 @@ COMMAND STAFF name = "General" skills = list( SKILL_CQC = SKILL_CQC_TRAINED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -259,7 +259,7 @@ COMMAND STAFF /datum/skills/commander name = "Commanding Officer" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -282,13 +282,13 @@ COMMAND STAFF /datum/skills/XO name = "Executive Officer" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc. + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc. SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, SKILL_SURGERY = SKILL_SURGERY_NOVICE, - SKILL_POLICE = SKILL_POLICE_FLASH, + SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, SKILL_CQC = SKILL_CQC_SKILLED, @@ -303,7 +303,7 @@ COMMAND STAFF /datum/skills/SO name = "Staff Officer" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -322,7 +322,7 @@ COMMAND STAFF name = "Senior Enlisted Advisor" skills = list( SKILL_CQC = SKILL_CQC_SKILLED, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_LEADERSHIP = SKILL_LEAD_EXPERT, @@ -375,7 +375,7 @@ COMMAND STAFF SKILL_JTAC = SKILL_JTAC_EXPERT, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_INTEL = SKILL_INTEL_TRAINED, ) @@ -392,7 +392,7 @@ COMMAND STAFF SKILL_JTAC = SKILL_JTAC_EXPERT, SKILL_INTEL = SKILL_INTEL_EXPERT, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_POLICE = SKILL_POLICE_FLASH, SKILL_NAVIGATIONS = SKILL_NAVIGATIONS_TRAINED, diff --git a/code/datums/skills/wygoons.dm b/code/datums/skills/wygoons.dm index 2d2c247bd1ea..73d8da15b976 100644 --- a/code/datums/skills/wygoons.dm +++ b/code/datums/skills/wygoons.dm @@ -18,7 +18,7 @@ SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, ) /datum/skills/wy_goon_lead @@ -31,6 +31,6 @@ SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, ) diff --git a/code/datums/supply_packs/explosives.dm b/code/datums/supply_packs/explosives.dm index 032ef047c78a..78f0f3e9251a 100644 --- a/code/datums/supply_packs/explosives.dm +++ b/code/datums/supply_packs/explosives.dm @@ -89,6 +89,18 @@ containername = "\improper explosive M40 HEDP grenades crate (WARNING)" group = "Explosives" +/datum/supply_packs/explosives_sebb + name = "G2 electroshock grenades crate (x6)" + contains = list( + /obj/item/storage/box/packet/sebb, + /obj/item/storage/box/packet/sebb, + ) + cost = 30 + containertype = /obj/structure/closet/crate/explosives + containername = "\improper G2 electroshock grenades crate (WARNING)" + group = "Explosives" + + /datum/supply_packs/explosives_hedp name = "M40 HEDP blast grenade box crate (x25)" contains = list( diff --git a/code/datums/tutorial/xenomorph/abomination.dm b/code/datums/tutorial/xenomorph/abomination.dm index db9b77cf2e75..83ac86b8f09e 100644 --- a/code/datums/tutorial/xenomorph/abomination.dm +++ b/code/datums/tutorial/xenomorph/abomination.dm @@ -147,6 +147,7 @@ /datum/tutorial/xenomorph/abomination/proc/frenzy_tutorial_4() var/mob/living/carbon/human/marine = new(loc_from_corner(4, 2)) add_to_tracking_atoms(marine) + RegisterSignal(marine, COMSIG_MOB_DEATH, PROC_REF(on_marine_early_death)) arm_equipment(marine, /datum/equipment_preset/uscm/private_equipped) var/datum/action/frenzy = give_action(xeno, /datum/action/xeno_action/activable/feralfrenzy) @@ -202,6 +203,7 @@ return UnregisterSignal(frenzy, COMSIG_XENO_ACTION_USED) + UnregisterSignal(marine, COMSIG_MOB_DEATH) remove_highlight(frenzy.button) message_to_player("Good. As you may have noticed, the AOE version of Feral Frenzy takes longer to wind up, in addition to doing less overall damage.") addtimer(CALLBACK(src, PROC_REF(kill_marines)), 6 SECONDS) @@ -245,3 +247,10 @@ tutorial_end_in(7 SECONDS, TRUE) // END OF SCRIPTING + +/// In case a marine dies early to prevent softlocks +/datum/tutorial/xenomorph/abomination/proc/on_marine_early_death(datum/source) + SIGNAL_HANDLER + + TUTORIAL_ATOM_FROM_TRACKING(/mob/living/carbon/human, marine) + marine.rejuvenate() diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm index b75baccd7353..a065a0b8671f 100644 --- a/code/game/area/almayer.dm +++ b/code/game/area/almayer.dm @@ -132,7 +132,7 @@ icon_state = "workshop" /area/almayer/engineering/lower/workshop/hangar - name = "\improper Ordnance workshop" + name = "\improper Ordnance Workshop" /area/almayer/engineering/lower/engine_core name = "\improper Engine Reactor Core Room" diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm index a5126627adaf..746e6ed53c18 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm @@ -35,7 +35,7 @@ /datum/skills/honor_guard/lead name = "Honor Guard Squad Leader" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc. + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc. SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, @@ -49,7 +49,7 @@ /datum/skills/mortar_crew name = "Mortar Crew" skills = list( - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, SKILL_JTAC = SKILL_JTAC_BEGINNER, SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER, diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 0af315fc3b9d..640866db8ca2 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -155,7 +155,7 @@ if(!gear_preset) return "" if(GLOB.gear_path_presets_list[gear_preset]) - return GLOB.gear_path_presets_list[gear_preset].paygrade + return GLOB.gear_path_presets_list[gear_preset].paygrades[1] return "" /datum/job/proc/get_comm_title() diff --git a/code/game/jobs/job/marine/squad_info.dm b/code/game/jobs/job/marine/squad_info.dm index 37db48c3116e..406263115196 100644 --- a/code/game/jobs/job/marine/squad_info.dm +++ b/code/game/jobs/job/marine/squad_info.dm @@ -146,7 +146,7 @@ if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED)) Med = TRUE else - if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) Eng = TRUE ID = H.get_idcard() squad_info_data["fireteams"][team]["tl"] = list( @@ -223,7 +223,7 @@ if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED)) Med = TRUE else - if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) Eng = TRUE mar[H.real_name] = list( "name" = H.real_name, @@ -270,7 +270,7 @@ if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED)) Med = TRUE else - if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) Eng = TRUE mar[H.real_name] = list( "name" = H.real_name, diff --git a/code/game/machinery/air_sensor.dm b/code/game/machinery/air_sensor.dm deleted file mode 100644 index 55963bae979a..000000000000 --- a/code/game/machinery/air_sensor.dm +++ /dev/null @@ -1,64 +0,0 @@ -/obj/structure/machinery/air_sensor - icon = 'icons/obj/structures/props/stationobjs.dmi' - icon_state = "gsensor1" - name = "Gas Sensor" - - anchored = TRUE - var/state = 0 - - var/id_tag - var/frequency = 1439 - - var/on = 1 - var/output = 3 - //Flags: - // 1 for pressure - // 2 for temperature - // Output >= 4 includes gas composition - // 4 for oxygen concentration - // 8 for phoron concentration - // 16 for nitrogen concentration - // 32 for carbon dioxide concentration - - var/datum/radio_frequency/radio_connection - -/obj/structure/machinery/air_sensor/update_icon() - icon_state = "gsensor[on]" - -/obj/structure/machinery/air_sensor/process() - if(on) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - var/turf/T = loc - var/pressure_ = T.return_pressure() - var/temperature_ = T.return_temperature() - - if(output&1) - signal.data["pressure"] = num2text(round(pressure_,0.1),) - if(output&2) - signal.data["temperature"] = round(temperature_,0.1) - - if(output>4) - signal.data["oxygen"] = 0 - signal.data["phoron"] = 0 - signal.data["nitrogen"] = 0 - signal.data["carbon_dioxide"] = 0 - signal.data["sigtype"]="status" - radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) - - -/obj/structure/machinery/air_sensor/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) - frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) - -/obj/structure/machinery/air_sensor/Initialize() - . = ..() - set_frequency(frequency) - -/obj/structure/machinery/air_sensor/Destroy() - SSradio.remove_object(src, frequency) - return ..() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 4150aead979e..4013aec3fb29 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -224,7 +224,7 @@ if("cutwire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = usr.get_held_item() @@ -238,7 +238,7 @@ if("fixwire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = usr.get_held_item() @@ -251,7 +251,7 @@ if("pulsewire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = usr.get_held_item() @@ -269,7 +269,7 @@ /obj/structure/machinery/autolathe/attackby(obj/item/O as obj, mob/user as mob) if(HAS_TRAIT(O, TRAIT_TOOL_SCREWDRIVER)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to dismantle machines...")) return panel_open = !panel_open @@ -586,7 +586,7 @@ stored_material = list("metal" = 56250, "plastic" = 20000) //15 metal and 10 plastic sheets /obj/structure/machinery/autolathe/armylathe/attack_hand(mob/user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to operate the [name].")) return FALSE . = ..() diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 78a8e46b64aa..9c8ee271845d 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -136,11 +136,6 @@ path = /obj/item/circuitboard/apc category = AUTOLATHE_CATEGORY_ENGINEERING -/datum/autolathe/recipe/rcd_ammo - name = "matter cartridge" - path = /obj/item/ammo_rcd - category = AUTOLATHE_CATEGORY_ENGINEERING - /datum/autolathe/recipe/table_parts name = "table parts" path = /obj/item/frame/table diff --git a/code/game/machinery/bio-dome_floodlights.dm b/code/game/machinery/bio-dome_floodlights.dm deleted file mode 100644 index e23dbcc023f4..000000000000 --- a/code/game/machinery/bio-dome_floodlights.dm +++ /dev/null @@ -1,169 +0,0 @@ -/obj/structure/machinery/hydro_floodlight_switch - name = "Biodome Floodlight Switch" - icon = 'icons/obj/structures/machinery/power.dmi' - icon_state = "panelnopower" - desc = "This switch controls the floodlights surrounding the archaeology complex. It only functions when there is power." - density = FALSE - anchored = TRUE - var/ispowered = FALSE - var/turned_on = 0 //has to be toggled in engineering - use_power = USE_POWER_IDLE - unslashable = TRUE - unacidable = TRUE - var/list/floodlist = list() // This will save our list of floodlights on the map - -/obj/structure/machinery/hydro_floodlight_switch/Initialize(mapload, ...) - . = ..() - for(var/obj/structure/machinery/hydro_floodlight/F in GLOB.machines) - floodlist += F - F.fswitch = src - start_processing() - -/obj/structure/machinery/hydro_floodlight_switch/Destroy() - for(var/obj/structure/machinery/hydro_floodlight/floodlight as anything in floodlist) - floodlight.fswitch = null - floodlist = null - return ..() - - -/obj/structure/machinery/hydro_floodlight_switch/process() - var/lightpower = 0 - for(var/obj/structure/machinery/hydro_floodlight/H in floodlist) - if(!H.is_lit) - continue - lightpower += H.power_tick - use_power(lightpower) - -/obj/structure/machinery/hydro_floodlight_switch/update_icon() - if(!ispowered) - icon_state = "panelnopower" - else if(turned_on) - icon_state = "panelon" - else - icon_state = "paneloff" - -/obj/structure/machinery/hydro_floodlight_switch/power_change() - ..() - if((stat & NOPOWER)) - if(ispowered && turned_on) - toggle_lights() - ispowered = FALSE - turned_on = 0 - update_icon() - else - ispowered = TRUE - update_icon() - -/obj/structure/machinery/hydro_floodlight_switch/proc/toggle_lights() - for(var/obj/structure/machinery/hydro_floodlight/F in floodlist) - if(!istype(F) || QDELETED(F) || F.damaged) continue //Missing or damaged, skip it - - spawn(rand(0,50)) - if(F.is_lit) //Shut it down - F.set_light(0) - else - F.set_light(F.lum_value) - F.is_lit = !(F.is_lit) - F.update_icon() - return 0 - -/obj/structure/machinery/hydro_floodlight_switch/attack_hand(mob/user as mob) - if(!ishuman(user)) - to_chat(user, "Nice try.") - return 0 - if(!ispowered) - to_chat(user, "Nothing happens.") - return 0 - playsound(src,'sound/machines/click.ogg', 15, 1) - use_power(5) - toggle_lights() - turned_on = !(src.turned_on) - update_icon() - return 1 - -/obj/structure/machinery/hydro_floodlight - name = "Biodome Floodlight" - icon = 'icons/obj/structures/machinery/big_floodlight.dmi' - icon_state = "flood_s_off" - density = TRUE - anchored = TRUE - layer = WINDOW_LAYER - var/damaged = 0 //Can be smashed by xenos - var/is_lit = 0 - unslashable = TRUE - unacidable = TRUE - var/power_tick = 800 // power each floodlight takes up per process - use_power = USE_POWER_NONE //It's the switch that uses the actual power, not the lights - var/obj/structure/machinery/hydro_floodlight_switch/fswitch = null //Reverse lookup for power grabbing in area - var/lum_value = 7 - -/obj/structure/machinery/hydro_floodlight/Destroy() - if(fswitch?.floodlist) - fswitch.floodlist -= src - fswitch = null - return ..() - -/obj/structure/machinery/hydro_floodlight/update_icon() - if(damaged) - icon_state = "flood_s_dmg" - else if(is_lit) - icon_state = "flood_s_on" - else - icon_state = "flood_s_off" - -/obj/structure/machinery/hydro_floodlight/attackby(obj/item/W as obj, mob/user as mob) - var/obj/item/tool/weldingtool/WT = W - if(istype(WT)) - if(!damaged) return - if(!HAS_TRAIT(WT, TRAIT_TOOL_BLOWTORCH)) - to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) - return - if(WT.remove_fuel(0, user)) - playsound(src.loc, 'sound/items/weldingtool_weld.ogg', 25) - user.visible_message(SPAN_NOTICE("[user] starts welding [src]'s damage."), \ - SPAN_NOTICE("You start welding [src]'s damage.")) - if(do_after(user, 200 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - playsound(get_turf(src), 'sound/items/Welder2.ogg', 25, 1) - if(!src || !WT.isOn()) return - damaged = 0 - user.visible_message(SPAN_NOTICE("[user] finishes welding [src]'s damage."), \ - SPAN_NOTICE("You finish welding [src]'s damage.")) - if(is_lit) - set_light(lum_value) - update_icon() - return 1 - else - to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task.")) - return 0 - ..() - return 0 - -/obj/structure/machinery/hydro_floodlight/attack_hand(mob/user as mob) - if(ishuman(user)) - to_chat(user, SPAN_WARNING("Nothing happens. Looks like it's powered elsewhere.")) - return 0 - else if(!is_lit) - to_chat(user, SPAN_WARNING("Why bother? It's just some weird metal thing.")) - return 0 - else - if(damaged) - to_chat(user, SPAN_WARNING("It's already damaged.")) - return 0 - else - if(islarva(user)) - return //Larvae can't do shit - if(user.get_active_hand()) - to_chat(user, SPAN_WARNING("You need your claws empty for this!")) - return FALSE - user.visible_message(SPAN_DANGER("[user] starts to slash and claw away at [src]!"), - SPAN_DANGER("You start slashing and clawing at [src]!")) - if(do_after(user, 50, INTERRUPT_ALL, BUSY_ICON_HOSTILE) && !damaged) //Not when it's already damaged. - if(!src) return 0 - damaged = 1 - set_light(0) - user.visible_message(SPAN_DANGER("[user] slashes up [src]!"), - SPAN_DANGER("You slash up [src]!")) - playsound(src, 'sound/weapons/blade1.ogg', 25, 1) - update_icon() - return 0 - ..() diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index a1d7f00cf94a..f8ce33eb9911 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -99,6 +99,10 @@ name = "ares core camera" network = list(CAMERA_NET_ARES) +/obj/structure/machinery/camera/autoname/almayer/brig + name = "brig camera" + network = list(CAMERA_NET_BRIG) + //used by the landing camera dropship equipment. Do not place them right under where the dropship lands. //Should place them near each corner of your LZs. /obj/structure/machinery/camera/autoname/lz_camera diff --git a/code/game/machinery/colony_floodlights.dm b/code/game/machinery/colony_floodlights.dm index 0267c7e95487..e8f59ad643d7 100644 --- a/code/game/machinery/colony_floodlights.dm +++ b/code/game/machinery/colony_floodlights.dm @@ -125,7 +125,7 @@ /obj/structure/machinery/colony_floodlight/attackby(obj/item/I, mob/user) if(damaged) if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair [src].")) return FALSE @@ -160,7 +160,7 @@ return TRUE else if(HAS_TRAIT(I, TRAIT_TOOL_CROWBAR)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair [src].")) return FALSE @@ -183,7 +183,7 @@ return var/obj/item/tool/weldingtool/welder = I - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair [src].")) return FALSE @@ -206,7 +206,7 @@ else if(iscoil(I)) var/obj/item/stack/cable_coil/coil = I - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair [src].")) return FALSE @@ -228,7 +228,7 @@ return TRUE else if(istype(I, /obj/item/device/lightreplacer)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair [src].")) return FALSE @@ -271,7 +271,7 @@ if(ishuman(user)) if(damaged) . += SPAN_WARNING("It is damaged.") - if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) switch(repair_state) if(FLOODLIGHT_REPAIR_UNSCREW) . += SPAN_INFO("You must first unscrew its maintenance hatch.") if(FLOODLIGHT_REPAIR_CROWBAR) . += SPAN_INFO("You must crowbar its lighting assembly out or use a light replacer.") diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index ff8f3959d64e..4f6f4df4ef08 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -123,7 +123,7 @@ src.temp = "[src.enemy_name] has fallen! Rejoice!" if(!length(contents)) - var/prizeselect = pickweight(prizes) + var/prizeselect = pick_weight(prizes) new prizeselect(src.loc) if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun @@ -176,5 +176,5 @@ if(2) num_of_prizes = rand(0,2) for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) - empprize = pickweight(prizes) + empprize = pick_weight(prizes) new empprize(src.loc) diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index c818df9fbfb9..e549436669de 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -352,6 +352,10 @@ /obj/structure/machinery/computer/cameras/almayer_network/vehicle network = list(CAMERA_NET_ALMAYER, CAMERA_NET_VEHICLE) +/obj/structure/machinery/computer/cameras/almayer_brig + name = "Brig Cameras Console" + network = list(CAMERA_NET_BRIG) + /obj/structure/machinery/computer/cameras/mortar name = "Mortar Camera Interface" alpha = 0 diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index bfa64ab174ed..bb434e8ca114 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -99,7 +99,7 @@ if(!deconstructible) to_chat(user, SPAN_WARNING("You can't figure out how to deconstruct [src]...")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know how to deconstruct [src]...")) return playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, 1) diff --git a/code/game/machinery/computer/demo_sim.dm b/code/game/machinery/computer/demo_sim.dm index f633e8f351d4..2b2ca9fda775 100644 --- a/code/game/machinery/computer/demo_sim.dm +++ b/code/game/machinery/computer/demo_sim.dm @@ -11,7 +11,7 @@ /obj/structure/machinery/computer/demo_sim/attackby(obj/item/B, mob/living/user) if(inoperable()) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know how to configure [src].")) return if(configuration) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 0c8cc62c3f87..3b7880320da7 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -15,7 +15,7 @@ var/list/req_component_names = null var/state = CONSTRUCTION_STATE_BEGIN var/required_skill = SKILL_CONSTRUCTION_ENGI - var/required_dismantle_skill = SKILL_ENGINEER_ENGI + var/required_dismantle_skill = SKILL_ENGINEER_TRAINED /obj/structure/machinery/constructable_frame/Initialize(mapload, ...) . = ..() diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 3f5e78dfc39f..266a58f62023 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -61,6 +61,9 @@ var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(ship_id) if (!istype(shuttle)) return + var/obj/structure/machinery/computer/shuttle/dropship/flight/comp = shuttle.getControlConsole() + if(comp?.dropship_control_lost) + return if(is_mainship_level(z)) // on the almayer return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 84f02f0a5bbd..9ac9765371f3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -439,7 +439,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( return if(panel_open) - if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You look into \the [src]'s access panel and can only see a jumbled mess of colored wires...")) return FALSE @@ -483,7 +483,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( add_fingerprint(usr) if((in_range(src, usr) && istype(loc, /turf)) && panel_open) - if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about [src]'s wiring!")) return FALSE @@ -649,7 +649,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list( else if(attacking_item.pry_capable) if(attacking_item.pry_capable == IS_PRY_CAPABLE_CROWBAR && panel_open && welded) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't seem to know how to deconstruct machines.")) return playsound(loc, 'sound/items/Crowbar.ogg', 25, 1) diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm index f95ef09e812f..6e7f571a0d4e 100644 --- a/code/game/machinery/doors/multi_tile.dm +++ b/code/game/machinery/doors/multi_tile.dm @@ -262,14 +262,14 @@ var/datum/door_controller/single/control = linked_dropship.door_control.door_controllers[direction] if (control.status != SHUTTLE_DOOR_BROKEN) return ..() - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED)) to_chat(user, SPAN_WARNING("You don't seem to understand how to restore a remote connection to [src].")) return if(user.action_busy) return to_chat(user, SPAN_WARNING("You begin to restore the remote connection to [src].")) - if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD)) + if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD)) to_chat(user, SPAN_WARNING("You fail to restore a remote connection to [src].")) return unlock(TRUE) diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm index 72f836717b0f..06ae3321a2c5 100644 --- a/code/game/machinery/fusion_engine.dm +++ b/code/game/machinery/fusion_engine.dm @@ -140,7 +140,7 @@ if(overloaded) . += SPAN_INFO("It is overloaded.") return - if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) . += SPAN_INFO("You could overload its safeties with a multitool.") /obj/structure/machinery/power/reactor/power_change() @@ -344,7 +344,7 @@ if(!is_ship_reactor) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) return to_chat(user, SPAN_WARNING("You start [overloaded ? "overloading" : "restoring"] the safeties on [src].")) @@ -446,7 +446,7 @@ var/repair_time = 20 SECONDS repair_time *= user.get_skill_duration_multiplier(SKILL_ENGINEER) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) repair_time += 5 SECONDS to_chat(user, SPAN_NOTICE("You start repairing [src] with [tool].")) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm deleted file mode 100644 index fe8243704a72..000000000000 --- a/code/game/machinery/hologram.dm +++ /dev/null @@ -1,61 +0,0 @@ -/* Holograms! - * Contains: - * Hologram - * Holopad - * Other stuff - */ - - - -/* - * Hologram - */ - -/obj/structure/machinery/hologram - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 5 - active_power_usage = 100 - var/obj/effect/overlay/hologram //The projection itself. If there is one, the instrument is on, off otherwise. - -/obj/structure/machinery/hologram/ex_act(severity) - switch(severity) - if(0 to EXPLOSION_THRESHOLD_LOW) - if (prob(5)) - qdel(src) - if(EXPLOSION_THRESHOLD_LOW to EXPLOSION_THRESHOLD_MEDIUM) - if (prob(50)) - qdel(src) - if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY) - qdel(src) - -/obj/structure/machinery/hologram/Destroy() - if(hologram) - clear_holo() - return ..() - -/obj/structure/machinery/hologram/proc/clear_holo() - if(hologram) - qdel(hologram) - hologram = null - - - -/* - * Holopad - */ - -/obj/structure/machinery/hologram/holopad - name = "\improper AI holopad" - desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." - icon_state = "holopad0" - - layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. -/* - * Other Stuff: Is this even used? - */ -/obj/structure/machinery/hologram/projector - name = "hologram projector" - desc = "It makes a hologram appear...with magnets or something..." - icon = 'icons/obj/structures/props/stationobjs.dmi' - icon_state = "holopad0" diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index b71fb51a49de..9e6a2198962e 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -20,37 +20,6 @@ if (PF) PF.flags_can_pass_all = PASS_HIGH_OVER_ONLY|PASS_AROUND|PASS_OVER_THROW_ITEM -//auto-gibs anything that bumps into it -/obj/structure/machinery/gibber/autogibber - var/turf/input_plate - -/obj/structure/machinery/gibber/autogibber/New() - ..() - spawn(5) - for(var/i in GLOB.cardinals) - var/obj/structure/machinery/mineral/input/input_obj = locate( /obj/structure/machinery/mineral/input, get_step(loc, i) ) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - qdel(input_obj) - break - - if(!input_plate) - log_misc("a [src] didn't find an input plate.") - return - -/obj/structure/machinery/gibber/autogibber/Collided(atom/A) - if(!input_plate) return - - if(ismob(A)) - var/mob/M = A - - if(M.loc == input_plate - ) - M.forceMove(src) - M.gib() - - /obj/structure/machinery/gibber/New() ..() overlays += image('icons/obj/structures/machinery/kitchen.dmi', "grjam") diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 774153316baa..957f6c97eca3 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -350,7 +350,7 @@ if("cutwire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = user.get_held_item() @@ -364,7 +364,7 @@ if("fixwire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = user.get_held_item() @@ -377,7 +377,7 @@ if("pulsewire") if(!panel_open) return FALSE - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring...")) return FALSE var/obj/item/held_item = user.get_held_item() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index f835ecaa424c..f7244fb8ce0d 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -171,7 +171,7 @@ Class Procs: . += "It does not appear to be working." var/msg = get_repair_move_text(FALSE) - if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) . += SPAN_WARNING("[msg]") /obj/structure/machinery/emp_act(severity) diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm deleted file mode 100644 index f1b0081e3a39..000000000000 --- a/code/game/machinery/mass_driver.dm +++ /dev/null @@ -1,10 +0,0 @@ -// Legacy SS13 machinery turned into a prop -/obj/structure/machinery/mass_driver - name = "mass driver" - desc = "Shoots things into space." - icon = 'icons/obj/structures/props/stationobjs.dmi' - icon_state = "mass_driver" - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 2 - active_power_usage = 50 diff --git a/code/game/machinery/medical_pod/autodoc.dm b/code/game/machinery/medical_pod/autodoc.dm index ef335c6841e6..b5fd43b35651 100644 --- a/code/game/machinery/medical_pod/autodoc.dm +++ b/code/game/machinery/medical_pod/autodoc.dm @@ -238,11 +238,6 @@ surgery_list += create_autodoc_surgery(L,ORGAN_SURGERY,"damage",0,I) organdamagesurgery++ - if(istype(L,/obj/limb/head)) - var/obj/limb/head/H = L - if(H.disfigured) - surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"facial") - if(L.status & LIMB_BROKEN) surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"broken") if(L.status & LIMB_DESTROYED) @@ -521,20 +516,6 @@ if(!surgery) break close_incision(H,S.limb_ref) - if("facial") - if(prob(30)) visible_message("[icon2html(src, viewers(src))] \The [src] speaks: Beginning Facial Reconstruction Surgery."); - if(S.unneeded) - sleep(UNNEEDED_DELAY) - visible_message("[icon2html(src, viewers(src))] \The [src] speaks: Procedure has been deemed unnecessary."); - surgery_todo_list -= S - continue - if(istype(S.limb_ref, /obj/limb/head)) - var/obj/limb/head/F = S.limb_ref - sleep(SCALPEL_MAX_DURATION + HEMOSTAT_MAX_DURATION + RETRACTOR_MAX_DURATION + CAUTERY_MAX_DURATION) - F.remove_all_bleeding(TRUE) - F.disfigured = 0 - F.owner.name = F.owner.get_visible_name() - if("open") if(prob(30)) visible_message("[icon2html(src, viewers(src))] \The [src]croaks: Closing surgical incision."); close_encased(H,S.limb_ref) @@ -753,9 +734,6 @@ if("shrapnel") surgeryqueue["shrapnel"] = 1 dat += "Shrapnel Removal Surgery" - if("facial") - surgeryqueue["facial"] = 1 - dat += "Facial Reconstruction Surgery" if("open") surgeryqueue["open"] = 1 dat += "Close Open Incisions" @@ -902,18 +880,6 @@ N.fields["autodoc_manual"] += create_autodoc_surgery(null,LIMB_SURGERY,"shrapnel",1) updateUsrDialog() - if(href_list["facial"]) - for(var/obj/limb/L in connected.occupant.limbs) - if(L) - if(istype(L,/obj/limb/head)) - var/obj/limb/head/J = L - if(J.disfigured) - N.fields["autodoc_manual"] += create_autodoc_surgery(L,LIMB_SURGERY,"facial") - else - N.fields["autodoc_manual"] += create_autodoc_surgery(L,LIMB_SURGERY,"facial",1) - updateUsrDialog() - break - if(href_list["open"]) for(var/obj/limb/L in connected.occupant.limbs) if(L) diff --git a/code/game/machinery/mining.dm b/code/game/machinery/mining.dm index 0662817174fc..97ba4a804f1d 100644 --- a/code/game/machinery/mining.dm +++ b/code/game/machinery/mining.dm @@ -1,25 +1,3 @@ -/obj/structure/machinery/mineral/input - icon = 'icons/mob/hud/screen1.dmi' - icon_state = "x2" - name = "Input area" - density = FALSE - anchored = TRUE - -/obj/structure/machinery/mineral/input/Initialize(mapload, ...) - . = ..() - icon_state = "blank" - -/obj/structure/machinery/mineral/output - icon = 'icons/mob/hud/screen1.dmi' - icon_state = "x" - name = "Output area" - density = FALSE - anchored = TRUE - -/obj/structure/machinery/mineral/output/Initialize(mapload, ...) - . = ..() - icon_state = "blank" - /obj/structure/machinery/mineral/processing_unit name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron... icon = 'icons/obj/structures/machinery/mining_machines.dmi' diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 0b4574cc9fb4..71caa7a869cf 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -6,32 +6,61 @@ density = TRUE anchored = TRUE -/obj/structure/machinery/seed_extractor/attackby(obj/item/O as obj, mob/user as mob) +/obj/structure/machinery/seed_extractor/attackby(obj/item/object as obj, mob/user as mob) + // Plant bag and other storage containers. + if(istype(object,/obj/item/storage)) + var/obj/item/storage/container = object + if(length(container.contents) == 0) + to_chat(user, SPAN_NOTICE("[container] is empty.")) + return + + to_chat(user, SPAN_NOTICE("You start dumping the contents of [container] into [src].")) + if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + return + + for(var/obj/item/item as anything in container) + if(extract(item, user)) + // Properly deletes container contents after they've been processed + container.remove_from_storage(item) + item.moveToNullspace() + + playsound(user.loc, "rustle", 15, 1, 6) + else + extract(object, user) + + + +/obj/structure/machinery/seed_extractor/proc/extract(obj/item/object as obj, mob/user as mob) // Fruits and vegetables. - if(istype(O, /obj/item/reagent_container/food/snacks/grown) || istype(O, /obj/item/grown)) - if(user.temp_drop_inv_item(O)) + if(istype(object, /obj/item/reagent_container/food/snacks/grown) || istype(object, /obj/item/grown)) + if(user.temp_drop_inv_item(object)) var/datum/seed/new_seed_type - if(istype(O, /obj/item/grown)) - var/obj/item/grown/F = O - new_seed_type = GLOB.seed_types[F.plantname] + if(istype(object, /obj/item/grown)) + var/obj/item/grown/plant = object + new_seed_type = GLOB.seed_types[plant.plantname] else - var/obj/item/reagent_container/food/snacks/grown/F = O - new_seed_type = GLOB.seed_types[F.plantname] + var/obj/item/reagent_container/food/snacks/grown/plant = object + new_seed_type = GLOB.seed_types[plant.plantname] if(new_seed_type) - to_chat(user, SPAN_NOTICE("You extract some seeds from [O].")) + to_chat(user, SPAN_NOTICE("You extract some seeds from [object].")) var/produce = rand(1,4) for(var/i = 0;i<=produce;i++) var/obj/item/seeds/seeds = new(get_turf(src)) seeds.seed_type = new_seed_type.name seeds.update_seed() else - to_chat(user, "[O] doesn't seem to have any usable seeds inside it.") - qdel(O) + to_chat(user, "[object] doesn't seem to have any usable seeds inside it.") + qdel(object) + return TRUE //Grass. - else if(istype(O, /obj/item/stack/tile/grass)) - var/obj/item/stack/tile/grass/S = O - if (S.use(1)) + else if(istype(object, /obj/item/stack/tile/grass)) + var/obj/item/stack/tile/grass/grass = object + if (grass.use(1)) to_chat(user, SPAN_NOTICE("You extract some seeds from the grass tile.")) new /obj/item/seeds/grassseed(loc) + return TRUE + else + to_chat(user, SPAN_WARNING("Cannot get seeds from [object].")) + return FALSE diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 9bffa8ebe450..31cd2cf94d4e 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -22,7 +22,7 @@ attack_hand(user) else - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly...")) return 0 @@ -103,7 +103,7 @@ // You need a multitool to use this, or be silicon if(!isSilicon(user)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly...")) return // istype returns false if the value is null diff --git a/code/game/machinery/telecomms/portable_comms.dm b/code/game/machinery/telecomms/portable_comms.dm index c2a9bb1072ac..cf7ef1c1f2ef 100644 --- a/code/game/machinery/telecomms/portable_comms.dm +++ b/code/game/machinery/telecomms/portable_comms.dm @@ -3,7 +3,7 @@ desc = "A portable compact TC-4T telecommunications construction kit. Used to set up subspace communications lines between planetary and extra-planetary locations. Needs cabling." icon = 'icons/obj/structures/machinery/comm_tower2.dmi' icon_state = "construct_0_0" - required_skill = SKILL_ENGINEER_ENGI + required_skill = SKILL_ENGINEER_TRAINED required_dismantle_skill = 5 density = TRUE anchored = FALSE diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 0c9e875534da..de2491126c7c 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -122,7 +122,7 @@ return if(user.action_busy) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You're not trained to repair [src]...")) return var/obj/item/tool/weldingtool/WT = I diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index db173e7b1608..2d15d4c37da8 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(vending_products) /obj/structure/machinery/cm_vending/get_examine_text(mob/living/carbon/human/user) . = ..() - if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && hackable) + if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && hackable) . += SPAN_NOTICE("You believe you can hack this one to remove the access requirements.") /obj/structure/machinery/cm_vending/proc/hack_access(mob/user) @@ -678,7 +678,7 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(user, SPAN_WARNING("You need to set [src] back upright first.")) return if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) return FALSE else if(stat & MAINT) @@ -705,7 +705,7 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(user, SPAN_WARNING("[msg]")) return FALSE else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) return FALSE else if(stat & REPAIR_STEP_ONE) @@ -722,7 +722,7 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(user, SPAN_WARNING("[msg]")) return FALSE else if(iswire(W)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) return FALSE var/obj/item/stack/cable_coil/CC = W @@ -745,7 +745,7 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(user, SPAN_WARNING("[msg]")) return else if(istype(W, /obj/item/stack/sheet/metal)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src].")) return FALSE var/obj/item/stack/sheet/metal/M = W @@ -768,7 +768,7 @@ GLOBAL_LIST_EMPTY(vending_products) else if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL)) var/obj/item/device/multitool/MT = W - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT)) to_chat(user, SPAN_WARNING("You do not understand how tweak access requirements in [src].")) return FALSE if(stat != WORKING) diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm index a05245e4b185..c6ef6eb7a574 100644 --- a/code/game/machinery/vending/vending.dm +++ b/code/game/machinery/vending/vending.dm @@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") update_icon() return TRUE - else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE else if(stat & BROKEN) @@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending to_chat(user, SPAN_WARNING("[msg]")) return FALSE else if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE else if(stat == WORKING && panel_open) @@ -254,7 +254,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending to_chat(user, SPAN_WARNING("[msg]")) return FALSE else if(istype(item, /obj/item/stack/cable_coil)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE var/obj/item/stack/cable_coil/CC = item @@ -277,7 +277,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending to_chat(user, SPAN_WARNING("[msg]")) return else if(istype(item, /obj/item/stack/sheet/metal)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name].")) return FALSE var/obj/item/stack/sheet/metal/M = item diff --git a/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm b/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm index b0894ca2a5a2..81bee126dbc8 100644 --- a/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm +++ b/code/game/machinery/vending/vendor_types/crew/combat_correspondent.dm @@ -3,9 +3,11 @@ GLOBAL_LIST_INIT(cm_vending_clothing_combat_correspondent, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Essential Reporter's Set", 0, /obj/effect/essentials_set/cc, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), + list("Leather Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), + + list("CIVILIAN EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Portable Press Fax Machine", 0, /obj/item/device/fax_backpack, CIVILIAN_CAN_BUY_BACKPACK, VENDOR_ITEM_RECOMMENDED), list("Press Broadcasting Camera", 0, /obj/item/device/camera/broadcasting, CIVILIAN_CAN_BUY_UTILITY, VENDOR_ITEM_RECOMMENDED), - list("Leather Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("UNIFORM (CHOOSE 1)", 0, null, null, null), list("Black Uniform", 0, /obj/item/clothing/under/marine/reporter/black, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm b/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm index d7d49a8ae044..dd2fc9c4a5b7 100644 --- a/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm +++ b/code/game/machinery/vending/vendor_types/crew/commanding_officer.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_commanding_officer, list( list("HEDP Grenade Pack", 15, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), list("HEFA Grenade Pack", 15, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("WP Grenade Pack", 15, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Packet (x3 grenades)", 15, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), list("RAIL ATTACHMENTS", 0, null, null, null), list("Red-Dot Sight", 15, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/crew/mp.dm b/code/game/machinery/vending/vendor_types/crew/mp.dm index b63a02248168..5f85060dc96f 100644 --- a/code/game/machinery/vending/vendor_types/crew/mp.dm +++ b/code/game/machinery/vending/vendor_types/crew/mp.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police, list( list("BELT (CHOOSE 1)", 0, null, null, null), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("POUCHES (CHOOSE 2)", 0, null, null, null), @@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_warden, list( list("BELT (CHOOSE 1)", 0, null, null, null), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("POUCHES (CHOOSE 2)", 0, null, null, null), diff --git a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm index 8f9ac837cb6a..45ad67d41c74 100644 --- a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm +++ b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm @@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_pilot_officer, list( list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_dropship_crew_chief, list( list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm index c43d7e730d89..b63a73a90f06 100644 --- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm +++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_chief, list( list("BELT (CHOOSE 1)", 0, null, null, null), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("POUCHES (CHOOSE 2)", 0, null, null, null), @@ -329,19 +329,21 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list( list("Shotgun Slugs", 20, /obj/item/ammo_magazine/shotgun/slugs, null, VENDOR_ITEM_REGULAR), list("Flechette Shells", 20, /obj/item/ammo_magazine/shotgun/flechette, null, VENDOR_ITEM_REGULAR), + list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null), + list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), + list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), + list("EXPLOSIVES", 0, null, null, null), list("HEDP Grenade Pack", 15, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR), list("HEFA Grenade Pack", 15, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR), list("WP Grenade Pack", 15, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR), list("RAIL ATTACHMENTS", 0, null, null, null), + list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED), list("Red-Dot Sight", 15, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR), list("Reflex Sight", 15, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR), list("S4 2x Telescopic Mini-Scope", 15, /obj/item/attachable/scope/mini, null, VENDOR_ITEM_REGULAR), - list("Helmet Visors", 0, null, null, null), - list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_RECOMMENDED), - list("UNDERBARREL ATTACHMENTS", 0, null, null, null), list("Laser Sight", 15, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR), list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR), @@ -355,6 +357,22 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list( list("Extended Barrel", 15, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR), list("Recoil Compensator", 15, /obj/item/attachable/compensator, null, VENDOR_ITEM_REGULAR), list("Suppressor", 15, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR), + + list("OTHER SUPPLIES", 0, null, null, null), + list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), + list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR), + list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR), + list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED), + list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED), + list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), + list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), + list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), + list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED), + list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), + list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR), + list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR), )) /obj/effect/essentials_set/xo/shotgunpreset @@ -377,10 +395,16 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list( //------------UNIFORM/GEAR VENDOR--------------- GLOBAL_LIST_INIT(cm_vending_clothing_xo, list( + list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), + list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY), + list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY), + list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), list("Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY), + list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), list("UNIFORM (CHOOSE ONE)", 0, null, null, null), list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED), @@ -393,53 +417,60 @@ GLOBAL_LIST_INIT(cm_vending_clothing_xo, list( list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR), list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR), - list("BELTS (CHOOSE 1)", 0, null, null, null), - list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Holster Toolrig", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - - list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), - list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY), - list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY), - list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY), - list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), - list("EYEWEAR (CHOOSE 1)", 0, null, null, null), list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED), list("Security HUD Glasses", 0, /obj/item/clothing/glasses/sunglasses/sechud, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), list("Bimex Personal Shades", 0, /obj/item/clothing/glasses/sunglasses/big, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED), list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + list("HATS (CHOOSE 1)", 0, null, null, null), + list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("PATCHES", 0, null, null, null), - list("Falling Falcons Shoulder Patch", 0, /obj/item/clothing/accessory/patch/falcon, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY), - list("USCM Shoulder Patch", 0, /obj/item/clothing/accessory/patch, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), + list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR), + list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR), + + + list("BELT (CHOOSE 1)", 0, null, null, null), + list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("POUCHES (CHOOSE 2)", 0, null, null, null), - list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), - list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - - list("HATS (CHOOSE 1)", 0, null, null, null), - list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), + list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), )) @@ -451,7 +482,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_auxiliary_officer, list( list("Insulated Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), list("Officer Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), list("Headset", 0, /obj/item/device/radio/headset/almayer/qm, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), - list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_MANDATORY), list("Auxiliary Support Officer Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service/aso, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), list("BAG (CHOOSE 1)", 0, null, null, null), @@ -463,6 +493,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_auxiliary_officer, list( list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), list("M44 Custom Revolver", 0, /obj/item/storage/belt/gun/m44/custom, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("HAT (CHOOSE 1)", 0, null, null, null), + list("Beret, Green", 0, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED), + list("Beret, Tan", 0, /obj/item/clothing/head/beret/cm/tan, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED), + list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED), + list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED), + list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED), + list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY), list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY), diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm index 50b83ccdc54f..65fbf2917699 100644 --- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm +++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm @@ -7,11 +7,11 @@ /obj/structure/machinery/cm_vending/clothing/staff_officer/get_listed_products(mob/user) return GLOB.cm_vending_clothing_staff_officer -//------------GEAR--------------- +//------------CLOTHING--------------- GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), - list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY), + list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY), list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), @@ -31,12 +31,24 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list( list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED), list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED), + list("PATCHES", 0, null, null, null), + list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR), + list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR), + list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null), list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED), + list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), + list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), + list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("BACKPACK (CHOOSE 1)", 0, null, null, null), list("Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), list("Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR), @@ -46,8 +58,85 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list( list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED), - list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED), + list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR), + list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), + list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR), + list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + )) + +/obj/structure/machinery/cm_vending/gear/staff_officer_armory + name = "\improper ColMarTech Staff Officer Armory Equipment Rack" + desc = "An automated combat equipment vendor for Staff Officers." + req_access = list(ACCESS_MARINE_COMMAND) + icon_state = "mar_rack" + vendor_role = list(JOB_SO) + +/obj/structure/machinery/cm_vending/gear/staff_officer_armory/get_listed_products(mob/user) + return GLOB.cm_vending_gear_staff_officer_armory + +//------------ARMORY--------------- + +GLOBAL_LIST_INIT(cm_vending_gear_staff_officer_armory, list( + list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), + list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), + list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY), + list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY), + list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), + list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), + list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + list("Bayonet", 0, /obj/item/attachable/bayonet, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR), + + list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null), + list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), + list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY), + + list("BELT (CHOOSE 1)", 0, null, null, null), + list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), + list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + + list("POUCHES (CHOOSE 2)", 0, null, null, null), + list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), + list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + + list("MASK (CHOOSE 1)", 0, null, null, null), + list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), + list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), + + list("OTHER SUPPLIES", 0, null, null, null), + list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), + list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR), + list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR), + list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED), + list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED), list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED), + list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR), + list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), + list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), + list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED), + list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR), list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), + list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR), )) diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm deleted file mode 100644 index 1e21f2f7256d..000000000000 --- a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm +++ /dev/null @@ -1,89 +0,0 @@ -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory - name = "\improper ColMarTech Staff Officer Armory Equipment Rack" - desc = "An automated combat equipment vendor for Staff Officers." - req_access = list(ACCESS_MARINE_COMMAND) - icon_state = "mar_rack" - vendor_role = list(JOB_SO) - -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory/get_listed_products(mob/user) - return GLOB.cm_vending_clothing_staff_officer_armory - -//------------GEAR--------------- - -GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer_armory, list( - list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null), - list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY), - list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY), - list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY), - list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY), - list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), - list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), - list("Bayonet", 0, /obj/item/attachable/bayonet, null, VENDOR_ITEM_REGULAR), - - list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null), - list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), - list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), - - list("BELT (CHOOSE 1)", 0, null, null, null), - list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), - list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - - list("POUCHES (CHOOSE 2)", 0, null, null, null), - list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), - list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), - - list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), - list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), - list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), - - list("MASK (CHOOSE 1)", 0, null, null, null), - list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), - - list("OTHER SUPPLIES", 0, null, null, null), - list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR), - list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR), - list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_REGULAR), - list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED), - list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR), - list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR), - list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED), - list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR), - list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED), - list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR), - list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR), - list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR), - list("Blowtorch", 5, /obj/item/tool/weldingtool, null, VENDOR_ITEM_REGULAR), - list("Wrench", 1, /obj/item/tool/wrench, null, VENDOR_ITEM_REGULAR), - list("Crowbar", 1, /obj/item/tool/crowbar, null, VENDOR_ITEM_REGULAR), - list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR), - list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR), - list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR) - )) diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 3f8eff44d052..9ce15535e2da 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -188,7 +188,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("USCM UNIFORMS", 0, null, null, null), list("Medical Scrubs, Blue", 12, /obj/item/clothing/under/rank/medical/blue, null, VENDOR_ITEM_REGULAR), - list("Medical Scrubs, Light Blue", 0, /obj/item/clothing/under/rank/medical/lightblue, null, VENDOR_ITEM_REGULAR), + list("Medical Scrubs, Light Blue", 12, /obj/item/clothing/under/rank/medical/lightblue, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, Green", 12, /obj/item/clothing/under/rank/medical/green, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, Purple", 12, /obj/item/clothing/under/rank/medical/purple, null, VENDOR_ITEM_REGULAR), list("Medical Scrubs, Olive", 12, /obj/item/clothing/under/rank/medical/olive, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm index 53853f7d4e8b..2dd5bdf2ee68 100644 --- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm +++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm @@ -274,7 +274,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list( list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/engineering.dm b/code/game/machinery/vending/vendor_types/engineering.dm index 6da719e883ba..3662d447a346 100644 --- a/code/game/machinery/vending/vendor_types/engineering.dm +++ b/code/game/machinery/vending/vendor_types/engineering.dm @@ -89,7 +89,7 @@ list("Supply Ordering Console", 2, /obj/item/circuitboard/computer/ordercomp, VENDOR_ITEM_REGULAR), list("Research Data Terminal", 2, /obj/item/circuitboard/computer/research_terminal, VENDOR_ITEM_REGULAR), list("P.A.C.M.A.N Generator", 1, /obj/item/circuitboard/machine/pacman, VENDOR_ITEM_REGULAR), - list("Auxiliar Power Storage Unit", 2, /obj/item/circuitboard/machine/ghettosmes, VENDOR_ITEM_REGULAR), + list("Auxiliary Power Storage Unit", 2, /obj/item/circuitboard/machine/ghettosmes, VENDOR_ITEM_REGULAR), list("Air Alarm Electronics", 2, /obj/item/circuitboard/airalarm, VENDOR_ITEM_REGULAR), list("Security Camera Monitor", 2, /obj/item/circuitboard/computer/cameras, VENDOR_ITEM_REGULAR), list("Television Set", 4, /obj/item/circuitboard/computer/cameras/tv, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm index 73d54cbbffca..63d3e93873d2 100644 --- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm +++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm @@ -96,7 +96,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_intelligence_officer, list( list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm index a8d44a8b5012..a4328bad5ea4 100644 --- a/code/game/machinery/vending/vendor_types/requisitions.dm +++ b/code/game/machinery/vending/vendor_types/requisitions.dm @@ -55,6 +55,7 @@ list("M74 AGM-Smoke Airburst Grenade", floor(scale * 4), /obj/item/explosive/grenade/smokebomb/airburst, VENDOR_ITEM_REGULAR), list("M74 AGM-Star Shell", floor(scale * 2), /obj/item/explosive/grenade/high_explosive/airburst/starshell, VENDOR_ITEM_REGULAR), list("M74 AGM-Hornet Shell", floor(scale * 4), /obj/item/explosive/grenade/high_explosive/airburst/hornet_shell, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade", round(scale * 5), /obj/item/explosive/grenade/sebb, VENDOR_ITEM_REGULAR), list("M40 HIRR Baton Slug", floor(scale * 8), /obj/item/explosive/grenade/slug/baton, VENDOR_ITEM_REGULAR), list("M40 MFHS Metal Foam Grenade", floor(scale * 6), /obj/item/explosive/grenade/metal_foam, VENDOR_ITEM_REGULAR), list("Plastic Explosives", floor(scale * 3), /obj/item/explosive/plastic, VENDOR_ITEM_REGULAR), @@ -86,7 +87,7 @@ list("M276 Knife Rig", floor(scale * 5), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", floor(scale * 2), /obj/item/storage/belt/grenade, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", floor(scale * 2), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", floor(scale * 10), /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR), list("M276 Mortar Operator Belt", floor(scale * 2), /obj/item/storage/belt/gun/mortarbelt, VENDOR_ITEM_REGULAR), @@ -139,6 +140,7 @@ list("Powerloader Certification", 0.75, /obj/item/pamphlet/skill/powerloader, VENDOR_ITEM_REGULAR), list("Spare PDT/L Battle Buddy Kit", floor(scale * 4), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR), list("W-Y brand rechargeable mini-battery", floor(scale * 3), /obj/item/cell/crap, VENDOR_ITEM_REGULAR), + list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR), list("EXPLOSIVES BOXES", -1, null, null), list("M15 Fragmentation Grenade Packet", 0, /obj/item/storage/box/packet/m15, VENDOR_ITEM_REGULAR), @@ -154,12 +156,14 @@ list("M74 AGM-Airburst Smoke Grenade Packet", 0, /obj/item/storage/box/packet/airburst_smoke, VENDOR_ITEM_REGULAR), list("M74 AGM-S Star Shell Packet", 0, /obj/item/storage/box/packet/flare, VENDOR_ITEM_REGULAR), list("M74 AGM-H Hornet Shell Packet", 0, /obj/item/storage/box/packet/hornet, VENDOR_ITEM_REGULAR), + list("G2 Electroshock grenade packet", 0, /obj/item/storage/box/packet/sebb, VENDOR_ITEM_REGULAR), list("M20 mine box", 0, /obj/item/storage/box/explosive_mines, VENDOR_ITEM_REGULAR), list("OTHER BOXES", -1, null, null), list("Box of M94 Marking Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares, VENDOR_ITEM_REGULAR), list("Box of M89 Signal Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares/signal, VENDOR_ITEM_REGULAR), - list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR) + list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR), + list("Nailgun Magazine Box (7x45mm)", floor(scale * 2), /obj/item/ammo_box/magazine/nailgun, VENDOR_ITEM_REGULAR) ) /obj/structure/machinery/cm_vending/sorted/cargo_guns/stock(obj/item/item_to_stock, mob/user) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm index aaf134c4a459..53ce7986f195 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm @@ -35,6 +35,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list( list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR), list("M20 Mine Box (x4 mines)", 18, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR), list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), list("PRIMARY AMMUNITION", 0, null, null, null), list("M4RA AP Magazine (10x24mm)", 6, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR), @@ -131,12 +132,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list( list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Mortar Operator Belt", 0, /obj/item/storage/belt/gun/mortarbelt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M277 Pattern Construction Rig", 0, /obj/item/storage/belt/utility/construction, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("POUCHES (CHOOSE 2)", 0, null, null, null), list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED), @@ -152,6 +154,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list( list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("Engineer kit Pouch", 0, /obj/item/storage/pouch/engikit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR), + list("ACCESSORIES (CHOOSE 1)", 0, null, null, null), list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), @@ -159,6 +163,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list( list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Small Tool Webbing (Full)", 0, /obj/item/clothing/accessory/storage/tool_webbing/small/equipped, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), list("MASK (CHOOSE 1)", 0, null, null, null), list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR), @@ -210,4 +215,5 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list( /obj/item/cell/high, /obj/item/tool/shovel/etool/folded, /obj/item/device/lightreplacer, + /obj/item/weapon/gun/smg/nailgun/compact/tactical, ) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm index 17d3419ac2f8..d3985adf5fab 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm @@ -61,6 +61,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list( list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR), list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR), list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), list("MEDICAL SUPPLIES", 0, null, null, null), list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR), @@ -143,7 +144,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_leader, list( list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm index a73df202d4ef..45e63b36a5c8 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm @@ -57,6 +57,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list( list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR), list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR), list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), list("PRIMARY AMMUNITION", 0, null, null, null), list("M4RA AP Magazine (10x24mm)", 6, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR), @@ -151,7 +152,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list( list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm index 35b059ac9611..ff43ca68657d 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm @@ -148,7 +148,7 @@ list("M276 Pattern General Pistol Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR), list("M276 Pattern M39 Holster Rig", floor(scale * 15), /obj/item/storage/large_holster/m39, VENDOR_ITEM_REGULAR), list("M276 Pattern M39 Holster Rig And Pouch", floor(scale * 10), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR), - list("M276 Pattern M44 Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), + list("M276 Pattern General Revolver Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), list("M276 Pattern M82F Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR), list("M276 Knife Rig (Full)", floor(scale * 15), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", floor(scale * 15), /obj/item/storage/backpack/general_belt, VENDOR_ITEM_REGULAR), @@ -339,7 +339,8 @@ list("Binoculars", floor(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR), list("MB-6 Folding Barricades (x3)", floor(scale * 2), /obj/item/stack/folding_barricade/three, VENDOR_ITEM_REGULAR), list("Spare PDT/L Battle Buddy Kit", floor(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR), - list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR) + list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR), + list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR) ) //--------------SQUAD ATTACHMENTS VENDOR-------------- diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm index 65066731070d..75e7fc36e4d3 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm @@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list( list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm index 4d14b7b89ccd..a21207a6645c 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list( list("M74 AGM-F Fragmentation Grenades x6", 40, /obj/effect/essentials_set/agmf_6_pack, null, VENDOR_ITEM_REGULAR), list("M74 AGM-I Incendiary Grenades x6", 40, /obj/effect/essentials_set/agmi_6_pack, null, VENDOR_ITEM_REGULAR), list("M74 AGM-S Smoke Grenades x6", 20, /obj/effect/essentials_set/agms_6_pack, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Pack x6", 40, /obj/effect/essentials_set/sebb_6_pack, null, VENDOR_ITEM_REGULAR), list("EXTRA FLAMETHROWER TANKS", 0, null, null, null), list("Large Incinerator Tank", 40, /obj/item/ammo_magazine/flamer_tank/large, null, VENDOR_ITEM_REGULAR), @@ -71,7 +72,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_specialist, list( list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -249,3 +250,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_specialist, list( /obj/item/explosive/grenade/smokebomb/airburst, /obj/item/explosive/grenade/smokebomb/airburst, ) + +/obj/effect/essentials_set/sebb_6_pack + spawned_gear_list = list( + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/sebb, + ) diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm index c37dd98ed263..8bd46110aba5 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list( list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR), list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR), list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR), + list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR), list("PRIMARY AMMUNITION", 0, null, null, null), list("M4RA AP Magazine (10x24mm)", 10, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR), @@ -101,7 +102,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_tl, list( list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), diff --git a/code/game/machinery/vending/vendor_types/wo_vendors.dm b/code/game/machinery/vending/vendor_types/wo_vendors.dm index 1d6ad60bb357..1a4c3d3b5bd8 100644 --- a/code/game/machinery/vending/vendor_types/wo_vendors.dm +++ b/code/game/machinery/vending/vendor_types/wo_vendors.dm @@ -63,7 +63,7 @@ list("M276 Pattern General Pistol Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR), list("M276 Pattern M39 Holster Rig", floor(scale * 10), /obj/item/storage/large_holster/m39, VENDOR_ITEM_REGULAR), list("M276 Pattern M39 Holster Rig And Pouch", floor(scale * 5), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR), - list("M276 Pattern M44 Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), + list("M276 Pattern General Revolver Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR), list("M276 Pattern M82F Holster Rig", floor(scale * 2), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR), list("M276 Knife Rig (Full)", floor(scale * 10), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", floor(scale * 10), /obj/item/storage/backpack/general_belt, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/effects/effect_system/particle_effects.dm b/code/game/objects/effects/effect_system/particle_effects.dm index 972d242bf359..9440c16f2d4e 100644 --- a/code/game/objects/effects/effect_system/particle_effects.dm +++ b/code/game/objects/effects/effect_system/particle_effects.dm @@ -8,10 +8,10 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT unacidable = TRUE // So effect are not targeted by alien acid. -/obj/effect/particle_effect/initialize_pass_flags(datum/pass_flags_container/PF) +/obj/effect/particle_effect/initialize_pass_flags(datum/pass_flags_container/pass_flags) ..() - if (PF) - PF.flags_pass = PASS_OVER|PASS_AROUND|PASS_UNDER|PASS_THROUGH|PASS_MOB_THRU + if (pass_flags) + pass_flags.flags_pass = PASS_OVER|PASS_AROUND|PASS_UNDER|PASS_THROUGH|PASS_MOB_THRU //Water @@ -22,17 +22,14 @@ var/life = 15 mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/effect/particle_effect/water/initialize_pass_flags(datum/pass_flags_container/PF) +/obj/effect/particle_effect/water/initialize_pass_flags(datum/pass_flags_container/pass_flags) ..() - if (PF) - PF.flags_pass = PASS_THROUGH|PASS_OVER|PASS_MOB_THRU|PASS_UNDER + if (pass_flags) + pass_flags.flags_pass = PASS_THROUGH|PASS_OVER|PASS_MOB_THRU|PASS_UNDER /obj/effect/particle_effect/water/Move(turf/newloc) - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX - if (--src.life < 1) - //SN src = null + life -= 1 + if (life < 1) qdel(src) if(newloc.density) return 0 diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index d4152bdee37e..d0ea5d2ed5ef 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -731,7 +731,7 @@ location = get_turf(loca) if(direct) direction = direct - if(lifetime) + if(smoke_time) lifetime = smoke_time radius = min(radius, 10) amount = radius diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index ce0fd5506cd7..d559137f79b1 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -223,6 +223,7 @@ icon_state = "empdisable" name = "emp sparks" effect_duration = 10 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/overlay/temp/emp_sparks/New(loc) setDir(pick(GLOB.cardinals)) @@ -234,8 +235,12 @@ icon_state = "emppulse" effect_duration = 20 - - +/obj/effect/overlay/temp/elec_arc + icon = 'icons/effects/effects.dmi' + icon_state = "electricity" + name = "electric arc" + effect_duration = 3 SECONDS + mouse_opacity = MOUSE_OPACITY_TRANSPARENT //gib animation diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm index 2ec61b0cc1f1..855f6c2f43c7 100644 --- a/code/game/objects/explosion_recursive.dm +++ b/code/game/objects/explosion_recursive.dm @@ -71,7 +71,9 @@ explosion resistance exactly as much as their health falloff = max(falloff0, power/100) //prevent explosions with a range larger than 100 tiles minimum_spread_power = -power * reflection_amplification_limit - msg_admin_attack("Explosion with Power: [power], Falloff: [falloff] in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]).", src.loc.x, src.loc.y, src.loc.z) + var/obj/causing_obj = explosion_cause_data?.resolve_cause() + var/mob/causing_mob = explosion_cause_data?.resolve_mob() + msg_admin_attack("Explosion with Power: [power], Falloff: [falloff],[causing_obj ? " from [causing_obj]" : ""][causing_mob ? " by [key_name(causing_mob)]" : ""] in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]).", loc.x, loc.y, loc.z) playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(power^2,1)) playsound(epicenter, "explosion", 90, 1, max(round(power,1),7) ) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 03e1f126e9d8..d8bf3d9d8f79 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -163,6 +163,9 @@ /// How much to offset the item randomly either way alongside Y visually var/ground_offset_y = 0 + /// Special storages this item prioritizes + var/list/preferred_storage + /obj/item/Initialize(mapload, ...) . = ..() diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm index 43215faf0fbb..58ff86130cd6 100644 --- a/code/game/objects/items/circuitboards/computer.dm +++ b/code/game/objects/items/circuitboards/computer.dm @@ -180,7 +180,7 @@ else if(HAS_TRAIT(tool, TRAIT_TOOL_BLACKMARKET_HACKER)) to_chat(user, SPAN_WARNING("You start messing around with the electronics of [src]...")) if(do_after(user, 8 SECONDS, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what you're doing.")) return to_chat(user, SPAN_WARNING("Huh? You find a processor bus with the letters 'B.M.' written in white crayon over it. You start fiddling with it.")) diff --git a/code/game/objects/items/devices/RCD.dm b/code/game/objects/items/devices/RCD.dm deleted file mode 100644 index 00e569800314..000000000000 --- a/code/game/objects/items/devices/RCD.dm +++ /dev/null @@ -1,194 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/* -CONTAINS: -RCD -*/ -/obj/item/device/rcd - name = "rapid-construction-device (RCD)" - desc = "A device used to rapidly build walls/floor." - icon = 'icons/obj/items/devices.dmi' - icon_state = "rcd" - opacity = FALSE - density = FALSE - anchored = FALSE - flags_atom = FPRINT|CONDUCT - force = 10 - throwforce = 10 - throw_speed = SPEED_FAST - throw_range = 5 - w_class = SIZE_MEDIUM - matter = list("metal" = 50000) - - var/datum/effect_system/spark_spread/spark_system - var/stored_matter = 0 - var/working = 0 - var/mode = 1 - var/canRwall = 0 - var/disabled = 0 - - -/obj/item/device/rcd/New() - desc = "A RCD. It currently holds [stored_matter]/30 matter-units." - src.spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(5, 0, src) - spark_system.attach(src) - return - -/obj/item/device/rcd/Destroy() - QDEL_NULL(spark_system) - return ..() - - -/obj/item/device/rcd/attackby(obj/item/W, mob/user) - ..() - if(istype(W, /obj/item/ammo_rcd)) - if((stored_matter + 10) > 30) - to_chat(user, SPAN_NOTICE("The RCD cant hold any more matter-units.")) - return - user.drop_held_item() - qdel(W) - stored_matter += 10 - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - to_chat(user, SPAN_NOTICE("The RCD now holds [stored_matter]/30 matter-units.")) - desc = "A RCD. It currently holds [stored_matter]/30 matter-units." - return - - -/obj/item/device/rcd/attack_self(mob/user) - ..() - - //Change the mode - playsound(src.loc, 'sound/effects/pop.ogg', 15, 0) - switch(mode) - if(1) - mode = 2 - to_chat(user, SPAN_NOTICE("Changed mode to 'Airlock'")) - if(prob(20)) - src.spark_system.start() - return - if(2) - mode = 3 - to_chat(user, SPAN_NOTICE("Changed mode to 'Deconstruct'")) - if(prob(20)) - src.spark_system.start() - return - if(3) - mode = 1 - to_chat(user, SPAN_NOTICE("Changed mode to 'Floor & Walls'")) - if(prob(20)) - src.spark_system.start() - return - -/obj/item/device/rcd/proc/activate() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 25, 1) - - -/obj/item/device/rcd/afterattack(atom/A, mob/user, proximity) - if(!proximity) return - if(disabled) - return 0 - if(istype(A,/area/shuttle) || istype(A,/turf/open/space/transit)) - return 0 - if(!(istype(A, /turf) || istype(A, /obj/structure/machinery/door/airlock))) - return 0 - - switch(mode) - if(1) - if(istype(A, /turf/open/space)) - if(useResource(1, user)) - to_chat(user, "Building Floor...") - activate() - A:ChangeTurf(/turf/open/floor/plating/airless) - return 1 - return 0 - - if(istype(A, /turf/open/floor)) - if(checkResource(3, user)) - to_chat(user, "Building Wall ...") - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!useResource(3, user)) return 0 - activate() - A:ChangeTurf(/turf/closed/wall) - return 1 - return 0 - - if(2) - if(istype(A, /turf/open/floor)) - if(checkResource(10, user)) - to_chat(user, "Building Airlock...") - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - if(do_after(user, 50, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!useResource(10, user)) return 0 - activate() - var/obj/structure/machinery/door/airlock/T = new /obj/structure/machinery/door/airlock( A ) - T.autoclose = 1 - return 1 - return 0 - return 0 - - if(3) - if(istype(A, /turf/closed/wall)) - var/turf/closed/wall/WL = A - if(WL.hull) - return 0 - if(istype(A, /turf/closed/wall/r_wall) && !canRwall) - return 0 - if(checkResource(5, user)) - to_chat(user, "Deconstructing Wall...") - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - if(do_after(user, 40, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!useResource(5, user)) return 0 - activate() - A:ChangeTurf(/turf/open/floor/plating/airless) - return 1 - return 0 - - if(istype(A, /turf/open/floor) && !istype(A, /turf/open/floor/plating)) - if(checkResource(5, user)) - to_chat(user, "Deconstructing Floor...") - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - if(do_after(user, 50, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!useResource(5, user)) return 0 - activate() - A:ChangeTurf(/turf/open/floor/plating/airless) - return 1 - return 0 - - if(istype(A, /obj/structure/machinery/door/airlock)) - if(checkResource(10, user)) - to_chat(user, "Deconstructing Airlock...") - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - if(do_after(user, 50, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!useResource(10, user)) return 0 - activate() - qdel(A) - return 1 - return 0 - return 0 - else - to_chat(user, "ERROR: RCD in MODE: [mode] attempted use by [user]. Send this text #coderbus or an admin.") - return 0 - -/obj/item/device/rcd/proc/useResource(amount, mob/user) - if(stored_matter < amount) - return 0 - stored_matter -= amount - desc = "A RCD. It currently holds [stored_matter]/30 matter-units." - return 1 - -/obj/item/device/rcd/proc/checkResource(amount, mob/user) - return stored_matter >= amount - -/obj/item/ammo_rcd - name = "compressed matter cartridge" - desc = "Highly compressed matter for the RCD." - icon = 'icons/obj/items/weapons/guns/legacy/old_bayguns.dmi' - icon_state = "rcd" - item_state = "rcdammo" - opacity = FALSE - density = FALSE - anchored = FALSE - - matter = list("metal" = 30000,"glass" = 15000) diff --git a/code/game/objects/items/devices/RSF.dm b/code/game/objects/items/devices/RSF.dm deleted file mode 100644 index 29f84c7c6d0c..000000000000 --- a/code/game/objects/items/devices/RSF.dm +++ /dev/null @@ -1,98 +0,0 @@ -/* -CONTAINS: -RSF - -*/ - -/obj/item/device/rsf - name = "\improper Rapid-Service-Fabricator" - desc = "A device used to rapidly deploy service items." - icon = 'icons/obj/items/devices.dmi' - icon_state = "rcd" - opacity = FALSE - density = FALSE - anchored = FALSE - var/stored_matter = 30 - var/mode = 1 - w_class = SIZE_MEDIUM - -/obj/item/device/rsf/get_examine_text(mob/user) - . = ..() - . += "It currently holds [stored_matter]/30 fabrication-units." - -/obj/item/device/rsf/attackby(obj/item/W, mob/user) - ..() - if (istype(W, /obj/item/ammo_rcd)) - - if ((stored_matter + 10) > 30) - to_chat(user, "The RSF can't hold any more matter.") - return - - qdel(W) - - stored_matter += 10 - playsound(src.loc, 'sound/machines/click.ogg', 15, 1) - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") - return - -/obj/item/device/rsf/attack_self(mob/user) - ..() - playsound(src.loc, 'sound/effects/pop.ogg', 15, 0) - if (mode == 1) - mode = 2 - to_chat(user, "Changed dispensing mode to 'Drinking Glass'") - return - if (mode == 2) - mode = 3 - to_chat(user, "Changed dispensing mode to 'Paper'") - return - if (mode == 3) - mode = 4 - to_chat(user, "Changed dispensing mode to 'Pen'") - return - if (mode == 4) - mode = 5 - to_chat(user, "Changed dispensing mode to 'Dice Pack'") - return - if (mode == 5) - mode = 6 - to_chat(user, "Changed dispensing mode to 'Cigarette'") - return - if (mode == 6) - mode = 1 - to_chat(user, "Changed dispensing mode to 'Dosh'") - return - // Change mode - -/obj/item/device/rsf/afterattack(atom/A, mob/user, proximity) - - if(!proximity) return - - if(stored_matter <= 0) - return - - if(!istype(A, /obj/structure/surface/table) && !istype(A, /turf/open/floor)) - return - - playsound(src.loc, 'sound/machines/click.ogg', 25, 1) - var/obj/product - - switch(mode) - if(1) - product = new /obj/item/spacecash/c10() - if(2) - product = new /obj/item/reagent_container/food/drinks/drinkingglass() - if(3) - product = new /obj/item/paper() - if(4) - product = new /obj/item/tool/pen() - if(5) - product = new /obj/item/storage/pill_bottle/dice() - if(6) - product = new /obj/item/clothing/mask/cigarette() - - to_chat(user, "Dispensing [product ? product : "product"]...") - product.forceMove(get_turf(A)) - - stored_matter-- - to_chat(user, "The RSF now holds [stored_matter]/30 fabrication-units.") diff --git a/code/game/objects/items/devices/RSP.dm b/code/game/objects/items/devices/RSP.dm deleted file mode 100644 index cb61de1a77cc..000000000000 --- a/code/game/objects/items/devices/RSP.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/item/device/rsp - name = "\improper Rapid-Seed-Producer (RSP)" - desc = "A device used to rapidly deploy seeds." - icon = 'icons/obj/items/devices.dmi' - icon_state = "rsp" - opacity = FALSE - density = FALSE - anchored = FALSE - var/stored_matter = 0 - var/mode = 1 - w_class = SIZE_MEDIUM diff --git a/code/game/objects/items/devices/defibrillator.dm b/code/game/objects/items/devices/defibrillator.dm index 518fdb1a9591..2debcf82d7d0 100644 --- a/code/game/objects/items/devices/defibrillator.dm +++ b/code/game/objects/items/devices/defibrillator.dm @@ -108,13 +108,13 @@ if(ghost && (!check_client || ghost.client) && (!check_can_reenter || ghost.can_reenter_corpse)) return ghost -/mob/living/carbon/human/proc/is_revivable() +/mob/living/carbon/human/proc/is_revivable(ignore_heart = FALSE) if(isnull(internal_organs_by_name) || isnull(internal_organs_by_name["heart"])) return FALSE var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] var/obj/limb/head = get_limb("head") - if(chestburst || !head || head.status & LIMB_DESTROYED || !heart || heart.organ_status >= ORGAN_BROKEN || !has_brain() || status_flags & PERMANENTLY_DEAD) + if(chestburst || !head || head.status & LIMB_DESTROYED || !ignore_heart && (!heart || heart.organ_status >= ORGAN_BROKEN) || !has_brain() || status_flags & PERMANENTLY_DEAD) return FALSE return TRUE diff --git a/code/game/objects/items/devices/drone_devices.dm b/code/game/objects/items/devices/drone_devices.dm deleted file mode 100644 index 0e22b64bf67f..000000000000 --- a/code/game/objects/items/devices/drone_devices.dm +++ /dev/null @@ -1,241 +0,0 @@ - - -//Simple borg hand. -//Limited use. -/obj/item/device/gripper - name = "magnetic gripper" - desc = "A simple grasping tool for synthetic assets." - icon_state = "gripper" - - //Has a list of items that it can hold. - var/list/can_hold = list( - /obj/item/cell, - /obj/item/circuitboard, - /obj/item/stock_parts, - /obj/item/frame, - /obj/item/tank, - /obj/item/stock_parts/smes_coil - ) - - //Item currently being held. - var/obj/item/wrapped = null - -/obj/item/device/gripper/paperwork - name = "paperwork gripper" - desc = "A simple grasping tool for clerical work." - - can_hold = list( - /obj/item/clipboard, - /obj/item/paper, - /obj/item/paper_bundle, - /obj/item/card/id, - ) - -/obj/item/device/gripper/attack_self(mob/user as mob) - ..() - - if(wrapped) - wrapped.attack_self(user) - -/obj/item/device/gripper/verb/drop_item() - - set name = "Drop Item" - set desc = "Release an item from your magnetic gripper." - set category = "Drone" - set src in usr - if(!wrapped) - //There's some weirdness with items being lost inside the arm. Trying to fix all cases. ~Z - for(var/obj/item/thing in src.contents) - thing.forceMove(get_turf(src)) - return - - if(wrapped.loc != src) - wrapped = null - return - - to_chat(src.loc, SPAN_WARNING("You drop \the [wrapped].")) - wrapped.forceMove(get_turf(src)) - wrapped = null - //update_icon() - -/obj/item/device/gripper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - return - -/obj/item/device/gripper/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params) - - if(!target || !proximity) //Target is invalid or we are not adjacent. - return - - //There's some weirdness with items being lost inside the arm. Trying to fix all cases. ~Z - if(!wrapped) - for(var/obj/item/thing in src.contents) - wrapped = thing - break - - if(wrapped) //Already have an item. - - //Temporary put wrapped into user so target's attackby() checks pass. - wrapped.forceMove(user) - - //Pass the attack on to the target. This might delete/relocate wrapped. - target.attackby(wrapped,user) - - //If wrapped was neither deleted nor put into target, put it back into the gripper. - if(wrapped && user && (wrapped.loc == user)) - wrapped.forceMove(src) - else - wrapped = null - return - - else if(istype(target,/obj/item)) //Check that we're not pocketing a mob. - - //...and that the item is not in a container. - if(!isturf(target.loc)) - return - - var/obj/item/I = target - - //Check if the item is blacklisted. - var/grab = 0 - for(var/typepath in can_hold) - if(istype(I,typepath)) - grab = 1 - break - - //We can grab the item, finally. - if(grab) - to_chat(user, "You collect \the [I].") - I.forceMove(src) - wrapped = I - return - else - to_chat(user, SPAN_DANGER("Your gripper cannot hold \the [target].")) - - else if(istype(target,/obj/structure/machinery/power/apc)) - var/obj/structure/machinery/power/apc/A = target - if(A.opened) - if(A.cell) - - wrapped = A.cell - - A.cell.add_fingerprint(user) - A.cell.update_icon() - A.cell.forceMove(src) - A.cell = null - - A.charging = 0 - A.update_icon() - - user.visible_message(SPAN_DANGER("[user] removes the power cell from [A]!"), "You remove the power cell.") - - - - - - - -//TODO: Matter decompiler. -/obj/item/device/matter_decompiler - name = "matter decompiler" - desc = "Eating trash, bits of glass, or other debris will replenish your stores." - icon_state = "decompiler" - - //Metal, glass, wood, plastic. - var/list/stored_comms = list( - "metal" = 0, - "glass" = 0, - "wood" = 0, - "plastic" = 0 - ) - -/obj/item/device/matter_decompiler/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - return - -/obj/item/device/matter_decompiler/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params) - - if(!proximity) return //Not adjacent. - - //We only want to deal with using this on turfs. Specific items aren't important. - var/turf/T = get_turf(target) - if(!istype(T)) - return - - //Used to give the right message. - var/grabbed_something = 0 - - for(var/mob/M in T) - if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse)) - src.loc.visible_message(SPAN_DANGER("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise."),SPAN_DANGER("It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.")) - new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) - qdel(M) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - return - else - continue - - for(var/obj/W in T) - //Different classes of items give different commodities. - if (istype(W,/obj/item/trash/cigbutt)) - stored_comms["plastic"]++ - else if(istype(W,/obj/effect/spider/spiderling)) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - else if(istype(W,/obj/item/light_bulb)) - var/obj/item/light_bulb/L = W - if(L.status >= 2) //In before someone changes the inexplicably local defines. ~ Z - stored_comms["metal"]++ - stored_comms["glass"]++ - else - continue - else if(istype(W,/obj/effect/decal/remains/robot)) - stored_comms["metal"]++ - stored_comms["metal"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/trash)) - stored_comms["metal"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - stored_comms["plastic"]++ - else if(istype(W,/obj/effect/decal/cleanable/blood/gibs/robot)) - stored_comms["metal"]++ - stored_comms["metal"]++ - stored_comms["glass"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/ammo_casing)) - stored_comms["metal"]++ - else if(istype(W,/obj/item/shard/shrapnel)) - stored_comms["metal"]++ - stored_comms["metal"]++ - stored_comms["metal"]++ - else if(istype(W,/obj/item/shard)) - stored_comms["glass"]++ - stored_comms["glass"]++ - stored_comms["glass"]++ - else if(istype(W,/obj/item/reagent_container/food/snacks/grown)) - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["wood"]++ - stored_comms["wood"]++ - else if(istype(W,/obj/item/ammo_magazine)) - var/obj/item/ammo_magazine/AM = W - if(AM.current_rounds) - continue - stored_comms["metal"]++ - else - continue - - qdel(W) - grabbed_something = 1 - - if(grabbed_something) - to_chat(user, SPAN_NOTICE(" You deploy your decompiler and clear out the contents of \the [T].")) - else - to_chat(user, SPAN_DANGER("Nothing on \the [T] is useful to you.")) - return diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 8d5e3cc752ff..e506f51ce21c 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -15,7 +15,7 @@ ground_offset_x = 2 ground_offset_y = 6 - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle) var/on = FALSE var/raillight_compatible = TRUE //Can this be turned into a rail light ? var/toggleable = TRUE diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm index dcbcc0dd8bc7..f68295001f92 100644 --- a/code/game/objects/items/devices/motion_detector.dm +++ b/code/game/objects/items/devices/motion_detector.dm @@ -33,7 +33,7 @@ var/long_range_cooldown = 2 var/blip_type = "detector" var/iff_signal = FACTION_MARINE - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle) var/scanning = FALSE // controls if MD is in process of scan var/datum/shape/rectangle/square/range_bounds var/long_range_locked = FALSE //only long-range MD diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a92135b9d7ed..73e5b86a69eb 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -18,6 +18,7 @@ matter = list("metal" = 50,"glass" = 20) inherent_traits = list(TRAIT_TOOL_MULTITOOL) + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) var/hack_speed = 10 SECONDS // Only used for vendors right now var/next_scan @@ -46,7 +47,7 @@ /obj/item/device/multitool/attack_self(mob/user) ..() - if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_TRAINED)) + if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_NOVICE)) return next_scan = world.time + 15 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 8c507dad18e3..0e7680cd2f7d 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -329,7 +329,7 @@ FORENSIC SCANNER if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey") to_chat(user, SPAN_DANGER("You don't have the dexterity to do this!")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not know how to use the [name].")) return if(!istype(O)) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm deleted file mode 100644 index 564b3e41f591..000000000000 --- a/code/game/objects/items/devices/suit_cooling.dm +++ /dev/null @@ -1,179 +0,0 @@ -/obj/item/device/suit_cooling_unit - name = "portable suit cooling unit" - desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling." - w_class = SIZE_LARGE - icon_state = "suitcooler0" - flags_equip_slot = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage - - //copied from tank.dm - flags_atom = FPRINT|CONDUCT - force = 5 - throwforce = 10 - throw_speed = SPEED_FAST - throw_range = 4 - - - - var/on = 0 //is it turned on? - var/cover_open = 0 //is the cover open? - var/obj/item/cell/cell - var/max_cooling = 12 //in degrees per second - probably don't need to mess with heat capacity here - var/charge_consumption = 16.6 //charge per second at max_cooling - var/thermostat = T20C - - //TODO: make it heat up the surroundings when not in space - -/obj/item/device/suit_cooling_unit/Initialize(mapload, ...) - . = ..() - - START_PROCESSING(SSobj, src) - - cell = new/obj/item/cell(src) //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find - -/obj/item/device/suit_cooling_unit/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/device/suit_cooling_unit/process() - if (!on || !cell) - return - - if (!ismob(loc)) - return - - if (!attached_to_suit(loc)) //make sure they have a suit and we are attached to it - return - - var/mob/living/carbon/human/H = loc - - var/efficiency = 1 - H.get_pressure_weakness() //you need to have a good seal for effective cooling - var/env_temp = get_environment_temperature() //wont save you from a fire - var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) - - if (temp_adj < 0.5) //only cools, doesn't heat, also we don't need extreme precision - return - - var/charge_usage = (temp_adj/max_cooling)*charge_consumption - - H.bodytemperature -= temp_adj*efficiency - H.recalculate_move_delay = TRUE - - cell.use(charge_usage) - - if(cell.charge <= 0) - turn_off() - -/obj/item/device/suit_cooling_unit/proc/get_environment_temperature() - if (ishuman(loc)) - var/mob/living/carbon/human/H = loc - return H.return_temperature() - - var/turf/T = get_turf(src) - return T.return_temperature() - -/obj/item/device/suit_cooling_unit/proc/attached_to_suit(mob/M) - if (!ishuman(M)) - return 0 - - var/mob/living/carbon/human/H = M - - if (!H.wear_suit || H.s_store != src) - return 0 - - return 1 - -/obj/item/device/suit_cooling_unit/proc/turn_on() - if(!cell) - return - if(cell.charge <= 0) - return - - on = 1 - updateicon() - -/obj/item/device/suit_cooling_unit/proc/turn_off() - if (ismob(src.loc)) - var/mob/M = src.loc - M.show_message("\The [src] clicks and whines as it powers down.", SHOW_MESSAGE_AUDIBLE) //let them know in case it's run out of power. - on = 0 - updateicon() - -/obj/item/device/suit_cooling_unit/attack_self(mob/user) - ..() - - if(cover_open && cell) - if(ishuman(user)) - user.put_in_hands(cell) - else - cell.forceMove(get_turf(loc)) - - cell.add_fingerprint(user) - cell.update_icon() - - to_chat(user, "You remove [cell].") - src.cell = null - updateicon() - return - - //TODO use a UI like the air tanks - if(on) - turn_off() - else - turn_on() - if (on) - to_chat(user, "You switch on [src].") - -/obj/item/device/suit_cooling_unit/attackby(obj/item/W as obj, mob/user as mob) - if (HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) - if(cover_open) - cover_open = 0 - to_chat(user, "You screw the panel into place.") - else - cover_open = 1 - to_chat(user, "You unscrew the panel.") - updateicon() - return - - if (istype(W, /obj/item/cell)) - if(cover_open) - if(cell) - to_chat(user, "There is \a [cell] already installed here.") - else - if(user.drop_held_item()) - W.forceMove(src) - cell = W - to_chat(user, "You insert [cell].") - updateicon() - return - - return ..() - -/obj/item/device/suit_cooling_unit/proc/updateicon() - if (cover_open) - if (cell) - icon_state = "suitcooler1" - else - icon_state = "suitcooler2" - else - icon_state = "suitcooler0" - -/obj/item/device/suit_cooling_unit/get_examine_text(mob/user) - . = ..() - if (on) - if (attached_to_suit(src.loc)) - . += "It's switched on and running." - else - . += "It's switched on, but not attached to anything." - else - . += "It is switched off." - - if (cover_open) - if(cell) - . += "The panel is open, exposing [cell]." - else - . += "The panel is open." - - if (cell) - . += "The charge meter reads [floor(cell.percent())]%." - else - . += "It doesn't have a power cell installed." diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 331df3ffa006..07196a3e1bb9 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -5,7 +5,7 @@ w_class = SIZE_TINY flags_atom = FPRINT|CONDUCT flags_equip_slot = SLOT_FACE - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) var/volume = 60 var/spam_cooldown_time = 10 SECONDS @@ -51,7 +51,6 @@ usr.put_in_l_hand(src) add_fingerprint(usr) - /obj/item/device/hailer name = "hailer" desc = "Used by obese officers to save their breath for running." diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm index 1bd6985bc015..0be81ba8a0ed 100644 --- a/code/game/objects/items/explosives/explosive.dm +++ b/code/game/objects/items/explosives/explosive.dm @@ -259,7 +259,7 @@ to_chat(usr, SPAN_DANGER("This is beyond your understanding...")) return - if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_DANGER("You have no idea how to use this...")) return diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 1cd3e1577c57..09c0197cda7f 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -465,6 +465,187 @@ icon_state = "grenade_phos_clf" item_state = "grenade_phos_clf" +/obj/item/explosive/grenade/sebb + name = "\improper G2 Electroshock grenade" + desc = "This is a G2 Electroshock Grenade. Produced by Armat Battlefield Systems, it's sometimes referred to as the Sonic Electric Ball Breaker, \ + after a rash of incidents where the intense 1.2 gV sonic payload caused... rupturing. \ + A bounding landmine mode is available for this weapon which activates a small drill to self-bury itself when planted. Simply plant it at your feet and walk away." + icon_state = "grenade_sebb" + item_state = "grenade_sebb" + det_time = 3 SECONDS + underslug_launchable = TRUE + /// Maximum range of effect + var/range = 5 + /// Maximum possible damage before falloff. + var/damage = 110 + /// Factor to mutiply the effect range has on damage. + var/falloff_dam_reduction_mult = 20 + /// Post falloff calc damage is divided by this to get xeno slowdown + var/xeno_slowdown_numerator = 12 + /// Post falloff calc damage is multipled by this to get human stamina damage + var/human_stam_dam_factor = 0.9 + +/obj/item/explosive/grenade/sebb/get_examine_text(mob/user) + . = ..() + . += SPAN_NOTICE("To put into mine mode, plant at feet.") + +/obj/item/explosive/grenade/sebb/afterattack(atom/target, mob/user, proximity) + var/turf/user_turf = get_turf(user) + if(active) + return + + if(!isturf(target)) + return + + if(user.action_busy) + return + + if(target != get_turf(user)) + return + + if(locate(/obj/item/explosive/mine) in get_turf(src)) + to_chat(user, SPAN_WARNING("There already is a mine at this position!")) + return + + if(antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) + to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from planting!")) + msg_admin_niche("[key_name(user)] attempted to plant \a [name] in [get_area(src)] [ADMIN_JMP(src.loc)]") + return + + if(ishuman(user)) + var/mob/living/carbon/human/human = user + if(!human.allow_gun_usage) + to_chat(user, SPAN_WARNING("Your programming prevents you from using this!")) + return + + if(user_turf && (user_turf.density || locate(/obj/structure/fence) in user_turf)) + to_chat(user, SPAN_WARNING("You can't plant a mine here.")) + return + + if(Adjacent(/obj/item/explosive/mine)) // bit more strict on this than normal mines + to_chat(user, SPAN_WARNING("Too close to another mine! Plant it somewhere less obvious.")) + return + + user.visible_message(SPAN_NOTICE("[user] starts deploying [src]."), + SPAN_NOTICE("You switch [src] into landmine mode and start placing it...")) + playsound(user.loc, 'sound/effects/thud.ogg', 40) + if(!do_after(user, 5 SECONDS * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + to_chat(user, SPAN_NOTICE("You stop planting.")) + return + + user.visible_message(SPAN_NOTICE("[user] finishes deploying [src]."), + SPAN_NOTICE("You finish deploying [src].")) + var/obj/item/explosive/mine/sebb/planted = new /obj/item/explosive/mine/sebb(get_turf(user)) + planted.activate_sensors() + planted.iff_signal = user.faction // assuring IFF is set + planted.pixel_x += rand(-5, 5) + planted.pixel_y += rand(-5, 5) + qdel(src) + +/obj/item/explosive/grenade/sebb/activate() + ..() + var/beeplen = 6 // Actual length of the sound rounded up to nearest decisecond + var/soundtime = det_time - beeplen + if(det_time < beeplen) // just play sound if detonation shorter than the sound + playsound(loc, 'sound/effects/sebb_explode.ogg', 90, 0, 10) + else + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), loc, 'sound/effects/sebb_beep.ogg', 60, 0, 10), soundtime) + + + +/obj/item/explosive/grenade/sebb/prime() + var/datum/effect_system/spark_spread/sparka = new + var/turf/sebb_turf = get_turf(src) + var/list/full_range = oview(range, src) // Fill a list of stuff in the range so we won't have to spam oview + new /obj/effect/overlay/temp/sebb(sebb_turf) + + playsound(src.loc, 'sound/effects/sebb_explode.ogg', 90, 0, 10) + + for(var/obj/structure/machinery/defenses/sentry/sentry_stun in full_range) + sentry_stun.sentry_range = 0 // Temporarily "disable" the sentry by killing its range then setting it back. + new /obj/effect/overlay/temp/elec_arc(get_turf(sentry_stun)) // sprites are meh but we need visual indication that the sentry was messed up + addtimer(VARSET_CALLBACK(sentry_stun, sentry_range, initial(sentry_stun.sentry_range)), 5 SECONDS) // assure to set it back + sentry_stun.visible_message(SPAN_DANGER("[src]'s screen flickes violently as it's shocked!")) + sentry_stun.visible_message(SPAN_DANGER("[src] says \"ERROR: Fire control system resetting due to critical voltage flucuation!\"")) + sparka.set_up(1, 1, sentry_stun) + sparka.start() + + for(var/turf/turf in full_range) + if(prob(8)) + var/datum/effect_system/spark_spread/sparkTurf = new //using a different spike system because the spark system doesn't like when you reuse it for differant things + sparkTurf.set_up(1, 1, turf) + sparkTurf.start() + if(prob(10)) + new /obj/effect/overlay/temp/emp_sparks(turf) + + for(var/mob/living/carbon/mob in full_range) // no legacy mob support + + var/mob_dist = get_dist(src, mob) // Distance from mob + + /** + * Damage equation: damage - (mob distance * falloff_dam_reduction_mult) + * Example: A marine is 3 tiles out, the distance (3) is multiplied by falloff_dam_reduction_mult to get falloff. + * The raw damage is minused by falloff to get actual damage + */ + + var/falloff = mob_dist * falloff_dam_reduction_mult + var/damage_applied = damage - falloff // Final damage applied after falloff calc + sparka.set_up(1, 1, mob) + sparka.start() + shake_camera(mob, 1, 1) + if(ishuman(mob)) + var/mob/living/carbon/human/shocked_human = mob + if(isspeciessynth(shocked_human)) // Massive overvoltage to ungrounded robots is pretty bad + shocked_human.Stun(1 + (damage_applied/40)) + damage_applied *= 1.5 + new /obj/effect/overlay/temp/elec_arc(get_turf(shocked_human)) + to_chat(mob, SPAN_HIGHDANGER("All of your systems jam up as your main bus is overvolted by [damage_applied*2] volts.")) + mob.visible_message(SPAN_WARNING("[mob] seizes up from the elctric shock")) + shocked_human.take_overall_armored_damage(damage_applied, ARMOR_ENERGY, BURN, 90) // 90% chance to be on additional limbs + shocked_human.make_dizzy(damage_applied) + mob.apply_stamina_damage(damage_applied*human_stam_dam_factor) // Stamina damage + shocked_human.emote("pain") + else //nonhuman damage + slow + mob.apply_damage(damage_applied, BURN) + if((mob_dist < (range-3))) // 2 tiles around small superslow + mob.Superslow(2) + mob.Slow(damage_applied/11) + + if(mob_dist < 1) // Range based stuff, standing ontop of the equivalent of a canned lighting bolt should mess you up. + mob.Superslow(3) // Note that humans will likely be in stamcrit so it's always worse for them when ontop of it and we can just balancing it on xenos. + mob.eye_blurry = damage_applied/4 + mob.Daze(1) + else if((mob_dist < (range-1)) && (mob.mob_size < MOB_SIZE_XENO_VERY_SMALL)) // Flicker stun humans that are closer to the grenade and larvas too. + mob.apply_effect(1 + (damage_applied/100),WEAKEN) // 1 + damage/40 + mob.eye_blurry = damage_applied/8 + + else + to_chat(mob, SPAN_HIGHDANGER("Your entire body seizes up as a powerful shock courses through it!")) + + + new /obj/effect/overlay/temp/emp_sparks(mob) + mob.make_jittery(damage_applied*2) + empulse(src, 1, 2) // mini EMP + qdel(src) + + +/obj/item/explosive/grenade/sebb/primed + desc = "A G2 Electroshock Grenade, looks like it's quite angry! Oh shit!" + det_time = 7 // 0.7 seconds to blow up. We want them to get caught if they go through. + +/obj/item/explosive/grenade/sebb/primed/Initialize() + . = ..() + src.visible_message(SPAN_HIGHDANGER("[src] pops out of the ground!")) + activate() + +/obj/effect/overlay/temp/sebb + icon = 'icons/effects/sebb.dmi' + icon_state = "sebb_explode" + layer = ABOVE_LIGHTING_PLANE + pixel_x = -175 // We need these offsets to force center the sprite because BYOND is dumb + pixel_y = -175 + appearance_flags = RESET_COLOR + /* //================================================ Nerve Gas Grenades diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index 45065a2de1de..6e7aa2bdccc3 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -14,6 +14,7 @@ throw_speed = SPEED_VERY_FAST unacidable = TRUE flags_atom = FPRINT|CONDUCT + antigrief_protection = TRUE allowed_sensors = list(/obj/item/device/assembly/prox_sensor) max_container_volume = 120 reaction_limits = list( "max_ex_power" = 105, "base_ex_falloff" = 60, "max_ex_shards" = 32, @@ -71,7 +72,12 @@ if(active || user.action_busy) return - user.visible_message(SPAN_NOTICE("[user] starts deploying [src]."), \ + if(antigrief_protection && user.faction == FACTION_MARINE && explosive_antigrief_check(src, user)) + to_chat(user, SPAN_WARNING("\The [name]'s safe-area accident inhibitor prevents you from planting!")) + msg_admin_niche("[key_name(user)] attempted to plant \a [name] in [get_area(src)] [ADMIN_JMP(src.loc)]") + return + + user.visible_message(SPAN_NOTICE("[user] starts deploying [src]."), SPAN_NOTICE("You start deploying [src].")) if(!do_after(user, 40, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE)) user.visible_message(SPAN_NOTICE("[user] stops deploying [src]."), \ @@ -317,3 +323,19 @@ customizable = TRUE matter = list("metal" = 3750) has_blast_wave_dampener = TRUE + +/obj/item/explosive/mine/sebb + name = "\improper G2 Electroshock grenade" + icon_state = "grenade_sebb_planted" + desc = "A G2 electroshock grenade planted as a landmine." + pixel_y = -5 + anchored = TRUE // this is supposed to be planeted already when spawned + +/obj/item/explosive/mine/sebb/disarm() + . = ..() + new /obj/item/explosive/grenade/sebb(get_turf(src)) + qdel(src) + +/obj/item/explosive/mine/sebb/prime() + new /obj/item/explosive/grenade/sebb/primed(get_turf(src)) + qdel(src) diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm index 58cbca9a5ab3..c6a3dfaed5f9 100644 --- a/code/game/objects/items/explosives/plastic.dm +++ b/code/game/objects/items/explosives/plastic.dm @@ -25,7 +25,7 @@ antigrief_protection = TRUE //Should it be checked by antigrief? var/req_skill = SKILL_ENGINEER - var/req_skill_level = SKILL_ENGINEER_TRAINED + var/req_skill_level = SKILL_ENGINEER_NOVICE /obj/item/explosive/plastic/Destroy() disarm() @@ -46,7 +46,7 @@ . = ..() /obj/item/explosive/plastic/attack_self(mob/user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]...")) return diff --git a/code/game/objects/items/frames/table_rack.dm b/code/game/objects/items/frames/table_rack.dm index eda9b9c5749b..95ab43869774 100644 --- a/code/game/objects/items/frames/table_rack.dm +++ b/code/game/objects/items/frames/table_rack.dm @@ -59,7 +59,10 @@ if(istype(get_area(loc), /area/shuttle)) //HANGAR/SHUTTLE BUILDING to_chat(user, SPAN_WARNING("No. This area is needed for the dropship.")) return - + for(var/obj/object in OT) + if(object.density) + to_chat(user, SPAN_WARNING("[object] is blocking you from constructing [src]!")) + return if(!do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_BUILD)) to_chat(user, SPAN_WARNING("Hold still while you're constructing a table!")) return diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm index 5b9b81804311..9da509d16c5a 100644 --- a/code/game/objects/items/props/helmetgarb.dm +++ b/code/game/objects/items/props/helmetgarb.dm @@ -176,12 +176,12 @@ if(src != user.get_inactive_hand()) to_chat(user, SPAN_WARNING("You need to hold \the [src] in hand in order to repair them.")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 2 is enough to repair damaged NVG + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) // level 2 is enough to repair damaged NVG to_chat(user, SPAN_WARNING("You are not trained to repair electronics...")) return if(shape == NVG_SHAPE_BROKEN) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) // level 3 is needed to repair broken NVG + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 3 is needed to repair broken NVG to_chat(user, SPAN_WARNING("Repair of this complexity is too difficult for you, find someone more trained.")) return diff --git a/code/game/objects/items/stacks/flags.dm b/code/game/objects/items/stacks/flags.dm index e032e2c80157..14833812b06c 100644 --- a/code/game/objects/items/stacks/flags.dm +++ b/code/game/objects/items/stacks/flags.dm @@ -106,7 +106,7 @@ user.visible_message(SPAN_NOTICE("[user] starts taking [src] down..."), SPAN_NOTICE("You start taking [src] down...")) playsound(loc, 'sound/effects/flag_raising.ogg', 30) - if(!do_after(user, 6 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) + if(!do_after(user, 6 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC) || QDELETED(src)) return playsound(loc, 'sound/effects/flag_raised.ogg', 30) @@ -170,7 +170,11 @@ icon = 'icons/obj/structures/plantable_flag.dmi' inhand_x_dimension = 64 inhand_y_dimension = 64 + force = 15 + throwforce = 5 + hitsound = "swing_hit" unacidable = TRUE + indestructible = TRUE item_icons = list( WEAR_L_HAND = 'icons/mob/humans/onmob/items_lefthand_64.dmi', WEAR_R_HAND = 'icons/mob/humans/onmob/items_righthand_64.dmi' @@ -233,12 +237,10 @@ if(play_warcry && user.faction == faction && user.a_intent == INTENT_HARM) var/allies_nearby = 0 if(COOLDOWN_FINISHED(src, warcry_cooldown_item)) - for (var/mob/living/carbon/human in orange(planted_flag, 7)) - if (human.is_dead() || human.faction != faction) + for(var/mob/living/carbon/human in orange(planted_flag, 7)) + if(human.is_dead() || human.faction != faction) continue allies_nearby++ - if (prob(40) && human != user) - human.emote("warcry") user.show_speech_bubble("warcry") if(allies_nearby >= allies_required) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5f72e4a75567..3856aebd7971 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -197,6 +197,12 @@ Also change the icon to reflect the amount of sheets, if possible.*/ to_chat(usr, SPAN_WARNING("The [R.title] cannot be constructed on a tunnel!")) return + if(R.one_per_turf != ONE_TYPE_PER_BORDER) //all barricade-esque structures utilize this define and have their own check for object density. checking twice is unneeded. + for(var/obj/object in usr.loc) + if(object.density || istype(object, /obj/structure/machinery/door)) + to_chat(usr, SPAN_WARNING("[object] is blocking you from constructing \the [R.title]!")) + return + if((R.flags & RESULT_REQUIRES_SNOW) && !(istype(usr.loc, /turf/open/snow) || istype(usr.loc, /turf/open/auto_turf/snow))) to_chat(usr, SPAN_WARNING("The [R.title] must be built on snow!")) return diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 06636d2c3f76..9ed53236789d 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -15,7 +15,7 @@ cant_hold = list(/obj/item/storage/firstaid, /obj/item/storage/toolkit) can_hold_skill = list( /obj/item/storage/firstaid = list(SKILL_MEDICAL, SKILL_MEDICAL_MEDIC), - /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_ENGI), + /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), ) drop_sound = "armorequip" var/worn_accessible = FALSE //whether you can access its content while worn on the back diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index d16602e04aaa..14961c69eaf5 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -117,7 +117,6 @@ ) storage_slots = 10 - /obj/item/storage/belt/utility/full/fill_preset_inventory() new /obj/item/tool/screwdriver(src) new /obj/item/tool/wrench(src) @@ -136,6 +135,50 @@ new /obj/item/tool/wirecutters(src) new /obj/item/device/t_scanner(src) +/obj/item/storage/belt/utility/construction + name = "\improper M277 pattern construction rig" + desc = "The M277 is a common rig used by Combat Technicians to carry around materials and other supplies. It consists of a modular belt with various clips. This version sarafices storage space for specialized material loading clips." + storage_slots = 6 + can_hold = list( + /obj/item/tool/crowbar, + /obj/item/tool/screwdriver, + /obj/item/tool/weldingtool, + /obj/item/tool/wirecutters, + /obj/item/tool/wrench, + /obj/item/tool/extinguisher/mini, + /obj/item/tool/shovel/etool, + /obj/item/stack/cable_coil, + /obj/item/weapon/gun/smg/nailgun/compact, + /obj/item/cell, + /obj/item/circuitboard, + /obj/item/stock_parts, + /obj/item/device/demo_scanner, + /obj/item/device/reagent_scanner, + /obj/item/device/assembly, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/explosive/plastic, + /obj/item/device/lightreplacer, + /obj/item/stack/sheet, + /obj/item/stack/sandbags_empty, + /obj/item/stack/sandbags, + /obj/item/stack/barbed_wire, + /obj/item/defenses/handheld/sentry, + /obj/item/stack/rods, + /obj/item/stack/tile, + ) + + bypass_w_limit = list( + /obj/item/tool/shovel/etool, + /obj/item/device/lightreplacer, + /obj/item/stack/sheet, + /obj/item/stack/sandbags_empty, + /obj/item/stack/sandbags, + /obj/item/defenses/handheld/sentry, + ) + /obj/item/storage/belt/utility/full/pred name = "\improper Yautja toolbelt" desc = "A modular belt with various clips. This version lacks any hunting functionality, and is commonly used by engineers to transport important tools." @@ -1296,12 +1339,12 @@ #undef MAXIMUM_MAGAZINE_COUNT /obj/item/storage/belt/gun/m44 - name = "\improper M276 pattern M44 holster rig" - desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is for the M44 magnum revolver, along with six small pouches for speedloaders. It smells faintly of hay." + name = "\improper M276 pattern general revoler holster rig" + desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is universal and adjustable for different revolvers, along with six small pouches for speedloaders. It smells faintly of hay." icon_state = "m44r_holster" storage_slots = 7 can_hold = list( - /obj/item/weapon/gun/revolver/m44, + /obj/item/weapon/gun/revolver, /obj/item/ammo_magazine/revolver, ) has_gamemode_skin = TRUE @@ -1413,7 +1456,7 @@ desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is for the powerful Mateba magnum revolver, along with five small pouches for speedloaders. This one is aging poorly, and seems to be surplus equipment. It's stamped '3rd 'Dust Raiders' Battalion'." icon_state = "s_cmateba_holster" item_state = "s_marinebelt" - storage_slots = 6 + storage_slots = 7 max_w_class = SIZE_MEDIUM can_hold = list( /obj/item/weapon/gun/revolver/mateba, @@ -1697,7 +1740,7 @@ /obj/item/device/flashlight/flare, /obj/item/weapon/gun/flare, /obj/item/weapon/gun/pistol, - /obj/item/weapon/gun/revolver/m44, + /obj/item/weapon/gun/revolver, /obj/item/ammo_magazine/revolver, /obj/item/ammo_magazine/pistol, /obj/item/ammo_magazine/smartgun, @@ -1717,8 +1760,7 @@ /obj/item/device/flashlight/flare, /obj/item/weapon/gun/flare, /obj/item/weapon/gun/pistol, - /obj/item/weapon/gun/revolver/m44, - /obj/item/weapon/gun/revolver/mateba, + /obj/item/weapon/gun/revolver, /obj/item/ammo_magazine/revolver, /obj/item/ammo_magazine/revolver/mateba, /obj/item/ammo_magazine/pistol, @@ -1740,8 +1782,7 @@ /obj/item/device/flashlight/flare, /obj/item/weapon/gun/flare, /obj/item/weapon/gun/pistol, - /obj/item/weapon/gun/revolver/m44, - /obj/item/weapon/gun/revolver/mateba, + /obj/item/weapon/gun/revolver, /obj/item/ammo_magazine/revolver, /obj/item/ammo_magazine/revolver/mateba, /obj/item/ammo_magazine/pistol, @@ -1763,8 +1804,7 @@ /obj/item/device/flashlight/flare, /obj/item/weapon/gun/flare, /obj/item/weapon/gun/pistol, - /obj/item/weapon/gun/revolver/m44, - /obj/item/weapon/gun/revolver/mateba, + /obj/item/weapon/gun/revolver, /obj/item/ammo_magazine/revolver, /obj/item/ammo_magazine/revolver/mateba, /obj/item/ammo_magazine/pistol, diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index ab221b89bfe2..e385d4b5c17d 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -470,6 +470,7 @@ item_state = "zippo" w_class = SIZE_TINY flags_equip_slot = SLOT_WAIST + flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB can_hold = list(/obj/item/tool/match) /obj/item/storage/box/matches/fill_preset_inventory() diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 5d7aecbc03db..79d38603dc7e 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -126,6 +126,7 @@ w_class = SIZE_TINY throwforce = 2 flags_equip_slot = SLOT_WAIST + flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB max_w_class = SIZE_TINY storage_slots = 20 can_hold = list( diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 63516ac20aa0..9c8c7080bdc3 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -802,6 +802,28 @@ for(var/i = 1 to storage_slots) new /obj/item/reagent_container/syringe(src) +/obj/item/storage/pouch/engikit + name = "engineer kit pouch" + storage_flags = STORAGE_FLAGS_POUCH + icon_state = "construction" + desc = "It's specifically made to hold engineering items. Requires engineering skills to use effectively." + storage_slots = 6 + can_hold_skill = list( + /obj/item/circuitboard = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/flashlight = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/clothing/glasses/welding = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/analyzer = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/demo_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/reagent_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/t_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/stack/cable_coil = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/cell = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/device/assembly = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/stock_parts = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + /obj/item/explosive/plastic = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED), + ) + can_hold_skill_only = TRUE + /obj/item/storage/pouch/medkit name = "medical kit pouch" storage_flags = STORAGE_FLAGS_POUCH diff --git a/code/game/objects/items/storage/toolkit.dm b/code/game/objects/items/storage/toolkit.dm index e3171eca40f6..cccca19c241c 100644 --- a/code/game/objects/items/storage/toolkit.dm +++ b/code/game/objects/items/storage/toolkit.dm @@ -23,7 +23,7 @@ ) storage_flags = STORAGE_FLAGS_BOX required_skill_for_nest_opening = SKILL_ENGINEER - required_skill_level_for_nest_opening = SKILL_ENGINEER_ENGI + required_skill_level_for_nest_opening = SKILL_ENGINEER_TRAINED ///icon state to use when kit is full var/icon_full diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm deleted file mode 100644 index 3a5afef6cf1e..000000000000 --- a/code/game/objects/items/tanks/jetpack.dm +++ /dev/null @@ -1,85 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -/obj/item/tank/jetpack - name = "Jetpack (Empty)" - desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - w_class = SIZE_LARGE - item_state = "jetpack" - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - var/datum/effect_system/ion_trail_follow/ion_trail - var/on = 0 - var/stabilization_on = 0 - var/volume_rate = 500 //Needed for borg jetpack transfer - actions_types = list(/datum/action/item_action) - -/obj/item/tank/jetpack/Initialize() - . = ..() - src.ion_trail = new /datum/effect_system/ion_trail_follow() - src.ion_trail.set_up(src) - -/obj/item/tank/jetpack/Destroy() - QDEL_NULL(ion_trail) - return ..() - - -/obj/item/tank/jetpack/verb/toggle_rockets() - set name = "Toggle Jetpack Stabilization" - set category = "Object" - set src in usr - src.stabilization_on = !( src.stabilization_on ) - to_chat(usr, "You toggle the stabilization [stabilization_on? "on":"off"].") - -/obj/item/tank/jetpack/verb/toggle() - set name = "Toggle Jetpack" - set category = "Object" - set src in usr - on = !on - if(on) - icon_state = "[icon_state]-on" - ion_trail.start() - else - icon_state = initial(icon_state) - ion_trail.stop() - - if (ismob(usr)) - var/mob/M = usr - M.update_inv_back() - - for(var/X in actions) - var/datum/action/A = X - A.update_button_icon() - -/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user) - if(!(src.on)) - return 0 - - if(pressure > 5) - return 1 - else - ion_trail.stop() - return 0 - - -/obj/item/tank/jetpack/ui_action_click() - toggle() - - -/obj/item/tank/jetpack/void - name = "Void Jetpack (Oxygen)" - desc = "It works well in a void." - icon_state = "jetpack-void" - item_state = "jetpack-void" - -/obj/item/tank/jetpack/oxygen - name = "Jetpack (Oxygen)" - desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - item_state = "jetpack" - -/obj/item/tank/jetpack/carbondioxide - name = "Jetpack (Carbon Dioxide)" - desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." - distribute_pressure = 0 - icon_state = "jetpack-black" - item_state = "jetpack-black" diff --git a/code/game/objects/items/tools/cleaning_tools.dm b/code/game/objects/items/tools/cleaning_tools.dm index f392f096bcf6..9fab254a7153 100644 --- a/code/game/objects/items/tools/cleaning_tools.dm +++ b/code/game/objects/items/tools/cleaning_tools.dm @@ -99,13 +99,15 @@ desc = "This cone is trying to warn you of something!" icon_state = "cone" icon = 'icons/obj/janitor.dmi' + item_icons = 'icons/mob/humans/onmob/head_0.dmi' force = 1 throwforce = 3 throw_speed = SPEED_FAST throw_range = 5 w_class = SIZE_SMALL attack_verb = list("warned", "cautioned", "smashed") - + flags_equip_slot = SLOT_HEAD + flags_inv_hide = HIDEEARS|HIDETOPHAIR @@ -150,7 +152,7 @@ return ..() -/obj/item/tool/soap/nanotrasen +/obj/item/tool/soap/weyland_yutani desc = "A Weyland-Yutani brand bar of soap. Smells of phoron." icon_state = "soapnt" diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm index d5cd708f29b3..8af7d15e0ff3 100644 --- a/code/game/objects/items/tools/flame_tools.dm +++ b/code/game/objects/items/tools/flame_tools.dm @@ -177,6 +177,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM w_class = SIZE_TINY flags_armor_protection = 0 flags_equip_slot = SLOT_EAR | SLOT_FACE + flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB flags_atom = CAN_BE_SYRINGED attack_verb = list("burnt", "singed") blood_overlay_type = "" @@ -693,6 +694,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM throwforce = 4 flags_atom = FPRINT|CONDUCT flags_equip_slot = SLOT_WAIST + flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB attack_verb = list("burnt", "singed") /obj/item/tool/lighter/zippo diff --git a/code/game/objects/items/tools/kitchen_tools.dm b/code/game/objects/items/tools/kitchen_tools.dm index d6473b156a67..a4c4925fba2c 100644 --- a/code/game/objects/items/tools/kitchen_tools.dm +++ b/code/game/objects/items/tools/kitchen_tools.dm @@ -48,7 +48,7 @@ var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) if(fullness > NUTRITION_HIGH) to_chat(user, SPAN_WARNING("[user == M ? "You" : "They"] don't feel like eating more right now.")) - return ..() + return reagents.set_source_mob(user) reagents.trans_to_ingest(M, reagents.total_volume) if(M == user) diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm index 8febff63ee5d..f45953040a07 100644 --- a/code/game/objects/items/tools/maintenance_tools.dm +++ b/code/game/objects/items/tools/maintenance_tools.dm @@ -29,6 +29,7 @@ matter = list("metal" = 150) attack_verb = list("bashed", "battered", "bludgeoned", "whacked") inherent_traits = list(TRAIT_TOOL_WRENCH) + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) /* @@ -52,7 +53,7 @@ attack_verb = list("stabbed") flags_item = CAN_DIG_SHRAPNEL inherent_traits = list(TRAIT_TOOL_SCREWDRIVER) - + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) /obj/item/tool/screwdriver/Initialize() @@ -135,6 +136,7 @@ sharp = IS_SHARP_ITEM_SIMPLE edge = 1 inherent_traits = list(TRAIT_TOOL_WIRECUTTERS) + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) /obj/item/tool/wirecutters/tactical name = "tactical wirecutters" @@ -189,6 +191,7 @@ /// Used to slowly deplete the fuel when the tool is left on. var/weld_tick = 0 var/has_welding_screen = FALSE + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) /obj/item/tool/weldingtool/Initialize() . = ..() @@ -472,6 +475,7 @@ attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") inherent_traits = list(TRAIT_TOOL_CROWBAR) pry_capable = IS_PRY_CAPABLE_CROWBAR + preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY) /obj/item/tool/crowbar/red icon = 'icons/obj/items/items.dmi' diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2dc064aa86d4..9a0f21e9655a 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -23,6 +23,8 @@ /// an object's "projectile_coverage" var indicates the maximum probability of blocking a projectile, assuming density and throwpass. Used by barricades, tables and window frames var/projectile_coverage = 0 + /// How many tiles away from this object that a shooter needs to be to maximize this barricade's projectile coverage + var/projectile_coverage_distance_limit = 6 /// set to true if the item is garbage and should be deleted after awhile var/garbage = FALSE @@ -277,7 +279,11 @@ //trying to buckle a mob /obj/proc/buckle_mob(mob/M, mob/user) - if (!ismob(M) || (get_dist(src, user) > 1) || user.is_mob_restrained() || user.stat || buckled_mob || M.buckled || !isturf(user.loc)) + if (!ismob(M) || (get_dist(src, user) > 1) || user.stat || buckled_mob || M.buckled || !isturf(user.loc)) + return + + if (user.is_mob_incapacitated() || HAS_TRAIT(user, TRAIT_IMMOBILIZED) || HAS_TRAIT(user, TRAIT_FLOORED)) + to_chat(user, SPAN_WARNING("You can't do this right now.")) return if (isxeno(user) && !HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS)) @@ -286,11 +292,6 @@ if (iszombie(user)) return - // mobs that become immobilized should not be able to buckle themselves. - if(M == user && HAS_TRAIT(user, TRAIT_IMMOBILIZED)) - to_chat(user, SPAN_WARNING("You are unable to do this in your current state.")) - return - if(density) density = FALSE if(!step(M, get_dir(M, src)) && loc != M.loc) diff --git a/code/game/objects/prop.dm b/code/game/objects/prop.dm index cc941b19ed97..9e256236e7d6 100644 --- a/code/game/objects/prop.dm +++ b/code/game/objects/prop.dm @@ -169,6 +169,18 @@ icon_state = "game_kit" icon = 'icons/obj/items/items.dmi' +/obj/item/prop/gripper + name = "magnetic gripper" + desc = "A simple grasping tool for synthetic assets." + icon_state = "gripper" + icon = 'icons/obj/items/devices.dmi' + +/obj/item/prop/matter_decompiler + name = "matter decompiler" + desc = "Eating trash, bits of glass, or other debris will replenish your stores." + icon_state = "decompiler" + icon = 'icons/obj/items/devices.dmi' + /// Xeno-specific props /obj/item/prop/alien/hugger diff --git a/code/game/objects/structures/airlock_assembly.dm b/code/game/objects/structures/airlock_assembly.dm index d9e55e868016..01fca4a68783 100644 --- a/code/game/objects/structures/airlock_assembly.dm +++ b/code/game/objects/structures/airlock_assembly.dm @@ -111,6 +111,11 @@ qdel(src) return + for(var/obj/object in loc) + if(object.density && object != src) + to_chat(user, SPAN_WARNING("[object] is blocking you from interacting with [src]!")) + return + switch(state) if(STATE_STANDARD) if(HAS_TRAIT(attacking_item, TRAIT_TOOL_WRENCH)) diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm index 28036f92d018..a7d3d4d16cd4 100644 --- a/code/game/objects/structures/barricade/barricade.dm +++ b/code/game/objects/structures/barricade/barricade.dm @@ -34,6 +34,7 @@ var/is_wired = FALSE flags_barrier = HANDLE_BARRIER_CHANCE projectile_coverage = PROJECTILE_COVERAGE_HIGH + projectile_coverage_distance_limit = 2 var/upgraded var/brute_multiplier = 1 var/burn_multiplier = 1 @@ -453,6 +454,10 @@ to_chat(user, SPAN_WARNING("You'll need some adequate repair material in your other hand to patch up [src]!")) return FALSE + if(material.amount < nailgun.material_per_repair) + to_chat(user, SPAN_WARNING("You'll need more adequate repair material in your other hand to patch up [src]!")) + return FALSE + var/repair_value = 0 for(var/validSheetType in repair_materials) if(validSheetType == material.sheettype) @@ -469,7 +474,7 @@ return FALSE if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0) - to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!")) + to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!")) return FALSE if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3) @@ -479,7 +484,7 @@ update_health(-repair_value*maxhealth) to_chat(user, SPAN_WARNING("You nail [material] to [src], restoring some of its integrity!")) update_damage_state() - material.use(1) + material.use(nailgun.material_per_repair) nailgun.current_mag.current_rounds -= 3 nailgun.in_chamber = null nailgun.load_into_chamber() diff --git a/code/game/objects/structures/barricade/deployable.dm b/code/game/objects/structures/barricade/deployable.dm index e53c917dc2bb..ad559f2e13bd 100644 --- a/code/game/objects/structures/barricade/deployable.dm +++ b/code/game/objects/structures/barricade/deployable.dm @@ -31,7 +31,7 @@ if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR)) if(user.action_busy) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You do not know how to collapse [src] using a crowbar...")) return user.visible_message(SPAN_NOTICE("[user] starts collapsing [src]."), \ @@ -95,6 +95,7 @@ w_class = SIZE_LARGE flags_equip_slot = SLOT_BACK|SLOT_SUIT_STORE + flags_item = SMARTGUNNER_BACKPACK_OVERRIDE icon_state = "folding-1" item_state = "folding" item_state_slots = list( diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm index 3e79af2e21e1..f16e6851341b 100644 --- a/code/game/objects/structures/barricade/metal.dm +++ b/code/game/objects/structures/barricade/metal.dm @@ -48,7 +48,7 @@ if(!..()) return FALSE - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) if(!silent) to_chat(user, SPAN_WARNING("You're not trained to repair [src]...")) return FALSE diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/plasteel.dm index 1acedae9997d..fb5a08954a5d 100644 --- a/code/game/objects/structures/barricade/plasteel.dm +++ b/code/game/objects/structures/barricade/plasteel.dm @@ -69,7 +69,7 @@ if(!..()) return FALSE - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) if(!silent) to_chat(user, SPAN_WARNING("You're not trained to repair [src]...")) return FALSE @@ -95,7 +95,7 @@ if(busy || tool_cooldown > world.time) return tool_cooldown = world.time + 10 - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to assemble [src]...")) return @@ -112,7 +112,7 @@ return if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to modify [src]...")) return playsound(src.loc, 'sound/items/Crowbar.ogg', 25, 1) @@ -136,7 +136,7 @@ if(busy || tool_cooldown > world.time) return tool_cooldown = world.time + 10 - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to assemble [src]...")) return if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src)) @@ -151,7 +151,7 @@ if(busy || tool_cooldown > world.time) return tool_cooldown = world.time + 10 - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to assemble [src]...")) return if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src)) @@ -169,7 +169,7 @@ if(busy || tool_cooldown > world.time) return tool_cooldown = world.time + 10 - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to assemble [src]...")) return var/turf/open/T = loc @@ -190,7 +190,7 @@ if(busy || tool_cooldown > world.time) return tool_cooldown = world.time + 10 - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You are not trained to assemble [src]...")) return user.visible_message(SPAN_NOTICE("[user] starts unseating [src]'s panels."), diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm deleted file mode 100644 index 704e2c79157a..000000000000 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ /dev/null @@ -1,16 +0,0 @@ - -/obj/structure/closet/malf/suits - desc = "It's a storage unit for operational gear." - icon_state = "syndicate" - icon_closed = "syndicate" - icon_opened = "syndicate_open" - -/obj/structure/closet/malf/suits/Initialize() - . = ..() - new /obj/item/tank/jetpack/void(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/clothing/head/helmet/space/uscm(src) - new /obj/item/clothing/suit/space/uscm(src) - new /obj/item/tool/crowbar(src) - new /obj/item/cell(src) - new /obj/item/device/multitool(src) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index b000fd5733a2..0bf39322d107 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -23,7 +23,7 @@ . = ..() #ifndef UNIT_TESTS - switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0))) + switch (pick_weight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 1, "delete" = 1))) #else var/test = "both" switch (test) // We don't want randomness in tests diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index d891119a8404..8a10cd4d93ea 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -277,13 +277,6 @@ name = "RCD crate" desc = "A crate for the storage of the RCD." -/obj/structure/closet/crate/rcd/Initialize() - . = ..() - new /obj/item/ammo_rcd(src) - new /obj/item/ammo_rcd(src) - new /obj/item/ammo_rcd(src) - new /obj/item/device/rcd(src) - /obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle desc = "A crate of emergency rations." name = "Emergency Rations" diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm deleted file mode 100644 index 239df3c05973..000000000000 --- a/code/game/objects/structures/electricchair.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/structure/bed/chair/e_chair - name = "electric chair" - desc = "Looks absolutely SHOCKING!" - icon_state = "echair1" - var/last_time = 1 - -/obj/structure/bed/chair/e_chair/New() - ..() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) - - -/obj/structure/bed/chair/e_chair/rotate() - ..() - overlays.Cut() - overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete - return - -/obj/structure/bed/chair/e_chair/proc/shock() - if(last_time + 50 > world.time) - return - last_time = world.time - - // special power handling - var/area/A = get_area(src) - if(!isarea(A)) - return - if(!A.powered(POWER_CHANNEL_EQUIP)) - return - A.use_power(5000) - var/light = A.power_light - A.updateicon() - - flick("echair1", src) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(12, 1, src) - s.start() - if(buckled_mob) - buckled_mob.burn_skin(85) - to_chat(buckled_mob, SPAN_DANGER("You feel a deep shock course through your body!")) - sleep(1) - buckled_mob.burn_skin(85) - buckled_mob.apply_effect(600, STUN) - visible_message(SPAN_DANGER("The electric chair went off!"), SPAN_DANGER("You hear a deep sharp shock!")) - - A.power_light = light - A.updateicon() - return diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 01e0e1b717cc..325af12c814b 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -110,6 +110,10 @@ if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) return + for(var/obj/object in loc) + if(object.density) + to_chat(user, SPAN_WARNING("[object] is blocking you from welding [src] together!")) + return if(do_after(user,30, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) if(QDELETED(src)) return @@ -334,7 +338,6 @@ else dmg = floor(P.damage * 0.5) if(dmg) - health -= dmg take_damage(dmg) bullet_ping(P) if(health <= 0) @@ -342,7 +345,9 @@ return TRUE /obj/structure/girder/proc/take_damage(damage) - health = max(health - damage, 0) + health -= damage + if(health <= -100) + qdel(src) if(health <= 0) update_state() @@ -356,10 +361,11 @@ update_state() /obj/structure/girder/proc/update_state() - if (health <= 0) + if(health <= 0 && density) icon_state = "[icon_state]_damaged" density = FALSE - else + + else if(health > 0 && !density) var/underscore_position = findtext(icon_state,"_") var/new_state = copytext(icon_state, 1, underscore_position) icon_state = new_state diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 986ae99739aa..f71882374518 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -36,12 +36,12 @@ move_delay += 4 //harder to move a wheelchair with a single hand working_hands-- else if((left_hand.status & LIMB_BROKEN) && !(left_hand.status & LIMB_SPLINTED)) - move_delay++ + move_delay ++ if(!right_hand || (right_hand.status & LIMB_DESTROYED)) move_delay += 4 working_hands-- else if((right_hand.status & LIMB_BROKEN) && !(right_hand.status & LIMB_SPLINTED)) - move_delay += 2 + move_delay++ if(!working_hands) return // No hands to drive your chair? Tough luck! if(driver.pulling && driver.pulling.drag_delay && driver.get_pull_miltiplier()) //Dragging stuff can slow you down a bit. diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index a1542f7baf75..7d4c3021fd0a 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -30,6 +30,7 @@ var/flip_cooldown = 0 //If flip cooldown exists, don't allow flipping or putting back. This carries a WORLD.TIME value health = 100 projectile_coverage = 20 //maximum chance of blocking a projectile + var/flipped_projectile_coverage_distance_limit = 2 var/flipped_projectile_coverage = PROJECTILE_COVERAGE_HIGH var/upright_projectile_coverage = PROJECTILE_COVERAGE_LOW surgery_duration_multiplier = SURGERY_SURFACE_MULT_UNSUITED @@ -42,6 +43,7 @@ qdel(T) if(flipped) projectile_coverage = flipped_projectile_coverage + projectile_coverage_distance_limit = flipped_projectile_coverage_distance_limit else projectile_coverage = upright_projectile_coverage @@ -446,6 +448,7 @@ INVOKE_ASYNC(movable_on_table, TYPE_PROC_REF(/atom/movable, throw_atom), pick(targets), 1, SPEED_FAST) projectile_coverage = flipped_projectile_coverage + projectile_coverage_distance_limit = flipped_projectile_coverage_distance_limit setDir(direction) if(dir != NORTH) @@ -473,6 +476,7 @@ verbs += /obj/structure/surface/table/verb/do_flip projectile_coverage = upright_projectile_coverage + projectile_coverage_distance_limit = src::projectile_coverage_distance_limit layer = initial(layer) flipped = FALSE diff --git a/code/game/sound.dm b/code/game/sound.dm index 1ab8fc42f41a..e95279a37731 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -204,6 +204,8 @@ S = pick('sound/items/cane_step_1.ogg', 'sound/items/cane_step_2.ogg', 'sound/items/cane_step_3.ogg', 'sound/items/cane_step_4.ogg', 'sound/items/cane_step_5.ogg', ) if("match") S = pick('sound/effects/match.ogg') + if("throwing") + S = pick('sound/effects/throwing/swoosh1.ogg', 'sound/effects/throwing/swoosh2.ogg', 'sound/effects/throwing/swoosh3.ogg', 'sound/effects/throwing/swoosh4.ogg') if("punch") S = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') if("swing_hit") @@ -365,6 +367,8 @@ S = pick('sound/voice/upp_warcry/warcry_female_1.ogg', 'sound/voice/upp_warcry/warcry_female_2.ogg') if("rtb_handset") S = pick('sound/machines/telephone/rtb_handset_1.ogg', 'sound/machines/telephone/rtb_handset_2.ogg', 'sound/machines/telephone/rtb_handset_3.ogg', 'sound/machines/telephone/rtb_handset_4.ogg', 'sound/machines/telephone/rtb_handset_5.ogg') + if("talk_phone") + S = pick('sound/machines/telephone/talk_phone1.ogg', 'sound/machines/telephone/talk_phone2.ogg', 'sound/machines/telephone/talk_phone3.ogg', 'sound/machines/telephone/talk_phone4.ogg', 'sound/machines/telephone/talk_phone5.ogg', 'sound/machines/telephone/talk_phone6.ogg', 'sound/machines/telephone/talk_phone7.ogg') if("bone_break") S = pick('sound/effects/bone_break1.ogg','sound/effects/bone_break2.ogg','sound/effects/bone_break3.ogg','sound/effects/bone_break4.ogg','sound/effects/bone_break5.ogg','sound/effects/bone_break6.ogg','sound/effects/bone_break7.ogg') if("plush") diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 53b64cbedfad..8974eb36187f 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -532,7 +532,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) for(var/datum/supply_packs_asrs/crate in cratelist) var/weight = (floor(10000/crate.cost)) weighted_crate_list[crate] = weight - return pickweight(weighted_crate_list) + return pick_weight(weighted_crate_list) //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. /datum/controller/supply/proc/forbidden_atoms_check(atom/A) diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm index 21839d35af03..6db61002c2fe 100644 --- a/code/game/turfs/walls/wall_types.dm +++ b/code/game/turfs/walls/wall_types.dm @@ -297,11 +297,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) /turf/closed/wall/indestructible/splashscreen name = "Lobby Art" desc = "Assorted artworks." - icon = 'icons/lobby/title.dmi' - icon_state = "" -// icon_state = "title_holiday" + icon = 'icons/lobby/title_loading.dmi' + icon_state = "title" layer = FLY_LAYER - special_icon = 1 + special_icon = TRUE /turf/closed/wall/indestructible/splashscreen/Initialize() . = ..() @@ -309,16 +308,19 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen) /proc/force_lobby_art(art_id) GLOB.displayed_lobby_art = art_id - var/turf/closed/wall/indestructible/splashscreen/SS = locate("LOBBYART") + var/turf/closed/wall/indestructible/splashscreen/lobby_art = locate("LOBBYART") var/list/lobby_arts = CONFIG_GET(str_list/lobby_art_images) var/list/lobby_authors = CONFIG_GET(str_list/lobby_art_authors) - SS.icon_state = lobby_arts[GLOB.displayed_lobby_art] - SS.desc = "Artwork by [lobby_authors[GLOB.displayed_lobby_art]]" - for(var/client/C in GLOB.clients) + lobby_art.icon = 'icons/lobby/title.dmi' + lobby_art.icon_state = lobby_arts[GLOB.displayed_lobby_art] + lobby_art.desc = "Artwork by [lobby_authors[GLOB.displayed_lobby_art]]" + lobby_art.pixel_x = -288 + lobby_art.pixel_y = -288 + for(var/client/player in GLOB.clients) if(GLOB.displayed_lobby_art != -1) var/author = lobby_authors[GLOB.displayed_lobby_art] if(author != "Unknown") - to_chat_forced(C, SPAN_ROUNDBODY("
This round's lobby art is brought to you by [author]
")) + to_chat_forced(player, SPAN_ROUNDBODY("
This round's lobby art is brought to you by [author]
")) /turf/closed/wall/indestructible/other icon_state = "r_wall" diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm index bb1694359b98..f82ba6ddadaf 100644 --- a/code/game/turfs/walls/walls.dm +++ b/code/game/turfs/walls/walls.dm @@ -566,7 +566,7 @@ // Check again for presence of objects if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0) - to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!")) + to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!")) return FALSE if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < (4*amount_needed-1)) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm deleted file mode 100644 index 3a9274dbec62..000000000000 --- a/code/game/verbs/who.dm +++ /dev/null @@ -1,209 +0,0 @@ -/client/verb/who()//likely don't touch any... this is easy can die. (:troll_fale:) - set name = "Who" - set category = "OOC" - - var/list/counted_humanoids = list( - "Observers" = 0, - "Admin observers" = 0, - "Humans" = 0, - "Infected humans" = 0, - FACTION_MARINE = 0, - "USCM Marines" = 0, - "Lobby" = 0, - - FACTION_YAUTJA = 0, - "Infected preds" = 0, - - FACTION_PMC = 0, - FACTION_CLF = 0, - FACTION_UPP = 0, - FACTION_TWE = 0, - FACTION_FREELANCER = 0, - FACTION_SURVIVOR = 0, - FACTION_WY_DEATHSQUAD = 0, - FACTION_COLONIST = 0, - FACTION_MERCENARY = 0, - FACTION_DUTCH = 0, - FACTION_HEFA = 0, - FACTION_GLADIATOR = 0, - FACTION_PIRATE = 0, - FACTION_PIZZA = 0, - FACTION_SOUTO = 0, - - FACTION_NEUTRAL = 0, - - FACTION_ZOMBIE = 0 - ) - - var/list/counted_xenos = list() - - var/players = length(GLOB.clients) - - var/dat = "Current Players:
" - var/list/Lines = list() - if(admin_holder && ((R_ADMIN & admin_holder.rights) || (R_MOD & admin_holder.rights))) - for(var/client/C in GLOB.clients) - if(!CLIENT_HAS_RIGHTS(src, R_STEALTH) && (CLIENT_IS_STEALTHED(C))) - continue - var/entry = "[C.key]" - if(C.mob) //Juuuust in case - if(istype(C.mob, /mob/new_player)) - entry += " - In Lobby" - counted_humanoids["Lobby"]++ - else - entry += " - Playing as [C.mob.real_name]" - - if(isobserver(C.mob)) - counted_humanoids["Observers"]++ - if(C.admin_holder?.rights & R_MOD) - counted_humanoids["Admin observers"]++ - counted_humanoids["Observers"]-- - var/mob/dead/observer/O = C.mob - if(O.started_as_observer) - entry += " - Observing" - else - entry += " - DEAD" - else - switch(C.mob.stat) - if(UNCONSCIOUS) - entry += " - Unconscious" - if(DEAD) - entry += " - DEAD" - - if(C.mob && C.mob.stat != DEAD) - if(ishuman(C.mob)) - if(C.mob.faction == FACTION_ZOMBIE) - counted_humanoids[FACTION_ZOMBIE]++ - entry += " - Zombie" - else if(C.mob.faction == FACTION_YAUTJA) - counted_humanoids[FACTION_YAUTJA]++ - entry += " - Predator" - if(C.mob.status_flags & XENO_HOST) - counted_humanoids["Infected preds"]++ - else - counted_humanoids["Humans"]++ - if(C.mob.status_flags & XENO_HOST) - counted_humanoids["Infected humans"]++ - if(C.mob.faction == FACTION_MARINE) - counted_humanoids[FACTION_MARINE]++ - if(C.mob.job in (GLOB.ROLES_MARINES)) - counted_humanoids["USCM Marines"]++ - else - counted_humanoids[C.mob.faction]++ - else if(isxeno(C.mob)) - var/mob/living/carbon/xenomorph/X = C.mob - counted_xenos[X.hivenumber]++ - if(X.faction == FACTION_PREDALIEN) - counted_xenos[FACTION_PREDALIEN]++ - entry += " - Xenomorph" - entry += " (?)" - Lines += entry - - for(var/line in sortList(Lines)) - dat += "[line]
" - dat += "Total Players: [players]" - dat += "
In Lobby: [counted_humanoids["Lobby"]]" - dat += "
Observers: [counted_humanoids["Observers"]] players and [counted_humanoids["Admin observers"]] staff members" - dat += "
Humans: [counted_humanoids["Humans"]] (Infected: [counted_humanoids["Infected humans"]])" - if(counted_humanoids[FACTION_MARINE]) - dat += "
USCM personnel: [counted_humanoids[FACTION_MARINE]] (Marines: [counted_humanoids["USCM Marines"]])" - if(counted_humanoids[FACTION_YAUTJA]) - dat += "
Predators: [counted_humanoids[FACTION_YAUTJA]] [counted_humanoids["Infected preds"] ? "(Infected: [counted_humanoids["Infected preds"]])" : ""]" - if(counted_humanoids[FACTION_ZOMBIE]) - dat += "
Zombies: [counted_humanoids[FACTION_ZOMBIE]]" - - var/show_fact = TRUE - for(var/i in 10 to LAZYLEN(counted_humanoids) - 2) - if(counted_humanoids[counted_humanoids[i]]) - if(show_fact) - dat += "

Other factions:" - show_fact = FALSE - dat += "
[counted_humanoids[i]]: [counted_humanoids[counted_humanoids[i]]]" - if(counted_humanoids[FACTION_NEUTRAL]) - dat += "
[FACTION_NEUTRAL] Humans: [counted_humanoids[FACTION_NEUTRAL]]" - - show_fact = TRUE - var/datum/hive_status/hive - for(var/hivenumber in counted_xenos) - // Print predalien counts last - if(hivenumber == FACTION_PREDALIEN) - continue - if(show_fact) - dat += "

Xenomorphs:" - show_fact = FALSE - hive = GLOB.hive_datum[hivenumber] - if(hive) - dat += "
[hive.name]: [counted_xenos[hivenumber]] (Queen: [hive.living_xeno_queen ? "Alive" : "Dead"])" - else - dat += "
Error: no hive datum detected for [hivenumber]." - hive = null - if(counted_xenos[FACTION_PREDALIEN]) - dat += "
Predaliens: [counted_xenos[FACTION_PREDALIEN]]" - - else - for(var/client/C in GLOB.clients) - if((C.admin_holder && C.admin_holder.fakekey) || (CLIENT_IS_STEALTHED(C))) - continue - - Lines += C.key - for(var/line in sortList(Lines)) - dat += "[line]
" - dat += "Total Players: [players]
" - - dat += "" - show_browser(usr, dat, "Who", "who", "size=600x800") - - -/client/verb/staffwho() - set name = "Staffwho" - set category = "Admin" - - var/dat = "" - var/list/mappings - if(CONFIG_GET(flag/show_manager)) - LAZYSET(mappings, "Management", R_PERMISSIONS) - if(CONFIG_GET(flag/show_devs)) - LAZYSET(mappings, "Maintainers", R_PROFILER) - LAZYSET(mappings, "Admins", R_ADMIN) - if(CONFIG_GET(flag/show_mods)) - LAZYSET(mappings, "Moderators", R_MOD) - if(CONFIG_GET(flag/show_mentors)) - LAZYSET(mappings, "Mentors", R_MENTOR) - - var/list/listings - for(var/category in mappings) - LAZYSET(listings, category, list()) - - for(var/client/C in GLOB.admins) - if(CLIENT_IS_STEALTHED(C) && !CLIENT_HAS_RIGHTS(src, R_STEALTH)) - continue - if(C.admin_holder?.fakekey && !CLIENT_IS_STAFF(src)) - continue - for(var/category in mappings) - if(CLIENT_HAS_RIGHTS(C, mappings[category])) - LAZYADD(listings[category], C) - break - - for(var/category in listings) - dat += "
Current [category] ([length(listings[category])]):
\n" - for(var/client/entry in listings[category]) - dat += "\t[entry.key] is \a [entry.admin_holder.rank]" - if(LAZYLEN(entry.admin_holder.extra_titles)) - for(var/srank in entry.admin_holder.extra_titles) - dat += " & [srank]" - if(CLIENT_IS_STAFF(src)) - if(CLIENT_IS_STEALTHED(entry)) - dat += " (STEALTHED)" - else if(entry.admin_holder?.fakekey) - dat += " (HIDDEN)" - if(istype(entry.mob, /mob/dead/observer)) - dat += " - Observing" - else if(istype(entry.mob, /mob/new_player)) - dat += " - Lobby" - else - dat += " - Playing" - if(entry.is_afk()) - dat += " (AFK)" - dat += "
" - dat += "" - show_browser(usr, dat, "Staffwho", "staffwho", "size=600x800") diff --git a/code/modules/autowiki/autowiki.dm b/code/modules/autowiki/autowiki.dm index 8b38ec76706b..5f8fe0a10a1f 100644 --- a/code/modules/autowiki/autowiki.dm +++ b/code/modules/autowiki/autowiki.dm @@ -23,6 +23,26 @@ for (var/datum/autowiki/autowiki_type as anything in subtypesof(/datum/autowiki)) var/datum/autowiki/autowiki = new autowiki_type + + if(autowiki.generate_multiple) + var/output = autowiki.generate_multiple() + + if (!islist(output)) + CRASH("[autowiki_type] does not generate a proper output when generate_multiple is set!") + + for(var/list in output) + total_output += json_encode(list) + "\n" + + if(!autowiki.page) + continue + + var/list/all_page_names = list() + for(var/list in output) + all_page_names += autowiki.include_template(list["title"]) + + total_output += json_encode(list("title" = autowiki.page, "text" = all_page_names)) + continue + var/output = autowiki.generate() if (!istext(output)) diff --git a/code/modules/autowiki/pages/_page.dm b/code/modules/autowiki/pages/_page.dm index 8e745ace61c2..0e4091d0ccc5 100644 --- a/code/modules/autowiki/pages/_page.dm +++ b/code/modules/autowiki/pages/_page.dm @@ -6,12 +6,20 @@ /// For example: "Template:Autowiki/CircuitInfo". var/page + /// If the generation of this autowiki should call /generate_multiple(), + /// which should return a list of list(title = "Page Title", contents) + /// allowing for the generation of multiple pages in the same autowiki + var/generate_multiple = FALSE + /// Override and return the new text of the page. /// This proc can be impure, usually to call `upload_file`. /datum/autowiki/proc/generate() SHOULD_CALL_PARENT(FALSE) CRASH("[type] does not implement generate()!") +/datum/autowiki/proc/generate_multiple() + SHOULD_CALL_PARENT(FALSE) + /// Generates an auto formatted template user. /// Your autowiki should ideally be a *lot* of these. /// It lets wiki editors edit it much easier later, without having to enter repo. diff --git a/code/modules/autowiki/pages/guns.dm b/code/modules/autowiki/pages/guns.dm index 7f63602d56f0..017c2535a5e1 100644 --- a/code/modules/autowiki/pages/guns.dm +++ b/code/modules/autowiki/pages/guns.dm @@ -1,9 +1,10 @@ /datum/autowiki/guns + generate_multiple = TRUE page = "Template:Autowiki/Content/GunData" -/datum/autowiki/guns/generate() - var/output = "" +/datum/autowiki/guns/generate_multiple() + var/output = list() var/list/gun_to_ammo = list() @@ -12,12 +13,20 @@ continue // Skip mags with no icon_state (e.g. base types) LAZYADD(gun_to_ammo[initial(typepath.gun_type)], typepath) - for(var/typepath in sort_list(subtypesof(/obj/item/weapon/gun), GLOBAL_PROC_REF(cmp_typepaths_asc))) + var/list/unique_typepaths = list() + for(var/obj/item/weapon/gun/typepath as anything in sort_list(subtypesof(/obj/item/weapon/gun), GLOBAL_PROC_REF(cmp_typepaths_name_asc))) + if(initial(typepath.name) in unique_typepaths) + continue + + unique_typepaths[initial(typepath.name)] = typepath + + for(var/name in unique_typepaths) + var/typepath = unique_typepaths[name] + var/obj/item/weapon/gun/generating_gun = typepath if(isnull(initial(generating_gun.icon_state))) continue // Skip guns with no icon_state (e.g. base types) - - generating_gun = new typepath() + generating_gun = new typepath var/filename = SANITIZE_FILENAME(escape_value(format_text(generating_gun.name))) var/list/gun_data = generating_gun.ui_data() @@ -108,7 +117,9 @@ upload_icon(generated_icon, filename) gun_data["icon"] = filename - output += include_template("Autowiki/Gun", gun_data) + var/page_name = SANITIZE_FILENAME(replacetext(strip_improper(generating_gun.name), " ", "_")) + var/to_add = list(title = "Template:Autowiki/Content/Gun/[page_name]", text = include_template("Autowiki/Gun", gun_data)) + output += list(to_add) qdel(generating_gun) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b4ee572d8d2d..dd0d406560ab 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( var/gen_record = "" var/exploit_record = "" - var/nanotrasen_relation = "Neutral" + var/weyland_yutani_relation = "Neutral" var/uplinklocation = "PDA" @@ -426,7 +426,7 @@ GLOBAL_LIST_INIT(bgstate_options, list( dat += "Origin: [origin]
" dat += "Religion: [religion]
" - dat += "Corporate Relation: [nanotrasen_relation]
" + dat += "Corporate Relation: [weyland_yutani_relation]
" dat += "Preferred Squad: [preferred_squad]
" dat += "

Fluff Information:

" @@ -1641,10 +1641,10 @@ GLOBAL_LIST_INIT(bgstate_options, list( if(new_backbag) backbag = GLOB.backbaglist.Find(new_backbag) - if("nt_relation") + if("wy_relation") var/new_relation = input(user, "Choose your relation to the Weyland-Yutani company. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") if(new_relation) - nanotrasen_relation = new_relation + weyland_yutani_relation = new_relation if("prefsquad") var/new_pref_squad = input(user, "Choose your preferred squad.", "Character Preference") as null|anything in list("Alpha", "Bravo", "Charlie", "Delta", "None") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 54e98aceea94..f383aade5932 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,5 +1,5 @@ #define SAVEFILE_VERSION_MIN 8 -#define SAVEFILE_VERSION_MAX 24 +#define SAVEFILE_VERSION_MAX 25 //handles converting savefiles to new formats //MAKE SURE YOU KEEP THIS UP TO DATE! @@ -147,6 +147,11 @@ sound_toggles |= (SOUND_FAX_MACHINE) S["toggles_sound"] << sound_toggles + if(savefile_version < 25) //renemes nanotrasen to wy + var/relation + S["nanotrasen_relation"] >> relation + S["weyland_yutani_relation"] << relation + savefile_version = SAVEFILE_VERSION_MAX return 1 @@ -540,7 +545,7 @@ S["preferred_squad"] >> preferred_squad S["preferred_armor"] >> preferred_armor - S["nanotrasen_relation"] >> nanotrasen_relation + S["weyland_yutani_relation"] >> weyland_yutani_relation //S["skin_style"] >> skin_style S["uplinklocation"] >> uplinklocation @@ -556,7 +561,7 @@ if(isnull(language)) language = "None" if(isnull(spawnpoint)) spawnpoint = "Arrivals Shuttle" - if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) + if(isnull(weyland_yutani_relation)) weyland_yutani_relation = initial(weyland_yutani_relation) if(!real_name) real_name = random_name(gender) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) @@ -690,7 +695,7 @@ S["religion"] << religion S["traits"] << traits - S["nanotrasen_relation"] << nanotrasen_relation + S["weyland_yutani_relation"] << weyland_yutani_relation S["preferred_squad"] << preferred_squad S["preferred_armor"] << preferred_armor //S["skin_style"] << skin_style diff --git a/code/modules/clothing/gloves/boom_glove.dm b/code/modules/clothing/gloves/boom_glove.dm index 8cc3e8d910f6..ddddc5ecef5e 100644 --- a/code/modules/clothing/gloves/boom_glove.dm +++ b/code/modules/clothing/gloves/boom_glove.dm @@ -12,7 +12,7 @@ var/cooldown = 50 var/last_use = 0 - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) /obj/item/clothing/gloves/marine/boom_glove/item_action_slot_check(mob/user, slot) if(!ishuman(user)) return FALSE diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index e52032d0cba6..845ce2a6eb6e 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -354,7 +354,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( armor_melee = CLOTHING_ARMOR_MEDIUM armor_bullet = CLOTHING_ARMOR_MEDIUM armor_laser = CLOTHING_ARMOR_MEDIUMLOW - armor_energy = CLOTHING_ARMOR_NONE + armor_energy = CLOTHING_ARMOR_LOW armor_bomb = CLOTHING_ARMOR_LOW armor_bio = CLOTHING_ARMOR_MEDIUM armor_rad = CLOTHING_ARMOR_LOW @@ -379,8 +379,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( ) var/obj/item/storage/internal/headgear/pockets - var/storage_slots = 2 // keep in mind, one slot is reserved for garb items - var/storage_slots_reserved_for_garb = 2 + var/storage_slots = 2 // Small items like injectors, bandages, etc + var/storage_slots_reserved_for_garb = 2 // Cosmetic items & now cigarettes and lighters for RP var/storage_max_w_class = SIZE_TINY // can hold tiny items only, EXCEPT for glasses & metal flask. var/storage_max_storage_space = 4 diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 9c28ca42bc41..a8b056d0bb9d 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -32,7 +32,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_LEGS|BODY_FLAG_FEET|BODY_FLAG_ARMS|BODY_FLAG_HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/device/flashlight,/obj/item/tank/emergency_oxygen) slowdown = 3 armor_melee = CLOTHING_ARMOR_NONE armor_bullet = CLOTHING_ARMOR_NONE diff --git a/code/modules/clothing/suits/marine_armor/_marine_armor.dm b/code/modules/clothing/suits/marine_armor/_marine_armor.dm index e6cf78611a7f..3d89ecb7cabb 100644 --- a/code/modules/clothing/suits/marine_armor/_marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor/_marine_armor.dm @@ -50,7 +50,7 @@ armor_melee = CLOTHING_ARMOR_MEDIUM armor_bullet = CLOTHING_ARMOR_MEDIUM armor_laser = CLOTHING_ARMOR_MEDIUMLOW - armor_energy = CLOTHING_ARMOR_NONE + armor_energy = CLOTHING_ARMOR_LOW armor_bomb = CLOTHING_ARMOR_MEDIUMLOW armor_bio = CLOTHING_ARMOR_MEDIUM armor_rad = CLOTHING_ARMOR_MEDIUMLOW @@ -254,7 +254,7 @@ desc = "A standard Colonial Marines M2 Pattern Chestplate. Protects the chest from ballistic rounds, bladed objects and accidents. It has a small leather pouch strapped to it for limited storage." icon_state = "mp_armor" armor_melee = CLOTHING_ARMOR_MEDIUMHIGH - armor_bullet = CLOTHING_ARMOR_LOW + armor_bullet = CLOTHING_ARMOR_MEDIUM armor_laser = CLOTHING_ARMOR_LOW armor_energy = CLOTHING_ARMOR_LOW armor_bomb = CLOTHING_ARMOR_MEDIUM @@ -287,19 +287,17 @@ black_market_value = 20 /obj/item/clothing/suit/storage/marine/MP/warden - icon_state = "warden" name = "\improper M3 pattern warden MP armor" desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Wardens. Useful for letting your men know who is in charge." - armor_bio = CLOTHING_ARMOR_MEDIUMLOW - armor_rad = CLOTHING_ARMOR_MEDIUMLOW + icon_state = "warden" uniform_restricted = list(/obj/item/clothing/under/marine/warden) specialty = "M3 pattern warden MP" item_state_slots = list(WEAR_JACKET = "warden") /obj/item/clothing/suit/storage/marine/MP/WO - icon_state = "warrant_officer" name = "\improper M3 pattern chief MP armor" desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Chief MPs. Useful for letting your men know who is in charge." + icon_state = "warrant_officer" uniform_restricted = list(/obj/item/clothing/under/marine/officer/warrant) specialty = "M3 pattern chief MP" item_state_slots = list(WEAR_JACKET = "warrant_officer") @@ -361,6 +359,7 @@ armor_bomb = CLOTHING_ARMOR_MEDIUM armor_bio = CLOTHING_ARMOR_MEDIUMHIGH armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH + armor_energy = CLOTHING_ARMOR_MEDIUM specialty = "B12 pattern marine" light_range = 5 @@ -547,6 +546,7 @@ armor_bomb = CLOTHING_ARMOR_HIGHPLUS armor_bio = CLOTHING_ARMOR_MEDIUMHIGH armor_rad = CLOTHING_ARMOR_MEDIUM + armor_energy = CLOTHING_ARMOR_MEDIUMLOW armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH storage_slots = 2 slowdown = SLOWDOWN_ARMOR_LOWHEAVY @@ -591,6 +591,7 @@ armor_bio = CLOTHING_ARMOR_MEDIUMLOW armor_rad = CLOTHING_ARMOR_MEDIUMHIGH armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH + armor_energy = CLOTHING_ARMOR_MEDIUM storage_slots = 2 flags_inventory = BLOCKSHARPOBJ|BLOCK_KNOCKDOWN flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS|BODY_FLAG_LEGS|BODY_FLAG_FEET @@ -632,6 +633,7 @@ armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH armor_bomb = CLOTHING_ARMOR_VERYHIGH armor_bio = CLOTHING_ARMOR_MEDIUMLOW + armor_energy = CLOTHING_ARMOR_MEDIUM armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH flags_inventory = BLOCKSHARPOBJ|BLOCK_KNOCKDOWN flags_item = MOB_LOCK_ON_EQUIP|NO_CRYO_STORE diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index d78c0faeeca8..6ec29911c958 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -584,6 +584,11 @@ desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage." hold = /obj/item/storage/internal/accessory/tool_webbing +/obj/item/clothing/accessory/storage/tool_webbing/small + name = "Small Tool Webbing" + desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage. This is the small low-budget version." + hold = /obj/item/storage/internal/accessory/tool_webbing/small + /obj/item/storage/internal/accessory/tool_webbing storage_slots = 7 can_hold = list( @@ -594,8 +599,24 @@ /obj/item/tool/wirecutters, /obj/item/stack/cable_coil, /obj/item/device/multitool, + /obj/item/tool/shovel/etool, + /obj/item/weapon/gun/smg/nailgun/compact, ) +/obj/item/storage/internal/accessory/tool_webbing/small + storage_slots = 6 + +/obj/item/clothing/accessory/storage/tool_webbing/small/equipped + hold = /obj/item/storage/internal/accessory/tool_webbing/small/equipped + +/obj/item/storage/internal/accessory/tool_webbing/small/equipped/fill_preset_inventory() + new /obj/item/tool/screwdriver(src) + new /obj/item/tool/wrench(src) + new /obj/item/tool/weldingtool(src) + new /obj/item/tool/crowbar(src) + new /obj/item/tool/wirecutters(src) + new /obj/item/device/multitool(src) + /obj/item/clothing/accessory/storage/tool_webbing/equipped hold = /obj/item/storage/internal/accessory/tool_webbing/equipped diff --git a/code/modules/cm_aliens/weeds.dm b/code/modules/cm_aliens/weeds.dm index 2206bc528e82..ed6d628b2263 100644 --- a/code/modules/cm_aliens/weeds.dm +++ b/code/modules/cm_aliens/weeds.dm @@ -624,7 +624,7 @@ return /obj/effect/alien/weeds/node/pylon/cluster - spread_on_semiweedable = FALSE + spread_on_semiweedable = TRUE /obj/effect/alien/weeds/node/pylon/cluster/set_parent_damaged() if(!resin_parent) diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm index e867c0d64083..3c69a0fe241a 100644 --- a/code/modules/cm_marines/anti_air.dm +++ b/code/modules/cm_marines/anti_air.dm @@ -131,7 +131,7 @@ GLOBAL_DATUM(almayer_aa_cannon, /obj/structure/anti_air_cannon) if(..()) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to use that console.")) return TRUE diff --git a/code/modules/cm_marines/equipment/guncases.dm b/code/modules/cm_marines/equipment/guncases.dm index 22999e97fda2..cbbb791f8f0b 100644 --- a/code/modules/cm_marines/equipment/guncases.dm +++ b/code/modules/cm_marines/equipment/guncases.dm @@ -67,7 +67,6 @@ new /obj/item/ammo_magazine/rifle/lmg(src) new /obj/item/ammo_magazine/rifle/lmg/holo_target(src) new /obj/item/attachable/flashlight - new /obj/item/attachable/bipod //------------ /obj/item/storage/box/guncase/m41aMK1 diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 951cd30f84ff..c1621baa9b5d 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -283,15 +283,15 @@ specialist_assignment = "Scout" user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT) //this is to be able to use C4s that are coming with the kit - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) - user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) + user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) if("Demo") spec_box = new /obj/item/storage/box/spec/demolitionist(T) specialist_assignment = "Demo" user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET) //this is to be able to use C4s that are coming with the kit - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) - user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) + user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) if(specialist_assignment) user.put_in_hands(spec_box) card.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + card.assignment + " ([specialist_assignment])") @@ -423,7 +423,6 @@ new /obj/item/weapon/gun/rifle/lmg(src) new /obj/item/ammo_magazine/rifle/lmg(src) new /obj/item/ammo_magazine/rifle/lmg/holo_target(src) - new /obj/item/attachable/bipod(src) new /obj/item/stack/folding_barricade/three(src) new /obj/item/clothing/glasses/welding(src) new /obj/item/tool/weldingtool(src) diff --git a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm index 1cb93c6a809e..1d6cb3be0a3c 100644 --- a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm +++ b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm @@ -112,7 +112,7 @@ icon_state = initial(icon_state) /obj/item/mortar_shell/custom/attackby(obj/item/W as obj, mob/user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not know how to tinker with [name].")) return if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm index 018bd7b9e11c..e7e258494e52 100644 --- a/code/modules/cm_marines/equipment/mortar/mortars.dm +++ b/code/modules/cm_marines/equipment/mortar/mortars.dm @@ -91,7 +91,7 @@ if(isyautja(user)) to_chat(user, SPAN_WARNING("You kick [src] but nothing happens.")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't have the training to use [src].")) return if(busy) @@ -213,7 +213,7 @@ var/obj/item/mortar_shell/mortar_shell = item var/turf/target_turf = locate(targ_x + dial_x + offset_x, targ_y + dial_y + offset_y, z) var/area/target_area = get_area(target_turf) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't have the training to fire [src].")) return if(busy) @@ -277,7 +277,7 @@ addtimer(CALLBACK(src, PROC_REF(handle_shell), target_turf, mortar_shell), travel_time) if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't have the training to undeploy [src].")) return if(fixed) @@ -410,7 +410,7 @@ var/turf/deploy_turf = get_turf(user) if(!deploy_turf) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't have the training to deploy [src].")) return var/area/area = get_area(deploy_turf) diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index a4286b043eba..d3eca0ea3ba3 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -681,7 +681,7 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation) if(..()) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to use that console.")) return TRUE diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm index 231bf54475d3..b600f9fb67cb 100644 --- a/code/modules/cm_phone/phone.dm +++ b/code/modules/cm_phone/phone.dm @@ -37,6 +37,10 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/list/networks_receive = list(FACTION_MARINE) var/list/networks_transmit = list(FACTION_MARINE) + var/datum/looping_sound/telephone/busy/busy_loop + var/datum/looping_sound/telephone/hangup/hangup_loop + var/datum/looping_sound/telephone/ring/outring_loop + /obj/structure/transmitter/hidden do_not_disturb = PHONE_DND_FORCED @@ -51,6 +55,10 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) if(!get_turf(src)) return + outring_loop = new(attached_to) + busy_loop = new(attached_to) + hangup_loop = new(attached_to) + GLOB.transmitters += src /obj/structure/transmitter/update_icon() @@ -184,6 +192,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Dialing [calling_phone_id]..")) playsound(get_turf(user), "rtb_handset") timeout_timer_id = addtimer(CALLBACK(src, PROC_REF(reset_call), TRUE), timeout_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + outring_loop.start() START_PROCESSING(SSobj, src) START_PROCESSING(SSobj, T) @@ -223,6 +232,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) if(T.attached_to && ismob(T.attached_to.loc)) var/mob/M = T.attached_to.loc to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has picked up.")) + playsound(T.attached_to.loc, 'sound/machines/telephone/remote_pickup.ogg', 20) if(T.timeout_timer_id) deltimer(T.timeout_timer_id) T.timeout_timer_id = null @@ -230,6 +240,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Picked up a call from [T.phone_id].")) playsound(get_turf(user), "rtb_handset") + T.outring_loop.stop() user.put_in_active_hand(attached_to) update_icon() @@ -254,11 +265,14 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) if(T.attached_to && ismob(T.attached_to.loc)) var/mob/M = T.attached_to.loc to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has hung up on you.")) + T.hangup_loop.start() if(attached_to && ismob(attached_to.loc)) var/mob/M = attached_to.loc if(timeout) - to_chat(M, SPAN_PURPLE("[icon2html(src, M)] Your call to [T.phone_id] has reached voicemail, you immediately disconnect the line.")) + to_chat(M, SPAN_PURPLE("[icon2html(src, M)] Your call to [T.phone_id] has reached voicemail, nobody picked up the phone.")) + busy_loop.start() + outring_loop.stop() else to_chat(M, SPAN_PURPLE("[icon2html(src, M)] You have hung up on [T.phone_id].")) @@ -282,6 +296,8 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) T.update_icon() STOP_PROCESSING(SSobj, T) + outring_loop.stop() + STOP_PROCESSING(SSobj, src) /obj/structure/transmitter/process() @@ -319,9 +335,12 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) var/mob/M = attached_to.loc M.drop_held_item(attached_to) playsound(get_turf(M), "rtb_handset", 100, FALSE, 7) + hangup_loop.stop() attached_to.forceMove(src) reset_call() + busy_loop.stop() + outring_loop.stop() update_icon() @@ -347,6 +366,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter) P.handle_hear(message, L, speaking) attached_to.handle_hear(message, L, speaking) + playsound(P, "talk_phone", 5) log_say("TELEPHONE: [key_name(speaking)] on Phone '[phone_id]' to '[T.phone_id]' said '[message]'") /obj/structure/transmitter/attackby(obj/item/W, mob/user) diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 2db3c2ca4b68..3bbbd11c0784 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -486,7 +486,7 @@ throw_range = 6 hitsound = 'sound/weapons/slash.ogg' attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - actions_types = list(/datum/action/item_action) + actions_types = list(/datum/action/item_action/toggle/use) unacidable = TRUE /obj/item/weapon/yautja/knife/attack(mob/living/target, mob/living/carbon/human/user) @@ -584,7 +584,6 @@ SPAN_DANGER("[victim] is missing \his head. Pelts like this just aren't the same... You peel the skin around the stump loose with your [tool.name].")) else victim.apply_damage(10, BRUTE, v_head, sharp = TRUE) - v_head.disfigured = TRUE create_leftovers(victim, has_meat = FALSE, skin_amount = 1) if(victim.h_style == "Bald") //you can't scalp someone with no hair. user.visible_message(SPAN_DANGER("[user] makes some rough cuts on [victim]'s head and face with \a [tool]."), diff --git a/code/modules/cm_tech/implements/xeno_handler.dm b/code/modules/cm_tech/implements/xeno_handler.dm index cbafec7499ee..d3340ffcdff8 100644 --- a/code/modules/cm_tech/implements/xeno_handler.dm +++ b/code/modules/cm_tech/implements/xeno_handler.dm @@ -53,7 +53,7 @@ SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, SKILL_POLICE = SKILL_POLICE_SKILLED, SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, - SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_MASTER, SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, SKILL_ENDURANCE = SKILL_ENDURANCE_EXPERT, diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm index af4e497862fa..fef8498f802a 100644 --- a/code/modules/defenses/defenses.dm +++ b/code/modules/defenses/defenses.dm @@ -185,7 +185,7 @@ additional_shock++ if(prob(50)) var/mob/living/carbon/human/H = user - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) if(turned_on) additional_shock++ H.electrocute_act(40, src, additional_shock)//god damn Hans... @@ -204,7 +204,7 @@ to_chat(user, SPAN_WARNING("You've hacked \the [src], it's now ours!")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) to_chat(user, SPAN_WARNING("You don't have the training to do this.")) return // if the sentry can have key interacted with @@ -368,7 +368,7 @@ to_chat(user, SPAN_WARNING("It must be anchored to the ground before you can activate it.")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) if(locked) to_chat(user, SPAN_WARNING("The control panel on [src] is locked to non-engineers.")) return @@ -490,7 +490,7 @@ return if(!friendly_faction(usr.faction)) return - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You don't have the training to do this.")) return diff --git a/code/modules/defenses/handheld.dm b/code/modules/defenses/handheld.dm index 5b5831c9bb15..242d902cbd13 100644 --- a/code/modules/defenses/handheld.dm +++ b/code/modules/defenses/handheld.dm @@ -114,7 +114,8 @@ . += list("DMR Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "DMR uac_sentry_handheld")) . += list( "Shotgun Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Shotgun uac_sentry_handheld"), - "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld") + "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld"), + "Omni-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state="Normal uac_sentry_handheld") ) /obj/item/defenses/handheld/sentry/upgrade_string_to_type(upgrade_string) @@ -125,6 +126,8 @@ return /obj/item/defenses/handheld/sentry/shotgun if("Mini-Sentry Upgrade") return /obj/item/defenses/handheld/sentry/mini + if("Omni-Sentry Upgrade") + return /obj/item/defenses/handheld/sentry/omni /obj/item/defenses/handheld/sentry/dmr name = "handheld UA 725-D sniper sentry" @@ -143,6 +146,12 @@ defense_type = /obj/structure/machinery/defenses/sentry/mini deployment_time = 0.75 SECONDS +/obj/item/defenses/handheld/sentry/omni + name = "handheld UA 571-D omnidirectional sentry gun" + icon = 'icons/obj/structures/machinery/defenses/sentry.dmi' + icon_state = "Normal uac_sentry_handheld" + defense_type = /obj/structure/machinery/defenses/sentry/omni + /obj/item/defenses/handheld/sentry/wy name = "handheld WY 202-GMA1 smart sentry" desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field." diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index 8ad4cd407e75..6c9c5ad68fea 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -223,7 +223,7 @@ if(istype(O, ammo)) var/obj/item/ammo_magazine/M = O - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) || user.action_busy) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || user.action_busy) return if(ammo.current_rounds) @@ -900,5 +900,11 @@ omni_directional = TRUE handheld_type = /obj/item/defenses/handheld/sentry/upp/light +/obj/structure/machinery/defenses/sentry/omni + name = "\improper UA 571-D omnidirectional sentry gun" + omni_directional = TRUE + damage_mult = 0.7 + sentry_range = 4 + #undef SENTRY_FIREANGLE #undef SENTRY_RANGE diff --git a/code/modules/defenses/sentry_computer.dm b/code/modules/defenses/sentry_computer.dm index 639a74e6ba30..3c278a6c06b2 100644 --- a/code/modules/defenses/sentry_computer.dm +++ b/code/modules/defenses/sentry_computer.dm @@ -308,7 +308,7 @@ . = ..() if(!on) return UI_CLOSE - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) return UI_UPDATE @@ -383,7 +383,7 @@ . = ..() if(.) return - if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(usr, SPAN_WARNING("You are not authorised to configure the sentry.")) return if(params["index"]) diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm index a3f33d4da078..41859167458f 100644 --- a/code/modules/desert_dam/motion_sensor/sensortower.dm +++ b/code/modules/desert_dam/motion_sensor/sensortower.dm @@ -101,7 +101,7 @@ add_fingerprint(user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how this thing works...")) return FALSE @@ -135,7 +135,7 @@ to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) return if(buildstate == SENSORTOWER_BUILDSTATE_BLOWTORCH && !is_on) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair this thing.")) return FALSE var/obj/item/tool/weldingtool/WT = O @@ -159,7 +159,7 @@ else if(HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS)) if(buildstate == SENSORTOWER_BUILDSTATE_WIRECUTTERS && !is_on) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair this thing.")) return FALSE playsound(loc, 'sound/items/Wirecutter.ogg', 25, 1) @@ -176,7 +176,7 @@ return TRUE else if(HAS_TRAIT(O, TRAIT_TOOL_WRENCH)) if(buildstate == SENSORTOWER_BUILDSTATE_WRENCH && !is_on) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no clue how to repair this thing.")) return FALSE playsound(loc, 'sound/items/Ratchet.ogg', 25, 1) diff --git a/code/modules/economy/TradeDestinations.dm b/code/modules/economy/TradeDestinations.dm deleted file mode 100644 index 94ead45bf13e..000000000000 --- a/code/modules/economy/TradeDestinations.dm +++ /dev/null @@ -1,110 +0,0 @@ - -GLOBAL_LIST_EMPTY(weighted_randomevent_locations) -GLOBAL_LIST_EMPTY(weighted_mundaneevent_locations) - -/datum/trade_destination - var/name = "" - var/description = "" - var/distance = 0 - var/list/willing_to_buy = list() - var/list/willing_to_sell = list() - var/can_shuttle_here = 0 //one day crew from the exodus will be able to travel to this destination - var/list/viable_random_events = list() - var/list/temp_price_change[BIOMEDICAL] - var/list/viable_mundane_events = list() - -/datum/trade_destination/proc/get_custom_eventstring(event_type) - return null - -//distance is measured in AU and co-relates to travel time -/datum/trade_destination/centcomm - name = "CentComm" - description = "Weyland-Yutani's administrative centre for Tau Ceti." - distance = 1.2 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, CORPORATE_ATTACK, AI_LIBERATION) - viable_mundane_events = list(ELECTION, RESIGNATION, CELEBRITY_DEATH) - -/datum/trade_destination/anansi - name = "NSS Anansi" - description = "Medical station ran by Second Red Cross (but owned by WY) for handling emergency cases from nearby colonies." - distance = 1.7 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, CULT_CELL_REVEALED, BIOHAZARD_OUTBREAK, PIRATES, ALIEN_RAIDERS) - viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH, BARGAINS, GOSSIP) - -/datum/trade_destination/anansi/get_custom_eventstring(event_type) - if(event_type == RESEARCH_BREAKTHROUGH) - return "Thanks to research conducted on the NSS Anansi, Second Red Cross Society wishes to announce a major breakthough in the field of \ - [pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. Weyland-Yutani is expected to announce a co-exploitation deal within the fortnight." - return null - -/datum/trade_destination/icarus - name = "NMV Icarus" - description = "Corvette assigned to patrol NSS Exodus local space." - distance = 0.1 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(SECURITY_BREACH, AI_LIBERATION, PIRATES) - -/datum/trade_destination/redolant - name = "OAV Redolant" - description = "Osiris Atmospherics station in orbit around the only gas giant insystem. They retain tight control over shipping rights, and Osiris warships protecting their prize are not an uncommon sight in Tau Ceti." - distance = 0.6 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(INDUSTRIAL_ACCIDENT, PIRATES, CORPORATE_ATTACK) - viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH) - -/datum/trade_destination/redolant/get_custom_eventstring(event_type) - if(event_type == RESEARCH_BREAKTHROUGH) - return "Thanks to research conducted on the OAV Redolant, Osiris Atmospherics wishes to announce a major breakthough in the field of \ - [pick("phoron research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. Weyland-Yutani is expected to announce a co-exploitation deal within the fortnight." - return null - -/datum/trade_destination/beltway - name = "Beltway mining chain" - description = "A co-operative effort between Beltway and Weyland-Yutani to exploit the rich outer asteroid belt of the Tau Ceti system." - distance = 7.5 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(PIRATES, INDUSTRIAL_ACCIDENT) - viable_mundane_events = list(TOURISM) - -/datum/trade_destination/biesel - name = "Biesel" - description = "Large ship yards, strong economy and a stable, well-educated populace, Biesel largely owes allegiance to Sol / Vessel Contracting and begrudgingly tolerates WY. Capital is Lowell City." - distance = 2.3 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING) - viable_mundane_events = list(BARGAINS, GOSSIP, SONG_DEBUT, MOVIE_RELEASE, ELECTION, TOURISM, RESIGNATION, CELEBRITY_DEATH) - -/datum/trade_destination/new_gibson - name = "New Gibson" - description = "Heavily industrialised rocky planet containing the majority of the planet-bound resources in the system, New Gibson is torn by unrest and has very little wealth to call it's own except in the hands of the corporations who jostle with WY for control." - distance = 6.6 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(RIOTS, INDUSTRIAL_ACCIDENT, BIOHAZARD_OUTBREAK, CULT_CELL_REVEALED, FESTIVAL, MOURNING) - viable_mundane_events = list(ELECTION, TOURISM, RESIGNATION) - -/datum/trade_destination/luthien - name = "Luthien" - description = "A small colony established on a feral, untamed world (largely jungle). Savages and wild beasts attack the outpost regularly, although WY maintains tight military control." - distance = 8.9 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS) - viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION) - -/datum/trade_destination/reade - name = "Reade" - description = "A cold, metal-deficient world, WY maintains large pastures in whatever available space in an attempt to salvage something from this profitless colony." - distance = 7.5 - willing_to_buy = list() - willing_to_sell = list() - viable_random_events = list(WILD_ANIMAL_ATTACK, CULT_CELL_REVEALED, FESTIVAL, MOURNING, ANIMAL_RIGHTS_RAID, ALIEN_RAIDERS) - viable_mundane_events = list(ELECTION, TOURISM, BIG_GAME_HUNTERS, RESIGNATION) diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index d65799f8f96f..afd2b1b8ad36 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -75,11 +75,6 @@ GLOBAL_VAR_INIT(economy_init, FALSE) if(GLOB.economy_init) return 2 - for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) - var/datum/trade_destination/D = new loc_type - GLOB.weighted_randomevent_locations[D] = length(D.viable_random_events) - GLOB.weighted_mundaneevent_locations[D] = length(D.viable_mundane_events) - create_station_account() create_department_account("Vendor") diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm index 138e091ad5a4..09f20161e18c 100644 --- a/code/modules/gear_presets/_select_equipment.dm +++ b/code/modules/gear_presets/_select_equipment.dm @@ -15,7 +15,7 @@ var/list/access = list() var/assignment var/rank - var/paygrade + var/list/paygrades = list("???") var/role_comm_title var/minimum_age var/faction = FACTION_NEUTRAL @@ -95,8 +95,33 @@ if(minimum_age && new_human.age < minimum_age) new_human.age = minimum_age -/datum/equipment_preset/proc/load_rank(mob/living/carbon/human/new_human, client/mob_client) - return paygrade +/datum/equipment_preset/proc/load_rank(mob/living/carbon/human/new_human, client/mob_client)//Beagle-Code + if(paygrades.len == 1) + return paygrades[1] + var/playtime + if(!mob_client) + playtime = JOB_PLAYTIME_TIER_1 + else + playtime = get_job_playtime(mob_client, rank) + if((playtime >= JOB_PLAYTIME_TIER_1) && !mob_client.prefs.playtime_perks) + playtime = JOB_PLAYTIME_TIER_1 + var/final_paygrade + for(var/current_paygrade as anything in paygrades) + var/required_time = paygrades[current_paygrade] + if(required_time - playtime > 0) + break + final_paygrade = current_paygrade + if(rank == JOB_SQUAD_MARINE && final_paygrade == PAY_SHORT_ME3) + if(GLOB.data_core.leveled_riflemen > GLOB.data_core.leveled_riflemen_max) + return PAY_SHORT_ME2 + else + GLOB.data_core.leveled_riflemen_max++ + return final_paygrade + if(!final_paygrade) + . = "???" + CRASH("[key_name(new_human)] spawned with no valid paygrade.") + + return final_paygrade /datum/equipment_preset/proc/load_gear(mob/living/carbon/human/new_human, client/mob_client) return @@ -110,6 +135,8 @@ /datum/equipment_preset/proc/load_id(mob/living/carbon/human/new_human, client/mob_client) if(!idtype) return + if(!mob_client) + mob_client = new_human.client var/obj/item/card/id/ID = new idtype() ID.name = "[new_human.real_name]'s ID Card" if(assignment) @@ -123,7 +150,7 @@ ID.registered_ref = WEAKREF(new_human) ID.registered_gid = new_human.gid ID.blood_type = new_human.blood_type - ID.paygrade = load_rank(new_human) || ID.paygrade + ID.paygrade = load_rank(new_human, mob_client) || ID.paygrade ID.uniform_sets = uniform_sets new_human.equip_to_slot_or_del(ID, WEAR_ID) new_human.faction = faction @@ -188,7 +215,7 @@ new_human.equip_to_slot_or_del(equipping_gear, WEAR_IN_BACK) //Gives ranks to the ranked - var/current_rank = paygrade + var/current_rank = paygrades[1] var/obj/item/card/id/I = new_human.get_idcard() if(I) current_rank = I.paygrade diff --git a/code/modules/gear_presets/agents.dm b/code/modules/gear_presets/agents.dm index c7449883b87f..b7c098de6e23 100644 --- a/code/modules/gear_presets/agents.dm +++ b/code/modules/gear_presets/agents.dm @@ -17,7 +17,7 @@ ) assignment = JOB_STOWAWAY rank = JOB_STOWAWAY - paygrade = "???" + paygrades = list("???" = JOB_PLAYTIME_TIER_0) role_comm_title = "???" skills = /datum/skills/civilian/survivor @@ -69,7 +69,7 @@ ) assignment = JOB_UPP_REPRESENTATIVE rank = JOB_UPP_REPRESENTATIVE - paygrade = PAY_SHORT_CREP + paygrades = list(PAY_SHORT_CREP = JOB_PLAYTIME_TIER_0) role_comm_title = "UPP Rep." skills = /datum/skills/civilian/survivor @@ -105,7 +105,7 @@ ) assignment = JOB_TWE_REPRESENTATIVE rank = JOB_TWE_REPRESENTATIVE - paygrade = PAY_SHORT_CREP + paygrades = list(PAY_SHORT_CREP = JOB_PLAYTIME_TIER_0) role_comm_title = "TWE Rep." skills = /datum/skills/civilian/survivor diff --git a/code/modules/gear_presets/cbrn.dm b/code/modules/gear_presets/cbrn.dm index e59f276fe486..4f6d526bf923 100644 --- a/code/modules/gear_presets/cbrn.dm +++ b/code/modules/gear_presets/cbrn.dm @@ -2,7 +2,7 @@ name = "Generic CBRN" //Parent type for easier gear assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "CBRN" flags = EQUIPMENT_PRESET_EXTRA auto_squad_name = SQUAD_CBRN @@ -67,7 +67,7 @@ /datum/equipment_preset/uscm/cbrn/engineer name = "CBRN Combat Technician" - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI role_comm_title = "ComTech" @@ -111,7 +111,7 @@ /datum/equipment_preset/uscm/cbrn/medic name = "CBRN Hospital Corpsman" - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC role_comm_title = "HM" @@ -154,7 +154,7 @@ /datum/equipment_preset/uscm/cbrn/leader name = "CBRN Fireteam Leader" - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER role_comm_title = "TL" @@ -189,7 +189,7 @@ /datum/equipment_preset/uscm/cbrn/specialist name = "CBRN Specialist" - paygrade = PAY_SHORT_OPR + paygrades = list(PAY_SHORT_OPR = JOB_PLAYTIME_TIER_0) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST role_comm_title = "Spc" diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm index dbee0e435ba4..e9570bbbab9f 100644 --- a/code/modules/gear_presets/clf.dm +++ b/code/modules/gear_presets/clf.dm @@ -3,7 +3,7 @@ languages = list(LANGUAGE_JAPANESE, LANGUAGE_ENGLISH) assignment = JOB_CLF rank = FACTION_CLF - paygrade = PAY_SHORT_REB + paygrades = list(PAY_SHORT_REB = JOB_PLAYTIME_TIER_0) faction = FACTION_CLF origin_override = ORIGIN_CIVILIAN idtype = /obj/item/card/id/data @@ -283,7 +283,7 @@ assignment = JOB_CLF_MEDIC rank = JOB_CLF_MEDIC role_comm_title = "MED" - paygrade = PAY_SHORT_CDOC + paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0) skills = /datum/skills/clf/combat_medic /datum/equipment_preset/clf/medic/load_gear(mob/living/carbon/human/new_human) @@ -715,7 +715,7 @@ skills = /datum/skills/colonial_synthetic assignment = JOB_CLF_SYNTH rank = JOB_CLF_SYNTH - paygrade = PAY_SHORT_SYN + paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0) role_comm_title = "Syn" /datum/equipment_preset/clf/synth/New() @@ -959,7 +959,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CLF_COMMANDER rank = JOB_CLF_COMMANDER - paygrade = PAY_SHORT_REBC + paygrades = list(PAY_SHORT_REBC = JOB_PLAYTIME_TIER_0) role_comm_title = "CMDR" skills = /datum/skills/clf/commander diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 45c06776a4a8..672afa99873b 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -58,7 +58,7 @@ /datum/equipment_preset/cmb/standard name = "CMB - Colonial Marshal Deputy" - paygrade = PAY_SHORT_CMBD + paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0) role_comm_title = "CMB DEP" flags = EQUIPMENT_PRESET_EXTRA assignment = "CMB Deputy" @@ -141,7 +141,7 @@ /datum/equipment_preset/cmb/leader name = "CMB - The Colonial Marshal" - paygrade = PAY_SHORT_CMBM + paygrades = list(PAY_SHORT_CMBM = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/marshal role_comm_title = "CMB MAR" flags = EQUIPMENT_PRESET_EXTRA @@ -195,7 +195,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/cmb/synth name = "CMB - Colonial Marshal Investigative Synthetic" - paygrade = PAY_SHORT_CMBS + paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/deputy role_comm_title = "CMB Syn" flags = EQUIPMENT_PRESET_EXTRA @@ -297,7 +297,7 @@ /datum/equipment_preset/cmb/liaison name = "CMB - ICC Liaison" - paygrade = PAY_SHORT_ICCL + paygrades = list(PAY_SHORT_ICCL = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver/cl role_comm_title = "ICC Rep." flags = EQUIPMENT_PRESET_EXTRA @@ -356,7 +356,7 @@ /datum/equipment_preset/cmb/observer name = "CMB - Interstellar Human Rights Observer" - paygrade = PAY_SHORT_IHRO + paygrades = list(PAY_SHORT_IHRO = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/lanyard role_comm_title = "OBS" flags = EQUIPMENT_PRESET_EXTRA @@ -415,7 +415,7 @@ assignment = "Anchorpoint Station Marine Rifleman" rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) role_comm_title = "A-RFN" skills = /datum/skills/pfc/crafty faction = FACTION_MARSHAL @@ -462,7 +462,7 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE assignment = "Anchorpoint Station Marine Team Leader" rank = JOB_SQUAD_LEADER - paygrade = PAY_SHORT_ME6 + paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0) role_comm_title = "A-TL" minimum_age = 25 skills = /datum/skills/SL @@ -504,7 +504,7 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE assignment = "Anchorpoint Station Marine Technical Specialist" rank = JOB_SQUAD_TEAM_LEADER - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "A-TS" skills = /datum/skills/tl @@ -546,7 +546,7 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE assignment = "Anchorpoint Station Hospital Corpsman" rank = JOB_SQUAD_MEDIC - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "A-HM" skills = /datum/skills/combat_medic @@ -604,7 +604,7 @@ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE assignment = "Anchorpoint Station Marine Smartgunner" rank = JOB_SQUAD_SMARTGUN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "A-SG" skills = /datum/skills/smartgunner diff --git a/code/modules/gear_presets/contractor.dm b/code/modules/gear_presets/contractor.dm index f49b78609945..c18ccb4418c7 100644 --- a/code/modules/gear_presets/contractor.dm +++ b/code/modules/gear_presets/contractor.dm @@ -61,7 +61,7 @@ /datum/equipment_preset/contractor/duty/standard name = "Military Contractor (Standard)" - paygrade = PAY_SHORT_VAI_S + paygrades = list(PAY_SHORT_VAI_S = JOB_PLAYTIME_TIER_0) role_comm_title = "Merc" flags = EQUIPMENT_PRESET_EXTRA assignment = "VAIPO Mercenary" @@ -160,7 +160,7 @@ /datum/equipment_preset/contractor/duty/heavy name = "Military Contractor (Machinegunner)" - paygrade = PAY_SHORT_VAI_G + paygrades = list(PAY_SHORT_VAI_G = JOB_PLAYTIME_TIER_0) role_comm_title = "MG" flags = EQUIPMENT_PRESET_EXTRA @@ -205,7 +205,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/contractor/duty/engi name = "Military Contractor (Engineer)" - paygrade = PAY_SHORT_VAI_E + paygrades = list(PAY_SHORT_VAI_E = JOB_PLAYTIME_TIER_0) role_comm_title = "Eng" flags = EQUIPMENT_PRESET_EXTRA @@ -252,7 +252,7 @@ /datum/equipment_preset/contractor/duty/medic name = "Military Contractor (Medic)" - paygrade = PAY_SHORT_VAI_M + paygrades = list(PAY_SHORT_VAI_M = JOB_PLAYTIME_TIER_0) role_comm_title = "Med" flags = EQUIPMENT_PRESET_EXTRA @@ -298,7 +298,7 @@ /datum/equipment_preset/contractor/duty/leader name = "Military Contractor (Leader)" - paygrade = PAY_SHORT_VAI_L + paygrades = list(PAY_SHORT_VAI_L = JOB_PLAYTIME_TIER_0) role_comm_title = "TL" flags = EQUIPMENT_PRESET_EXTRA @@ -348,7 +348,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/contractor/duty/synth name = "Military Contractor (Synthetic)" - paygrade = PAY_SHORT_VAI_SN + paygrades = list(PAY_SHORT_VAI_SN = JOB_PLAYTIME_TIER_0) role_comm_title = "Syn" flags = EQUIPMENT_PRESET_EXTRA @@ -438,7 +438,7 @@ /datum/equipment_preset/contractor/covert/standard name = "Military Contractor (Covert Standard)" - paygrade = PAY_SHORT_VAI_S + paygrades = list(PAY_SHORT_VAI_S = JOB_PLAYTIME_TIER_0) role_comm_title = "Merc" flags = EQUIPMENT_PRESET_EXTRA @@ -539,7 +539,7 @@ /datum/equipment_preset/contractor/covert/heavy name = "Military Contractor (Covert Machinegunner)" - paygrade = PAY_SHORT_VAI_G + paygrades = list(PAY_SHORT_VAI_G = JOB_PLAYTIME_TIER_0) role_comm_title = "MG" flags = EQUIPMENT_PRESET_EXTRA @@ -586,7 +586,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/contractor/covert/engi name = "Military Contractor (Covert Engineer)" - paygrade = PAY_SHORT_VAI_E + paygrades = list(PAY_SHORT_VAI_E = JOB_PLAYTIME_TIER_0) role_comm_title = "Eng" flags = EQUIPMENT_PRESET_EXTRA @@ -634,7 +634,7 @@ /datum/equipment_preset/contractor/covert/medic name = "Military Contractor (Covert Medic)" - paygrade = PAY_SHORT_VAI_M + paygrades = list(PAY_SHORT_VAI_M = JOB_PLAYTIME_TIER_0) role_comm_title = "Med" flags = EQUIPMENT_PRESET_EXTRA @@ -681,7 +681,7 @@ /datum/equipment_preset/contractor/covert/leader name = "Military Contractor (Covert Leader)" - paygrade = PAY_SHORT_VAI_L + paygrades = list(PAY_SHORT_VAI_L = JOB_PLAYTIME_TIER_0) role_comm_title = "TL" flags = EQUIPMENT_PRESET_EXTRA @@ -732,7 +732,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/contractor/covert/synth name = "Military Contractor (Covert Synthetic)" - paygrade = PAY_SHORT_VAI_SN + paygrades = list(PAY_SHORT_VAI_SN = JOB_PLAYTIME_TIER_0) role_comm_title = "Syn" flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index 7bf9592a6209..9e688037860b 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -205,7 +205,7 @@ /datum/equipment_preset/corpse/security/cmb name = "Corpse - Colonial Marshal Deputy" rank = JOB_CMB - paygrade = PAY_SHORT_CMBD + paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/deputy xenovictim = TRUE access = list( @@ -240,7 +240,7 @@ assignment = JOB_EXECUTIVE rank = JOB_EXECUTIVE faction_group = FACTION_LIST_WY - paygrade = PAY_SHORT_WYC3 + paygrades = list(PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver/clearance_badge/cl xenovictim = TRUE access = list( @@ -316,7 +316,7 @@ assignment = "Colonial Division Manager" rank = JOB_DIVISION_MANAGER faction_group = FACTION_LIST_WY - paygrade = PAY_SHORT_WYC8 + paygrades = list(PAY_SHORT_WYC8 = JOB_PLAYTIME_TIER_0) access = list( ACCESS_WY_GENERAL, ACCESS_WY_COLONIAL, @@ -352,7 +352,7 @@ assignment = "Colonial Administrator" rank = JOB_DIRECTOR faction_group = FACTION_LIST_WY - paygrade = PAY_SHORT_WYC10 + paygrades = list(PAY_SHORT_WYC10 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver/cl access = list( ACCESS_CIVILIAN_PUBLIC, @@ -536,7 +536,7 @@ name = "Corpse - Corporate Supervisor" assignment = "Colony Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = PAY_SHORT_WYC6 + paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0) rank = FACTION_WY idtype = /obj/item/card/id/silver/clearance_badge/manager faction_group = FACTION_LIST_WY @@ -617,7 +617,7 @@ name = "Corpse - Union of Progressive Peoples Soldier" assignment = JOB_UPP idtype = /obj/item/card/id/dogtag - paygrade = PAY_SHORT_UE2 + paygrades = list(PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_0) rank = JOB_UPP faction = FACTION_UPP @@ -654,7 +654,7 @@ faction = FACTION_PMC faction_group = FACTION_LIST_WY rank = JOB_PMC_STANDARD - paygrade = PAY_SHORT_PMC_OP + paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/pmc access = list( ACCESS_CIVILIAN_PUBLIC, @@ -698,7 +698,7 @@ languages = list(LANGUAGE_ENGLISH) assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/corpse/pmc/goon/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) @@ -723,7 +723,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = PAY_SHORT_CSPO + paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/corpse/pmc/goon/lead/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) @@ -749,7 +749,7 @@ /datum/equipment_preset/corpse/freelancer name = "Corpse - Freelancer" - paygrade = PAY_SHORT_FL_S + paygrades = list(PAY_SHORT_FL_S = JOB_PLAYTIME_TIER_0) rank = FACTION_FREELANCER idtype = /obj/item/card/id/data faction = FACTION_FREELANCER @@ -965,7 +965,7 @@ name = "Corpse - USCM Reconnaissance Spotter" assignment = "Reconnaissance Spotter" xenovictim = FALSE - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" faction_group = list(FACTION_MARINE, FACTION_SURVIVOR) diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm index c33d071a0b57..42f234d6399d 100644 --- a/code/modules/gear_presets/dust_raider.dm +++ b/code/modules/gear_presets/dust_raider.dm @@ -24,7 +24,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -46,7 +46,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) role_comm_title = "SL" skills = /datum/skills/SL @@ -75,7 +75,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -100,7 +100,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "Eng" skills = /datum/skills/combat_engineer @@ -129,7 +129,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -164,7 +164,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "Spc" skills = /datum/skills/specialist diff --git a/code/modules/gear_presets/dutch.dm b/code/modules/gear_presets/dutch.dm index 66a7254494b2..8a51fb9d59e2 100644 --- a/code/modules/gear_presets/dutch.dm +++ b/code/modules/gear_presets/dutch.dm @@ -2,7 +2,7 @@ /datum/equipment_preset/dutch name = JOB_DUTCH_RIFLEMAN - paygrade = PAY_SHORT_DTC + paygrades = list(PAY_SHORT_DTC = JOB_PLAYTIME_TIER_0) assignment = JOB_DUTCH_RIFLEMAN flags = EQUIPMENT_PRESET_EXTRA faction = FACTION_DUTCH @@ -83,7 +83,7 @@ /datum/equipment_preset/dutch/minigun name = JOB_DUTCH_MINIGUNNER - paygrade = PAY_SHORT_DTCMG + paygrades = list(PAY_SHORT_DTCMG = JOB_PLAYTIME_TIER_0) assignment = JOB_DUTCH_MINIGUNNER flags = EQUIPMENT_PRESET_EXTRA @@ -116,7 +116,7 @@ /datum/equipment_preset/dutch/flamer name = JOB_DUTCH_FLAMETHROWER - paygrade = PAY_SHORT_DTCF + paygrades = list(PAY_SHORT_DTCF = JOB_PLAYTIME_TIER_0) assignment = JOB_DUTCH_FLAMETHROWER flags = EQUIPMENT_PRESET_EXTRA @@ -150,7 +150,7 @@ /datum/equipment_preset/dutch/medic name = JOB_DUTCH_MEDIC - paygrade = PAY_SHORT_DTCM + paygrades = list(PAY_SHORT_DTCM = JOB_PLAYTIME_TIER_0) assignment = JOB_DUTCH_MEDIC flags = EQUIPMENT_PRESET_EXTRA @@ -193,7 +193,7 @@ /datum/equipment_preset/dutch/arnie name = "Dutch's Dozen - Arnold" - paygrade = PAY_SHORT_DTCA + paygrades = list(PAY_SHORT_DTCA = JOB_PLAYTIME_TIER_0) assignment = JOB_DUTCH_ARNOLD flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm index f24f7f9a2029..f9b6970015c8 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -82,7 +82,7 @@ idtype = /obj/item/card/id/gold assignment = "Shrapnelsworn" rank = "Brother of the Order" - paygrade = "Ser" + paygrades = list("Ser" = JOB_PLAYTIME_TIER_0) role_comm_title = "OHEFA" skills = /datum/skills/specialist @@ -240,7 +240,7 @@ /datum/equipment_preset/fun/santa name = "Fun - Santa" - paygrade = PAY_SHORT_CDNM + paygrades = list(PAY_SHORT_CDNM = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything faction = FACTION_MARINE @@ -289,7 +289,7 @@ /datum/equipment_preset/upp/ivan name = "Fun - Ivan" flags = EQUIPMENT_PRESET_EXTRA - paygrade = PAY_SHORT_UE6 + paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/everything assignment = "UPP Armsmaster" rank = "UPP Armsmaster" @@ -339,7 +339,7 @@ /datum/equipment_preset/fun/van_bandolier name = "Fun - Big Game Hunter" - paygrade = PAY_SHORT_CCMO + paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0) uses_special_name = TRUE flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything @@ -441,7 +441,7 @@ assignment = "Monkey Marine" rank = "Monkey Marine" - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/fun/monkey/marine/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) @@ -458,7 +458,7 @@ assignment = "Monkey Soldier" rank = "Monkey Soldier" - paygrade = PAY_SHORT_UE1 + paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/fun/monkey/soldier/get_random_name(mob/living/carbon/human/new_human) return new_human.gender == MALE ? pick(GLOB.first_names_male_upp) : pick(GLOB.first_names_female_upp) diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm index 9ea05749fe0d..063263748e02 100644 --- a/code/modules/gear_presets/other.dm +++ b/code/modules/gear_presets/other.dm @@ -60,7 +60,7 @@ /datum/equipment_preset/other/freelancer/standard name = "Freelancer (Standard)" - paygrade = PAY_SHORT_FL_S + paygrades = list(PAY_SHORT_FL_S = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/freelancer @@ -132,7 +132,7 @@ /datum/equipment_preset/other/freelancer/medic name = "Freelancer (Medic)" - paygrade = PAY_SHORT_FL_M + paygrades = list(PAY_SHORT_FL_M = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA assignment = "Freelancer Medic" skills = /datum/skills/freelancer/combat_medic @@ -203,7 +203,7 @@ /datum/equipment_preset/other/freelancer/leader name = "Freelancer (Leader)" - paygrade = PAY_SHORT_FL_WL + paygrades = list(PAY_SHORT_FL_WL = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA assignment = "Freelancer Warlord" languages = list(LANGUAGE_ENGLISH, LANGUAGE_RUSSIAN, LANGUAGE_CHINESE, LANGUAGE_JAPANESE) @@ -269,7 +269,7 @@ /datum/equipment_preset/other/elite_merc/standard name = "Elite Mercenary (Standard Miner)" - paygrade = PAY_SHORT_EFL_S + paygrades = list(PAY_SHORT_EFL_S = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/centcom @@ -306,7 +306,7 @@ /datum/equipment_preset/other/elite_merc/heavy name = "Elite Mercenary (Heavy)" - paygrade = PAY_SHORT_EFL_H + paygrades = list(PAY_SHORT_EFL_H = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/centcom @@ -346,7 +346,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/other/elite_merc/engineer name = "Elite Mercenary (Engineer)" - paygrade = PAY_SHORT_EFL_E + paygrades = list(PAY_SHORT_EFL_E = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/data @@ -400,7 +400,7 @@ /datum/equipment_preset/other/elite_merc/medic name = "Elite Mercenary (Medic)" - paygrade = PAY_SHORT_EFL_M + paygrades = list(PAY_SHORT_EFL_M = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/centcom @@ -446,7 +446,7 @@ /datum/equipment_preset/other/elite_merc/leader name = "Elite Mercenary (Leader)" - paygrade = PAY_SHORT_EFL_TL + paygrades = list(PAY_SHORT_EFL_TL = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_EXTRA idtype = /obj/item/card/id/centcom @@ -504,29 +504,6 @@ new_human.equip_if_possible(new /obj/item/clothing/glasses/sunglasses, WEAR_EYES) new_human.equip_if_possible(new /obj/item/clipboard, WEAR_WAIST) -//*****************************************************************************************************/ - -/datum/equipment_preset/other/compression_suit - name = "Mk50 Compression Suit" - flags = EQUIPMENT_PRESET_EXTRA - faction = FACTION_PMC - skills = /datum/skills/pfc - idtype = /obj/item/card/id/data - -/datum/equipment_preset/other/compression_suit/load_gear(mob/living/carbon/human/new_human) - //TODO: add backpacks and satchels - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots, WEAR_FEET) - - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist, WEAR_BODY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/space/compression, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/compression, WEAR_HEAD) - var /obj/item/tank/jetpack/J = new /obj/item/tank/jetpack/oxygen(new_human) - new_human.equip_to_slot_or_del(J, WEAR_BACK) - J.toggle() - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/breath, WEAR_FACE) - J.Topic(null, list("stat" = 1)) - spawn_merc_weapon(new_human) - //*****************************************************************************************************/ @@ -850,12 +827,13 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = "DUMMY" rank = "DUMMY" + paygrades = list(PAY_SHORT_CCMO) idtype = /obj/item/card/id/dogtag uses_special_name = TRUE /datum/equipment_preset/other/professor_dummy/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(MALE, FEMALE) - new_human.real_name = "Professor DUMMY the Medical Mannequin" + new_human.real_name = "Alex the Medical Mannequin" new_human.name = new_human.real_name new_human.age = rand(1,5) var/datum/preferences/A = new @@ -883,7 +861,7 @@ idtype = /obj/item/card/id/dogtag assignment = JOB_TANK_CREW rank = JOB_TANK_CREW - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "CRMN" minimum_age = 30 skills = /datum/skills/tank_crew @@ -923,7 +901,7 @@ idtype = /obj/item/card/id/dogtag assignment = "Crewman Trainee" rank = "Crewman Trainee" - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "CRTR" minimum_age = 25 skills = /datum/skills/tank_crew @@ -977,7 +955,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0) role_comm_title = "RFN" skills = /datum/skills/pfc/crafty minimap_icon = "private" diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm index 8dde038f3891..3aa02f026f29 100644 --- a/code/modules/gear_presets/pmc.dm +++ b/code/modules/gear_presets/pmc.dm @@ -61,7 +61,7 @@ assignment = JOB_PMC_STANDARD rank = JOB_PMC_STANDARD - paygrade = PAY_SHORT_PMC_OP + paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0) skills = /datum/skills/pmc /datum/equipment_preset/pmc/pmc_standard/load_gear(mob/living/carbon/human/new_human) @@ -132,7 +132,7 @@ list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -203,7 +203,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_DETAINER rank = JOB_PMC_DETAINER - paygrade = PAY_SHORT_PMC_EN + paygrades = list(PAY_SHORT_PMC_EN = JOB_PLAYTIME_TIER_0) skills = /datum/skills/pmc /datum/equipment_preset/pmc/pmc_detainer/load_gear(mob/living/carbon/human/new_human) @@ -261,7 +261,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -332,7 +332,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_MEDIC rank = JOB_PMC_MEDIC - paygrade = PAY_SHORT_PMC_MS + paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0) skills = /datum/skills/pmc/medic headset_type = /obj/item/device/radio/headset/distress/pmc/medic @@ -395,7 +395,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -507,7 +507,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_INVESTIGATOR rank = JOB_PMC_INVESTIGATOR - paygrade = PAY_SHORT_PMC_MS //Fixed from PMC2 to PMC-MS to display properly. + paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0) skills = /datum/skills/pmc/medic/chem headset_type = /obj/item/device/radio/headset/distress/pmc/medic @@ -573,7 +573,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -686,7 +686,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_LEADER rank = JOB_PMC_LEADER - paygrade = PAY_SHORT_PMC_TL + paygrades = list(PAY_SHORT_PMC_TL = JOB_PLAYTIME_TIER_0) role_comm_title = "SL" skills = /datum/skills/pmc/SL headset_type = /obj/item/device/radio/headset/distress/pmc/command @@ -756,7 +756,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -842,7 +842,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_LEAD_INVEST rank = JOB_PMC_LEAD_INVEST - paygrade = PAY_SHORT_PMC_TL + paygrades = list(PAY_SHORT_PMC_TL = JOB_PLAYTIME_TIER_0) role_comm_title = "SL" skills = /datum/skills/pmc/SL/chem headset_type = /obj/item/device/radio/headset/distress/pmc/command @@ -899,7 +899,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -985,7 +985,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_GUNNER rank = JOB_PMC_GUNNER - paygrade = PAY_SHORT_PMC_SS + paygrades = list(PAY_SHORT_PMC_SS = JOB_PLAYTIME_TIER_0) role_comm_title = "SG" skills = /datum/skills/pmc/smartgunner @@ -1090,7 +1090,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_SNIPER rank = JOB_PMC_SNIPER - paygrade = PAY_SHORT_PMC_WS + paygrades = list(PAY_SHORT_PMC_WS = JOB_PLAYTIME_TIER_0) role_comm_title = "Spc" skills = /datum/skills/pmc/specialist headset_type = /obj/item/device/radio/headset/distress/pmc/cct @@ -1145,7 +1145,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -1212,7 +1212,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_CREWMAN rank = JOB_PMC_CREWMAN - paygrade = PAY_SHORT_PMC_VS + paygrades = list(PAY_SHORT_PMC_VS = JOB_PLAYTIME_TIER_0) skills = /datum/skills/pmc/tank_crew headset_type = /obj/item/device/radio/headset/distress/pmc/cct @@ -1253,7 +1253,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -1340,7 +1340,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_XENO_HANDLER rank = JOB_PMC_XENO_HANDLER - paygrade = PAY_SHORT_PMC_XS + paygrades = list(PAY_SHORT_PMC_XS = JOB_PLAYTIME_TIER_0) role_comm_title = "XH" skills = /datum/skills/pmc/xeno_handler languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_XENOMORPH) @@ -1401,7 +1401,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -1486,7 +1486,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_DOCTOR rank = JOB_PMC_DOCTOR - paygrade = PAY_SHORT_PMC_DOC + paygrades = list(PAY_SHORT_PMC_DOC = JOB_PLAYTIME_TIER_0) role_comm_title = "SGN" skills = /datum/skills/pmc/doctor headset_type = /obj/item/device/radio/headset/distress/pmc/medic @@ -1547,7 +1547,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -1660,7 +1660,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_ENGINEER rank = JOB_PMC_ENGINEER - paygrade = PAY_SHORT_PMC_TEC + paygrades = list(PAY_SHORT_PMC_TEC = JOB_PLAYTIME_TIER_0) role_comm_title = "TEC" skills = /datum/skills/pmc/engineer headset_type = /obj/item/device/radio/headset/distress/pmc/cct @@ -1716,7 +1716,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), - list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), + list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), list("M276 Mortar Operator Belt", 0, /obj/item/storage/belt/gun/mortarbelt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR), @@ -1809,7 +1809,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), assignment = JOB_PMC_DIRECTOR rank = JOB_PMC_DIRECTOR - paygrade = PAY_SHORT_PMC_DIR + paygrades = list(PAY_SHORT_PMC_DIR = JOB_PLAYTIME_TIER_0) role_comm_title = "DIR" skills = /datum/skills/pmc/director headset_type = /obj/item/device/radio/headset/distress/pmc/command/director @@ -1839,18 +1839,18 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null), //*****************************************************************************************************/ /datum/equipment_preset/pmc/synth - name = "Weyland-Yutani PMC (Support Synthetic)" - flags = EQUIPMENT_PRESET_EXTRA - - languages = ALL_SYNTH_LANGUAGES - - skills = /datum/skills/synthetic - idtype = /obj/item/card/id/pmc - assignment = JOB_PMC_SYNTH - rank = JOB_PMC_SYNTH - paygrade = PAY_SHORT_SYN - role_comm_title = "WY Syn" - headset_type = /obj/item/device/radio/headset/distress/pmc/command + name = "Weyland-Yutani PMC (Support Synthetic)" + flags = EQUIPMENT_PRESET_EXTRA + + languages = ALL_SYNTH_LANGUAGES + + skills = /datum/skills/synthetic + idtype = /obj/item/card/id/pmc + assignment = JOB_PMC_SYNTH + rank = JOB_PMC_SYNTH + paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0) + role_comm_title = "WY Syn" + headset_type = /obj/item/device/radio/headset/distress/pmc/command /datum/equipment_preset/pmc/synth/load_name(mob/living/carbon/human/new_human, randomise) diff --git a/code/modules/gear_presets/royal_marines.dm b/code/modules/gear_presets/royal_marines.dm index aa33eac97733..2e218e5292a6 100644 --- a/code/modules/gear_presets/royal_marines.dm +++ b/code/modules/gear_presets/royal_marines.dm @@ -59,7 +59,7 @@ /datum/equipment_preset/twe/royal_marine/standard name = "TWE Royal Marine Commando (Rifleman)" - paygrade = PAY_SHORT_RMC1 + paygrades = list(PAY_SHORT_RMC1 = JOB_PLAYTIME_TIER_0) role_comm_title = "RMC" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Rifleman" @@ -110,7 +110,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/spec - paygrade = PAY_SHORT_RMC2 + paygrades = list(PAY_SHORT_RMC2 = JOB_PLAYTIME_TIER_0) role_comm_title = "RMC SPC" flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/rmc/specialist @@ -243,7 +243,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/twe/royal_marine/team_leader name = "TWE Royal Marine Commando (Teamleader)" - paygrade = PAY_SHORT_RMC4 + paygrades = list(PAY_SHORT_RMC4 = JOB_PLAYTIME_TIER_0) role_comm_title = "RMC TL" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Team Leader" @@ -292,7 +292,7 @@ /datum/equipment_preset/twe/royal_marine/lieuteant //they better say it Lef-tenant or they should be banned for LRP. More importantly this guy doesn't spawn in the ERT name = "TWE Royal Marine Commando (Officer)" - paygrade = PAY_SHORT_RNO1 + paygrades = list(PAY_SHORT_RNO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "RMC LT" flags = EQUIPMENT_PRESET_EXTRA assignment = "Royal Marines Team Commander" diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm index c09e6eee9385..27d39348e7d0 100644 --- a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm +++ b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm @@ -14,7 +14,7 @@ /datum/equipment_preset/survivor/cmb/standard name = "Survivor - Colonial Marshal Deputy(Riot Response)" - paygrade = PAY_SHORT_CMBD + paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0) role_comm_title = "CMB DEP" flags = EQUIPMENT_PRESET_EXTRA assignment = "CMB Deputy" @@ -89,7 +89,7 @@ /datum/equipment_preset/synth/survivor/cmb/synth name = "Survivor - Synthetic - CMB Investigative Synthetic(Riot Response)" - paygrade = PAY_SHORT_CMBS + paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/deputy role_comm_title = "CMB Syn" flags = EQUIPMENT_PRESET_EXTRA @@ -150,7 +150,7 @@ /datum/equipment_preset/survivor/cmb/ua name = "Survivor - United Americas Riot Officer(Riot Response)" - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) role_comm_title = "UA RCP" flags = EQUIPMENT_PRESET_EXTRA assignment = "United Americas Police Officer" @@ -229,7 +229,7 @@ // ua synth /datum/equipment_preset/synth/survivor/cmb/ua_synth name = "Survivor - Synthetic - UA Police Synthetic(Riot Response)" - paygrade = PAY_SHORT_CMBS + paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0) role_comm_title = "UA Syn" flags = EQUIPMENT_PRESET_EXTRA assignment = "UA Police Synthetic" diff --git a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm index 4e9ab770fb2f..c27fa213592f 100644 --- a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm +++ b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm @@ -1,7 +1,7 @@ ///*****************************LV-522 Force Recon Survivors*******************************************************/ //Nanu told me to put them here so they dont clutter up survivors.dm /datum/equipment_preset/survivor/forecon - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" rank = JOB_SURVIVOR @@ -214,7 +214,7 @@ name = "Survivor - USCM Reconnaissance Squad Leader" assignment = JOB_FORECON_SL skills = /datum/skills/military/survivor/forecon_squad_leader - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) @@ -244,7 +244,7 @@ name = "Survivor - USCM Reconnaissance Major" assignment = JOB_FORECON_CO skills = /datum/skills/commander - paygrade = PAY_SHORT_MO4 + paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/gold role_comm_title = "FORECON CO" diff --git a/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm b/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm index 2c8ec04594ad..395d51f6e77d 100644 --- a/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm +++ b/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm @@ -4,7 +4,7 @@ /datum/equipment_preset/survivor/wy/executive name = "Survivor - LV-624 Paranoid Corporate Liaison" flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = PAY_SHORT_WYC5 + paygrades = list(PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/manager assignment = "LV-624 Corporate Liaison" idtype = /obj/item/card/id/silver/clearance_badge/cl diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm index 329bac97a89f..f0cf368d4936 100644 --- a/code/modules/gear_presets/survivors/misc.dm +++ b/code/modules/gear_presets/survivors/misc.dm @@ -171,7 +171,7 @@ Everything below isn't used or out of place. name = "Survivor - Corporate Security Goon" flags = EQUIPMENT_PRESET_START_OF_ROUND assignment = JOB_WY_GOON - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver/cl skills = /datum/skills/civilian/survivor/goon languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) @@ -250,7 +250,7 @@ Everything below isn't used or out of place. name = "Survivor - USASF Commander" assignment = "USASF Commander" skills = /datum/skills/commander - paygrade = PAY_SHORT_NO5 + paygrades = list(PAY_SHORT_NO5 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/gold role_comm_title = "USASF CDR" flags = EQUIPMENT_PRESET_START_OF_ROUND diff --git a/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm b/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm index 9f1e2c705efb..16092ad51130 100644 --- a/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm +++ b/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm @@ -4,7 +4,7 @@ /datum/equipment_preset/survivor/wy/asstmanager name = "Survivor - Corporate Assistant Manager" flags = EQUIPMENT_PRESET_EXTRA - paygrade = PAY_SHORT_WYC7 + paygrades = list(PAY_SHORT_WYC7 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/manager assignment = "Assistant Operations Manager" idtype = /obj/item/card/id/silver/clearance_badge/manager diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm index 124bf2772be5..de117b9a5a56 100644 --- a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm +++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm @@ -7,7 +7,7 @@ assignment = "Weyland-Yutani PMC" faction = FACTION_SURVIVOR faction_group = list(FACTION_WY, FACTION_SURVIVOR) - paygrade = PAY_SHORT_PMC_OP + paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/pmc skills = /datum/skills/civilian/survivor/pmc languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) @@ -45,7 +45,7 @@ /datum/equipment_preset/survivor/pmc/medic name = "Survivor - PMC Medic" assignment = JOB_PMC_MEDIC - paygrade = PAY_SHORT_PMC_MS + paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/pmc/medic /datum/equipment_preset/survivor/pmc/medic/load_gear(mob/living/carbon/human/new_human) @@ -64,7 +64,7 @@ /datum/equipment_preset/survivor/pmc/engineer name = "Survivor - PMC Engineer" assignment = JOB_PMC_ENGINEER - paygrade = PAY_SHORT_PMC_TEC + paygrades = list(PAY_SHORT_PMC_TEC = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/pmc/engineer /datum/equipment_preset/survivor/pmc/engineer/load_gear(mob/living/carbon/human/new_human) @@ -80,7 +80,7 @@ /datum/equipment_preset/survivor/wy/manager name = "Survivor - Corporate Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = PAY_SHORT_WYC6 + paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/manager assignment = "Colony Supervisor" role_comm_title = "Supervisor" diff --git a/code/modules/gear_presets/survivors/solaris/preset_solaris.dm b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm index 35e52731fc9d..65cf3e7f0132 100644 --- a/code/modules/gear_presets/survivors/solaris/preset_solaris.dm +++ b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm @@ -81,7 +81,7 @@ /datum/equipment_preset/survivor/uscm/solaris name = "Survivor - Solaris United States Colonial Marine Corps Recruiter" assignment = "USCM Recruiter" - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/survivor/uscm/solaris/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY) diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm index 71a2aaa94b7f..65e5a8f4c123 100644 --- a/code/modules/gear_presets/survivors/survivors.dm +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -5,7 +5,7 @@ skills = /datum/skills/civilian/survivor languages = list(LANGUAGE_ENGLISH) - paygrade = PAY_SHORT_CIV + paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/lanyard faction = FACTION_SURVIVOR faction_group = list(FACTION_SURVIVOR) @@ -187,7 +187,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist, /datum/equipment_preset/survivor/colonial_marshal name = "Survivor - Colonial Marshal Deputy" assignment = "CMB Deputy" - paygrade = PAY_SHORT_CMBD + paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/survivor/marshal flags = EQUIPMENT_PRESET_START_OF_ROUND idtype = /obj/item/card/id/deputy @@ -288,7 +288,7 @@ Everything bellow is a parent used as a base for one or multiple maps. assignment = "Corporate Liaison" skills = /datum/skills/civilian/survivor flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = PAY_SHORT_WYC2 + paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_2, PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_3, PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_4) faction_group = FACTION_LIST_SURVIVOR_WY idtype = /obj/item/card/id/silver/clearance_badge/cl access = list( @@ -314,20 +314,6 @@ Everything bellow is a parent used as a base for one or multiple maps. add_ice_colony_survivor_equipment(new_human) ..() -/datum/equipment_preset/survivor/corporate/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON) - if(new_human.client.prefs.playtime_perks) - if(playtime > JOB_PLAYTIME_TIER_4) - return PAY_SHORT_WYC5 - else if(playtime > JOB_PLAYTIME_TIER_3) - return PAY_SHORT_WYC4 - else if(playtime > JOB_PLAYTIME_TIER_2) - return PAY_SHORT_WYC3 - else - return paygrade - return paygrade - // ---- Trucker Survivor // Used in Kutjevo Refinery, LV-624, New Varadero, Solaris Ridge and Trijent Dam. @@ -408,7 +394,7 @@ Everything bellow is a parent used as a base for one or multiple maps. assignment = "Interstellar Commerce Commission Corporate Liaison" skills = /datum/skills/civilian/survivor flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = PAY_SHORT_ICCL + paygrades = list(PAY_SHORT_ICCL = JOB_PLAYTIME_TIER_0) faction_group = FACTION_LIST_SURVIVOR_WY idtype = /obj/item/card/id/silver/cl role_comm_title = "ICC Rep." @@ -442,7 +428,7 @@ Everything bellow is a parent used as a base for one or multiple maps. assignment = "USCM Survivor" skills = /datum/skills/civilian/survivor/marshal idtype = /obj/item/card/id/dogtag - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) flags = EQUIPMENT_PRESET_START_OF_ROUND access = list(ACCESS_CIVILIAN_PUBLIC) diff --git a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm index cfb3dee1dc47..25136c172b6d 100644 --- a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm +++ b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm @@ -2,7 +2,7 @@ //crashlanding-upp-bar.dmm map. /datum/equipment_preset/survivor/upp name = "Survivor - UPP" - paygrade = PAY_SHORT_UE1 + paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0) origin_override = ORIGIN_UPP rank = JOB_SURVIVOR skills = /datum/skills/military/survivor/upp_private @@ -40,7 +40,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/soldier name = "Survivor - UPP Soldier" - paygrade = PAY_SHORT_UE2 + paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_1) assignment = JOB_UPP rank = JOB_UPP skills = /datum/skills/military/survivor/upp_private @@ -62,17 +62,11 @@ ..() -/datum/equipment_preset/survivor/upp/soldier/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_UE1 - return paygrade - // /obj/effect/landmark/survivor_spawner/upp_sapper //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/sapper name = "Survivor - UPP Sapper" - paygrade = PAY_SHORT_UE3 + paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0) assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI skills = /datum/skills/military/survivor/upp_sapper @@ -100,7 +94,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/medic name = "Survivor - UPP Medic" - paygrade = PAY_SHORT_UE3 + paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0) assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC skills = /datum/skills/military/survivor/upp_medic @@ -132,7 +126,7 @@ name = "Survivor - UPP Specialist" assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST - paygrade = PAY_SHORT_UE4 + paygrades = list(PAY_SHORT_UE4 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/military/survivor/upp_spec /datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) @@ -151,7 +145,7 @@ // /obj/effect/landmark/survivor_spawner/squad_leader /datum/equipment_preset/survivor/upp/squad_leader name = "Survivor - UPP Squad Leader" - paygrade = PAY_SHORT_UE5 + paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0) assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) @@ -179,7 +173,7 @@ faction = FACTION_UPP faction_group = list(FACTION_UPP, FACTION_SURVIVOR) skills = /datum/skills/colonial_synthetic - paygrade = PAY_SHORT_SYN + paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/dogtag role_comm_title = "173/RECON Syn" diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 2fde67e931b9..d7c531332c9a 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -3,7 +3,7 @@ uses_special_name = TRUE languages = ALL_SYNTH_LANGUAGES skills = /datum/skills/synthetic - paygrade = PAY_SHORT_SYN + paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0) minimap_icon = "synth" @@ -41,7 +41,6 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/load_gear(mob/living/carbon/human/new_human) @@ -65,7 +64,6 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/councillor/load_gear(mob/living/carbon/human/new_human) @@ -760,7 +758,7 @@ rank = JOB_COLONIST skills = /datum/skills/infiltrator_synthetic idtype = /obj/item/card/id/lanyard - paygrade = PAY_SHORT_CIV + paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/synth/infiltrator/New() . = ..() diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 417a893ffdee..ad7b1523d279 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -64,7 +64,7 @@ assignment = JOB_UPP rank = JOB_UPP role_comm_title = "Sol" - paygrade = PAY_SHORT_UE2 + paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_1) /datum/equipment_preset/upp/soldier/load_gear(mob/living/carbon/human/new_human) //face @@ -87,12 +87,6 @@ load_upp_soldier(new_human, UPP) -/datum/equipment_preset/upp/soldier/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_UE1 - return paygrade - /datum/equipment_preset/upp/soldier/proc/load_upp_soldier(mob/living/carbon/human/new_human, obj/item/clothing/under/marine/veteran/UPP/UPP) var/percentage = rand(1, 100) switch(percentage) @@ -237,7 +231,7 @@ assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC role_comm_title = "Med" - paygrade = PAY_SHORT_UE3 + paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/medic/load_gear(mob/living/carbon/human/new_human) //back @@ -408,7 +402,7 @@ assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI role_comm_title = "Sap" - paygrade = PAY_SHORT_UE3 + paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/sapper/load_gear(mob/living/carbon/human/new_human) //Sappers should have lots of gear and whatnot that helps them attack or siege marines @@ -544,7 +538,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = PAY_SHORT_UE5 + paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/specialist/load_gear(mob/living/carbon/human/new_human) //back @@ -673,7 +667,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = PAY_SHORT_UE5 + paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/machinegunner/load_gear(mob/living/carbon/human/new_human) //back @@ -800,7 +794,7 @@ assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER role_comm_title = "SL" - paygrade = PAY_SHORT_UE6 + paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human) var/UPPleadsidearm = rand(1,4) @@ -970,7 +964,7 @@ assignment = JOB_UPP_POLICE rank = JOB_UPP_POLICE role_comm_title = "MP" - paygrade = PAY_SHORT_UE6 + paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human) //back @@ -1124,7 +1118,7 @@ assignment = JOB_UPP_LT_OFFICER rank = JOB_UPP_LT_OFFICER role_comm_title = "Lt." - paygrade = PAY_SHORT_UO1 + paygrades = list(PAY_SHORT_UO1 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human) //back @@ -1283,7 +1277,7 @@ assignment = JOB_UPP_SRLT_OFFICER rank = JOB_UPP_SRLT_OFFICER role_comm_title = "Sr-Lt." - paygrade = PAY_SHORT_UO2 + paygrades = list(PAY_SHORT_UO2 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human) //back @@ -1442,7 +1436,7 @@ assignment = JOB_UPP_KPT_OFFICER rank = JOB_UPP_KPT_OFFICER role_comm_title = "May." - paygrade = PAY_SHORT_UO3 + paygrades = list(PAY_SHORT_UO3 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/kapitan /datum/equipment_preset/upp/officer/kapitan/load_gear(mob/living/carbon/human/new_human) @@ -1602,7 +1596,7 @@ assignment = JOB_UPP_MAY_OFFICER rank = JOB_UPP_MAY_OFFICER role_comm_title = "May." - paygrade = PAY_SHORT_UO4 + paygrades = list(PAY_SHORT_UO4 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human) @@ -1762,7 +1756,7 @@ assignment = JOB_UPP_LTKOL_OFFICER rank = JOB_UPP_LTKOL_OFFICER role_comm_title = "Lt. Kol." - paygrade = PAY_SHORT_UO5 + paygrades = list(PAY_SHORT_UO5 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/lt_kolonel/load_gear(mob/living/carbon/human/new_human) @@ -1922,7 +1916,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Kol." - paygrade = PAY_SHORT_UO6 + paygrades = list(PAY_SHORT_UO6 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human) @@ -2082,7 +2076,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "May. Gen." - paygrade = PAY_SHORT_UO7 + paygrades = list(PAY_SHORT_UO7 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/may_gen/load_gear(mob/living/carbon/human/new_human) @@ -2242,7 +2236,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Lt. Gen." - paygrade = PAY_SHORT_UO8 + paygrades = list(PAY_SHORT_UO8 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/ley_gen/load_gear(mob/living/carbon/human/new_human) @@ -2402,7 +2396,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Gen." - paygrade = PAY_SHORT_UO9 + paygrades = list(PAY_SHORT_UO9 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/gen/load_gear(mob/living/carbon/human/new_human) @@ -2602,7 +2596,7 @@ skills = /datum/skills/synthetic assignment = JOB_UPP_SUPPORT_SYNTH rank = JOB_UPP_SUPPORT_SYNTH - paygrade = PAY_SHORT_SYN + paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/dogtag /datum/equipment_preset/upp/synth/load_name(mob/living/carbon/human/new_human, randomise) @@ -2873,7 +2867,7 @@ assignment = JOB_UPP_CONSCRIPT rank = JOB_UPP_CONSCRIPT role_comm_title = "Cons" - paygrade = PAY_SHORT_UE1 + paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human) //back @@ -2982,7 +2976,7 @@ assignment = JOB_UPP_COMMANDO rank = JOB_UPP_COMMANDO role_comm_title = "JKdo" - paygrade = PAY_SHORT_UC1 + paygrades = list(PAY_SHORT_UC1 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/data languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE) @@ -3109,7 +3103,7 @@ assignment = JOB_UPP_COMMANDO_MEDIC rank = JOB_UPP_COMMANDO_MEDIC role_comm_title = "2ndKdo" - paygrade = PAY_SHORT_UC2 + paygrades = list(PAY_SHORT_UC2 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/commando/medic/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/medic, WEAR_L_EAR) @@ -3276,7 +3270,7 @@ assignment = JOB_UPP_COMMANDO_LEADER rank = JOB_UPP_COMMANDO_LEADER role_comm_title = "1stKdo" - paygrade = PAY_SHORT_UC3 + paygrades = list(PAY_SHORT_UC3 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver /datum/equipment_preset/upp/commando/leader/load_gear(mob/living/carbon/human/new_human) @@ -3530,7 +3524,7 @@ assignment = JOB_UPP_CREWMAN rank = JOB_UPP_CREWMAN - paygrade = PAY_SHORT_UE5 + paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0) role_comm_title = "TANK" minimum_age = 30 skills = /datum/skills/tank_crew @@ -3650,7 +3644,7 @@ assignment = JOB_UPP_LT_DOKTOR rank = JOB_UPP_LT_DOKTOR role_comm_title = "Lt. Med." - paygrade = PAY_SHORT_UO1 + paygrades = list(PAY_SHORT_UO1 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human) //back diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index 4b018eea1d50..0450e74353ef 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -67,7 +67,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "RFN" skills = /datum/skills/pfc @@ -82,12 +82,6 @@ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) -/datum/equipment_preset/uscm/pfc/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME1 - return paygrade - /datum/equipment_preset/uscm/pfc/cryo name = "USCM Cryo Squad Rifleman" auto_squad_name = SQUAD_MARINE_CRYO @@ -105,7 +99,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -163,7 +157,7 @@ ) assignment = JOB_TANK_CREW rank = JOB_TANK_CREW - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "CRMN" minimum_age = 30 skills = /datum/skills/tank_crew @@ -224,7 +218,7 @@ ) assignment = JOB_INTEL rank = JOB_INTEL - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "IO" skills = /datum/skills/intel @@ -281,7 +275,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "Spc" skills = /datum/skills/specialist @@ -340,7 +334,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3) role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -374,7 +368,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "FTL" skills = /datum/skills/tl @@ -404,7 +398,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3) role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -438,7 +432,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3) role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -471,7 +465,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -482,12 +476,6 @@ /datum/equipment_preset/uscm/private_equipped/load_status(mob/living/carbon/human/new_human) new_human.nutrition = NUTRITION_NORMAL -/datum/equipment_preset/uscm/private_equipped/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME1 - return paygrade - /datum/equipment_preset/uscm/private_equipped/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD) @@ -521,7 +509,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3) role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -563,7 +551,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -602,7 +590,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3) role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -650,7 +638,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3) role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -706,7 +694,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "Spc" skills = /datum/skills/specialist @@ -778,7 +766,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3) role_comm_title = "TL" skills = /datum/skills/tl @@ -819,7 +807,7 @@ skills = /datum/skills/commando/deathsquad auto_squad_name = SQUAD_SOF ert_squad = TRUE - paygrade = PAY_SHORT_ME6 + paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3) minimap_icon = "private" @@ -869,12 +857,6 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/socmed/full, WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/full, WEAR_R_STORE) -/datum/equipment_preset/uscm/marsoc/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return PAY_SHORT_ME7 - return paygrade - //Covert Raiders /datum/equipment_preset/uscm/marsoc/covert name = "Marine Raider (!DEATHSQUAD! Covert)" @@ -883,6 +865,7 @@ new_human.gender = MALE new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]") new_human.age = rand(20,30) + /datum/equipment_preset/uscm/marsoc/covert/load_rank(mob/living/carbon/human/new_human) return PAY_SHORT_CDNM @@ -892,7 +875,7 @@ assignment = JOB_MARINE_RAIDER_SL rank = JOB_MARINE_RAIDER_SL role_comm_title = "TL." - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3) skills = /datum/skills/commando/deathsquad/leader minimap_icon = "leader" @@ -900,11 +883,6 @@ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer) -/datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return PAY_SHORT_MO2 - return paygrade //Codenamed Team Leader /datum/equipment_preset/uscm/marsoc/sl/covert @@ -914,26 +892,22 @@ new_human.gender = MALE new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]") new_human.age = rand(20,30) + /datum/equipment_preset/uscm/marsoc/sl/covert/load_rank(mob/living/carbon/human/new_human) return PAY_SHORT_CDNM + //Officer /datum/equipment_preset/uscm/marsoc/cmd name = "Marine Raider Officer (!DEATHSQUAD!)" assignment = JOB_MARINE_RAIDER_CMD rank = JOB_MARINE_RAIDER_CMD role_comm_title = "CMD." - paygrade = PAY_SHORT_MO3 + paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_3) skills = /datum/skills/commando/deathsquad/officer dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer) -/datum/equipment_preset/uscm/marsoc/cmd/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_3) - return PAY_SHORT_MO4 - return paygrade - /datum/equipment_preset/uscm/marsoc/low_threat name = "Marine Raider" @@ -981,16 +955,10 @@ assignment = JOB_MARINE_RAIDER_SL rank = JOB_MARINE_RAIDER_SL role_comm_title = "TL." - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3) skills = /datum/skills/commando/deathsquad/leader minimap_icon = "leader" dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer) - -/datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return PAY_SHORT_MO2 - return paygrade diff --git a/code/modules/gear_presets/uscm_dress.dm b/code/modules/gear_presets/uscm_dress.dm index 080ed18d7c40..0185b11816e5 100644 --- a/code/modules/gear_presets/uscm_dress.dm +++ b/code/modules/gear_presets/uscm_dress.dm @@ -5,7 +5,7 @@ rank = JOB_MARINE access = list(ACCESS_MARINE_PREP) minimum_age = 18 - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) role_comm_title = "Mar" skills = /datum/skills/pfc @@ -25,13 +25,13 @@ /datum/equipment_preset/uscm_event/dress/lcpl name = "Dress Blues - (E-3) Lance Corporal" - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) //NCOs/SNCOs// /datum/equipment_preset/uscm_event/dress/nco name = "Dress Blues - (E-4) Corporal" - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/SL dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) @@ -44,11 +44,11 @@ /datum/equipment_preset/uscm_event/dress/nco/sgt name = "Dress Blues - (E-5) Sergeant" - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/nco/snco name = "Dress Blues - (E-6) Staff Sergeant" - paygrade = PAY_SHORT_ME6 + paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/SEA access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP) @@ -58,29 +58,29 @@ /datum/equipment_preset/uscm_event/dress/nco/snco/gysgt name = "Dress Blues - (E-7) Gunnery Sergeant" - paygrade = PAY_SHORT_ME7 + paygrades = list(PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/nco/snco/msgt name = "Dress Blues - (E-8) Master Sergeant" - paygrade = PAY_SHORT_ME8 + paygrades = list(PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/nco/snco/firstsgt name = "Dress Blues - (E-8E) First Sergeant" - paygrade = PAY_SHORT_ME8E + paygrades = list(PAY_SHORT_ME8E = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/nco/snco/mgysgt name = "Dress Blues - (E-9) Master Gunnery Sergeant" - paygrade = PAY_SHORT_ME9 + paygrades = list(PAY_SHORT_ME9 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/nco/snco/sgtmaj name = "Dress Blues - (E-9E) Sergeant Major" - paygrade = PAY_SHORT_ME9E + paygrades = list(PAY_SHORT_ME9E = JOB_PLAYTIME_TIER_0) //FIELD OFFICERS// /datum/equipment_preset/uscm_event/dress/officer name = "Dress Blues - (O-1) 2nd Lieutenant" - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/silver skills = /datum/skills/SO access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) @@ -100,11 +100,11 @@ /datum/equipment_preset/uscm_event/dress/officer/firstlt name = "Dress Blues - (O-2) 1st Lieutenant" - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/officer/capt name = "Dress Blues - (O-3) Captain" - paygrade = PAY_SHORT_MO3 + paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/gold skills = /datum/skills/XO @@ -115,7 +115,7 @@ /datum/equipment_preset/uscm_event/dress/officer/co name = "Dress Blues - (O-4) Major" - paygrade = PAY_SHORT_MO4 + paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/gold skills = /datum/skills/commander @@ -125,19 +125,19 @@ /datum/equipment_preset/uscm_event/dress/officer/co/ltcol name = "Dress Blues - (O-5) Lieutenant Colonel" - paygrade = PAY_SHORT_MO5 + paygrades = list(PAY_SHORT_MO5 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/gold/council /datum/equipment_preset/uscm_event/dress/officer/co/col name = "Dress Blues - (O-6) Colonel" - paygrade = PAY_SHORT_MO6 + paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/general //GENERAL OFFICERS// /datum/equipment_preset/uscm_event/dress/officer/general name = "Dress Blues - (O-8) Major General" - paygrade = PAY_SHORT_MO8 + paygrades = list(PAY_SHORT_MO8 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/general skills = /datum/skills/general @@ -155,8 +155,8 @@ /datum/equipment_preset/uscm_event/dress/officer/general/ltgen name = "Dress Blues - (O-9) Lieutenant General" - paygrade = PAY_SHORT_MO9 + paygrades = list(PAY_SHORT_MO9 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/dress/officer/general/gen name = "Dress Blues - (O-10) General" - paygrade = PAY_SHORT_MO10 + paygrades = list(PAY_SHORT_MO10 = JOB_PLAYTIME_TIER_0) diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 1a03dc3f6b22..dbd8149c7866 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -16,7 +16,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_COLONEL rank = JOB_COLONEL - paygrade = PAY_SHORT_MO6 + paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0) role_comm_title = "COL" minimum_age = 40 skills = /datum/skills/general @@ -61,7 +61,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_GENERAL rank = JOB_GENERAL - paygrade = PAY_SHORT_MO7 + paygrades = list(PAY_SHORT_MO7 = JOB_PLAYTIME_TIER_0) role_comm_title = "GEN" minimum_age = 50 skills = /datum/skills/general @@ -106,26 +106,26 @@ /datum/equipment_preset/uscm_event/general/o8 name = "USCM O-8 - Major General (High Command)" - paygrade = PAY_SHORT_MO8 + paygrades = list(PAY_SHORT_MO8 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/general/o9 name = "USCM O-9 - Lieutenant General (High Command)" - paygrade = PAY_SHORT_MO9 + paygrades = list(PAY_SHORT_MO9 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/general/o10 name = "USCM O-10 - General (High Command)" - paygrade = PAY_SHORT_MO10 + paygrades = list(PAY_SHORT_MO10 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/uscm_event/general/o10c name = "USCM O-10C - Assistant Commandant of the Marine Corps (High Command)" - paygrade = PAY_SHORT_MO10C + paygrades = list(PAY_SHORT_MO10C = JOB_PLAYTIME_TIER_0) assignment = JOB_ACMC rank = JOB_ACMC role_comm_title = "ACMC" /datum/equipment_preset/uscm_event/general/o10s name = "USCM O-10S - Commandant of the Marine Corps (High Command)" - paygrade = PAY_SHORT_MO10S + paygrades = list(PAY_SHORT_MO10S = JOB_PLAYTIME_TIER_0) assignment = JOB_CMC rank = JOB_CMC role_comm_title = "CMC" @@ -145,7 +145,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = "UPP" - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "OT" skills = /datum/skills/spy @@ -200,7 +200,7 @@ assignment = JOB_PROVOST_ENFORCER rank = "Provost Enforcer" - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) role_comm_title = "PvE" flags = EQUIPMENT_PRESET_EXTRA @@ -246,7 +246,7 @@ assignment = JOB_PROVOST_TML rank = "Provost Team Leader" - paygrade = PAY_SHORT_CSPO + paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0) role_comm_title = "PvTML" flags = EQUIPMENT_PRESET_EXTRA @@ -292,7 +292,7 @@ assignment = JOB_PROVOST_INSPECTOR rank = "Provost Inspector" - paygrade = PAY_SHORT_PVI + paygrades = list(PAY_SHORT_PVI = JOB_PLAYTIME_TIER_0) role_comm_title = "PvI" flags = EQUIPMENT_PRESET_EXTRA @@ -332,7 +332,7 @@ assignment = JOB_PROVOST_ADVISOR rank = "Provost Advisor" - paygrade = PAY_SHORT_CSPO + paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0) role_comm_title = "PvA" flags = EQUIPMENT_PRESET_EXTRA @@ -343,7 +343,7 @@ assignment = JOB_PROVOST_MARSHAL rank = "Provost Marshal" - paygrade = PAY_SHORT_PVM + paygrades = list(PAY_SHORT_PVM = JOB_PLAYTIME_TIER_0) role_comm_title = PAY_SHORT_PVM flags = EQUIPMENT_PRESET_EXTRA @@ -379,7 +379,7 @@ assignment = JOB_PROVOST_SMARSHAL rank = "Provost Sector Marshal" - paygrade = PAY_SHORT_PVSM + paygrades = list(PAY_SHORT_PVSM = JOB_PLAYTIME_TIER_0) role_comm_title = PAY_SHORT_PVSM /datum/equipment_preset/uscm_event/provost/marshal/chief @@ -388,7 +388,7 @@ assignment = JOB_PROVOST_CMARSHAL rank = "Provost Chief Marshal" - paygrade = PAY_SHORT_PVCM + paygrades = list(PAY_SHORT_PVCM = JOB_PLAYTIME_TIER_0) role_comm_title = PAY_SHORT_PVCM /*****************************************************************************************************/ @@ -410,7 +410,7 @@ assignment = JOB_TIS_IO rank = "UAAC-TIS Intelligence Officer" - paygrade = PAY_SHORT_NO2 + paygrades = list(PAY_SHORT_NO2 = JOB_PLAYTIME_TIER_0) role_comm_title = "TIS-IO" flags = EQUIPMENT_PRESET_EXTRA @@ -437,7 +437,7 @@ assignment = JOB_TIS_SA rank = "UAAC-TIS Special Agent" - paygrade = PAY_SHORT_NO5 + paygrades = list(PAY_SHORT_NO5 = JOB_PLAYTIME_TIER_0) role_comm_title = "TIS-SA" flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/uscm_forecon.dm b/code/modules/gear_presets/uscm_forecon.dm index dfe4e7dd8d5c..65328e8513f5 100644 --- a/code/modules/gear_presets/uscm_forecon.dm +++ b/code/modules/gear_presets/uscm_forecon.dm @@ -1,7 +1,7 @@ /datum/equipment_preset/uscm/forecon assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" rank = JOB_MARINE @@ -227,7 +227,7 @@ rank = JOB_SQUAD_LEADER role_comm_title = "SL" skills = /datum/skills/military/survivor/forecon_squad_leader - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm index 75152268326c..6e727381b6ff 100644 --- a/code/modules/gear_presets/uscm_medical.dm +++ b/code/modules/gear_presets/uscm_medical.dm @@ -36,7 +36,7 @@ ) assignment = JOB_CMO rank = JOB_CMO - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_1) role_comm_title = "CMO" skills = /datum/skills/CMO @@ -66,7 +66,7 @@ assignment = JOB_DOCTOR rank = JOB_DOCTOR - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "Doc" skills = /datum/skills/doctor @@ -104,7 +104,7 @@ assignment = JOB_NURSE rank = JOB_NURSE - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1) role_comm_title = "Nurse" skills = /datum/skills/nurse @@ -126,13 +126,6 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/nurse(new_human), WEAR_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET) - -/datum/equipment_preset/uscm_ship/uscm_medical/nurse/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME3 - return paygrade - //*****************************************************************************************************/ /datum/equipment_preset/uscm_ship/uscm_medical/researcher name = "USCM Researcher" @@ -140,7 +133,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_RESEARCHER rank = JOB_RESEARCHER - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "Rsr" skills = /datum/skills/researcher diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm index 76df4d6de2be..dcb926e804d7 100644 --- a/code/modules/gear_presets/uscm_police.dm +++ b/code/modules/gear_presets/uscm_police.dm @@ -27,7 +27,7 @@ ) assignment = JOB_POLICE rank = JOB_POLICE - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_3) role_comm_title = "MP" skills = /datum/skills/MP @@ -59,11 +59,6 @@ new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder(new_human), WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE) -/datum/equipment_preset/uscm_ship/uscm_police/mp/load_rank(mob/living/carbon/human/human) - if(human.client && get_job_playtime(human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME3 - return paygrade - //*****************************************************************************************************/ /datum/equipment_preset/uscm_ship/uscm_police/warden @@ -90,7 +85,7 @@ ) assignment = JOB_WARDEN rank = JOB_WARDEN - paygrade = PAY_SHORT_ME6 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3) role_comm_title = "MW" skills = /datum/skills/MW @@ -151,7 +146,7 @@ ) assignment = JOB_CHIEF_POLICE rank = JOB_CHIEF_POLICE - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_1) role_comm_title = "CMP" skills = /datum/skills/CMP @@ -195,7 +190,7 @@ access = list() assignment = JOB_RIOT rank = JOB_RIOT - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) role_comm_title = "RMP" skills = /datum/skills/CMP @@ -243,6 +238,6 @@ assignment = JOB_RIOT_CHIEF rank = JOB_RIOT_CHIEF - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "CRMP" skills = /datum/skills/CMP diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index 9c00599ec9cd..ba4a8a684321 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -46,7 +46,7 @@ ) assignment = JOB_CORPORATE_LIAISON rank = JOB_CORPORATE_LIAISON - paygrade = PAY_SHORT_WYC2 + paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_2, PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_3, PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_4) role_comm_title = "CL" skills = /datum/skills/civilian @@ -85,20 +85,6 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET) new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) -/datum/equipment_preset/uscm_ship/liaison/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - var/playtime = get_job_playtime(new_human.client, rank) - if(new_human.client.prefs.playtime_perks) - if(playtime > JOB_PLAYTIME_TIER_4) - return PAY_SHORT_WYC5 - else if(playtime > JOB_PLAYTIME_TIER_3) - return PAY_SHORT_WYC4 - else if(playtime > JOB_PLAYTIME_TIER_2) - return PAY_SHORT_WYC3 - else - return paygrade - return paygrade - //*****************************************************************************************************/ /datum/equipment_preset/uscm_ship/reporter @@ -120,7 +106,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = PAY_SHORT_CIV + paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0) role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -155,7 +141,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "CC" skills = /datum/skills/pfc idtype = /obj/item/card/id/dogtag @@ -206,7 +192,7 @@ ) assignment = JOB_CHIEF_ENGINEER rank = JOB_CHIEF_ENGINEER - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3) role_comm_title = "CE" minimum_age = 27 skills = /datum/skills/CE @@ -242,7 +228,7 @@ ) assignment = JOB_MAINT_TECH rank = JOB_MAINT_TECH - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "MT" skills = /datum/skills/MT @@ -262,12 +248,6 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine(new_human), WEAR_FEET) new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) -/datum/equipment_preset/uscm_ship/maint/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME1 - return paygrade - //*****************************************************************************************************/ /datum/equipment_preset/uscm_ship/ordn @@ -283,7 +263,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = JOB_ORDNANCE_TECH - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "OT" skills = /datum/skills/OT @@ -327,7 +307,7 @@ ) assignment = JOB_CHIEF_REQUISITION rank = JOB_CHIEF_REQUISITION - paygrade = PAY_SHORT_ME7 + paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_3) role_comm_title = "QM" minimum_age = 27 skills = /datum/skills/RO @@ -362,7 +342,7 @@ access = list(ACCESS_MARINE_CARGO) assignment = JOB_CARGO_TECH rank = JOB_CARGO_TECH - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "CT" skills = /datum/skills/CT @@ -387,12 +367,6 @@ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE) -/datum/equipment_preset/uscm_ship/cargo/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME1 - return paygrade - //*****************************************************************************************************/ /datum/equipment_preset/uscm_ship/commander @@ -402,7 +376,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_CO rank = JOB_CO - paygrade = PAY_SHORT_MO4 + paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0) role_comm_title = "CO" minimum_age = 30 skills = /datum/skills/commander @@ -485,7 +459,7 @@ idtype = /obj/item/card/id/gold/council rank = JOB_CO - paygrade = PAY_SHORT_MO5 + paygrades = list(PAY_SHORT_MO5 = JOB_PLAYTIME_TIER_0) role_comm_title = "CO" minimum_age = 35 @@ -501,7 +475,7 @@ /datum/equipment_preset/uscm_ship/commander/council/plus name = "USCM Commanding Officer (CO++)" idtype = /obj/item/card/id/general - paygrade = PAY_SHORT_MO6 + paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0) dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior, /obj/item/clothing/under/marine/dress/blues/general) /datum/equipment_preset/uscm_ship/commander/council/plus/load_gear(mob/living/carbon/human/new_human) @@ -517,7 +491,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_XO rank = JOB_XO - paygrade = PAY_SHORT_MO3 + paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0) role_comm_title = "XO" minimum_age = 35 skills = /datum/skills/XO @@ -556,7 +530,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) assignment = JOB_SO rank = JOB_SO - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "SO" minimum_age = 25 skills = /datum/skills/SO @@ -572,7 +546,6 @@ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/bridge(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE) @@ -588,7 +561,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_SEA rank = JOB_SEA - paygrade = PAY_SHORT_ME7 + paygrades = list(PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_0) role_comm_title = "SEA" minimum_age = 40 skills = /datum/skills/SEA @@ -619,11 +592,11 @@ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars(new_human), WEAR_L_HAND) new_human.equip_to_slot_or_del(new /obj/item/device/whistle(new_human), WEAR_R_HAND) -/datum/equipment_preset/uscm_ship/sea/load_rank(mob/living/carbon/human/rankee) +/datum/equipment_preset/uscm_ship/sea/load_rank(mob/living/carbon/human/rankee, client/mob_client) if(rankee?.client?.prefs?.pref_special_job_options[rank]) - paygrade = get_paygrade_id_by_name(rankee.client.prefs.pref_special_job_options[rank]) - - return paygrade + var/paygrade_choice = get_paygrade_id_by_name(rankee.client.prefs.pref_special_job_options[rank]) + return paygrade_choice + ..() //*****************************************************************************************************/ @@ -634,7 +607,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_AUXILIARY_OFFICER rank = JOB_AUXILIARY_OFFICER - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_3) role_comm_title = "ASO" minimum_age = 27 skills = /datum/skills/auxiliary_officer @@ -693,7 +666,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_CAS_PILOT rank = JOB_CAS_PILOT - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "GP" skills = /datum/skills/pilot @@ -743,7 +716,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_DROPSHIP_PILOT rank = JOB_DROPSHIP_PILOT - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "DP" skills = /datum/skills/pilot @@ -793,7 +766,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_DROPSHIP_CREW_CHIEF rank = JOB_DROPSHIP_CREW_CHIEF - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_3) role_comm_title = "DCC" skills = /datum/skills/crew_chief @@ -846,7 +819,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = "USCM Officer" rank = "USCM Officer" - paygrade = PAY_SHORT_MO3 + paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0) role_comm_title = "Cpt" minimum_age = 40 skills = /datum/skills/commander @@ -884,7 +857,7 @@ access = list(ACCESS_MARINE_KITCHEN) assignment = JOB_MESS_SERGEANT rank = JOB_MESS_SERGEANT - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3) role_comm_title = "MST" skills = /datum/skills/mess_technician @@ -909,9 +882,3 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS) new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE) - -/datum/equipment_preset/uscm_ship/chef/load_rank(mob/living/carbon/human/new_human) - if(new_human.client) - if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return PAY_SHORT_ME1 - return paygrade diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm index 75e8e013c03f..0a77ab7dcb41 100644 --- a/code/modules/gear_presets/whiteout.dm +++ b/code/modules/gear_presets/whiteout.dm @@ -9,7 +9,7 @@ languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH, LANGUAGE_TSL) //Synths after all. skills = /datum/skills/everything //They are Synths, programmed for Everything. idtype = /obj/item/card/id/pmc/ds - paygrade = PAY_SHORT_CDNM + paygrades = list(PAY_SHORT_CDNM = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/pmc/w_y_whiteout/New() . = ..() diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm index bf002b292df9..17138b208a58 100644 --- a/code/modules/gear_presets/wo.dm +++ b/code/modules/gear_presets/wo.dm @@ -17,7 +17,7 @@ assignment = JOB_WO_CO rank = JOB_WO_CO - paygrade = PAY_SHORT_MO2 + paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0) role_comm_title = "CDR" skills = /datum/skills/commander idtype = /obj/item/card/id/gold @@ -96,7 +96,7 @@ assignment = JOB_WO_XO rank = JOB_WO_XO - paygrade = PAY_SHORT_MO1 + paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0) role_comm_title = "LCDR" skills = /datum/skills/XO idtype = /obj/item/card/id/silver @@ -140,7 +140,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_CMP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_CHIEF_POLICE rank = JOB_WO_CHIEF_POLICE - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) role_comm_title = "HGSL" skills = /datum/skills/honor_guard/lead idtype = /obj/item/card/id/silver @@ -176,7 +176,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_BRIG, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_SO rank = JOB_WO_SO - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "VHG" skills = /datum/skills/honor_guard/vet idtype = /obj/item/card/id/silver @@ -218,7 +218,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CREWMAN rank = JOB_WO_CREWMAN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "HGS" skills = /datum/skills/honor_guard/spec idtype = /obj/item/card/id/gold @@ -258,7 +258,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_POLICE rank = JOB_WO_POLICE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) role_comm_title = "HG" skills = /datum/skills/honor_guard @@ -292,7 +292,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_WO_PILOT rank = JOB_WO_PILOT - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "MC" skills = /datum/skills/mortar_crew @@ -327,7 +327,7 @@ access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_COMMAND) assignment = JOB_WO_CHIEF_REQUISITION rank = JOB_WO_CHIEF_REQUISITION - paygrade = PAY_SHORT_ME8 + paygrades = list(PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_0) role_comm_title = "QM" skills = /datum/skills/RO idtype = /obj/item/card/id/silver @@ -357,7 +357,7 @@ access = list(ACCESS_MARINE_ENGINEERING, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_CARGO) assignment = JOB_WO_REQUISITION rank = JOB_WO_REQUISITION - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "BCL" skills = /datum/skills/CE idtype = /obj/item/card/id @@ -389,7 +389,7 @@ access = list(ACCESS_MARINE_CMO, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_COMMAND, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_CMO rank = JOB_WO_CMO - paygrade = PAY_SHORT_CCMO + paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0) role_comm_title = "HS" skills = /datum/skills/CMO idtype = /obj/item/card/id/silver @@ -432,7 +432,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_DOCTOR rank = JOB_WO_DOCTOR - paygrade = PAY_SHORT_CDOC + paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0) role_comm_title = "Doc" skills = /datum/skills/doctor idtype = /obj/item/card/id @@ -472,7 +472,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_RESEARCHER rank = JOB_WO_RESEARCHER - paygrade = PAY_SHORT_CDOC + paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0) role_comm_title = "Chem" skills = /datum/skills/researcher idtype = /obj/item/card/id @@ -512,7 +512,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CHIEF_ENGINEER rank = JOB_WO_CHIEF_ENGINEER - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) role_comm_title = "BCM" skills = /datum/skills/CE idtype = /obj/item/card/id/silver @@ -546,7 +546,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_WO_ORDNANCE_TECH rank = JOB_WO_ORDNANCE_TECH - paygrade = PAY_SHORT_ME4 + paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0) role_comm_title = "BC" skills = /datum/skills/OT idtype = /obj/item/card/id @@ -579,7 +579,7 @@ assignment = JOB_WO_CORPORATE_LIAISON rank = JOB_WO_CORPORATE_LIAISON - paygrade = PAY_SHORT_WYC2 + paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0) role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -623,7 +623,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = PAY_SHORT_ME5 + paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0) role_comm_title = "SL" skills = /datum/skills/SL @@ -658,7 +658,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "Spc" skills = /datum/skills/specialist @@ -693,7 +693,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -717,7 +717,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -751,7 +751,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = PAY_SHORT_ME3 + paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0) role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -789,7 +789,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = PAY_SHORT_ME2 + paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0) role_comm_title = "RFN" skills = /datum/skills/pfc diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm index d492f9573b57..75349115b47c 100644 --- a/code/modules/gear_presets/wy.dm +++ b/code/modules/gear_presets/wy.dm @@ -1,6 +1,6 @@ /datum/equipment_preset/wy name = "WY" - paygrade = PAY_SHORT_WYC1 + paygrades = list(PAY_SHORT_WYC1 = JOB_PLAYTIME_TIER_0) faction = FACTION_WY rank = FACTION_WY @@ -29,7 +29,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_TRAINEE rank = JOB_TRAINEE - paygrade = PAY_SHORT_WYC1 + paygrades = list(PAY_SHORT_WYC1 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/trainee/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/trainee(new_human), WEAR_BODY) @@ -40,28 +40,28 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_JUNIOR_EXECUTIVE rank = JOB_JUNIOR_EXECUTIVE - paygrade = PAY_SHORT_WYC2 + paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/exec name = "Corporate - C - Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE rank = JOB_EXECUTIVE - paygrade = PAY_SHORT_WYC3 + paygrades = list(PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/senior_exec name = "Corporate - D - Senior Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_SENIOR_EXECUTIVE rank = JOB_SENIOR_EXECUTIVE - paygrade = PAY_SHORT_WYC4 + paygrades = list(PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/exec_spec name = "Corporate - E - Executive Specialist" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SPECIALIST rank = JOB_EXECUTIVE_SPECIALIST - paygrade = PAY_SHORT_WYC5 + paygrades = list(PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/exec_spec/lawyer name = "Corporate - E - Lawyer" @@ -82,7 +82,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SUPERVISOR rank = JOB_EXECUTIVE_SUPERVISOR - paygrade = PAY_SHORT_WYC6 + paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/exec_supervisor/lawyer name = "Corporate - F - Lawyer" @@ -120,21 +120,21 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_ASSISTANT_MANAGER rank = JOB_ASSISTANT_MANAGER - paygrade = PAY_SHORT_WYC7 + paygrades = list(PAY_SHORT_WYC7 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/manager/division_manager name = "Corporate - H - Division Manager" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIVISION_MANAGER rank = JOB_DIVISION_MANAGER - paygrade = PAY_SHORT_WYC8 + paygrades = list(PAY_SHORT_WYC8 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/manager/chief_executive name = "Corporate - I - Chief Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CHIEF_EXECUTIVE rank = JOB_CHIEF_EXECUTIVE - paygrade = PAY_SHORT_WYC9 + paygrades = list(PAY_SHORT_WYC9 = JOB_PLAYTIME_TIER_0) /datum/equipment_preset/wy/manager/chief_executive/New() . = ..() @@ -145,7 +145,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIRECTOR rank = JOB_DIRECTOR - paygrade = PAY_SHORT_WYC10 + paygrades = list(PAY_SHORT_WYC10 = JOB_PLAYTIME_TIER_0) skills = /datum/skills/civilian/manager/director headset_type = /obj/item/device/radio/headset/distress/pmc/command/director diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm index 9207b9d55a2d..c67f82176c93 100644 --- a/code/modules/gear_presets/wy_goons.dm +++ b/code/modules/gear_presets/wy_goons.dm @@ -61,7 +61,7 @@ assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) skills = /datum/skills/wy_goon /datum/equipment_preset/goon/standard/load_gear(mob/living/carbon/human/new_human) @@ -94,7 +94,7 @@ assignment = JOB_WY_GOON_TECH rank = JOB_WY_GOON_TECH - paygrade = PAY_SHORT_CPO + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) skills = /datum/skills/wy_goon_tech /datum/equipment_preset/goon/engineer/load_gear(mob/living/carbon/human/new_human) @@ -128,7 +128,7 @@ assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = PAY_SHORT_CSPO + paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0) skills = /datum/skills/wy_goon_lead /datum/equipment_preset/goon/lead/New() @@ -164,7 +164,7 @@ assignment = JOB_WY_GOON_RESEARCHER rank = JOB_WY_GOON_RESEARCHER - paygrade = PAY_SHORT_CCMO + paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0) skills = /datum/skills/researcher /datum/equipment_preset/goon/researcher/load_gear(mob/living/carbon/human/new_human) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 36d2518d7e75..5d0ce8be586f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -388,9 +388,17 @@ if(!do_after(src, 1 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE)) to_chat(src, SPAN_WARNING("You need to set up the high toss!")) return + animation_attack_on(target, 6) + //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 15. Short throws are quieter. Invisible mobs do no sound. + if(alpha >= 50) + playsound(src, "throwing", min(5*min(get_dist(loc,target),thrown_thing.throw_range), 15), vary = TRUE, sound_range = 6) drop_inv_item_on_ground(I, TRUE) thrown_thing.throw_atom(target, thrown_thing.throw_range, SPEED_SLOW, src, spin_throw, HIGH_LAUNCH) else + animation_attack_on(target, 6) + //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 15. Short throws are quieter. Invisible mobs do no sound. + if(alpha >= 50) + playsound(src, "throwing", min(5*min(get_dist(loc,target),thrown_thing.throw_range), 15), vary = TRUE, sound_range = 6) drop_inv_item_on_ground(I, TRUE) thrown_thing.throw_atom(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, spin_throw) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 213d037afe6e..7ab435fb599e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -350,10 +350,10 @@ return "[face_name] (as [id_name])" return face_name -//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable +//Returns "Unknown" if facially unidentifiable and real_name if not. Useful for setting name when headless or when updating a human's name variable /mob/living/carbon/human/proc/get_face_name() var/obj/limb/head/head = get_limb("head") - if(!head || head.disfigured || (head.status & LIMB_DESTROYED) || !real_name) //disfigured. use id-name if possible + if(!head || (head.status & LIMB_DESTROYED) || !real_name) //unidentifiable. use id-name if possible return "Unknown" return real_name @@ -907,9 +907,6 @@ var/obj/limb/head/h = get_limb("head") if(QDELETED(h)) h = get_limb("synthetic head") - else - h.disfigured = 0 - name = get_visible_name() if(species && !(species.flags & NO_BLOOD)) restore_blood() @@ -946,6 +943,11 @@ ..() +/// Returns whether this person has a broken heart but is otherwise revivable +/mob/living/carbon/human/proc/is_heart_broken() + var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] + return heart && heart.organ_status >= ORGAN_BROKEN && check_tod() && is_revivable(ignore_heart = TRUE) + /mob/living/carbon/human/proc/is_lung_ruptured() var/datum/internal_organ/lungs/L = internal_organs_by_name["lungs"] return L && L.organ_status >= ORGAN_BRUISED @@ -957,7 +959,6 @@ src.custom_pain("You feel a stabbing pain in your chest!", 1) L.damage = L.min_bruised_damage - /mob/living/carbon/human/get_visible_implants(class = 0) var/list/visible_objects = list() for(var/obj/item/W in embedded_items) @@ -1712,15 +1713,15 @@ /mob/living/carbon/human/on_knockedout_trait_gain(datum/source) . = ..() - + update_execute_hud() - + return . /mob/living/carbon/human/on_knockedout_trait_loss(datum/source) . = ..() update_execute_hud() - + return . - + diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 8a528df92de5..48dea97699ea 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -335,7 +335,11 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t for(var/obj/limb/L as anything in parts) var/armor = getarmor(L, armour_type) var/modified_damage = armor_damage_reduction(armour_config, damage, armor, penetration, 0, 0) - L.take_damage(modified_damage / amount_of_parts) + if(damage_type == BURN) + L.take_damage(burn = modified_damage / amount_of_parts) + else + L.take_damage(modified_damage / amount_of_parts) + updatehealth() UpdateDamageIcon() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 7cb2d04e67de..c9a36d283794 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -105,12 +105,6 @@ //Can we act if(is_mob_restrained()) return 0 - //Do we have a working jetpack - if(istype(back, /obj/item/tank/jetpack)) - var/obj/item/tank/jetpack/J = back - if(((!check_drift) || (check_drift && J.stabilization_on)) && (body_position == STANDING_UP) && (J.allow_thrust(0.01, src))) - inertia_dir = 0 - return 1 // if(!check_drift && J.allow_thrust(0.01, src)) // return 1 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 3f419333d218..dec4a7f3fbe0 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -412,6 +412,8 @@ /mob/living/carbon/human/get_item_by_slot(slot_id) switch(slot_id) + if(WEAR_ACCESSORY) + return w_uniform.accessories if(WEAR_BACK) return back if(WEAR_FACE) diff --git a/code/modules/mob/living/carbon/human/life/life_helpers.dm b/code/modules/mob/living/carbon/human/life/life_helpers.dm index cab3ae21a782..9388204a967d 100644 --- a/code/modules/mob/living/carbon/human/life/life_helpers.dm +++ b/code/modules/mob/living/carbon/human/life/life_helpers.dm @@ -6,25 +6,6 @@ * Mostly for procs that are not called in the direct Life() loop, except for exact functionality matches (handle_breath, breathe, get_breath_from_internal for example) */ -//Calculate how vulnerable the human is to under- and overpressure. -//Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%). -//Suitdamage can modifiy this in 10% steps. -/mob/living/carbon/human/proc/get_pressure_weakness() - - var/pressure_adjustment_coefficient = 1 // Assume no protection at first. - - if(wear_suit && (wear_suit.flags_inventory & NOPRESSUREDMAGE) && head && (head.flags_inventory & NOPRESSUREDMAGE)) //Complete set of pressure-proof suit worn, assume fully sealed. - pressure_adjustment_coefficient = 0 - - //Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure protection. - if(istype(wear_suit, /obj/item/clothing/suit/space)) - var/obj/item/clothing/suit/space/S = wear_suit - if(S.can_breach && S.damage) - pressure_adjustment_coefficient += S.damage * 0.1 - - pressure_adjustment_coefficient = min(1, max(pressure_adjustment_coefficient, 0)) //So it isn't less than 0 or larger than 1. - return pressure_adjustment_coefficient - /mob/living/carbon/human/proc/stabilize_body_temperature() diff --git a/code/modules/mob/living/carbon/human/species/synthetic.dm b/code/modules/mob/living/carbon/human/species/synthetic.dm index f2d5c50f7391..ab5a8d462713 100644 --- a/code/modules/mob/living/carbon/human/species/synthetic.dm +++ b/code/modules/mob/living/carbon/human/species/synthetic.dm @@ -8,7 +8,7 @@ unarmed_type = /datum/unarmed_attack/punch/synthetic pain_type = /datum/pain/synthetic stamina_type = /datum/stamina/none - mob_inherent_traits = list(TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_IRON_TEETH) rarity_value = 2 insulated = TRUE @@ -64,7 +64,7 @@ name = SYNTH_GEN_ONE uses_skin_color = FALSE special_body_types = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_IRON_TEETH) hair_color = "#000000" icobase = 'icons/mob/humans/species/r_synthetic.dmi' @@ -81,7 +81,7 @@ uses_skin_color = TRUE special_body_types = TRUE burn_mod = 0.8 - mob_inherent_traits = list(TRAIT_SUPER_STRONG) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_IRON_TEETH) pain_type = /datum/pain/synthetic/colonial rarity_value = 1.5 @@ -103,7 +103,7 @@ name = SYNTH_COLONY_GEN_ONE uses_skin_color = FALSE special_body_types = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_IRON_TEETH) //sets colonial_gen_one synth's hair to black hair_color = "#000000" //sets colonial_gen_one synth's icon to WJ sprite @@ -116,7 +116,7 @@ name_plural = "Combat Synthetics" uses_skin_color = FALSE special_body_types = FALSE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_IRON_TEETH) burn_mod = 0.6 //made for combat total_health = 250 //made for combat @@ -137,7 +137,7 @@ name = SYNTH_INFILTRATOR name_plural = "Infiltrator Synthetics" uses_skin_color = TRUE - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INFILTRATOR_SYNTH, TRAIT_IRON_TEETH) bloodsplatter_type = /obj/effect/temp_visual/dir_setting/bloodsplatter/human diff --git a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm index f2c0e8d4cf26..0273fe6b903f 100644 --- a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm +++ b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm @@ -4,7 +4,7 @@ death_message = "violently gargles fluid and seizes up, the glow in their eyes dimming..." uses_skin_color = FALSE burn_mod = 0.65 // made for hazardous environments, withstanding temperatures up to 1210 degrees - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE) + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT, TRAIT_UNSTRIPPABLE, TRAIT_IRON_TEETH) slowdown = 0.45 hair_color = "#000000" diff --git a/code/modules/mob/living/carbon/human/species/yautja/_species.dm b/code/modules/mob/living/carbon/human/species/yautja/_species.dm index 86653af92b4b..042c9917af61 100644 --- a/code/modules/mob/living/carbon/human/species/yautja/_species.dm +++ b/code/modules/mob/living/carbon/human/species/yautja/_species.dm @@ -14,6 +14,7 @@ TRAIT_FOREIGN_BIO, TRAIT_DEXTROUS, TRAIT_EMOTE_CD_EXEMPT, + TRAIT_IRON_TEETH, ) unarmed_type = /datum/unarmed_attack/punch/strong secondary_unarmed_type = /datum/unarmed_attack/bite/strong diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index e7320b17c333..baf69a54e16e 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -408,7 +408,7 @@ else to_chat(src, SPAN_WARNING("There's nothing in our belly that needs regurgitating.")) -/mob/living/carbon/xenomorph/proc/check_alien_construction(turf/current_turf, check_blockers = TRUE, silent = FALSE, check_doors = TRUE) +/mob/living/carbon/xenomorph/proc/check_alien_construction(turf/current_turf, check_blockers = TRUE, silent = FALSE, check_doors = TRUE, ignore_nest = FALSE) var/has_obstacle for(var/obj/O in current_turf) if(check_blockers && istype(O, /obj/effect/build_blocker)) @@ -447,6 +447,8 @@ if(P.chair_state != DROPSHIP_CHAIR_BROKEN) has_obstacle = TRUE break + else if(istype(O, /obj/structure/bed/nest) && ignore_nest) + continue else has_obstacle = TRUE break diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm index 843cfeac540b..3b744014c8f8 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm @@ -709,11 +709,11 @@ /datum/action/xeno_action/activable/place_construction/proc/spacecheck(mob/living/carbon/xenomorph/X, turf/T, datum/construction_template/xenomorph/tem) if(tem.block_range) for(var/turf/TA in range(tem.block_range, T)) - if(!X.check_alien_construction(TA, FALSE, TRUE)) + if(!X.check_alien_construction(TA, FALSE, TRUE, ignore_nest = TRUE)) to_chat(X, SPAN_WARNING("We need more open space to build here.")) qdel(tem) return FALSE - if(!X.check_alien_construction(T)) + if(!X.check_alien_construction(T, ignore_nest = TRUE)) to_chat(X, SPAN_WARNING("We need more open space to build here.")) qdel(tem) return FALSE diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index a66903a938c5..db682e161e87 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -361,6 +361,10 @@ /mob/living/carbon/xenomorph/queen/can_destroy_special() return TRUE +/mob/living/carbon/xenomorph/queen/set_resting(new_resting, silent, instant) + if(ovipositor) + return + return ..() /mob/living/carbon/xenomorph/queen/get_organ_icon() return "heart_t3" @@ -468,6 +472,9 @@ /mob/living/carbon/xenomorph/queen/proc/make_combat_effective() queen_aged = TRUE + if(queen_age_timer_id != TIMER_ID_NULL) + deltimer(queen_age_timer_id) + queen_age_timer_id = TIMER_ID_NULL give_combat_abilities() recalculate_actions() @@ -545,9 +552,8 @@ . += "Pooled Larvae: [stored_larvae]" . += "Leaders: [xeno_leader_num] / [hive?.queen_leader_limit]" - if(queen_age_timer_id != TIMER_ID_NULL) - var/time_left = time2text(timeleft(queen_age_timer_id) + 1 MINUTES, "mm") // We add a minute so that it basically ceilings the value. - . += "Maturity: [time_left == 1? "[time_left] minute" : "[time_left] minutes"] remaining" + if(!queen_aged && queen_age_timer_id != TIMER_ID_NULL) + . += "Maturity: [time2text(timeleft(queen_age_timer_id), "mm:ss")] remaining" /mob/living/carbon/xenomorph/queen/proc/set_orders() set category = "Alien" @@ -807,10 +813,10 @@ /mob/living/carbon/xenomorph/queen/proc/mount_ovipositor() if(ovipositor) return //sanity check - ovipositor = TRUE ADD_TRAIT(src, TRAIT_IMMOBILIZED, OVIPOSITOR_TRAIT) set_body_position(STANDING_UP) set_resting(FALSE) + ovipositor = TRUE set_resin_build_order(GLOB.resin_build_order_ovipositor) // This needs to occur before we update the abilities so we can update the choose resin icon for(var/datum/action/xeno_action/action in actions) diff --git a/code/modules/mob/living/carbon/xenomorph/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm index 82b9291dc555..ebf58133308f 100644 --- a/code/modules/mob/living/carbon/xenomorph/death.dm +++ b/code/modules/mob/living/carbon/xenomorph/death.dm @@ -137,25 +137,31 @@ /mob/living/carbon/xenomorph/gib(datum/cause_data/cause = create_cause_data("gibbing", src)) var/obj/effect/decal/remains/xeno/remains = new(get_turf(src)) - remains.icon = icon + var/icon_path + var/gib_state = "gibbed-a-corpse" remains.pixel_x = pixel_x //For 2x2. if(!caste) CRASH("CASTE ERROR: gib() was called without a caste. (name: [name], disposed: [QDELETED(src)], health: [health])") - switch(caste.caste_type) //This will need to be changed later, when we have proper xeno pathing. Might do it on caste or something. + if(mob_size >= MOB_SIZE_BIG) + icon_path = 'icons/mob/xenos/xenomorph_64x64.dmi' + else + icon_path = 'icons/mob/xenos/xenomorph_48x48.dmi' + switch(caste.caste_type) + if(XENO_CASTE_RUNNER) + icon_path = 'icons/mob/xenos/xenomorph_64x64.dmi' + gib_state = "gibbed-a-corpse-runner" if(XENO_CASTE_BOILER) var/mob/living/carbon/xenomorph/boiler/src_boiler = src visible_message(SPAN_DANGER("[src] begins to bulge grotesquely, and explodes in a cloud of corrosive gas!")) src_boiler.smoke.set_up(2, 0, get_turf(src), new_cause_data = src_boiler.smoke.cause_data) src_boiler.smoke.start() - remains.icon_state = "gibbed-a-corpse" - if(XENO_CASTE_RUNNER) - remains.icon_state = "gibbed-a-corpse-runner" if(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA) - remains.icon_state = "larva_gib_corpse" - else - remains.icon_state = "gibbed-a-corpse" + icon_path = 'icons/mob/xenos/larva.dmi' + + remains.icon_state = gib_state + remains.icon = icon_path check_blood_splash(35, BURN, 65, 2) //Some testing numbers. 35 burn, 65 chance. @@ -170,8 +176,12 @@ icon_path = 'icons/mob/xenos/xenomorph_48x48.dmi' switch(caste.caste_type) if(XENO_CASTE_RUNNER) + icon_path = 'icons/mob/xenos/xenomorph_64x64.dmi' to_flick = "gibbed-a-runner" + if(XENO_CASTE_BOILER) + to_flick = "gibbed-a-boiler" if(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA) + icon_path = 'icons/mob/xenos/larva.dmi' to_flick = "larva_gib" new /obj/effect/overlay/temp/gib_animation/xeno(loc, src, to_flick, icon_path) diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm index 7ceaf2fed75e..1914b2c24b2b 100644 --- a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm +++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm @@ -58,10 +58,14 @@ macro_path = /datum/action/xeno_action/verb/verb_apply_salve action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_3 + xeno_cooldown = 0.5 SECONDS /datum/action/xeno_action/activable/apply_salve/use_ability(atom/target_atom) + if(!action_cooldown_check()) + return var/mob/living/carbon/xenomorph/xeno = owner xeno.xeno_apply_salve(target_atom, health_transfer_amount, max_range, damage_taken_mod) + apply_cooldown() return ..() /datum/action/xeno_action/verb/verb_apply_salve() @@ -124,9 +128,9 @@ adjustBruteLoss(amount * damage_taken_mod) use_plasma(amount * 2) updatehealth() - new /datum/effects/heal_over_time(target_xeno, amount, 10, 1) + new /datum/effects/heal_over_time(target_xeno, heal_amount = amount) target_xeno.xeno_jitter(1 SECONDS) - target_xeno.flick_heal_overlay(10 SECONDS, "#00be6f") + target_xeno.flick_heal_overlay(5 SECONDS, "#00be6f") to_chat(target_xeno, SPAN_XENOWARNING("[src] covers our wounds with a regenerative resin salve. We feel reinvigorated!")) to_chat(src, SPAN_XENOWARNING("We regurgitate our vital fluids and some plasma to create a regenerative resin salve and apply it to [target_xeno]'s wounds. We feel weakened...")) playsound(src, "alien_drool", 25) @@ -135,7 +139,7 @@ if(!target_is_healer && !isfacehugger(target_xeno)) // no cheap grinding healer_delegate.modify_transferred(amount * damage_taken_mod) update_icons() - addtimer(CALLBACK(healer_delegate, /datum/behavior_delegate/drone_healer/proc/un_salve), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) + addtimer(CALLBACK(healer_delegate, /datum/behavior_delegate/drone_healer/proc/un_salve), 5 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) /datum/behavior_delegate/drone_healer name = "Healer Drone Behavior Delegate" @@ -257,6 +261,9 @@ xeno.say(";MY LIFE FOR THE QUEEN!!!") + if(target.health < 0) + target.gain_health(abs(target.health)) // gets them out of crit first + target.gain_health(xeno.health * transfer_mod) target.updatehealth() diff --git a/code/modules/mob/living/living_healthscan.dm b/code/modules/mob/living/living_healthscan.dm index 6739e7046761..d11a32c8382e 100644 --- a/code/modules/mob/living/living_healthscan.dm +++ b/code/modules/mob/living/living_healthscan.dm @@ -159,6 +159,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant)) //snowflake :3 data["lung_ruptured"] = human_target_mob.is_lung_ruptured() + data["heart_broken"] = human_target_mob.is_heart_broken() //shrapnel, limbs, limb damage, limb statflags, cyber limbs var/core_fracture_detected = FALSE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0a24468cc176..d198f7818eda 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -470,7 +470,13 @@ if(!M.can_be_pulled_by(src)) return else if(istype(AM, /obj)) + if(recently_grabbed > world.time) + return FALSE + recently_grabbed = world.time + 6 AM.add_fingerprint(src) + animation_attack_on(AM) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7) + flick_attack_overlay(AM, "grab") if(!QDELETED(AM.pulledby) && !QDELETED(M)) visible_message(SPAN_WARNING("[src] has broken [AM.pulledby]'s grip on [M]!"), null, null, 5) @@ -534,6 +540,7 @@ msg_admin_attack("[key_name(src)] grabbed [key_name(M)] in [get_area(src)] ([src.loc.x],[src.loc.y],[src.loc.z]).", src.loc.x, src.loc.y, src.loc.z) if(!no_msg) + animation_attack_on(M) visible_message(SPAN_WARNING("[src] has grabbed [M] passively!"), null, null, 5) if(M.mob_size > MOB_SIZE_HUMAN || !(M.status_flags & CANPUSH)) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 9806e5ce949c..f1de550df4aa 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -193,6 +193,8 @@ var/recently_pointed_to = 0 //used as cooldown for the pointing verb. + var/recently_grabbed = 0 //used as a cooldown for item grabs + ///Color matrices to be applied to the client window. Assoc. list. var/list/client_color_matrices diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 37a6c46c23cc..058f8ae4aabc 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -420,8 +420,10 @@ GLOBAL_LIST_INIT(limb_types_by_name, list( if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_MASTER)) return DURATION_MULTIPLIER_TIER_3 else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) - return DURATION_MULTIPLIER_TIER_2 + return (DURATION_MULTIPLIER_TIER_3 + DURATION_MULTIPLIER_TIER_2) / 2 else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + return DURATION_MULTIPLIER_TIER_2 + else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) return DURATION_MULTIPLIER_TIER_1 // Construction if(SKILL_CONSTRUCTION) diff --git a/code/modules/nightmare/nmnodes/flow.dm b/code/modules/nightmare/nmnodes/flow.dm index 1ca8c48f88b8..5f94326bbcaa 100644 --- a/code/modules/nightmare/nmnodes/flow.dm +++ b/code/modules/nightmare/nmnodes/flow.dm @@ -67,15 +67,14 @@ if(!.) return var/list/datum/nmnode/pickables = choices.Copy() for(var/datum/nmnode/node as anything in pickables) - if(isnum(node.raw["weight"])) - pickables[node] = node.raw["weight"] + pickables[node] = isnum(node.raw["weight"]) ? node.raw["weight"] : 1 var/list/datum/nmnode/picked = list() var/remaining = src.amount #if defined(UNIT_TESTS) remaining = length(pickables) // Force all to be picked for testing (this could potentially make false positives though) #endif while(length(pickables) && remaining > 0) - var/datum/nmnode/node = pickweight(pickables) + var/datum/nmnode/node = pick_weight(pickables) remaining-- pickables -= node picked += node diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm index b4086ee898e2..879aeaf89634 100644 --- a/code/modules/organs/limbs.dm +++ b/code/modules/organs/limbs.dm @@ -1424,7 +1424,6 @@ treat_grafted var tells it to apply to grafted but unsalved wounds, for burn kit has_stump_icon = TRUE splint_icon_amount = 4 bandage_icon_amount = 4 - var/disfigured = 0 //whether the head is disfigured. var/eyes_r var/eyes_g @@ -1462,25 +1461,6 @@ treat_grafted var tells it to apply to grafted but unsalved wounds, for burn kit mob/attack_source = null,\ brute_reduced_by = -1, burn_reduced_by = -1) . = ..() - if (!disfigured) - if (brute_dam > 50 || brute_dam > 40 && prob(50)) - disfigure("brute") - if (burn_dam > 40) - disfigure("burn") - -/obj/limb/head/proc/disfigure(type = "brute") - if (disfigured) - return - if(type == "brute") - owner.visible_message(SPAN_DANGER("You hear a sickening cracking sound coming from \the [owner]'s face."), \ - SPAN_DANGER("Your face becomes an unrecognizible mangled mess!"), \ - SPAN_DANGER("You hear a sickening crack.")) - else - owner.visible_message(SPAN_DANGER("[owner]'s face melts away, turning into a mangled mess!"), \ - SPAN_DANGER("Your face melts off!"), \ - SPAN_DANGER("You hear a sickening sizzle.")) - disfigured = 1 - owner.name = owner.get_visible_name() /obj/limb/head/reset_limb_surgeries() for(var/zone in list("head", "eyes", "mouth")) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 6c1c234eaadd..7183ce8bf660 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( . = list(desc) if(stat & BROKEN) - . += SPAN_INFO("It appears to be completely broken. It's hard to see what else is wrong with it.") + . += SPAN_INFO("It appears to be completely broken. Bash it open with any tool.") return if(opened) if(has_electronics && terminal) @@ -559,7 +559,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR) && opened) if(has_electronics == 1) if(user.action_busy) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to deconstruct [src].")) return if(terminal) @@ -591,7 +591,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( opened = APC_COVER_OPEN update_icon() else if(istype(W, /obj/item/cell) && opened) //Trying to put a cell inside - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to fit [W] into [src].")) return if(cell) @@ -609,7 +609,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( update_icon() else if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) //Haxing if(opened) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("\The [src]'s wiring confuses you.")) return if(cell) @@ -643,7 +643,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( tgui_interact(user) //then close them and open up the new ones (wires/panel) else if(istype(W, /obj/item/card/id)) //Trying to unlock the interface with an ID card - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You're not sure where to swipe \the [W] on [src].")) return if(opened) @@ -661,7 +661,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( else to_chat(user, SPAN_WARNING("Access denied.")) else if(iswire(W) && !terminal && opened && has_electronics != 2) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [src].")) return if(loc:intact_tile) @@ -688,7 +688,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( make_terminal() terminal.connect_to_network() else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS) && terminal && opened && has_electronics != 2) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [W].")) return if(loc:intact_tile) @@ -712,7 +712,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( qdel(terminal) terminal = null else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && !(stat & BROKEN)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [W].")) return user.visible_message(SPAN_NOTICE("[user] starts inserting the power control board into [src]."), @@ -724,7 +724,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( SPAN_NOTICE("You insert the power control board into [src].")) qdel(W) else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && (stat & BROKEN)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [W].")) return to_chat(user, SPAN_WARNING("You cannot put the board inside, the frame is damaged.")) @@ -733,7 +733,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) return - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [W].")) return var/obj/item/tool/weldingtool/WT = W @@ -750,7 +750,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( deconstruct() return else if(istype(W, /obj/item/frame/apc) && opened && (stat & BROKEN)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea what to do with [W].")) return if(has_electronics) @@ -908,7 +908,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( if(usr == user && opened && (!isRemoteControlling(user))) if(cell) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You have no idea how to remove the power cell from [src].")) return user.put_in_hands(cell) @@ -1043,7 +1043,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list( else if(prob(H.getBrainLoss())) to_chat(user, SPAN_WARNING("You momentarily forget how to use [src].")) return 0 - if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(H, SPAN_WARNING("You don't know how to use \the [src]'s interface.")) return return 1 diff --git a/code/modules/projectiles/ammo_boxes/grenade_packets.dm b/code/modules/projectiles/ammo_boxes/grenade_packets.dm index 5546fe3bc520..603e2e3a712f 100644 --- a/code/modules/projectiles/ammo_boxes/grenade_packets.dm +++ b/code/modules/projectiles/ammo_boxes/grenade_packets.dm @@ -109,6 +109,12 @@ GLOBAL_LIST_INIT(grenade_packets, list( icon_state = "general_packet" content_type = /obj/item/explosive/grenade/high_explosive/m15/rubber +/obj/item/storage/box/packet/sebb + name = "\improper G2 Electroshock grenade packet" + desc = "It contains three G2 Electroshock grenades. Handle with care." + icon_state = "sebb_packet" + content_type = /obj/item/explosive/grenade/sebb + /obj/item/storage/box/packet/airburst_he name = "\improper M74 airburst grenade packet" desc = "It contains three M74 airburst fragmentation grenades. This end towards the enemy." diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 0e0fccf027db..5db904869973 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -365,7 +365,7 @@ Turn() or Shift() as there is virtually no overhead. ~N overlay_ammo_type = "_blank" overlay_gun_type = "_458" overlay_content = "_458" - magazine_type = /obj/item/ammo_magazine/handful/lever_action/xm88 + magazine_type = /obj/item/ammo_magazine/lever_action/xm88 /obj/item/ammo_box/magazine/lever_action/xm88/empty empty = TRUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d16f1b6fdd30..f670fa682154 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -615,14 +615,13 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w gun_recoil = recoil_buildup var/penetration = 0 - var/armor_punch = 0 var/accuracy = 0 var/min_accuracy = 0 var/max_range = 0 + var/effective_range = 0 var/scatter = 0 var/list/damage_armor_profile_xeno = list() var/list/damage_armor_profile_marine = list() - var/list/damage_armor_profile_armorbreak = list() var/list/damage_armor_profile_headers = list() var/datum/ammo/in_ammo @@ -645,24 +644,19 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w falloff = in_ammo.damage_falloff * damage_falloff_mult penetration = in_ammo.penetration - armor_punch = in_ammo.damage_armor_punch accuracy = in_ammo.accurate_range min_accuracy = in_ammo.accurate_range_min max_range = in_ammo.max_range + effective_range = in_ammo.effective_range_max scatter = in_ammo.scatter for(var/i = 0; i<=CODEX_ARMOR_MAX; i+=CODEX_ARMOR_STEP) damage_armor_profile_headers.Add(i) damage_armor_profile_marine.Add(floor(armor_damage_reduction(GLOB.marine_ranged_stats, damage, i, penetration))) damage_armor_profile_xeno.Add(floor(armor_damage_reduction(GLOB.xeno_ranged_stats, damage, i, penetration))) - if(!GLOB.xeno_general.armor_ignore_integrity) - if(i != 0) - damage_armor_profile_armorbreak.Add("[floor(armor_break_calculation(GLOB.xeno_ranged_stats, damage, i, penetration, in_ammo.pen_armor_punch, armor_punch)/i)]%") - else - damage_armor_profile_armorbreak.Add("N/A") var/rpm = max(fire_delay, 1) var/burst_rpm = max((fire_delay * 1.5 + (burst_amount - 1) * burst_delay)/max(burst_amount, 1), 0.0001) @@ -691,19 +685,18 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w data["damage"] = damage data["falloff"] = falloff data["total_projectile_amount"] = bonus_projectile_amount+1 - data["armor_punch"] = armor_punch data["penetration"] = penetration data["accuracy"] = accuracy * accuracy_mult data["unwielded_accuracy"] = accuracy * accuracy_mult_unwielded data["min_accuracy"] = min_accuracy data["max_range"] = max_range + data["effective_range"] = effective_range // damage table data data["damage_armor_profile_headers"] = damage_armor_profile_headers data["damage_armor_profile_marine"] = damage_armor_profile_marine data["damage_armor_profile_xeno"] = damage_armor_profile_xeno - data["damage_armor_profile_armorbreak"] = damage_armor_profile_armorbreak return data @@ -718,10 +711,10 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w data["damage_max"] = 100 data["accuracy_max"] = 32 data["range_max"] = 32 + data["effective_range_max"] = EFFECTIVE_RANGE_MAX_TIER_4 data["falloff_max"] = DAMAGE_FALLOFF_TIER_1 data["penetration_max"] = ARMOR_PENETRATION_TIER_10 data["punch_max"] = 5 - data["glob_armourbreak"] = GLOB.xeno_general.armor_ignore_integrity data["automatic"] = (GUN_FIREMODE_AUTOMATIC in gun_firemode_list) data["auto_only"] = ((length(gun_firemode_list) == 1) && (GUN_FIREMODE_AUTOMATIC in gun_firemode_list)) @@ -1340,6 +1333,8 @@ and you're good to go. if(EXECUTION_CHECK) //Execution if(!able_to_fire(user)) //Can they actually use guns in the first place? return ..() + if(flags_gun_features & GUN_CANT_EXECUTE) + return ..() user.visible_message(SPAN_DANGER("[user] puts [src] up to [attacked_mob], steadying their aim."), SPAN_WARNING("You put [src] up to [attacked_mob], steadying your aim."),null, null, CHAT_TYPE_COMBAT_ACTION) if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DIFF_INTENT, BUSY_ICON_HOSTILE)) return TRUE diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm index efc7abf3aa20..51a5988f2fd0 100644 --- a/code/modules/projectiles/gun_helpers.dm +++ b/code/modules/projectiles/gun_helpers.dm @@ -536,6 +536,33 @@ DEFINES in setup.dm, referenced here. var/obj/item/active_hand = get_active_hand() if(active_hand) + if(active_hand.preferred_storage) + for(var/storage in active_hand.preferred_storage) + var/list/items_in_slot + if(islist(get_item_by_slot(active_hand.preferred_storage[storage]))) + items_in_slot = get_item_by_slot(active_hand.preferred_storage[storage]) + else + items_in_slot = list(get_item_by_slot(active_hand.preferred_storage[storage])) + + for(var/item_in_slot in items_in_slot) + if(istype(item_in_slot, storage)) + var/slot = active_hand.preferred_storage[storage] + switch(slot) + if(WEAR_ACCESSORY) + slot = WEAR_IN_ACCESSORY + if(WEAR_WAIST) + slot = WEAR_IN_BELT + if(WEAR_BACK) + slot = WEAR_IN_BACK + if(WEAR_J_STORE) + slot = WEAR_IN_J_STORE + if(WEAR_HEAD) + slot = WEAR_IN_HELMET + if(WEAR_FEET) + slot = WEAR_IN_SHOES + + if(equip_to_slot_if_possible(active_hand, slot, ignore_delay = TRUE, del_on_fail = FALSE, disable_warning = TRUE, redraw_mob = TRUE)) + return TRUE if(w_uniform) for(var/obj/accessory in w_uniform.accessories) var/obj/item/storage/internal/accessory/holster/holster = accessory diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 717914e38eba..b3dcae388a13 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -214,6 +214,7 @@ charge_icon = "+taser" black_market_value = 20 actions_types = list(/datum/action/item_action/taser/change_mode) + flags_gun_features = GUN_UNUSUAL_DESIGN|GUN_CAN_POINTBLANK|GUN_CANT_EXECUTE /// Determines if the taser will hit any target, or if it checks for wanted status. Default is wanted only. var/mode = TASER_MODE_P var/skilllock = SKILL_POLICE_SKILLED diff --git a/code/modules/projectiles/guns/flamer/flameshape.dm b/code/modules/projectiles/guns/flamer/flameshape.dm index 0b7c01ed0b0b..0189c00599a4 100644 --- a/code/modules/projectiles/guns/flamer/flameshape.dm +++ b/code/modules/projectiles/guns/flamer/flameshape.dm @@ -113,13 +113,7 @@ /datum/flameshape/line/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1) var/turf/source_turf = get_turf(F.loc) - var/turf/prev_T = F.loc - - var/mob/user - if(F.weapon_cause_data) - user = F.weapon_cause_data.resolve_mob() - if(user) - prev_T = user.loc + var/turf/prev_T var/distance = 1 var/stop_at_turf = FALSE @@ -135,7 +129,7 @@ if(T.density) T.flamer_fire_act(burn_dam, F.weapon_cause_data) stop_at_turf = TRUE - else + else if(prev_T) var/obj/flamer_fire/temp = new() var/atom/A = LinkBlocked(temp, prev_T, T) @@ -145,7 +139,7 @@ break stop_at_turf = TRUE - if(T == F.loc || (user && T == user.loc)) + if(T == F.loc) if(stop_at_turf) break prev_T = T @@ -168,16 +162,11 @@ /datum/flameshape/triangle/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1) set waitfor = 0 - var/mob/user - - if(F.weapon_cause_data) - user = F.weapon_cause_data.resolve_mob() - - var/unleash_dir = user.dir + var/unleash_dir = get_cardinal_dir(F, F.target_clicked) var/list/turf/turfs = get_line(F, F.target_clicked) var/distance = 1 var/hit_dense_atom_mid = FALSE - var/turf/prev_T = user.loc + var/turf/prev_T for(var/turf/T in turfs) if(distance > fire_spread_amount) diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index fbe24434d542..44d6ef845b94 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1228,6 +1228,7 @@ fire_sound = 'sound/weapons/gun_hpr.ogg' aim_slowdown = SLOWDOWN_ADS_LMG current_mag = /obj/item/ammo_magazine/rifle/lmg + starting_attachment_types = list(/obj/item/attachable/bipod) attachable_allowed = list( /obj/item/attachable/suppressor, /obj/item/attachable/reddot, diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm index 466a09612c54..6d125e6915c3 100644 --- a/code/modules/projectiles/guns/smgs.dm +++ b/code/modules/projectiles/guns/smgs.dm @@ -665,6 +665,7 @@ start_automatic = FALSE var/nailing_speed = 2 SECONDS //Time to apply a sheet for patching. Also haha name. Try to keep sync with soundbyte duration var/repair_sound = 'sound/weapons/nailgun_repair_long.ogg' + var/material_per_repair = 1 /obj/item/weapon/gun/smg/nailgun/set_gun_config_values() ..() @@ -689,9 +690,16 @@ icon_state = "cnailgun" item_state = "nailgun" w_class = SIZE_SMALL + flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_NO_DESCRIPTION /obj/item/weapon/gun/smg/nailgun/compact/able_to_fire(mob/living/user) . = ..() - if(.) - click_empty(user) return FALSE + +/obj/item/weapon/gun/smg/nailgun/compact/tactical + name = "tactical compact nailgun" + desc = "A carpentry tool, used to drive nails into tough surfaces. This one is military grade, it's olive drab and tacticool. Cannot fire nails as a projectile." + icon_state = "tnailgun" + item_state = "tnailgun" + w_class = SIZE_SMALL + material_per_repair = 2 diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm index 547d231e1c69..38b9137be54f 100644 --- a/code/modules/projectiles/magazines/specialist.dm +++ b/code/modules/projectiles/magazines/specialist.dm @@ -265,7 +265,7 @@ . += SPAN_NOTICE("Contains a warhead.") /obj/item/ammo_magazine/rocket/custom/attackby(obj/item/W as obj, mob/user as mob) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You do not know how to tinker with [name].")) return if(current_rounds <= 0) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index d91e2ca47c1a..4e815eb4c60c 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -660,7 +660,7 @@ //Used by machines and structures to calculate shooting past cover /obj/proc/calculate_cover_hit_boolean(obj/projectile/P, distance = 0, cade_direction_correct = FALSE) - if(istype(P.shot_from, /obj/item/hardpoint)) //anything shot from a tank gets a bonus to bypassing cover + if(istype(P.shot_from, /obj/item/hardpoint) || istype(P.ammo, /datum/ammo/xeno)) //anything shot from a tank or a xeno gets a bonus to bypassing cover distance -= 3 if(distance < 1 || (distance > 3 && cade_direction_correct)) @@ -668,10 +668,9 @@ //an object's "projectile_coverage" var indicates the maximum probability of blocking a projectile var/effective_accuracy = P.get_effective_accuracy() - var/distance_limit = 6 //number of tiles needed to max out block probability var/accuracy_factor = 50 //degree to which accuracy affects probability (if accuracy is 100, probability is unaffected. Lower accuracies will increase block chance) - var/hitchance = min(projectile_coverage, (projectile_coverage * distance/distance_limit) + accuracy_factor * (1 - effective_accuracy/100)) + var/hitchance = min(projectile_coverage, (projectile_coverage * distance / (projectile_coverage_distance_limit * (cade_direction_correct ? 3 : 1))) + accuracy_factor * (1 - effective_accuracy/100)) #if DEBUG_HIT_CHANCE to_world(SPAN_DEBUG("([name] as cover) Distance travelled: [P.distance_travelled] | Effective accuracy: [effective_accuracy] | Hit chance: [hitchance]")) diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm index 6f6d45b6712e..2394146918a9 100644 --- a/code/modules/reagents/chemistry_machinery/chem_master.dm +++ b/code/modules/reagents/chemistry_machinery/chem_master.dm @@ -434,7 +434,7 @@ icon_state = "industry_mixer0" base_state = "industry_mixer" req_skill = SKILL_ENGINEER - req_skill_level = SKILL_ENGINEER_ENGI + req_skill_level = SKILL_ENGINEER_TRAINED pill_maker = FALSE vial_maker = TRUE max_pill_count = 0 diff --git a/code/modules/reagents/chemistry_properties/prop_negative.dm b/code/modules/reagents/chemistry_properties/prop_negative.dm index 783584102182..e7d40c3da31f 100644 --- a/code/modules/reagents/chemistry_properties/prop_negative.dm +++ b/code/modules/reagents/chemistry_properties/prop_negative.dm @@ -137,11 +137,9 @@ if(affecting) if(affecting.take_damage(4, 2)) H.UpdateDamageIcon() - if(prob(meltprob)) //Applies disfigurement + if(prob(meltprob)) if(H.pain.feels_pain) H.emote("scream") - H.status_flags |= DISFIGURED - H.name = H.get_visible_name() else M.take_limb_damage(min(6, volume)) return diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm index 9243c71ae7df..051befa14fba 100644 --- a/code/modules/reagents/chemistry_properties/prop_positive.dm +++ b/code/modules/reagents/chemistry_properties/prop_positive.dm @@ -949,10 +949,6 @@ /datum/chem_property/positive/aiding/process(mob/living/M, potency = 1, delta_time) M.disabilities = 0 M.sdisabilities = 0 - M.status_flags &= ~DISFIGURED - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.name = H.get_visible_name() /datum/chem_property/positive/aiding/process_overdose(mob/living/M, potency = 1, delta_time) M.confused = max(M.confused, 20 * potency) //Confusion and some toxins diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 00dcd987f089..5f17c9a73285 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -364,14 +364,47 @@ icon_state = "terminal" req_access = list() breakable = FALSE + unslashable = TRUE + unacidable = TRUE ///If true, the lifeboat is in the process of launching, and so the code will not allow another launch. var/launch_initiated = FALSE + ///If true, the lifeboat is in the process of having the xeno override removed by the pilot. + var/override_being_removed = FALSE + ///How long it takes to unlock the console + var/remaining_time = 180 SECONDS + +/obj/structure/machinery/computer/shuttle/lifeboat/ex_act(severity) + return /obj/structure/machinery/computer/shuttle/lifeboat/attack_hand(mob/user) . = ..() var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = SSshuttle.getShuttle(shuttleId) if(lifeboat.status == LIFEBOAT_LOCKED) - to_chat(user, SPAN_WARNING("[src] flickers with error messages.")) + if(!skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED)) + to_chat(user, SPAN_WARNING("[src] displays an error message and asks you to contact your pilot to resolve the problem.")) + return + if(user.action_busy || override_being_removed) + return + to_chat(user, SPAN_NOTICE("You start to remove the lockout.")) + override_being_removed = TRUE + user.visible_message(SPAN_NOTICE("[user] starts to type on [src]."), + SPAN_NOTICE("You try to take back control over the lifeboat. It will take around [remaining_time / 10] seconds.")) + while(remaining_time > 20 SECONDS) + if(!do_after(user, 20 SECONDS, INTERRUPT_ALL|INTERRUPT_CHANGED_LYING, BUSY_ICON_HOSTILE, numticks = 20)) + to_chat(user, SPAN_WARNING("You fail to remove the lockout!")) + override_being_removed = FALSE + return + remaining_time = remaining_time - 20 SECONDS + if(remaining_time > 0) + to_chat(user, SPAN_NOTICE("You partially bypass the lockout, only [remaining_time / 10] seconds left.")) + to_chat(user, SPAN_NOTICE("You successfully removed the lockout!")) + playsound(loc, 'sound/machines/terminal_success.ogg', KEYBOARD_SOUND_VOLUME, 1) + lifeboat.status = LIFEBOAT_ACTIVE + lifeboat.available = TRUE + user.visible_message(SPAN_NOTICE("[src] blinks with blue lights."), + SPAN_NOTICE("You have successfully taken back control over the lifeboat.")) + override_being_removed = FALSE + return else if(lifeboat.status == LIFEBOAT_INACTIVE) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting evacuation order\".")) else if(lifeboat.status == LIFEBOAT_ACTIVE) @@ -451,6 +484,8 @@ var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock = lifeboat.get_docked() lifeboat_dock.open_dock() xeno_message(SPAN_XENOANNOUNCE("We have wrested away control of one of the metal birds! They shall not escape!"), 3, xeno.hivenumber) + launch_initiated = FALSE + remaining_time = initial(remaining_time) return XENO_NO_DELAY_ACTION else return ..() diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm deleted file mode 100644 index 7d13c0ed5675..000000000000 --- a/code/modules/surgery/face.dm +++ /dev/null @@ -1,174 +0,0 @@ -//Procedures in this file: Facial reconstruction surgery -////////////////////////////////////////////////////////////////// -// FACE SURGERY // -////////////////////////////////////////////////////////////////// - -/datum/surgery/face_fix - name = "Facial Reconstruction" - possible_locs = list("mouth") - invasiveness = list(SURGERY_DEPTH_SURFACE) - pain_reduction_required = PAIN_REDUCTION_HEAVY - required_surgery_skill = SKILL_SURGERY_TRAINED - steps = list( - /datum/surgery_step/facial_incision, - /datum/surgery_step/mend_vocals, - /datum/surgery_step/pull_skin, - /datum/surgery_step/cauterize/close_facial_incision, - ) - -/datum/surgery/face_fix/can_start(mob/user, mob/living/carbon/patient, obj/limb/L, obj/item/tool) - var/obj/limb/head/H = L - return H && H.disfigured - -//------------------------------------ - -/datum/surgery_step/facial_incision - name = "Make Facial Incision" - desc = "make facial incisions" - tools = SURGERY_TOOLS_INCISION - time = 4 SECONDS - -/datum/surgery_step/facial_incision/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You start to cut open [target]'s face and neck with \the [tool]."), - SPAN_NOTICE("[user] starts to cut open your face and neck with \the [tool]."), - SPAN_NOTICE("[user] starts to cut open [target]'s face and neck with \the [tool].")) - - log_interact(user, target, "[key_name(user)] began to cut open [key_name(target)]'s face and neck with \the [tool].") - target.custom_pain("Your face is being cut apart!", 1) - -/datum/surgery_step/facial_incision/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You finish opening incisions on [target]'s face and neck."), - SPAN_NOTICE("[user] finishes opening incisions on your face and neck."), - SPAN_NOTICE("[user] finishes opening incisions on [target]'s face and neck.")) - - target.incision_depths[target_zone] = SURGERY_DEPTH_SHALLOW - log_interact(user, target, "[key_name(user)] cut open [key_name(target)]'s face and neck with \the [tool].") - -/datum/surgery_step/facial_incision/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_DANGER("Your hand slips, slicing [target]'s throat wth \the [tool]!"), - SPAN_DANGER("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!"), - SPAN_DANGER("[user]'s hand slips, slicing [target]'s throat wth \the [tool]!")) - - log_interact(user, target, "[key_name(user)] failed to cut open [key_name(target)]'s face and neck with \the [tool].") - - target.apply_damage(40, BRUTE, target_zone) - target.losebreath += 20 - user.add_blood(target.get_blood_color(), BLOOD_BODY|BLOOD_HANDS) - return FALSE - -//------------------------------------ - -/datum/surgery_step/mend_vocals - name = "Mend Vocal Cords" - desc = "mend the vocal cords" - tools = SURGERY_TOOLS_PINCH - time = 3 SECONDS - -/datum/surgery_step/mend_vocals/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You start mending [target]'s vocal cords with \the [tool]."), - SPAN_NOTICE("[user] starts to mend your vocal cords with \the [tool]."), - SPAN_NOTICE("[user] starts to mend [target]'s vocal cords with \the [tool].")) - - log_interact(user, target, "[key_name(user)] began to mend [key_name(target)]'s vocal cords with \the [tool].") - target.custom_pain("The insides of your throat are being pinched and pulled at!", 1) - -/datum/surgery_step/mend_vocals/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You mend [target]'s vocal cords."), - SPAN_NOTICE("[user] mends your vocal cords."), - SPAN_NOTICE("[user] mends [target]'s vocal cords.")) - - log_interact(user, target, "[key_name(user)] mended [key_name(target)]'s vocal cords with \the [tool].") - -/datum/surgery_step/mend_vocals/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_WARNING("Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!"), - SPAN_DANGER("[user]'s hand slips, clamping your trachea shut for a moment with \the [tool]!"), - SPAN_WARNING("[user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!")) - - log_interact(user, target, "[key_name(user)] failed to mend [key_name(target)]'s vocal cords with \the [tool].") - - target.losebreath += 10 - return FALSE - -//------------------------------------ - -/datum/surgery_step/pull_skin - name = "Reconstruct Facial Features" - desc = "reconstruct the face" - tools = SURGERY_TOOLS_PRY_DELICATE - time = 3 SECONDS - -/datum/surgery_step/pull_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You start pulling the skin on [target]'s face back into shape with \the [tool]."), - SPAN_NOTICE("[user] starts to pull the skin on your face back into shape with \the [tool]."), - SPAN_NOTICE("[user] starts to pull the skin on [target]'s face back into shape with \the [tool].")) - - log_interact(user, target, "[key_name(user)] began to pull the skin on [key_name(target)]'s face back in place with \the [tool].") - target.custom_pain("Your face hurts!", 1) - -/datum/surgery_step/pull_skin/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You reconstruct [target]'s facial features."), - SPAN_NOTICE("[user] reconstructs your facial features."), - SPAN_NOTICE("[user] reconstructs [target]'s facial features.")) - - log_interact(user, target, "[key_name(user)] pulled the skin on [key_name(target)]'s face back in place with \the [tool].") - -/datum/surgery_step/pull_skin/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_WARNING("Your hand slips, tearing skin on [target]'s face with \the [tool]!"), - SPAN_WARNING("[user]'s hand slips, tearing skin on your face with \the [tool]!"), - SPAN_WARNING("[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!")) - - log_interact(user, target, "[key_name(user)] failed to pull the skin on [key_name(target)]'s face back in place with \the [tool].") - - target.apply_damage(10, BRUTE, target_zone) - return FALSE - -//------------------------------------ - -/datum/surgery_step/cauterize/close_facial_incision - name = "Close Facial Incisions" - desc = "close the facial incisions" - time = 5 SECONDS - -/datum/surgery_step/cauterize/close_facial_incision/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You begin to cauterize the incisions on [target]'s face and neck with \the [tool]."), - SPAN_NOTICE("[user] begins to cauterize the incisions on your face and neck with \the [tool]."), - SPAN_NOTICE("[user] begins to cauterize the incisions on [target]'s face and neck with \the [tool].")) - - target.custom_pain("Your face is being burned!", 1) - - log_interact(user, target, "[key_name(user)] began to cauterize [key_name(target)]'s face and neck with \the [tool].") - -/datum/surgery_step/cauterize/close_facial_incision/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_NOTICE("You cauterize the incisions on [target]'s face and neck."), - SPAN_NOTICE("[user] cauterizes the incisions on your face and neck."), - SPAN_NOTICE("[user] cauterizes the incision on [target]'s face and neck.")) - - log_interact(user, target, "[key_name(user)] cauterized [key_name(target)]'s face and neck with \the [tool], ending [surgery].") - - target.incision_depths[target_zone] = SURGERY_DEPTH_SURFACE - surgery.affected_limb.remove_all_bleeding(TRUE) - var/obj/limb/head/H = surgery.affected_limb - H.disfigured = FALSE - H.owner.name = H.owner.get_visible_name() - -/datum/surgery_step/cauterize/close_facial_incision/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery) - user.affected_message(target, - SPAN_WARNING("Your hand slips, leaving a small burn on [target]'s face!"), - SPAN_WARNING("[user]'s hand slips, leaving a small burn on your face!"), - SPAN_WARNING("[user]'s hand slips, leaving a small burn on [target]'s face!")) - - log_interact(user, target, "[key_name(user)] failed to cauterize [key_name(target)]'s face and neck with \the [tool].") - - target.apply_damage(5, BURN, target_zone) - return FALSE diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 6319028d8106..35ca73d7e9a8 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -1,6 +1,6 @@ # DMAPI Internals -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. +This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 95b8edd3ee5c..05d0dee25b3c 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -50,7 +50,9 @@ version = null // we want this to be the TGS version, not the interop version // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]") sleep(world.tick_lag) + TGS_DEBUG_LOG("Export bug prevention sleep complete") var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm index f94d0dc6b373..f0b519759727 100644 --- a/code/modules/vehicles/hardpoints/hardpoint.dm +++ b/code/modules/vehicles/hardpoints/hardpoint.dm @@ -336,7 +336,7 @@ . = ..() if(health <= 0) . += "It's busted!" - else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN)))) + else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN)))) . += "It's at [round(get_integrity_percent(), 1)]% integrity!" //reloading hardpoint - take mag from backup clips and replace current ammo with it. Will change in future. Called via weapons loader diff --git a/code/modules/vehicles/hardpoints/hardpoint_ammo/cupola_ammo.dm b/code/modules/vehicles/hardpoints/hardpoint_ammo/cupola_ammo.dm index cadb760bd644..7eecc7d04511 100644 --- a/code/modules/vehicles/hardpoints/hardpoint_ammo/cupola_ammo.dm +++ b/code/modules/vehicles/hardpoints/hardpoint_ammo/cupola_ammo.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi' icon_state = "cupola_1" w_class = SIZE_LARGE - default_ammo = /datum/ammo/bullet/smartgun + default_ammo = /datum/ammo/bullet/machinegun max_rounds = 500 gun_type = /obj/item/hardpoint/secondary/m56cupola diff --git a/code/modules/vehicles/hardpoints/hardpoint_ammo/primary_flamer_ammo.dm b/code/modules/vehicles/hardpoints/hardpoint_ammo/primary_flamer_ammo.dm index def6016f0759..a164b38383b8 100644 --- a/code/modules/vehicles/hardpoints/hardpoint_ammo/primary_flamer_ammo.dm +++ b/code/modules/vehicles/hardpoints/hardpoint_ammo/primary_flamer_ammo.dm @@ -1,7 +1,7 @@ /obj/item/ammo_magazine/hardpoint/primary_flamer name = "DRG-N Offensive Flamer Unit Fuel Tank" desc = "A primary armament flamethrower magazine." - caliber = "Napalm X" //correlates to flamer mags + caliber = "High-Combustion Napalm" //correlates to flamer mags icon_state = "drgn_flametank" w_class = SIZE_LARGE max_rounds = 60 diff --git a/code/modules/vehicles/hardpoints/holder/holder.dm b/code/modules/vehicles/hardpoints/holder/holder.dm index df91cbc51b65..948142383cca 100644 --- a/code/modules/vehicles/hardpoints/holder/holder.dm +++ b/code/modules/vehicles/hardpoints/holder/holder.dm @@ -23,7 +23,7 @@ . = ..() if(health <= 0) . += "It's busted!" - else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN)))) + else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN)))) . += "It's at [round(get_integrity_percent(), 1)]% integrity!" for(var/obj/item/hardpoint/H in hardpoints) . += "There is \a [H] module installed on [src]." @@ -100,7 +100,7 @@ /obj/item/hardpoint/holder/attackby(obj/item/O, mob/user) if(HAS_TRAIT(O, TRAIT_TOOL_CROWBAR)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src].")) return @@ -113,7 +113,7 @@ return if(istype(O, /obj/item/hardpoint)) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src].")) return diff --git a/code/modules/vehicles/hardpoints/primary/flamer.dm b/code/modules/vehicles/hardpoints/primary/flamer.dm index fce6e7f6a410..60a7979cd5fb 100644 --- a/code/modules/vehicles/hardpoints/primary/flamer.dm +++ b/code/modules/vehicles/hardpoints/primary/flamer.dm @@ -1,6 +1,6 @@ /obj/item/hardpoint/primary/flamer name = "\improper DRG-N Offensive Flamer Unit" - desc = "A primary weapon for the tank that spews fire everywhere." + desc = "A primary weapon for the tank that spews out high-combustion napalm in a wide radius. The fuel burns intensely and quickly, which allows for it to be used offensively by armoured vehicles." icon_state = "drgn_flamer" disp_icon = "tank" diff --git a/code/modules/vehicles/hardpoints/secondary/cupola.dm b/code/modules/vehicles/hardpoints/secondary/cupola.dm index a4b40c7dd3a1..70b9f9a4889f 100644 --- a/code/modules/vehicles/hardpoints/secondary/cupola.dm +++ b/code/modules/vehicles/hardpoints/secondary/cupola.dm @@ -28,9 +28,3 @@ burst_amount = 3 burst_delay = 0.3 SECONDS extra_delay = 0.6 SECONDS - -/obj/item/hardpoint/secondary/m56cupola/set_bullet_traits() - ..() - LAZYADD(traits_to_give, list( - BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) - )) diff --git a/code/modules/vehicles/multitile/multitile_bump.dm b/code/modules/vehicles/multitile/multitile_bump.dm index 11005cc87ea2..2885f99ed1f7 100644 --- a/code/modules/vehicles/multitile/multitile_bump.dm +++ b/code/modules/vehicles/multitile/multitile_bump.dm @@ -437,14 +437,6 @@ qdel(src) return TRUE -/obj/structure/machinery/hydro_floodlight/handle_vehicle_bump(obj/vehicle/multitile/V) - if(V.vehicle_flags & VEHICLE_CLASS_WEAK) - return FALSE - playsound(V, 'sound/effects/metal_crash.ogg', 20) - visible_message(SPAN_DANGER("\The [V] crushes \the [src]!")) - qdel(src) - return TRUE - /obj/structure/machinery/floodlight/handle_vehicle_bump(obj/vehicle/multitile/V) if(V.vehicle_flags & VEHICLE_CLASS_WEAK) return FALSE diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm index b94b8459890f..5d1612852f8c 100644 --- a/code/modules/vehicles/multitile/multitile_hardpoints.dm +++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm @@ -63,7 +63,7 @@ //Putting on hardpoints //Similar to repairing stuff, down to the time delay /obj/vehicle/multitile/proc/install_hardpoint(obj/item/O, mob/user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know what to do with [O] on \the [src].")) return @@ -132,7 +132,7 @@ //User-orientated proc for taking of hardpoints //Again, similar to the above ones /obj/vehicle/multitile/proc/uninstall_hardpoint(obj/item/O, mob/user) - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src].")) return diff --git a/colonialmarines.dme b/colonialmarines.dme index 254cbb0112ca..d1dc35b9fe77 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -311,6 +311,7 @@ #include "code\controllers\subsystem\tracking.dm" #include "code\controllers\subsystem\vote.dm" #include "code\controllers\subsystem\weather.dm" +#include "code\controllers\subsystem\who.dm" #include "code\controllers\subsystem\x_evolution.dm" #include "code\controllers\subsystem\xeno.dm" #include "code\controllers\subsystem\init\landmarks.dm" @@ -838,11 +839,9 @@ #include "code\game\jobs\job\special\weyland_yutani.dm" #include "code\game\machinery\aicore_lockdown.dm" #include "code\game\machinery\air_alarm.dm" -#include "code\game\machinery\air_sensor.dm" #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe_datums.dm" #include "code\game\machinery\Beacon.dm" -#include "code\game\machinery\bio-dome_floodlights.dm" #include "code\game\machinery\biohazard_lockdown.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\buttons.dm" @@ -861,14 +860,12 @@ #include "code\game\machinery\fuelcell_recycler.dm" #include "code\game\machinery\fusion_engine.dm" #include "code\game\machinery\gear.dm" -#include "code\game\machinery\hologram.dm" #include "code\game\machinery\holosign.dm" #include "code\game\machinery\igniter.dm" #include "code\game\machinery\iv_drip.dm" #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\line_nexter.dm" #include "code\game\machinery\machinery.dm" -#include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\mining.dm" #include "code\game\machinery\misc.dm" #include "code\game\machinery\navbeacon.dm" @@ -1006,7 +1003,6 @@ #include "code\game\machinery\vending\vendor_types\crew\sea.dm" #include "code\game\machinery\vending\vendor_types\crew\senior_officers.dm" #include "code\game\machinery\vending\vendor_types\crew\staff_officer.dm" -#include "code\game\machinery\vending\vendor_types\crew\staff_officer_armory.dm" #include "code\game\machinery\vending\vendor_types\crew\synthetic.dm" #include "code\game\machinery\vending\vendor_types\crew\vehicle_crew.dm" #include "code\game\machinery\vending\vendor_types\squad_prep\squad_engineer.dm" @@ -1124,7 +1120,6 @@ #include "code\game\objects\items\devices\debugger.dm" #include "code\game\objects\items\devices\defibrillator.dm" #include "code\game\objects\items\devices\device.dm" -#include "code\game\objects\items\devices\drone_devices.dm" #include "code\game\objects\items\devices\dummy_tablet.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" @@ -1138,11 +1133,7 @@ #include "code\game\objects\items\devices\pinpointer.dm" #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\portable_vendor.dm" -#include "code\game\objects\items\devices\RCD.dm" -#include "code\game\objects\items\devices\RSF.dm" -#include "code\game\objects\items\devices\RSP.dm" #include "code\game\objects\items\devices\scanners.dm" -#include "code\game\objects\items\devices\suit_cooling.dm" #include "code\game\objects\items\devices\taperecorder.dm" #include "code\game\objects\items\devices\teleportation.dm" #include "code\game\objects\items\devices\transfer_valve.dm" @@ -1251,7 +1242,6 @@ #include "code\game\objects\items\storage\toolbox.dm" #include "code\game\objects\items\storage\toolkit.dm" #include "code\game\objects\items\storage\wallets.dm" -#include "code\game\objects\items\tanks\jetpack.dm" #include "code\game\objects\items\tanks\tank_types.dm" #include "code\game\objects\items\tanks\tanks.dm" #include "code\game\objects\items\tools\cleaning_tools.dm" @@ -1290,7 +1280,6 @@ #include "code\game\objects\structures\curtains.dm" #include "code\game\objects\structures\desertdam.dm" #include "code\game\objects\structures\displaycase.dm" -#include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\fence.dm" #include "code\game\objects\structures\flora.dm" @@ -1348,7 +1337,6 @@ #include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" #include "code\game\objects\structures\crates_lockers\closets\job_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" -#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm" #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wall_locker.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" @@ -1412,7 +1400,6 @@ #include "code\game\verbs\ooc.dm" #include "code\game\verbs\preferences.dm" #include "code\game\verbs\records.dm" -#include "code\game\verbs\who.dm" #include "code\modules\trigger.dm" #include "code\modules\admin\admin.dm" #include "code\modules\admin\admin_ranks.dm" @@ -1742,7 +1729,6 @@ #include "code\modules\economy\cash.dm" #include "code\modules\economy\economy_misc.dm" #include "code\modules\economy\EFTPOS.dm" -#include "code\modules\economy\TradeDestinations.dm" #include "code\modules\emoji\emoji_parse.dm" #include "code\modules\escape_menu\admin_buttons.dm" #include "code\modules\escape_menu\details.dm" @@ -2336,7 +2322,6 @@ #include "code\modules\surgery\brainrepair.dm" #include "code\modules\surgery\chestburster.dm" #include "code\modules\surgery\eye.dm" -#include "code\modules\surgery\face.dm" #include "code\modules\surgery\generic.dm" #include "code\modules\surgery\headreattach.dm" #include "code\modules\surgery\implant.dm" diff --git a/html/changelogs/AutoChangeLog-pr-6301.yml b/html/changelogs/AutoChangeLog-pr-6301.yml new file mode 100644 index 000000000000..b45b76cea902 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6301.yml @@ -0,0 +1,8 @@ +author: "SpypigDev" +delete-after: True +changes: + - refactor: "SO armory vendor code refactored into the main SO gear vendor code" + - balance: "XO weapon and clothing vendors fitted with a more modernized equipment set" + - balance: "XO weapon vendor now offers Medic or Engineer essentials sets" + - bugfix: "Vending an autoinjector pouch as SO or XO now produces a full pouch, rather than empty" + - balance: "SO's mod88 removed from cryo spawn and moved to their vendor instead" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6650.yml b/html/changelogs/AutoChangeLog-pr-6650.yml new file mode 100644 index 000000000000..5152daaea4d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6650.yml @@ -0,0 +1,12 @@ +author: "Nivrak, NervanCatos" +delete-after: True +changes: + - balance: "Modified engineering skill levels, Combat technicians now do everything engineering related slightly faster. This does not affect any other roles or skillchecks." + - rscadd: "Adds the tactical compact nailgun to the Combat Technician's vendor essential engineering kit, It cannot fire and uses 2 metal instead of 1 to repair. Credit to NervanCatos." + - rscadd: "Added the M277 pattern construction rig, It comes with 6 slots instead of 10 in the M276 but can carry metal and plasteel stacks. Available in the CT vendor." + - rscadd: "Added the Engineer Kit pouch, basically and engineer kit - in a pouch. Restricted by engineering skill. Available in the CT vendor." + - rscadd: "Added the Small Tool Webbing, A smaller variant of the tool webbing with 6 slots instead of 7. Available in the CT vendor." + - qol: "Screwdriver, Crowbar, Blowtorch, Multitool, Wrench and Wirecutters will now prioritize the tool webbing when quick equipping." + - code_imp: "Added a new variable for items, preferred_storage which allows to replicate the above behavior for other items and storages." + - rscadd: "Added a new sentry upgrade, The omni-sentry. As the name suggests it is omni-directional but has 30% reduces damage and a shorter range by 1." + - qol: "Made APC examine-text a bit more clear about what you should be doing next." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6727.yml b/html/changelogs/AutoChangeLog-pr-6727.yml new file mode 100644 index 000000000000..ee28676f4cab --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6727.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - balance: "Barricades are now far better at blocking bullets from the front. They will not block most bullets if the shooter is within 2 tiles, however." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6735.yml b/html/changelogs/AutoChangeLog-pr-6735.yml new file mode 100644 index 000000000000..8d84cd25a7b3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6735.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - balance: "The VP78 pistol will now deal maximum damage up to 6 tiles from the shooters position before experiencing gradual damage falloff. This is up from a previous maximum range of 3 tiles." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6838.yml b/html/changelogs/AutoChangeLog-pr-6838.yml new file mode 100644 index 000000000000..d9003271a4fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6838.yml @@ -0,0 +1,4 @@ +author: "MistChristmas" +delete-after: True +changes: + - balance: "Buffed MP and Officer Armor's Bullet Armour." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6845.yml b/html/changelogs/AutoChangeLog-pr-6845.yml new file mode 100644 index 000000000000..224db01fdc09 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6845.yml @@ -0,0 +1,4 @@ +author: "ihatethisengine2" +delete-after: True +changes: + - balance: "sacrifice ability now guarantees to get the target out of crit on top of the heal" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6846.yml b/html/changelogs/AutoChangeLog-pr-6846.yml new file mode 100644 index 000000000000..8318cd0e3494 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6846.yml @@ -0,0 +1,4 @@ +author: "VileBeggar" +delete-after: True +changes: + - code_imp: "removed an unneeded var in mob_hud.dm" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6847.yml b/html/changelogs/AutoChangeLog-pr-6847.yml new file mode 100644 index 000000000000..5d7897bb60b3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6847.yml @@ -0,0 +1,5 @@ +author: "Diegoflores31" +delete-after: True +changes: + - balance: "Healer drone apply salve now has a 1 second cooldown." + - balance: "Salve wound now heals slightly quicker." \ No newline at end of file diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml index 98c6fd5dbb20..f78f87f3ad52 100644 --- a/html/changelogs/archive/2024-07.yml +++ b/html/changelogs/archive/2024-07.yml @@ -157,3 +157,148 @@ you land. realforest2001: - bugfix: Fixes riflemen spec_kits not being usable by riflemen. +2024-07-18: + cuberound: + - rscdel: Removed Rapid-Service-Fabricator, rapid construction device and Rapid-Seed-Producer + (old ss13 junk) +2024-07-19: + Drathek: + - bugfix: Fixed light blue scrubs having no cost in snowflake vendor. + SpypigDev: + - bugfix: SO Armory vendors no longer infinitely supply knives + TotalEpicness5, Triiodine, monkeyfist, Blundir: + - rscadd: Adds the G2 electroshock grenade. This grenade does not stun nor deal + serious damage to xenos, but it stuns via electric shock. It can create EMP-like + effects when faced with electronic devices like sentries, synths, Area Power + Controllers, etc. It's damage is reduced by energy armor. + - bugfix: take_overall_armoured_damage now can actually deal burn damage + - balance: Marine armor has a small bit of energy armor added back. Heavy armor + has slightly more protection than medium/light. + - bugfix: Mines now check for explosive antigrief checks + VileBeggar: + - balance: The DRG-N Offensive Flamer Unit now fires a 3-tile wide glob of high-combustion + napalm. + Zonespace, Vile Beggar: + - rscadd: Handheld planted flags are now indestructible and do a small amount of + damage on hit. + - bugfix: Plantable flags can no longer be duplicated. + - rscdel: Planting a UA flag no longer forces anyone but the planter to warcry. + cuberound: + - bugfix: having left hand broken and not splinted has the same effect on wheelchair + movement speed as right hand + - bugfix: corrects holoround highligh alpha value + - rscdel: Removed malfanction closet + kiVts: + - bugfix: Surgery sound and alike is fixed + realforest2001: + - rscadd: The Combat Correspondant's civilian equipment is now in it's own category + to make it easier to tell why you can't click it as the military version. +2024-07-20: + Doubleumc: + - rscdel: Removed facial disfigurement + - code_imp: Fixed and refactored probability weighting for pick_weight + - bugfix: no longer stab with utensil when trying to feed while target full + Drathek: + - admin: Added causes for explosion starts to attack logs + Steelpoint: + - rscadd: The Heavy Pulse Rifle (M41AE2) will now start with a pre-attached bipod. + To better inform players of its unique auto-fire function. + Zonespace27: + - bugfix: Fixed a large amount of objects activating erroneous functionality (like + an armor light) when using action buttons tied to that object. + - bugfix: Fixed a potential softlock in the abomination tutorial. + cuberound: + - rscdel: removes trade destinations (they were never used) + - balance: m56 cupola uses m56d ammo rather then standard sg ammo +2024-07-22: + BlackCrystalic: + - bugfix: Queen maturity timer + Blackcrystalic: + - qol: port who/staffwho to TGUI + ThePiachu: + - refactor: Made XM88 box code more uniform with other handful boxes. + zzzmike: + - bugfix: lifeboat launch console is no longer slashable / acidable +2024-07-23: + cuberound: + - code_imp: cleans up water particle code +2024-07-24: + Doubleumc: + - bugfix: sounds & motion detectors should be more reliable +2024-07-25: + cuberound: + - rscdel: removes /obj/item/device/suit_cooling_unit and get_pressure_weakness() +2024-07-26: + BlackCrystalic: + - qol: if server take too long to pre init all before lobby art, players will see + lobbyart "loading" + Blundir: + - bugfix: fixed runner having no gib animation + - bugfix: fixed gib remains being invisible + - imageadd: boiler gib animation + - imageadd: larva gib remains + - imageadd: shoes icons resprite + Steelpoint: + - imageadd: The Sniper and Anti-Material Rifle Specialists will now use an urban + camouflage sprite for their ghillie suit instead of a green camouflage. + realforest2001: + - rscadd: Synthetics and Yautja now spawn with the Iron Teeth trait, not dropping + items held in their mouth. + rythenx: + - rscadd: more options for hats to ASO vendor to bring it in line with what SO has + available +2024-07-29: + TheManWithNoHands: + - code_imp: adds flags to cone, allowing it to be worn on head + - imageadd: added on mob sprites for cone +2024-07-30: + Blundir: + - balance: revolver belt and sg holster belt can fit any revolver + - balance: increased mateba belt storage size from 6 to 7 + - rscadd: grabbing something has a small mob animation now, grabbing items have + visual effect, animation and sound + - rscadd: throwing has small animation and sound + Cuberound, Venuska1117: + - qol: You can build Special Structures nearby nested people. + Steelpoint: + - rscadd: Marine Special Forces, Forecon, Echo Squad and CBRN will now appear in + their own sub-menu for observers. + - ui: Foxtrot's colour in the observe menu now reflects the squads true colour scheme. + TheManWithNoHands: + - balance: increases XO police skill by 1 + Venuska1117: + - balance: Enabled clusters to spread on semi-weedable surfaces. + cuberound: + - rscdel: removes air senzors + - rscdel: Removes autogibber and related objects + - rscdel: removes UNUSED hydro lights that were replaced by colony lights long ago + - rscdel: Removes mass driver + - rscdel: holopad removal + efzapa: + - rscadd: All Brig Detainment Cameras are now linked to a new Brig Camera Console + Computer, available in the Brig Lobby, Warden's Office, CIC, and CMP Office. + - maptweak: Removed one of the Security Records Consoles in the Brig Lobby in place + for a Brig Camera Console. + - mapadd: Both Brig Perma Cells now have brig cameras in them. + ihatethisengine2: + - balance: Smartgunners can wear folding barricades on their backs. + zzzmike: + - bugfix: stops attempted stripping when stunned etc. + - rscadd: pilots can unhack lifeboats, similar to dropship unhacking +2024-07-31: + coldironwarrior: + - spellcheck: Fixed spelling of auxiliary in the circuit board vendor + - spellcheck: Fixed capitalization of ordnance workshop area + realforest2001: + - code_imp: Changed back-end for working out equipment preset paygrades so as to + remove the manual overrides on several roles based on playtime perks. + - rscadd: Added lower ranks for all enlisted and some officer roles subject to having + played for less than ten hours. This rank cannot be used after playing more + than ten hours, and ignores preferences for playtime perks. + - rscadd: Added a higher rank achievable to most enlisted and some officers, requiring + 175+ hours. + - rscadd: Changed base rank for SL, SG, Spec and FTL by one grade up. + - rscadd: Changed low playtime rank for MP and Nurse from Lance Corporal to Corporal. + zzzmike: + - rscdel: Disablers can't execute people anymore + - bugfix: stops people from buckling others when they are knocked out etc. diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml new file mode 100644 index 000000000000..0d86f2174654 --- /dev/null +++ b/html/changelogs/archive/2024-08.yml @@ -0,0 +1,36 @@ +2024-08-02: + Asmocard: + - qol: Can now dump containers into the seed extractor + Blundir: + - rscadd: throw volume is lower and based on the distance of throw, half visible + mobs make no throw sound (sniper, scout, yautja) + - rscadd: throw animation pixel shifts for less pixels + - rscadd: lowered throw sound range a bit + - soundadd: added mutiple unique sound for throwing things + - soundadd: added numerous phone sounds for different phone interactions + CapCamIII: + - rscadd: UPP and CLF department channels now have distinct chat colors + Doubleumc: + - bugfix: fixed tank secondary flamer stopping after one tile + - balance: flamers can now fire streams over the "wrong" side of a barricade, when + adjacent + VileBeggar: + - bugfix: You can no longer build structures on top of dense objects. This prevents + weird layering happening with walls and tables, window frames, etc. + - bugfix: You can no longer rest while on ovi as a Queen, which made half of your + abilities unusable if you did so. + - rscadd: The weapon stats screen now shows the effective range of ammo, instead + of its armor punch value. + - bugfix: Health scans will now display the heartbroken status if applicable. + cuberound: + - code_imp: changes references from nanotrasen to weyland yutani + ihatethisengine2: + - balance: heavy revolver ammo cannot slowdown t3s anymore. + - bugfix: fixed the lockdown button working after dropship being locked by Queen + kiVts: + - rscadd: Players will not get picked at certain ERT beacons if they dont have enough + playtime in relevant area. +2024-08-03: + hislittlecuzingames: + - qol: Can roleplay easier with cigarettes, cigars, lighters counting as cosmetic + for helmet storage purposes. diff --git a/icons/effects/sebb.dmi b/icons/effects/sebb.dmi new file mode 100644 index 000000000000..288a1023ce3d Binary files /dev/null and b/icons/effects/sebb.dmi differ diff --git a/icons/lobby/title_loading.dmi b/icons/lobby/title_loading.dmi new file mode 100644 index 000000000000..3aa2f5ad52c2 Binary files /dev/null and b/icons/lobby/title_loading.dmi differ diff --git a/icons/mob/humans/onmob/head_0.dmi b/icons/mob/humans/onmob/head_0.dmi index 9fc0bc82c123..4a4338eac4c2 100644 Binary files a/icons/mob/humans/onmob/head_0.dmi and b/icons/mob/humans/onmob/head_0.dmi differ diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi index 951c7e89f985..696ab464252d 100644 Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_0.dmi b/icons/mob/humans/onmob/items_lefthand_0.dmi index 7d887799815b..a4396aeb93de 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_0.dmi and b/icons/mob/humans/onmob/items_lefthand_0.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi index cb80cb6cc10c..45a3b51ecdf2 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_0.dmi b/icons/mob/humans/onmob/items_righthand_0.dmi index 184946a13f0b..582262e88289 100644 Binary files a/icons/mob/humans/onmob/items_righthand_0.dmi and b/icons/mob/humans/onmob/items_righthand_0.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi index 7bad7eb2c583..a2e7e96bac13 100644 Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index c372b8a6d72c..85266a2077ac 100644 Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ diff --git a/icons/mob/xenos/larva.dmi b/icons/mob/xenos/larva.dmi index 72cfb7b4e318..f2e6a31ea36d 100644 Binary files a/icons/mob/xenos/larva.dmi and b/icons/mob/xenos/larva.dmi differ diff --git a/icons/mob/xenos/xenomorph_64x64.dmi b/icons/mob/xenos/xenomorph_64x64.dmi index 3fc4d942cd66..17fd4ae7fd5f 100644 Binary files a/icons/mob/xenos/xenomorph_64x64.dmi and b/icons/mob/xenos/xenomorph_64x64.dmi differ diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi index ecbc5fb84969..e26ee644d638 100644 Binary files a/icons/obj/items/clothing/belts.dmi and b/icons/obj/items/clothing/belts.dmi differ diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi index 469d7cb7616a..923a26b55c20 100644 Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index c1910d21b599..8c39aa77c7d1 100644 Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ diff --git a/icons/obj/items/clothing/shoes.dmi b/icons/obj/items/clothing/shoes.dmi index c4e01786e579..90e626503963 100644 Binary files a/icons/obj/items/clothing/shoes.dmi and b/icons/obj/items/clothing/shoes.dmi differ diff --git a/icons/obj/items/weapons/grenade.dmi b/icons/obj/items/weapons/grenade.dmi index 7ee5af737066..ca8aaf9afcd6 100644 Binary files a/icons/obj/items/weapons/grenade.dmi and b/icons/obj/items/weapons/grenade.dmi differ diff --git a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi index 17e7e6f221ae..24f9f9b63871 100644 Binary files a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi differ diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index ea56dacf0fa3..5730f8e64032 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -24911,7 +24911,6 @@ /area/corsat/sigma/south/complex) "bTM" = ( /obj/structure/surface/table/reinforced, -/obj/item/device/suit_cooling_unit, /turf/open/floor/corsat/retrosquareslight, /area/corsat/sigma/south/complex) "bTN" = ( @@ -24930,7 +24929,7 @@ /area/corsat/gamma/biodome/complex) "bTQ" = ( /obj/structure/surface/table/reinforced, -/obj/item/device/gripper, +/obj/item/prop/gripper, /turf/open/floor/corsat/retrosquareslight, /area/corsat/sigma/south/complex) "bTU" = ( @@ -35676,7 +35675,6 @@ /area/corsat/omega/complex) "lHI" = ( /obj/structure/surface/table/reinforced, -/obj/item/ammo_rcd, /turf/open/floor/corsat/retrosquareslight, /area/corsat/sigma/south/complex) "lHK" = ( diff --git a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm index 5cccceb54389..60bb9c8aa42f 100644 --- a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm +++ b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm @@ -18901,7 +18901,7 @@ /area/prison/security/monitoring/highsec) "btD" = ( /obj/structure/surface/table/reinforced, -/obj/item/device/matter_decompiler, +/obj/item/prop/matter_decompiler, /turf/open/floor/prison/redfull, /area/prison/hallway/central/west) "btE" = ( diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index f66743b6388e..00134fefc158 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -15758,7 +15758,7 @@ /obj/structure/machinery/shower{ pixel_y = 13 }, -/obj/item/tool/soap/nanotrasen, +/obj/item/tool/soap/weyland_yutani, /turf/open/floor/prison/kitchen/southwest, /area/fiorina/tumor/civres) "lWy" = ( @@ -25377,7 +25377,6 @@ /turf/open/floor/prison/sterile_white/southwest, /area/fiorina/station/medbay) "tpE" = ( -/obj/item/tank/jetpack/carbondioxide, /obj/structure/surface/rack, /turf/open/floor/prison/floor_plate, /area/fiorina/tumor/servers) diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 80342068f6e6..af8650e3bdb2 100644 --- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -10137,10 +10137,6 @@ /area/ice_colony/surface/storage_unit/research) "aKo" = ( /obj/structure/surface/rack, -/obj/item/ammo_rcd, -/obj/item/ammo_rcd, -/obj/item/ammo_rcd, -/obj/item/ammo_rcd, /turf/open/floor/vault2/west, /area/ice_colony/surface/storage_unit/research) "aKp" = ( diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index 42e94f253587..5febdceb5e06 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -19819,15 +19819,15 @@ pixel_x = 4; pixel_y = 10 }, -/obj/item/tool/soap/nanotrasen{ +/obj/item/tool/soap/weyland_yutani{ pixel_x = 3; pixel_y = 7 }, -/obj/item/tool/soap/nanotrasen{ +/obj/item/tool/soap/weyland_yutani{ pixel_x = 2; pixel_y = 11 }, -/obj/item/tool/soap/nanotrasen{ +/obj/item/tool/soap/weyland_yutani{ desc = "Teetering at the brink! A life's thread, about to be cut short."; pixel_x = 5; pixel_y = 15 diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index 2baad841c255..ad54d9e129ae 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -2795,7 +2795,7 @@ }, /obj/structure/surface/table/reinforced/prison, /obj/item/device/mass_spectrometer, -/obj/item/device/matter_decompiler, +/obj/item/prop/matter_decompiler, /turf/open/floor/strata/multi_tiles/southwest, /area/strata/ag/interior/outpost/canteen/personal_storage) "ake" = ( diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b4a195ae5969..dba72a936591 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -235,7 +235,7 @@ name = "General Listening Channel"; pixel_y = 28 }, -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/obj/structure/machinery/cm_vending/gear/staff_officer_armory, /turf/open/floor/almayer/redfull, /area/almayer/command/cic) "abR" = ( @@ -3320,6 +3320,14 @@ /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/faxmachine/uscm/command, /obj/item/device/megaphone, +/obj/structure/machinery/computer/cameras/almayer_brig{ + dir = 8; + desc = "Used to access the various cameras in the security brig."; + name = "brig cameras console"; + pixel_y = 12; + pixel_x = 17; + layer = 2.99 + }, /turf/open/floor/almayer/plate, /area/almayer/command/cic) "awQ" = ( @@ -19918,7 +19926,14 @@ "ekZ" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ - dir = 4 + dir = 4; + pixel_y = 10 + }, +/obj/structure/machinery/computer/cameras/almayer_brig{ + dir = 4; + desc = "Used to access the various cameras in the security brig."; + name = "brig cameras console"; + pixel_y = -11 }, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/warden_office) @@ -31590,7 +31605,16 @@ "jhI" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ - dir = 4 + dir = 4; + pixel_y = 19; + layer = 2.99 + }, +/obj/structure/machinery/computer/cameras/almayer_brig{ + dir = 4; + desc = "Used to access the various cameras in the security brig."; + name = "brig cameras console"; + pixel_y = 5; + layer = 2.99 }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/chief_mp_office) @@ -33768,7 +33792,7 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/obj/structure/machinery/camera/autoname/almayer, +/obj/structure/machinery/camera/autoname/almayer/brig, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) "kcg" = ( @@ -34442,6 +34466,7 @@ id = "Perma 1"; pixel_y = 24 }, +/obj/structure/machinery/camera/autoname/almayer/brig, /turf/open/floor/almayer/plate, /area/almayer/shipboard/brig/perma) "krA" = ( @@ -34630,7 +34655,8 @@ "kvL" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/cameras/almayer_network{ - dir = 4 + dir = 4; + pixel_y = 0 }, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/warden_office) @@ -51875,7 +51901,7 @@ /turf/open/floor/almayer/test_floor4, /area/almayer/maint/upper/u_a_p) "ryR" = ( -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/obj/structure/machinery/cm_vending/gear/staff_officer_armory, /turf/open/floor/almayer/redfull, /area/almayer/command/cic) "ryY" = ( @@ -61350,9 +61376,8 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/maint/hull/lower/stern) "vsz" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 8; - name = "ship-grade camera" +/obj/structure/machinery/camera/autoname/almayer/brig{ + dir = 8 }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) @@ -61882,10 +61907,8 @@ /turf/open/floor/almayer/silver, /area/almayer/shipboard/brig/cic_hallway) "vCy" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 4; - name = "ship-grade camera"; - pixel_y = 6 +/obj/structure/machinery/camera/autoname/almayer/brig{ + dir = 4 }, /turf/open/floor/almayer/green/west, /area/almayer/shipboard/brig/cells) @@ -63920,6 +63943,7 @@ id = "Perma 2"; pixel_y = 24 }, +/obj/structure/machinery/camera/autoname/almayer/brig, /turf/open/floor/almayer/plate, /area/almayer/shipboard/brig/perma) "wnL" = ( @@ -64322,7 +64346,8 @@ "wvE" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/cameras/almayer_network{ - dir = 4 + dir = 4; + pixel_y = 1 }, /obj/structure/machinery/light{ dir = 1 @@ -66191,9 +66216,6 @@ dir = 1 }, /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/secure_data{ - dir = 4 - }, /obj/structure/sign/safety/terminal{ pixel_x = 3; pixel_y = 27 @@ -66202,6 +66224,11 @@ pixel_x = 15; pixel_y = 27 }, +/obj/structure/machinery/computer/cameras/almayer_brig{ + dir = 4; + desc = "Used to access the various cameras in the security brig."; + name = "brig cameras console" + }, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/processing) "xjK" = ( @@ -68586,10 +68613,8 @@ /turf/open/floor/almayer/cargo, /area/almayer/engineering/lower/engine_core) "yhg" = ( -/obj/structure/machinery/camera/autoname/almayer{ - dir = 4; - name = "ship-grade camera"; - pixel_y = 6 +/obj/structure/machinery/camera/autoname/almayer/brig{ + dir = 4 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cells) diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm index be0f85e60028..51623753bc0d 100644 --- a/maps/map_files/generic/Admin_level.dmm +++ b/maps/map_files/generic/Admin_level.dmm @@ -579,7 +579,6 @@ /turf/open/floor/almayer/dark_sterile, /area/adminlevel/ert_station) "tx" = ( -/obj/structure/machinery/hologram/holopad, /turf/open/floor/carpet, /area/centcom/living) "tP" = ( @@ -2211,7 +2210,7 @@ hp hp hp hp -kx +hp "} (2,1,1) = {" aa @@ -3570,7 +3569,7 @@ hp hp hp hp -hp +kx hp hp hp diff --git a/maps/templates/baseone.dmm b/maps/templates/baseone.dmm index c054c2310164..80962bf165c5 100644 --- a/maps/templates/baseone.dmm +++ b/maps/templates/baseone.dmm @@ -504,7 +504,7 @@ /turf/open/floor/almayer/blue/north, /area/adminlevel/bunker01/hydroponics) "bD" = ( -/obj/structure/machinery/hydro_floodlight, +/obj/structure/machinery/colony_floodlight, /turf/open/floor/almayer/blue/northeast, /area/adminlevel/bunker01/hydroponics) "bE" = ( diff --git a/maps/templates/basetwo.dmm b/maps/templates/basetwo.dmm index 890d433cb575..1051f515c96d 100644 --- a/maps/templates/basetwo.dmm +++ b/maps/templates/basetwo.dmm @@ -896,7 +896,7 @@ /turf/open/floor/almayer/blue/north, /area/adminlevel/bunker01/hydroponics) "df" = ( -/obj/structure/machinery/hydro_floodlight, +/obj/structure/machinery/colony_floodlight, /turf/open/floor/almayer/blue/northeast, /area/adminlevel/bunker01/hydroponics) "dg" = ( diff --git a/sound/effects/sebb.ogg b/sound/effects/sebb.ogg new file mode 100644 index 000000000000..5fd1f5b396d9 Binary files /dev/null and b/sound/effects/sebb.ogg differ diff --git a/sound/effects/sebb_beep.ogg b/sound/effects/sebb_beep.ogg new file mode 100644 index 000000000000..16c9347d0be2 Binary files /dev/null and b/sound/effects/sebb_beep.ogg differ diff --git a/sound/effects/sebb_explode.ogg b/sound/effects/sebb_explode.ogg new file mode 100644 index 000000000000..999385d9f068 Binary files /dev/null and b/sound/effects/sebb_explode.ogg differ diff --git a/sound/effects/throwing/swoosh1.ogg b/sound/effects/throwing/swoosh1.ogg new file mode 100644 index 000000000000..dd8a80a1073c Binary files /dev/null and b/sound/effects/throwing/swoosh1.ogg differ diff --git a/sound/effects/throwing/swoosh2.ogg b/sound/effects/throwing/swoosh2.ogg new file mode 100644 index 000000000000..012a3672b733 Binary files /dev/null and b/sound/effects/throwing/swoosh2.ogg differ diff --git a/sound/effects/throwing/swoosh3.ogg b/sound/effects/throwing/swoosh3.ogg new file mode 100644 index 000000000000..52cc1aa164b3 Binary files /dev/null and b/sound/effects/throwing/swoosh3.ogg differ diff --git a/sound/effects/throwing/swoosh4.ogg b/sound/effects/throwing/swoosh4.ogg new file mode 100644 index 000000000000..2639b4f255de Binary files /dev/null and b/sound/effects/throwing/swoosh4.ogg differ diff --git a/sound/machines/telephone/dial.ogg b/sound/machines/telephone/dial.ogg new file mode 100644 index 000000000000..0dffcc34cca7 Binary files /dev/null and b/sound/machines/telephone/dial.ogg differ diff --git a/sound/machines/telephone/phone_busy.ogg b/sound/machines/telephone/phone_busy.ogg new file mode 100644 index 000000000000..3ddb26e62cb3 Binary files /dev/null and b/sound/machines/telephone/phone_busy.ogg differ diff --git a/sound/machines/telephone/remote_hangup.ogg b/sound/machines/telephone/remote_hangup.ogg new file mode 100644 index 000000000000..f646548a5ebb Binary files /dev/null and b/sound/machines/telephone/remote_hangup.ogg differ diff --git a/sound/machines/telephone/remote_pickup.ogg b/sound/machines/telephone/remote_pickup.ogg new file mode 100644 index 000000000000..7d2cb8297c24 Binary files /dev/null and b/sound/machines/telephone/remote_pickup.ogg differ diff --git a/sound/machines/telephone/ring_outgoing.ogg b/sound/machines/telephone/ring_outgoing.ogg new file mode 100644 index 000000000000..67db23c49b20 Binary files /dev/null and b/sound/machines/telephone/ring_outgoing.ogg differ diff --git a/sound/machines/telephone/talk_phone1.ogg b/sound/machines/telephone/talk_phone1.ogg new file mode 100644 index 000000000000..53a665a389d1 Binary files /dev/null and b/sound/machines/telephone/talk_phone1.ogg differ diff --git a/sound/machines/telephone/talk_phone2.ogg b/sound/machines/telephone/talk_phone2.ogg new file mode 100644 index 000000000000..e0b39b36b85d Binary files /dev/null and b/sound/machines/telephone/talk_phone2.ogg differ diff --git a/sound/machines/telephone/talk_phone3.ogg b/sound/machines/telephone/talk_phone3.ogg new file mode 100644 index 000000000000..abdb73b8a87d Binary files /dev/null and b/sound/machines/telephone/talk_phone3.ogg differ diff --git a/sound/machines/telephone/talk_phone4.ogg b/sound/machines/telephone/talk_phone4.ogg new file mode 100644 index 000000000000..6809d1951ca8 Binary files /dev/null and b/sound/machines/telephone/talk_phone4.ogg differ diff --git a/sound/machines/telephone/talk_phone5.ogg b/sound/machines/telephone/talk_phone5.ogg new file mode 100644 index 000000000000..12b3619103b1 Binary files /dev/null and b/sound/machines/telephone/talk_phone5.ogg differ diff --git a/sound/machines/telephone/talk_phone6.ogg b/sound/machines/telephone/talk_phone6.ogg new file mode 100644 index 000000000000..b617fbd4b54f Binary files /dev/null and b/sound/machines/telephone/talk_phone6.ogg differ diff --git a/sound/machines/telephone/talk_phone7.ogg b/sound/machines/telephone/talk_phone7.ogg new file mode 100644 index 000000000000..f7055617efbc Binary files /dev/null and b/sound/machines/telephone/talk_phone7.ogg differ diff --git a/sound/voice/callstation_unavailable.ogg b/sound/voice/callstation_unavailable.ogg new file mode 100644 index 000000000000..992e87fa5703 Binary files /dev/null and b/sound/voice/callstation_unavailable.ogg differ diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 1bc583871c41..5ea797fe2230 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -1040,6 +1040,26 @@ em { color: #3eb489; } +.opforcmd { + color: #68bcec; +} + +.opformed { + color: #52c724; +} + +.opforeng { + color: #e9812d; +} + +.opforcct { + color: #ec3018; +} + +.opforspe { + color: #7221cf; +} + .medium { font-size: 110%; } diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss index 48232ff5fd24..87beb202a5ae 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss @@ -1072,6 +1072,26 @@ h2.alert { color: #3a7e65; } +.opforcmd { + color: #568dad; +} + +.opformed { + color: #3e921d; +} + +.opforeng { + color: #b16222; +} + +.opforcct { + color: #c42b17; +} + +.opforspe { + color: #611fad; +} + .medium { font-size: 110%; } diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts index 38f5448c3ef3..4e332bda6907 100644 --- a/tgui/packages/tgui/constants.ts +++ b/tgui/packages/tgui/constants.ts @@ -149,27 +149,27 @@ export const RADIO_CHANNELS = [ { name: 'UPP CMD', freq: 1252, - color: '#8f4a4b', + color: '#4a768f', }, { name: 'UPP ENG', freq: 1253, - color: '#8f4a4b', + color: '#8c5223', }, { name: 'UPP MED', freq: 1254, - color: '#8f4a4b', + color: '#159e73', }, { name: 'UPP CCT', freq: 1255, - color: '#8f4a4b', + color: '#b3222e', }, { name: 'UPP KDO', freq: 1259, - color: '#8f4a4b', + color: '#789e18', }, { name: 'CLF', @@ -179,22 +179,22 @@ export const RADIO_CHANNELS = [ { name: 'CLF CMD', freq: 1272, - color: '#8e83ca', + color: '#4a768f', }, { name: 'CLF ENG', freq: 1273, - color: '#8e83ca', + color: '#8c5223', }, { name: 'CLF MED', freq: 1274, - color: '#8e83ca', + color: '#159e73', }, { name: 'CLF CCT', freq: 1275, - color: '#8e83ca', + color: '#b3222e', }, { name: 'LSTN BUG A', diff --git a/tgui/packages/tgui/interfaces/HealthScan.jsx b/tgui/packages/tgui/interfaces/HealthScan.jsx index 1df8a86c06e2..8b1d82460bf2 100644 --- a/tgui/packages/tgui/interfaces/HealthScan.jsx +++ b/tgui/packages/tgui/interfaces/HealthScan.jsx @@ -45,6 +45,7 @@ export const HealthScan = (props) => { hugged, detail_level, permadead, + heart_broken, advice, species, holocard, @@ -115,9 +116,11 @@ export const HealthScan = (props) => { {permadead - ? 'Permanently deceased' + ? heart_broken + ? 'Myocardial rupture, surgical intervention required' + : 'Permanently deceased' : Synthetic - ? 'Central power system shutdown, reboot possible.' + ? 'Central power system shutdown, reboot possible' : 'Cardiac arrest, defibrillation possible'} diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 6b7089915514..36ceb6359cde 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -158,6 +158,10 @@ const marineSplitter = (members: Array) => { const charlieSquad: Array = []; const deltaSquad: Array = []; const foxtrotSquad: Array = []; + const echoSquad: Array = []; + const CBRNSquad: Array = []; + const FORECONSquad: Array = []; + const SOFSquad: Array = []; const other: Array = []; members.forEach((x) => { @@ -171,6 +175,14 @@ const marineSplitter = (members: Array) => { deltaSquad.push(x); } else if (x.job?.includes('Foxtrot')) { foxtrotSquad.push(x); + } else if (x.job?.includes('Echo')) { + echoSquad.push(x); + } else if (x.job?.includes('CBRN')) { + CBRNSquad.push(x); + } else if (x.job?.includes('FORECON')) { + FORECONSquad.push(x); + } else if (x.job?.includes('SOF')) { + SOFSquad.push(x); } else { other.push(x); } @@ -181,7 +193,11 @@ const marineSplitter = (members: Array) => { buildSquadObservable('Bravo', 'yellow', bravoSquad), buildSquadObservable('Charlie', 'purple', charlieSquad), buildSquadObservable('Delta', 'blue', deltaSquad), - buildSquadObservable('Foxtrot', 'teal', foxtrotSquad), + buildSquadObservable('Foxtrot', 'brown', foxtrotSquad), + buildSquadObservable('Echo', 'teal', echoSquad), + buildSquadObservable('CBRN', 'dark-blue', CBRNSquad), + buildSquadObservable('FORECON', 'green', FORECONSquad), + buildSquadObservable('SOF', 'red', SOFSquad), buildSquadObservable('Other', 'grey', other), ]; return squads; diff --git a/tgui/packages/tgui/interfaces/StaffWho.jsx b/tgui/packages/tgui/interfaces/StaffWho.jsx new file mode 100644 index 000000000000..1ce71c9b5001 --- /dev/null +++ b/tgui/packages/tgui/interfaces/StaffWho.jsx @@ -0,0 +1,78 @@ +import { useBackend } from '../backend'; +import { Button, Collapsible, Stack } from '../components'; +import { Window } from '../layouts'; + +export const StaffWho = (props, context) => { + const { data } = useBackend(context); + const { admin, administrators } = data; + + return ( + + + {administrators !== undefined ? ( + + + {administrators.map((x, index) => ( + + {x.admins.map((x, index) => ( + + ))} + + ))} + + + ) : null} + + + ); +}; + +const StaffWhoCollapsible = (props, context) => { + const { title, color, children } = props; + return ( + + {children} + + ); +}; + +const GetAdminInfo = (props, context) => { + const { admin, content, color, text } = props; + return admin ? ( + + ) : ( + + ); +}; diff --git a/tgui/packages/tgui/interfaces/WeaponStats.jsx b/tgui/packages/tgui/interfaces/WeaponStats.jsx index abbb32f0f8af..4def237f6b9c 100644 --- a/tgui/packages/tgui/interfaces/WeaponStats.jsx +++ b/tgui/packages/tgui/interfaces/WeaponStats.jsx @@ -281,13 +281,27 @@ const Accuracy = (props) => { const Range = (props) => { const { data } = useBackend(); - const { max_range, range_max, falloff, falloff_max } = data; + const { + max_range, + range_max, + falloff, + falloff_max, + effective_range, + effective_range_max, + } = data; return ( <> Max range: {max_range} / {range_max} + + Effective range: {effective_range} + + Falloff: {falloff} / {falloff_max} @@ -298,16 +312,13 @@ const Range = (props) => { const ArmourPen = (props) => { const { data } = useBackend(); - const { penetration, penetration_max, armor_punch, punch_max } = data; + const { penetration, penetration_max } = data; return ( <> Armour penetration: {penetration} / {penetration_max} - - Armour punch: {armor_punch} / {punch_max} - ); }; @@ -317,9 +328,7 @@ const DamageTable = (props) => { const { damage_armor_profile_marine, damage_armor_profile_xeno, - damage_armor_profile_armorbreak, damage_armor_profile_headers, - glob_armourbreak, } = data; return (
@@ -346,14 +355,6 @@ const DamageTable = (props) => { {entry} ))} - {!glob_armourbreak ? ( - - Armor break - {map(damage_armor_profile_armorbreak, (entry, i) => ( - {entry} - ))} - - ) : null}
); diff --git a/tgui/packages/tgui/interfaces/Who.jsx b/tgui/packages/tgui/interfaces/Who.jsx new file mode 100644 index 000000000000..dccf3d1e39f0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Who.jsx @@ -0,0 +1,189 @@ +import { useBackend, useLocalState } from '../backend'; +import { + Box, + Button, + Collapsible, + Icon, + Input, + Section, + Stack, +} from '../components'; +import { Window } from '../layouts'; + +export const Who = (props, context) => { + const { act, data } = useBackend(context); + const { + admin, + all_clients, + total_players = [], + additional_info = [], + factions = [], + xenomorphs = [], + } = data; + + const [searchQuery, setSearchQuery] = useLocalState('searchQuery', ''); + + const searchPlayers = () => + total_players.filter((player) => isMatch(player, searchQuery)); + + const filteredTotalPlayers = searchPlayers(); + + return ( + + + + +
+ + + + + + + act('get_player_panel', { + ckey: searchPlayers()?.[0].ckey, + }) + } + onInput={(e) => setSearchQuery(e.target.value)} + placeholder="Search..." + value={searchQuery} + /> + + +
+
+ +
+ + {filteredTotalPlayers.length ? ( + + {filteredTotalPlayers.map((x) => ( + + ))} + + ) : null} + +
+ {admin !== 0 ? ( +
+ + + {additional_info.length + ? additional_info.map((x, index) => ( + + )) + : null} + {factions.length + ? factions.map((x, index) => ( + + )) + : null} + {xenomorphs.length + ? xenomorphs.map((x, index) => ( + + )) + : null} + + +
+ ) : null} +
+
+
+
+ ); +}; + +const WhoCollapsible = (props, context) => { + const { title, color, children } = props; + return ( + + {children} + + ); +}; + +const GetAddInfo = (props, context) => { + const { act } = useBackend(context); + const { content, color, text } = props; + + return ( + + ); +}; + +const GetPlayerInfo = (props, context) => { + const { act } = useBackend(context); + const { + admin, + player: { ckey, ckey_color, color, text }, + } = props; + return admin !== 0 ? ( + + ) : ( + + ); +}; + +const isMatch = (player, searchQuery) => { + if (!searchQuery) { + return true; + } + + return ( + player.ckey.toLowerCase().includes(searchQuery?.toLowerCase()) || false + ); +}; diff --git a/tgui/packages/tgui/layouts/Layout.tsx b/tgui/packages/tgui/layouts/Layout.tsx index b79bec81c4e8..db8504c26db1 100644 --- a/tgui/packages/tgui/layouts/Layout.tsx +++ b/tgui/packages/tgui/layouts/Layout.tsx @@ -21,7 +21,7 @@ type Props = Partial<{ BoxProps; export function Layout(props: Props) { - const { className, theme = 'nanotrasen', children, ...rest } = props; + const { className, theme = 'weyland_yutani', children, ...rest } = props; return (
diff --git a/tgui/packages/tgui/styles/themes/ntos.scss b/tgui/packages/tgui/styles/themes/ntos.scss index 8b102b477781..acecada4ed46 100644 --- a/tgui/packages/tgui/styles/themes/ntos.scss +++ b/tgui/packages/tgui/styles/themes/ntos.scss @@ -6,14 +6,14 @@ @use 'sass:color'; @use 'sass:meta'; -$nanotrasen: #384e68; +$weyland_yutani: #384e68; @use '../colors.scss' with ( $fg-map-keys: (), $bg-map-keys: () ); @use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) + $color-bg: color.scale($weyland_yutani, $lightness: -45%) ); .theme-ntos { @@ -21,14 +21,14 @@ $nanotrasen: #384e68; @include meta.load-css( '../components/Button.scss', $with: ( - 'color-default': $nanotrasen, + 'color-default': $weyland_yutani, 'color-transparent-text': rgba(227, 240, 255, 0.75) ) ); @include meta.load-css( '../components/ProgressBar.scss', $with: ( - 'color-default-fill': $nanotrasen, + 'color-default-fill': $weyland_yutani, 'background-color': rgba(0, 0, 0, 0.5) ) ); @@ -39,6 +39,6 @@ $nanotrasen: #384e68; @include meta.load-css('../layouts/Window.scss'); @include meta.load-css( '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) + $with: ('background-color': color.scale($weyland_yutani, $lightness: -25%)) ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss index b22ad60fc3f2..f10e22b3d7ca 100644 --- a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss @@ -6,14 +6,14 @@ @use 'sass:color'; @use 'sass:meta'; -$nanotrasen: #2c2c2c; +$weyland_yutani: #2c2c2c; @use '../colors.scss' with ( $fg-map-keys: (), $bg-map-keys: () ); @use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) + $color-bg: color.scale($weyland_yutani, $lightness: -45%) ); .theme-ntos_darkmode { @@ -21,14 +21,14 @@ $nanotrasen: #2c2c2c; @include meta.load-css( '../components/Button.scss', $with: ( - 'color-default': $nanotrasen, + 'color-default': $weyland_yutani, 'color-transparent-text': rgba(227, 240, 255, 0.75) ) ); @include meta.load-css( '../components/ProgressBar.scss', $with: ( - 'color-default-fill': $nanotrasen, + 'color-default-fill': $weyland_yutani, 'background-color': rgba(0, 0, 0, 0.5) ) ); @@ -39,6 +39,6 @@ $nanotrasen: #2c2c2c; @include meta.load-css('../layouts/Window.scss'); @include meta.load-css( '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) + $with: ('background-color': color.scale($weyland_yutani, $lightness: -25%)) ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss index 9cf1a647b778..f50b40f2b909 100644 --- a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss @@ -6,7 +6,7 @@ @use 'sass:color'; @use 'sass:meta'; -$nanotrasen: #ffffff; +$weyland_yutani: #ffffff; @use '../colors.scss' with ( $primary: #000000, @@ -21,12 +21,12 @@ $nanotrasen: #ffffff; // Components @include meta.load-css( '../components/Button.scss', - $with: ('color-default': $nanotrasen) + $with: ('color-default': $weyland_yutani) ); @include meta.load-css( '../components/ProgressBar.scss', $with: ( - 'color-default-fill': $nanotrasen, + 'color-default-fill': $weyland_yutani, 'background-color': rgba(0, 0, 0, 0.5) ) );