diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 94428ba7d9b3..0f04006859e9 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -241,8 +241,16 @@ GLOBAL_LIST_INIT(whitelist_hierarchy, list(WHITELIST_NORMAL, WHITELIST_COUNCIL, #define FACTION_LIST_MARINE list(FACTION_MARINE) #define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE) -#define FACTION_LIST_ERT list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE) +#define FACTION_LIST_ERT list(FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO) #define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) +#define FACTION_LIST_UPP list(FACTION_UPP) +#define FACTION_LIST_CLF list(FACTION_CLF) +#define FACTION_LIST_TWE list(FACTION_TWE) +#define FACTION_LIST_FREELANCER list(FACTION_FREELANCER) +#define FACTION_LIST_CONTRACTOR list(FACTION_CONTRACTOR) +#define FACTION_LIST_MERCENARY list(FACTION_MERCENARY) +#define FACTION_LIST_MARSHAL list(FACTION_MARSHAL) +#define FACTION_LIST_DUTCH list(FACTION_DUTCH) #define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY) #define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP) #define FACTION_LIST_MARINE_TWE list(FACTION_MARINE, FACTION_TWE) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 50aec8845dd0..e2ebffe55959 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -1,3 +1,6 @@ +#define CANVAS_COOLDOWN_TIME 4 MINUTES +#define FLATTEN_MAP_COOLDOWN_TIME 3 MINUTES + /** * # Minimaps subsystem * @@ -438,11 +441,11 @@ SUBSYSTEM_DEF(minimaps) if(faction == FACTION_MARINE) if(!COOLDOWN_FINISHED(GLOB, uscm_flatten_map_icon_cooldown)) return FALSE - COOLDOWN_START(GLOB, uscm_flatten_map_icon_cooldown, flatten_map_cooldown_time) + COOLDOWN_START(GLOB, uscm_flatten_map_icon_cooldown, FLATTEN_MAP_COOLDOWN_TIME) else if(faction == XENO_HIVE_NORMAL) if(!COOLDOWN_FINISHED(GLOB, xeno_flatten_map_icon_cooldown)) return FALSE - COOLDOWN_START(GLOB, xeno_flatten_map_icon_cooldown, flatten_map_cooldown_time) + COOLDOWN_START(GLOB, xeno_flatten_map_icon_cooldown, FLATTEN_MAP_COOLDOWN_TIME) else return FALSE @@ -500,6 +503,8 @@ SUBSYSTEM_DEF(minimaps) qdel(svg_store_overlay) debug_log("SVG coordinates for [faction] are not implemented!") +#define can_draw(faction, user) ((faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT)) || (faction == XENO_HIVE_NORMAL && isqueen(user))) + /datum/controller/subsystem/minimaps/proc/fetch_tacmap_datum(zlevel, flags) var/hash = "[zlevel]-[flags]" if(hashed_tacmaps[hash]) @@ -625,9 +630,6 @@ SUBSYSTEM_DEF(minimaps) var/toolbar_color_selection = "black" var/toolbar_updated_selection = "black" - var/canvas_cooldown_time = 4 MINUTES - var/flatten_map_cooldown_time = 3 MINUTES - /// boolean value to keep track if the canvas has been updated or not, the value is used in tgui state. var/updated_canvas = FALSE /// current flattend map @@ -740,7 +742,6 @@ SUBSYSTEM_DEF(minimaps) else data["canvasCooldown"] = max(GLOB.uscm_canvas_cooldown - world.time, 0) - data["nextCanvasTime"] = canvas_cooldown_time data["updatedCanvas"] = updated_canvas data["lastUpdateTime"] = last_update_time @@ -750,6 +751,7 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap/ui_static_data(mob/user) var/list/data = list() + data["mapRef"] = map_holder?.map_ref data["canDraw"] = FALSE data["canViewTacmap"] = TRUE @@ -761,6 +763,7 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap/drawing/ui_static_data(mob/user) var/list/data = list() + data["canvasCooldownDuration"] = CANVAS_COOLDOWN_TIME data["mapRef"] = map_holder?.map_ref data["canDraw"] = FALSE data["mapFallback"] = wiki_map_fallback @@ -773,7 +776,7 @@ SUBSYSTEM_DEF(minimaps) data["canViewTacmap"] = is_xeno data["canViewCanvas"] = faction == FACTION_MARINE || faction == XENO_HIVE_NORMAL - if(faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || faction == XENO_HIVE_NORMAL && isqueen(user)) + if(can_draw(faction, user)) data["canDraw"] = TRUE data["canViewTacmap"] = TRUE @@ -781,6 +784,8 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap/drawing/status_tab_view/ui_static_data(mob/user) var/list/data = list() + + data["canvasCooldownDuration"] = CANVAS_COOLDOWN_TIME data["mapFallback"] = wiki_map_fallback data["canDraw"] = FALSE data["canViewTacmap"] = FALSE @@ -791,6 +796,8 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap/drawing/status_tab_view/xeno/ui_static_data(mob/user) var/list/data = list() + + data["canvasCooldownDuration"] = CANVAS_COOLDOWN_TIME data["mapFallback"] = wiki_map_fallback data["canDraw"] = FALSE data["canViewTacmap"] = FALSE @@ -814,16 +821,21 @@ SUBSYSTEM_DEF(minimaps) var/mob/user = ui.user var/mob/living/carbon/xenomorph/xeno = user var/faction = istype(xeno) ? xeno.hivenumber : user.faction - if(faction == FACTION_NEUTRAL && isobserver(user)) + var/is_observer = isobserver(user) + if(faction == FACTION_NEUTRAL && is_observer) faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + var/drawing_allowed = !is_observer && can_draw(faction, user) - switch (action) - if ("menuSelect") + switch(action) + if("menuSelect") if(params["selection"] != "new canvas") if(updated_canvas) updated_canvas = FALSE toolbar_updated_selection = toolbar_color_selection // doing this if it == canvas can cause a latency issue with the stroke. else + if(!drawing_allowed) + msg_admin_niche("[key_name(user)] made an unauthorized attempt to 'menuSelect' the 'new canvas' panel of the [faction] tacmap!") + return FALSE distribute_current_map_png(faction) last_update_time = world.time // An attempt to get the image to load on first try in the interface, but doesn't seem always reliable @@ -832,60 +844,68 @@ SUBSYSTEM_DEF(minimaps) old_map = get_tacmap_data_png(faction) current_svg = get_tacmap_data_svg(faction) - if ("updateCanvas") - // forces state change, this will export the svg. + if("updateCanvas") toolbar_updated_selection = "export" updated_canvas = TRUE action_queue_change += 1 - if ("clearCanvas") + if("clearCanvas") toolbar_updated_selection = "clear" updated_canvas = FALSE action_queue_change += 1 - if ("undoChange") + if("undoChange") toolbar_updated_selection = "undo" updated_canvas = FALSE action_queue_change += 1 - if ("selectColor") + if("selectColor") var/newColor = params["color"] if(newColor) toolbar_color_selection = newColor toolbar_updated_selection = newColor action_queue_change += 1 - if ("onDraw") + if("onDraw") updated_canvas = FALSE - if ("selectAnnouncement") + if("selectAnnouncement") + if(!drawing_allowed) + msg_admin_niche("[key_name(user)] made an unauthorized attempt to 'selectAnnouncement' the [faction] tacmap!") + return FALSE + if(!istype(params["image"], /list)) // potentially very serious? return FALSE + var/cooldown_satisfied = FALSE if(faction == FACTION_MARINE) - GLOB.uscm_flat_tacmap_data += new_current_map + cooldown_satisfied = COOLDOWN_FINISHED(GLOB, uscm_canvas_cooldown) else if(faction == XENO_HIVE_NORMAL) - GLOB.xeno_flat_tacmap_data += new_current_map - - store_current_svg_coords(faction, params["image"], user) - current_svg = get_tacmap_data_svg(faction) - old_map = get_tacmap_data_png(faction) + cooldown_satisfied = COOLDOWN_FINISHED(GLOB, xeno_canvas_cooldown) + if(!cooldown_satisfied) + msg_admin_niche("[key_name(user)] attempted to 'selectAnnouncement' the [faction] tacmap while it is still on cooldown!") + return FALSE if(faction == FACTION_MARINE) - COOLDOWN_START(GLOB, uscm_canvas_cooldown, canvas_cooldown_time) - var/mob/living/carbon/human/human_leader = user + GLOB.uscm_flat_tacmap_data += new_current_map + COOLDOWN_START(GLOB, uscm_canvas_cooldown, CANVAS_COOLDOWN_TIME) for(var/datum/squad/current_squad in GLOB.RoleAuthority.squads) current_squad.send_maptext("Tactical map update in progress...", "Tactical Map:") + var/mob/living/carbon/human/human_leader = user human_leader.visible_message(SPAN_BOLDNOTICE("Tactical map update in progress...")) playsound_client(human_leader.client, "sound/effects/sos-morse-code.ogg") notify_ghosts(header = "Tactical Map", message = "The USCM tactical map has been updated.", ghost_sound = "sound/effects/sos-morse-code.ogg", notify_volume = 80, action = NOTIFY_USCM_TACMAP, enter_link = "uscm_tacmap=1", enter_text = "View", source = owner) - else if(faction == XENO_HIVE_NORMAL) - var/mutable_appearance/appearance = mutable_appearance(icon('icons/mob/hud/actions_xeno.dmi'), "toggle_queen_zoom") - COOLDOWN_START(GLOB, xeno_canvas_cooldown, canvas_cooldown_time) + GLOB.xeno_flat_tacmap_data += new_current_map + COOLDOWN_START(GLOB, xeno_canvas_cooldown, CANVAS_COOLDOWN_TIME) xeno_maptext("The Queen has updated our hive mind map", "We sense something unusual...", faction) + var/mutable_appearance/appearance = mutable_appearance(icon('icons/mob/hud/actions_xeno.dmi'), "toggle_queen_zoom") notify_ghosts(header = "Tactical Map", message = "The Xenomorph tactical map has been updated.", ghost_sound = "sound/voice/alien_distantroar_3.ogg", notify_volume = 50, action = NOTIFY_XENO_TACMAP, enter_link = "xeno_tacmap=1", enter_text = "View", source = user, alert_overlay = appearance) + store_current_svg_coords(faction, params["image"], user) + current_svg = get_tacmap_data_svg(faction) + old_map = get_tacmap_data_png(faction) + toolbar_updated_selection = toolbar_color_selection message_admins("[key_name(user)] has updated the tactical map for [faction].") updated_canvas = FALSE @@ -995,3 +1015,7 @@ SUBSYSTEM_DEF(minimaps) if(XENO_HIVE_RENEGADE) return MINIMAP_FLAG_XENO_RENEGADE return 0 + +#undef CANVAS_COOLDOWN_TIME +#undef FLATTEN_MAP_COOLDOWN_TIME +#undef can_draw diff --git a/code/game/objects/items/reagent_containers/food/drinks.dm b/code/game/objects/items/reagent_containers/food/drinks.dm index 9f88990e5350..db83723bc8df 100644 --- a/code/game/objects/items/reagent_containers/food/drinks.dm +++ b/code/game/objects/items/reagent_containers/food/drinks.dm @@ -23,6 +23,10 @@ to_chat(user, SPAN_DANGER("The [src.name] is empty!")) return FALSE + if(HAS_TRAIT(M, TRAIT_CANNOT_EAT)) + to_chat(user, SPAN_DANGER("[user == M ? "You are" : "[M] is"] unable to drink!")) + return FALSE + if(M == user) to_chat(M, SPAN_NOTICE(" You swallow a gulp from \the [src].")) if(reagents.total_volume) diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm index 0a1d0e8aad07..927501286f13 100644 --- a/code/game/objects/items/reagent_containers/food/snacks.dm +++ b/code/game/objects/items/reagent_containers/food/snacks.dm @@ -42,7 +42,7 @@ ..() if (world.time <= user.next_move) - return + return FALSE attack(user, user, "head")//zone does not matter user.next_move += attack_speed @@ -51,24 +51,24 @@ to_chat(user, SPAN_DANGER("None of [src] left, oh no!")) M.drop_inv_item_on_ground(src) //so icons update :[ qdel(src) - return 0 + return FALSE if(package) to_chat(M, SPAN_WARNING("How do you expect to eat this with the package still on?")) - return 0 + return FALSE if(istype(M, /mob/living/carbon)) var/mob/living/carbon/C = M var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25) if(fullness > NUTRITION_HIGH && world.time < C.overeat_cooldown) to_chat(user, SPAN_WARNING("[user == M ? "You" : "They"] don't feel like eating more right now.")) - return + return FALSE if(issynth(C)) fullness = 200 //Synths never get full if(HAS_TRAIT(M, TRAIT_CANNOT_EAT)) //Do not feed the Working Joes to_chat(user, SPAN_DANGER("[user == M ? "You are" : "[M] is"] unable to eat!")) - return + return FALSE if(fullness > NUTRITION_HIGH) C.overeat_cooldown = world.time + OVEREAT_TIME @@ -120,9 +120,9 @@ reagents.trans_to_ingest(M, reagents.total_volume) bitecount++ On_Consume(M) - return 1 + return TRUE - return 0 + return FALSE /obj/item/reagent_container/food/snacks/afterattack(obj/target, mob/user, proximity) return ..() diff --git a/code/modules/decorators/christmas.dm b/code/modules/decorators/christmas.dm index 5c4126510056..6d3f52ffc0f6 100644 --- a/code/modules/decorators/christmas.dm +++ b/code/modules/decorators/christmas.dm @@ -51,6 +51,7 @@ helmet.icon_override = 'icons/mob/humans/onmob/head_0.dmi' helmet.flags_inv_hide = HIDEEARS|HIDEALLHAIR helmet.flags_marine_helmet = NO_FLAGS + helmet.flags_atom |= NO_SNOW_TYPE|NO_NAME_OVERRIDE if(prob(50)) helmet.icon_state = "santa_hat_red" else diff --git a/code/modules/gear_presets/contractor.dm b/code/modules/gear_presets/contractor.dm index ea77fe4a4d0f..896771d26aca 100644 --- a/code/modules/gear_presets/contractor.dm +++ b/code/modules/gear_presets/contractor.dm @@ -4,7 +4,7 @@ rank = JOB_CONTRACTOR idtype = /obj/item/card/id/data faction = FACTION_CONTRACTOR - faction_group = FACTION_LIST_ERT + faction_group = list(FACTION_CONTRACTOR) languages = list(LANGUAGE_ENGLISH, LANGUAGE_SPANISH, LANGUAGE_RUSSIAN) var/human_versus_human = FALSE var/headset_type = /obj/item/device/radio/headset/distress/contractor diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 5fe27c5e5167..50496cef31c5 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -53,6 +53,15 @@ var/list/survivors = list() var/list/xenos = list() var/list/ert_members = list() + var/list/upp = list() + var/list/clf = list() + var/list/wy = list() + var/list/twe = list() + var/list/freelancer = list() + var/list/contractor = list() + var/list/mercenary = list() + var/list/dutch = list() + var/list/marshal = list() var/list/synthetics = list() var/list/predators = list() var/list/animals = list() @@ -132,12 +141,30 @@ if(SSticker.mode.is_in_endgame == TRUE && !is_mainship_level(M.z) && !(human.faction in FACTION_LIST_ERT)) escaped += list(serialized) + else if(human.faction in FACTION_LIST_WY) + wy += list(serialized) else if(issynth(human) && !isinfiltratorsynthetic(human)) synthetics += list(serialized) else if(isyautja(human)) predators += list(serialized) else if(human.faction in FACTION_LIST_ERT) ert_members += list(serialized) + else if(human.faction in FACTION_LIST_UPP) + upp += list(serialized) + else if(human.faction in FACTION_LIST_CLF) + clf += list(serialized) + else if(human.faction in FACTION_LIST_TWE) + twe += list(serialized) + else if(human.faction in FACTION_LIST_FREELANCER) + freelancer += list(serialized) + else if(human.faction in FACTION_LIST_CONTRACTOR) + contractor += list(serialized) + else if(human.faction in FACTION_LIST_MERCENARY) + mercenary += list(serialized) + else if(human.faction in FACTION_LIST_MARSHAL) + marshal += list(serialized) + else if(human.faction in FACTION_LIST_DUTCH) + dutch += list(serialized) else if(human.faction in FACTION_LIST_MARINE) marines += list(serialized) else if(issurvivorjob(human.job)) @@ -156,6 +183,15 @@ data["survivors"] = survivors data["xenos"] = xenos data["ert_members"] = ert_members + data["upp"] = upp + data["clf"] = clf + data["wy"] = wy + data["twe"] = twe + data["freelancer"] = freelancer + data["contractor"] = contractor + data["mercenary"] = mercenary + data["dutch"] = dutch + data["marshal"] = marshal data["synthetics"] = synthetics data["predators"] = predators data["animals"] = animals diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm index ea1c734d9482..e7f72e7e013e 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/boiler/boiler_abilities.dm @@ -13,7 +13,7 @@ macro_path = /datum/action/xeno_action/verb/verb_acid_lance action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 190 + xeno_cooldown = 19 SECONDS // Config var/stack_time = 10 @@ -96,7 +96,7 @@ macro_path = /datum/action/xeno_action/verb/verb_boiler_trap action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 205 + xeno_cooldown = 20.5 SECONDS /// Config var/trap_ttl = 100 @@ -112,7 +112,7 @@ macro_path = /datum/action/xeno_action/verb/verb_acid_mine action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 55 + xeno_cooldown = 5.5 SECONDS var/empowered = FALSE @@ -127,7 +127,7 @@ macro_path = /datum/action/xeno_action/verb/verb_acid_shotgun action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_3 - xeno_cooldown = 130 + xeno_cooldown = 13 SECONDS var/ammo_type = /datum/ammo/xeno/acid_shotgun diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/crusher/crusher_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/crusher/crusher_abilities.dm index 87f58df34472..4691d70321c3 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/crusher/crusher_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/crusher/crusher_abilities.dm @@ -39,7 +39,7 @@ macro_path = /datum/action/xeno_action/verb/verb_crusher_stomp action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 180 + xeno_cooldown = 18 SECONDS plasma_cost = 30 var/damage = 65 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_abilities.dm index 3949e4ac9b80..22d5f4b57aa2 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/defender/defender_abilities.dm @@ -18,7 +18,7 @@ macro_path = /datum/action/xeno_action/verb/verb_headbutt action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 40 + xeno_cooldown = 4 SECONDS /datum/action/xeno_action/onclick/tail_sweep name = "Tail Sweep" @@ -28,7 +28,7 @@ action_type = XENO_ACTION_ACTIVATE ability_primacy = XENO_PRIMARY_ACTION_3 plasma_cost = 10 - xeno_cooldown = 110 + xeno_cooldown = 11 SECONDS /datum/action/xeno_action/activable/fortify name = "Fortify" diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/facehugger/facehugger_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/facehugger/facehugger_abilities.dm index 91bda707ec45..ee1fed3094a7 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/facehugger/facehugger_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/facehugger/facehugger_abilities.dm @@ -5,7 +5,7 @@ macro_path = /datum/action/xeno_action/verb/verb_pounce action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 30 + xeno_cooldown = 3 SECONDS plasma_cost = 0 // Config options diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm index 2facee1edc9d..fd525701b12d 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lurker/lurker_abilities.dm @@ -2,7 +2,7 @@ macro_path = /datum/action/xeno_action/verb/verb_pounce action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 60 + xeno_cooldown = 6 SECONDS plasma_cost = 20 // Config options @@ -70,7 +70,7 @@ macro_path = /datum/action/xeno_action/verb/verb_crippling_strike ability_primacy = XENO_PRIMARY_ACTION_3 action_type = XENO_ACTION_ACTIVATE - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS plasma_cost = 20 var/buff_duration = 50 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm index 11317bed9af1..7327454ab74e 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_abilities.dm @@ -25,7 +25,7 @@ macro_path = /datum/action/xeno_action/verb/verb_dash action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 110 + xeno_cooldown = 11 SECONDS plasma_cost = 50 // Config options @@ -51,7 +51,7 @@ macro_path = /datum/action/xeno_action/verb/verb_cleave ability_primacy = XENO_PRIMARY_ACTION_3 action_type = XENO_ACTION_CLICK - xeno_cooldown = 120 + xeno_cooldown = 12 SECONDS // Root config var/root_duration_unbuffed = 1 SECONDS @@ -138,7 +138,7 @@ macro_path = /datum/action/xeno_action/verb/verb_oppressor_punch action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS plasma_cost = 55 // Configurables @@ -164,7 +164,7 @@ macro_path = /datum/action/xeno_action/verb/verb_crush ability_primacy = XENO_PRIMARY_ACTION_3 action_type = XENO_ACTION_CLICK - xeno_cooldown = 130 + xeno_cooldown = 13 SECONDS plasma_cost = 80 // Config @@ -180,7 +180,7 @@ macro_path = /datum/action/xeno_action/verb/verb_prae_impale ability_primacy = XENO_PRIMARY_ACTION_1 action_type = XENO_ACTION_CLICK - xeno_cooldown = 130 + xeno_cooldown = 13 SECONDS plasma_cost = 80 /datum/action/xeno_action/onclick/prae_dodge @@ -191,7 +191,7 @@ ability_primacy = XENO_PRIMARY_ACTION_2 action_type = XENO_ACTION_CLICK plasma_cost = 200 - xeno_cooldown = 190 + xeno_cooldown = 19 SECONDS // Config var/duration = 70 @@ -204,7 +204,7 @@ macro_path = /datum/action/xeno_action/verb/verb_prae_tail_trip ability_primacy = XENO_PRIMARY_ACTION_3 action_type = XENO_ACTION_CLICK - xeno_cooldown = 130 + xeno_cooldown = 13 SECONDS plasma_cost = 30 // Config @@ -224,7 +224,7 @@ macro_path = /datum/action/xeno_action/verb/verb_dash action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS plasma_cost = 40 // Config options @@ -255,7 +255,7 @@ ability_primacy = XENO_PRIMARY_ACTION_4 plasma_cost = 80 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS // Configurable options spray_type = ACID_SPRAY_LINE @@ -270,7 +270,7 @@ /datum/action/xeno_action/activable/spray_acid/prae_warden ability_primacy = XENO_PRIMARY_ACTION_2 plasma_cost = 130 - xeno_cooldown = 130 + xeno_cooldown = 13 SECONDS // Configurable options @@ -288,7 +288,7 @@ // todo: macro action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_3 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS plasma_cost = 100 // Config diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_abilities.dm index 4f9c5f298637..3744fb7823e8 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/ravager/ravager_abilities.dm @@ -136,7 +136,7 @@ action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 plasma_cost = 0 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS // Config var/shard_cost = 75 @@ -150,7 +150,7 @@ action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_3 plasma_cost = 0 - xeno_cooldown = 300 + xeno_cooldown = 30 SECONDS // Config values var/shard_cost = 50 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_abilities.dm index 510f161d8a86..2880dd15eb5a 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/runner/runner_abilities.dm @@ -5,7 +5,7 @@ macro_path = /datum/action/xeno_action/verb/verb_pounce action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 30 + xeno_cooldown = 3 SECONDS plasma_cost = 0 // Config options @@ -28,7 +28,7 @@ macro_path = /datum/action/xeno_action/verb/verb_runner_bonespurs action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 110 + xeno_cooldown = 11 SECONDS plasma_cost = 0 var/ammo_type = /datum/ammo/xeno/bone_chips/spread/runner_skillshot diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/spitter/spitter_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/spitter/spitter_abilities.dm index abc1e43bfccd..20febc22c4a4 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/spitter/spitter_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/spitter/spitter_abilities.dm @@ -34,7 +34,7 @@ action_type = XENO_ACTION_CLICK plasma_cost = 50 - xeno_cooldown = 80 + xeno_cooldown = 8 SECONDS // Configurable options spray_type = ACID_SPRAY_LINE // Enum for the shape of spray to do diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm index 2c16477c1414..4f40e1914540 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/warrior/warrior_abilities.dm @@ -6,7 +6,7 @@ macro_path = /datum/action/xeno_action/verb/verb_fling action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_3 - xeno_cooldown = 60 + xeno_cooldown = 6 SECONDS // Configurables var/fling_distance = 4 @@ -22,7 +22,7 @@ macro_path = /datum/action/xeno_action/verb/verb_lunge action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_2 - xeno_cooldown = 100 + xeno_cooldown = 10 SECONDS // Configurables var/grab_range = 4 @@ -36,7 +36,7 @@ macro_path = /datum/action/xeno_action/verb/verb_punch action_type = XENO_ACTION_CLICK ability_primacy = XENO_PRIMARY_ACTION_1 - xeno_cooldown = 45 + xeno_cooldown = 4.5 SECONDS // Configurables var/base_damage = 25 diff --git a/html/changelogs/AutoChangeLog-pr-5058.yml b/html/changelogs/AutoChangeLog-pr-5058.yml new file mode 100644 index 000000000000..6edfaed15ce4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5058.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - rscadd: "Factions are now properly separated in the observe menu as a ghost." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5160.yml b/html/changelogs/AutoChangeLog-pr-5160.yml deleted file mode 100644 index 730a2bc41181..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5160.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - bugfix: "Lurker can tail jab over ledges and window frames." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5241.yml b/html/changelogs/AutoChangeLog-pr-5241.yml new file mode 100644 index 000000000000..acb4b1887337 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5241.yml @@ -0,0 +1,4 @@ +author: "InsaneRed" +delete-after: True +changes: + - code_imp: "Converts xenomorph cooldowns into SECONDS" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5250.yml b/html/changelogs/AutoChangeLog-pr-5250.yml deleted file mode 100644 index a2229e1fa453..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5250.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - imageadd: "Update weeded warrior sprites to be compatible with knight strain sprite" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5259.yml b/html/changelogs/AutoChangeLog-pr-5259.yml new file mode 100644 index 000000000000..037aa676912b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5259.yml @@ -0,0 +1,4 @@ +author: "Ben10083" +delete-after: True +changes: + - rscdel: " Working Joes can no longer drink" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5268.yml b/html/changelogs/AutoChangeLog-pr-5268.yml new file mode 100644 index 000000000000..1bed5f11b860 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5268.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - bugfix: "Fix Xmas helmets getting overriden by map camouflage." \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml index b0bde6fe0753..2e420ea0d778 100644 --- a/html/changelogs/archive/2023-12.yml +++ b/html/changelogs/archive/2023-12.yml @@ -403,3 +403,8 @@ realforest2001: - maptweak: Various doors around the Almayer will now close their opposites for better security. +2023-12-21: + Birdtalon: + - bugfix: Lurker can tail jab over ledges and window frames. + Drathek: + - imageadd: Update weeded warrior sprites to be compatible with knight strain sprite diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 83dfe3b361b2..899947e1bec9 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -118,6 +118,15 @@ const ObservableContent = (props, context) => { survivors = [], xenos = [], ert_members = [], + upp = [], + clf = [], + wy = [], + twe = [], + freelancer = [], + mercenary = [], + contractor = [], + dutch = [], + marshal = [], synthetics = [], predators = [], animals = [], @@ -145,6 +154,43 @@ const ObservableContent = (props, context) => { section={synthetics} title="Synthetics" /> + + + + + + + + + diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts index 3fe11af8e625..afbed5b16468 100644 --- a/tgui/packages/tgui/interfaces/Orbit/types.ts +++ b/tgui/packages/tgui/interfaces/Orbit/types.ts @@ -7,6 +7,15 @@ export type OrbitData = { survivors: Observable[]; xenos: Observable[]; ert_members: Observable[]; + upp: Observable[]; + twe: Observable[]; + clf: Observable[]; + wy: Observable[]; + freelancer: Observable[]; + contractor: Observable[]; + mercenary: Observable[]; + dutch: Observable[]; + marshal: Observable[]; synthetics: Observable[]; predators: Observable[]; animals: Observable[]; diff --git a/tgui/packages/tgui/interfaces/TacticalMap.tsx b/tgui/packages/tgui/interfaces/TacticalMap.tsx index 92996038719f..0888212a83fb 100644 --- a/tgui/packages/tgui/interfaces/TacticalMap.tsx +++ b/tgui/packages/tgui/interfaces/TacticalMap.tsx @@ -23,7 +23,7 @@ interface TacMapProps { mapRef: string; currentMenu: string; lastUpdateTime: any; - nextCanvasTime: any; + canvasCooldownDuration: any; canvasCooldown: any; exportedTacMapImage: any; tacmapReady: number; @@ -192,7 +192,7 @@ const OldMapPanel = (props, context) => { const DrawMapPanel = (props, context) => { const { data, act } = useBackend(context); - const timeLeftPct = data.canvasCooldown / data.nextCanvasTime; + const timeLeftPct = data.canvasCooldown / data.canvasCooldownDuration; const canUpdate = data.canvasCooldown <= 0 && !data.updatedCanvas; const handleTacMapExport = (image: any) => {