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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions _maps/RandomZLevels/blackmesa.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@
/turf/open/misc/dirt/planet/xen,
/area/awaymission/black_mesa/xen/nihilanth_computer)
"adL" = (
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab,
/mob/living/basic/blackmesa/xen/headcrab,
/turf/open/floor/mineral/titanium/white,
/area/awaymission/black_mesa/entrance)
"adM" = (
Expand Down Expand Up @@ -9232,7 +9232,7 @@
/turf/closed/wall/r_wall,
/area/awaymission/black_mesa/genetics_sec)
"kWX" = (
/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid,
/mob/living/basic/blackmesa/xen/bullsquid,
/turf/open/misc/xen,
/area/awaymission/black_mesa/xen/acid_lake)
"kXt" = (
Expand Down Expand Up @@ -15428,7 +15428,7 @@
/turf/open/floor/iron/smooth,
/area/awaymission/black_mesa/genetics_elevator)
"wYo" = (
/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid,
/mob/living/basic/blackmesa/xen/bullsquid,
/turf/open/water/xen_acid,
/area/awaymission/black_mesa/xen/acid_lake)
"wYs" = (
Expand Down
5 changes: 5 additions & 0 deletions code/__HELPERS/~celadon_helpers/is_helpers.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

//blackmesa
#define isblackmesamob(A) (istype(A, /mob/living/basic/blackmesa))
#define isblackmesaxenmob(A) (istype(A, /mob/living/basic/blackmesa/xen))
#define isblackmesaheadcrab(A) (istype(A, /mob/living/basic/blackmesa/xen/headcrab))
4 changes: 0 additions & 4 deletions code/modules/unit_tests/simple_animal_freeze.dm
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,11 @@
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman,
/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt,
/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave,
/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid,
/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab,
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast,
/mob/living/simple_animal/hostile/blackmesa/xen/houndeye,
/mob/living/simple_animal/hostile/blackmesa/hecu,
/mob/living/simple_animal/hostile/blackmesa/hecu/ranged,
/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg,
Expand Down
110 changes: 110 additions & 0 deletions modular_celadon/modules/return_prs/black_mesa/code/mobs/_basic.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/mob/living/basic/blackmesa
var/list/alert_sounds
var/alert_cooldown = 4 SECONDS
var/alert_cooldown_time
var/projectiletype = null
var/projectilesound = null
var/list/loot = list()
var/loot_spawned = FALSE
ai_controller = /datum/ai_controller/basic_controller/blackmesa

/mob/living/basic/blackmesa/proc/drop_loot(drop_loc)
if (!length(loot))
return
for(var/i in loot)
new i(drop_loc)
loot.Cut()
loot_spawned = TRUE

/mob/living/basic/blackmesa/death(gibbed)
var/drop_loc = drop_location()
drop_loot(drop_loc)
return ..()

/mob/living/basic/blackmesa/proc/aggro()
if((alert_sounds) && !isdead(src))
if(!(world.time <= alert_cooldown_time))
playsound(src, pick(alert_sounds), 70)
alert_cooldown_time = world.time + alert_cooldown
return TRUE
return FALSE

/mob/living/basic/blackmesa/xen
faction = list(FACTION_XEN)
habitable_atmos = null
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
unsuitable_cold_damage = 0
maximum_survivable_temperature = 1500
unsuitable_heat_damage = 1

/datum/ai_controller/basic_controller/blackmesa
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
)
planning_subtrees = list(
/datum/ai_planning_subtree/escape_captivity,
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)

/datum/ai_controller/basic_controller/blackmesa/update_grid(datum/source, datum/spatial_grid_cell/new_cell)
. = ..()
var/mob/living/basic/blackmesa/mob = pawn
if(current_movement_target)
if(isblackmesamob(mob))
mob.aggro()

/datum/ai_planning_subtree/blackmesa_combo_skirmish
operational_datums = list(/datum/component/ranged_attacks)
var/target_key = BB_BASIC_MOB_CURRENT_TARGET
var/ranged_attack_behavior = /datum/ai_behavior/blackmesa_combo_skirmish
var/melee_attack_behavior = /datum/ai_behavior/basic_melee_attack
var/max_range = 10
var/min_range = 2
var/end_planning = FALSE
var/ranged = TRUE

/datum/ai_planning_subtree/blackmesa_combo_skirmish/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
. = ..()
if(!controller.blackboard_key_exists(target_key))
return
if(ranged)
controller.queue_behavior(ranged_attack_behavior, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range)
else
controller.queue_behavior(melee_attack_behavior, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range)
if(end_planning)
return SUBTREE_RETURN_FINISH_PLANNING

/datum/ai_behavior/blackmesa_combo_skirmish
action_cooldown = 4 SECONDS

/datum/ai_behavior/blackmesa_combo_skirmish/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range)
. = ..()
var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key]
return !QDELETED(target)

/datum/ai_behavior/blackmesa_combo_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range)
var/atom/target = controller.blackboard[target_key]
if(QDELETED(target))
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED

var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key])
if(!targeting_strategy.can_attack(controller.pawn, target))
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED

var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target)
controller.set_blackboard_key(hiding_location_key, hiding_target)

target = hiding_target || target

var/distance = get_dist(controller.pawn, target)
if(distance > max_range || distance < min_range)
if(distance < min_range)
controller.ai_interact(target, combat_mode = TRUE)
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED
controller.ai_interact(target = target, combat_mode = TRUE)
return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid
/mob/living/basic/blackmesa/xen/bullsquid
name = "bullsquid"
desc = "Some highly aggressive alien creature. Thrives in toxic environments."
icon = 'modular_celadon/modules/return_prs/black_mesa/icons/mobs.dmi'
Expand All @@ -8,31 +8,54 @@
icon_gib = null
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
speak_chance = 1
speak_emote = list("growls")
emote_taunt = list("growls", "snarls", "grumbles")
taunt_chance = 100
turns_per_move = 7
speak_emote = list("growls", "snarls", "grumbles")
maxHealth = 110
health = 110
obj_damage = 50
harm_intent_damage = 15
melee_damage_lower = 15
melee_damage_upper = 15
ranged = TRUE
retreat_distance = 4
minimum_distance = 4
dodging = TRUE
melee_damage_upper = 18
projectiletype = /obj/projectile/bullsquid
projectilesound = 'modular_celadon/modules/return_prs/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg'
melee_damage_upper = 18
attack_sound = 'modular_celadon/modules/return_prs/black_mesa/sound/mobs/bullsquid/attack1.ogg'
gold_core_spawnable = HOSTILE_SPAWN
alert_sounds = list(
'modular_celadon/modules/return_prs/black_mesa/sound/mobs/bullsquid/detect1.ogg',
'modular_celadon/modules/return_prs/black_mesa/sound/mobs/bullsquid/detect2.ogg',
'modular_celadon/modules/return_prs/black_mesa/sound/mobs/bullsquid/detect3.ogg'
)
ai_controller = /datum/ai_controller/basic_controller/blackmesa/bullsquid

/mob/living/basic/blackmesa/xen/bullsquid/Initialize(mapload)
. = ..()
AddComponent(/datum/component/ranged_attacks, projectile_type = projectiletype, projectile_sound = projectilesound, cooldown_time = 3 SECONDS)

/datum/ai_behavior/move_to_cardinal/bullsquid
minimum_distance = 5
maximum_distance = 5

/datum/ai_planning_subtree/move_to_cardinal/bullsquid
move_behaviour = /datum/ai_behavior/move_to_cardinal/bullsquid

/datum/ai_behavior/blackmesa_combo_skirmish/bullsquid
action_cooldown = 4 SECONDS

/datum/ai_behavior/basic_melee_attack/bullsquid
action_cooldown = 2 SECONDS
terminate_after_action = TRUE
behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION

/datum/ai_planning_subtree/blackmesa_combo_skirmish/bullsquid
ranged_attack_behavior = /datum/ai_behavior/blackmesa_combo_skirmish/bullsquid
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/bullsquid

/datum/ai_controller/basic_controller/blackmesa/bullsquid
planning_subtrees = list(
/datum/ai_planning_subtree/escape_captivity,
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/blackmesa_combo_skirmish/bullsquid,
/datum/ai_planning_subtree/move_to_cardinal/bullsquid,
/datum/ai_planning_subtree/attack_obstacle_in_path,
)

/obj/projectile/bullsquid
name = "nasty ball of ooze"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
melee_damage_upper = 45
gender = MALE
wander = FALSE
attack_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg'
/* attack_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg'
loot = list(/obj/item/crowbar/freeman/ultimate, /obj/item/keycard/freeman_boss_exit)
gold_core_spawnable = NO_SPAWN

Expand Down Expand Up @@ -114,3 +114,4 @@
/datum/id_trim/gordon_freeman/New()
. = ..()
access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION))
*/
Loading
Loading