Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion code/datums/ai/generic/find_and_set.dm
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@
/datum/ai_behavior/find_and_set/in_hands/given_list

/datum/ai_behavior/find_and_set/in_hands/given_list/search_tactic(datum/ai_controller/controller, locate_paths)
var/list/found = typecache_filter_list(controller.pawn, locate_paths)
// VOIDCREW EDIT START - our typecache filter guard rejects a bare atom (voidcrew/edits/__HELPERS/_lists.dm)
var/atom/pawn = controller.pawn
var/list/found = typecache_filter_list(pawn.contents, locate_paths)
// VOIDCREW EDIT END
if(length(found))
return pick(found)

Expand Down
4 changes: 4 additions & 0 deletions code/datums/quirks/negative_quirks/indebted.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
if(!human_holder.account_id)
return
var/datum/bank_account/account = SSeconomy.bank_accounts_by_id["[human_holder.account_id]"]
// VOIDCREW EDIT START - ship spawns can carry an account_id that isn't registered yet
if(!account)
return
// VOIDCREW EDIT END
var/debt = PAYCHECK_CREW * rand(275, 325)
account.account_debt += debt
RegisterSignal(account, COMSIG_BANK_ACCOUNT_DEBT_PAID, PROC_REF(on_debt_paid))
Expand Down
2 changes: 1 addition & 1 deletion code/datums/storage/storage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches)
/datum/storage/proc/remove_and_refresh(atom/movable/gone)
SIGNAL_HANDLER

for(var/mob/user as anything in is_using)
for(var/mob/user in is_using) // VOIDCREW EDIT: typed loop skips nulls a hard-deleted viewer leaves behind
if(user.client)
var/client/cuser = user.client
cuser.screen -= gone
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
/obj/machinery/atmospherics/pipe/heat_exchanging/process_atmos()
var/environment_temperature = 0
var/datum/gas_mixture/pipe_air = return_air()
// VOIDCREW EDIT START - no pipenet yet (or anymore), nothing to exchange
if(!pipe_air)
return
// VOIDCREW EDIT END

var/turf/local_turf = loc
if(istype(local_turf))
Expand Down
2 changes: 1 addition & 1 deletion code/modules/hallucination/fake_chat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
var/is_radio = force_radio || isnull(speaker)
if(is_radio)
for(var/datum/mind/crew_mind in shuffle(get_crewmember_minds()))
if(crew_mind == hallucinator.mind)
if(crew_mind == hallucinator.mind || isnull(crew_mind.current)) // VOIDCREW EDIT: a mind with no body has no languages to fake
continue
var/list/shared_languages = get_hallucinating_spoken_languages(crew_mind.current) & understood_languages
if(!length(shared_languages))
Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/living/basic/pets/cat/cat_ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@

/datum/ai_planning_subtree/find_and_hunt_target/hunt_mice/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
var/mob/living/living_pawn = controller.pawn
var/list/items_we_carry = typecache_filter_list(living_pawn, controller.blackboard[BB_HUNTABLE_PREY])
var/list/items_we_carry = typecache_filter_list(living_pawn.contents, controller.blackboard[BB_HUNTABLE_PREY]) // VOIDCREW EDIT: our typecache filter guard rejects a bare atom (voidcrew/edits/__HELPERS/_lists.dm)
if(length(items_we_carry))
return
return ..()
Expand Down
4 changes: 4 additions & 0 deletions code/modules/reagents/chem_splash.dm
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,8 @@
for(var/atom/thing as anything in (dview(spread_range, epicenter) & reactable))
var/distance = max(1, get_dist(thing, epicenter))
var/fraction = 0.5 / (2 ** distance) //50/25/12/6... for a 200u splash, 25/12/6/3... for a 100u, 12/6/3/1 for a 50u
// VOIDCREW EDIT START - nothing to expose; expose() stack traces on a zero volume modifier
if(fraction <= 0)
continue
// VOIDCREW EDIT END
source.expose(thing, TOUCH, fraction)
4 changes: 4 additions & 0 deletions code/modules/surgery/organs/internal/eyes/_eyes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,10 @@
addtimer(CALLBACK(src, PROC_REF(animate_eyelids), owner), blink_delay + duration)

/obj/item/organ/eyes/proc/animate_eyelids(mob/living/carbon/human/parent)
// VOIDCREW EDIT START - eyes without eyelids (golem crystals) were animating null
if(!eyelid_left || !eyelid_right)
return
// VOIDCREW EDIT END
var/sync_blinking = synchronized_blinking && (parent.get_organ_loss(ORGAN_SLOT_BRAIN) < BRAIN_DAMAGE_ASYNC_BLINKING)
// Randomize order for unsynched animations
if (sync_blinking || prob(50))
Expand Down
3 changes: 2 additions & 1 deletion voidcrew/modules/lobby_terminal/_lobby_terminal.dm
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ GLOBAL_LIST_EMPTY(lobby_join_locks)

/// Skin side of hiding: control off, status bar back, keyboard back on the map (movement keys).
/datum/lobby_terminal/proc/hide_control()
if(!owner)
// A logging-out client is still referenced here but winset() on it fails with "bad client".
if(!owner || !(owner in GLOB.clients) || owner.mob?.client != owner)
return
winset(owner, control_id, "is-visible=false")
winset(owner, "mapwindow.status_bar", "is-visible=true")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@
if(item in list(builder.internal_rcd, builder.internal_rtd, builder.internal_rpd, builder.internal_rld, builder.internal_painter))
return TRUE
return (item in machine.component_parts) || item == machine.circuit || istype(item, /obj/item/radio)
// A construction console's built-in RCD keeps its own access electronics.
if(istype(item.loc, /obj/item/construction/rcd) && ismachinery(item.loc.loc))
var/obj/item/construction/rcd/tool = item.loc
if(item == tool.airlock_electronics)
return checkpoint_is_machine_fitting(tool)
return istype(item, /obj/item/encryptionkey) && istype(item.loc, /obj/item/radio) && ismachinery(item.loc.loc)

/// Top off as each machine is placed; the hidden copy may have drawn power while it waited.
Expand Down
18 changes: 1 addition & 17 deletions voidcrew/modules/ship_combat/laser_effect.dm
Original file line number Diff line number Diff line change
Expand Up @@ -385,23 +385,7 @@
var/obj/O = AM
O.take_damage(damage, BURN, LASER)

// Damage walls/turfs based on power level
// At low power (below 150%), minimal wall damage
// At high power (150%+), significant wall damage that scales with power
if(impact_loc.density)
var/wall_damage = 0
if(power_level >= 1.5)
// High power mode: walls take significant damage
// At 150% power: 1.5x base damage
// At 200% power: 3x base damage (scales quadratically for dramatic effect)
var/power_bonus = (power_level - 1) * 2 // 0.5 at 150%, 1.0 at 200%
wall_damage = damage * (1 + power_bonus)
else
// Low power: only 10% damage to walls
wall_damage = damage * 0.1

if(wall_damage > 0)
impact_loc.take_damage(wall_damage, BURN, LASER)
// Walls have no integrity, so ship lasers leave them alone.

// Small fire effect
new /obj/effect/hotspot(impact_loc)
Expand Down
2 changes: 0 additions & 2 deletions voidcrew/modules/shuttle/survey/survey_computer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,6 @@
if (survey_in_progress)
return "in-progress"

if(!data.get_related_celestial_list(object.type))
log_runtime("Not found [object.type]")
if(is_object_surveyed(object))
return "complete"
return "unsurveyed"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
RegisterSignal(src, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(queue_extract_piling))
queue_extract_piling()

/obj/item/slime_extract/Moved()
/obj/item/slime_extract/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
. = ..()
if(loc != extract_pile_excluded_turf)
extract_pile_excluded_turf = null
Expand Down
Loading