From e3e60c1e80b321e126fa3a7a790cd0b20fb96f7b Mon Sep 17 00:00:00 2001 From: Bokkiewokkie Date: Sat, 24 Aug 2024 12:20:43 +0200 Subject: [PATCH] Initial multi-z npc paths, inflatable wall range check, knpcs in poi list, first attempt at fixing pathing firedoors --- code/__HELPERS/path.dm | 4 ++-- code/game/machinery/doors/firedoor.dm | 16 ++++++---------- code/game/points_of_interest.dm | 2 +- code/modules/mob/living/carbon/human/examine.dm | 4 ++-- nsv13/code/modules/overmap/knpc.dm | 12 +++++++++--- nsv13/code/modules/overmap/shieldgen.dm | 2 ++ nsv13/code/modules/squads/squad_items.dm | 3 ++- 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/code/__HELPERS/path.dm b/code/__HELPERS/path.dm index 22de777928c..f0a5ce9cfb3 100644 --- a/code/__HELPERS/path.dm +++ b/code/__HELPERS/path.dm @@ -143,8 +143,8 @@ if(!start || !end) stack_trace("Invalid A* start or destination") return - if(start.z != end.z || start == end ) //no pathfinding between z levels - return + // if(start.z != end.z || start == end ) //no pathfinding between z levels + // return //NSV13 we DO want pathfinding between z levels. if(max_distance && (max_distance < get_dist(start, end))) //if start turf is farther than max_distance from end turf, no need to do anything return diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 660d16aa0dd..587ff87f1e0 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -441,6 +441,7 @@ opacity = FALSE var/ini_dir + /obj/machinery/door/firedoor/border_only/Initialize(mapload, loc, set_dir) . = ..() if(set_dir) @@ -528,23 +529,18 @@ leaving.Bump(src) return COMPONENT_ATOM_BLOCK_EXIT -//NSV13 - knpcs can into firelock -/obj/machinery/door/firedoor/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller) - if(istype(caller) && (caller.pass_flags & pass_flags_self)) - return TRUE - if(!density) - return TRUE - if(welded) +//NSV13 - npcs can into firelock +/obj/machinery/door/firedoor/border_only/CanAStarPass(obj/item/card/id/ID, to_dir, atom/movable/caller) + if((welded || (machine_stat & NOPOWER)) && (dir == to_dir)) + message_admins("[src]([ADMIN_FLW(src)]) returned false astarpass with dir [dir], weld [welded] and machine stat [machine_state]") return FALSE - if(!hasPower()) - return isknpc(caller) return TRUE /obj/machinery/door/firedoor/border_only/CanAtmosPass(turf/T) if(get_dir(loc, T) == dir) return !density else - return 1 + return TRUE //NSV13 end /obj/machinery/door/firedoor/heavy diff --git a/code/game/points_of_interest.dm b/code/game/points_of_interest.dm index 5f901631191..18f8b858901 100644 --- a/code/game/points_of_interest.dm +++ b/code/game/points_of_interest.dm @@ -5,7 +5,7 @@ var/list/pois = list() for(var/mob/M in mobs) if(skip_mindless && (!M.mind && !M.ckey)) - if(!isbot(M) && !iscameramob(M) && !ismegafauna(M)) + if(!isbot(M) && !iscameramob(M) && !ismegafauna(M) && !isknpc(M)) //NSV13 add KNPCs continue if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins continue diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 061b5bf68d5..b6381e31b42 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -310,9 +310,9 @@ if(InCritical()) msg += "[t_He] [t_is] barely conscious.\n" if(getorgan(/obj/item/organ/brain)) - if(ai_controller?.ai_status == AI_STATUS_ON) + if(ai_controller?.ai_status == AI_STATUS_ON || isknpc(src)) //NSV13 added KNPCs msg += "[t_He] do[t_es]n't appear to be [t_him]self.\n" - if(!key) + else if(!key) msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.\n" else if(!client) msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" diff --git a/nsv13/code/modules/overmap/knpc.dm b/nsv13/code/modules/overmap/knpc.dm index 8c655df0ca5..595c5418a27 100644 --- a/nsv13/code/modules/overmap/knpc.dm +++ b/nsv13/code/modules/overmap/knpc.dm @@ -26,8 +26,8 @@ GLOBAL_LIST_EMPTY(knpcs) /mob/living/carbon/human/ai_boarder faction = list("Neutral") - var/move_delay = 4 //How quickly do the boys travel? - var/action_delay = 6 //How long we delay between actions + var/move_delay = 6 //How quickly do the boys travel? + var/action_delay = 10 //How long we delay between actions var/knpc_traits = KNPC_IS_DODGER | KNPC_IS_MERCIFUL | KNPC_IS_AREA_SPECIFIC var/difficulty_override = FALSE //Whether to ignore overmap difficulty or not var/list/outfit = list ( @@ -158,7 +158,7 @@ GLOBAL_LIST_EMPTY(knpcs) break //If at least one firedoor in our way is welded shut, welp! blocking_firelock.open() //Open one firelock per tile per try. break - for(var/obj/machinery/door/firedoor/blocking_firelock in this_turf) + for(var/obj/machinery/door/firedoor/blocking_firelock as() in this_turf) if(!((blocking_firelock.flags_1 & ON_BORDER_1) && (blocking_firelock.dir in dir_to_cardinal_dirs(get_dir(this_turf, next_turf))))) //Here, only firelocks on the border matter since fulltile firelocks let you exit. continue if(!blocking_firelock.density || blocking_firelock.operating) @@ -172,7 +172,12 @@ GLOBAL_LIST_EMPTY(knpcs) continue H.forceMove(next_turf) H.visible_message("[H] climbs onto [possible_barrier]!") + var/obj/item/dropped_it + if(H.get_active_held_item()) + dropped_it = H.get_active_held_item() H.Stun(2 SECONDS) //Table. + if(dropped_it) //Don't forget to pick up your stuff + H.put_in_hands(dropped_it, forced=TRUE) if(get_turf(H) == path[1]) increment_path() return TRUE @@ -255,6 +260,7 @@ GLOBAL_LIST_EMPTY(knpcs) if(length(path)) next_path_step() else //They should always be pathing somewhere... + next_path_step() dest = null tries = 0 path = list() diff --git a/nsv13/code/modules/overmap/shieldgen.dm b/nsv13/code/modules/overmap/shieldgen.dm index 55376675734..6db73ebbb77 100644 --- a/nsv13/code/modules/overmap/shieldgen.dm +++ b/nsv13/code/modules/overmap/shieldgen.dm @@ -204,6 +204,8 @@ var/obj/structure/cable/cable = null //Connected cable var/mutable_appearance/c_screen +/obj/machinery/shield_generator/update_icon() + cut_overlays() /obj/machinery/shield_generator/proc/absorb_hit(obj/item/projectile/proj) var/damage = proj.damage diff --git a/nsv13/code/modules/squads/squad_items.dm b/nsv13/code/modules/squads/squad_items.dm index 86b58a3d305..a96e2f315e3 100644 --- a/nsv13/code/modules/squads/squad_items.dm +++ b/nsv13/code/modules/squads/squad_items.dm @@ -406,7 +406,8 @@ . = ..() if(torn) return - inflate(get_turf(target), user) + if(in_range(target, user)) + inflate(get_turf(target), user) /obj/item/inflatable/proc/inflate(turf/target, mob/user) playsound(loc, 'sound/items/zip.ogg', 75, 1)