Skip to content
Draft

516 #16133

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
c90f9d8
initial
Dec 20, 2025
a6a519b
nuke ie11 checks
Dec 20, 2025
92c2101
update typescript
Dec 20, 2025
ea99b70
Fix
Dec 20, 2025
2b4211c
Fix
Dec 20, 2025
ddd837f
Shoo
Dec 20, 2025
d48d933
updatE
Dec 20, 2025
0e3a97f
update
Dec 20, 2025
fa4700f
Erm.
Dec 20, 2025
963ea21
changes
Dec 20, 2025
ecd7645
lol
Dec 20, 2025
92e5cc5
sigh
Dec 20, 2025
9b9fb74
fix
Dec 20, 2025
72428bb
fix
Dec 20, 2025
5c6bcc1
ts bump
Dec 20, 2025
039d458
update
Dec 20, 2025
16781d8
update
Dec 20, 2025
15f18a8
just update to rp
Dec 20, 2025
ae44658
sigh
Dec 20, 2025
a1fae07
yolo
Dec 20, 2025
327b85a
f in the chat
Dec 20, 2025
37dda67
sync dev server
Dec 20, 2025
ec148c8
sync font
Dec 20, 2025
4086cb0
themes
Dec 20, 2025
16124d2
e
Dec 20, 2025
4f7a9ec
sync tgui
Dec 20, 2025
0f96aaf
rename
Dec 20, 2025
985234c
mass rename
Dec 20, 2025
5a808e8
rp only
Dec 20, 2025
f1911bf
update
Dec 20, 2025
39aaf61
mass rename
Dec 20, 2025
8195819
mass convert useBackend
Dec 20, 2025
34de357
mass modify
Dec 20, 2025
e858ff5
update
Dec 20, 2025
24dfec8
fix
Dec 20, 2025
cde95d5
update
Dec 20, 2025
79af8ca
fix
Dec 20, 2025
245de5d
grid
Dec 20, 2025
3038f0c
grid
Dec 20, 2025
bd4d2fe
nuke level
Dec 20, 2025
d8bb1c5
update
Dec 20, 2025
2b139cd
update
Dec 20, 2025
de2c9d7
update
Dec 20, 2025
b972255
um
Dec 20, 2025
3d0de13
um
Dec 20, 2025
c3d5d65
stylish
Dec 20, 2025
74fbeab
update
Dec 20, 2025
b49b85c
update
Dec 20, 2025
6457517
update
Dec 20, 2025
eeabc5f
input
Dec 20, 2025
cd19534
update
Dec 20, 2025
c62b611
sigh
Dec 20, 2025
f6f8c03
ugh
Dec 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions code/__DEFINES/html_assistant.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Render a HTML string with the given header and body.
*/
#define HTML_SKELETON_HEADER_BODY(head, body) \
"<!DOCTYPE html><html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><meta http-equiv='X-UA-Compatible' content='IE=edge'>[head]</head><body>[body]</body></html>"

/**
* Render a HTML string with the given title and body, without additional headers.
*/
#define HTML_SKELETON_TITLE(title, body) HTML_SKELETON_HEADER_BODY("<title>[title]</title>", body)

/**
* Render a HTML string with the given body, without a title or additional headers.
*/
#define HTML_SKELETON(body) HTML_SKELETON_HEADER_BODY("", body)
281 changes: 247 additions & 34 deletions code/__DEFINES/rust_g.dm

Large diffs are not rendered by default.

28 changes: 14 additions & 14 deletions code/__HELPERS/path.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@
* * exclude: If we want to avoid a specific turf, like if we're a mulebot who already got blocked by some turf
* * skip_first: Whether or not to delete the first item in the path. This would be done because the first item is the starting tile, which can break movement for some creatures.
*/
/proc/get_path_to(caller, end, max_distance = 30, mintargetdist, id=null, simulated_only = TRUE, turf/exclude, skip_first=TRUE)
if(!caller || !get_turf(end))
/proc/get_path_to(caller1, end, max_distance = 30, mintargetdist, id=null, simulated_only = TRUE, turf/exclude, skip_first=TRUE)
if(!caller1 || !get_turf(end))
return

var/l = SSpathfinder.mobs.getfree(caller)
var/l = SSpathfinder.mobs.getfree(caller1)
while(!l)
stoplag(3)
l = SSpathfinder.mobs.getfree(caller)
l = SSpathfinder.mobs.getfree(caller1)

var/list/path
var/datum/pathfind/pathfind_datum = new(caller, end, id, max_distance, mintargetdist, simulated_only, exclude)
var/datum/pathfind/pathfind_datum = new(caller1, end, id, max_distance, mintargetdist, simulated_only, exclude)
path = pathfind_datum.search()
qdel(pathfind_datum)

Expand All @@ -44,7 +44,7 @@
* Note that this can only be used inside the [datum/pathfind][pathfind datum] since it uses variables from said datum.
* If you really want to optimize things, optimize this, cuz this gets called a lot.
*/
#define CAN_STEP(cur_turf, next) (next && !next.density && !(simulated_only && SSpathfinder.space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,caller, id) && (next != avoid))
#define CAN_STEP(cur_turf, next) (next && !next.density && !(simulated_only && SSpathfinder.space_type_cache[next.type]) && !cur_turf.LinkBlockedWithAccess(next,caller1, id) && (next != avoid))
/// Another helper macro for JPS, for telling when a node has forced neighbors that need expanding
#define STEP_NOT_HERE_BUT_THERE(cur_turf, dirA, dirB) ((!CAN_STEP(cur_turf, get_step(cur_turf, dirA)) && CAN_STEP(cur_turf, get_step(cur_turf, dirB))))

Expand Down Expand Up @@ -97,7 +97,7 @@
/// The datum used to handle the JPS pathfinding, completely self-contained
/datum/pathfind
/// The thing that we're actually trying to path for
var/atom/movable/caller
var/atom/movable/caller1
/// The turf where we started at
var/turf/start
/// The turf we're trying to path to (note that this won't track a moving target)
Expand All @@ -121,8 +121,8 @@
/// A specific turf we're avoiding, like if a mulebot is being blocked by someone t-posing in a doorway we're trying to get through
var/turf/avoid

/datum/pathfind/New(atom/movable/caller, atom/goal, id, max_distance, mintargetdist, simulated_only, avoid)
src.caller = caller
/datum/pathfind/New(atom/movable/caller1, atom/goal, id, max_distance, mintargetdist, simulated_only, avoid)
src.caller1 = caller1
end = get_turf(goal)
open = new /datum/heap(/proc/HeapPathWeightCompare)
sources = new()
Expand All @@ -139,7 +139,7 @@
* return null, which [/proc/get_path_to] translates to an empty list (notable for simple bots, who need empty lists)
*/
/datum/pathfind/proc/search()
start = get_turf(caller)
start = get_turf(caller1)
if(!start || !end)
stack_trace("Invalid A* start or destination")
return
Expand All @@ -155,7 +155,7 @@

//then run the main loop
while(!open.is_empty() && !path)
if(!caller)
if(!caller1)
return
current_processed_node = open.pop() //get the lower f_value turf in the open list
if(max_distance && (current_processed_node.number_tiles > max_distance))//if too many steps, don't process that path
Expand Down Expand Up @@ -337,15 +337,15 @@
* * ID: An ID card that decides if we can gain access to doors that would otherwise block a turf
* * simulated_only: Do we only worry about turfs with simulated atmos, most notably things that aren't space?
*/
/turf/proc/LinkBlockedWithAccess(turf/destination_turf, caller, ID)
/turf/proc/LinkBlockedWithAccess(turf/destination_turf, caller1, ID)
if(destination_turf.x != x && destination_turf.y != y) //diagonal
var/in_dir = get_dir(destination_turf,src) // eg. northwest (1+8) = 9 (00001001)
var/first_step_direction_a = in_dir & 3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001)
var/first_step_direction_b = in_dir & 12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000)

for(var/first_step_direction in list(first_step_direction_a,first_step_direction_b))
var/turf/midstep_turf = get_step(destination_turf,first_step_direction)
var/way_blocked = midstep_turf.density || LinkBlockedWithAccess(midstep_turf,caller,ID) || midstep_turf.LinkBlockedWithAccess(destination_turf,caller,ID)
var/way_blocked = midstep_turf.density || LinkBlockedWithAccess(midstep_turf,caller1,ID) || midstep_turf.LinkBlockedWithAccess(destination_turf,caller1,ID)
if(!way_blocked)
return FALSE
return TRUE
Expand All @@ -372,7 +372,7 @@
// Destination blockers check
var/reverse_dir = get_dir(destination_turf, src)
for(var/obj/iter_object in destination_turf)
if(!iter_object.CanAStarPass(ID, reverse_dir, caller))
if(!iter_object.CanAStarPass(ID, reverse_dir, caller1))
return TRUE

return FALSE
Expand Down
4 changes: 2 additions & 2 deletions code/controllers/hooks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@
if(!hook_path)
CRASH("Invalid hook '/hook/[hook]' called.")

var/caller = new hook_path
var/caller1 = new hook_path
var/status = 1
for(var/P in typesof("[hook_path]/proc"))
if(!call(caller, P)(arglist(args)))
if(!call(caller1, P)(arglist(args)))
CRASH("Hook '[P]' failed or runtimed.")

return status
4 changes: 2 additions & 2 deletions code/controllers/subsystem/pai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ SUBSYSTEM_DEF(pai)
dat += "<a href='byond://?src=[REF(src)];option=save;new=1;candidate=[REF(candidate)]'>Save Personality</a><br>"
dat += "<a href='byond://?src=[REF(src)];option=load;new=1;candidate=[REF(candidate)]'>Load Personality</a><br>"

M << browse(dat, "window=paiRecruit")
M << browse(HTML_SKELETON(dat), "window=paiRecruit")

/datum/controller/subsystem/pai/proc/spam_again()
ghost_spam = FALSE
Expand Down Expand Up @@ -198,7 +198,7 @@ SUBSYSTEM_DEF(pai)

dat += "</table>"

user << browse(dat, "window=findPai")
user << browse(HTML_SKELETON(dat), "window=findPai")

/datum/paiCandidate
var/name
Expand Down
14 changes: 13 additions & 1 deletion code/controllers/subsystem/tgui.dm
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,21 @@ SUBSYSTEM_DEF(tgui)
/// The HTML base used for all UIs.
var/basehtml

/datum/controller/subsystem/tgui/PreInit()
/datum/controller/subsystem/tgui/PreInit(recovering)
basehtml = file2text('tgui/public/tgui.html')

// Inject inline helper functions
var/helpers = file2text('tgui/public/helpers.min.js')
helpers = "<script type='text/javascript'>\n[helpers]\n</script>"
basehtml = replacetextEx(basehtml, "<!-- tgui:helpers -->", helpers)

// Inject inline ntos-error styles
var/ntos_error = file2text('tgui/public/ntos-error.min.css')
ntos_error = "<style type='text/css'>\n[ntos_error]\n</style>"
basehtml = replacetextEx(basehtml, "<!-- tgui:ntos-error -->", ntos_error)

basehtml = replacetextEx(basehtml, "<!-- tgui:nt-copyright -->", "Nanotrasen (c) 2525-[text2num(time2text(world.realtime, "YYYY")) + 544]")

/datum/controller/subsystem/tgui/Shutdown()
close_all_uis()

Expand Down
4 changes: 2 additions & 2 deletions code/datums/action.dm
Original file line number Diff line number Diff line change
Expand Up @@ -895,13 +895,13 @@
return PreActivate(owner)

/// Intercepts client owner clicks to activate the ability
/datum/action/cooldown/proc/InterceptClickOn(mob/living/caller, params, atom/target)
/datum/action/cooldown/proc/InterceptClickOn(mob/living/caller1, params, atom/target)
if(!IsAvailable())
return FALSE
if(!target)
return FALSE
PreActivate(target)
caller.click_intercept = null
caller1.click_intercept = null
return TRUE

/// For signal calling
Expand Down
2 changes: 1 addition & 1 deletion code/datums/elements/_element.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@

/// Deactivates the functionality defines by the element on the given datum
/datum/element/proc/Detach(datum/source, force)
SHOULD_CALL_PARENT(TRUE)
SIGNAL_HANDLER

SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src)
SHOULD_CALL_PARENT(TRUE)
UnregisterSignal(source, COMSIG_PARENT_QDELETING)

/datum/element/Destroy(force)
Expand Down
4 changes: 2 additions & 2 deletions code/datums/holocall.dm
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
var/head_call = FALSE //calls from a head of staff autoconnect, if the receiving pad is not secure.

//creates a holocall made by `caller` from `calling_pad` to `callees`
/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees, elevated_access = FALSE)
/datum/holocall/New(mob/living/caller1, obj/machinery/holopad/calling_pad, list/callees, elevated_access = FALSE)
call_start_time = world.time
user = caller
user = caller1
calling_pad.outgoing_call = src
calling_holopad = calling_pad
head_call = elevated_access
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/dynamic/dynamic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
var/shown_threat

/datum/game_mode/dynamic/admin_panel()
var/list/dat = list("<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Game Mode Panel</title></head><body><h1><B>Game Mode Panel</B></h1>")
var/list/dat = list("<!DOCTYPE html><html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Game Mode Panel</title></head><body><h1><B>Game Mode Panel</B></h1>")
dat += "Dynamic Mode <a href='?_src_=vars;[HrefToken()];Vars=[REF(src)]'>\[VV\]</a> <a href='?src=\ref[src];[HrefToken()]'>\[Refresh\]</a><BR>"
dat += "Threat Level: <b>[threat_level]</b><br/>"
dat += "Budgets (Roundstart/Midrounds): <b>[initial_round_start_budget]/[threat_level - initial_round_start_budget]</b><br/>"
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/objective.dm
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo.
/datum/objective/proc/is_unique_objective(possible_target)
var/list/datum/mind/owners = get_owners()
for(var/datum/mind/M in owners)
for(var/datum/objective/O in M.get_all_objectives()) //This scope is debatable, probably should be passed in by caller.
for(var/datum/objective/O in M.get_all_objectives()) //This scope is debatable, probably should be passed in by caller1.
if(istype(O, type) && O.get_target() == possible_target)
return FALSE
return TRUE
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/sandbox/airlock_maker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
dat += "</td></tr>"

dat += "</table><hr><a href='?src=[REF(src)];done'>Finalize Airlock Construction</a> | <a href='?src=[REF(src)];cancel'>Cancel and Destroy Airlock</a>"
usr << browse(dat,"window=airlockmaker")
usr << browse(HTML_SKELETON(dat),"window=airlockmaker")

/datum/airlock_maker/Topic(var/href,var/list/href_list)
if(!usr)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/airlock.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1295,7 +1295,7 @@
assemblytype = initial(airlock.assemblytype)
update_icon()

/obj/machinery/door/airlock/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
/obj/machinery/door/airlock/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
//Airlock is passable if it is open (!density), bot has access, and is not bolted shut or powered off)
return !density || (check_access(ID) && !locked && hasPower())

Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/hologram.dm
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ Possible to do for anyone motivated enough:
for(var/I in holo_calls)
var/datum/holocall/HC = I
var/list/call_data = list(
caller = HC.user,
caller1 = HC.user,
connected = HC.connected_holopad == src ? TRUE : FALSE,
ref = REF(HC)
)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/magnet.dm
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@
dat += "Moving: <a href='?src=[REF(src)];operation=togglemoving'>[moving ? "Enabled":"Disabled"]</a>"


user << browse(dat, "window=magnet;size=400x500")
user << browse(HTML_SKELETON(dat), "window=magnet;size=400x500")
onclose(user, "magnet")

/obj/machinery/magnetic_controller/Topic(href, href_list)
Expand Down
6 changes: 3 additions & 3 deletions code/game/machinery/porta_turret/portable_turret.dm
Original file line number Diff line number Diff line change
Expand Up @@ -725,13 +725,13 @@ DEFINE_BITFIELD(turret_flags, list(
remote_controller = null
return TRUE

/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/caller, params, atom/A)
/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/caller1, params, atom/A)
if(!manual_control)
return FALSE
if(!can_interact(caller))
if(!can_interact(caller1))
remove_control()
return FALSE
log_combat(caller,A,"fired with manual turret control at")
log_combat(caller1,A,"fired with manual turret control at")
target(A)
return TRUE

Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/devices/paicard.dm
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
dat += "No personality installed.<br>"
dat += "Searching for a personality... Press view available personalities to notify potential candidates."
dat += "<A href='byond://?src=[REF(src)];request=1'>\[View available personalities\]</a><br>"
user << browse(dat, "window=paicard")
user << browse(HTML_SKELETON(dat), "window=paicard")
onclose(user, "paicard")
return

Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/implants/implantpad.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
dat += "The implant casing is empty."
else
dat += "Please insert an implant casing!"
user << browse(dat, "window=implantpad")
user << browse(HTML_SKELETON(dat), "window=implantpad")
onclose(user, "implantpad")


Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/scrolls.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
dat += "<B>Four uses, use them wisely:</B><BR>"
dat += "<A href='byond://?src=[REF(src)];spell_teleport=1'>Teleport</A><BR>"
dat += "Kind regards,<br>Wizards Federation<br><br>P.S. Don't forget to bring your gear, you'll need it to cast most spells.<HR>"
user << browse(dat, "window=scroll")
user << browse(HTML_SKELETON(dat), "window=scroll")
onclose(user, "scroll")
return

Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/storage/secure.dm
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
if (!locked)
message = "*****"
dat += text("<HR>\n>[]<BR>\n<A href='?src=[REF(src)];type=1'>1</A>-<A href='?src=[REF(src)];type=2'>2</A>-<A href='?src=[REF(src)];type=3'>3</A><BR>\n<A href='?src=[REF(src)];type=4'>4</A>-<A href='?src=[REF(src)];type=5'>5</A>-<A href='?src=[REF(src)];type=6'>6</A><BR>\n<A href='?src=[REF(src)];type=7'>7</A>-<A href='?src=[REF(src)];type=8'>8</A>-<A href='?src=[REF(src)];type=9'>9</A><BR>\n<A href='?src=[REF(src)];type=R'>R</A>-<A href='?src=[REF(src)];type=0'>0</A>-<A href='?src=[REF(src)];type=E'>E</A><BR>\n</TT>", message)
user << browse(dat, "window=caselock;size=300x280")
user << browse(HTML_SKELETON(dat), "window=caselock;size=300x280")

/obj/item/storage/secure/Topic(href, href_list)
..()
Expand Down
6 changes: 3 additions & 3 deletions code/game/objects/objs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,9 @@
* * to_dir- What direction we're trying to move in, relevant for things like directional windows that only block movement in certain directions
* * caller- The movable we're checking pass flags for, if we're making any such checks
**/
/obj/proc/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
if(ismovable(caller))
var/atom/movable/AM = caller
/obj/proc/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
if(ismovable(caller1))
var/atom/movable/AM = caller1
if(AM.pass_flags & pass_flags_self)
return TRUE
. = !density
Expand Down
6 changes: 3 additions & 3 deletions code/game/objects/structures/girders.dm
Original file line number Diff line number Diff line change
Expand Up @@ -301,10 +301,10 @@
if((mover.pass_flags & PASSGRILLE) || istype(mover, /obj/item/projectile))
return prob(girderpasschance)

/obj/structure/girder/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
/obj/structure/girder/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
. = !density
if(istype(caller))
. = . || (caller.pass_flags & PASSGRILLE)
if(istype(caller1))
. = . || (caller1.pass_flags & PASSGRILLE)

/obj/structure/girder/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
Expand Down
6 changes: 3 additions & 3 deletions code/game/objects/structures/grille.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,10 @@
if(!. && istype(mover, /obj/item/projectile))
return prob(30)

/obj/structure/grille/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
/obj/structure/grille/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
. = !density
if(istype(caller))
. = . || (caller.pass_flags & PASSGRILLE)
if(istype(caller1))
. = . || (caller1.pass_flags & PASSGRILLE)

/obj/structure/grille/attackby(obj/item/W, mob/user, params)
user.DelayNextAction(CLICK_CD_MELEE)
Expand Down
6 changes: 3 additions & 3 deletions code/game/objects/structures/morgue.dm
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ GLOBAL_LIST_EMPTY(crematoriums)
else
return FALSE

/obj/structure/tray/m_tray/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
/obj/structure/tray/m_tray/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
. = !density
if(istype(caller))
. = . || (caller.pass_flags & PASSTABLE)
if(istype(caller1))
. = . || (caller1.pass_flags & PASSTABLE)
12 changes: 6 additions & 6 deletions code/game/objects/structures/plasticflaps.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@
return FALSE
return TRUE

/obj/structure/plasticflaps/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller)
if(isliving(caller))
if(isbot(caller))
/obj/structure/plasticflaps/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller1)
if(isliving(caller1))
if(isbot(caller1))
return TRUE

var/mob/living/living_caller = caller
var/mob/living/living_caller = caller1
if(!(SEND_SIGNAL(living_caller, COMSIG_CHECK_VENTCRAWL)) && living_caller.mob_size != MOB_SIZE_TINY)
return FALSE

if(caller?.pulling)
return CanAStarPass(ID, to_dir, caller.pulling)
if(caller1?.pulling)
return CanAStarPass(ID, to_dir, caller1.pulling)
return TRUE //diseases, stings, etc can pass

/obj/structure/plasticflaps/CanAllowThrough(atom/movable/A, turf/T)
Expand Down
Loading
Loading