mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
Co-authored-by: AMonkeyThatCodes <20987591+AMonkeyThatCodes@users.noreply.github.com>
This commit is contained in:
@@ -40,6 +40,8 @@
|
|||||||
#define BB_MONKEY_PICKUPTARGET "BB_monkey_pickuptarget"
|
#define BB_MONKEY_PICKUPTARGET "BB_monkey_pickuptarget"
|
||||||
#define BB_MONKEY_PICKPOCKETING "BB_monkey_pickpocketing"
|
#define BB_MONKEY_PICKPOCKETING "BB_monkey_pickpocketing"
|
||||||
#define BB_MONKEY_CURRENT_ATTACK_TARGET "BB_monkey_current_attack_target"
|
#define BB_MONKEY_CURRENT_ATTACK_TARGET "BB_monkey_current_attack_target"
|
||||||
|
#define BB_MONKEY_CURRENT_PRESS_TARGET "BB_monkey_current_press_target"
|
||||||
|
#define BB_MONKEY_CURRENT_GIVE_TARGET "BB_monkey_current_give_target"
|
||||||
#define BB_MONKEY_TARGET_DISPOSAL "BB_monkey_target_disposal"
|
#define BB_MONKEY_TARGET_DISPOSAL "BB_monkey_target_disposal"
|
||||||
#define BB_MONKEY_DISPOSING "BB_monkey_disposing"
|
#define BB_MONKEY_DISPOSING "BB_monkey_disposing"
|
||||||
#define BB_MONKEY_RECRUIT_COOLDOWN "BB_monkey_recruit_cooldown"
|
#define BB_MONKEY_RECRUIT_COOLDOWN "BB_monkey_recruit_cooldown"
|
||||||
|
|||||||
@@ -201,7 +201,8 @@ multiple modular subtrees with behaviors
|
|||||||
/datum/ai_controller/proc/PauseAi(time)
|
/datum/ai_controller/proc/PauseAi(time)
|
||||||
paused_until = world.time + time
|
paused_until = world.time + time
|
||||||
|
|
||||||
/datum/ai_controller/proc/AddBehavior(behavior_type, ...)
|
///Call this to add a behavior to the stack.
|
||||||
|
/datum/ai_controller/proc/queue_behavior(behavior_type, ...)
|
||||||
var/datum/ai_behavior/behavior = GET_AI_BEHAVIOR(behavior_type)
|
var/datum/ai_behavior/behavior = GET_AI_BEHAVIOR(behavior_type)
|
||||||
if(!behavior)
|
if(!behavior)
|
||||||
CRASH("Behavior [behavior_type] not found.")
|
CRASH("Behavior [behavior_type] not found.")
|
||||||
@@ -213,6 +214,8 @@ multiple modular subtrees with behaviors
|
|||||||
arguments.Cut(1, 2)
|
arguments.Cut(1, 2)
|
||||||
if(length(arguments))
|
if(length(arguments))
|
||||||
behavior_args[behavior_type] = arguments
|
behavior_args[behavior_type] = arguments
|
||||||
|
else
|
||||||
|
behavior_args[behavior_type] = null
|
||||||
|
|
||||||
/datum/ai_controller/proc/ProcessBehavior(delta_time, datum/ai_behavior/behavior)
|
/datum/ai_controller/proc/ProcessBehavior(delta_time, datum/ai_behavior/behavior)
|
||||||
var/list/arguments = list(delta_time, src)
|
var/list/arguments = list(delta_time, src)
|
||||||
|
|||||||
@@ -17,17 +17,18 @@
|
|||||||
required_distance = 3
|
required_distance = 3
|
||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||||
action_cooldown = 20
|
action_cooldown = 20
|
||||||
///Blackboard key for the max attempt of throws
|
|
||||||
var/throw_count_key
|
|
||||||
///Blackboard key for the target to hit
|
|
||||||
var/target_key
|
|
||||||
///Sound to use
|
///Sound to use
|
||||||
var/attack_sound
|
var/attack_sound
|
||||||
///Max attemps to make
|
///Max attemps to make
|
||||||
var/max_attempts = 3
|
var/max_attempts = 3
|
||||||
|
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/item_move_close_and_attack/setup(datum/ai_controller/controller, target_key, throw_count_key)
|
||||||
|
. = ..()
|
||||||
|
controller.current_movement_target = controller.blackboard[target_key]
|
||||||
|
|
||||||
|
|
||||||
|
/datum/ai_behavior/item_move_close_and_attack/perform(delta_time, datum/ai_controller/controller, target_key, throw_count_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
var/obj/item/item_pawn = controller.pawn
|
var/obj/item/item_pawn = controller.pawn
|
||||||
var/atom/throw_target = controller.blackboard[target_key]
|
var/atom/throw_target = controller.blackboard[target_key]
|
||||||
@@ -37,24 +38,21 @@
|
|||||||
playsound(item_pawn.loc, attack_sound, 100, TRUE)
|
playsound(item_pawn.loc, attack_sound, 100, TRUE)
|
||||||
controller.blackboard[throw_count_key]++
|
controller.blackboard[throw_count_key]++
|
||||||
if(controller.blackboard[throw_count_key] >= max_attempts)
|
if(controller.blackboard[throw_count_key] >= max_attempts)
|
||||||
finish_action(controller, TRUE)
|
finish_action(controller, TRUE, target_key, throw_count_key)
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/finish_action(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/item_move_close_and_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, throw_count_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
reset_blackboard(controller, succeeded)
|
reset_blackboard(controller, succeeded, target_key, throw_count_key)
|
||||||
|
|
||||||
|
/datum/ai_behavior/item_move_close_and_attack/proc/reset_blackboard(datum/ai_controller/controller, succeeded, target_key, throw_count_key)
|
||||||
/datum/ai_behavior/item_move_close_and_attack/proc/reset_blackboard(datum/ai_controller/controller, succeeded)
|
|
||||||
controller.blackboard[throw_count_key] = 0
|
|
||||||
controller.blackboard[target_key] = null
|
controller.blackboard[target_key] = null
|
||||||
|
controller.blackboard[throw_count_key] = 0
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/haunted
|
/datum/ai_behavior/item_move_close_and_attack/haunted
|
||||||
throw_count_key = BB_HAUNTED_THROW_ATTEMPT_COUNT
|
|
||||||
target_key = BB_HAUNT_TARGET
|
|
||||||
attack_sound = 'sound/items/haunted/ghostitemattack.ogg'
|
attack_sound = 'sound/items/haunted/ghostitemattack.ogg'
|
||||||
max_attempts = 4
|
max_attempts = 4
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/haunted/finish_action(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/item_move_close_and_attack/haunted/finish_action(datum/ai_controller/controller, succeeded, target_key, throw_count_key)
|
||||||
var/atom/throw_target = controller.blackboard[target_key]
|
var/atom/throw_target = controller.blackboard[target_key]
|
||||||
var/list/hauntee_list = controller.blackboard[BB_TO_HAUNT_LIST]
|
var/list/hauntee_list = controller.blackboard[BB_TO_HAUNT_LIST]
|
||||||
hauntee_list[throw_target]--
|
hauntee_list[throw_target]--
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
|
|
||||||
/datum/ai_behavior/break_spine/bane
|
|
||||||
target_key = BB_BANE_BATMAN
|
|
||||||
|
|
||||||
/datum/ai_behavior/break_spine/bane/finish_action(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/break_spine/bane/finish_action(datum/ai_controller/controller, succeeded)
|
||||||
var/list/bane_quotes = strings("bane.json", "bane")
|
var/list/bane_quotes = strings("bane.json", "bane")
|
||||||
var/mob/living/bane = controller.pawn
|
var/mob/living/bane = controller.pawn
|
||||||
|
|||||||
@@ -9,6 +9,5 @@
|
|||||||
batman = possibly_the_dark_knight
|
batman = possibly_the_dark_knight
|
||||||
break
|
break
|
||||||
if(batman)
|
if(batman)
|
||||||
controller.current_movement_target = batman
|
controller.queue_behavior(/datum/ai_behavior/break_spine/bane, BB_BANE_BATMAN)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/bane))
|
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|||||||
@@ -5,12 +5,10 @@
|
|||||||
bb_key_to_set = BB_CURSE_TARGET
|
bb_key_to_set = BB_CURSE_TARGET
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/cursed
|
/datum/ai_behavior/item_move_close_and_attack/cursed
|
||||||
throw_count_key = BB_CURSED_THROW_ATTEMPT_COUNT
|
|
||||||
target_key = BB_CURSE_TARGET
|
|
||||||
attack_sound = 'sound/items/haunted/ghostitemattack.ogg'
|
attack_sound = 'sound/items/haunted/ghostitemattack.ogg'
|
||||||
max_attempts = 4
|
max_attempts = 4
|
||||||
|
|
||||||
/datum/ai_behavior/item_move_close_and_attack/cursed/reset_blackboard(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/item_move_close_and_attack/cursed/reset_blackboard(datum/ai_controller/controller, succeeded, target_key, throw_count_key)
|
||||||
var/atom/throw_target = controller.blackboard[target_key]
|
var/atom/throw_target = controller.blackboard[target_key]
|
||||||
//dropping our target from the blackboard if they are no longer a valid target after the attack behavior
|
//dropping our target from the blackboard if they are no longer a valid target after the attack behavior
|
||||||
if(get_dist(throw_target, controller.pawn) > CURSED_VIEW_RANGE)
|
if(get_dist(throw_target, controller.pawn) > CURSED_VIEW_RANGE)
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
//make sure we have a target
|
//make sure we have a target
|
||||||
var/mob/living/carbon/curse_target = controller.blackboard[BB_CURSE_TARGET]
|
var/mob/living/carbon/curse_target = controller.blackboard[BB_CURSE_TARGET]
|
||||||
if(!curse_target)
|
if(!curse_target)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/find_and_set/cursed))
|
controller.queue_behavior(/datum/ai_behavior/find_and_set/cursed)
|
||||||
return
|
return
|
||||||
//make sure attack is valid
|
//make sure attack is valid
|
||||||
if(get_dist(curse_target, item_pawn) > CURSED_VIEW_RANGE)
|
if(get_dist(curse_target, item_pawn) > CURSED_VIEW_RANGE)
|
||||||
controller.blackboard[BB_CURSE_TARGET] = null
|
controller.blackboard[BB_CURSE_TARGET] = null
|
||||||
return
|
return
|
||||||
controller.current_movement_target = curse_target
|
controller.current_movement_target = curse_target
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/cursed))
|
controller.queue_behavior(/datum/ai_behavior/item_move_close_and_attack/cursed)
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
current_movement_target = thrown_thing
|
current_movement_target = thrown_thing
|
||||||
blackboard[BB_FETCH_TARGET] = thrown_thing
|
blackboard[BB_FETCH_TARGET] = thrown_thing
|
||||||
blackboard[BB_FETCH_DELIVER_TO] = throwing_datum.thrower
|
blackboard[BB_FETCH_DELIVER_TO] = throwing_datum.thrower
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/fetch))
|
queue_behavior(/datum/ai_behavior/fetch)
|
||||||
|
|
||||||
/// Someone's interacting with us by hand, see if they're being nice or mean
|
/// Someone's interacting with us by hand, see if they're being nice or mean
|
||||||
/datum/ai_controller/dog/proc/on_attack_hand(datum/source, mob/living/user)
|
/datum/ai_controller/dog/proc/on_attack_hand(datum/source, mob/living/user)
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
if(COMMAND_DIE)
|
if(COMMAND_DIE)
|
||||||
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_NONE
|
blackboard[BB_DOG_ORDER_MODE] = DOG_COMMAND_NONE
|
||||||
CancelActions()
|
CancelActions()
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/play_dead))
|
queue_behavior(/datum/ai_behavior/play_dead)
|
||||||
|
|
||||||
/// Someone we like is pointing at something, see if it's something we might want to interact with (like if they might want us to fetch something for them)
|
/// Someone we like is pointing at something, see if it's something we might want to interact with (like if they might want us to fetch something for them)
|
||||||
/datum/ai_controller/dog/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable)
|
/datum/ai_controller/dog/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable)
|
||||||
@@ -284,12 +284,12 @@
|
|||||||
blackboard[BB_FETCH_TARGET] = pointed_movable
|
blackboard[BB_FETCH_TARGET] = pointed_movable
|
||||||
blackboard[BB_FETCH_DELIVER_TO] = pointing_friend
|
blackboard[BB_FETCH_DELIVER_TO] = pointing_friend
|
||||||
if(living_pawn.buckled)
|
if(living_pawn.buckled)
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
|
queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/fetch))
|
queue_behavior(/datum/ai_behavior/fetch)
|
||||||
if(DOG_COMMAND_ATTACK)
|
if(DOG_COMMAND_ATTACK)
|
||||||
pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and growls intensely!"))
|
pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and growls intensely!"))
|
||||||
current_movement_target = pointed_movable
|
current_movement_target = pointed_movable
|
||||||
blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(pointed_movable)
|
blackboard[BB_DOG_HARASS_TARGET] = WEAKREF(pointed_movable)
|
||||||
if(living_pawn.buckled)
|
if(living_pawn.buckled)
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
|
queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/harass))
|
queue_behavior(/datum/ai_behavior/harass)
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
if(in_range(living_pawn, interact_target) && (isturf(interact_target.loc)))
|
if(in_range(living_pawn, interact_target) && (isturf(interact_target.loc)))
|
||||||
controller.current_movement_target = interact_target
|
controller.current_movement_target = interact_target
|
||||||
if(IS_EDIBLE(interact_target))
|
if(IS_EDIBLE(interact_target))
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/eat_snack))
|
controller.queue_behavior(/datum/ai_behavior/eat_snack)
|
||||||
else if(isitem(interact_target))
|
else if(isitem(interact_target))
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/simple_equip))
|
controller.queue_behavior(/datum/ai_behavior/simple_equip)
|
||||||
else
|
else
|
||||||
controller.blackboard[BB_FETCH_TARGET] = null
|
controller.blackboard[BB_FETCH_TARGET] = null
|
||||||
controller.blackboard[BB_FETCH_DELIVER_TO] = null
|
controller.blackboard[BB_FETCH_DELIVER_TO] = null
|
||||||
@@ -36,5 +36,5 @@
|
|||||||
controller.blackboard[BB_FETCH_DELIVER_TO] = null
|
controller.blackboard[BB_FETCH_DELIVER_TO] = null
|
||||||
return
|
return
|
||||||
controller.current_movement_target = return_target
|
controller.current_movement_target = return_target
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/deliver_item))
|
controller.queue_behavior(/datum/ai_behavior/deliver_item)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -27,11 +27,13 @@
|
|||||||
/datum/ai_behavior/break_spine
|
/datum/ai_behavior/break_spine
|
||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||||
action_cooldown = 0.7 SECONDS
|
action_cooldown = 0.7 SECONDS
|
||||||
var/target_key
|
|
||||||
var/give_up_distance = 10
|
var/give_up_distance = 10
|
||||||
|
|
||||||
|
/datum/ai_behavior/break_spine/setup(datum/ai_controller/controller, target_key)
|
||||||
|
. = ..()
|
||||||
|
controller.current_movement_target = controller.blackboard[target_key]
|
||||||
|
|
||||||
/datum/ai_behavior/break_spine/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/break_spine/perform(delta_time, datum/ai_controller/controller, target_key)
|
||||||
var/mob/living/batman = controller.blackboard[target_key]
|
var/mob/living/batman = controller.blackboard[target_key]
|
||||||
var/mob/living/big_guy = controller.pawn //he was molded by the darkness
|
var/mob/living/big_guy = controller.pawn //he was molded by the darkness
|
||||||
|
|
||||||
@@ -57,7 +59,7 @@
|
|||||||
|
|
||||||
finish_action(controller, TRUE)
|
finish_action(controller, TRUE)
|
||||||
|
|
||||||
/datum/ai_behavior/break_spine/finish_action(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/break_spine/finish_action(datum/ai_controller/controller, succeeded, target_key)
|
||||||
if(succeeded)
|
if(succeeded)
|
||||||
controller.blackboard[target_key] = null
|
controller.blackboard[target_key] = null
|
||||||
return ..()
|
return ..()
|
||||||
@@ -66,6 +68,7 @@
|
|||||||
/datum/ai_behavior/use_in_hand
|
/datum/ai_behavior/use_in_hand
|
||||||
behavior_flags = AI_BEHAVIOR_MOVE_AND_PERFORM
|
behavior_flags = AI_BEHAVIOR_MOVE_AND_PERFORM
|
||||||
|
|
||||||
|
|
||||||
/datum/ai_behavior/use_in_hand/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/use_in_hand/perform(delta_time, datum/ai_controller/controller)
|
||||||
. = ..()
|
. = ..()
|
||||||
var/mob/living/pawn = controller.pawn
|
var/mob/living/pawn = controller.pawn
|
||||||
@@ -81,11 +84,15 @@
|
|||||||
required_distance = 1
|
required_distance = 1
|
||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||||
|
|
||||||
/datum/ai_behavior/use_on_object/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/use_on_object/setup(datum/ai_controller/controller, target_key)
|
||||||
|
. = ..()
|
||||||
|
controller.current_movement_target = controller.blackboard[target_key]
|
||||||
|
|
||||||
|
/datum/ai_behavior/use_on_object/perform(delta_time, datum/ai_controller/controller, target_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
var/mob/living/pawn = controller.pawn
|
var/mob/living/pawn = controller.pawn
|
||||||
var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand())
|
var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand())
|
||||||
var/atom/target = controller.current_movement_target
|
var/atom/target = controller.blackboard[BB_MONKEY_CURRENT_PRESS_TARGET]
|
||||||
|
|
||||||
if(!target || !pawn.CanReach(target))
|
if(!target || !pawn.CanReach(target))
|
||||||
finish_action(controller, FALSE)
|
finish_action(controller, FALSE)
|
||||||
@@ -103,11 +110,17 @@
|
|||||||
required_distance = 1
|
required_distance = 1
|
||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||||
|
|
||||||
/datum/ai_behavior/give/perform(delta_time, datum/ai_controller/controller)
|
|
||||||
|
/datum/ai_behavior/give/setup(datum/ai_controller/controller, target_key)
|
||||||
|
. = ..()
|
||||||
|
controller.current_movement_target = controller.blackboard[target_key]
|
||||||
|
|
||||||
|
|
||||||
|
/datum/ai_behavior/give/perform(delta_time, datum/ai_controller/controller, target_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
var/mob/living/pawn = controller.pawn
|
var/mob/living/pawn = controller.pawn
|
||||||
var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand())
|
var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand())
|
||||||
var/atom/target = controller.current_movement_target
|
var/atom/target = controller.blackboard[target_key]
|
||||||
|
|
||||||
if(!target || !pawn.CanReach(target) || !isliving(target))
|
if(!target || !pawn.CanReach(target) || !isliving(target))
|
||||||
finish_action(controller, FALSE)
|
finish_action(controller, FALSE)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
if(ismob(item_pawn.loc)) //We're being held, maybe escape?
|
if(ismob(item_pawn.loc)) //We're being held, maybe escape?
|
||||||
if(DT_PROB(HAUNTED_ITEM_ESCAPE_GRASP_CHANCE, delta_time))
|
if(DT_PROB(HAUNTED_ITEM_ESCAPE_GRASP_CHANCE, delta_time))
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_escape_grasp))
|
controller.queue_behavior(/datum/ai_behavior/item_escape_grasp)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|
||||||
if(!DT_PROB(HAUNTED_ITEM_ATTACK_HAUNT_CHANCE, delta_time))
|
if(!DT_PROB(HAUNTED_ITEM_ATTACK_HAUNT_CHANCE, delta_time))
|
||||||
@@ -17,6 +17,5 @@
|
|||||||
var/mob/living/potential_target = i
|
var/mob/living/potential_target = i
|
||||||
if(get_dist(potential_target, item_pawn) <= 7)
|
if(get_dist(potential_target, item_pawn) <= 7)
|
||||||
controller.blackboard[BB_HAUNT_TARGET] = potential_target
|
controller.blackboard[BB_HAUNT_TARGET] = potential_target
|
||||||
controller.current_movement_target = potential_target
|
controller.queue_behavior(/datum/ai_behavior/item_move_close_and_attack/haunted, BB_HAUNT_TARGET, BB_HAUNTED_THROW_ATTEMPT_COUNT)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/item_move_close_and_attack/haunted))
|
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|||||||
@@ -187,8 +187,8 @@
|
|||||||
current_movement_target = commander
|
current_movement_target = commander
|
||||||
var/mob/living/living_pawn = pawn
|
var/mob/living/living_pawn = pawn
|
||||||
if(living_pawn.buckled)
|
if(living_pawn.buckled)
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
|
queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/follow))
|
queue_behavior(/datum/ai_behavior/follow)
|
||||||
// attack: harass whoever the commander points to
|
// attack: harass whoever the commander points to
|
||||||
if(COMMAND_ATTACK)
|
if(COMMAND_ATTACK)
|
||||||
pawn.visible_message(span_danger("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi
|
pawn.visible_message(span_danger("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi
|
||||||
@@ -218,5 +218,5 @@
|
|||||||
current_movement_target = pointed_movable
|
current_movement_target = pointed_movable
|
||||||
blackboard[BB_ATTACK_TARGET] = WEAKREF(pointed_movable)
|
blackboard[BB_ATTACK_TARGET] = WEAKREF(pointed_movable)
|
||||||
if(living_pawn.buckled)
|
if(living_pawn.buckled)
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist))//in case they are in bed or something
|
queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/attack))
|
queue_behavior(/datum/ai_behavior/attack)
|
||||||
|
|||||||
@@ -228,19 +228,19 @@
|
|||||||
/datum/ai_behavior/disposal_mob
|
/datum/ai_behavior/disposal_mob
|
||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration
|
||||||
|
|
||||||
/datum/ai_behavior/disposal_mob/finish_action(datum/ai_controller/controller, succeeded)
|
/datum/ai_behavior/disposal_mob/finish_action(datum/ai_controller/controller, succeeded, attack_target_key, disposal_target_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = null //Reset attack target
|
controller.blackboard[attack_target_key] = null //Reset attack target
|
||||||
controller.blackboard[BB_MONKEY_DISPOSING] = FALSE //No longer disposing
|
controller.blackboard[BB_MONKEY_DISPOSING] = FALSE //No longer disposing
|
||||||
controller.blackboard[BB_MONKEY_TARGET_DISPOSAL] = null //No target disposal
|
controller.blackboard[disposal_target_key] = null //No target disposal
|
||||||
|
|
||||||
/datum/ai_behavior/disposal_mob/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/disposal_mob/perform(delta_time, datum/ai_controller/controller, attack_target_key, disposal_target_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
if(controller.blackboard[BB_MONKEY_DISPOSING]) //We are disposing, don't do ANYTHING!!!!
|
if(controller.blackboard[BB_MONKEY_DISPOSING]) //We are disposing, don't do ANYTHING!!!!
|
||||||
return
|
return
|
||||||
|
|
||||||
var/mob/living/target = controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET]
|
var/mob/living/target = controller.blackboard[attack_target_key]
|
||||||
var/mob/living/living_pawn = controller.pawn
|
var/mob/living/living_pawn = controller.pawn
|
||||||
|
|
||||||
controller.current_movement_target = target
|
controller.current_movement_target = target
|
||||||
@@ -250,24 +250,24 @@
|
|||||||
target.grabbedby(living_pawn)
|
target.grabbedby(living_pawn)
|
||||||
return //Do the rest next turn
|
return //Do the rest next turn
|
||||||
|
|
||||||
var/obj/machinery/disposal/disposal = controller.blackboard[BB_MONKEY_TARGET_DISPOSAL]
|
var/obj/machinery/disposal/disposal = controller.blackboard[disposal_target_key]
|
||||||
controller.current_movement_target = disposal
|
controller.current_movement_target = disposal
|
||||||
|
|
||||||
if(living_pawn.Adjacent(disposal))
|
if(living_pawn.Adjacent(disposal))
|
||||||
INVOKE_ASYNC(src, .proc/try_disposal_mob, controller) //put him in!
|
INVOKE_ASYNC(src, .proc/try_disposal_mob, controller, attack_target_key, disposal_target_key) //put him in!
|
||||||
else //This means we might be getting pissed!
|
else //This means we might be getting pissed!
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/ai_behavior/disposal_mob/proc/try_disposal_mob(datum/ai_controller/controller)
|
/datum/ai_behavior/disposal_mob/proc/try_disposal_mob(datum/ai_controller/controller, attack_target_key, disposal_target_key)
|
||||||
var/mob/living/living_pawn = controller.pawn
|
var/mob/living/living_pawn = controller.pawn
|
||||||
var/mob/living/target = controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET]
|
var/mob/living/target = controller.blackboard[attack_target_key]
|
||||||
var/obj/machinery/disposal/disposal = controller.blackboard[BB_MONKEY_TARGET_DISPOSAL]
|
var/obj/machinery/disposal/disposal = controller.blackboard[disposal_target_key]
|
||||||
|
|
||||||
controller.blackboard[BB_MONKEY_DISPOSING] = TRUE
|
controller.blackboard[BB_MONKEY_DISPOSING] = TRUE
|
||||||
|
|
||||||
if(target && disposal?.stuff_mob_in(target, living_pawn))
|
if(target && disposal?.stuff_mob_in(target, living_pawn))
|
||||||
disposal.flush()
|
disposal.flush()
|
||||||
finish_action(controller, TRUE)
|
finish_action(controller, TRUE, attack_target_key, disposal_target_key)
|
||||||
|
|
||||||
|
|
||||||
/datum/ai_behavior/recruit_monkeys/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/recruit_monkeys/perform(delta_time, datum/ai_controller/controller)
|
||||||
|
|||||||
@@ -113,9 +113,9 @@ have ways of interacting with a specific mob and control it.
|
|||||||
blackboard[BB_MONKEY_PICKUPTARGET] = weapon
|
blackboard[BB_MONKEY_PICKUPTARGET] = weapon
|
||||||
current_movement_target = weapon
|
current_movement_target = weapon
|
||||||
if(pickpocket)
|
if(pickpocket)
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/pickpocket))
|
queue_behavior(current_behaviors, /datum/ai_behavior/monkey_equip/pickpocket)
|
||||||
else
|
else
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_equip/ground))
|
queue_behavior(current_behaviors, /datum/ai_behavior/monkey_equip/ground)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/// Returns either the best weapon from the given choices or null if held weapons are better
|
/// Returns either the best weapon from the given choices or null if held weapons are better
|
||||||
@@ -150,33 +150,6 @@ have ways of interacting with a specific mob and control it.
|
|||||||
|
|
||||||
return top_force_item
|
return top_force_item
|
||||||
|
|
||||||
/datum/ai_controller/monkey/proc/TryFindFood()
|
|
||||||
. = FALSE
|
|
||||||
var/mob/living/living_pawn = pawn
|
|
||||||
|
|
||||||
// Held items
|
|
||||||
|
|
||||||
var/list/food_candidates = list()
|
|
||||||
for(var/obj/item as anything in living_pawn.held_items)
|
|
||||||
if(!item || !IsEdible(item))
|
|
||||||
continue
|
|
||||||
food_candidates += item
|
|
||||||
|
|
||||||
for(var/obj/item/candidate in oview(2, living_pawn))
|
|
||||||
if(!IsEdible(candidate))
|
|
||||||
continue
|
|
||||||
food_candidates += candidate
|
|
||||||
|
|
||||||
if(length(food_candidates))
|
|
||||||
var/obj/item/best_held = GetBestWeapon(null, living_pawn.held_items)
|
|
||||||
for(var/obj/item/held as anything in living_pawn.held_items)
|
|
||||||
if(!held || held == best_held)
|
|
||||||
continue
|
|
||||||
living_pawn.dropItemToGround(held)
|
|
||||||
|
|
||||||
AddBehavior(/datum/ai_behavior/consume, pick(food_candidates))
|
|
||||||
return TRUE
|
|
||||||
|
|
||||||
/datum/ai_controller/monkey/proc/IsEdible(obj/item/thing)
|
/datum/ai_controller/monkey/proc/IsEdible(obj/item/thing)
|
||||||
if(IS_EDIBLE(thing))
|
if(IS_EDIBLE(thing))
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
var/mob/living/living_pawn = controller.pawn
|
var/mob/living/living_pawn = controller.pawn
|
||||||
|
|
||||||
if(SHOULD_RESIST(living_pawn) && DT_PROB(MONKEY_RESIST_PROB, delta_time))
|
if(SHOULD_RESIST(living_pawn) && DT_PROB(MONKEY_RESIST_PROB, delta_time))
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/resist)) //BRO IM ON FUCKING FIRE BRO
|
controller.queue_behavior(/datum/ai_behavior/resist) //BRO IM ON FUCKING FIRE BRO
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING //IM NOT DOING ANYTHING ELSE BUT EXTUINGISH MYSELF, GOOD GOD HAVE MERCY.
|
return SUBTREE_RETURN_FINISH_PLANNING //IM NOT DOING ANYTHING ELSE BUT EXTUINGISH MYSELF, GOOD GOD HAVE MERCY.
|
||||||
|
|
||||||
var/list/enemies = controller.blackboard[BB_MONKEY_ENEMIES]
|
var/list/enemies = controller.blackboard[BB_MONKEY_ENEMIES]
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
if(!selected_enemy.stat) //He's up, get him!
|
if(!selected_enemy.stat) //He's up, get him!
|
||||||
if(living_pawn.health < MONKEY_FLEE_HEALTH) //Time to skeddadle
|
if(living_pawn.health < MONKEY_FLEE_HEALTH) //Time to skeddadle
|
||||||
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_flee))
|
controller.queue_behavior(/datum/ai_behavior/monkey_flee)
|
||||||
return //I'm running fuck you guys
|
return //I'm running fuck you guys
|
||||||
|
|
||||||
if(controller.TryFindWeapon()) //Getting a weapon is higher priority if im not fleeing.
|
if(controller.TryFindWeapon()) //Getting a weapon is higher priority if im not fleeing.
|
||||||
@@ -34,9 +34,9 @@
|
|||||||
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
||||||
controller.current_movement_target = selected_enemy
|
controller.current_movement_target = selected_enemy
|
||||||
if(controller.blackboard[BB_MONKEY_RECRUIT_COOLDOWN] < world.time)
|
if(controller.blackboard[BB_MONKEY_RECRUIT_COOLDOWN] < world.time)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/recruit_monkeys))
|
controller.queue_behavior(/datum/ai_behavior/recruit_monkeys)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/battle_screech/monkey))
|
controller.queue_behavior(/datum/ai_behavior/battle_screech/monkey)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/monkey_attack_mob))
|
controller.queue_behavior(/datum/ai_behavior/monkey_attack_mob)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING //Focus on this
|
return SUBTREE_RETURN_FINISH_PLANNING //Focus on this
|
||||||
|
|
||||||
else //He's down, can we disposal him?
|
else //He's down, can we disposal him?
|
||||||
@@ -44,17 +44,36 @@
|
|||||||
if(bodyDisposal)
|
if(bodyDisposal)
|
||||||
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = selected_enemy
|
||||||
controller.blackboard[BB_MONKEY_TARGET_DISPOSAL] = bodyDisposal
|
controller.blackboard[BB_MONKEY_TARGET_DISPOSAL] = bodyDisposal
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/disposal_mob))
|
controller.queue_behavior(/datum/ai_behavior/disposal_mob, BB_MONKEY_CURRENT_ATTACK_TARGET, BB_MONKEY_TARGET_DISPOSAL)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|
||||||
if(prob(5))
|
if(prob(5))
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/use_in_hand))
|
controller.queue_behavior(/datum/ai_behavior/use_in_hand)
|
||||||
|
|
||||||
if(selected_enemy || !DT_PROB(MONKEY_SHENANIGAN_PROB, delta_time))
|
if(selected_enemy || !DT_PROB(MONKEY_SHENANIGAN_PROB, delta_time))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(world.time >= controller.blackboard[BB_MONKEY_NEXT_HUNGRY] && controller.TryFindFood())
|
if(world.time >= controller.blackboard[BB_MONKEY_NEXT_HUNGRY])
|
||||||
return
|
var/list/food_candidates = list()
|
||||||
|
for(var/obj/item as anything in living_pawn.held_items)
|
||||||
|
if(!item || !controller.IsEdible(item))
|
||||||
|
continue
|
||||||
|
food_candidates += item
|
||||||
|
|
||||||
|
for(var/obj/item/candidate in oview(2, living_pawn))
|
||||||
|
if(!controller.IsEdible(candidate))
|
||||||
|
continue
|
||||||
|
food_candidates += candidate
|
||||||
|
|
||||||
|
if(length(food_candidates))
|
||||||
|
var/obj/item/best_held = controller.GetBestWeapon(null, living_pawn.held_items)
|
||||||
|
for(var/obj/item/held as anything in living_pawn.held_items)
|
||||||
|
if(!held || held == best_held)
|
||||||
|
continue
|
||||||
|
living_pawn.dropItemToGround(held)
|
||||||
|
|
||||||
|
controller.queue_behavior(/datum/ai_behavior/consume, pick(food_candidates))
|
||||||
|
return
|
||||||
|
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
var/list/possible_targets = list()
|
var/list/possible_targets = list()
|
||||||
@@ -66,8 +85,8 @@
|
|||||||
possible_targets += thing
|
possible_targets += thing
|
||||||
var/atom/target = pick(possible_targets)
|
var/atom/target = pick(possible_targets)
|
||||||
if(target)
|
if(target)
|
||||||
controller.current_movement_target = target
|
controller.blackboard[BB_MONKEY_CURRENT_PRESS_TARGET] = target
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/use_on_object))
|
controller.queue_behavior(/datum/ai_behavior/use_on_object, BB_MONKEY_CURRENT_PRESS_TARGET)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(prob(5) && (locate(/obj/item) in living_pawn.held_items))
|
if(prob(5) && (locate(/obj/item) in living_pawn.held_items))
|
||||||
@@ -76,9 +95,8 @@
|
|||||||
possible_receivers += candidate
|
possible_receivers += candidate
|
||||||
|
|
||||||
if(length(possible_receivers))
|
if(length(possible_receivers))
|
||||||
var/mob/living/target = pick(possible_receivers)
|
controller.blackboard[BB_MONKEY_CURRENT_GIVE_TARGET] = pick(possible_receivers)
|
||||||
controller.current_movement_target = target
|
controller.queue_behavior(/datum/ai_behavior/give, BB_MONKEY_CURRENT_GIVE_TARGET)
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/give))
|
|
||||||
return
|
return
|
||||||
|
|
||||||
controller.TryFindWeapon()
|
controller.TryFindWeapon()
|
||||||
|
|||||||
@@ -5,6 +5,11 @@
|
|||||||
///Time to telegraph and tilt over
|
///Time to telegraph and tilt over
|
||||||
var/time_to_tilt = 0.8 SECONDS
|
var/time_to_tilt = 0.8 SECONDS
|
||||||
|
|
||||||
|
/datum/ai_behavior/vendor_crush/setup(datum/ai_controller/controller, target_key)
|
||||||
|
. = ..()
|
||||||
|
controller.current_movement_target = controller.blackboard[target_key]
|
||||||
|
|
||||||
|
|
||||||
/datum/ai_behavior/vendor_crush/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/vendor_crush/perform(delta_time, datum/ai_controller/controller)
|
||||||
. = ..()
|
. = ..()
|
||||||
if(controller.blackboard[BB_VENDING_BUSY_TILTING])
|
if(controller.blackboard[BB_VENDING_BUSY_TILTING])
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
if(vendor_pawn.tilted) //We're tilted, try to untilt
|
if(vendor_pawn.tilted) //We're tilted, try to untilt
|
||||||
if(blackboard[BB_VENDING_UNTILT_COOLDOWN] > world.time)
|
if(blackboard[BB_VENDING_UNTILT_COOLDOWN] > world.time)
|
||||||
return
|
return
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_rise_up))
|
queue_behavior(/datum/ai_behavior/vendor_rise_up)
|
||||||
return
|
return
|
||||||
else //Not tilted, try to find target to tilt onto.
|
else //Not tilted, try to find target to tilt onto.
|
||||||
if(blackboard[BB_VENDING_TILT_COOLDOWN] > world.time)
|
if(blackboard[BB_VENDING_TILT_COOLDOWN] > world.time)
|
||||||
@@ -42,8 +42,7 @@
|
|||||||
for(var/mob/living/living_target in oview(vision_range, pawn))
|
for(var/mob/living/living_target in oview(vision_range, pawn))
|
||||||
if(living_target.stat || living_target.incorporeal_move) //They're already fucked up or incorporeal
|
if(living_target.stat || living_target.incorporeal_move) //They're already fucked up or incorporeal
|
||||||
continue
|
continue
|
||||||
current_movement_target = living_target
|
|
||||||
blackboard[BB_VENDING_CURRENT_TARGET] = living_target
|
blackboard[BB_VENDING_CURRENT_TARGET] = living_target
|
||||||
LAZYADD(current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/vendor_crush))
|
queue_behavior(/datum/ai_behavior/vendor_crush, BB_VENDING_CURRENT_TARGET)
|
||||||
return
|
return
|
||||||
blackboard[BB_VENDING_TILT_COOLDOWN] = world.time + search_for_enemy_cooldown
|
blackboard[BB_VENDING_TILT_COOLDOWN] = world.time + search_for_enemy_cooldown
|
||||||
|
|||||||
@@ -113,11 +113,12 @@
|
|||||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT
|
||||||
required_distance = 1
|
required_distance = 1
|
||||||
|
|
||||||
/datum/ai_behavior/leave_venue/perform(delta_time, datum/ai_controller/controller)
|
/datum/ai_behavior/leave_venue/setup(datum/ai_controller/controller, venue_key)
|
||||||
|
. = ..()
|
||||||
|
var/datum/venue/attending_venue = controller.blackboard[venue_key]
|
||||||
|
controller.current_movement_target = attending_venue.restaurant_portal
|
||||||
|
|
||||||
|
/datum/ai_behavior/leave_venue/perform(delta_time, datum/ai_controller/controller, venue_key)
|
||||||
. = ..()
|
. = ..()
|
||||||
qdel(controller.pawn) //save the world, my final message, goodbye.
|
qdel(controller.pawn) //save the world, my final message, goodbye.
|
||||||
finish_action(controller, TRUE)
|
finish_action(controller, TRUE)
|
||||||
|
|
||||||
|
|
||||||
/datum/ai_behavior/break_spine/robot_customer
|
|
||||||
target_key = BB_CUSTOMER_CURRENT_TARGET
|
|
||||||
|
|||||||
@@ -1,25 +1,23 @@
|
|||||||
/datum/ai_planning_subtree/robot_customer/SelectBehaviors(datum/ai_controller/controller, delta_time)
|
/datum/ai_planning_subtree/robot_customer/SelectBehaviors(datum/ai_controller/controller, delta_time)
|
||||||
if(controller.blackboard[BB_CUSTOMER_LEAVING])
|
if(controller.blackboard[BB_CUSTOMER_LEAVING])
|
||||||
var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE]
|
controller.queue_behavior(/datum/ai_behavior/leave_venue, BB_CUSTOMER_ATTENDING_VENUE)
|
||||||
controller.current_movement_target = attending_venue.restaurant_portal
|
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/leave_venue))
|
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|
||||||
if(controller.blackboard[BB_CUSTOMER_CURRENT_TARGET])
|
if(controller.blackboard[BB_CUSTOMER_CURRENT_TARGET])
|
||||||
controller.current_movement_target = controller.blackboard[BB_CUSTOMER_CURRENT_TARGET]
|
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/break_spine/robot_customer))
|
controller.queue_behavior(/datum/ai_behavior/break_spine, BB_CUSTOMER_CURRENT_TARGET)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|
||||||
var/obj/my_seat = controller.blackboard[BB_CUSTOMER_MY_SEAT]
|
var/obj/my_seat = controller.blackboard[BB_CUSTOMER_MY_SEAT]
|
||||||
|
|
||||||
if(!my_seat) //We havn't got a seat yet! find one!
|
if(!my_seat) //We havn't got a seat yet! find one!
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/find_seat))
|
controller.queue_behavior(/datum/ai_behavior/find_seat)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
|
|
||||||
controller.current_movement_target = my_seat
|
controller.current_movement_target = my_seat
|
||||||
|
|
||||||
if(!controller.blackboard[BB_CUSTOMER_CURRENT_ORDER]) //We havn't ordered yet even ordered yet. go on! go over there and go do it!
|
if(!controller.blackboard[BB_CUSTOMER_CURRENT_ORDER]) //We havn't ordered yet even ordered yet. go on! go over there and go do it!
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/order_food))
|
controller.queue_behavior(/datum/ai_behavior/order_food)
|
||||||
return SUBTREE_RETURN_FINISH_PLANNING
|
return SUBTREE_RETURN_FINISH_PLANNING
|
||||||
else
|
else
|
||||||
LAZYADD(controller.current_behaviors, GET_AI_BEHAVIOR(/datum/ai_behavior/wait_for_food))
|
controller.queue_behavior(/datum/ai_behavior/wait_for_food)
|
||||||
|
|||||||
Reference in New Issue
Block a user