mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
247 lines
8.9 KiB
Plaintext
247 lines
8.9 KiB
Plaintext
/mob/living/basic/cockroach
|
|
name = "cockroach"
|
|
desc = "This station is just crawling with bugs."
|
|
icon_state = "cockroach"
|
|
icon_dead = "cockroach_no_animation"
|
|
density = FALSE
|
|
mob_biotypes = MOB_ORGANIC|MOB_BUG
|
|
mob_size = MOB_SIZE_TINY
|
|
held_w_class = WEIGHT_CLASS_TINY
|
|
health = 1
|
|
maxHealth = 1
|
|
speed = 1.25
|
|
can_be_held = TRUE
|
|
gold_core_spawnable = FRIENDLY_SPAWN
|
|
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
|
|
|
verb_say = "chitters"
|
|
verb_ask = "chitters inquisitively"
|
|
verb_exclaim = "chitters loudly"
|
|
verb_yell = "chitters loudly"
|
|
response_disarm_continuous = "shoos"
|
|
response_disarm_simple = "shoo"
|
|
response_harm_continuous = "splats"
|
|
response_harm_simple = "splat"
|
|
speak_emote = list("chitters")
|
|
|
|
basic_mob_flags = DEL_ON_DEATH
|
|
faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES)
|
|
|
|
unsuitable_atmos_damage = 0
|
|
minimum_survivable_temperature = 270
|
|
maximum_survivable_temperature = INFINITY
|
|
|
|
ai_controller = /datum/ai_controller/basic_controller/cockroach
|
|
|
|
var/cockroach_cell_line = CELL_LINE_TABLE_COCKROACH
|
|
/// What do we turn into if recruited by a regal rat?
|
|
var/minion_path = /mob/living/basic/cockroach/sewer
|
|
/// Command list given to minionised cockroaches
|
|
var/list/minion_commands
|
|
|
|
/mob/living/basic/cockroach/Initialize(mapload)
|
|
var/turf/our_turf = get_turf(src)
|
|
if(SSmapping.level_trait(our_turf.z, ZTRAIT_SNOWSTORM) || SSmapping.level_trait(our_turf.z, ZTRAIT_ICE_RUINS) || SSmapping.level_trait(our_turf.z, ZTRAIT_ICE_RUINS_UNDERGROUND))
|
|
name = "ice-[name]"
|
|
real_name = name
|
|
desc += "<br>This one seems to have a blue tint and has adapted to the cold."
|
|
minimum_survivable_temperature = 140 // 40kelvin below icebox temp
|
|
add_atom_colour("#66ccff", FIXED_COLOUR_PRIORITY)
|
|
. = ..()
|
|
AddElement(/datum/element/death_drops, /obj/effect/decal/cleanable/insectguts)
|
|
AddElement(/datum/element/swabable, cockroach_cell_line, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 7)
|
|
AddComponent( \
|
|
/datum/component/squashable, \
|
|
squash_chance = 50, \
|
|
squash_damage = 1, \
|
|
squash_flags = SQUASHED_SHOULD_BE_GIBBED|SQUASHED_ALWAYS_IF_DEAD|SQUASHED_DONT_SQUASH_IN_CONTENTS, \
|
|
)
|
|
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
|
ADD_TRAIT(src, TRAIT_NUKEIMMUNE, INNATE_TRAIT)
|
|
ADD_TRAIT(src, TRAIT_RADIMMUNE, INNATE_TRAIT)
|
|
|
|
if (minion_path)
|
|
set_pet_commands()
|
|
AddElement(/datum/element/regal_rat_minion, converted_path = minion_path, success_balloon = "hiss", pet_commands = minion_commands)
|
|
|
|
/// Decide what this should be able to be told to do
|
|
/mob/living/basic/cockroach/proc/set_pet_commands()
|
|
minion_commands = GLOB.regal_rat_minion_commands
|
|
|
|
/mob/living/basic/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach.
|
|
return FALSE
|
|
|
|
// Roach goop is the gibs to drop
|
|
/mob/living/basic/cockroach/get_gibs_type(drop_bitflags = NONE)
|
|
return
|
|
|
|
/// Roach which tries to ineffectually attack you
|
|
/mob/living/basic/cockroach/sewer
|
|
name = "sewer roach"
|
|
icon_state = "cockroach_sewer"
|
|
desc = "This bug has a really bad attitude."
|
|
health = 2
|
|
maxHealth = 2 // Wow!
|
|
melee_damage_lower = 2
|
|
melee_damage_upper = 4
|
|
obj_damage = 5
|
|
melee_attack_cooldown = 0.8 SECONDS
|
|
gold_core_spawnable = HOSTILE_SPAWN
|
|
minion_path = null
|
|
ai_controller = /datum/ai_controller/basic_controller/cockroach/aggro
|
|
|
|
/mob/living/basic/cockroach/bloodroach
|
|
name = "bloodroach"
|
|
desc = "This cockroach has gorged itself on maintenance blood, and has a glistening red sheen to its fatty carapace. Incredibly disgusting."
|
|
icon_state = "bloodroach"
|
|
icon_dead = "bloodroach_no_animation"
|
|
health = 3
|
|
maxHealth = 3 // Wow!!
|
|
|
|
/mob/living/basic/cockroach/bloodroach/Initialize(mapload)
|
|
. = ..()
|
|
AddElement(/datum/element/death_drops, /obj/effect/decal/cleanable/blood/gibs/old)
|
|
|
|
/mob/living/basic/cockroach/bloodroach/death(gibbed)
|
|
if(HAS_TRAIT(src, TRAIT_BUGKILLER_DEATH))
|
|
return ..()
|
|
// explode into a pile of blood if not pest controlled
|
|
for(var/turf/messy_turf in view(src, 2))
|
|
new /obj/effect/decal/cleanable/blood(messy_turf)
|
|
for(var/mob/living/mob_in_turf in messy_turf)
|
|
mob_in_turf.visible_message(span_danger("[mob_in_turf] is splattered with blood!"), span_userdanger("You're splattered with blood!"))
|
|
mob_in_turf.add_blood_DNA(list("Non-human DNA" = random_human_blood_type()))
|
|
playsound(mob_in_turf, 'sound/effects/splat.ogg', 50, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE)
|
|
return ..()
|
|
|
|
/// Roach with a spiky hat, like a caltrop
|
|
/mob/living/basic/cockroach/hauberoach
|
|
name = "hauberoach"
|
|
desc = "Is that cockroach wearing a tiny yet immaculate replica 19th century Prussian spiked helmet? ...Is that a bad thing?"
|
|
icon_state = "hauberoach"
|
|
attack_verb_continuous = "rams its spike into"
|
|
attack_verb_simple = "ram your spike into"
|
|
melee_damage_lower = 2.5
|
|
melee_damage_upper = 10
|
|
obj_damage = 10
|
|
melee_attack_cooldown = 1 SECONDS
|
|
gold_core_spawnable = HOSTILE_SPAWN
|
|
attack_sound = 'sound/items/weapons/bladeslice.ogg'
|
|
attack_vis_effect = ATTACK_EFFECT_SLASH
|
|
faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES)
|
|
sharpness = SHARP_POINTY
|
|
ai_controller = /datum/ai_controller/basic_controller/cockroach/aggro
|
|
cockroach_cell_line = CELL_LINE_TABLE_HAUBEROACH
|
|
minion_path = /mob/living/basic/cockroach/hauberoach/imperial
|
|
|
|
/mob/living/basic/cockroach/hauberoach/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/caltrop, min_damage = 10, max_damage = 15, flags = (CALTROP_BYPASS_SHOES | CALTROP_SILENT))
|
|
AddComponent( \
|
|
/datum/component/squashable, \
|
|
squash_chance = 100, \
|
|
squash_damage = 1, \
|
|
squash_flags = SQUASHED_SHOULD_BE_GIBBED|SQUASHED_ALWAYS_IF_DEAD|SQUASHED_DONT_SQUASH_IN_CONTENTS, \
|
|
squash_callback = TYPE_PROC_REF(/mob/living/basic/cockroach/hauberoach, on_squish), \
|
|
)
|
|
|
|
///Proc used to override the squashing behavior of the normal cockroach.
|
|
/mob/living/basic/cockroach/hauberoach/proc/on_squish(mob/living/cockroach, mob/living/living_target)
|
|
if(!istype(living_target))
|
|
return FALSE //We failed to run the invoke. Might be because we're a structure. Let the squashable element handle it then!
|
|
if(!HAS_TRAIT(living_target, TRAIT_PIERCEIMMUNE))
|
|
living_target.visible_message(span_danger("[living_target] steps onto [cockroach]'s spike!"), span_userdanger("You step onto [cockroach]'s spike!"))
|
|
return TRUE
|
|
living_target.visible_message(span_notice("[living_target] squashes [cockroach], not even noticing its spike."), span_notice("You squashed [cockroach], not even noticing its spike."))
|
|
return FALSE
|
|
|
|
/// Regal rat royal escort
|
|
/mob/living/basic/cockroach/hauberoach/imperial
|
|
name = "imperial hauberoach"
|
|
desc = "This cockroach seems to have found employment as a professional royal guard."
|
|
health = 2
|
|
maxHealth = 2
|
|
melee_damage_lower = 3
|
|
melee_damage_upper = 12
|
|
icon_state = "hauberoach_sewer"
|
|
minion_path = null
|
|
gold_core_spawnable = NO_SPAWN
|
|
|
|
/// Roach with a gun
|
|
/mob/living/basic/cockroach/glockroach
|
|
name = "glockroach"
|
|
desc = "HOLY SHIT, THAT COCKROACH HAS A GUN!"
|
|
icon_state = "glockroach"
|
|
melee_damage_lower = 2.5
|
|
melee_damage_upper = 10
|
|
obj_damage = 10
|
|
gold_core_spawnable = HOSTILE_SPAWN
|
|
faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES)
|
|
ai_controller = /datum/ai_controller/basic_controller/cockroach/glockroach
|
|
cockroach_cell_line = CELL_LINE_TABLE_GLOCKROACH
|
|
minion_path = /mob/living/basic/cockroach/glockroach/gang
|
|
///number of burst shots
|
|
var/burst_shots
|
|
///cooldown between attacks
|
|
var/ranged_cooldown = 1 SECONDS
|
|
|
|
/mob/living/basic/cockroach/glockroach/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(\
|
|
/datum/component/ranged_attacks,\
|
|
casing_type = /obj/item/ammo_casing/glockroach,\
|
|
burst_shots = burst_shots,\
|
|
cooldown_time = ranged_cooldown,\
|
|
)
|
|
if (ranged_cooldown <= 1 SECONDS)
|
|
AddComponent(/datum/component/ranged_mob_full_auto)
|
|
|
|
/mob/living/basic/cockroach/glockroach/set_pet_commands()
|
|
var/static/list/glockroach_commands = list(
|
|
/datum/pet_command/idle,
|
|
/datum/pet_command/free,
|
|
/datum/pet_command/protect_owner/glockroach,
|
|
/datum/pet_command/follow,
|
|
/datum/pet_command/attack/glockroach
|
|
)
|
|
minion_commands = glockroach_commands
|
|
|
|
/mob/living/basic/cockroach/glockroach/gang
|
|
name = "gangroach"
|
|
desc = "This roach grew up on the wrong side of the streets and has fallen in with the wrong crowd."
|
|
icon_state = "glockroach_sewer"
|
|
health = 2
|
|
maxHealth = 2
|
|
minion_path = null
|
|
gold_core_spawnable = NO_SPAWN
|
|
|
|
/obj/projectile/glockroachbullet
|
|
damage = 10 //same damage as a hivebot
|
|
damage_type = BRUTE
|
|
|
|
/obj/item/ammo_casing/glockroach
|
|
name = "0.9mm bullet casing"
|
|
desc = "A... 0.9mm bullet casing? What?"
|
|
projectile_type = /obj/projectile/glockroachbullet
|
|
|
|
/// Roach with an SMG
|
|
/mob/living/basic/cockroach/glockroach/mobroach
|
|
name = "mobroach"
|
|
desc = "WE'RE FUCKED, THAT COCKROACH HAS A TOMMYGUN!"
|
|
icon_state = "mobroach"
|
|
burst_shots = 4
|
|
ranged_cooldown = 2 SECONDS
|
|
minion_path = /mob/living/basic/cockroach/glockroach/mobroach/goon
|
|
|
|
ai_controller = /datum/ai_controller/basic_controller/cockroach/glockroach
|
|
|
|
/mob/living/basic/cockroach/glockroach/mobroach/goon
|
|
name = "goonroach"
|
|
desc = "You got it, boss."
|
|
icon_state = "mobroach_sewer"
|
|
health = 2
|
|
maxHealth = 2
|
|
minion_path = null
|
|
gold_core_spawnable = NO_SPAWN
|
|
|