A lot of bugfixes. (#20358)

- bugfix: "Fixed PDAs not being automatically updated by the Force
Change Name admin action."
- bugfix: "Announcements from non-Horizon ships drifting into hazards no
longer spawn observer chat. You will only get the announcements if you
are on the same z-level. The Horizon will still send its announcements
globally."
  - bugfix: "Offships no longer send newscaster announcements."
  - bugfix: "Fixed ling stings not working. Again."
- bugfix: "The robotics core console no longer reverts into a normal R&D
console when disassembled and reassembled."
- bugfix: "The robotics core console now has its own circuit that can be
made through R&D."
- bugfix: "Fixed the message that simple mobs print when they step on a
trap."
  - bugfix: "Fixed the foam sword sprite."
  - bugfix: "Fixed damaged wall overlays."
  - bugfix: "Fixed the INDRA field getting messed up by pointing at it."
  - bugfix: "Apple pies now count for the pie bounty."
- bugfix: "Changeling chameleon claws no longer spawn in the warehouse."
  - bugfix: "Admin click-drag to possess has been fixed."
- bugfix: "Added a minimum damage threshold to delimb, in order to stops
ridiculously small damage from taking off limbs. The threshold is the
organ's max damage divided by 3."
  - bugfix: "The Pull psionic ability no longer pulls anchored objects."

Fixes #17739
Fixes #17369
Fixes #19535
Fixes #19166
Fixes #20184
Fixes #20165
Fixes #20164
Fixes #20117
Fixes #19961
Fixes #20231
Fixes #20277
Fixes #20346

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2025-01-13 22:13:44 +00:00
committed by GitHub
co-authored by Matt Atlas
parent 860987c6bc
commit eb3bc19014
19 changed files with 133 additions and 39 deletions
+16 -10
View File
@@ -264,27 +264,33 @@ Proc for attack log creation, because really why not
//update our pda and id if we have them on our person
var/list/searching = GetAllContents()
var/search_id = 1
var/search_pda = 1
var/search_id = TRUE
var/search_pda = TRUE
for(var/A in searching)
if( search_id && istype(A,/obj/item/card/id) )
if(search_id && istype(A, /obj/item/card/id) )
var/obj/item/card/id/ID = A
if(ID.registered_name == oldname)
ID.registered_name = newname
ID.name = "[newname]'s ID Card ([ID.assignment])"
if(!search_pda) break
search_id = 0
search_id = FALSE
else if(search_pda && istype(A,/obj/item/modular_computer))
if(!search_pda)
break
else if(search_pda && istype(A, /obj/item/modular_computer))
var/obj/item/modular_computer/PDA = A
if(!PDA.registered_id)
continue
if(PDA.registered_id.name == oldname)
if(PDA.registered_id.registered_name == oldname)
PDA.name = "PDA-[newname] ([PDA.registered_id.assignment])"
if(!search_id) break
search_pda = 0
return 1
search_pda = FALSE
if(!search_id)
break
return TRUE
// Generalised helper proc for letting mobs rename themselves
/mob/proc/rename_self(var/role, var/allow_numbers=0)
+5 -3
View File
@@ -47,15 +47,17 @@
if(isnewplayer(M))
continue
if(isghost(M) || (!isdeaf(M) && (GET_Z(M) in (zlevels | SSatlas.current_map.admin_levels))))
// Due to spam, only print announcements if the ghost is in the matching z-level, OR if it's a Horizon message.
if(isghost(M) || (!isdeaf(M) && ((GET_Z(M) in zlevels) || zlevels == SSatlas.current_map.contact_levels)))
var/turf/T = get_turf(M)
if(T)
to_chat(M, msg)
if(message_sound && !isdeaf(M) && (M.client?.prefs.sfx_toggles & ASFX_VOX))
sound_to(M, message_sound)
if(do_newscast)
if(do_newscast && zlevels == SSatlas.current_map.contact_levels)
NewsCast(message, message_title)
if(do_print)
if(do_print && zlevels == SSatlas.current_map.contact_levels)
post_comm_message(message_title, message)
Log(message, message_title)
+8
View File
@@ -864,3 +864,11 @@
//is Moved(old_loc, direction, TRUE, momentum_change = FALSE) in tg
Moved(old_loc, direction, TRUE)
/**
* Adds the red drop-shadow filter when pointed to by a mob.
* Override if the atom doesn't play nice with filters.
*/
/atom/movable/proc/add_point_filter()
add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
addtimer(CALLBACK(src, PROC_REF(remove_filter), "pointglow"), 2 SECONDS)
@@ -239,7 +239,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
hairGradient = newGradient
//Helper for stingcode
/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1)
/mob/proc/sting_can_reach(mob/M, sting_range = 1)
if(M.loc == src.loc)
return TRUE //target and source are in the same thing
var/target_distance = get_dist(src, M)
@@ -250,7 +250,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
to_chat(src, SPAN_WARNING("We cannot reach \the [M] with a sting!"))
return FALSE //One is inside, the other is outside something.
// Maximum queued turfs set to 25; I don't *think* anything raises sting_range above 2, but if it does the 25 may need raising
if(!AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, max_nodes=25, max_node_depth=sting_range)) //If we can't find a path, fail
if(!AStar(get_turf(src), get_turf(M), /turf/proc/AdjacentTurfsRanged, /turf/proc/Distance, max_nodes = 25, max_node_depth = sting_range)) //If we can't find a path, fail
to_chat(src, SPAN_WARNING("We cannot find a path to sting \the [M] by!"))
return FALSE
return TRUE
+1 -1
View File
@@ -1313,7 +1313,7 @@
/obj/item/toy/cultsword
name = "foam sword"
desc = "An arcane weapon wielded by the followers of the hit Saturday morning cartoon \"King Nursee and the Acolytes of Heroism\"."
icon = 'icons/obj/sword.dmi'
icon = 'icons/obj/sword_64.dmi'
icon_state = "cultblade"
item_state = "cultblade"
w_class = WEIGHT_CLASS_BULKY
@@ -6,17 +6,6 @@
name = T_BOARD("R&D control console")
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/circuitboard/rdconsole/attackby(obj/item/attacking_item, mob/user)
if(attacking_item.isscrewdriver())
user.visible_message(SPAN_NOTICE("\The [user] adjusts the jumper on \the [src]'s access protocol pins."),
SPAN_NOTICE("You adjust the jumper on the access protocol pins."))
if(src.build_path == /obj/machinery/computer/rdconsole/core)
src.name = T_BOARD("RD Console - Robotics")
src.build_path = /obj/machinery/computer/rdconsole/robotics
to_chat(user, SPAN_NOTICE("Access protocols set to robotics."))
else
src.name = T_BOARD("RD Console")
src.build_path = /obj/machinery/computer/rdconsole/core
to_chat(user, SPAN_NOTICE("Access protocols set to default."))
return
/obj/item/circuitboard/robotics_console
name = T_BOARD("robotics control console")
build_path = /obj/machinery/computer/rdconsole/robotics
+1 -1
View File
@@ -265,7 +265,7 @@
//Give a simple message and return if it's not a human
if(!ishuman(L))
L.visible_message(SPAN_DANGER("You step on \the [src]!"))
L.visible_message(SPAN_DANGER("[L] steps on \the [src]!"))
return
var/mob/living/carbon/human/human = L
+1 -1
View File
@@ -103,7 +103,7 @@
damage_image = damage_overlays[overlay]
overlays_to_add += damage_image
AddOverlays(overlays_to_add, ATOM_ICON_CACHE_PROTECTED)
AddOverlays(overlays_to_add)
UNSETEMPTY(reinforcement_images)
QUEUE_SMOOTH(src)
if(smoothing_flags & SMOOTH_UNDERLAYS)
+1
View File
@@ -70,6 +70,7 @@
/obj/item/reagent_containers/food/snacks/plump_pie,
/obj/item/reagent_containers/food/snacks/xemeatpie,
/obj/item/reagent_containers/food/snacks/cherrypie,
/obj/item/reagent_containers/food/snacks/applepie,
/obj/item/reagent_containers/food/snacks/chocolate_rikazu,
/obj/item/reagent_containers/food/snacks/fruit_rikazu,
/obj/item/reagent_containers/food/snacks/meat_rikazu,
+2 -1
View File
@@ -213,7 +213,8 @@ STOCK_ITEM_COMMON(gloves, 3.3)
/obj/item/clothing/gloves/fluff,
/obj/item/clothing/gloves/swat/bst,
/obj/item/clothing/gloves/powerfist,
/obj/item/clothing/gloves/claws
/obj/item/clothing/gloves/claws,
/obj/item/clothing/gloves/chameleon/changeling
)
exclusion += typesof(/obj/item/clothing/gloves/rig)
exclusion += typesof(/obj/item/clothing/gloves/lightrig)
@@ -12,6 +12,7 @@
universal_speak = 1
incorporeal_move = INCORPOREAL_GHOST
mob_thinks = FALSE
interaction_flags_atom = INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS
/// If the ghost can re-enter their corpse.
var/can_reenter_corpse
+2 -3
View File
@@ -430,9 +430,8 @@
addtimer(CALLBACK(src, PROC_REF(end_pointing_effect), pointing_effect), 2 SECONDS)
else if(!invisibility)
var/atom/movable/M = pointing_at
M.add_filter("pointglow", 1, list(type = "drop_shadow", x = 0, y = -1, offset = 1, size = 1, color = "#F00"))
addtimer(CALLBACK(M, TYPE_PROC_REF(/atom/movable, remove_filter), "pointglow"), 2 SECONDS)
pointing_at.handle_pointed_at(src)
M.add_point_filter()
M.handle_pointed_at(src)
SEND_SIGNAL(src, COMSIG_MOB_POINT, pointing_at)
return TRUE
+1 -2
View File
@@ -420,7 +420,7 @@
if(spillover > 0)
burn = max(burn - spillover, 0)
handle_limb_gibbing(used_weapon, brute_dam, burn_dam)
handle_limb_gibbing(used_weapon, brute, burn)
if(brute_dam + brute > min_broken_damage && prob(brute_dam + brute * (1 + blunt)))
if(blunt || brute > FRACTURE_AND_TENDON_DAM_THRESHOLD)
@@ -513,7 +513,6 @@
//If limb took enough damage, try to cut or tear it off
if(owner && loc == owner && !is_stump())
if((limb_flags & ORGAN_CAN_AMPUTATE))
if((brute_dam + burn_dam) >= (max_damage * GLOB.config.organ_health_multiplier))
var/edge_eligible = FALSE
@@ -588,6 +588,9 @@
AddEnergy(hitting_projectile.damage)
update_icon()
/obj/effect/fusion_em_field/add_point_filter()
return
/particles/fusion
width = 500
height = 500
@@ -44,3 +44,6 @@
if(mover?.movement_type & PHASING)
return TRUE
return ismob(mover)
/obj/effect/fusion_particle_catcher/add_point_filter()
return
+5 -1
View File
@@ -27,10 +27,14 @@
var/atom/movable/AM = hit_atom
var/mob/living/carbon/human/H = user
if(isobj(hit_atom) && w_class < WEIGHT_CLASS_GIGANTIC)
var/obj/object = hit_atom
if(object.anchored)
to_chat(user, SPAN_WARNING("That object is bolted down!"))
return
if(length(get_line(hit_atom, user)))
if(H.put_in_any_hand_if_possible(hit_atom))
return
user.visible_message(SPAN_WARNING("[user] extends [user.get_pronoun("his")] hand at [hit_atom]and pulls!"), SPAN_WARNING("You mimic pulling at [hit_atom]!"))
user.visible_message(SPAN_WARNING("[user] extends [user.get_pronoun("his")] hand at [hit_atom] and pulls!"), SPAN_WARNING("You mimic pulling at [hit_atom]!"))
if(ismob(hit_atom))
to_chat(hit_atom, SPAN_WARNING("A psychic force pulls you!"))
AM.throw_at(user, 10, 7)
@@ -23,6 +23,11 @@
req_tech = list(TECH_DATA = 4)
build_path = /obj/item/circuitboard/rdconsole
/datum/design/circuit/computer/robotics_console
name = "Robotics Core Console"
req_tech = list(TECH_DATA = 4)
build_path = /obj/item/circuitboard/robotics_console
/datum/design/circuit/computer/comm_monitor
name = "Telecommunications Monitoring Console"
req_tech = list(TECH_DATA = 3)
+1
View File
@@ -874,6 +874,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
id = 1
req_access = list(ACCESS_ROBOTICS)
allow_analyzer = FALSE
circuit = /obj/item/circuitboard/robotics_console
/obj/machinery/computer/rdconsole/core
name = "core R&D console"
@@ -0,0 +1,72 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################
# Your name.
author: MattAtlas
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- bugfix: "Fixed PDAs not being automatically updated by the Force Change Name admin action."
- bugfix: "Announcements from non-Horizon ships drifting into hazards no longer spawn observer chat. You will only get the announcements if you are on the same z-level. The Horizon will still send its announcements globally."
- bugfix: "Offships no longer send newscaster announcements."
- bugfix: "Fixed ling stings not working. Again."
- bugfix: "The robotics core console no longer reverts into a normal R&D console when disassembled and reassembled."
- bugfix: "The robotics core console now has its own circuit that can be made through R&D."
- bugfix: "Fixed the message that simple mobs print when they step on a trap."
- bugfix: "Fixed the foam sword sprite."
- bugfix: "Fixed damaged wall overlays."
- bugfix: "Fixed the INDRA field getting messed up by pointing at it."
- bugfix: "Apple pies now count for the pie bounty."
- bugfix: "Changeling chameleon claws no longer spawn in the warehouse."
- bugfix: "Admin click-drag to possess has been fixed."
- bugfix: "Fixed the minimum damage threshold to delimb. Limbs won't be cut off or gibbed by very small amounts of damage anymore."
- bugfix: "The Pull psionic ability no longer pulls anchored objects."