diff --git a/code/__HELPERS/logging/attack.dm b/code/__HELPERS/logging/attack.dm index 16fd656137fab..2e2b7a77f49d3 100644 --- a/code/__HELPERS/logging/attack.dm +++ b/code/__HELPERS/logging/attack.dm @@ -80,5 +80,5 @@ GLOB.bombers += bomb_message var/area/bomb_area = get_area(bomb) - if(message_admins && !(bomb_area.area_flags & QUIET_LOGS)) // Don't spam the logs with deathmatch bombs + if(message_admins && !(bomb_area?.area_flags & QUIET_LOGS)) // Don't spam the logs with deathmatch bombs message_admins("[user ? "[ADMIN_LOOKUPFLW(user)] at [ADMIN_VERBOSEJMP(user)] " : ""][details][bomb ? " [bomb.name] at [ADMIN_VERBOSEJMP(bomb)]": ""][additional_details ? " [additional_details]" : ""].") diff --git a/code/datums/components/parry.dm b/code/datums/components/parry.dm index a478fcbd27802..4b49096a6e261 100644 --- a/code/datums/components/parry.dm +++ b/code/datums/components/parry.dm @@ -104,10 +104,10 @@ parried = TRUE if (source.firer != user) - if (abs(source.angle - dir2angle(user)) < 15) + if (abs(source.angle - dir2angle(user.dir)) < 15) source.set_angle((source.angle + 180) % 360 + rand(-3, 3)) else - source.set_angle(dir2angle(user) + rand(-3, 3)) + source.set_angle(dir2angle(user.dir) + rand(-3, 3)) user.visible_message(span_warning("[user] expertly parries [source] with [user.p_their()] bare hand!"), span_warning("You parry [source] with your hand!")) else user.visible_message(span_warning("[user] boosts [source] with [user.p_their()] bare hand!"), span_warning("You boost [source] with your hand!")) diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm index 62262dc3bf7e4..fd717133f2591 100644 --- a/code/datums/quirks/negative_quirks/addict.dm +++ b/code/datums/quirks/negative_quirks/addict.dm @@ -4,6 +4,7 @@ gain_text = span_danger("You suddenly feel the craving for... something? You're not sure what it is.") medical_record_text = "Patient has a history with SOMETHING but he refuses to tell us what it is." abstract_parent_type = /datum/quirk/item_quirk/addict + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES var/datum/reagent/reagent_type //!If this is defined, reagent_id will be unused and the defined reagent type will be instead. var/datum/reagent/reagent_instance //! actual instanced version of the reagent var/where_drug //! Where the drug spawned @@ -86,7 +87,6 @@ gain_text = span_danger("You suddenly feel the craving for drugs.") medical_record_text = "Patient has a history of hard drugs." hardcore_value = 4 - quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/effect/spawner/random/contraband/narcotics) drug_flavour_text = "Better hope you don't run out..." diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index b9b56161e84a7..2bbd069ef32e6 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -19,12 +19,11 @@ /datum/status_effect/incapacitating/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) duration = set_duration - return ..() - -/datum/status_effect/incapacitating/on_apply() + . = ..() + if(!.) + return if(needs_update_stat || issilicon(owner)) owner.update_stat() - return TRUE /datum/status_effect/incapacitating/on_remove() if(needs_update_stat || issilicon(owner)) //silicons need stat updates in addition to normal canmove updates diff --git a/code/game/objects/items/devices/broadcast_camera.dm b/code/game/objects/items/devices/broadcast_camera.dm index 40f8fe0a87154..1a7ba3ed1c4c1 100644 --- a/code/game/objects/items/devices/broadcast_camera.dm +++ b/code/game/objects/items/devices/broadcast_camera.dm @@ -41,11 +41,10 @@ /obj/item/broadcast_camera/Destroy(force) QDEL_NULL(internal_radio) QDEL_NULL(internal_camera) - return ..() /obj/item/broadcast_camera/update_icon_state() - icon_state = "[base_icon_state]0" + icon_state = "[base_icon_state][active]" return ..() /obj/item/broadcast_camera/attack_self(mob/user, modifiers) @@ -80,7 +79,7 @@ if(!iscarbon(loc)) return active = TRUE - icon_state = "[base_icon_state][active]" + update_icon_state() /// The carbon who wielded the camera, allegedly var/mob/living/carbon/wielding_carbon = loc @@ -103,7 +102,7 @@ /// When deactivating the camera /obj/item/broadcast_camera/proc/on_deactivating() active = FALSE - icon_state = "[base_icon_state][active]" + update_icon_state() QDEL_NULL(internal_camera) QDEL_NULL(internal_radio) diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 4b53ae0437301..31bec93ffc5f8 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -115,6 +115,14 @@ //Current stations +// Birdshot: added Apr 29, 2023 (#74371) +/obj/structure/plaque/static_plaque/golden/commission/birdshot + desc = "Spinward Sector Station SS-13\n'Birdshot' Class Outpost\nCommissioned 29/04/2563\n'Shooting for the Stars'" + +// Deltastation: added Dec 17, 2016 (#22066) +/obj/structure/plaque/static_plaque/golden/commission/delta + desc = "Spinward Sector Station SS-13\n'Delta' Class Outpost\nCommissioned 17/12/2556\n'Efficiency Through Redundancy'" + // Icebox Station: added May 13, 2020 (#51090) /obj/structure/plaque/static_plaque/golden/commission/icebox desc = "Spinward Sector Station SS-13\n'Box' Class Outpost (Revision 2.2: 'Icebox')\nCommissioned 13/05/2560\n'Cold Reliable'" @@ -123,25 +131,17 @@ /obj/structure/plaque/static_plaque/golden/commission/meta desc = "Spinward Sector Station SS-13\n'Meta' Class Outpost\nCommissioned 11/03/2553\n'Theseus' Station'" -// Deltastation: added Dec 17, 2016 (#22066) -/obj/structure/plaque/static_plaque/golden/commission/delta - desc = "Spinward Sector Station SS-13\n'Delta' Class Outpost\nCommissioned 17/12/2556\n'Efficiency Through Redundancy'" +// Nebulastation: added Nov 6, 2024 (#84826) +/obj/structure/plaque/static_plaque/golden/commission/nebula + desc = "Spinward Sector Station SS-13\n'Nebula' Class Outpost\nCommissioned 06/11/2564\n'The New Future'" // Tramstation: added Mar 11, 2021 (#56509) /obj/structure/plaque/static_plaque/golden/commission/tram desc = "Spinward Sector Station SS-13\n'Tram' Class Outpost\nCommissioned 11/03/2561\n'Making Moves'" -// Wawastation: added add date here +// Wawastation: added Jun 4, 2024 (#82298) /obj/structure/plaque/static_plaque/golden/commission/wawa - desc = "Spinward Sector Station SS-13\n'Wawa' Class Outpost\nCommissioned 11/03/add here\n'Forever Vertical'" - -// North Star: added Apr 13, 2023 (#74371) -/obj/structure/plaque/static_plaque/golden/commission/northstar - desc = "Spinward Sector Ship SS-13\n'North Star' Class Vessel\nCommissioned 13/04/2563\n'New Opportunities'" - -// Birdshot: added Apr 29, 2023 (#74371) -/obj/structure/plaque/static_plaque/golden/commission/birdshot - desc = "Spinward Sector Station SS-13\n'Birdshot' Class Outpost\nCommissioned 29/04/2563\n'Shooting for the Stars'" + desc = "Spinward Sector Station SS-13\n'Wawa' Class Outpost\nCommissioned 04/06/2564\n'Forever Vertical'" //Removed stations @@ -189,6 +189,10 @@ /obj/structure/plaque/static_plaque/golden/commission/mini desc = "Spinward Sector Station SS-08\n'Mini' Class Outpost\nCommissioned 29/01/2554\nDecommissioned 27/12/2556\n'The Littlest Station'" +// North Star: added Apr 13, 2023 (#74371), removed Nov 25, 2024 (#87937)- 1 year, 7 months, 12 days +/obj/structure/plaque/static_plaque/golden/commission/northstar + desc = "Spinward Sector Ship SS-13\n'North Star' Class Vessel\nCommissioned 13/04/2563\nDecommissioned 25/11/2564\n'New Opportunities'" + // Omegastation: added Dec 27, 2016 (#22453), removed Sep 20, 2018 (#40352)- 1 year, 8 months, 24 days /obj/structure/plaque/static_plaque/golden/commission/omega desc = "Spinward Sector Station SS-09\n'Omega' Class Outpost\nCommissioned 27/12/2556\nDecommissioned 20/09/2558\n'Tiny Take Two'" diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index 13af388576fc5..210f1e11e4431 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -17,6 +17,8 @@ /// Current alert level of our air alarm. /// [AIR_ALARM_ALERT_NONE], [AIR_ALARM_ALERT_MINOR], [AIR_ALARM_ALERT_SEVERE] var/danger_level = AIR_ALARM_ALERT_NONE + /// Current alert level of the area of our air alarm. + var/area_danger = FALSE /// Currently selected mode of the alarm. An instance of [/datum/air_alarm_mode]. var/datum/air_alarm_mode/selected_mode @@ -247,7 +249,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) data["siliconUser"] = HAS_SILICON_ACCESS(user) data["emagged"] = (obj_flags & EMAGGED ? 1 : 0) data["dangerLevel"] = danger_level - data["atmosAlarm"] = !!my_area.active_alarms[ALARM_ATMOS] + data["atmosAlarm"] = !!area_danger data["fireAlarm"] = my_area.fire data["faultStatus"] = my_area.fault_status data["faultLocation"] = my_area.fault_location @@ -525,7 +527,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) var/color if(danger_level == AIR_ALARM_ALERT_HAZARD) color = "#FF0022" // red - else if(danger_level == AIR_ALARM_ALERT_WARNING || my_area.active_alarms[ALARM_ATMOS]) + else if(danger_level == AIR_ALARM_ALERT_WARNING || area_danger) color = "#FFAA00" // yellow else color = "#00FFCC" // teal @@ -555,7 +557,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) var/state if(danger_level == AIR_ALARM_ALERT_HAZARD) state = "alarm1" - else if(danger_level == AIR_ALARM_ALERT_WARNING || my_area.active_alarms[ALARM_ATMOS]) + else if(danger_level == AIR_ALARM_ALERT_WARNING || area_danger) state = "alarm2" else state = "alarm0" @@ -575,6 +577,8 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) var/old_danger = danger_level danger_level = AIR_ALARM_ALERT_NONE + var/old_area_danger = area_danger + area_danger = my_area.active_alarms[ALARM_ATMOS] var/total_moles = environment.total_moles() var/pressure = environment.return_pressure() @@ -626,7 +630,7 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) alarm_manager.clear_alarm(ALARM_ATMOS) warning_message = null - if(old_danger != danger_level) + if(old_danger != danger_level || old_area_danger != area_danger) update_appearance() selected_mode.replace(my_area, pressure) diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm index 428afe899dfcf..9bfb8b8a06910 100644 --- a/code/modules/escape_menu/leave_body.dm +++ b/code/modules/escape_menu/leave_body.dm @@ -9,7 +9,8 @@ stack_trace("The leave body menu was opened before the atoms SS. This shouldn't be possible, as the leave body menu should only be accessible when you have a body.") page_holder.give_screen_object(new /atom/movable/screen/escape_menu/leave_body_button( - src, + null, + /* hud_owner = */ null, "Suicide", "Perform a dramatic suicide in game", /* pixel_offset = */ -105, @@ -19,7 +20,8 @@ page_holder.give_screen_object( new /atom/movable/screen/escape_menu/leave_body_button( - src, + null, + /* hud_owner = */ null, "Ghost", "Exit quietly, leaving your body", /* pixel_offset = */ 0, @@ -30,7 +32,8 @@ page_holder.give_screen_object( new /atom/movable/screen/escape_menu/leave_body_button( - src, + null, + /* hud_owner = */ null, "Back", /* tooltip_text = */ null, /* pixel_offset = */ 105, @@ -84,6 +87,7 @@ /atom/movable/screen/escape_menu/leave_body_button/Initialize( mapload, + datum/hud/hud_owner, button_text, tooltip_text, pixel_offset, diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 157cfbb9e16b6..7e6a1bf6d6371 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -525,25 +525,25 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) worn_icon_state = "analyzer" /obj/item/analyzer/hilbertsanalyzer/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - if(istype(interacting_with, /obj/item/hilbertshotel)) - if(!Adjacent(interacting_with)) - to_chat(user, span_warning("It's to far away to scan!")) - return ITEM_INTERACT_BLOCKING - var/obj/item/hilbertshotel/sphere = interacting_with - if(sphere.activeRooms.len) - to_chat(user, "Currently Occupied Rooms:") - for(var/roomnumber in sphere.activeRooms) - to_chat(user, roomnumber) - else - to_chat(user, "No currenty occupied rooms.") - if(sphere.storedRooms.len) - to_chat(user, "Vacated Rooms:") - for(var/roomnumber in sphere.storedRooms) - to_chat(user, roomnumber) - else - to_chat(user, "No vacated rooms.") - return ITEM_INTERACT_SUCCESS - return ..() + if(!istype(interacting_with, /obj/item/hilbertshotel)) + return ..() + if(!user.CanReach(interacting_with)) + to_chat(user, span_warning("It's to far away to scan!")) + return ITEM_INTERACT_BLOCKING + var/obj/item/hilbertshotel/sphere = interacting_with + if(sphere.activeRooms.len) + to_chat(user, "Currently Occupied Rooms:") + for(var/roomnumber in sphere.activeRooms) + to_chat(user, roomnumber) + else + to_chat(user, "No currenty occupied rooms.") + if(sphere.storedRooms.len) + to_chat(user, "Vacated Rooms:") + for(var/roomnumber in sphere.storedRooms) + to_chat(user, roomnumber) + else + to_chat(user, "No vacated rooms.") + return ITEM_INTERACT_SUCCESS /obj/effect/landmark/transport/transport_id/hilbert specific_transport_id = HILBERT_LINE_1 diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 7617235e8a088..9ca105fa4d385 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -87,31 +87,28 @@ key = "meow" key_third_person = "meows" vary = TRUE + sound = SFX_CAT_MEOW + message = "meows!" + message_mime = "meows silently." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE -/datum/emote/living/carbon/meow/run_emote(mob/user, params, type_override, intentional) - . = ..() - if(istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat)) - sound = SFX_CAT_MEOW - message = "meows!" - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - else - to_chat(user, span_warning("You can't quite make the sound.")) - return +/datum/emote/living/carbon/meow/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional, params) + if(!iscarbon(user) || (!istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat))) + return FALSE + return ..() /datum/emote/living/carbon/purr key = "purr" key_third_person = "purrs" vary = TRUE + sound = SFX_CAT_PURR + message = "purrs." + emote_type = EMOTE_AUDIBLE -/datum/emote/living/carbon/purr/run_emote(mob/user, params, type_override, intentional) - . = ..() - if(istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat)) - sound = SFX_CAT_PURR - message = "purrs." - emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE - else - to_chat(user, span_warning("You can't quite make the sound.")) - return +/datum/emote/living/carbon/purr/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional, params) + if(!iscarbon(user) || (!istype(user.get_organ_slot(ORGAN_SLOT_TONGUE), /obj/item/organ/tongue/cat)) || HAS_MIND_TRAIT(user, TRAIT_MIMING)) + return FALSE + return ..() /datum/emote/living/carbon/moan key = "moan" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d4beec000092b..14a920b350ae1 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -297,7 +297,7 @@ cut_overlays() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) icon_state = model.cyborg_base_icon - if(stat != DEAD && !(HAS_TRAIT(src, TRAIT_KNOCKEDOUT) || IsStun() || IsParalyzed() || low_power_mode)) //Not dead, not stunned. + if(stat < UNCONSCIOUS && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && !IsStun() && !IsParalyzed() && !low_power_mode) //Not dead, not stunned. if(!eye_lights) eye_lights = new() if(lamp_enabled || lamp_doom) diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index d09781451f42d..3eef7d47f158b 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -566,11 +566,16 @@ /obj/item/mod/module/stealth/wraith name = "MOD Wraith Cloaking Module" - desc = "A more destructive adaptation of the stealth module." + desc = "A more destructive adaptation of the stealth module. Incompatible with armor modules" icon_state = "cloak_traitor" stealth_alpha = 30 module_type = MODULE_ACTIVE cooldown_time = 2 SECONDS + incompatible_modules = list(/obj/item/mod/module/stealth, /obj/item/mod/module/armor_booster) + /// How much time before we are able to cloak again after the cloak is broken (not disabled) + COOLDOWN_DECLARE(recloak_timer) + /// If the stealth portion of the module is active + var/stealth_active = FALSE /obj/item/mod/module/stealth/wraith/on_select_use(atom/target) . = ..() @@ -592,28 +597,41 @@ if(disrupted.on_saboteur(src, 1 MINUTES)) mod.add_charge(DEFAULT_CHARGE_DRAIN * 250) +/obj/item/mod/module/stealth/wraith/on_activation() + return // Don't activate stealth when the module is activated because the stealth portion of the module is fully passive + +/obj/item/mod/module/stealth/wraith/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + UnregisterSignal(mod.wearer, list(COMSIG_LIVING_MOB_BUMP, COMSIG_ATOM_BUMPED, COMSIG_MOB_FIRED_GUN)) + /obj/item/mod/module/stealth/wraith/on_part_activation() start_stealth() /obj/item/mod/module/stealth/wraith/on_part_deactivation(deleting) - if(bumpoff) - UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) - UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) + UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED, COMSIG_LIVING_MOB_BUMP, COMSIG_ATOM_BUMPED, COMSIG_MOB_FIRED_GUN)) animate(mod.wearer, alpha = 255, time = 1.5 SECONDS) + stealth_active = FALSE /obj/item/mod/module/stealth/wraith/proc/start_stealth() - if(bumpoff) - RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) + if(!COOLDOWN_FINISHED(src, recloak_timer)) // Prevents being able to bypass the cooldown by disabling and re-enabling the module + addtimer(CALLBACK(src, PROC_REF(start_stealth)), recloak_timer) + return + RegisterSignals(mod.wearer, list(COMSIG_LIVING_MOB_BUMP, COMSIG_ATOM_BUMPED, COMSIG_MOB_FIRED_GUN), PROC_REF(unstealth)) RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) RegisterSignal(mod.wearer, COMSIG_ATOM_BULLET_ACT, PROC_REF(on_bullet_act)) RegisterSignals(mod.wearer, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED), PROC_REF(unstealth)) animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS) drain_power(use_energy_cost) + stealth_active = TRUE /obj/item/mod/module/stealth/wraith/unstealth(datum/source) + if(!stealth_active) + return . = ..() if(mod.active) - addtimer(CALLBACK(src, PROC_REF(start_stealth)), 5 SECONDS) + COOLDOWN_START(src, recloak_timer, 20 SECONDS) + addtimer(CALLBACK(src, PROC_REF(start_stealth)), 20 SECONDS) + stealth_active = FALSE /obj/item/mod/module/stealth/wraith/examine_more(mob/user) . = ..() diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index 331b91bae61ff..78fd3791e5cd5 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -1,3 +1,11 @@ +// Simple define to avoid copy-pasting the same code 3 times +#define ABDUCTOR_SUBTYPE_UNLOCKS(X) \ + ##X/New() { \ + . = ..(); \ + required_items_to_unlock += subtypesof(/obj/item/abductor); \ + required_items_to_unlock += subtypesof(/obj/item/circuitboard/machine/abductor); \ + } + /datum/techweb_node/alientech //AYYYYYYYYLMAOO tech id = TECHWEB_NODE_ALIENTECH display_name = "Alien Technology" @@ -5,9 +13,7 @@ prereq_ids = list(TECHWEB_NODE_BLUESPACE_TRAVEL) required_items_to_unlock = list( /obj/item/stack/sheet/mineral/abductor, - /obj/item/abductor, /obj/item/cautery/alien, - /obj/item/circuitboard/machine/abductor, /obj/item/circular_saw/alien, /obj/item/crowbar/abductor, /obj/item/gun/energy/alien, @@ -29,6 +35,8 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) hidden = TRUE +ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alientech) + /datum/techweb_node/alientech/on_station_research() . = ..() SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE @@ -47,8 +55,6 @@ "alien_wrench", ) required_items_to_unlock = list( - /obj/item/abductor, - /obj/item/circuitboard/machine/abductor, /obj/item/crowbar/abductor, /obj/item/gun/energy/shrink_ray, /obj/item/melee/baton/abductor, @@ -62,6 +68,8 @@ hidden = TRUE announce_channels = list(RADIO_CHANNEL_ENGINEERING) +ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alien_engi) + /datum/techweb_node/alien_surgery id = TECHWEB_NODE_ALIEN_SURGERY display_name = "Alien Surgery" @@ -80,9 +88,7 @@ "surgery_zombie", ) required_items_to_unlock = list( - /obj/item/abductor, /obj/item/cautery/alien, - /obj/item/circuitboard/machine/abductor, /obj/item/circular_saw/alien, /obj/item/crowbar/abductor, /obj/item/gun/energy/alien, @@ -102,3 +108,7 @@ discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) hidden = TRUE announce_channels = list(RADIO_CHANNEL_MEDICAL) + +ABDUCTOR_SUBTYPE_UNLOCKS(/datum/techweb_node/alien_surgery) + +#undef ABDUCTOR_SUBTYPE_UNLOCKS diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm index c33868e079711..f3477963f43c9 100644 --- a/code/modules/research/xenobiology/crossbreeding/_potions.dm +++ b/code/modules/research/xenobiology/crossbreeding/_potions.dm @@ -9,7 +9,7 @@ Slimecrossing Potions name = "extract cloning potion" desc = "A more powerful version of the extract enhancer potion, capable of cloning regular slime extracts." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potpurple" + icon_state = "potgold" /obj/item/slimepotion/extract_cloner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() @@ -102,7 +102,7 @@ Slimecrossing Potions name = "slime pressurization potion" desc = "A potent chemical sealant that will render any article of clothing airtight. Has two uses." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potblue" + icon_state = "potblack" var/uses = 2 /obj/item/slimepotion/spaceproof/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) @@ -139,14 +139,14 @@ Slimecrossing Potions name = "extract maximizer" desc = "An extremely potent chemical mix that will maximize a slime extract's uses." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potpurple" + icon_state = "potcerulean" //Lavaproofing potion - Charged Red /obj/item/slimepotion/lavaproof name = "slime lavaproofing potion" desc = "A strange, reddish goo said to repel lava as if it were water, without reducing flammability. Has two uses." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potred" + icon_state = "potyellow" resistance_flags = LAVA_PROOF | FIRE_PROOF var/uses = 2 @@ -181,7 +181,7 @@ Slimecrossing Potions name = "slime revival potion" desc = "Infused with plasma and compressed gel, this brings dead slimes back to life." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potsilver" + icon_state = "potgrey" /obj/item/slimepotion/slime_reviver/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) . = ..() diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 594163d153bcc..a3e760104c78c 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -896,7 +896,7 @@ name = "slime speed potion" desc = "A potent chemical mix that will remove the slowdown from any item." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potyellow" + icon_state = "potred" /obj/item/slimepotion/speed/interact_with_atom(obj/interacting_with, mob/living/user, list/modifiers) . = ..() @@ -965,7 +965,7 @@ name = "gender change potion" desc = "An interesting chemical mix that changes the biological gender of what its applied to. Cannot be used on things that lack gender entirely." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potlightpink" + icon_state = "potrainbow" /obj/item/slimepotion/genderchange/attack(mob/living/L, mob/user) if(!istype(L) || L.stat == DEAD) @@ -989,7 +989,7 @@ name = "renaming potion" desc = "A potion that allows a self-aware being to change what name it subconciously presents to the world." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potgreen" + icon_state = "potbrown" var/being_used = FALSE @@ -1023,7 +1023,7 @@ name = "bluespace radio potion" desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves." icon = 'icons/obj/medical/chemical.dmi' - icon_state = "potgrey" + icon_state = "potbluespace" /obj/item/slimepotion/slime/slimeradio/attack(mob/living/radio_head, mob/user) if(!isanimal_or_basicmob(radio_head)) diff --git a/code/modules/uplink/uplink_items/suits.dm b/code/modules/uplink/uplink_items/suits.dm index 2839a6d2d1eff..a71e604651879 100644 --- a/code/modules/uplink/uplink_items/suits.dm +++ b/code/modules/uplink/uplink_items/suits.dm @@ -81,8 +81,9 @@ cost = 16 cant_discount = TRUE -/datum/uplink_item/suits/modsuit/Wraith +/datum/uplink_item/suits/modsuit/wraith name = "MODsuit wraith cloaking module" - desc = "A MODsuit module that grants to the user Optical camouflage and the ability to overload light sources to recharge suit power." + desc = "A MODsuit module that grants to the user Optical camouflage and the ability to overload light sources to recharge suit power. \ + Incompatible with armored MODsuits." item = /obj/item/mod/module/stealth/wraith cost = 3 diff --git a/html/changelogs/AutoChangeLog-pr-88190.yml b/html/changelogs/AutoChangeLog-pr-88190.yml new file mode 100644 index 0000000000000..022cbe4e32771 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88190.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixed a runtime in detomatix logging" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88196.yml b/html/changelogs/AutoChangeLog-pr-88196.yml deleted file mode 100644 index 0b3fa848bc7a9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88196.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "norsvenska" -delete-after: True -changes: - - spellcheck: "You are no longer faced with a typo after either not writing on paper, or attempting to stamp a paper that's been stamped too many times." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88211.yml b/html/changelogs/AutoChangeLog-pr-88211.yml new file mode 100644 index 0000000000000..455a26e4ce9e3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88211.yml @@ -0,0 +1,4 @@ +author: "Wallem" +delete-after: True +changes: + - image: "Updates slime potion sprites, adds some new colors and rearranges some others." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88280.yml b/html/changelogs/AutoChangeLog-pr-88280.yml deleted file mode 100644 index b1d694362bef4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88280.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - qol: "Mining drills are now active by default" - - bugfix: "Fixes mining drill displaying drilling messages while inactive" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88287.yml b/html/changelogs/AutoChangeLog-pr-88287.yml deleted file mode 100644 index f56dc91c73179..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88287.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "fixed the museum password puzzle (to the cafeteria), and the scrubbers and vents there now look correctly (also fixed a rare visual bug)" - - bugfix: "it is now harder to bypass indestructible windows and grilles (those are placed there for a reason, you know!)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88289.yml b/html/changelogs/AutoChangeLog-pr-88289.yml deleted file mode 100644 index 4335f68afb41a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88289.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "You cannot have more than one MODtether (excluding manual connections)" - - qol: "Tethers are easier to cut (require less pixelhunting)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88294.yml b/html/changelogs/AutoChangeLog-pr-88294.yml deleted file mode 100644 index c65b6e1ac862f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88294.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - balance: "brought fishing difficulty of all fishing spots a bit closer to their original value following a small oopsie that made them unexpectingly easier for more than two months." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88296.yml b/html/changelogs/AutoChangeLog-pr-88296.yml deleted file mode 100644 index d2cd58ee55fe4..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88296.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixed fishing lures." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88297.yml b/html/changelogs/AutoChangeLog-pr-88297.yml deleted file mode 100644 index c26c801622468..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88297.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed flipped fishing hooks" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88298.yml b/html/changelogs/AutoChangeLog-pr-88298.yml deleted file mode 100644 index 52340e98d2352..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88298.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed lunar parade soundloop" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88299.yml b/html/changelogs/AutoChangeLog-pr-88299.yml deleted file mode 100644 index 6c22baf083193..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88299.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "OrionTheFox" -delete-after: True -changes: - - bugfix: "fixed the \"tactical combat/engineering uniform\" allowing toggling with no alt sprite" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88301.yml b/html/changelogs/AutoChangeLog-pr-88301.yml deleted file mode 100644 index 934ae26dc9a21..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88301.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "You can no longer stick a butter on a stick on a stick" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88304.yml b/html/changelogs/AutoChangeLog-pr-88304.yml deleted file mode 100644 index fde2324baadf9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88304.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "githubuser4141" -delete-after: True -changes: - - bugfix: "fixes splinter cell pistols causing mechs to suddenly have all their flags deleted" \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index 82bac40d727ea..da1c7d5f5b1d9 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -39,3 +39,64 @@ - image: Add new alert icons for bloody/dirty showers - code_imp: Refactored some expose_obj reagent code to support method types. - code_imp: Improved mood typecasting for owner to allow checking of mob biotypes. +2024-12-02: + Ghommie: + - balance: brought fishing difficulty of all fishing spots a bit closer to their + original value following a small oopsie that made them unexpectingly easier + for more than two months. + - bugfix: Fixed fishing lures. + OrionTheFox: + - bugfix: fixed the "tactical combat/engineering uniform" allowing toggling with + no alt sprite + SmArtKar: + - bugfix: Fixed lunar parade soundloop + - bugfix: You cannot have more than one MODtether (excluding manual connections) + - qol: Tethers are easier to cut (require less pixelhunting) + - bugfix: Fixed flipped fishing hooks + - bugfix: You can no longer stick a butter on a stick on a stick + - qol: Mining drills are now active by default + - bugfix: Fixes mining drill displaying drilling messages while inactive + githubuser4141: + - bugfix: fixes splinter cell pistols causing mechs to suddenly have all their flags + deleted + mc-oofert: + - bugfix: fixed the museum password puzzle (to the cafeteria), and the scrubbers + and vents there now look correctly (also fixed a rare visual bug) + - bugfix: it is now harder to bypass indestructible windows and grilles (those are + placed there for a reason, you know!) + norsvenska: + - spellcheck: You are no longer faced with a typo after either not writing on paper, + or attempting to stamp a paper that's been stamped too many times. +2024-12-03: + Absolucy: + - bugfix: Made the broadcast camera's sprite more consistent, it hopefully shouldn't + reset to the inactive sprite while recording in some weird scenarios now. + - bugfix: Abductor doohickeys (i.e abductor device circuit boards, mental interface + device, silencer, science tool, and omnitool) now properly unlock alien tech + via the experimentor. + EnterTheJake: + - balance: Wraith Module recloaking timer bumped from 5 to 20 seconds. + - balance: The Wraith Module's cloak now dissipates on ranged attacks and any type + of bump. + - balance: Wraith Module can no longer be installed In suits with the armor booster + module . + SmArtKar: + - bugfix: Fixed Hilbert's rigged analyzer not being able to scan the hotel orb + - bugfix: Fixed all parried projectiles only going up or down + - bugfix: Fixed "Leave Body" escape menu tab runtiming + - bugfix: Fixed smoker addictions not refreshing + ValuedEmployee: + - bugfix: Only players with Felinid tongues get to meow and purr for real this time, + and other carbons cannot + - bugfix: Mimes can no longer meow out loud and have their own mime message + - bugfix: Stopped delay on meow and purr emotes where they had to be used twice + to work the first time they're used + - rscdel: Removed redundant text warning for players that can't use the meow or + purr emotes + norsvenska: + - spellcheck: Station commission plaques (the gold ones that have the date they + were added) have been updated, adding Nebula's, fixing Wawa's, and decommissioning + Northstar's. + thegrb93: + - bugfix: Borg lights not turning off when flashed or empd + - bugfix: Air alarms stuck in warning state when area alarms are cleared diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi index 9c4b7ec7fbe85..b8f5caafc3fa3 100644 Binary files a/icons/mob/actions/actions_silicon.dmi and b/icons/mob/actions/actions_silicon.dmi differ diff --git a/icons/obj/medical/chemical.dmi b/icons/obj/medical/chemical.dmi index e362c5126e193..8b1a3f574f828 100644 Binary files a/icons/obj/medical/chemical.dmi and b/icons/obj/medical/chemical.dmi differ diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi index 1f844f2a2cac4..f9a3301d82852 100644 Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ