simple animals (#18251)

This commit is contained in:
KalevTait
2022-07-19 12:14:47 +02:00
committed by GitHub
parent 8e6d00ea42
commit 56d7f14817
25 changed files with 172 additions and 172 deletions
@@ -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