diff --git a/_maps/map_files/generic/CentCom_minimal.dmm b/_maps/map_files/generic/CentCom_minimal.dmm index 053792354325..68b9df987d56 100644 --- a/_maps/map_files/generic/CentCom_minimal.dmm +++ b/_maps/map_files/generic/CentCom_minimal.dmm @@ -2,29 +2,65 @@ "a" = ( /turf/open/floor/iron, /area/centcom/central_command_areas/control) -"g" = ( -/obj/machinery/light/floor, -/turf/open/floor/iron, +"d" = ( +/turf/closed/wall/vampwall, /area/centcom/central_command_areas/control) "h" = ( /turf/closed/indestructible/riveted, /area/centcom/central_command_areas/control) +"p" = ( +/obj/machinery/light/floor, +/obj/effect/landmark/npcbeacon, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) +"s" = ( +/mob/living/carbon/human/npc/police/standing, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "x" = ( /obj/effect/landmark/error, /obj/effect/landmark/observer_start, /obj/effect/landmark/latejoin, /turf/open/floor/iron, /area/centcom/central_command_areas/control) +"y" = ( +/obj/structure/vampdoor{ + dir = 4 + }, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "A" = ( /turf/cordon, /area/space) "G" = ( /turf/closed/indestructible/splashscreen, /area/space) +"H" = ( +/obj/effect/landmark/npcbeacon, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) +"P" = ( +/obj/structure/vampdoor, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) +"Q" = ( +/obj/effect/landmark/ai_avoid_turf, +/turf/open/floor/carpet, +/area/centcom/central_command_areas/control) +"U" = ( +/mob/living/carbon/human/npc, +/turf/open/floor/iron, +/area/centcom/central_command_areas/control) "W" = ( /obj/effect/landmark/start/new_player, /turf/cordon, /area/space) +"Z" = ( +/obj/effect/landmark/ai_avoid_turf, +/obj/effect/landmark/ai_avoid_turf, +/turf/open/floor/carpet, +/area/centcom/central_command_areas/control) (1,1,1) = {" A @@ -144,9 +180,9 @@ a a a a +Q a -a -a +Q a a a @@ -173,15 +209,15 @@ A h a a +H a a +Q +p +Q a a -g -a -a -a -a +H a a h @@ -208,9 +244,9 @@ a a a a -a -a -a +Q +Q +Q a a a @@ -268,17 +304,17 @@ A A h a +Q +Q +Q a a a a a -a -a -a -a -a -a +Q +Q +Q a h "} @@ -301,15 +337,15 @@ A h a a -g -a -a +p +Q +U a -g +p x a -a -g +Q +p a a h @@ -332,17 +368,17 @@ A A h a +Q +Q +Q a a +s a a -a -a -a -a -a -a -a +Z +Q +Q a h "} @@ -363,19 +399,19 @@ A A A h -a -a -a -a -a -a -a -a -a -a -a -a -a +d +d +d +d +y +d +d +d +y +d +d +d +d h "} (12,1,1) = {" @@ -400,11 +436,11 @@ a a a a +Q +Q +Q a -a -a -a -a +d a a a @@ -429,15 +465,15 @@ A h a a +H a a +Q +p +Q a -a -g -a -a -a -a +d +H a a h @@ -464,11 +500,11 @@ a a a a +Q a +Q a -a -a -a +d a a a @@ -500,7 +536,7 @@ a a a a -a +P a a a @@ -532,7 +568,7 @@ a a a a -a +d a a a diff --git a/code/__DEFINES/~darkpack/factions.dm b/code/__DEFINES/~darkpack/factions.dm index a50f6a29f635..6b9701d65687 100644 --- a/code/__DEFINES/~darkpack/factions.dm +++ b/code/__DEFINES/~darkpack/factions.dm @@ -7,5 +7,5 @@ // City faction #define FACTION_CITY "city" - #define FACTION_GAIA "gaia" +#define FACTION_NPC "npc" diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm index 5dee40c6da19..bd9cd8a71706 100644 --- a/code/modules/admin/verbs/list_exposer.dm +++ b/code/modules/admin/verbs/list_exposer.dm @@ -36,7 +36,7 @@ for(var/entry in GLOB.human_list) var/mob/living/carbon/human/subject = entry if(subject.ckey) - data += "[subject][subject.dna.unique_enzymes][subject.get_bloodtype()?.name]" + data += "[subject.real_name][subject.dna.unique_enzymes][subject.get_bloodtype()?.name]" // DARKPACK EDIT, ORIGINAL: data += "[subject][subject.dna.unique_enzymes][subject.get_bloodtype()?.name]" data += "" var/datum/browser/browser = new(usr, "DNA", "DNA Log", 440, 410) diff --git a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm index 894985d9eee0..280a862c9c39 100644 --- a/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm +++ b/modular_darkpack/modules/blood_drinking/code/drinksomeblood.dm @@ -6,11 +6,6 @@ src.emote("moan") Immobilize(30, TRUE) - if(isnpc(mob)) - var/mob/living/carbon/human/npc/NPC = mob - NPC.danger_source = null - mob.Stun(40) //NPCs don't get to resist - if(mob.blood_volume <= BLOOD_VOLUME_BAD) to_chat(src, span_warning("Your victim's heart beats only weakly. Death comes for them.")) diff --git a/modular_darkpack/modules/blood_drinking/code/overfeeding/handle_overfeeding.dm b/modular_darkpack/modules/blood_drinking/code/overfeeding/handle_overfeeding.dm index c04cc12522b6..5745eef337e5 100644 --- a/modular_darkpack/modules/blood_drinking/code/overfeeding/handle_overfeeding.dm +++ b/modular_darkpack/modules/blood_drinking/code/overfeeding/handle_overfeeding.dm @@ -1,13 +1,6 @@ /mob/living/carbon/human/proc/handle_overfeeding(var/mob/living/carbon/human/human_mob) human_mob.blood_volume = 0 if(human_mob.stat != DEAD) - if(isnpc(human_mob)) - var/mob/living/carbon/human/npc/Npc = human_mob - Npc.last_attacker = null - killed_count = killed_count+1 - if(killed_count >= 5) - SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/humanity_loss.ogg', 0, 0, 75)) - to_chat(src, span_userdanger("POLICE ASSAULT IN PROGRESS")) SEND_SOUND(src, sound('modular_darkpack/modules/deprecated/sounds/feed_failed.ogg', 0, 0, 75)) to_chat(src, span_warning("This sad sacrifice for your own pleasure affects something deep in your mind.")) SEND_SIGNAL(src, COMSIG_PATH_HIT, -1, 0, FALSE) diff --git a/modular_darkpack/modules/cars/code/car.dm b/modular_darkpack/modules/cars/code/car.dm index 982599ec5639..cc4a181ae396 100644 --- a/modular_darkpack/modules/cars/code/car.dm +++ b/modular_darkpack/modules/cars/code/car.dm @@ -238,8 +238,6 @@ if(!locked) to_chat(user, span_warning("The [src] is already unlocked.")) return - for(var/mob/living/carbon/human/npc/police/P in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - P.Aggro(user) log_game("[user] tried lockpicking [src]") var/total_lockpicking = user.st_get_stat(STAT_LARCENY) if(CONFIG_GET(flag/punishing_zero_dots) && total_lockpicking < 1) @@ -291,8 +289,6 @@ if(!driver && !length(passengers) && COOLDOWN_FINISHED(src, beep_cooldown) && locked) COOLDOWN_START(src, beep_cooldown, 7 SECONDS) playsound(src, 'modular_darkpack/modules/cars/sounds/signal.ogg', 50, FALSE) - for(var/mob/living/carbon/human/npc/police/P in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - P.Aggro(user) if(prob(10) && locked) playsound(src, 'modular_darkpack/modules/cars/sounds/open.ogg', 50, TRUE) @@ -497,10 +493,6 @@ speed_in_pixels = 0 COOLDOWN_START(src, impact_delay, 2 SECONDS) - if(driver && istype(bumped_atom, /mob/living/carbon/human/npc)) - var/mob/living/carbon/human/npc/NPC = bumped_atom - NPC.Aggro(driver, TRUE) - last_pos["x_pix"] = 0 last_pos["y_pix"] = 0 for(var/mob/living/L in src) @@ -560,8 +552,6 @@ // Here lies the Car Backwards Long Jump - 2021-2025 var/turf/check_turf = get_turf_in_angle(true_movement_angle, src.loc, 3) - handle_npc_dodge(check_turf, true_movement_angle) - var/turf/hit_turf var/list/in_line = get_line(src, check_turf) for(var/turf/T in in_line) @@ -610,28 +600,6 @@ animate(src, pixel_x = last_pos["x_pix"]+moved_x, pixel_y = last_pos["y_pix"]+moved_y, SScarpool.wait, 1) update_last_pos(moved_x, moved_y) -/obj/darkpack_car/proc/handle_npc_dodge(turf/target, angle) - for(var/turf/T in get_line(src, target)) - var/list/unpassable = T.get_blocking_contents(FALSE, src) - if(!length(unpassable)) - continue - for(var/mob/living/carbon/human/npc/NPC in unpassable) - if(COOLDOWN_FINISHED(NPC, car_dodge) && !HAS_TRAIT(NPC, TRAIT_INCAPACITATED)) - var/list/dodge_direction = list( - SIMPLIFY_DEGREES(angle + 45), - SIMPLIFY_DEGREES(angle - 45), - SIMPLIFY_DEGREES(angle + 90), - SIMPLIFY_DEGREES(angle - 90), - ) - for(var/dir_angle in dodge_direction) - if(get_step(NPC, angle2dir(dir_angle)).density) - dodge_direction.Remove(dir_angle) - if(length(dodge_direction)) - step(NPC, angle2dir(pick(dodge_direction)), NPC.cached_multiplicative_slowdown) - COOLDOWN_START(NPC, car_dodge, 2 SECONDS) - if(prob(50)) - NPC.realistic_say(pick(NPC.socialrole.car_dodged)) - /// Moves the client cameras of living inside of the car. /obj/darkpack_car/proc/move_car_riders(moved_x, moved_y) for(var/mob/living/rider in src) diff --git a/modular_darkpack/modules/doors/code/vampdoor.dm b/modular_darkpack/modules/doors/code/vampdoor.dm index f39c07046b75..0f7b9c0845a2 100644 --- a/modular_darkpack/modules/doors/code/vampdoor.dm +++ b/modular_darkpack/modules/doors/code/vampdoor.dm @@ -308,8 +308,6 @@ if(locked) proc_unlock(5) playsound(src, 'modular_darkpack/modules/doors/sounds/hack.ogg', 100, TRUE) - for(var/mob/living/carbon/human/npc/police/P in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - P.Aggro(user) var/total_lockpicking = user.st_get_stat(STAT_LARCENY) if(do_after(user, lockpick_timer, src, interaction_key = DOAFTER_SOURCE_DOOR)) if(!locked) diff --git a/modular_darkpack/modules/npc/code/human/__npc.dm b/modular_darkpack/modules/npc/code/human/__npc.dm deleted file mode 100644 index 1a1d4b4d3b1e..000000000000 --- a/modular_darkpack/modules/npc/code/human/__npc.dm +++ /dev/null @@ -1,275 +0,0 @@ -#define BANDIT_TYPE_NPC /mob/living/carbon/human/npc/bandit -#define POLICE_TYPE_NPC /mob/living/carbon/human/npc/police - -/mob/living/carbon/human/npc - name = "NPC" - - // NPCs normally walk around slowly - move_intent = MOVE_INTENT_WALK - - // NPC humans get the area of effect, player humans dont. - violation_aoe = TRUE - - /// Until we do a full NPC refactor (see: rewriting every single bit of code) - /// use this to determine NPC weapons and their chances to spawn with them -- assuming you want the NPC to do that - /// Otherwise just set it under the NPC's type as - /// my_weapon = type_path - /// my_backup_weapon = type_path - /// This only determines my_weapon, you set my_backup_weapon yourself - /// The last entry in the list for a type of NPC should always have 100 as the index - // DARKPACK TODO - reimplement weapons - /* - var/static/list/role_weapons_chances = list( - BANDIT_TYPE_NPC = list( - /obj/item/gun/ballistic/automatic/pistol/darkpack/deagle = 33, - /obj/item/gun/ballistic/revolver/darkpack/snub = 33, - /obj/item/melee/baseball_bat/vamp = 100, - ), - POLICE_TYPE_NPC = list( - /obj/item/gun/ballistic/revolver/darkpack/magnum = 66, - /obj/item/gun/ballistic/automatic/darkpack/ar15 = 100, - ) - ) - */ - var/datum/socialrole/socialrole - - var/is_talking = FALSE - COOLDOWN_DECLARE(annoyed_cooldown) - COOLDOWN_DECLARE(car_dodge) - var/hostile = FALSE - var/aggressive = FALSE - var/last_antagonised = 0 - var/mob/living/danger_source - var/obj/effect/abstract/turf_fire/afraid_of_fire - var/mob/living/last_attacker - var/last_health = 100 - var/mob/living/last_damager - - var/turf/walktarget //dlya movementa - - var/last_grab = 0 - - var/tupik_steps = 0 - var/tupik_loc - - var/stopturf = 1 - - var/extra_mags = 2 - var/extra_loaded_rounds = 10 - - var/has_weapon = FALSE - - var/my_weapon_type = null - var/obj/item/my_weapon = null - - var/my_backup_weapon_type = null - var/obj/item/my_backup_weapon = null - - var/spawned_weapon = FALSE - - var/spawned_backup_weapon = FALSE - - var/staying = FALSE - - var/lifespan = 0 //How many cycles. He'll be deleted if over than a ten thousand - var/old_movement = FALSE - var/max_stat = 2 - - var/list/spotted_bodies = list() - - var/is_criminal = FALSE - - var/list/drop_on_death_list = null - -/mob/living/carbon/human/npc/Initialize(mapload) - . = ..() - - GLOB.npc_list += src - GLOB.alive_npc_list += src - - AddElement(/datum/element/relay_attackers) - RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(handle_attacked)) - - // Annoy the NPC when pushed around - RegisterSignal(src, COMSIG_LIVING_MOB_BUMPED, PROC_REF(handle_bumped)) - // Be annoyed if helped - RegisterSignal(src, COMSIG_CARBON_HELP_ACT, PROC_REF(handle_helped)) - - return INITIALIZE_HINT_LATELOAD - -/mob/living/carbon/human/npc/LateInitialize(mapload) - // DARKPACK TODO - reimplement weapons - /* - if (role_weapons_chances.Find(type)) - for(var/weapon in role_weapons_chances[type]) - if(prob(role_weapons_chances[type][weapon])) - my_weapon = new weapon(src) - break - */ - - if (!my_weapon && my_weapon_type) - my_weapon = new my_weapon_type(src) - - if (my_weapon) - has_weapon = TRUE - equip_to_appropriate_slot(my_weapon) - if(istype(my_weapon, /obj/item/gun/ballistic)) - RegisterSignal(my_weapon, COMSIG_GUN_FIRED, PROC_REF(handle_gun)) - RegisterSignal(my_weapon, COMSIG_GUN_EMPTY, PROC_REF(handle_empty_gun)) - register_sticky_item(my_weapon) - - if (my_backup_weapon_type) - my_backup_weapon = new my_backup_weapon_type(src) - equip_to_appropriate_slot(my_backup_weapon) - register_sticky_item(my_backup_weapon) - -/mob/living/carbon/human/npc/Destroy() - QDEL_NULL(socialrole) - danger_source = null - QDEL_NULL(afraid_of_fire) - last_attacker = null - last_damager = null - walktarget = null - tupik_loc = null - my_weapon_type = null - my_weapon = null - my_backup_weapon_type = null - my_backup_weapon = null - spotted_bodies = null - drop_on_death_list = null - GLOB.npc_list -= src - GLOB.alive_npc_list -= src - SShumannpcpool.try_repopulate() - return ..() - -//====================Sticky Item Handling==================== -/mob/living/carbon/human/npc/proc/register_sticky_item(obj/item/my_item) - ADD_TRAIT(my_item, TRAIT_NODROP, NPC_ITEM_TRAIT) - if(!drop_on_death_list?.len) - drop_on_death_list = list() - drop_on_death_list += my_item - -/mob/living/carbon/human/npc/death(gibbed) - . = ..() - - if (!LAZYLEN(drop_on_death_list)) - return - - for (var/obj/item/dropping_item in drop_on_death_list) - LAZYREMOVE(drop_on_death_list, dropping_item) - REMOVE_TRAIT(dropping_item, TRAIT_NODROP, NPC_ITEM_TRAIT) - dropItemToGround(dropping_item, TRUE) - -//============================================================ - -/mob/living/carbon/human/npc/proc/realistic_say(message) - GLOB.move_manager.stop_looping(src) - - if (!message) - return - if (stat >= HARD_CRIT) - return - if (is_talking) - return - is_talking = TRUE - - addtimer(CALLBACK(src, PROC_REF(start_talking), message), 0.5 SECONDS) - -/mob/living/carbon/human/npc/proc/start_talking(message) - create_typing_indicator() - var/typing_delay = round(length_char(message) * 0.5) - addtimer(CALLBACK(src, PROC_REF(finish_talking), message), max(0.1 SECONDS, typing_delay)) - -/mob/living/carbon/human/npc/proc/finish_talking(message) - remove_typing_indicator() - say(message) - is_talking = FALSE - -/mob/living/carbon/human/npc/proc/Annoy(atom/source) - GLOB.move_manager.stop_looping(src) - - if (!can_npc_move()) - return - if (danger_source) - return - - if (!COOLDOWN_FINISHED(src, annoyed_cooldown)) - return - COOLDOWN_START(src, annoyed_cooldown, 5 SECONDS) - - if(source) - addtimer(CALLBACK(src, PROC_REF(face_atom), source), rand(0.3 SECONDS, 0.7 SECONDS)) - - var/phrase - if (prob(50)) - phrase = pick(socialrole.neutral_phrases) - else - if (gender == MALE) - phrase = pick(socialrole.male_phrases) - else - phrase = pick(socialrole.female_phrases) - realistic_say(phrase) - -/mob/living/carbon/human/npc/proc/handle_attacked(datum/source, atom/attacker, attack_flags) - // Only aggro nearby npcs if its lethal. - if(!(attack_flags & (ATTACKER_STAMINA_ATTACK|ATTACKER_SHOVING))) - for(var/mob/living/carbon/human/npc/nearby_npcs in oviewers(DEFAULT_SIGHT_DISTANCE, src)) - nearby_npcs.Aggro(attacker) - SEND_SIGNAL(SSdcs, COMSIG_GLOB_REPORT_CRIME, CRIME_FIREFIGHT, get_turf(src)) - Aggro(attacker, TRUE) - -/mob/living/carbon/human/npc/proc/handle_bumped(mob/living/carbon/human/npc/source, mob/living/bumping) - SIGNAL_HANDLER - - if (bumping.can_mobswap_with(source)) - return - - source.Annoy(bumping) - -/mob/living/carbon/human/npc/proc/handle_helped(mob/living/carbon/human/npc/source, mob/living/helper) - SIGNAL_HANDLER - - source.Annoy(helper) - -/mob/living/carbon/human/npc/Move(NewLoc, direct) - if (!can_npc_move()) - GLOB.move_manager.stop_looping(src) - - var/getaway = stopturf + 1 - - if (!old_movement) - getaway = 2 - - if (get_dist(src, walktarget) <= getaway) - GLOB.move_manager.stop_looping(src) - walktarget = null - - . = ..() - -/mob/living/carbon/human/npc/grabbedby(mob/living/carbon/user, supress_message = FALSE) - . = ..() - - last_grab = world.time - -/mob/living/carbon/human/npc/ghoulificate(mob/owner) - deadchat_broadcast(span_ghostalert("[owner] is ghoulificating [src]."), owner, src) - - AddComponent(\ - /datum/component/ghost_direct_control,\ - ban_type = ROLE_GHOUL,\ - poll_candidates = TRUE,\ - role_name = "[owner]'s ghoul",\ - poll_length = 30 SECONDS,\ - poll_question = "Do you want to play as [owner]'s ghoul?",\ - - assumed_control_message = "You are now [owner]'s ghoul!",\ - after_assumed_control = CALLBACK(src, PROC_REF(ghoul_player_controlled), owner)\ - ) - - //poll_ignore_key = POLL_IGNORE_GHOUL, - - . = ..() - return TRUE - -/mob/living/carbon/human/npc/proc/ghoul_player_controlled(mob/owner) - message_admins("[key_name_admin(src)] has became a ghoul by [key_name_admin(owner)].") diff --git a/modular_darkpack/modules/npc/code/human/_npc.dm b/modular_darkpack/modules/npc/code/human/_npc.dm new file mode 100644 index 000000000000..7e8ff999309b --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/_npc.dm @@ -0,0 +1,69 @@ +/mob/living/carbon/human/npc + faction = list(FACTION_NPC) + ai_controller = /datum/ai_controller/npc + move_intent = MOVE_INTENT_WALK + var/outfit_type = /datum/outfit/npc + +/mob/living/carbon/human/npc/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + equipOutfit(outfit_type) + +/mob/living/carbon/human/npc/RangedAttack(atom/atom_target, modifiers) + . = ..() + INVOKE_ASYNC(src, PROC_REF(fire_gun), atom_target, modifiers) + +/mob/living/carbon/human/npc/proc/fire_gun(atom/target, modifiers) + var/obj/item/gun/gun = locate() in contents + if(!gun.can_shoot()) + if(istype(gun, /obj/item/gun/ballistic)) + var/obj/item/gun/ballistic/ballistic = gun + if(!ballistic.chambered || ballistic.bolt_locked) + ballistic.rack() //we racked so both checked variables should be something else now + // do we have nothing chambered/chambered is spent AND we have no mag or our mag is empty + if(!ballistic.chambered?.loaded_projectile && magazine_useless(gun)) // ran out of ammo + ai_controller?.set_blackboard_key(BB_GUNMIMIC_GUN_EMPTY, TRUE) //BANZAIIIIIIII + ai_controller?.CancelActions() + else //if we cant fire we probably like ran out of energy or magic charges or whatever the hell idk + ai_controller?.set_blackboard_key(BB_GUNMIMIC_GUN_EMPTY, TRUE) + ai_controller?.CancelActions() // Stop our firing behavior so we can plan melee + else + ai_controller?.set_blackboard_key(BB_GUNMIMIC_GUN_EMPTY, FALSE) + gun.fire_gun(target, user = src, flag = FALSE, params = modifiers) //still make like a cool click click sound if trying to fire empty + +/mob/living/carbon/human/npc/proc/magazine_useless(obj/item/gun/ballistic/ballistic) + if(isnull(ballistic.magazine) || !length(ballistic.magazine.stored_ammo)) + return TRUE + // is there ATLEAST one unspent round (for the sake of revolvers or a magazine somehow having spent rounds in it) + for(var/obj/item/ammo_casing/thing as anything in ballistic.magazine.stored_ammo) + if(ispath(thing)) + return FALSE // unspent + if(!isnull(thing.loaded_projectile)) + return FALSE //unspent + return TRUE + +/// NPC subtypes + +/mob/living/carbon/human/npc/bandit + ai_controller = /datum/ai_controller/npc/bandit + outfit_type = /datum/outfit/npc/bandit + +/mob/living/carbon/human/npc/rich + outfit_type = /datum/outfit/npc/rich + +/mob/living/carbon/human/npc/average + outfit_type = /datum/outfit/npc/average + +/mob/living/carbon/human/npc/poor + outfit_type = /datum/outfit/npc/poor + +/mob/living/carbon/human/npc/shop + ai_controller = /datum/ai_controller/npc/stand_still + outfit_type = /datum/outfit/npc/shop + +/mob/living/carbon/human/npc/police + ai_controller = /datum/ai_controller/npc/police + outfit_type = /datum/outfit/npc/police + +/mob/living/carbon/human/npc/police/standing + ai_controller = /datum/ai_controller/npc/stand_still diff --git a/modular_darkpack/modules/npc/code/human/ai/_npc_ai.dm b/modular_darkpack/modules/npc/code/human/ai/_npc_ai.dm new file mode 100644 index 000000000000..9d3660b4cb54 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/_npc_ai.dm @@ -0,0 +1,50 @@ +/datum/ai_controller/npc + ai_movement = /datum/ai_movement/jps + movement_delay = 0.8 SECONDS + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, // Resist out of cuffs or whatnot first. + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, // Then handle combat. + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/flee_target, // End handling combat. + /datum/ai_planning_subtree/look_for_walk_target // Random walking behavior. + ) + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_REINFORCEMENTS_SAY = "HELP!!!", + BB_GUNMIMIC_GUN_EMPTY = FALSE, + ) + can_idle = FALSE + +/datum/ai_controller/npc/PossessPawn(atom/new_pawn) + if(!isliving(new_pawn)) + return AI_CONTROLLER_INCOMPATIBLE + RegisterSignal(new_pawn, COMSIG_MOB_MOVESPEED_UPDATED, PROC_REF(update_movespeed)) + + var/mob/living/living_pawn = new_pawn + movement_delay = living_pawn.cached_multiplicative_slowdown + return ..() //Run parent at end + +/datum/ai_controller/npc/proc/update_movespeed(mob/living/pawn) + SIGNAL_HANDLER + movement_delay = pawn.cached_multiplicative_slowdown + +/datum/ai_controller/npc/on_stat_changed(mob/living/source, new_stat) + . = ..() + update_able_to_run() + +/datum/ai_controller/npc/setup_able_to_run() + . = ..() + RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) + +/datum/ai_controller/npc/clear_able_to_run() + UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE)) + return ..() + +/datum/ai_controller/npc/get_able_to_run() + var/mob/living/living_pawn = pawn + + if(INCAPACITATED_IGNORING(living_pawn, INCAPABLE_RESTRAINTS|INCAPABLE_STASIS|INCAPABLE_GRAB) || living_pawn.stat > CONSCIOUS) + return AI_UNABLE_TO_RUN + return ..() diff --git a/modular_darkpack/modules/npc/code/human/ai/behaviors/choose_attack_subtree.dm b/modular_darkpack/modules/npc/code/human/ai/behaviors/choose_attack_subtree.dm new file mode 100644 index 000000000000..0db906c8ec77 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/behaviors/choose_attack_subtree.dm @@ -0,0 +1,29 @@ +/datum/ai_planning_subtree/choose_attack_subtree + +/datum/ai_planning_subtree/choose_attack_subtree/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/carbon/human/human_pawn = controller.pawn + + if(human_pawn.is_holding_item_of_type(/obj/item/gun)) + if(controller.blackboard[BB_GUNMIMIC_GUN_EMPTY]) + controller.queue_behavior(/datum/ai_behavior/find_weapon) + return + var/datum/ai_planning_subtree/basic_ranged_attack_subtree/npc/ranged_attack_subtree = GLOB.ai_subtrees[/datum/ai_planning_subtree/basic_ranged_attack_subtree] + ranged_attack_subtree.SelectBehaviors(controller, seconds_per_tick) + + var/datum/ai_planning_subtree/basic_melee_attack_subtree/npc/melee_attack_subtree = GLOB.ai_subtrees[/datum/ai_planning_subtree/basic_melee_attack_subtree] + melee_attack_subtree.SelectBehaviors(controller, seconds_per_tick) + +/datum/ai_planning_subtree/basic_ranged_attack_subtree/npc + ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/npc + +/datum/ai_behavior/basic_ranged_attack/npc + action_cooldown = 3 SECONDS + avoid_friendly_fire = TRUE + +/datum/ai_planning_subtree/basic_melee_attack_subtree/npc + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/npc + end_planning = FALSE + +/datum/ai_behavior/basic_melee_attack/npc + action_cooldown = 0.2 SECONDS // We gotta check unfortunately often because we're in a race condition with nextmove + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH diff --git a/modular_darkpack/modules/npc/code/human/ai/behaviors/find_weapon.dm b/modular_darkpack/modules/npc/code/human/ai/behaviors/find_weapon.dm new file mode 100644 index 000000000000..79195c7c0736 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/behaviors/find_weapon.dm @@ -0,0 +1,51 @@ +/datum/ai_planning_subtree/search_for_weapon + +/datum/ai_planning_subtree/search_for_weapon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_MONKEY_BEST_FORCE_FOUND)) + return + controller.queue_behavior(/datum/ai_behavior/find_weapon) + +///re-used behavior pattern by monkeys for finding a weapon +/datum/ai_behavior/find_weapon + +/datum/ai_behavior/find_weapon/perform(seconds_per_tick, datum/ai_controller/controller, ...) + var/mob/living/living_pawn = controller.pawn + + if(!(locate(/obj/item) in living_pawn.held_items)) + controller.set_blackboard_key(BB_MONKEY_BEST_FORCE_FOUND, 0) + + if(controller.blackboard[BB_MONKEY_GUN_NEURONS_ACTIVATED] && (locate(/obj/item/gun) in living_pawn.held_items) && !controller.blackboard_key_exists(BB_GUNMIMIC_GUN_EMPTY)) + // We have a loaded gun, what could we possibly want? + return AI_BEHAVIOR_FAILED + + var/obj/item/weapon + var/list/nearby_items = list() + for(var/obj/item/item in oview(2, living_pawn)) + nearby_items += item + + for(var/obj/item/item in living_pawn.held_items) // If we've got some garbage in out hands that's going to stop us from effectively attacking, we should get rid of it. + if(item.force < 2) + living_pawn.dropItemToGround(item) + + weapon = GetBestWeapon(controller, nearby_items, living_pawn.held_items) + + var/pickpocket = FALSE + for(var/mob/living/carbon/human/human in oview(5, living_pawn)) + var/obj/item/held_weapon = GetBestWeapon(controller, human.held_items + weapon, living_pawn.held_items) + if(held_weapon == weapon) // It's just the same one, not a held one + continue + pickpocket = TRUE + weapon = held_weapon + + if(!weapon || (weapon in living_pawn.held_items)) + return AI_BEHAVIOR_FAILED + + if(weapon.force < 2) // our bite does 2 damage on average, no point in settling for anything less + return AI_BEHAVIOR_FAILED + + controller.set_blackboard_key(BB_MONKEY_PICKUPTARGET, weapon) + if(pickpocket) + controller.queue_behavior(/datum/ai_behavior/monkey_equip/pickpocket, BB_MONKEY_PICKUPTARGET) + else + controller.queue_behavior(/datum/ai_behavior/monkey_equip/ground, BB_MONKEY_PICKUPTARGET) + return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY diff --git a/modular_darkpack/modules/npc/code/human/ai/behaviors/random_movement.dm b/modular_darkpack/modules/npc/code/human/ai/behaviors/random_movement.dm new file mode 100644 index 000000000000..f2257e30cf76 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/behaviors/random_movement.dm @@ -0,0 +1,45 @@ +/datum/ai_behavior/travel_towards/stop_on_arrival/npc + new_movement_type = /datum/ai_movement/jps/npc + +/datum/ai_movement/jps/npc + diagonal_flags = DIAGONAL_REMOVE_CLUNKY + maximum_length = AI_BOT_PATH_LENGTH + max_pathing_attempts = 10 + +///look for our npc beacon +/datum/ai_planning_subtree/look_for_walk_target + var/travel_behavior = /datum/ai_behavior/travel_towards/stop_on_arrival/npc + +/datum/ai_planning_subtree/look_for_walk_target/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(controller.blackboard_key_exists(BB_TRAVEL_DESTINATION)) + controller.queue_behavior(travel_behavior, BB_TRAVEL_DESTINATION) + return + + controller.queue_behavior(/datum/ai_behavior/find_target, BB_TRAVEL_DESTINATION) + +/datum/ai_behavior/find_target + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + var/list/past_destinations = list() + +/datum/ai_behavior/find_target/perform(seconds_per_tick, datum/ai_controller/controller, destination) + var/list/possible_destinations = list() + for(var/obj/effect/landmark/npcbeacon/random_destination in GLOB.landmarks_list) + if(random_destination == controller.blackboard[BB_TRAVEL_DESTINATION]) + continue + if(random_destination in past_destinations) + continue + possible_destinations += random_destination + + if(!length(possible_destinations)) + return AI_BEHAVIOR_FAILED + + var/obj/effect/landmark/destination_marker = pick(possible_destinations) + if(isnull(destination_marker)) + return AI_BEHAVIOR_FAILED + + if(length(past_destinations) >= 5) + past_destinations -= past_destinations[1] + past_destinations += destination_marker + + controller.set_blackboard_key(destination, destination_marker) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/modular_darkpack/modules/npc/code/human/ai/subtypes/bandit_npc_ai.dm b/modular_darkpack/modules/npc/code/human/ai/subtypes/bandit_npc_ai.dm new file mode 100644 index 000000000000..b0bc24f9963a --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/subtypes/bandit_npc_ai.dm @@ -0,0 +1,18 @@ +/datum/ai_controller/npc/bandit + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, // Resist out of cuffs or whatnot first. + /datum/ai_planning_subtree/target_retaliate, // Then handle combat. + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/search_for_weapon, + /datum/ai_planning_subtree/choose_attack_subtree, // End handling combat. + /datum/ai_planning_subtree/look_for_walk_target // Random walking behavior. + ) + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_REINFORCEMENTS_SAY = "GET THIS BASTARD!", + BB_GUNMIMIC_GUN_EMPTY = FALSE, + BB_MONKEY_BLACKLISTITEMS = list(), + ) + diff --git a/modular_darkpack/modules/npc/code/human/ai/subtypes/police_npc_ai.dm b/modular_darkpack/modules/npc/code/human/ai/subtypes/police_npc_ai.dm new file mode 100644 index 000000000000..81ebf26daae3 --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/subtypes/police_npc_ai.dm @@ -0,0 +1,17 @@ +/datum/ai_controller/npc/police + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, // Resist out of cuffs or whatnot first. + /datum/ai_planning_subtree/target_retaliate, // Then handle combat. + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/search_for_weapon, + /datum/ai_planning_subtree/choose_attack_subtree, // End handling combat. + /datum/ai_planning_subtree/look_for_walk_target // Random walking behavior. + ) + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_REINFORCEMENTS_EMOTE = "presses their radio's emergency button.", + BB_GUNMIMIC_GUN_EMPTY = FALSE, + BB_MONKEY_BLACKLISTITEMS = list(), + ) diff --git a/modular_darkpack/modules/npc/code/human/ai/subtypes/stand_still_npc_ai.dm b/modular_darkpack/modules/npc/code/human/ai/subtypes/stand_still_npc_ai.dm new file mode 100644 index 000000000000..18a2e346295d --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/ai/subtypes/stand_still_npc_ai.dm @@ -0,0 +1,46 @@ +/datum/ai_controller/npc/stand_still + ai_movement = /datum/ai_movement/jps + movement_delay = 0.8 SECONDS + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, // Resist out of cuffs or whatnot first. + /datum/ai_planning_subtree/target_retaliate, // Then handle combat. + /datum/ai_planning_subtree/search_for_weapon, + /datum/ai_planning_subtree/choose_attack_subtree, // End handling combat. + /datum/ai_planning_subtree/go_home + ) + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_REINFORCEMENTS_EMOTE = "presses their radio's emergency button.", + BB_GUNMIMIC_GUN_EMPTY = FALSE, + BB_MONKEY_BLACKLISTITEMS = list(), + BB_HOME_VILLAGE = null + ) + can_idle = FALSE + +/datum/ai_controller/npc/stand_still/New(atom/new_pawn) + . = ..() + set_blackboard_key(BB_HOME_VILLAGE, get_turf(new_pawn)) + +/datum/ai_planning_subtree/go_home + var/travel_behavior = /datum/ai_behavior/travel_towards/stop_on_arrival/npc + +/datum/ai_planning_subtree/go_home/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(get_turf(controller.pawn) == controller.blackboard[BB_HOME_VILLAGE]) + var/mob/living/nearest_mob = get_closest_atom(/mob/living, oviewers(DEFAULT_SIGHT_DISTANCE, controller.pawn), controller.pawn) + if(can_see(controller.pawn, nearest_mob, DEFAULT_SIGHT_DISTANCE)) + controller.pawn.dir = get_dir(controller.pawn, nearest_mob) + return + if(controller.blackboard_key_exists(BB_TRAVEL_DESTINATION)) + controller.queue_behavior(travel_behavior, BB_TRAVEL_DESTINATION) + return + + controller.queue_behavior(/datum/ai_behavior/find_home, BB_TRAVEL_DESTINATION) + +/datum/ai_behavior/find_home + behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/find_home/perform(seconds_per_tick, datum/ai_controller/controller, destination) + controller.set_blackboard_key(destination, controller.blackboard[BB_HOME_VILLAGE]) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/modular_darkpack/modules/npc/code/human/clothing_datums.dm b/modular_darkpack/modules/npc/code/human/clothing_datums.dm new file mode 100644 index 000000000000..7e0c489f21df --- /dev/null +++ b/modular_darkpack/modules/npc/code/human/clothing_datums.dm @@ -0,0 +1,183 @@ +/datum/outfit/npc + name = "NPC Default" + uniform = /obj/item/clothing/under/vampire/gangrel + shoes = /obj/item/clothing/shoes/vampire + +/datum/outfit/npc/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + back = pick( + /obj/item/storage/backpack, + /obj/item/storage/backpack/satchel, + /obj/item/storage/backpack/duffelbag, + /obj/item/storage/backpack/satchel/leather, + /obj/item/storage/backpack/messenger, + null, + ) + +/datum/outfit/npc/bandit + name = "NPC Bandit" + +/datum/outfit/npc/bandit/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + shoes = pick( + /obj/item/clothing/shoes/vampire/sneakers, + /obj/item/clothing/shoes/vampire/sneakers/red, + /obj/item/clothing/shoes/vampire/jackboots, + ) + uniform = pick( + /obj/item/clothing/under/vampire/larry, + /obj/item/clothing/under/vampire/bandit, + /obj/item/clothing/under/vampire/biker, + ) + head = pick( + /obj/item/clothing/head/vampire/bandana, + /obj/item/clothing/head/vampire/bandana/red, + /obj/item/clothing/head/vampire/bandana/black, + /obj/item/clothing/head/vampire/beanie, + /obj/item/clothing/head/vampire/beanie/black, + null, + ) + l_pocket = pick( + /obj/item/stack/dollar/rand, + /obj/item/vamp/keys/hack, + null, + ) + r_pocket = pick( + /obj/item/stack/dollar/rand, + /obj/item/vamp/keys/hack, + null, + ) + r_hand = pick( + /obj/item/knife/vamp, + /obj/item/melee/baseball_bat/vamp, + /obj/item/crowbar, + null, + ) + +/datum/outfit/npc/rich + name = "NPC Rich" + +/datum/outfit/npc/rich/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + uniform = pick( + /obj/item/clothing/under/vampire/rich, + /obj/item/clothing/under/vampire/business, + ) + shoes = pick( + /obj/item/clothing/shoes/vampire, + /obj/item/clothing/shoes/vampire/white, + /obj/item/clothing/shoes/vampire/heels, + /obj/item/clothing/shoes/vampire/heels/red, + ) + r_hand = pick( + /obj/item/storage/briefcase, + null, + ) + l_pocket = pick( + /obj/item/stack/dollar/hundred, + /obj/item/stack/dollar/fifty, + /obj/item/vamp/keys/npc, + null, + ) + r_pocket = pick( + /obj/item/stack/dollar/hundred, + /obj/item/stack/dollar/fifty, + /obj/item/vamp/keys/npc, + null, + ) + +/datum/outfit/npc/average + name = "NPC Average" + +/datum/outfit/npc/average/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + uniform = pick( + /obj/item/clothing/under/vampire/mechanic, + /obj/item/clothing/under/vampire/sport, + /obj/item/clothing/under/vampire/office, + /obj/item/clothing/under/vampire/sexy, + /obj/item/clothing/under/vampire/slickback, + /obj/item/clothing/under/vampire/emo, + /obj/item/clothing/under/vampire/black, + /obj/item/clothing/under/vampire/red, + /obj/item/clothing/under/vampire/gothic, + ) + shoes = pick( + /obj/item/clothing/shoes/vampire/sneakers, + /obj/item/clothing/shoes/vampire/heels, + /obj/item/clothing/shoes/vampire, + /obj/item/clothing/shoes/vampire/brown, + ) + l_pocket = pick( + /obj/item/vamp/keys/npc, + /obj/item/stack/dollar/rand, + null, + ) + r_pocket = pick( + /obj/item/vamp/keys/npc, + /obj/item/stack/dollar/rand, + null, + ) + +/datum/outfit/npc/poor + name = "NPC Poor" + +/datum/outfit/npc/poor/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + uniform = pick( + /obj/item/clothing/under/vampire/homeless, + /obj/item/clothing/under/vampire/homeless/female, + ) + shoes = pick( + /obj/item/clothing/shoes/vampire/jackboots/work, + /obj/item/clothing/shoes/vampire/brown, + ) + suit = pick( + /obj/item/clothing/suit/vampire/coat, + /obj/item/clothing/suit/vampire/coat/alt, + ) + head = pick( + /obj/item/clothing/head/vampire/beanie/black, + /obj/item/clothing/head/vampire/beanie/homeless, + ) + neck = pick( + /obj/item/clothing/neck/vampire/scarf/red, + /obj/item/clothing/neck/vampire/scarf, + /obj/item/clothing/neck/vampire/scarf/blue, + /obj/item/clothing/neck/vampire/scarf/green, + /obj/item/clothing/neck/vampire/scarf/white, + ) + +/datum/outfit/npc/shop + name = "NPC Shopkeeper" + uniform = /obj/item/clothing/under/vampire/mechanic + +/datum/outfit/npc/shop/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + shoes = pick( + /obj/item/clothing/shoes/vampire/sneakers, + /obj/item/clothing/shoes/vampire, + /obj/item/clothing/shoes/vampire/brown, + ) + l_pocket = pick( + /obj/item/stack/dollar/rand, + /obj/item/vamp/keys/npc, + null, + ) + +/datum/outfit/npc/police + name = "NPC Police Officer" + uniform = /obj/item/clothing/under/vampire/police + shoes = /obj/item/clothing/shoes/vampire/jackboots + suit = /obj/item/clothing/suit/vampire/vest/police + head = /obj/item/clothing/head/vampire/police + gloves = /obj/item/clothing/gloves/color/black + l_pocket = /obj/item/stack/dollar/rand + +/datum/outfit/npc/police/pre_equip(mob/living/carbon/human/user, visuals_only) + . = ..() + r_hand = pick( + /obj/item/melee/baton, + /obj/item/gun/ballistic/automatic/pistol/darkpack/glock19, + null, + ) diff --git a/modular_darkpack/modules/npc/code/human/npc_aggression.dm b/modular_darkpack/modules/npc/code/human/npc_aggression.dm deleted file mode 100644 index ff59719c80cb..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_aggression.dm +++ /dev/null @@ -1,144 +0,0 @@ -/mob/living/carbon/human/npc/proc/Aggro(mob/living/victim, attacked = FALSE) - if (stat == DEAD) - return - if (attacked && danger_source != victim) - GLOB.move_manager.stop_looping(src) - if (victim == src) - return - if (isnpc(victim)) - return - - // If the victim doesn't appear dead, enter combat mode and set - // them as the NPC's danger source. - if (!HAS_TRAIT(victim, TRAIT_DEATHCOMA)) - set_combat_mode(TRUE) - if (move_intent == MOVE_INTENT_WALK) - toggle_move_intent() - - danger_source = victim - if(attacked) - last_attacker = victim - if(health != last_health) - last_health = health - last_damager = victim - - if (!can_npc_move()) - return - if ((last_antagonised + 5 SECONDS) >= world.time) - return - last_antagonised = world.time - - if (prob(50)) - if (!my_weapon && prob(50)) - emote("scream") - else - realistic_say(pick(socialrole.help_phrases)) - -/mob/living/carbon/human/npc/proc/end_combat() - danger_source = null - if (has_weapon) - if (get_active_held_item() == my_weapon) - npc_stow_weapon() - else - has_weapon = FALSE - walktarget = ChoosePath() - - set_combat_mode(FALSE) - if (move_intent == MOVE_INTENT_RUN) - toggle_move_intent() - -/mob/living/carbon/human/npc/proc/handle_gun(obj/item/gun/ballistic/weapon, mob/living/user, atom/target, params, zone_override) - SIGNAL_HANDLER - - if(weapon.loc != src) - UnregisterSignal(weapon, COMSIG_GUN_FIRED) - UnregisterSignal(weapon, COMSIG_GUN_EMPTY) - return - - if(!istype(weapon, /obj/item/gun/ballistic)) - return - - if(istype(weapon.magazine, /obj/item/ammo_box/magazine/internal)) - var/obj/item/ammo_box/magazine/internal_mag = weapon.magazine - if(extra_loaded_rounds) - internal_mag.give_round(new internal_mag.ammo_type()) - extra_loaded_rounds-- - addtimer(CALLBACK(src, PROC_REF(rack_held_gun), weapon), weapon.rack_delay) - return - - if(!weapon.magazine.ammo_count() && extra_mags) - extra_mags-- - weapon.eject_magazine_npc(src, new weapon.spawn_magazine_type(src)) - weapon.rack(src) - if(!weapon.chambered) - weapon.chamber_round() - -/mob/living/carbon/human/npc/proc/rack_held_gun(obj/item/gun/ballistic/weapon) - if(weapon.bolt_locked) - weapon.drop_bolt() - weapon.rack(src) - -/mob/living/carbon/human/npc/proc/handle_empty_gun() - SIGNAL_HANDLER - - UnregisterSignal(my_weapon, COMSIG_GUN_FIRED) - UnregisterSignal(my_weapon, COMSIG_GUN_EMPTY) - npc_stow_weapon() - - if (!my_backup_weapon || spawned_backup_weapon) - return - npc_draw_backup_weapon() - my_weapon = my_backup_weapon - spawned_backup_weapon = TRUE - -/mob/living/carbon/human/npc/proc/npc_stow_weapon() - if (!my_weapon) - return - - REMOVE_TRAIT(my_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - temporarilyRemoveItemFromInventory(my_weapon, TRUE) - equip_to_appropriate_slot(my_weapon) - ADD_TRAIT(my_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - spawned_weapon = FALSE - -/mob/living/carbon/human/npc/proc/npc_draw_weapon() - if (!my_weapon) - return - - REMOVE_TRAIT(my_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - temporarilyRemoveItemFromInventory(my_weapon, TRUE) - put_in_active_hand(my_weapon) - ADD_TRAIT(my_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - spawned_weapon = TRUE - -/mob/living/carbon/human/npc/proc/npc_draw_backup_weapon() - if (!my_backup_weapon) - return - - REMOVE_TRAIT(my_backup_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - temporarilyRemoveItemFromInventory(my_backup_weapon, TRUE) - put_in_active_hand(my_backup_weapon) - ADD_TRAIT(my_backup_weapon, TRAIT_NODROP, NPC_ITEM_TRAIT) - spawned_weapon = TRUE - -/obj/item/gun/ballistic/proc/eject_magazine_npc(mob/user, obj/item/ammo_box/magazine/tac_load = null) - if(bolt_type == BOLT_TYPE_OPEN) - chambered = null - if (magazine.ammo_count()) - playsound(src, load_sound, load_sound_volume, load_sound_vary) - else - playsound(src, load_empty_sound, load_sound_volume, load_sound_vary) - magazine.forceMove(drop_location()) - var/obj/item/ammo_box/magazine/old_mag = magazine - - if (tac_load) - tac_load.forceMove(src) - if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked) - chamber_round(TRUE) - magazine = tac_load - else - magazine = null - - old_mag.forceMove(get_turf(user)) - old_mag.update_icon() - update_icon() diff --git a/modular_darkpack/modules/npc/code/human/npc_globals.dm b/modular_darkpack/modules/npc/code/human/npc_globals.dm deleted file mode 100644 index 95dba2e34389..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_globals.dm +++ /dev/null @@ -1,8 +0,0 @@ -/// All human NPCs, living or dead -GLOBAL_LIST_EMPTY(npc_list) -/// All living human NPCs -GLOBAL_LIST_EMPTY(alive_npc_list) -/// Landmarks that NPCs will navigate towards -GLOBAL_LIST_EMPTY(npc_activities) -/// Landmarks that NPCs will spawn at -GLOBAL_LIST_EMPTY(npc_spawn_points) diff --git a/modular_darkpack/modules/npc/code/human/npc_human_subsystem.dm b/modular_darkpack/modules/npc/code/human/npc_human_subsystem.dm deleted file mode 100644 index 10887de97b85..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_human_subsystem.dm +++ /dev/null @@ -1,55 +0,0 @@ -SUBSYSTEM_DEF(humannpcpool) - name = "Human NPC Pool" - flags = SS_POST_FIRE_TIMING|SS_BACKGROUND - priority = FIRE_PRIORITY_NPC - runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME - wait = 0.3 SECONDS - - dependencies = list( - /datum/controller/subsystem/mapping, - /datum/controller/subsystem/atoms, - ) - - var/list/currentrun = list() - -/datum/controller/subsystem/humannpcpool/Initialize() - try_repopulate() - return SS_INIT_SUCCESS - -/datum/controller/subsystem/humannpcpool/stat_entry(msg) - var/list/activelist = GLOB.npc_list - var/list/living_list = GLOB.alive_npc_list - msg = "NPCS:[length(activelist)] Living: [length(living_list)]" - return ..() - -/datum/controller/subsystem/humannpcpool/fire(resumed = FALSE) - - if (!resumed) - var/list/activelist = GLOB.npc_list - src.currentrun = activelist.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(currentrun.len) - var/mob/living/carbon/human/npc/NPC = currentrun[currentrun.len] - --currentrun.len - - if (MC_TICK_CHECK) - return - NPC.handle_automated_movement() - -/datum/controller/subsystem/humannpcpool/proc/try_repopulate() - if (!length(GLOB.npc_spawn_points)) - return - - while (length(GLOB.alive_npc_list) < SSmapping.current_map.max_npcs) - var/atom/chosen_spawn_point = pick(GLOB.npc_spawn_points) - var/creating_npc = pick( - /mob/living/carbon/human/npc/police, \ - /mob/living/carbon/human/npc/bandit, \ - /mob/living/carbon/human/npc/hobo, \ - /mob/living/carbon/human/npc/walkby, \ - /mob/living/carbon/human/npc/business \ - ) - new creating_npc(get_turf(chosen_spawn_point)) diff --git a/modular_darkpack/modules/npc/code/human/npc_movement.dm b/modular_darkpack/modules/npc/code/human/npc_movement.dm deleted file mode 100644 index 56d2b851ec04..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_movement.dm +++ /dev/null @@ -1,315 +0,0 @@ -/obj/effect/landmark/npc_spawn_point - icon = 'modular_darkpack/modules/deprecated/icons/effects/landmarks_static.dmi' - icon_state = "spawn" - -/obj/effect/landmark/npc_spawn_point/Initialize(mapload) - . = ..() - - GLOB.npc_spawn_points += src - -/obj/effect/landmark/npc_spawn_point/Destroy() - GLOB.npc_spawn_points -= src - - . = ..() - -/obj/effect/landmark/npcbeacon - name = "NPC beacon" - var/directionwalk - -/obj/effect/landmark/npcbeacon/directed - name = "NPC traffic" - icon = 'modular_darkpack/modules/deprecated/icons/effects/landmarks_static.dmi' - icon_state = "npc" - -/obj/effect/landmark/npcbeacon/directed/Initialize(mapload) - . = ..() - - directionwalk = dir - -/obj/effect/landmark/npcwall - name = "NPC Wall" - icon_state = "x" - -/obj/effect/landmark/npcactivity - name = "NPC Activity" - icon = 'modular_darkpack/modules/deprecated/icons/effects/landmarks_static.dmi' - icon_state = "bullets" - -/obj/effect/landmark/npcability - name = "NPC Ability" - icon = 'modular_darkpack/modules/deprecated/icons/effects/landmarks_static.dmi' - icon_state = "ability" - -/obj/effect/landmark/npcactivity/Initialize(mapload) - . = ..() - - GLOB.npc_activities += src - -/obj/effect/landmark/npcactivity/Destroy() - . = ..() - - GLOB.npc_activities -= src - -/mob/living/carbon/human/npc/death() - GLOB.alive_npc_list -= src - SShumannpcpool.try_repopulate() - GLOB.move_manager.stop_looping(src) - - if (!last_attacker || (get_dist(src, last_attacker) >= 10) || key || hostile) - return ..() - - if (istype(last_attacker, /mob/living/simple_animal/hostile)) - var/mob/living/simple_animal/hostile/HS = last_attacker - if(HS.my_creator) - SEND_SIGNAL(HS.my_creator, COMSIG_PATH_HIT, -1, 0, FALSE, 8) - HS.my_creator.killed_count += 1 - if(!HS.my_creator.warrant && !HS.my_creator.ignores_warrant) - if(HS.my_creator.killed_count >= 5) - HS.my_creator.warrant = TRUE - SEND_SOUND(HS.my_creator, sound('modular_darkpack/modules/deprecated/sounds/suspect.ogg', 0, 0, 75)) - to_chat(HS.my_creator, span_userdanger("POLICE ASSAULT IN PROGRESS")) - else - SEND_SOUND(HS.my_creator, sound('modular_darkpack/modules/deprecated/sounds/sus.ogg', 0, 0, 75)) - to_chat(HS.my_creator, span_userdanger("SUSPICIOUS ACTION (murder)")) - else if (ishuman(last_attacker)) - var/mob/living/carbon/human/HM = last_attacker - SEND_SIGNAL(HM, COMSIG_PATH_HIT, -1, 0, FALSE, 8) - HM.killed_count += 1 - if(!HM.warrant && !HM.ignores_warrant) - if(HM.killed_count >= 5) - HM.warrant = TRUE - SEND_SOUND(HM, sound('modular_darkpack/modules/deprecated/sounds/suspect.ogg', 0, 0, 75)) - to_chat(HM, span_userdanger("POLICE ASSAULT IN PROGRESS")) - else - SEND_SOUND(HM, sound('modular_darkpack/modules/deprecated/sounds/sus.ogg', 0, 0, 75)) - to_chat(HM, span_userdanger("SUSPICIOUS ACTION (murder)")) - - . = ..() - -/mob/living/carbon/human/npc/Life() - // huh, NPCs don't run Life() at all if they're dead - // this means NPCs' organs will never rot, they'll stop bleeding, their body will stay - // the temperature it was when they died, etc. remove? - if (stat == DEAD) - return - - . = ..() - - if (pulledby && (prob(25) || aggressive)) - INVOKE_ASYNC(src, PROC_REF(Aggro), pulledby, TRUE) - - if (!can_npc_move()) - return - nutrition = 400 - if (get_dist(danger_source, src) < 7) - last_antagonised = world.time - if (fire_stacks >= 1) - INVOKE_ASYNC(src, PROC_REF(execute_resist)) - - if (staying) - return - if (!walktarget) - walktarget = ChoosePath() - if (loc == tupik_loc) - tupik_steps += 1 - else - tupik_loc = loc - tupik_steps = 0 - - if (tupik_steps <= 3) - return - var/turf/T = get_step(src, pick(NORTH, SOUTH, WEST, EAST)) - face_atom(T) - step_to(src, T, 0) - - if (!walktarget || old_movement) - return - if (observed_by_player()) - return - forceMove(get_turf(walktarget)) - -/mob/living/carbon/human/npc/proc/CreateWay(direction) - var/turf/location = get_turf(src) - for(var/distance = 1 to 50) - location = get_step(location, direction) - if(iswallturf(location)) - return location - for(var/atom/A in location) - // DARKPACK TODO - reimplement decor - /* - if(A.density && !istype(A, /obj/structure/lamppost)) - return location - */ - if(istype(A, /obj/effect/landmark/npcwall)) - return get_step_towards(location, get_turf(src)) - if(istype(A, /obj/effect/landmark/npcbeacon) && prob(50)) - stopturf = 1 - return get_step(location, direction) - -/mob/living/carbon/human/npc/proc/ChoosePath() - if(!old_movement) - var/list/possible_list = list() - for(var/obj/effect/landmark/npcactivity/N in GLOB.npc_activities) - if(get_dist(src, N) < 64) - var/turf/T = get_step(N, turn(get_dir(src, N), 180)) - var/obj/effect/landmark/npcability/A = locate() in T - if(A) - if(N.x > x-3 && N.x < x+3) - possible_list += N - if(N.y > y-3 && N.y < y+3) - possible_list += N - if(!length(possible_list)) - var/atom/shitshit - for(var/obj/effect/landmark/npcactivity/N in GLOB.npc_activities) - if(!shitshit) - shitshit = N - if(get_dist(src, N) > 1 && get_dist(src, N) < get_dist(src, shitshit)) - shitshit = N - if(shitshit) - return shitshit - else if (length(GLOB.npc_activities)) - return pick(GLOB.npc_activities) - else - return - - return pick(possible_list) - else - var/turf/north_steps = CreateWay(NORTH) - var/turf/south_steps = CreateWay(SOUTH) - var/turf/west_steps = CreateWay(WEST) - var/turf/east_steps = CreateWay(EAST) - - if(dir == NORTH || dir == SOUTH) - if(get_dist(src, west_steps) >= 7 && get_dist(src, east_steps) >= 7) - return(pick(west_steps, east_steps)) - if(get_dist(src, west_steps) > get_dist(src, east_steps)) - if(prob(75)) - return west_steps - else if(get_dist(src, east_steps) > get_dist(src, west_steps)) - if(prob(75)) - return east_steps - else - if(dir == NORTH) - return pick(west_steps, east_steps, south_steps) - else - return pick(west_steps, east_steps, north_steps) - - if(dir == WEST || dir == EAST) - if(get_dist(src, north_steps) >= 7 && get_dist(src, south_steps) >= 7) - return pick(north_steps, south_steps) - if(get_dist(src, north_steps) > get_dist(src, south_steps)) - if(prob(75)) - return north_steps - else if(get_dist(src, south_steps) > get_dist(src, north_steps)) - if(prob(75)) - return south_steps - else - if(dir == WEST) - return pick(north_steps, south_steps, east_steps) - else - return pick(north_steps, south_steps, west_steps) - -/mob/living/carbon/human/npc/proc/can_npc_move() - if(stat >= HARD_CRIT) - return FALSE - if((last_grab + 1.5 SECONDS) > world.time) - return FALSE - if(mind || client) - return FALSE - if(IsSleeping()) - return FALSE - if(IsUnconscious()) - return FALSE - if(IsParalyzed()) - return FALSE - if(IsKnockdown()) - return FALSE - if(IsStun()) - return FALSE - if(HAS_TRAIT(src, TRAIT_RESTRAINED)) - return FALSE - if(is_talking) - return FALSE - if(pulledby) - if (HAS_TRAIT(pulledby, TRAIT_CHARMER)) - return FALSE - if (prob(30)) - execute_resist() - return FALSE - - return TRUE - -/mob/living/carbon/human/npc/proc/observed_by_player() - for (var/mob/observing_mob in viewers(DEFAULT_SIGHT_DISTANCE, src)) - if (!observing_mob.client) - continue - return TRUE - - return FALSE - -/mob/living/carbon/human/npc/proc/handle_automated_movement() - if (!can_npc_move()) - return - - if(!staying) - lifespan += 1 - if(!walktarget && !staying) - stopturf = rand(1, 2) - walktarget = ChoosePath() - face_atom(walktarget) - - // Can't do anything if in a container - if (!isturf(loc)) - return - - // Checks for fire, clearing the stored fire if none is in view - afraid_of_fire = locate(/obj/effect/abstract/turf_fire) in view(DEFAULT_SIGHT_DISTANCE, src) - - // Combat behaviour - if (danger_source) - // Run away from the danger source if they aren't aggressive and have no weapon - if (!has_weapon && !aggressive) - GLOB.move_manager.move_away(src, danger_source, 10, cached_multiplicative_slowdown) - else - // Criminals will attack anyone, others will only attack non-police - // DARKPACK TODO - reimplement IDs - /* - var/obj/item/card/id/id_card = danger_source.get_idcard(FALSE) - if (!istype(id_card, /obj/item/card/id/police) || is_criminal) - */ - if(!spawned_weapon && has_weapon) - npc_draw_weapon() - if(spawned_weapon && get_active_held_item() != my_weapon) - has_weapon = FALSE - if(danger_source) - if(danger_source == src) - danger_source = null - else - ClickOn(danger_source) - face_atom(danger_source) - GLOB.move_manager.move_to(src, danger_source, 1, cached_multiplicative_slowdown) - - // Deaggro if the danger source has been beaten up - if (danger_source.stat > UNCONSCIOUS) - end_combat() - - // Deaggro if 30 second have passed since being antagonised - if ((last_antagonised + 30 SECONDS) <= world.time) - end_combat() - - // Running away from fire behaviour - else if (afraid_of_fire) - GLOB.move_manager.move_away(src, afraid_of_fire, 10, cached_multiplicative_slowdown) - if (prob(25)) - emote("scream") - - // Walking around behaviour - else if (walktarget && !staying) - GLOB.move_manager.move_to(src, walktarget, 0, cached_multiplicative_slowdown) - - if (!has_weapon || danger_source || !spawned_weapon) - return - if (get_active_held_item() == my_weapon) - npc_stow_weapon() - else - has_weapon = FALSE diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bacotell.dm b/modular_darkpack/modules/npc/code/human/npc_types/bacotell.dm deleted file mode 100644 index b3dddea9d542..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bacotell.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human/npc/bacotell - staying = TRUE - -/mob/living/carbon/human/npc/bacotell/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop/bacotell) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bandit.dm b/modular_darkpack/modules/npc/code/human/npc_types/bandit.dm deleted file mode 100644 index 13a32c525d40..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bandit.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/carbon/human/npc/bandit - max_stat = HARD_CRIT - my_backup_weapon_type = /obj/item/knife/vamp - -/mob/living/carbon/human/npc/bandit/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/bandit) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/__bouncer.dm b/modular_darkpack/modules/npc/code/human/npc_types/bouncers/__bouncer.dm deleted file mode 100644 index ab7e28d2e9df..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/__bouncer.dm +++ /dev/null @@ -1,185 +0,0 @@ -/mob/living/carbon/human/npc/bouncer - - //Assigns an ID to NPCs that guard certain doors, must match a barrier's ID - var/protected_zone_id = "test" - - var/list/denial_phrases = list("I HAVE NO DENIAL PHRASE") - var/list/entry_phrases = list("I HAVE NO ENTRY PHRASE") - var/list/police_block_phrases = list("I HAVE NO POLICE BAN PHRASE") - var/list/block_phrases = list("I HAVE NO BLOCK PHRASE") - - staying = TRUE - - var/left_home_at = 0 - var/walk_home_timer = 2 MINUTES - var/warp_home_timer = 30 SECONDS - - - var/datum/vip_barrier_perm/linked_perm = null - - var/message_cooldown = 0 - var/repeat_delay = 8 SECONDS - var/resume_neutral_direction_delay = 4 SECONDS - - var/is_dominated = FALSE //Whether or not the man is dominated - var/is_in_awe = FALSE //Whether or not the man is being hit by presence - - var/turf/start_turf = null //Where the creature spawns so it can return from whence it came - var/our_role = /datum/socialrole/bouncer - - var/is_guarding = TRUE - - my_weapon_type = /obj/item/gun/ballistic/shotgun/vampire - my_backup_weapon_type = /obj/item/melee/baton/vamp - - //Behavior settings - aggressive=TRUE - -/mob/living/carbon/human/npc/bouncer/Initialize(mapload) - .=..() - - if(mapload && src.type == /mob/living/carbon/human/npc/bouncer) - CRASH("Bouncer created using default type, please use a child of this type in mapping.") - - AssignSocialRole(our_role) - - start_turf = get_turf(src) - - RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(yearn_for_home)) - RegisterSignal(src, COMSIG_MOB_STATCHANGE, PROC_REF(stat_change_process_is_guarding)) - - if(SSbouncer_barriers.vip_barrier_perms?[protected_zone_id]) - linked_perm = SSbouncer_barriers.vip_barrier_perms[protected_zone_id] - linked_perm.add_bouncer(src) - else if(mapload && SSbouncer_barriers.initialized) - CRASH("A Bouncer was created for vip_barrier_perms that were not loaded!") - -/mob/living/carbon/human/npc/bouncer/Destroy() - if(linked_perm) - linked_perm.linked_bouncers -= src - linked_perm = null - - return ..() - -/mob/living/carbon/human/npc/bouncer/on_knockedout_trait_gain(datum/source) - ..() - set_is_guarding_false() - -/mob/living/carbon/human/npc/bouncer/on_immobilized_trait_gain(datum/source) - ..() - set_is_guarding_false() - -/mob/living/carbon/human/npc/bouncer/on_restrained_trait_gain(datum/source) - ..() - set_is_guarding_false() - -/mob/living/carbon/human/npc/bouncer/on_knockedout_trait_loss(datum/source) - ..() - set_is_guarding_true() - -/mob/living/carbon/human/npc/bouncer/on_immobilized_trait_loss(datum/source) - ..() - set_is_guarding_true() - -/mob/living/carbon/human/npc/bouncer/on_restrained_trait_loss(datum/source) - ..() - set_is_guarding_true() - - -/mob/living/carbon/human/npc/bouncer/AssignSocialRole(datum/socialrole/bouncer/role, dont_random = FALSE) - . = ..(role, dont_random) - - if(role && ispath(role, /datum/socialrole/bouncer)) - var/datum/socialrole/bouncer/social_role = new role() - denial_phrases = social_role.denial_phrases - entry_phrases = social_role.entry_phrases - police_block_phrases = social_role.police_block_phrases - block_phrases = social_role.block_phrases - my_weapon_type = role.bouncer_weapon_type - my_backup_weapon_type = role.bouncer_backup_weapon_type - -/mob/living/carbon/human/npc/bouncer/proc/stat_change_process_is_guarding(datum/source, statchange) - if(statchange >= HARD_CRIT) - is_guarding = FALSE - if(statchange == DEAD) - linked_perm.process_dead_bouncer(src) - else if (!HAS_TRAIT(src, TRAIT_RESTRAINED) && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT) && !HAS_TRAIT(src, TRAIT_IMMOBILIZED)) - is_guarding = TRUE - go_home() - else - return - linked_perm.check_barrier_guarded() - -/mob/living/carbon/human/npc/bouncer/proc/set_is_guarding_true(datum/source) - if(stat >= HARD_CRIT) - return - is_guarding = TRUE - go_home() - linked_perm.check_barrier_guarded() - -/mob/living/carbon/human/npc/bouncer/proc/set_is_guarding_false(datum/source) - is_guarding = FALSE - linked_perm.check_barrier_guarded() - - -//when the bouncer moves, they try to return home after awhile -/mob/living/carbon/human/npc/bouncer/proc/yearn_for_home() - SIGNAL_HANDLER - if((get_turf(src) != start_turf) && !left_home_at) - left_home_at = world.time - addtimer(CALLBACK(src, PROC_REF(go_home)), walk_home_timer) - else if((get_turf(src) == start_turf) && left_home_at) - left_home_at = 0 - -//mob tries to return home if its timer is up. -/mob/living/carbon/human/npc/bouncer/proc/go_home() - if(get_turf(src) == start_turf || !is_guarding) - return - - if(left_home_at + walk_home_timer <= world.time) - danger_source = null - walk_to(src, start_turf, 1, cached_multiplicative_slowdown) - addtimer(CALLBACK(src, PROC_REF(position_hard_reset)), warp_home_timer) - -/mob/living/carbon/human/npc/bouncer/proc/position_hard_reset() - if(is_guarding && get_turf(src) != start_turf) - danger_source = null - forceMove(start_turf) - - - -/mob/living/carbon/human/npc/bouncer/examine(mob/user) - .=..() - - if(can_be_reasoned_with() && in_range(src, user)) - var/list/interact_options = list( - "Persuade for Entry" = image(icon = 'icons/obj/toys/dice.dmi', icon_state = "d10")) - - var/obj/item/held_item = user.get_active_held_item() - if(held_item && istype(held_item, /obj/item/card/police)) - interact_options["Show Badge"] = image(icon = held_item.icon, icon_state = held_item.icon_state) - var/picked_option = show_radial_menu(user, src, interact_options, radius = 38, require_near = TRUE) - switch(picked_option) - if("Persuade for Entry") - to_chat(user, span_notice("You try to talk your way through.")) - linked_perm.notify_barrier_social_bypass(user, src) - if("Show Badge") - to_chat(user, span_notice("You flash your [held_item] as you try to talk your way through.")) - linked_perm.notify_barrier_social_bypass(user, src, TRUE) - - -/mob/living/carbon/human/npc/bouncer/proc/can_be_reasoned_with() - if(!is_guarding || get_turf(src)!=start_turf) - return FALSE - return TRUE - - -/mob/living/carbon/human/npc/bouncer/proc/speak_seldom(phrase, mob/target) - if(can_be_reasoned_with() && world.time > message_cooldown) - message_cooldown = world.time + repeat_delay - realistic_say(phrase) - dir = get_dir(loc, get_turf(target)) - addtimer(CALLBACK(src, PROC_REF(resume_neutral_direction)), resume_neutral_direction_delay) - -/mob/living/carbon/human/npc/bouncer/proc/resume_neutral_direction() - dir = initial(dir) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_elysium.dm b/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_elysium.dm deleted file mode 100644 index 8d31f5902e11..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_elysium.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/carbon/human/npc/bouncer/elysium - our_role = /datum/socialrole/bouncer/elysium - protected_zone_id = "elysium" - -/mob/living/carbon/human/npc/bouncer/elysium/elysium_2 - protected_zone_id = "elysium_2" - -/mob/living/carbon/human/npc/bouncer/elysium/stripclub - protected_zone_id = "elysium_strip" - -/mob/living/carbon/human/npc/bouncer/elysium/theatre - protected_zone_id = "elysium_theatre" - -/mob/living/carbon/human/npc/bouncer/elysium/theatre_backdoor - protected_zone_id = "theatre_backdoor" diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_endron.dm b/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_endron.dm deleted file mode 100644 index 672d0ce6bda1..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_endron.dm +++ /dev/null @@ -1,18 +0,0 @@ -/mob/living/carbon/human/npc/bouncer/endron - our_role = /datum/socialrole/bouncer/endron - protected_zone_id = "endron" - -/mob/living/carbon/human/npc/bouncer/endron/endron_2 - our_role = /datum/socialrole/bouncer/endron/endron_2 - protected_zone_id = "endron_2" - -/mob/living/carbon/human/npc/bouncer/endron/endron_backdoor - protected_zone_id = "endron_backdoor" - -/mob/living/carbon/human/npc/bouncer/endron/endron_lab - our_role = /datum/socialrole/bouncer/endron/endron_lab - protected_zone_id = "endron_lab" - -/mob/living/carbon/human/npc/bouncer/endron/endron_lab_2 - our_role = /datum/socialrole/bouncer/endron/endron_lab_2 - protected_zone_id = "endron_lab_2" diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_giovanni.dm b/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_giovanni.dm deleted file mode 100644 index a7d45997964f..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bouncers/bouncer_giovanni.dm +++ /dev/null @@ -1,3 +0,0 @@ -/mob/living/carbon/human/npc/bouncer/giovanni - our_role = /datum/socialrole/bouncer/giovanni - protected_zone_id = "giovanni" diff --git a/modular_darkpack/modules/npc/code/human/npc_types/bubway.dm b/modular_darkpack/modules/npc/code/human/npc_types/bubway.dm deleted file mode 100644 index fd9f001ebe59..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/bubway.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human/npc/bubway - staying = TRUE - -/mob/living/carbon/human/npc/bubway/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop/bubway) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/business.dm b/modular_darkpack/modules/npc/code/human/npc_types/business.dm deleted file mode 100644 index 268eb97456d0..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/business.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/carbon/human/npc/business - bloodquality = BLOOD_QUALITY_HIGH - -/mob/living/carbon/human/npc/business/Initialize(mapload) - . = ..() - - var/datum/socialrole/assign_role = pick(/datum/socialrole/richmale, /datum/socialrole/richfemale) - AssignSocialRole(assign_role) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/club.dm b/modular_darkpack/modules/npc/code/human/npc_types/club.dm deleted file mode 100644 index 49743c088214..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/club.dm +++ /dev/null @@ -1,28 +0,0 @@ -/mob/living/carbon/human/npc/walkby/club - staying = TRUE - -/mob/living/carbon/human/npc/walkby/club/Life() - . = ..() - - if (!staying || stat >= UNCONSCIOUS) - return - if (!prob(5)) - return - - INVOKE_ASYNC(src, PROC_REF(dance_at_jukebox)) - -/mob/living/carbon/human/npc/walkby/club/proc/dance_at_jukebox() - var/hasjukebox = FALSE - for (var/obj/machinery/jukebox/jukebox in range(5, src)) - hasjukebox = TRUE - - // Hacky check for if it's currently playing - if (jukebox.static_power_usage != ACTIVE_POWER_USE) - continue - if (prob(50)) - dancefirst(src) - else - dancesecond(src) - - if (!hasjukebox) - staying = FALSE diff --git a/modular_darkpack/modules/npc/code/human/npc_types/garden.dm b/modular_darkpack/modules/npc/code/human/npc_types/garden.dm deleted file mode 100644 index 4b0b1227923b..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/garden.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/carbon/human/npc/garden - staying = TRUE - is_talking = TRUE - -/mob/living/carbon/human/npc/garden/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop/garden) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/guard.dm b/modular_darkpack/modules/npc/code/human/npc_types/guard.dm deleted file mode 100644 index 02735da8cb25..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/guard.dm +++ /dev/null @@ -1,11 +0,0 @@ -/mob/living/carbon/human/npc/guard - staying = TRUE - aggressive = TRUE - max_stat = DEAD - my_weapon_type = /obj/item/gun/ballistic/automatic/pistol/darkpack/m1911 - my_backup_weapon_type = /obj/item/melee/baton/vamp - -/mob/living/carbon/human/npc/guard/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/guard) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/gummaguts.dm b/modular_darkpack/modules/npc/code/human/npc_types/gummaguts.dm deleted file mode 100644 index 82bfe1881c06..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/gummaguts.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human/npc/gummaguts - staying = TRUE - -/mob/living/carbon/human/npc/gummaguts/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop/gummaguts) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/hobo.dm b/modular_darkpack/modules/npc/code/human/npc_types/hobo.dm deleted file mode 100644 index 3ac55810a3bf..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/hobo.dm +++ /dev/null @@ -1,9 +0,0 @@ -/mob/living/carbon/human/npc/hobo - bloodquality = BLOOD_QUALITY_LOW - old_movement = TRUE - -/mob/living/carbon/human/npc/hobo/Initialize(mapload) - . = ..() - - var/datum/socialrole/assign_role = pick(/datum/socialrole/poormale, /datum/socialrole/poorfemale) - AssignSocialRole(assign_role) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm b/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm deleted file mode 100644 index 25f5ef547e89..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/illegal.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/carbon/human/npc/illegal - staying = TRUE - is_talking = TRUE - -/mob/living/carbon/human/npc/illegal/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop/illegal) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/incel.dm b/modular_darkpack/modules/npc/code/human/npc_types/incel.dm deleted file mode 100644 index 41ffe46480a0..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/incel.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human/npc/incel - staying = TRUE - -/mob/living/carbon/human/npc/incel/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/usualmale) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/police.dm b/modular_darkpack/modules/npc/code/human/npc_types/police.dm deleted file mode 100644 index 1ecb69805af0..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/police.dm +++ /dev/null @@ -1,41 +0,0 @@ -/mob/living/carbon/human/npc/police - aggressive = TRUE - max_stat = DEAD - my_backup_weapon_type = /obj/item/melee/baton/vamp - -/mob/living/carbon/human/npc/police/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/police) - -/mob/living/carbon/human/npc/police/Life() - . = ..() - - if (stat >= SOFT_CRIT) - return - if (!prob(10)) - return - - INVOKE_ASYNC(src, PROC_REF(check_for_criminals)) - -/mob/living/carbon/human/npc/police/proc/check_for_criminals() - for (var/mob/living/carbon/human/H in oviewers(4, src)) - if (!H.warrant) - continue - - Aggro(H, FALSE) - -// DARKPACK TODO: create a police npc that just stands there -/mob/living/carbon/human/npc/police/static - // fights_anyway = TRUE - staying = TRUE - max_stat = UNCONSCIOUS - my_backup_weapon_type = /obj/item/melee/baton/vamp - -/* -/mob/living/carbon/human/npc/police/Initialize() - . = ..() - - if(prob(66)) - set_body_model(FAT_BODY_MODEL) -*/ diff --git a/modular_darkpack/modules/npc/code/human/npc_types/shop.dm b/modular_darkpack/modules/npc/code/human/npc_types/shop.dm deleted file mode 100644 index 4d2459c23756..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/shop.dm +++ /dev/null @@ -1,8 +0,0 @@ -/mob/living/carbon/human/npc/shop - staying = TRUE - is_talking = TRUE - -/mob/living/carbon/human/npc/shop/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/shop) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/stripper.dm b/modular_darkpack/modules/npc/code/human/npc_types/stripper.dm deleted file mode 100644 index 84c314572b70..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/stripper.dm +++ /dev/null @@ -1,28 +0,0 @@ -/mob/living/carbon/human/npc/stripper - staying = TRUE - -/mob/living/carbon/human/npc/stripper/Initialize(mapload) - . = ..() - - AssignSocialRole(/datum/socialrole/stripfemale) - - underwear = "Nude" - undershirt = "Nude" - socks = "Nude" - - update_body() - -/mob/living/carbon/human/npc/stripper/Life() - . = ..() - - if (stat >= UNCONSCIOUS) - return - if (!prob(20)) - return - - INVOKE_ASYNC(src, PROC_REF(pole_dance)) - -/mob/living/carbon/human/npc/stripper/proc/pole_dance() - for (var/obj/structure/pole/pole in range(1, src)) - drop_all_held_items() - ClickOn(pole) diff --git a/modular_darkpack/modules/npc/code/human/npc_types/walkby.dm b/modular_darkpack/modules/npc/code/human/npc_types/walkby.dm deleted file mode 100644 index 669409a160fb..000000000000 --- a/modular_darkpack/modules/npc/code/human/npc_types/walkby.dm +++ /dev/null @@ -1,7 +0,0 @@ -/mob/living/carbon/human/npc/walkby - -/mob/living/carbon/human/npc/walkby/Initialize(mapload) - . = ..() - - var/datum/socialrole/assign_role = pick(/datum/socialrole/usualmale, /datum/socialrole/usualfemale) - AssignSocialRole(assign_role) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/__socialrole.dm b/modular_darkpack/modules/npc/code/human/socialroles/__socialrole.dm deleted file mode 100644 index be49354b0308..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/__socialrole.dm +++ /dev/null @@ -1,356 +0,0 @@ -/datum/socialrole - //For randomizing - var/list/s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2", - ) - var/min_age = 18 - var/max_age = 85 - var/preferred_gender - var/list/male_names = list( - "Jack", - "Robert", - "Cornelius", - "Tyler" - ) - var/list/female_names = list( - "Marla" - ) - var/list/surnames = list( - "Durden", - "Polson", - "Singer" - ) - - //Hair shit - var/list/hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918", //Punk Blue - ) - var/list/male_hair = list( - "Bald", - "Afro", - "Afro 2", - "Afro (Large)", - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Bowlcut", - "Bowlcut 2", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Bun (Manbun)", - "Buzzcut", - "Comet", - "CIA", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Mohawk", - "Mohawk (Shaved)", - "Mohawk (Unshaven)", - "Oxton", - "Pompadour", - "Ronin", - "Shaved", - ) - var/list/male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Dwarf)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Goatee)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Very Long)", - "Beard (Martial Artist)", - "Beard (Moonshiner)", - "Beard (Long)", - "Beard (Volaju)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Fu Manchu)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns (Mutton Chops)", - "Sideburns", - "Shaved", - ) - var/list/female_hair = list( - "Ahoge", - "Long Bedhead", - "Beehive", - "Beehive 2", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Double Bun", - "Emo", - "Emo Fringe", - "Feather", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Long Over Eye", - "Long Emo", - "Long Fringe", - "Ponytail", - "Ponytail 2", - "Ponytail 3", - "Ponytail 4", - "Ponytail 5", - "Ponytail 6", - "Ponytail 7", - "Ponytail (High)", - "Ponytail (Short)", - "Ponytail (Long)", - "Ponytail (Country)", - "Ponytail (Fringe)", - "Poofy", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju", - ) - - // TODO: refactor this into a premade outfit - var/list/backpacks = list( - /obj/item/storage/backpack/satchel, - /obj/item/storage/backpack/satchel/leather - ) - var/list/shoes = list() - var/list/uniforms = list() - var/list/belts = list() - var/list/suits = list() - var/list/hats = list() - var/list/gloves = list() - var/list/masks = list() - var/list/neck = list() - var/list/ears = list() - var/list/glasses = list() - var/list/inhand_items = list() - var/list/pockets = list() - - //For workers and police - var/obj/item/card/id/id_type - - //What will npc use in fight, if so - var/obj/item/melee/melee_weapon - var/obj/item/gun/range_weapon - - //For reaction - var/list/male_phrases = list( - "My wife is waiting for me at home...", - "Sorry, pal, not today.", - "Go find yourself someone at the bar, I'm busy.", - ) - var/list/female_phrases = list( - "Buy yourself a watch.", - "I'm going to scream if you keep it up!", - "Don't touch me.", - ) - var/list/neutral_phrases = list( - "Fuck off.", - "Go on your way.", - "Not the best time to talk right now, pal.", - "Мgmmph...", - "Do I know you?", - "I don't have much time.", - ) - var/list/random_phrases = list( - "You a foreigner?...", - "It seems I've been going around here in circles for the third time, already.", - "Watch where you're walkin'!", - "Go back to the drains where you came from.", - "Tourists... Pheh.", - "Rumors travel fast.", - ) - var/list/answer_phrases = list( - "I agree.", - "Yes-yes...", - "Exactly.", - "Maybe.", - "Exactly.", - "Affirmative..", - ) - var/list/help_phrases = list( - "Help!", - "Help Me!!", - "What the hell's going on here!?", - "Shoot!!", - ) - var/list/car_dodged = list( - "WOAH!", - "Watch where you're going!", - "Holy shit!", - "Watch it!", - "Learn to drive!", - "You almost ran me over!", - "What the fuck!?", - ) - - var/is_criminal = FALSE - -/mob/living/carbon/human/npc/proc/AssignSocialRole(datum/socialrole/S, dont_random) - socialrole = new S() - - fully_replace_character_name(name, real_name) - - maxHealth = round(initial(maxHealth)+(initial(maxHealth)/3)*(st_get_stat(STAT_STAMINA))) - health = round(initial(health)+(initial(health)/3)*(st_get_stat(STAT_STAMINA))) - last_health = health - - is_criminal = socialrole.is_criminal - if (check_holidays(FESTIVE_SEASON)) - if (!length(socialrole.suits)) - socialrole.suits = list( - /obj/item/clothing/suit/vampire/coat/winter, - /obj/item/clothing/suit/vampire/coat/winter/alt - ) - if (!length(socialrole.neck) && prob(50)) - socialrole.neck = list( - /obj/item/clothing/neck/vampire/scarf/red, - /obj/item/clothing/neck/vampire/scarf, - /obj/item/clothing/neck/vampire/scarf/blue, - /obj/item/clothing/neck/vampire/scarf/green, - /obj/item/clothing/neck/vampire/scarf/white - ) - - if(!dont_random) - gender = pick(MALE, FEMALE) - if(socialrole.preferred_gender) - gender = socialrole.preferred_gender - physique = gender - var/list/m_names = list() - var/list/f_names = list() - var/list/s_names = list() - var/random_name - if(socialrole.male_names) - m_names = socialrole.male_names - else - m_names = GLOB.first_names_male - if(socialrole.female_names) - f_names = socialrole.female_names - else - f_names = GLOB.first_names_female - if(socialrole.surnames) - s_names = socialrole.surnames - else - s_names = GLOB.last_names - age = rand(socialrole.min_age, socialrole.max_age) - skin_tone = pick(socialrole.s_tones) - - if (age >= 55) - set_haircolor("a2a2a2") - set_facial_haircolor(hair_color) - else - set_haircolor(pick(socialrole.hair_colors)) - set_facial_haircolor(hair_color) - if (gender == MALE) - set_hairstyle(pick(socialrole.male_hair)) - if (prob(25) || age >= 25) - set_facial_hairstyle(pick(socialrole.male_facial)) - else - set_facial_hairstyle("Shaved") - random_name = "[pick(m_names)] [pick(s_names)]" - fully_replace_character_name(newname = random_name) - else - set_hairstyle(pick(socialrole.female_hair)) - set_facial_hairstyle("Shaved") - random_name = "[pick(f_names)] [pick(s_names)]" - fully_replace_character_name(newname = random_name) - - set_eye_color(random_eye_color()) - - underwear = random_underwear(gender) - if (prob(50)) - underwear_color = eye_color_left - if (prob(50) || gender == FEMALE) - undershirt = random_undershirt(gender) - if (prob(25)) - socks = random_socks() - - update_body() - - // this should be refactored into just... applying a premade outfit - var/datum/outfit/O = new() - if(length(socialrole.backpacks)) - O.back = pick(socialrole.backpacks) - if(length(socialrole.uniforms)) - O.uniform = pick(socialrole.uniforms) - if(length(socialrole.belts)) - O.belt = pick(socialrole.belts) - if(length(socialrole.suits)) - O.suit = pick(socialrole.suits) - if(length(socialrole.gloves)) - O.gloves = pick(socialrole.gloves) - if(length(socialrole.shoes)) - O.shoes = pick(socialrole.shoes) - if(length(socialrole.hats)) - O.head = pick(socialrole.hats) - if(length(socialrole.masks)) - O.mask = pick(socialrole.masks) - if(length(socialrole.neck)) - O.neck = pick(socialrole.neck) - if(length(socialrole.ears)) - O.ears = pick(socialrole.ears) - if(length(socialrole.glasses)) - O.glasses = pick(socialrole.glasses) - if(length(socialrole.inhand_items)) - O.r_hand = pick(socialrole.inhand_items) - if(socialrole.id_type) - O.id = socialrole.id_type - if(O.uniform && length(socialrole.pockets)) - O.l_pocket = pick(socialrole.pockets) - if(length(socialrole.pockets) > 1 && prob(50)) - var/list/another_pocket = socialrole.pockets.Copy() - another_pocket -= O.l_pocket - O.r_pocket = pick(another_pocket) - equipOutfit(O) - qdel(O) - - dna.update_dna_identity() diff --git a/modular_darkpack/modules/npc/code/human/socialroles/bandit.dm b/modular_darkpack/modules/npc/code/human/socialroles/bandit.dm deleted file mode 100644 index c844a20283c6..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/bandit.dm +++ /dev/null @@ -1,145 +0,0 @@ - -/datum/socialrole/bandit - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" - ) - - min_age = 18 - max_age = 45 - preferred_gender = MALE - male_names = null - surnames = null - is_criminal = TRUE - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433" //Light Brown - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire/sneakers, - /obj/item/clothing/shoes/vampire/sneakers/red, - /obj/item/clothing/shoes/vampire/jackboots - ) - uniforms = list( - /obj/item/clothing/under/vampire/larry, - /obj/item/clothing/under/vampire/bandit, - /obj/item/clothing/under/vampire/biker - ) - hats = list( - /obj/item/clothing/head/vampire/bandana, - /obj/item/clothing/head/vampire/bandana/red, - /obj/item/clothing/head/vampire/bandana/black, - /obj/item/clothing/head/vampire/beanie, - /obj/item/clothing/head/vampire/beanie/black - ) - pockets = list( - // /obj/item/stack/dollar/rand, - /obj/item/vamp/keys/hack - ) - - //[Lucia] - this has been edited to have better English because it included slurs, but none of the others have yet - male_phrases = list( - "Whatchu staring at?", - "Tryina threaten me or sumthin'?", - "You need somethin'?", - "You've got some balls, that's for sure.", - "You know who I work for?", - "Get the hell outta here, 'fore I get my gang on yo' ass.", - "You need sumn' punk?", - "Get lost, liberal.", - "Get outta this side of town.", - "Think you scare me? You know who I work for?", - "Think you're hot shit?" - ) - neutral_phrases = list( - "Why you starin' at me like that?", - "Another dumbass tryin' to look threatening.", - "Halloween's over, what's with the costumes.", - "I think that whore gave me the clap.", - "Gotta get home soon, family to feed and all that.", - "Get lost, liberal.", - "I think.. I miss my wife.", - "What? You need somethin?", - "Outta my way.", - "Piss off asshole, ain't in the mood for your shit.", - "Fuck off." - ) - random_phrases = list( - "Dumbass.", - "I miss my girl...", - "What's wrong bro?", - "GOOD. FUCKING. EVENING.", - "Evenin.", - "Y'know I saw you sellin' dope, right?", - "We're fucking doomed...", - "It's over...", - "Guh..." - ) - answer_phrases = list( - "I've got it...", - "Fucking hellhole, this whole town.", - "Shit, man.", - "You don' look like I know you.. Do I know you?", - "Right.", - "Uhmm... Cool I guess", - "Had some good food over at gummaguts, stomach hurts though..." - ) - help_phrases = list( - "God, not again!", - "Fucking FREAK!", - "What the hell are you doing!?", - "You fucked up!", - "Check yo' self, fool!", - "We got shit, shit that'll shut you up for good!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/guard.dm b/modular_darkpack/modules/npc/code/human/socialroles/guard.dm deleted file mode 100644 index 6e763b549244..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/guard.dm +++ /dev/null @@ -1,98 +0,0 @@ -/datum/socialrole/guard - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3" - ) - - min_age = 18 - max_age = 85 - preferred_gender = MALE - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - shoes = list(/obj/item/clothing/shoes/vampire) - uniforms = list(/obj/item/clothing/under/vampire/guard) - - // pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - - neutral_phrases = list( - "No loitering.", - "I'm kinda, like, a cop, you know.", - "I could go for some bearclaws right about now.", - "Like the uniform?", - "Hey, catch me later, I'll buy you a beer." - ) - neutral_phrases = list( - "No loitering.", - "I'm kinda, like, a cop, you know?", - "I could go for some bearclaws right about now.", - "Like the uniform?", - "Hey, catch me later, I'll buy you a beer." - ) - random_phrases = list( - "It's been a real quiet night.", - "My brothers and father are security guards, too." - ) - answer_phrases = list("I need some coffee.") - help_phrases = list( - "It's go time!", - "Stop right there!!", - "Drop your weapon!", - "Freeze!!", - "Not just a mall cop, you know!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/police.dm b/modular_darkpack/modules/npc/code/human/socialroles/police.dm deleted file mode 100644 index 090afed6fb32..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/police.dm +++ /dev/null @@ -1,153 +0,0 @@ -/datum/socialrole/police - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3" - ) - - min_age = 18 - max_age = 45 - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - ) - - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju", - ) - - female_hair = list( - "Ahoge", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju" - ) - - - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved", - ) - - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - uniforms = list(/obj/item/clothing/under/vampire/police) - hats = list(/obj/item/clothing/head/vampire/police) - suits = list(/obj/item/clothing/suit/vampire/vest/police) - // pockets = list(/obj/item/stack/dollar/rand) - - male_phrases = list( - "I see you.", - "Looking suspicious...", - "Don't try anything stupid.", - "Nothing to see here.", - "We're watching you...Scum.", - "Have you seen a man in a black coat with black hair?", - "Citizen.", - "You catch the game last night?" - ) - - neutral_phrases = list( - "I see you.", - "Looking suspicious...", - "Don't try anything stupid.", - "Nothing to see here.", - "We're watching you...Scum.", - "Have you seen a man in a black coat with black hair?", - "Citizen.", - "You catch the game last night?" - ) - - female_phrases = list( - "I see you.", - "Looking suspicious...", - "Don't try anything stupid.", - "Nothing to see here.", - "We're watching you...Scum.", - "Have you seen a man in a black coat with black hair?", - "Citizen.", - "You catch the game last night?" - ) - - random_phrases = list( - "I see you.", - "Looking suspicious...", - "Don't try anything stupid.", - "Nothing to see here.", - "We're watching you...Scum.", - "Have you seen a man in a black coat with black hair?", - "Citizen.", - "You catch the game last night?", - ) - answer_phrases = list( - "I'm here to protect you." - ) - help_phrases = list( - "Lay down!", - "Stop right there!!", - "Drop your weapon!", - "Stop there right now!!", - "This is SFPD, hands on your head!", - "You have the right to remain silent!", - "Bush gave me the right to kick your head in!", - "I'm gonna beat you harder than the Eagles got beat by the Patriots!", - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/poorfemale.dm b/modular_darkpack/modules/npc/code/human/socialroles/poorfemale.dm deleted file mode 100644 index 61cd4130effc..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/poorfemale.dm +++ /dev/null @@ -1,124 +0,0 @@ -/datum/socialrole/poorfemale - s_tones = list("albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2") - - min_age = 45 - max_age = 85 - preferred_gender = FEMALE - female_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - female_hair = list( - "Ahoge", - "Long Bedhead", - "Beehive", - "Beehive 2", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Double Bun", - "Emo", - "Emo Fringe", - "Feather", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Long Over Eye", - "Long Emo", - "Long Fringe", - "Ponytail", - "Ponytail 2", - "Ponytail 3", - "Ponytail 4", - "Ponytail 5", - "Ponytail 6", - "Ponytail 7", - "Ponytail (High)", - "Ponytail (Short)", - "Ponytail (Long)", - "Ponytail (Country)", - "Ponytail (Fringe)", - "Poofy", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju" - ) - - shoes = list(/obj/item/clothing/shoes/vampire/brown) - uniforms = list(/obj/item/clothing/under/vampire/homeless/female) - suits = list(/obj/item/clothing/suit/vampire/coat/alt) - hats = list(/obj/item/clothing/head/vampire/beanie/homeless) - - female_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - neutral_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - random_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - answer_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - help_phrases = list( - "Aaaugh!", - "AAAAHHHH!!", - "What the fuck? WHO'RE YOU?!", - "Shit!", - "Ass!", - "Dick!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/poormale.dm b/modular_darkpack/modules/npc/code/human/socialroles/poormale.dm deleted file mode 100644 index 8f5458df18ff..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/poormale.dm +++ /dev/null @@ -1,121 +0,0 @@ -/datum/socialrole/poormale - s_tones = list("albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2") - - min_age = 45 - max_age = 85 - preferred_gender = MALE - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns" - ) - - shoes = list(/obj/item/clothing/shoes/vampire/jackboots/work) - uniforms = list(/obj/item/clothing/under/vampire/homeless) - suits = list(/obj/item/clothing/suit/vampire/coat) - hats = list(/obj/item/clothing/head/vampire/beanie/black) - gloves = list(/obj/item/clothing/gloves/vampire/work) - neck = list( - /obj/item/clothing/neck/vampire/scarf/red, - /obj/item/clothing/neck/vampire/scarf, - /obj/item/clothing/neck/vampire/scarf/blue, - /obj/item/clothing/neck/vampire/scarf/green, - /obj/item/clothing/neck/vampire/scarf/white - ) - - male_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - neutral_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - random_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - answer_phrases = list( - "Fuck, shit, daa-amn...", - "We're fucked!", - "Grubrhggsmm...", - "Brrr.", - "Drunk..." - ) - help_phrases = list( - "Aaaugh!", - "AAAAHHHH!!", - "What da' fuck? WHO'RE YOU?!", - "Shit!", - "Ass!", - "Dick!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/richfemale.dm b/modular_darkpack/modules/npc/code/human/socialroles/richfemale.dm deleted file mode 100644 index 21898bc459da..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/richfemale.dm +++ /dev/null @@ -1,90 +0,0 @@ -/datum/socialrole/richfemale - s_tones = list( - "albino", - "caucasian1", - "caucasian2" - ) - - min_age = 18 - max_age = 85 - preferred_gender = FEMALE - female_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - female_hair = list( - "Ahoge", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire/heels, - /obj/item/clothing/shoes/vampire/heels/red - ) - uniforms = list(/obj/item/clothing/under/vampire/business) - pockets = list( - /obj/item/vamp/keys/npc, - // /obj/item/stack/dollar/fifty, - // /obj/item/stack/dollar/hundred - ) - - female_phrases = list( - "Whaddya want, I'm busy!", - "Excuse me, do you know the way to the pyramid?", - "...What?", - "I'm going somewhere important, not like you'd get it.", - "Get lost, filthy hobo...", - "Get lost, peasant...", - "You been to the bar tonight? It's a good place for hobos like you...", - "Stop doing that, imbecile." - ) - neutral_phrases = list( - "Did you ask something?", - "Excuse me?", - "What?", - "I'm going somewhere important.", - "Get lost, peasant...", - "Whaa-aat...", - "Stop doing that, imbecile." - ) - help_phrases = list( - "What in the god damn?!", - "Go away or I will call the cops!!", - "What is happening?!", - "Stop doing this!", - "Someone, call the ambulance!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/richmale.dm b/modular_darkpack/modules/npc/code/human/socialroles/richmale.dm deleted file mode 100644 index e67f5e38a3f0..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/richmale.dm +++ /dev/null @@ -1,90 +0,0 @@ -/datum/socialrole/richmale - s_tones = list( - "albino", - "caucasian1", - "caucasian2" - ) - - min_age = 18 - max_age = 85 - preferred_gender = MALE - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire, - /obj/item/clothing/shoes/vampire/white - ) - uniforms = list(/obj/item/clothing/under/vampire/rich) - inhand_items = list(/obj/item/storage/briefcase) - pockets = list( - /obj/item/vamp/keys/npc, - // /obj/item/stack/dollar/fifty, - // /obj/item/stack/dollar/hundred - ) - - male_phrases = list( - "Did you ask something?", - "My stocks! my stocks! They're falling...!", - "You know, eventually we'll have our money on the computer, and the computer will do our taxes for us!", - "I'm going somewhere important... unlike you.", - "Get lost, filthy hobo...", - "Ugh, work has me up so late, they better be paying me more...", - "Finally quit that stupid job... so glad I moved here." - ) - neutral_phrases = list( - "Did you say somethin..?", - "Excuse me?", - "Hm? What is it?", - "I've got to get going, got somewhere important to be.", - "Get lost, jackass, get a job or something", - "Get lost, peasant...", - "Huh..? Sorry, the coffee hasn't kicked in.", - "it's the middle of the night, I don't wanna deal with your shit right now." - ) - help_phrases = list( - "What in the god damn?!", - "I'm calling the cops!", - "OH HELL NO.", - "That ain't gonna be happening to me!", - "Someone, call the cops!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm deleted file mode 100644 index 2d22c86c64e1..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/__shop.dm +++ /dev/null @@ -1,109 +0,0 @@ -/datum/socialrole/shop - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" - ) - - min_age = 18 - max_age = 45 - preferred_gender = MALE - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire/sneakers, - /obj/item/clothing/shoes/vampire, - /obj/item/clothing/shoes/vampire/brown - ) - uniforms = list(/obj/item/clothing/under/vampire/mechanic) - pockets = list( - /obj/item/vamp/keys/npc, - // /obj/item/stack/dollar/rand - ) - - male_phrases = list( - "Wanna buy something?", - "Can I help?", - "Hey, wanna buy it?" - ) - neutral_phrases = list( - "Wanna buy something?", - "Can I help?", - "Hey, wanna buy it?" - ) - random_phrases = list( - "Check this!", - "Can I help?", - "Hey, wanna buy it?" - ) - answer_phrases = list("I just work here...") - help_phrases = list( - "What in the god damn?!", - "Go away or I will call the cops!!", - "What is happening?!", - "Stop doing this!", - "Someone, call the ambulance!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm deleted file mode 100644 index 62ad3f067a0d..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/bacotell.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/socialrole/shop/bacotell - uniforms = list(/obj/item/clothing/under/vampire/bacotell) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm deleted file mode 100644 index 39c5b4cb95cc..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/bubway.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/socialrole/shop/bubway - uniforms = list(/obj/item/clothing/under/vampire/bubway) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm deleted file mode 100644 index 2ed7bfed9370..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/garden.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/socialrole/shop/garden //community garden - neutral_phrases = list( - "Would you like to buy something?", - "Everything is non-invasive and climate appropriate!", - "Sorry, we're out of bags." - ) - random_phrases = list( - "Just let me know when you're ready.", - "Next, here, please!", - ) - help_phrases = list( - "Why would you do that?!", - "Take what you want, let me go!", - "Someone, get a doctor!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm deleted file mode 100644 index 01c69491f038..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/gummaguts.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/socialrole/shop/gummaguts - uniforms = list(/obj/item/clothing/under/vampire/gummaguts) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm b/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm deleted file mode 100644 index a7657a396225..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/shop/illegal.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/socialrole/shop/illegal - masks = list(/obj/item/clothing/mask/vampire/balaclava) - shoes = list(/obj/item/clothing/shoes/vampire/sneakers) - uniforms = list(/obj/item/clothing/under/vampire/emo) - // pockets = list(/obj/item/stack/dollar/rand) - - male_phrases = list( - "Pss... wanna try some weed?", - "Hey, vagabond...", - "Check this shit..." - ) - neutral_phrases = list( - "Pss... wanna try some weed?", - "Hey, vagabond...", - "Check this shit..." - ) - random_phrases = list( - "Pss... wanna try some weed?", - "Hey, vagabond...", - "Check this shit..." - ) - answer_phrases = list("Nothing personal...") - help_phrases = list( - "Cops!", - "Fuck the police!!", - "COPS?!!" - ) - is_criminal = TRUE diff --git a/modular_darkpack/modules/npc/code/human/socialroles/stripfemale.dm b/modular_darkpack/modules/npc/code/human/socialroles/stripfemale.dm deleted file mode 100644 index 2754c3464ede..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/stripfemale.dm +++ /dev/null @@ -1,133 +0,0 @@ -/datum/socialrole/stripfemale - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" - ) - - min_age = 18 - max_age = 30 - preferred_gender = FEMALE - female_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - female_hair = list( - "Ahoge", - "Long Bedhead", - "Beehive", - "Beehive 2", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Double Bun", - "Emo", - "Emo Fringe", - "Feather", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Long Over Eye", - "Long Emo", - "Long Fringe", - "Ponytail", - "Ponytail 2", - "Ponytail 3", - "Ponytail 4", - "Ponytail 5", - "Ponytail 6", - "Ponytail 7", - "Ponytail (High)", - "Ponytail (Short)", - "Ponytail (Long)", - "Ponytail (Country)", - "Ponytail (Fringe)", - "Poofy", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju" - ) - - shoes = list(/obj/item/clothing/shoes/vampire/heels) - uniforms = list(/obj/item/clothing/under/vampire/burlesque) - backpacks = list() - - female_phrases = list( - "No touching~.", - "Like what you see?", - "Wanna play?", - "He-he.", - "Want a private dance?...", - "Sit and rest.", - "Do you like this?", - "Ahh..." - ) - neutral_phrases = list( - "No touching~.", - "Like what you see?", - "Wanna play?", - "He-he.", - "Want a private dance?...", - "Sit and rest.", - "Do you like this?", - "Ahh..." - ) - random_phrases = list( - "No touching~.", - "Like what you see?", - "Wanna play?", - "He-he.", - "Want a private dance?...", - "Sit and rest.", - "Do you like this?", - "Ahh..." - ) - answer_phrases = list( - "That'll cost...", - "He-he-he.", - "Twenty bucks.", - "Sure you do..." - ) - help_phrases = list( - "Oh God!", - "Ahhh!!", - "I'm just a stripper!", - "Stop!", - "Help me!", - "Help!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/usualfemale.dm b/modular_darkpack/modules/npc/code/human/socialroles/usualfemale.dm deleted file mode 100644 index 33a67b316759..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/usualfemale.dm +++ /dev/null @@ -1,147 +0,0 @@ -/datum/socialrole/usualfemale - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" - ) - - min_age = 18 - max_age = 85 - preferred_gender = FEMALE - female_names = null - surnames = null - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - female_hair = list( - "Ahoge", - "Long Bedhead", - "Beehive", - "Beehive 2", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Double Bun", - "Emo", - "Emo Fringe", - "Feather", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Long Over Eye", - "Long Emo", - "Long Fringe", - "Ponytail", - "Ponytail 2", - "Ponytail 3", - "Ponytail 4", - "Ponytail 5", - "Ponytail 6", - "Ponytail 7", - "Ponytail (High)", - "Ponytail (Short)", - "Ponytail (Long)", - "Ponytail (Country)", - "Ponytail (Fringe)", - "Poofy", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire/heels, - /obj/item/clothing/shoes/vampire/sneakers, - /obj/item/clothing/shoes/vampire/jackboots - ) - uniforms = list( - /obj/item/clothing/under/vampire/black, - /obj/item/clothing/under/vampire/red, - /obj/item/clothing/under/vampire/gothic - ) - pockets = list( - /obj/item/vamp/keys/npc, - // /obj/item/stack/dollar/rand - ) - - female_phrases = list( - "What do you need?", - "Do you need something?", - "Do I really need to answer?", - "I'm late.", - "Pervert...", - "Can't speak right now.", - "Buy yourself a watch", - "Hey.", - "Go away." - ) - neutral_phrases = list( - "What do you need?", - "Do you need something?", - "Do I really need to answer?", - "I'm late.", - "Pervert...", - "Can't speak right now.", - "Buy yourself a watch", - "Hey.", - "Go away." - ) - random_phrases = list( - "Hey, fatso!", - "I miss my beer...", - "What's up?", - "Heyyyyy.", - "Do I know you?", - "There's something wrong with this city, you know?", - "Oh, wow." - ) - answer_phrases = list( - "I'm trying...", - "Crazy.", - "Things aren't good, baby.", - "You mixed me up with someone else.", - "Yeah, exactly.", - "Okay...", - "Fine." - ) - help_phrases = list( - "Oh God!", - "Go away!!", - "What the heck is happening?!", - "Stop!", - "Someone, help!", - "Mommy!" - ) diff --git a/modular_darkpack/modules/npc/code/human/socialroles/usualmale.dm b/modular_darkpack/modules/npc/code/human/socialroles/usualmale.dm deleted file mode 100644 index fdcd21ba712b..000000000000 --- a/modular_darkpack/modules/npc/code/human/socialroles/usualmale.dm +++ /dev/null @@ -1,142 +0,0 @@ -/datum/socialrole/usualmale - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2") - - min_age = 18 - max_age = 85 - preferred_gender = MALE - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - shoes = list( - /obj/item/clothing/shoes/vampire/sneakers, - /obj/item/clothing/shoes/vampire, - /obj/item/clothing/shoes/vampire/brown - ) - uniforms = list( - /obj/item/clothing/under/vampire/mechanic, - /obj/item/clothing/under/vampire/sport, - /obj/item/clothing/under/vampire/office, - /obj/item/clothing/under/vampire/sexy, - /obj/item/clothing/under/vampire/slickback, - /obj/item/clothing/under/vampire/emo - ) - pockets = list( - /obj/item/vamp/keys/npc, - // /obj/item/stack/dollar/rand - ) - - male_phrases = list( - "Need something? Or are you just trying to waste my time?", - "What's up?", - "What'd you say?", - "I'm late, my wife is gonna kill me.", - "You heard about the new place in town..?", - "Can't speak right now.", - "Good night I guess?", - "Guh...", - "I dunno what to say.", - "That's all, folks." - ) - neutral_phrases = list( - "What do you need, mate?", - "Do you need something?", - "Can you repeat what you were saying?", - "I'm late, don't interrupt me.", - "Check the bar if you want somebody to bother...", - "Can't speak right now.", - "Goodnight, I guess?", - "Guh...", - "I dunno what to say.", - "That's all, folks." - ) - random_phrases = list( - "Hey, mate!", - "I miss my beer...", - "Everything okay?", - "Hello.", - "Haven't I seen you around before?", - "Something wrong here.", - "Oooh, dude..." - ) - answer_phrases = list( - "Trying...", - "Awesome.", - "Bad, mate.", - "You picked wrong person.", - "Yeah, right.", - "O'kaay...", - "Nice." - ) - help_phrases = list( - "Oh God!", - "Go away!!", - "What the hell is happening?!", - "Stop!", - "Someone, help!", - "Mommy!" - ) diff --git a/modular_darkpack/modules/npc/code/landmarks.dm b/modular_darkpack/modules/npc/code/landmarks.dm new file mode 100644 index 000000000000..0b8031f3dbea --- /dev/null +++ b/modular_darkpack/modules/npc/code/landmarks.dm @@ -0,0 +1,15 @@ +/obj/effect/landmark/npcbeacon + name = "NPC landmark" + icon_state = "x3" + +/obj/effect/landmark/ai_avoid_turf + name = "AI avoidant turf landmark" + icon_state = "x" + can_astar_pass = CANASTARPASS_ALWAYS_PROC + +// We want NPCs avoiding crossing these unless they're actively chasing someone. +/obj/effect/landmark/ai_avoid_turf/CanAStarPass(to_dir, datum/can_pass_info/pass_info) + var/mob/living/living_npc = pass_info.requester_ref?.resolve() + if(living_npc?.ai_controller?.blackboard[BB_BASIC_MOB_CURRENT_TARGET]) + return TRUE + return FALSE diff --git a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm index 99e25cd1bbcb..e1cfe831f33f 100644 --- a/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm +++ b/modular_darkpack/modules/powers/code/discipline/obfuscate/obfuscate.dm @@ -87,10 +87,6 @@ RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) - - for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) - if (NPC.danger_source == owner) - NPC.danger_source = null ADD_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) /datum/discipline_power/obfuscate/cloak_of_shadows/deactivate() @@ -136,11 +132,6 @@ RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) - - for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) - if (NPC.danger_source == owner) - NPC.danger_source = null - ADD_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) /datum/discipline_power/obfuscate/unseen_presence/deactivate() @@ -263,10 +254,6 @@ owner.updateappearance(mutcolor_update = TRUE) to_chat(owner, span_notice("You assume the appearance of [target.name].")) - for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) - if (NPC.danger_source == owner) - NPC.danger_source = null - /datum/discipline_power/obfuscate/mask_of_a_thousand_faces/deactivate() . = ..() original_dna.copy_dna(owner.dna, 0) @@ -309,9 +296,6 @@ RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) - for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) - if (NPC.danger_source == owner) - NPC.danger_source = null if(prob(1)) SEND_SIGNAL(SSmasquerade, COMSIG_PLAYER_MASQUERADE_REINFORCE, owner) @@ -345,10 +329,6 @@ . = ..() RegisterSignals(owner, aggressive_signals, PROC_REF(on_combat_signal)) RegisterSignal(owner, COMSIG_POWER_ACTIVATE, PROC_REF(on_discipline_activation)) - - for(var/mob/living/carbon/human/npc/NPC in GLOB.npc_list) - if (NPC.danger_source == owner) - NPC.danger_source = null ADD_TRAIT(owner, TRAIT_OBFUSCATED, OBFUSCATE_TRAIT) /datum/discipline_power/obfuscate/cloak_the_gathering/deactivate() diff --git a/modular_darkpack/modules/vip_areas/code/bouncer_barrier_subsystem.dm b/modular_darkpack/modules/vip_areas/code/bouncer_barrier_subsystem.dm deleted file mode 100644 index fee76f955de9..000000000000 --- a/modular_darkpack/modules/vip_areas/code/bouncer_barrier_subsystem.dm +++ /dev/null @@ -1,17 +0,0 @@ -SUBSYSTEM_DEF(bouncer_barriers) - name = "Bouncer Barrier" - flags = SS_NO_FIRE - init_order = INIT_ORDER_BARRIER - var/barriers_enabled = TRUE - - ///List of vip barriers - var/list/datum/vip_barrier_perm/vip_barrier_perms = list() - - -/datum/controller/subsystem/bouncer_barriers/Initialize() - for(var/barrier in subtypesof(/obj/effect/vip_barrier)) - var/obj/effect/vip_barrier/test_barrier = new barrier - if(!vip_barrier_perms?[test_barrier.protected_zone_id]) - vip_barrier_perms[test_barrier.protected_zone_id] = new /datum/vip_barrier_perm(test_barrier.protected_zone_id) - qdel(test_barrier) - return SS_INIT_SUCCESS diff --git a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_elysium_role.dm b/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_elysium_role.dm deleted file mode 100644 index a08454545c65..000000000000 --- a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_elysium_role.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/socialrole/bouncer/elysium - suits = list(/obj/item/clothing/suit/vampire/trench) - glasses = list(/obj/item/clothing/glasses/sunglasses) diff --git a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_endron_role.dm b/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_endron_role.dm deleted file mode 100644 index fbec2425c412..000000000000 --- a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_endron_role.dm +++ /dev/null @@ -1,49 +0,0 @@ -// DARKPACK TODO - all these endron clothes - -/datum/socialrole/bouncer/endron - bouncer_weapon_type = /obj/item/gun/ballistic/automatic/darkpack/mp5 - bouncer_backup_weapon_type = /obj/item/melee/baton/vamp - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - //uniforms = list(/obj/item/clothing/under/pentex/pentex_turtleneck) - pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - gloves = list(/obj/item/clothing/gloves/vampire/work) - suits = list(/obj/item/clothing/suit/vampire/vest) - glasses = list(/obj/item/clothing/glasses/vampire/sun) - hats = list(/obj/item/clothing/head/beret/black) - masks = list(/obj/item/clothing/mask/vampire/balaclava) - -/datum/socialrole/bouncer/endron/endron_lab - bouncer_weapon_type = /obj/item/gun/ballistic/automatic/darkpack/mp5 - bouncer_backup_weapon_type = /obj/item/melee/baton/vamp - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - //uniforms = list(/obj/item/clothing/under/pentex/pentex_janitor) - pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - gloves = list(/obj/item/clothing/gloves/vampire/latex) - suits = list(/obj/item/clothing/suit/vampire/vest) - glasses = list(/obj/item/clothing/glasses/vampire/sun) - hats = list(/obj/item/clothing/head/beret/black) - masks = list(/obj/item/clothing/mask/gas/explorer) - -/datum/socialrole/bouncer/endron/endron_lab_2 - bouncer_weapon_type = /obj/item/gun/ballistic/automatic/darkpack/mp5 - bouncer_backup_weapon_type = /obj/item/melee/baton/vamp - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - //uniforms = list(/obj/item/clothing/under/pentex/pentex_janitor) - pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - gloves = list(/obj/item/clothing/gloves/vampire/latex) - suits = list(/obj/item/clothing/suit/vampire/vest) - glasses = list(/obj/item/clothing/glasses/vampire/sun) - hats = list(/obj/item/clothing/head/beret/black) - masks = list(/obj/item/clothing/mask/gas/explorer) - -/datum/socialrole/bouncer/endron/endron_2 - bouncer_weapon_type = /obj/item/gun/ballistic/automatic/pistol/darkpack/deagle - bouncer_backup_weapon_type = /obj/item/melee/baton/vamp - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - //uniforms = list(/obj/item/clothing/under/pentex/pentex_suit) - pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - gloves = list(/obj/item/clothing/gloves/vampire/work) - suits = list(/obj/item/clothing/suit/vampire/vest) - glasses = list(/obj/item/clothing/glasses/night) - hats = list(/obj/item/clothing/head/vampire/pentex_beret) - masks = list(/obj/item/clothing/mask/gas/sechailer) diff --git a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_giovanni_role.dm b/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_giovanni_role.dm deleted file mode 100644 index 6916ad74b560..000000000000 --- a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_giovanni_role.dm +++ /dev/null @@ -1,3 +0,0 @@ -/datum/socialrole/bouncer/giovanni - bouncer_weapon_type = /obj/item/gun/ballistic/automatic/darkpack/thompson - bouncer_backup_weapon_type = null diff --git a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_mob_role.dm b/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_mob_role.dm deleted file mode 100644 index 2538d813b5b6..000000000000 --- a/modular_darkpack/modules/vip_areas/code/bouncer_roles/bouncer_mob_role.dm +++ /dev/null @@ -1,177 +0,0 @@ -/datum/socialrole/bouncer - is_criminal = TRUE - - //Appearence - s_tones = list( - "albino", - "caucasian1", - "caucasian2", - "caucasian3", - "latino", - "mediterranean", - "asian1", - "asian2", - "arab", - "indian", - "african1", - "african2" - ) - - min_age = 18 - max_age = 85 - male_names = null - surnames = null - - hair_colors = list( - "040404", //Black - "120b05", //Dark Brown - "342414", //Brown - "554433", //Light Brown - "695c3b", //Dark Blond - "ad924e", //Blond - "dac07f", //Light Blond - "802400", //Ginger - "a5380e", //Ginger alt - "ffeace", //Albino - "650b0b", //Punk Red - "14350e", //Punk Green - "080918" //Punk Blue - ) - male_hair = list( - "Balding Hair", - "Bedhead", - "Bedhead 2", - "Bedhead 3", - "Boddicker", - "Business Hair", - "Business Hair 2", - "Business Hair 3", - "Business Hair 4", - "Coffee House", - "Combover", - "Crewcut", - "Father", - "Flat Top", - "Gelled Back", - "Joestar", - "Keanu Hair", - "Oxton", - "Volaju" - ) - male_facial = list( - "Beard (Abraham Lincoln)", - "Beard (Chinstrap)", - "Beard (Full)", - "Beard (Cropped Fullbeard)", - "Beard (Hipster)", - "Beard (Neckbeard)", - "Beard (Three o Clock Shadow)", - "Beard (Five o Clock Shadow)", - "Beard (Seven o Clock Shadow)", - "Moustache (Hulk Hogan)", - "Moustache (Watson)", - "Sideburns (Elvis)", - "Sideburns", - "Shaved" - ) - - female_hair = list("Ahoge", - "Long Bedhead", - "Beehive", - "Beehive 2", - "Bob Hair", - "Bob Hair 2", - "Bob Hair 3", - "Bob Hair 4", - "Bobcurl", - "Braided", - "Braided Front", - "Braid (Short)", - "Braid (Low)", - "Bun Head", - "Bun Head 2", - "Bun Head 3", - "Bun (Large)", - "Bun (Tight)", - "Double Bun", - "Emo", - "Emo Fringe", - "Feather", - "Gentle", - "Long Hair 1", - "Long Hair 2", - "Long Hair 3", - "Long Over Eye", - "Long Emo", - "Long Fringe", - "Ponytail", - "Ponytail 2", - "Ponytail 3", - "Ponytail 4", - "Ponytail 5", - "Ponytail 6", - "Ponytail 7", - "Ponytail (High)", - "Ponytail (Short)", - "Ponytail (Long)", - "Ponytail (Country)", - "Ponytail (Fringe)", - "Poofy", - "Short Hair Rosa", - "Shoulder-length Hair", - "Volaju") - - shoes = list(/obj/item/clothing/shoes/vampire/jackboots) - uniforms = list(/obj/item/clothing/under/vampire/guard) - pockets = list(/obj/item/vamp/keys/npc, /obj/item/stack/dollar/rand) - backpacks = list() - - //Voice Lines - neutral_phrases = list( - "Buddy, you'd better step back.", - "Only VIP's are allowed through here.", - "Mind your manners." - ) - random_phrases = list( - "Real quiet night tonight." - ) - - answer_phrases = list("Shit, man.") - help_phrases = list( - "It's time you walked out.", - "Let me show you the door.", - "We were having a peaceful night, till you showed up.", - "This is gonna hurt me more than it hurts you." - ) - - - //Phrase said when someone is denied entry - var/denial_phrases = list( - "You aren't on the list.", - "No entry. Not for you.", - "It's a private gathering, past here." - ) - - - var/entry_phrases = list( - "Good to see you again.", - "Welcome to the dark side.", - "We've been expecting you.", - "A pleasure, as always." - ) - - var/police_block_phrases = list( - "Fuck Twelve.", - "Oh yeah? Why don't you come back with a warrant?", - "You aren't getting in without a warrant.", - "I know my rights. You stay the hell out." - ) - - var/block_phrases = list( - "I thought we told you to piss off.", - "For the last time, you aren't getting in.", - "Nice story, bucko. Now scram." - ) - - var/bouncer_weapon_type = /obj/item/gun/ballistic/shotgun/vampire - var/bouncer_backup_weapon_type = /obj/item/claymore/machete diff --git a/modular_darkpack/modules/vip_areas/code/vip_barrier_perm.dm b/modular_darkpack/modules/vip_areas/code/vip_barrier_perm.dm deleted file mode 100644 index 90e82b337528..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barrier_perm.dm +++ /dev/null @@ -1,99 +0,0 @@ -//Holds associated lists of walls and bouncers in a single permission network. -/datum/vip_barrier_perm - var/name - var/list/linked_barriers = list() - var/list/linked_bouncers = list() - var/actively_guarded = TRUE - - var/guard_recheck_lag = 1 SECONDS - - //people the guards have determined can pass anyways - var/list/allow_list = list() - - //people the guards have decided to deny no matter what - var/list/block_list = list("Unknown") - - -/datum/vip_barrier_perm/New(protected_zone_id) - name = protected_zone_id - -//registers bouncer with the perms -/datum/vip_barrier_perm/proc/add_bouncer(target_bouncer) - linked_bouncers += target_bouncer - -//registers barrier with the perms -/datum/vip_barrier_perm/proc/add_barrier(target_barrier) - linked_barriers += target_barrier - RegisterSignal(target_barrier, COMSIG_BARRIER_NOTIFY_GUARD_BLOCKED, PROC_REF(notify_guard_blocked)) - RegisterSignal(target_barrier, COMSIG_BARRIER_NOTIFY_GUARD_ENTRY, PROC_REF(notify_guard_entry)) - - -//handles bouncer death -/datum/vip_barrier_perm/proc/process_dead_bouncer(mob/living/carbon/human/npc/bouncer/dead_bouncer) - dead_bouncer.is_guarding = FALSE - linked_bouncers -= dead_bouncer - if(!linked_bouncers) - for(var/obj/effect/vip_barrier/barrier in linked_barriers) - UnregisterSignal(barrier, COMSIG_BARRIER_NOTIFY_GUARD_BLOCKED) - UnregisterSignal(barrier, COMSIG_BARRIER_NOTIFY_GUARD_ENTRY) - - - -/datum/vip_barrier_perm/proc/check_barrier_guarded() - var/barrier_is_guarded = FALSE - - for(var/mob/living/carbon/human/npc/bouncer/linked_bouncer in linked_bouncers) - if(!linked_bouncer.is_guarding) - continue - barrier_is_guarded = TRUE - break - - if(!actively_guarded && barrier_is_guarded) - actively_guarded = TRUE - for(var/obj/effect/vip_barrier/barrier in linked_barriers) - barrier.update_icon() - - else if (actively_guarded && !barrier_is_guarded) - actively_guarded = FALSE - for(var/obj/effect/vip_barrier/barrier in linked_barriers) - barrier.update_icon() - -//============================================================================= -//Procs for communication between barriers and bouncers -/datum/vip_barrier_perm/proc/notify_guard_entry(datum/source, mob/target_mob) - SIGNAL_HANDLER - if(!linked_bouncers.len) - return - var/mob/living/carbon/human/npc/bouncer/target_bouncer = pick(linked_bouncers) - target_bouncer.speak_seldom(pick(target_bouncer.entry_phrases), target_mob) - -/datum/vip_barrier_perm/proc/notify_guard_blocked(datum/source, mob/target_mob) - SIGNAL_HANDLER - if(!linked_bouncers.len) - return - if(prob(80)) - return - var/mob/living/carbon/human/npc/bouncer/target_bouncer = pick(linked_bouncers) - target_bouncer.speak_seldom(pick(target_bouncer.denial_phrases), target_mob) - -/datum/vip_barrier_perm/proc/notify_guard_police_denial(mob/target_mob) - if(!linked_bouncers.len) - return - var/mob/living/carbon/human/npc/bouncer/target_bouncer = pick(linked_bouncers) - target_bouncer.speak_seldom(pick(target_bouncer.police_block_phrases), target_mob) - -/datum/vip_barrier_perm/proc/notify_guard_blocked_denial(mob/target_mob) - if(!linked_bouncers.len) - return - var/mob/living/carbon/human/npc/bouncer/target_bouncer = pick(linked_bouncers) - target_bouncer.speak_seldom(pick(target_bouncer.block_phrases), target_mob) - -/datum/vip_barrier_perm/proc/notify_barrier_social_bypass(mob/user, mob/bouncer, used_badge) - if(!linked_barriers.len) - return - var/obj/effect/vip_barrier/target_barrier = linked_barriers[1] - target_barrier.handle_social_bypass(user, bouncer, used_badge) - - -//============================================================================= - diff --git a/modular_darkpack/modules/vip_areas/code/vip_barriers/__vip_barrier.dm b/modular_darkpack/modules/vip_areas/code/vip_barriers/__vip_barrier.dm deleted file mode 100644 index d43c01dce6b8..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barriers/__vip_barrier.dm +++ /dev/null @@ -1,164 +0,0 @@ -/obj/effect/vip_barrier - name = "Basic Check Point" - desc = "Not a real checkpoint." - icon = 'modular_darkpack/modules/vip_areas/icons/barrier.dmi' - icon_state = "camarilla_blocking" - var/block_sound = "modular_darkpack/modules/deprecated/sounds/bouncer_blocked.ogg" - - //Social bypass numbers - var/social_bypass_allowed = TRUE - var/social_bypass_time = 20 SECONDS - var/can_use_badge = TRUE - var/mean_to_cops = TRUE - var/social_roll_difficulty = 7 - - //Display settings - var/always_invisible = FALSE - - density = FALSE - anchored = TRUE - - - - //Assigns an ID to NPCs that guard certain doors, must match a barrier's ID - //*********All barriers under a protected_zone_id should be of the same type!********* - var/protected_zone_id = "test" - - var/datum/vip_barrier_perm/linked_perm = null - - -/obj/effect/vip_barrier/Initialize(mapload) - . = ..() - - if(mapload && src.type == /obj/effect/vip_barrier) - CRASH("VIP Barrier created using default type, please use a child of this type in mapping.") - - //we do this in an initialize so mappers do not have to code as much - if(SSbouncer_barriers.vip_barrier_perms?[protected_zone_id]) - linked_perm = SSbouncer_barriers.vip_barrier_perms[protected_zone_id] - linked_perm.add_barrier(src) - //spessman purity means I have to register a signal with myself, pain - RegisterSignal(src, COMSIG_BARRIER_NOTIFY_GUARD_BLOCKED, PROC_REF(playBlockSound)) - update_icon() - else if(mapload && SSbouncer_barriers.initialized) - CRASH("A VIP barrier was created for vip_barrier_perms that were not loaded!") - -/obj/effect/vip_barrier/Destroy() - if(linked_perm) - linked_perm.linked_barriers -= src - linked_perm = null - return ..() - - -/obj/effect/vip_barrier/CanPass(atom/movable/mover, turf/target) - . = ..() - var/entry_allowed = TRUE - - if(!isliving(mover)) - return entry_allowed - - if(check_direction_always_allowed(mover)) - return entry_allowed - - var/mob/living/mover_mob = mover - if(!mover_mob.mind) - entry_allowed = FALSE - else if(linked_perm.actively_guarded) - entry_allowed = check_entry_permission_base(mover_mob) - - if(!entry_allowed && mover.pulledby && isliving(mover.pulledby)) - entry_allowed = check_entry_permission_base(mover.pulledby) - - if(entry_allowed) - SEND_SIGNAL(src, COMSIG_BARRIER_NOTIFY_GUARD_ENTRY, mover_mob) - else - SEND_SIGNAL(src, COMSIG_BARRIER_NOTIFY_GUARD_BLOCKED, mover_mob) - - return entry_allowed - -/obj/effect/vip_barrier/proc/check_direction_always_allowed(atom/movable/mover) - if(src.loc == mover.loc) - return TRUE - var/origin_dir = get_dir(src, mover) - return !(origin_dir & src.dir) - -/obj/effect/vip_barrier/proc/playBlockSound(atom/movable/mover) - SIGNAL_HANDLER - playsound(mover, block_sound, vol = 10, falloff_distance = 2, vary = TRUE) - - -//Call this parent after any children run -/obj/effect/vip_barrier/proc/check_entry_permission_base(mob/living/carbon/human/entering_mob) - if(LAZYFIND(linked_perm.allow_list, entering_mob.name)) - return TRUE - - if(LAZYFIND(linked_perm.block_list, entering_mob.name)) - return FALSE - - return check_entry_permission_custom(entering_mob) - -//Function for providing custom blocks and allowances for entering people -/obj/effect/vip_barrier/proc/check_entry_permission_custom(mob/living/carbon/human/entering_mob) - return TRUE - -/obj/effect/vip_barrier/proc/handle_social_bypass(mob/living/carbon/human/user, mob/bouncer, used_badge = FALSE) - - if(user.get_face_name() == "Unknown") - to_chat(user, span_notice("They won't talk to someone they can't look in the eye.")) - return - - if(check_entry_permission_base(user)) - to_chat(user, span_notice("...But you are already allowed entry.")) - return - - //handle block list babies - if(LAZYFIND(linked_perm.block_list, user.name)) - if(identify_cop(user, used_badge)) - linked_perm.notify_guard_police_denial(user) - else - linked_perm.notify_guard_blocked_denial(user) - return - - - if(!do_after(user, max(5 SECONDS, social_bypass_time - (user.st_get_stat(STAT_CHARISMA) * 2 SECONDS)), bouncer)) - return - - - - var/involved_social_roll = social_roll_difficulty - if(used_badge) - involved_social_roll -= 1 - - if(SSroll.storyteller_roll(user.st_get_stat(STAT_CHARISMA), involved_social_roll, mobs_to_show_output = user) == ROLL_SUCCESS) - to_chat(user, span_notice("You manage to persuade your way past the guards.")) - linked_perm.allow_list += user.get_face_name() - return - - to_chat(user, span_notice("The guards turn you away, taking note of you as they do.")) - linked_perm.block_list += user.name - if(identify_cop(user, used_badge)) - linked_perm.notify_guard_police_denial(user) - else - linked_perm.notify_guard_blocked_denial(user) - - -/obj/effect/vip_barrier/proc/identify_cop(mob/living/carbon/human/user, used_badge = FALSE) - if(mean_to_cops && (used_badge || (user.wear_id && istype(user.wear_id,/obj/item/card/police)))) - return TRUE - return FALSE - - - -/obj/effect/vip_barrier/proc/signal_update_icon() - SIGNAL_HANDLER - update_icon() - -/obj/effect/vip_barrier/update_icon() - .=..() - if(always_invisible) - alpha = 0 - return - if(linked_perm.actively_guarded) - alpha = 255 - else - alpha = 128 diff --git a/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_barrier.dm b/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_barrier.dm deleted file mode 100644 index 75e77c0c713f..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_barrier.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/effect/vip_barrier/elysium - name = "Elysium Checkpoint" - desc = "The barrier between a moonlit night and a world of darkness." - protected_zone_id = "elysium" - social_roll_difficulty = 9 - - -/obj/effect/vip_barrier/elysium_2 - protected_zone_id = "elysium_2" - - - -/obj/effect/vip_barrier/elysium/theatre - protected_zone_id = "elysium_theatre" - -/obj/effect/vip_barrier/elysium/theatre_backdoor - protected_zone_id = "theatre_backdoor" - -/obj/effect/vip_barrier/elysium/check_entry_permission_custom(mob/living/carbon/human/entering_mob) - if(iskindred(entering_mob) || isghoul(entering_mob)) - return TRUE - return FALSE diff --git a/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_stripclub_barrier.dm b/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_stripclub_barrier.dm deleted file mode 100644 index 09e927811c1a..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barriers/elysium_stripclub_barrier.dm +++ /dev/null @@ -1,11 +0,0 @@ -/obj/effect/vip_barrier/stripclub - name = "VIP Area" - desc = "Marks the beginning of the city's neutral zone for nonhumans. Beyond, true freaks of the night may congregate safely." - protected_zone_id = "elysium_strip" - social_roll_difficulty = 9 - - -/obj/effect/vip_barrier/stripclub/check_entry_permission_custom(mob/living/carbon/human/entering_mob) - if(issupernatural(entering_mob) || (entering_mob.mind && entering_mob.mind.assigned_role == "Stripper")) - return TRUE - return FALSE diff --git a/modular_darkpack/modules/vip_areas/code/vip_barriers/endron_barrier.dm b/modular_darkpack/modules/vip_areas/code/vip_barriers/endron_barrier.dm deleted file mode 100644 index dcce298a2bca..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barriers/endron_barrier.dm +++ /dev/null @@ -1,22 +0,0 @@ -/obj/effect/vip_barrier/endron - name = "\improper " + MAIN_EVIL_COMPANY + " checkpoint" - desc = "There's an employees only sign here." - protected_zone_id = "endron" - social_roll_difficulty = 7 - -/obj/effect/vip_barrier/endron/endron_2 - protected_zone_id = "endron_2" - -/obj/effect/vip_barrier/endron/endron_backdoor - protected_zone_id = "endron_backdoor" - -/obj/effect/vip_barrier/endron/endron_lab - protected_zone_id = "endron_lab" - -/obj/effect/vip_barrier/endron/endron_lab_2 - protected_zone_id = "endron_lab_2" - -/obj/effect/vip_barrier/endron/check_entry_permission_custom(mob/living/carbon/human/entering_mob) - if(entering_mob.mind && entering_mob.mind.assigned_role && (entering_mob.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_PENTEX)) - return TRUE - return FALSE diff --git a/modular_darkpack/modules/vip_areas/code/vip_barriers/giovanni_barrier.dm b/modular_darkpack/modules/vip_areas/code/vip_barriers/giovanni_barrier.dm deleted file mode 100644 index def5c4521bed..000000000000 --- a/modular_darkpack/modules/vip_areas/code/vip_barriers/giovanni_barrier.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/effect/vip_barrier/giovanni - name = "Giovanni Checkpoint" - desc = "This here's a family gathering, capice?" - protected_zone_id = "giovanni" - social_roll_difficulty = 7 - -/obj/effect/vip_barrier/giovanni/check_entry_permission_custom(mob/living/carbon/human/entering_mob) - if(entering_mob.mind && entering_mob.mind.assigned_role && (entering_mob.mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_GIOVANNI)) - return TRUE - return FALSE diff --git a/tgstation.dme b/tgstation.dme index ae0dc0513090..cb8eec604c19 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7269,49 +7269,16 @@ #include "modular_darkpack\modules\movie_theatre\code\areas.dm" #include "modular_darkpack\modules\movie_theatre\code\fluff.dm" #include "modular_darkpack\modules\movie_theatre\code\popcorn_maker.dm" -#include "modular_darkpack\modules\npc\code\human\__npc.dm" -#include "modular_darkpack\modules\npc\code\human\npc_aggression.dm" -#include "modular_darkpack\modules\npc\code\human\npc_globals.dm" -#include "modular_darkpack\modules\npc\code\human\npc_human_subsystem.dm" -#include "modular_darkpack\modules\npc\code\human\npc_movement.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bacotell.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bandit.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bubway.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\business.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\club.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\garden.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\guard.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\gummaguts.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\hobo.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\illegal.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\incel.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\police.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\shop.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\stripper.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\walkby.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bouncers\__bouncer.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bouncers\bouncer_elysium.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bouncers\bouncer_endron.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\bouncers\bouncer_giovanni.dm" -#include "modular_darkpack\modules\npc\code\human\npc_types\endron\endron_npcs.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\__socialrole.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\bandit.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\endronsecurity.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\guard.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\police.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\poorfemale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\poormale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\richfemale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\richmale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\stripfemale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\usualfemale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\usualmale.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\__shop.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\bacotell.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\bubway.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\garden.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\gummaguts.dm" -#include "modular_darkpack\modules\npc\code\human\socialroles\shop\illegal.dm" +#include "modular_darkpack\modules\npc\code\landmarks.dm" +#include "modular_darkpack\modules\npc\code\human\_npc.dm" +#include "modular_darkpack\modules\npc\code\human\clothing_datums.dm" +#include "modular_darkpack\modules\npc\code\human\ai\_npc_ai.dm" +#include "modular_darkpack\modules\npc\code\human\ai\behaviors\choose_attack_subtree.dm" +#include "modular_darkpack\modules\npc\code\human\ai\behaviors\find_weapon.dm" +#include "modular_darkpack\modules\npc\code\human\ai\behaviors\random_movement.dm" +#include "modular_darkpack\modules\npc\code\human\ai\subtypes\bandit_npc_ai.dm" +#include "modular_darkpack\modules\npc\code\human\ai\subtypes\police_npc_ai.dm" +#include "modular_darkpack\modules\npc\code\human\ai\subtypes\stand_still_npc_ai.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\blood_guard.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\necromancy_zombies.dm" #include "modular_darkpack\modules\npc\code\nonhuman\beastmaster\shadow_guard.dm" @@ -7588,17 +7555,6 @@ #include "modular_darkpack\modules\vaults\code\drill.dm" #include "modular_darkpack\modules\vaults\code\keypad.dm" #include "modular_darkpack\modules\vaults\code\vaultdoors.dm" -#include "modular_darkpack\modules\vip_areas\code\bouncer_barrier_subsystem.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barrier_perm.dm" -#include "modular_darkpack\modules\vip_areas\code\bouncer_roles\bouncer_elysium_role.dm" -#include "modular_darkpack\modules\vip_areas\code\bouncer_roles\bouncer_endron_role.dm" -#include "modular_darkpack\modules\vip_areas\code\bouncer_roles\bouncer_giovanni_role.dm" -#include "modular_darkpack\modules\vip_areas\code\bouncer_roles\bouncer_mob_role.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barriers\__vip_barrier.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barriers\elysium_barrier.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barriers\elysium_stripclub_barrier.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barriers\endron_barrier.dm" -#include "modular_darkpack\modules\vip_areas\code\vip_barriers\giovanni_barrier.dm" #include "modular_darkpack\modules\vitae\code\blood_bond.dm" #include "modular_darkpack\modules\vitae\code\blood_pack.dm" #include "modular_darkpack\modules\vitae\code\embracing.dm" diff --git a/tools/UpdatePaths/Scripts/DarkPack/438_NPCs.txt b/tools/UpdatePaths/Scripts/DarkPack/438_NPCs.txt new file mode 100644 index 000000000000..d2f3a17bd023 --- /dev/null +++ b/tools/UpdatePaths/Scripts/DarkPack/438_NPCs.txt @@ -0,0 +1,5 @@ +/obj/effect/landmark/npcbeacon/directed : @DELETE +/obj/effect/landmark/npc_spawn_point : @DELETE +/obj/effect/landmark/npcwall : /obj/effect/landmark/ai_avoid_turf +/mob/living/carbon/human/npc/incel : /mob/living/carbon/human/npc +/mob/living/carbon/human/npc/hobo : /mob/living/carbon/human/npc/poor