mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
simple animals (#18251)
This commit is contained in:
@@ -7,16 +7,16 @@
|
||||
layer = MOB_LAYER - 0.1
|
||||
mob_biotypes = MOB_ROBOTIC
|
||||
light_range = 3
|
||||
stop_automated_movement = 1
|
||||
wander = 0
|
||||
healable = 0
|
||||
stop_automated_movement = TRUE
|
||||
wander = FALSE
|
||||
healable = FALSE
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
has_unlimited_silicon_privilege = 1
|
||||
has_unlimited_silicon_privilege = TRUE
|
||||
sentience_type = SENTIENCE_ARTIFICIAL
|
||||
status_flags = 0 //no default canpush
|
||||
can_strip = 0
|
||||
can_strip = FALSE
|
||||
|
||||
speak_emote = list("states")
|
||||
friendly = "boops"
|
||||
@@ -31,17 +31,17 @@
|
||||
var/window_width = 0 //0 for default size
|
||||
var/window_height = 0
|
||||
var/obj/item/paicard/paicard // Inserted pai card.
|
||||
var/allow_pai = 1 // Are we even allowed to insert a pai card.
|
||||
var/allow_pai = TRUE // Are we even allowed to insert a pai card.
|
||||
var/bot_name
|
||||
|
||||
var/list/player_access = list()
|
||||
var/emagged = 0
|
||||
var/obj/item/card/id/access_card // the ID card that the bot "holds"
|
||||
var/list/prev_access = list()
|
||||
var/on = 1
|
||||
var/open = 0//Maint panel
|
||||
var/locked = 1
|
||||
var/hacked = 0 //Used to differentiate between being hacked by silicons and emagged by humans.
|
||||
var/on = TRUE
|
||||
var/open = FALSE //Maint panel
|
||||
var/locked = TRUE
|
||||
var/hacked = FALSE //Used to differentiate between being hacked by silicons and emagged by humans.
|
||||
var/text_hack = "" //Custom text returned to a silicon upon hacking a bot.
|
||||
var/text_dehack = "" //Text shown when resetting a bots hacked status to normal.
|
||||
var/text_dehack_fail = "" //Shown when a silicon tries to reset a bot emagged with the emag item, which cannot be reset.
|
||||
@@ -50,16 +50,16 @@
|
||||
var/base_speed = 2 //The speed at which the bot moves, or the number of times it moves per process() tick.
|
||||
var/turf/ai_waypoint //The end point of a bot's path, or the target location.
|
||||
var/list/path = list() //List of turfs through which a bot 'steps' to reach the waypoint, associated with the path image, if there is one.
|
||||
var/pathset = 0
|
||||
var/pathset = FALSE
|
||||
var/list/ignore_list = list() //List of unreachable targets for an ignore-list enabled bot to ignore.
|
||||
var/mode = BOT_IDLE //Standardizes the vars that indicate the bot is busy with its function.
|
||||
var/tries = 0 //Number of times the bot tried and failed to move.
|
||||
var/remote_disabled = 0 //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras.
|
||||
var/remote_disabled = FALSE //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras.
|
||||
var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it.
|
||||
var/obj/item/radio/Radio //The bot's radio, for speaking to people.
|
||||
var/list/radio_config = null //which channels can the bot listen to
|
||||
var/radio_channel = "Common" //The bot's default radio channel
|
||||
var/auto_patrol = 0// set to make bot automatically patrol
|
||||
var/auto_patrol = FALSE // set to make bot automatically patrol
|
||||
var/turf/patrol_target // this is turf to navigate to (location of beacon)
|
||||
var/turf/summon_target // The turf of a user summoning a bot.
|
||||
var/new_destination // pending new destination (waiting for beacon response)
|
||||
@@ -125,7 +125,7 @@
|
||||
/mob/living/simple_animal/bot/proc/turn_on()
|
||||
if(stat)
|
||||
return 0
|
||||
on = 1
|
||||
on = TRUE
|
||||
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, "depowered")
|
||||
set_light(initial(light_range))
|
||||
update_icon()
|
||||
@@ -134,7 +134,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/bot/proc/turn_off()
|
||||
on = 0
|
||||
on = FALSE
|
||||
ADD_TRAIT(src, TRAIT_IMMOBILIZED, "depowered")
|
||||
set_light(0)
|
||||
bot_reset() //Resets an AI's call, should it exist.
|
||||
@@ -224,14 +224,14 @@
|
||||
|
||||
/mob/living/simple_animal/bot/emag_act(mob/user)
|
||||
if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again.
|
||||
locked = 0
|
||||
locked = FALSE
|
||||
emagged = 1
|
||||
to_chat(user, "<span class='notice'>You bypass [src]'s controls.</span>")
|
||||
return
|
||||
if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging.
|
||||
emagged = 2
|
||||
remote_disabled = 1 //Manually emagging the bot locks out the AI built in panel.
|
||||
locked = 1 //Access denied forever!
|
||||
remote_disabled = TRUE //Manually emagging the bot locks out the AI built in panel.
|
||||
locked = TRUE //Access denied forever!
|
||||
bot_reset()
|
||||
turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP.
|
||||
to_chat(src, "<span class='userdanger'>(#$*#$^^( OVERRIDE DETECTED</span>")
|
||||
@@ -409,7 +409,7 @@
|
||||
pulse2.icon = 'icons/effects/effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.anchored = TRUE
|
||||
pulse2.dir = pick(GLOB.cardinal)
|
||||
QDEL_IN(pulse2, 10)
|
||||
|
||||
@@ -550,7 +550,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
to_chat(src, "<span class='notice'><span class='big'>Priority waypoint set by [calling_ai] <b>[caller]</b>. Proceed to <b>[end_area.name]</b>.</span><br>[path.len-1] meters to destination. You have been granted additional door access for 60 seconds.</span>")
|
||||
if(message)
|
||||
to_chat(calling_ai, "<span class='notice'>[bicon(src)] [name] called to [end_area.name]. [path.len-1] meters to destination.</span>")
|
||||
pathset = 1
|
||||
pathset = TRUE
|
||||
mode = BOT_RESPONDING
|
||||
tries = 0
|
||||
else
|
||||
@@ -578,7 +578,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
reset_access_timer_id = null
|
||||
set_path(null)
|
||||
summon_target = null
|
||||
pathset = 0
|
||||
pathset = FALSE
|
||||
access_card.access = prev_access
|
||||
tries = 0
|
||||
mode = BOT_IDLE
|
||||
@@ -602,7 +602,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
/mob/living/simple_animal/bot/proc/start_patrol()
|
||||
|
||||
if(tries >= BOT_STEP_MAX_RETRIES) //Bot is trapped, so stop trying to patrol.
|
||||
auto_patrol = 0
|
||||
auto_patrol = FALSE
|
||||
tries = 0
|
||||
speak("Unable to start patrol.")
|
||||
|
||||
@@ -666,7 +666,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
patrol_target = nearest_beacon_loc
|
||||
destination = next_destination
|
||||
else
|
||||
auto_patrol = 0
|
||||
auto_patrol = FALSE
|
||||
mode = BOT_IDLE
|
||||
speak("Disengaging patrol mode.")
|
||||
send_status()
|
||||
@@ -737,10 +737,10 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
switch(recv)
|
||||
if("stop")
|
||||
bot_reset() //HOLD IT!!
|
||||
auto_patrol = 0
|
||||
auto_patrol = FALSE
|
||||
|
||||
if("go")
|
||||
auto_patrol = 1
|
||||
auto_patrol = TRUE
|
||||
|
||||
if("summon")
|
||||
bot_reset()
|
||||
@@ -902,7 +902,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
else if(!hacked)
|
||||
to_chat(M, "<span class='userdanger'>[text_dehack_fail]</span>")
|
||||
else
|
||||
emagged = FALSE
|
||||
emagged = 0
|
||||
hacked = FALSE
|
||||
to_chat(M, "<span class='notice'>[text_dehack]</span>")
|
||||
show_laws()
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
desc = "A little cleaning robot, he looks so excited!"
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "cleanbot0"
|
||||
density = 0
|
||||
anchored = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
radio_channel = "Service" //Service
|
||||
@@ -20,7 +20,7 @@
|
||||
path_image_color = "#993299"
|
||||
|
||||
|
||||
var/blood = 1
|
||||
var/blood = TRUE
|
||||
var/list/target_types = list()
|
||||
var/obj/effect/decal/cleanable/target
|
||||
var/max_targets = 50 //Maximum number of targets a cleanbot can ignore.
|
||||
@@ -164,19 +164,19 @@
|
||||
target_types += /obj/effect/decal/cleanable/trail_holder
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/proc/clean(obj/effect/decal/cleanable/target)
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
icon_state = "cleanbot-c"
|
||||
visible_message("<span class='notice'>[src] begins to clean up [target]</span>")
|
||||
mode = BOT_CLEANING
|
||||
spawn(50)
|
||||
if(mode == BOT_CLEANING)
|
||||
QDEL_NULL(target)
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
mode = BOT_IDLE
|
||||
icon_state = "cleanbot[on]"
|
||||
|
||||
/mob/living/simple_animal/bot/cleanbot/explode()
|
||||
on = 0
|
||||
on = FALSE
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
new /obj/item/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
desc = "A security robot. He looks less than thrilled."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "ed2090"
|
||||
density = 1
|
||||
anchored = 0
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
@@ -25,23 +25,23 @@
|
||||
path_image_color = "#FF0000"
|
||||
data_hud_type = DATA_HUD_SECURITY_ADVANCED
|
||||
|
||||
allow_pai = 0
|
||||
allow_pai = FALSE
|
||||
|
||||
var/lastfired = 0
|
||||
var/shot_delay = 3 //.3 seconds between shots
|
||||
var/lasercolor = ""
|
||||
var/disabled = 0//A holder for if it needs to be disabled, if true it will not seach for targets, shoot at targets, or move, currently only used for lasertag
|
||||
var/disabled = FALSE //A holder for if it needs to be disabled, if true it will not seach for targets, shoot at targets, or move, currently only used for lasertag
|
||||
|
||||
var/mob/living/carbon/target
|
||||
var/oldtarget_name
|
||||
var/threatlevel = 0
|
||||
var/target_lastloc //Loc of target when arrested.
|
||||
var/last_found //There's a delay
|
||||
var/declare_arrests = 1 //When making an arrest, should it notify everyone wearing sechuds?
|
||||
var/idcheck = 0 //If true, arrest people with no IDs
|
||||
var/weaponscheck = 1 //If true, arrest people for weapons if they don't have access
|
||||
var/check_records = 1 //Does it check security records?
|
||||
var/arrest_type = 0 //If true, don't handcuff
|
||||
var/declare_arrests = TRUE //When making an arrest, should it notify everyone wearing sechuds?
|
||||
var/idcheck = FALSE //If true, arrest people with no IDs
|
||||
var/weaponscheck = TRUE //If true, arrest people for weapons if they don't have access
|
||||
var/check_records = TRUE //Does it check security records?
|
||||
var/arrest_type = FALSE //If true, don't handcuff
|
||||
var/projectile = /obj/item/projectile/beam/disabler //Holder for projectile type
|
||||
var/shoot_sound = 'sound/weapons/taser.ogg'
|
||||
var/baton_delayed = FALSE
|
||||
@@ -58,10 +58,10 @@
|
||||
setup_access()
|
||||
|
||||
if(lasercolor)
|
||||
shot_delay = 6//Longer shot delay because JESUS CHRIST
|
||||
check_records = 0//Don't actively target people set to arrest
|
||||
arrest_type = 1//Don't even try to cuff
|
||||
declare_arrests = 0 // Don't spam sec
|
||||
shot_delay = 6 //Longer shot delay because JESUS CHRIST
|
||||
check_records = FALSE //Don't actively target people set to arrest
|
||||
arrest_type = TRUE //Don't even try to cuff
|
||||
declare_arrests = FALSE // Don't spam sec
|
||||
bot_core.req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_ROBOTICS)
|
||||
|
||||
if(created_name == initial(name) || !created_name)
|
||||
@@ -95,7 +95,7 @@
|
||||
..()
|
||||
target = null
|
||||
oldtarget_name = null
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
walk_to(src,0)
|
||||
last_found = world.time
|
||||
set_weapon()
|
||||
@@ -206,7 +206,7 @@
|
||||
to_chat(user, "<span class='warning'>You short out [src]'s target assessment circuits.</span>")
|
||||
oldtarget_name = user.name
|
||||
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
|
||||
declare_arrests = 0
|
||||
declare_arrests = FALSE
|
||||
icon_state = "[lasercolor]ed209[on]"
|
||||
set_weapon()
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
stun_attack(target)
|
||||
if(!lasercolor)
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
target_lastloc = target.loc
|
||||
return
|
||||
else
|
||||
@@ -306,7 +306,7 @@
|
||||
|
||||
if(BOT_ARREST)
|
||||
if(!target)
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
frustration = 0
|
||||
@@ -321,7 +321,7 @@
|
||||
return
|
||||
else
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
|
||||
if(BOT_START_PATROL)
|
||||
look_for_perp()
|
||||
@@ -335,7 +335,7 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/proc/back_to_idle()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
mode = BOT_IDLE
|
||||
target = null
|
||||
last_found = world.time
|
||||
@@ -344,7 +344,7 @@
|
||||
handle_automated_action() //ensure bot quickly responds
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/proc/back_to_hunt()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
frustration = 0
|
||||
mode = BOT_HUNT
|
||||
spawn(0)
|
||||
@@ -355,7 +355,7 @@
|
||||
/mob/living/simple_animal/bot/ed209/proc/look_for_perp()
|
||||
if(disabled)
|
||||
return
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
threatlevel = 0
|
||||
for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal
|
||||
if((C.stat) || (C.handcuffed))
|
||||
@@ -486,7 +486,7 @@
|
||||
pulse2.icon = 'icons/effects/effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.anchored = TRUE
|
||||
pulse2.dir = pick(GLOB.cardinal)
|
||||
spawn(10)
|
||||
qdel(pulse2)
|
||||
@@ -527,11 +527,11 @@
|
||||
lasertag_check++
|
||||
if(lasertag_check)
|
||||
icon_state = "[lasercolor]ed2090"
|
||||
disabled = 1
|
||||
disabled = TRUE
|
||||
walk_to(src, 0)
|
||||
target = null
|
||||
spawn(100)
|
||||
disabled = 0
|
||||
disabled = FALSE
|
||||
icon_state = "[lasercolor]ed2091"
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A little floor repairing robot, he looks so excited!"
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "floorbot0"
|
||||
density = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
@@ -335,8 +335,8 @@
|
||||
visible_message("<span class='notice'>[src] begins repairing the floor.</span>")
|
||||
spawn(50)
|
||||
if(mode == BOT_REPAIRING)
|
||||
F.broken = 0
|
||||
F.burnt = 0
|
||||
F.broken = FALSE
|
||||
F.burnt = FALSE
|
||||
F.ChangeTurf(/turf/simulated/floor/plasteel)
|
||||
mode = BOT_IDLE
|
||||
amount -= 1
|
||||
@@ -392,7 +392,7 @@
|
||||
icon_state = "[toolbox_color]floorbot[on]e"
|
||||
|
||||
/mob/living/simple_animal/bot/floorbot/explode()
|
||||
on = 0
|
||||
on = FALSE
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
var/obj/item/storage/toolbox/mechanical/N = new /obj/item/storage/toolbox/mechanical(Tsec)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
bot_core_type = /obj/machinery/bot_core/toy
|
||||
weapon = /obj/item/toy/sword
|
||||
frustration_number = 5
|
||||
locked = 0
|
||||
locked = FALSE
|
||||
|
||||
/obj/machinery/bot_core/toy
|
||||
req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE, ACCESS_ROBOTICS)
|
||||
@@ -153,7 +153,7 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/griefsky/look_for_perp()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal
|
||||
if((C.stat) || (C.handcuffed))
|
||||
continue
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
desc = "A little medical robot. He looks somewhat underwhelmed."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "medibot0"
|
||||
density = 0
|
||||
anchored = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 20
|
||||
maxHealth = 20
|
||||
pass_flags = PASSMOB
|
||||
@@ -542,7 +542,7 @@
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/bot/medbot/explode()
|
||||
on = 0
|
||||
on = FALSE
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
name = "\improper MULEbot"
|
||||
desc = "A Multiple Utility Load Effector bot."
|
||||
icon_state = "mulebot0"
|
||||
density = 1
|
||||
density = TRUE
|
||||
move_resist = MOVE_FORCE_STRONG
|
||||
animate_movement = 1
|
||||
health = 50
|
||||
@@ -454,14 +454,14 @@
|
||||
target = ai_waypoint //Target is the end point of the path, the waypoint set by the AI.
|
||||
dest_area = get_area(target)
|
||||
destination = format_text(dest_area.name)
|
||||
pathset = 1 //Indicates the AI's custom path is initialized.
|
||||
pathset = TRUE //Indicates the AI's custom path is initialized.
|
||||
start()
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/handle_automated_action()
|
||||
diag_hud_set_botmode()
|
||||
|
||||
if(!has_power())
|
||||
on = 0
|
||||
on = FALSE
|
||||
return
|
||||
if(on)
|
||||
var/speed = (!wires.is_cut(WIRE_MOTOR1) ? 1 : 0) + (!wires.is_cut(WIRE_MOTOR2) ? 2 : 0)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
desc = "A little security robot. He looks less than thrilled."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "secbot0"
|
||||
density = 0
|
||||
anchored = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
@@ -29,23 +29,23 @@
|
||||
var/threatlevel = 0
|
||||
var/target_lastloc //Loc of target when arrested.
|
||||
var/last_found //There's a delay
|
||||
var/declare_arrests = 1 //When making an arrest, should it notify everyone on the security channel?
|
||||
var/idcheck = 0 //If true, arrest people with no IDs
|
||||
var/weaponscheck = 0 //If true, arrest people for weapons if they lack access
|
||||
var/check_records = 1 //Does it check security records?
|
||||
var/arrest_type = 0 //If true, don't handcuff
|
||||
var/harmbaton = 0 //If true, beat instead of stun
|
||||
var/flashing_lights = 0 //If true, flash lights
|
||||
var/declare_arrests = TRUE //When making an arrest, should it notify everyone on the security channel?
|
||||
var/idcheck = FALSE //If true, arrest people with no IDs
|
||||
var/weaponscheck = FALSE //If true, arrest people for weapons if they lack access
|
||||
var/check_records = TRUE //Does it check security records?
|
||||
var/arrest_type = FALSE //If true, don't handcuff
|
||||
var/harmbaton = FALSE //If true, beat instead of stun
|
||||
var/flashing_lights = FALSE //If true, flash lights
|
||||
var/baton_delayed = FALSE
|
||||
var/prev_flashing_lights = 0
|
||||
allow_pai = 0
|
||||
var/prev_flashing_lights = FALSE
|
||||
allow_pai = FALSE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/beepsky
|
||||
name = "Officer Beepsky"
|
||||
desc = "It's Officer Beepsky! Powered by a potato and a shot of whiskey."
|
||||
idcheck = 0
|
||||
weaponscheck = 0
|
||||
auto_patrol = 1
|
||||
idcheck = FALSE
|
||||
weaponscheck = FALSE
|
||||
auto_patrol = TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/beepsky/explode()
|
||||
var/turf/Tsec = get_turf(src)
|
||||
@@ -63,27 +63,27 @@
|
||||
/mob/living/simple_animal/bot/secbot/ofitser
|
||||
name = "Prison Ofitser"
|
||||
desc = "It's Prison Ofitser! Powered by the tears and sweat of prisoners."
|
||||
idcheck = 0
|
||||
weaponscheck = 1
|
||||
auto_patrol = 1
|
||||
idcheck = FALSE
|
||||
weaponscheck = TRUE
|
||||
auto_patrol = TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/buzzsky
|
||||
name = "Officer Buzzsky"
|
||||
desc = "It's Officer Buzzsky! Rusted and falling apart, he seems less than thrilled with the crew for leaving him in his current state."
|
||||
base_icon = "rustbot"
|
||||
icon_state = "rustbot0"
|
||||
declare_arrests = 0
|
||||
arrest_type = 1
|
||||
harmbaton = 1
|
||||
declare_arrests = FALSE
|
||||
arrest_type = TRUE
|
||||
harmbaton = TRUE
|
||||
emagged = 2
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/armsky
|
||||
name = "Sergeant-at-Armsky"
|
||||
health = 100
|
||||
maxHealth = 100
|
||||
idcheck = 1
|
||||
arrest_type = 1
|
||||
weaponscheck = 1
|
||||
idcheck = TRUE
|
||||
arrest_type = TRUE
|
||||
weaponscheck = TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/New()
|
||||
..()
|
||||
@@ -110,7 +110,7 @@
|
||||
..()
|
||||
target = null
|
||||
oldtarget_name = null
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
walk_to(src,0)
|
||||
last_found = world.time
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
to_chat(user, "<span class='danger'>You short out [src]'s target assessment circuits.</span>")
|
||||
oldtarget_name = user.name
|
||||
audible_message("<span class='danger'>[src] buzzes oddly!</span>")
|
||||
declare_arrests = 0
|
||||
declare_arrests = FALSE
|
||||
icon_state = "[base_icon][on]"
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/bullet_act(obj/item/projectile/Proj)
|
||||
@@ -328,7 +328,7 @@
|
||||
stun_attack(target)
|
||||
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
target_lastloc = target.loc
|
||||
return
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
|
||||
if(BOT_ARREST)
|
||||
if(!target)
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
mode = BOT_IDLE
|
||||
last_found = world.time
|
||||
frustration = 0
|
||||
@@ -376,7 +376,7 @@
|
||||
return
|
||||
else //Try arresting again if the target escapes.
|
||||
mode = BOT_PREP_ARREST
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
|
||||
if(BOT_START_PATROL)
|
||||
look_for_perp()
|
||||
@@ -390,7 +390,7 @@
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/proc/back_to_idle()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
mode = BOT_IDLE
|
||||
target = null
|
||||
last_found = world.time
|
||||
@@ -399,7 +399,7 @@
|
||||
handle_automated_action() //ensure bot quickly responds
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/proc/back_to_hunt()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
frustration = 0
|
||||
mode = BOT_HUNT
|
||||
spawn(0)
|
||||
@@ -407,7 +407,7 @@
|
||||
// look for a criminal in view of the bot
|
||||
|
||||
/mob/living/simple_animal/bot/secbot/proc/look_for_perp()
|
||||
anchored = 0
|
||||
anchored = FALSE
|
||||
for(var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal
|
||||
if((C.stat) || (C.handcuffed))
|
||||
continue
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
radio_channel = "Syndicate"
|
||||
health = 300
|
||||
maxHealth = 300
|
||||
declare_arrests = 0
|
||||
idcheck = 1
|
||||
arrest_type = 1
|
||||
auto_patrol = 1
|
||||
declare_arrests = FALSE
|
||||
idcheck = TRUE
|
||||
arrest_type = TRUE
|
||||
auto_patrol = TRUE
|
||||
emagged = 2
|
||||
faction = list("syndicate")
|
||||
shoot_sound = 'sound/weapons/wave.ogg'
|
||||
anchored = 1
|
||||
anchored = TRUE
|
||||
window_id = "syndiebot"
|
||||
window_name = "Syndicate Bot Interface"
|
||||
var/turf/saved_turf
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
health = 2
|
||||
harm_intent_damage = 1
|
||||
friendly = "nudges"
|
||||
density = 0
|
||||
density = FALSE
|
||||
flying = TRUE
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
ventcrawler = 2
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
M.death()
|
||||
M.splat()
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
break
|
||||
for(var/obj/item/toy/cattoy/T in view(1, src))
|
||||
if(T.cooldown < (world.time - 400))
|
||||
@@ -143,16 +143,16 @@
|
||||
turns_since_scan = 0
|
||||
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc)))
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
|
||||
movement_target = null
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
for(var/mob/living/simple_animal/mouse/snack in oview(src,3))
|
||||
if(isturf(snack.loc) && !snack.stat)
|
||||
movement_target = snack
|
||||
break
|
||||
if(movement_target)
|
||||
stop_automated_movement = 1
|
||||
stop_automated_movement = TRUE
|
||||
walk_to(src,movement_target,0,3)
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Proc
|
||||
@@ -169,7 +169,7 @@
|
||||
icon_dead = "kitten_dead"
|
||||
icon_resting = null
|
||||
gender = NEUTER
|
||||
density = 0
|
||||
density = FALSE
|
||||
pass_flags = PASSMOB
|
||||
collar_type = "kitten"
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/squish_chance = 50
|
||||
loot = list(/obj/effect/decal/cleanable/insectguts)
|
||||
del_on_death = 1
|
||||
del_on_death = TRUE
|
||||
|
||||
/mob/living/simple_animal/cockroach/can_die()
|
||||
return ..() && !SSticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes.
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
stop_automated_movement = 1
|
||||
stop_automated_movement = TRUE
|
||||
friendly = "pinches"
|
||||
ventcrawler = 2
|
||||
can_hide = 1
|
||||
can_collar = 1
|
||||
can_hide = TRUE
|
||||
can_collar = TRUE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/crab/handle_automated_movement()
|
||||
|
||||
@@ -14,6 +14,6 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
|
||||
speed = 0
|
||||
stop_automated_movement = 0
|
||||
stop_automated_movement = FALSE
|
||||
turns_per_move = 4
|
||||
|
||||
var/list/donors = list()
|
||||
|
||||
@@ -661,18 +661,18 @@
|
||||
icon_living = "borgi"
|
||||
bark_sound = null //No robo-bjork...
|
||||
yelp_sound = null //Or robo-Yelp.
|
||||
var/emagged = 0
|
||||
var/emagged = FALSE
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
|
||||
del_on_death = 1
|
||||
del_on_death = TRUE
|
||||
deathmessage = "blows apart!"
|
||||
animal_species = /mob/living/simple_animal/pet/dog/corgi/borgi
|
||||
nofur = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/borgi/emag_act(user as mob)
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
emagged = TRUE
|
||||
visible_message("<span class='warning'>[user] swipes a card through [src].</span>", "<span class='notice'>You overload [src]s internal reactor.</span>")
|
||||
addtimer(CALLBACK(src, .proc/explode), 1000)
|
||||
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
response_harm = "kicks"
|
||||
faction = list("neutral")
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
attack_same = 1
|
||||
attack_same = TRUE
|
||||
attacktext = "kicks"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 2
|
||||
stop_automated_movement_when_pulled = 1
|
||||
can_collar = 1
|
||||
stop_automated_movement_when_pulled = TRUE
|
||||
can_collar = TRUE
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
gender = FEMALE
|
||||
@@ -130,7 +130,7 @@
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
@@ -200,7 +200,7 @@
|
||||
speak_emote = list("cheeps")
|
||||
emote_hear = list("cheeps")
|
||||
emote_see = list("pecks at the ground","flaps its tiny wings")
|
||||
density = 0
|
||||
density = FALSE
|
||||
speak_chance = 2
|
||||
turns_per_move = 2
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1)
|
||||
@@ -214,8 +214,8 @@
|
||||
var/amount_grown = 0
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_size = MOB_SIZE_TINY
|
||||
can_hide = 1
|
||||
can_collar = 1
|
||||
can_hide = TRUE
|
||||
can_collar = TRUE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
|
||||
@@ -253,7 +253,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
speak_emote = list("clucks","croons")
|
||||
emote_hear = list("clucks")
|
||||
emote_see = list("pecks at the ground","flaps its wings viciously")
|
||||
density = 0
|
||||
density = FALSE
|
||||
speak_chance = 2
|
||||
turns_per_move = 3
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2)
|
||||
@@ -273,8 +273,8 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
holder_type = /obj/item/holder/chicken
|
||||
can_hide = 1
|
||||
can_collar = 1
|
||||
can_hide = TRUE
|
||||
can_collar = TRUE
|
||||
var/list/feedMessages = list("It clucks happily.","It clucks happily.")
|
||||
var/list/layMessage = EGG_LAYING_MESSAGES
|
||||
var/list/validColors = list("brown","black","white")
|
||||
@@ -389,7 +389,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
attacktext = "kicks"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
@@ -415,7 +415,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
attacktext = "pecks"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
@@ -440,7 +440,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
attacktext = "kicks"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
@@ -465,7 +465,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
attacktext = "kicks"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
@@ -490,7 +490,7 @@ GLOBAL_VAR_INIT(chicken_count, 0)
|
||||
attacktext = "kicks"
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
response_disarm = "shoos"
|
||||
response_harm = "stomps on"
|
||||
ventcrawler = 2
|
||||
density = 0
|
||||
density = FALSE
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
can_hide = 1
|
||||
can_hide = TRUE
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1)
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stamps on"
|
||||
density = 0
|
||||
density = FALSE
|
||||
ventcrawler = 2
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
@@ -31,9 +31,9 @@
|
||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||
universal_speak = FALSE
|
||||
can_hide = 1
|
||||
can_hide = TRUE
|
||||
holder_type = /obj/item/holder/mouse
|
||||
can_collar = 1
|
||||
can_collar = TRUE
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/chew_probability = 1
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "spiderbot-chassis"
|
||||
icon_living = "spiderbot-chassis"
|
||||
icon_dead = "spiderbot-smashed"
|
||||
wander = 0
|
||||
wander = FALSE
|
||||
universal_speak = TRUE
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
@@ -29,12 +29,12 @@
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 500
|
||||
|
||||
can_hide = 1
|
||||
can_hide = TRUE
|
||||
ventcrawler = 2
|
||||
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
|
||||
del_on_death = 1
|
||||
del_on_death = TRUE
|
||||
|
||||
var/emagged = 0 //is it getting ready to explode?
|
||||
var/emagged = FALSE //is it getting ready to explode?
|
||||
var/obj/item/mmi/mmi = null
|
||||
var/mob/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI.
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
to_chat(user, "<span class='warning'>[src] doesn't seem to respond.</span>")
|
||||
return 0
|
||||
else
|
||||
emagged = 1
|
||||
emagged = TRUE
|
||||
to_chat(user, "<span class='notice'>You short out the security protocols and rewrite [src]'s internal memory.</span>")
|
||||
to_chat(src, "<span class='userdanger'>You have been emagged; you are now completely loyal to [user] and [user.p_their()] every order!</span>")
|
||||
emagged_master = user
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
pass_flags = PASSTABLE // Floating past tables is pretty damn spooky.
|
||||
status_flags = null // No canpush to prevent grabs ...
|
||||
density = 0 // ... But a density of 0 means we won't be blocking anyone's way.
|
||||
healable = 0 // Animated with SPACE NECROMANCY, mere mortal medicines cannot heal such an object.
|
||||
wander = 0 // These things probably ought to never be AI controlled, but in the event they are probably shouldn't wander.
|
||||
density = FALSE // ... But a density of 0 means we won't be blocking anyone's way.
|
||||
healable = FALSE // Animated with SPACE NECROMANCY, mere mortal medicines cannot heal such an object.
|
||||
wander = FALSE // These things probably ought to never be AI controlled, but in the event they are probably shouldn't wander.
|
||||
|
||||
universal_speak = TRUE // Tell the humans spooky things about the afterlife
|
||||
speak_emote = list("mumbles", "moans", "whispers", "laments", "screeches")
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
|
||||
var/turns_per_move = 1
|
||||
var/turns_since_move = 0
|
||||
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
|
||||
var/wander = 1 // Does the mob wander around when idle?
|
||||
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
|
||||
var/stop_automated_movement = FALSE //Use this to temporarely stop random movement or to if you write special movement code for animals.
|
||||
var/wander = TRUE // Does the mob wander around when idle?
|
||||
var/stop_automated_movement_when_pulled = TRUE //When set to TRUE this stops the animal from moving when someone is pulling it.
|
||||
|
||||
//Interaction
|
||||
var/response_help = "pokes"
|
||||
@@ -46,7 +46,7 @@
|
||||
var/fire_damage = 2
|
||||
|
||||
//Healable by medical stacks? Defaults to yes.
|
||||
var/healable = 1
|
||||
var/healable = TRUE
|
||||
|
||||
//Atmos effect - Yes, you can make creatures that require plasma or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage
|
||||
var/list/atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) //Leaving something at 0 means it's off - has no maximum
|
||||
@@ -65,7 +65,7 @@
|
||||
var/environment_smash = ENVIRONMENT_SMASH_NONE //Set to 1 to allow breaking of crates,lockers,racks,tables; 2 for walls; 3 for Rwalls
|
||||
|
||||
var/speed = 1 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
|
||||
var/can_hide = 0
|
||||
var/can_hide = FALSE
|
||||
|
||||
var/obj/item/clothing/accessory/petcollar/pcollar = null
|
||||
var/collar_type //if the mob has collar sprites, define them.
|
||||
@@ -90,7 +90,7 @@
|
||||
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
|
||||
|
||||
var/list/loot = list() //list of things spawned at mob's loc when it dies
|
||||
var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses
|
||||
var/del_on_death = FALSE //causes mob to be deleted on death, useful for mobs that spawn lootable corpses
|
||||
var/deathmessage = ""
|
||||
var/death_sound = null //The sound played on death
|
||||
|
||||
@@ -372,7 +372,7 @@
|
||||
icon_state = icon_dead
|
||||
if(flip_on_death)
|
||||
transform = transform.Turn(180)
|
||||
density = 0
|
||||
density = FALSE
|
||||
if(collar_type)
|
||||
collar_type = "[initial(collar_type)]_dead"
|
||||
regenerate_icons()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
/mob/living/simple_animal/slime
|
||||
var/AIproc = 0 // determines if the AI loop is activated
|
||||
var/Atkcool = 0 // attack cooldown
|
||||
var/Tempstun = 0 // temporary temperature stuns
|
||||
var/AIproc = FALSE // determines if the AI loop is activated
|
||||
var/Atkcool = FALSE // attack cooldown
|
||||
var/Tempstun = FALSE // temporary temperature stuns
|
||||
var/Discipline = 0 // if a slime has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while
|
||||
var/SStun = 0 // stun variable
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition())
|
||||
hungry = 1
|
||||
|
||||
AIproc = 1
|
||||
AIproc = TRUE
|
||||
|
||||
while(AIproc && stat != DEAD && (attacked || hungry || rabid))
|
||||
if(buckled)
|
||||
@@ -55,13 +55,13 @@
|
||||
|
||||
if(Target.health <= -70 || Target.stat == DEAD)
|
||||
Target = null
|
||||
AIproc = 0
|
||||
AIproc = FALSE
|
||||
break
|
||||
|
||||
if(Target)
|
||||
if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs)
|
||||
Target = null
|
||||
AIproc = 0
|
||||
AIproc = FALSE
|
||||
break
|
||||
if(!AIproc)
|
||||
break
|
||||
@@ -99,7 +99,7 @@
|
||||
step_to(src, Target)
|
||||
else
|
||||
Target = null
|
||||
AIproc = 0
|
||||
AIproc = FALSE
|
||||
break
|
||||
|
||||
var/sleeptime = movement_delay()
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
sleep(sleeptime + 2) // this is about as fast as a player slime can go
|
||||
|
||||
AIproc = 0
|
||||
AIproc = FALSE
|
||||
|
||||
/mob/living/simple_animal/slime/handle_environment(datum/gas_mixture/environment)
|
||||
if(!environment)
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
if(bodytemperature < (T0C + 5)) // start calculating temperature damage etc
|
||||
if(bodytemperature <= (T0C - 40)) // stun temperature
|
||||
Tempstun = 1
|
||||
Tempstun = TRUE
|
||||
|
||||
if(bodytemperature <= (T0C - 50)) // hurt temperature
|
||||
if(bodytemperature <= 50) // sqrting negative numbers is bad
|
||||
@@ -131,7 +131,7 @@
|
||||
adjustBruteLoss(round(sqrt(bodytemperature)) * 2)
|
||||
|
||||
else
|
||||
Tempstun = 0
|
||||
Tempstun = FALSE
|
||||
|
||||
updatehealth("handle environment")
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
if(M.client && ishuman(M))
|
||||
if(prob(85))
|
||||
rabid = 1 //we go rabid after finishing to feed on a human with a client.
|
||||
rabid = TRUE //we go rabid after finishing to feed on a human with a client.
|
||||
|
||||
Feedstop()
|
||||
return
|
||||
@@ -277,7 +277,7 @@
|
||||
|
||||
if(Discipline >= 5 && rabid)
|
||||
if(prob(60))
|
||||
rabid = 0
|
||||
rabid = FALSE
|
||||
|
||||
if(prob(10))
|
||||
Discipline--
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
return
|
||||
if(!is_adult)
|
||||
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD)
|
||||
is_adult = 1
|
||||
is_adult = TRUE
|
||||
maxHealth = 200
|
||||
amount_grown = 0
|
||||
for(var/datum/action/innate/slime/evolve/E in actions)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
gender = NEUTER
|
||||
var/is_adult = 0
|
||||
var/docile = 0
|
||||
var/is_adult = FALSE
|
||||
var/docile = FALSE
|
||||
faction = list("slime", "neutral")
|
||||
|
||||
harm_intent_damage = 5
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
healable = 0
|
||||
healable = FALSE
|
||||
gender = NEUTER
|
||||
|
||||
see_in_dark = 8
|
||||
@@ -46,7 +46,7 @@
|
||||
var/mob/living/Leader = null // AI variable - tells the slime to follow this person
|
||||
|
||||
var/attacked = 0 // Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable
|
||||
var/rabid = 0 // If set to 1, the slime will attack and eat anything it comes in contact with
|
||||
var/rabid = FALSE // If set to 1, the slime will attack and eat anything it comes in contact with
|
||||
var/holding_still = 0 // AI variable, cooloff-ish for how long it's going to stay in one place
|
||||
var/target_patience = 0 // AI variable, cooloff-ish for how long it's going to follow its target
|
||||
|
||||
|
||||
Reference in New Issue
Block a user