Merge remote-tracking branch 'tgstation/master' into upstream-12-15

# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
This commit is contained in:
nevimer
2025-12-15 18:12:29 -05:00
1053 changed files with 115751 additions and 34654 deletions
@@ -8,6 +8,7 @@
health = 25
maxHealth = 25
light_color = "#99ccff"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
req_one_access = list(ACCESS_ROBOTICS, ACCESS_JANITOR)
radio_key = /obj/item/encryptionkey/headset_service
@@ -7,6 +7,7 @@
icon_state = "firebot1"
light_color = "#8cffc9"
light_power = 0.8
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.9, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION)
radio_key = /obj/item/encryptionkey/headset_eng
@@ -4,6 +4,7 @@
icon_state = "honkbot"
base_icon_state = "honkbot"
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
custom_materials = list(/datum/material/cardboard = SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.8, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
req_access = list(ACCESS_ROBOTICS, ACCESS_THEATRE, ACCESS_JANITOR)
radio_key = /obj/item/encryptionkey/headset_service
ai_controller = /datum/ai_controller/basic_controller/bot/honkbot
@@ -21,6 +21,8 @@
additional_access = /datum/id_trim/job/janitor
hackables = "cleaning service protocols"
ai_controller = /datum/ai_controller/basic_controller/bot/hygienebot
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3.3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
///are we currently washing someone?
var/washing = FALSE
@@ -115,6 +117,7 @@
target.fire_act()
return
target.wash(CLEAN_WASH)
target.extinguish()
/mob/living/basic/bot/hygienebot/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced)
@@ -14,6 +14,7 @@
pass_flags = PASSMOB | PASSFLAPS
status_flags = (CANPUSH | CANSTUN)
ai_controller = /datum/ai_controller/basic_controller/bot/medbot
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
req_one_access = list(ACCESS_ROBOTICS, ACCESS_MEDICAL)
radio_key = /obj/item/encryptionkey/headset_med
@@ -8,9 +8,10 @@
pass_flags = parent_type::pass_flags | PASSTABLE
layer = BELOW_MOB_LAYER
anchored = FALSE
health = 100
health = 35
can_be_held = TRUE
maxHealth = 100
maxHealth = 35
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.3, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
path_image_color = "#80dae7"
bot_ui = "RepairBot"
req_one_access = list(ACCESS_ROBOTICS, ACCESS_ENGINEERING)
@@ -9,6 +9,8 @@
light_range = 6
ai_controller = /datum/ai_controller/basic_controller/bot/vibebot
light_power = 2
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.8, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 4)
hackables = "vibing scanners"
radio_key = /obj/item/encryptionkey/headset_service
@@ -79,6 +79,8 @@
inhand_icon_state = "cutters"
item_flags = NO_MAT_REDEMPTION
random_color = FALSE
greyscale_config = null
greyscale_colors = null
/obj/item/multitool/drone
name = "built-in multitool"
@@ -59,7 +59,7 @@
equipping.pulledby.stop_pulling()
equipping.screen_loc = null // will get moved if inventory is visible
equipping.forceMove(src)
equipping.forceMove(src) //This has to come before has_equipped is called.
SET_PLANE_EXPLICIT(equipping, ABOVE_HUD_PLANE, src)
switch(slot)
@@ -20,6 +20,7 @@
/datum/ai_controller/basic_controller/illusion/escape
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // we don't need the special illusion one here
BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
)
ai_traits = DEFAULT_AI_FLAGS
@@ -6,6 +6,7 @@
icon_state = "bilehorn"
allowed_instrument_ids = "bilehorn"
inhand_icon_state = null
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 2)
/datum/crafting_recipe/bilehorn
name = "Bilehorn"
@@ -17,6 +17,7 @@
icon_state = "oresensor"
icon = 'icons/obj/mining.dmi'
slot_flags = ITEM_SLOT_EARS
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
var/range = 5
var/cooldown = 4 SECONDS //between the standard and the advanced ore scanner in strength
COOLDOWN_DECLARE(ore_sensing_cooldown)
@@ -316,12 +316,17 @@ GLOBAL_LIST_INIT(raptor_colors, init_raptor_colors())
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_IMMOBILE | AB_CHECK_INCAPACITATED
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "raptor_wings"
background_icon_state = "bg_default"
overlay_icon_state = "bg_default_border"
/datum/action/innate/raptor_wings/Activate()
var/obj/item/mob_holder/purple_raptor/holder = target
var/mob/living/carbon/human/user = holder.loc
if (istype(user) && user.get_item_by_slot(ITEM_SLOT_BACK) == holder)
holder.toggle_wings(user)
if (!istype(user) || user.get_item_by_slot(ITEM_SLOT_BACK) != holder)
return
holder.toggle_wings(user)
background_icon_state = "bg_default[holder.wings_open ? "_on" : ""]"
build_all_button_icons()
/datum/raptor_color/green
color = "green"
@@ -5,3 +5,4 @@
icon_state = "raptor_trough"
x_offsets = list(-5, 5)
y_offsets = list(-4, 5)
custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT * 5)
@@ -17,8 +17,7 @@
attack_sound = 'sound/items/weapons/punch1.ogg'
combat_mode = TRUE
faction = list(FACTION_STICKMAN)
unsuitable_atmos_damage = 7.5
unsuitable_cold_damage = 7.5
unsuitable_atmos_damage = 0
unsuitable_heat_damage = 7.5
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
@@ -22,6 +22,7 @@
attack_sound = 'sound/effects/hallucinations/growl1.ogg'
ai_controller = /datum/ai_controller/basic_controller/paper_wizard
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
unsuitable_atmos_damage = 0
///spell to summon minions
var/datum/action/cooldown/spell/conjure/wizard_summon_minions/summon
///spell to summon clones
@@ -25,11 +25,14 @@
"Ensure that any holy weapons are rendered unusable.",
"Heed and obey the requests of the dead, provided that carrying them out wouldn't be too inconvenient or self-destructive.",
"Impersonate or be worshipped as a God.",
"Make the captain as miserable as possible.",
"Make the clown as miserable as possible.",
"Make the crew as miserable as possible.",
"Prevent the use of energy weapons where possible.",
)
if(SSjob.assigned_captain)
explanation_texts += "Make the captain as miserable as possible."
var/datum/job/clown/clown_job = SSjob.get_job(JOB_CLOWN)
if(clown_job.current_positions)
explanation_texts += "Make the clown as miserable as possible."
explanation_text = pick(explanation_texts)
return ..()
@@ -118,3 +118,8 @@
order = attending_venue.order_food_line(wanted_item)
. += span_notice("Their order was: \"[order].\"")
/mob/living/basic/robot_customer/death()
new /obj/effect/gibspawner/robot(drop_location())
return ..()
@@ -23,7 +23,7 @@
///Sound used when item sold/bought
var/sell_sound = 'sound/effects/cashregister.ogg'
///The currency name
var/currency_name = "credits"
var/currency_name = MONEY_NAME
///The spawner we use to create our look
var/spawner_path = /obj/effect/mob_spawn/corpse/human/generic_assistant
///Our species to create our look
@@ -8,7 +8,7 @@
///Sound used when item sold/bought
var/sell_sound = 'sound/effects/cashregister.ogg'
///The currency name
var/currency_name = "credits"
var/currency_name = MONEY_NAME
///The initial products that the trader offers
var/list/initial_products = list(
/obj/item/food/burger/ghost = list(PAYCHECK_CREW * 4, INFINITY),