mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Regal Rat - Maint Creatures DLC Update (#71343)
## About The Pull Request The regal rat can now convert frogs and cockroaches to their army. They also will not attack each other with the new maintenance creature faction. BirdBoat has also been added to this faction since he also naturally appears in the maintenance. ## Why It's Good For The Game Make sure to avoid stepping on the cockroaches. They do have one extra health though.  ## Changelog 🆑 add: Frogs and cockroaches can now be converted to the regal rats army. fix: Converted rat do not attack mouses anymore. imageadd: New sewer cockroach and trash frog sprites /🆑
This commit is contained in:
@@ -3,3 +3,5 @@
|
||||
|
||||
#define FACTION_CLOWN "Clowns"
|
||||
#define FACTION_RAT "Rats"
|
||||
// Maint creatures have mutual respect for eachother.
|
||||
#define FACTION_MAINT_CREATURES "Maint_Creatures"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
speak_emote = list("chitters")
|
||||
|
||||
basic_mob_flags = DEL_ON_DEATH
|
||||
faction = list("hostile")
|
||||
faction = list("hostile", FACTION_MAINT_CREATURES)
|
||||
|
||||
ai_controller = /datum/ai_controller/basic_controller/cockroach
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
melee_damage_upper = 10
|
||||
obj_damage = 10
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
faction = list("hostile")
|
||||
faction = list("hostile", FACTION_MAINT_CREATURES)
|
||||
ai_controller = /datum/ai_controller/basic_controller/cockroach/glockroach
|
||||
cockroach_cell_line = CELL_LINE_TABLE_GLOCKROACH
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_SLASH
|
||||
faction = list("hostile")
|
||||
faction = list("hostile", FACTION_MAINT_CREATURES)
|
||||
sharpness = SHARP_POINTY
|
||||
ai_controller = /datum/ai_controller/basic_controller/cockroach/hauberoach
|
||||
cockroach_cell_line = CELL_LINE_TABLE_HAUBEROACH
|
||||
@@ -144,3 +144,17 @@
|
||||
|
||||
/datum/ai_behavior/basic_melee_attack/hauberoach //Slightly slower, as this is being made in feature freeze ;)
|
||||
action_cooldown = 1 SECONDS
|
||||
|
||||
/datum/ai_controller/basic_controller/cockroach/sewer
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/sewer,
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
)
|
||||
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/sewer
|
||||
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/sewer
|
||||
|
||||
/datum/ai_behavior/basic_melee_attack/sewer
|
||||
action_cooldown = 0.8 SECONDS
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
held_w_class = WEIGHT_CLASS_TINY
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
faction = list(FACTION_RAT)
|
||||
faction = list(FACTION_RAT, FACTION_MAINT_CREATURES)
|
||||
butcher_results = list(/obj/item/food/meat/slab/mouse = 1)
|
||||
|
||||
speak_emote = list("squeaks")
|
||||
@@ -345,7 +345,7 @@
|
||||
/// AI controller for rats, slightly more complex than mice becuase they attack people
|
||||
/datum/ai_controller/basic_controller/mouse/rat
|
||||
blackboard = list(
|
||||
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/rat(),
|
||||
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(),
|
||||
BB_BASIC_MOB_CURRENT_TARGET = null, // heathen
|
||||
BB_CURRENT_HUNTING_TARGET = null, // cheese
|
||||
BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable
|
||||
@@ -367,6 +367,3 @@
|
||||
|
||||
/datum/ai_behavior/basic_melee_attack/rat
|
||||
action_cooldown = 2 SECONDS
|
||||
|
||||
/datum/targetting_datum/basic/rat
|
||||
check_factions_exactly = TRUE
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
response_disarm_simple = "gently push aside"
|
||||
response_harm_continuous = "kicks"
|
||||
response_harm_simple = "kick"
|
||||
faction = list("neutral", FACTION_MAINT_CREATURES)
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
random_retaliate = FALSE
|
||||
var/vomiting = FALSE
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_CLAW
|
||||
unique_name = TRUE
|
||||
faction = list(FACTION_RAT)
|
||||
faction = list(FACTION_RAT, FACTION_MAINT_CREATURES)
|
||||
///Whether or not the regal rat is already opening an airlock
|
||||
var/opening_airlock = FALSE
|
||||
///The spell that the rat uses to generate miasma
|
||||
@@ -257,35 +257,100 @@
|
||||
/datum/action/cooldown/riot/proc/riot()
|
||||
var/cap = CONFIG_GET(number/ratcap)
|
||||
var/uplifted_mice = FALSE
|
||||
for(var/mob/living/basic/mouse/nearby_mouse in oview(owner, 5))
|
||||
// This mouse is already rat controlled, let's not bother with it.
|
||||
if(istype(nearby_mouse.ai_controller, /datum/ai_controller/basic_controller/mouse/rat))
|
||||
var/uplifted_frog = FALSE
|
||||
var/uplifted_roach = FALSE
|
||||
var/list/converted_check_list = list(FACTION_RAT)
|
||||
for(var/mob/living/simple_animal/hostile/retaliate/frog/nearby_frog in oview(owner, 5))
|
||||
// No need to convert when not on the same team.
|
||||
if(faction_check(nearby_frog.faction, converted_check_list))
|
||||
continue
|
||||
var/mob/living/basic/mouse/rat/rat_path = /mob/living/basic/mouse/rat
|
||||
|
||||
// Buffs our combat stats to that of a rat
|
||||
nearby_mouse.melee_damage_lower = initial(rat_path.melee_damage_lower)
|
||||
nearby_mouse.melee_damage_upper = initial(rat_path.melee_damage_upper)
|
||||
nearby_mouse.obj_damage = initial(rat_path.obj_damage)
|
||||
nearby_mouse.maxHealth = initial(rat_path.maxHealth)
|
||||
nearby_mouse.health = initial(rat_path.health)
|
||||
// Replace our AI with a rat one
|
||||
nearby_mouse.ai_controller = new /datum/ai_controller/basic_controller/mouse/rat(nearby_mouse)
|
||||
// Give a hint in description too
|
||||
nearby_mouse.desc += " ...Except this one looks corrupted and aggressive."
|
||||
// Now we share factions!
|
||||
nearby_mouse.faction = owner.faction.Copy()
|
||||
uplifted_mice = TRUE
|
||||
|
||||
if(uplifted_mice)
|
||||
owner.visible_message(span_warning("[owner] commands their army to action, mutating them into rats!"))
|
||||
|
||||
else if(LAZYLEN(SSmobs.cheeserats) < cap)
|
||||
new /mob/living/basic/mouse(owner.loc)
|
||||
owner.visible_message(span_warning("[owner] commands a rat to their side!"))
|
||||
if(nearby_frog.name == "frog")
|
||||
nearby_frog.name = "trash frog"
|
||||
nearby_frog.icon_state += "_trash"
|
||||
nearby_frog.icon_living += "_trash"
|
||||
nearby_frog.icon_dead = nearby_frog.icon_state + "_dead"
|
||||
else if(nearby_frog.name == "rare frog")
|
||||
nearby_frog.name = "rare trash frog"
|
||||
nearby_frog.icon_state += "_trash"
|
||||
nearby_frog.icon_living += "_trash"
|
||||
nearby_frog.icon_dead = nearby_frog.icon_state + "_dead"
|
||||
nearby_frog.desc += " ...Except this one lives in a trash bag."
|
||||
nearby_frog.maxHealth += 10
|
||||
nearby_frog.health += 10
|
||||
nearby_frog.melee_damage_lower += 1
|
||||
nearby_frog.melee_damage_upper += 5
|
||||
nearby_frog.faction = owner.faction.Copy()
|
||||
uplifted_frog = TRUE
|
||||
break
|
||||
|
||||
if(uplifted_frog)
|
||||
owner.visible_message(span_warning("[owner] commands their army to action, mutating them trash frogs!"))
|
||||
else
|
||||
to_chat(owner,span_warning("There's too many mice on this station to beckon a new one! Find them first!"))
|
||||
for(var/mob/living/basic/cockroach/nearby_roach in oview(owner, 5))
|
||||
// No need to convert when not on the same team.
|
||||
if(faction_check(nearby_roach.faction, converted_check_list))
|
||||
continue
|
||||
if(istype(nearby_roach, /mob/living/basic/cockroach/glockroach))
|
||||
if(nearby_roach.name == "glockroach")
|
||||
nearby_roach.name = "sewer glockroach"
|
||||
nearby_roach.melee_damage_lower += 0.5
|
||||
nearby_roach.melee_damage_upper += 2
|
||||
else if(istype(nearby_roach, /mob/living/basic/cockroach/hauberoach))
|
||||
if(nearby_roach.name == "hauberoach")
|
||||
nearby_roach.name = "sewer hauberoach"
|
||||
nearby_roach.melee_damage_lower += 0.5
|
||||
nearby_roach.melee_damage_upper += 2
|
||||
else
|
||||
if(nearby_roach.name == "cockroach")
|
||||
nearby_roach.name = "sewer cockroach"
|
||||
nearby_roach.melee_damage_lower += 2
|
||||
nearby_roach.melee_damage_upper += 4
|
||||
nearby_roach.obj_damage += 5
|
||||
nearby_roach.ai_controller = new /datum/ai_controller/basic_controller/cockroach/sewer(nearby_roach)
|
||||
nearby_roach.desc += " ...Except this one looks very robust."
|
||||
nearby_roach.icon_state += "_sewer"
|
||||
nearby_roach.maxHealth += 1
|
||||
nearby_roach.health += 1
|
||||
nearby_roach.faction = owner.faction.Copy()
|
||||
uplifted_roach = TRUE
|
||||
break
|
||||
|
||||
if(uplifted_roach)
|
||||
owner.visible_message(span_warning("[owner] commands their army to action, mutating them into sewer roaches!"))
|
||||
else if(!uplifted_frog)
|
||||
for(var/mob/living/basic/mouse/nearby_mouse in oview(owner, 5))
|
||||
// This mouse is already rat controlled, let's not bother with it.
|
||||
if(istype(nearby_mouse.ai_controller, /datum/ai_controller/basic_controller/mouse/rat))
|
||||
continue
|
||||
var/mob/living/basic/mouse/rat/rat_path = /mob/living/basic/mouse/rat
|
||||
|
||||
// Change name
|
||||
if(nearby_mouse.name == "mouse")
|
||||
nearby_mouse.name = initial(rat_path.name)
|
||||
// Buffs our combat stats to that of a rat
|
||||
nearby_mouse.melee_damage_lower = initial(rat_path.melee_damage_lower)
|
||||
nearby_mouse.melee_damage_upper = initial(rat_path.melee_damage_upper)
|
||||
nearby_mouse.obj_damage = initial(rat_path.obj_damage)
|
||||
nearby_mouse.maxHealth = initial(rat_path.maxHealth)
|
||||
nearby_mouse.health = initial(rat_path.health)
|
||||
// Replace our AI with a rat one
|
||||
nearby_mouse.ai_controller = new /datum/ai_controller/basic_controller/mouse/rat(nearby_mouse)
|
||||
// Give a hint in description too
|
||||
nearby_mouse.desc += " ...Except this one looks corrupted and aggressive."
|
||||
// Now we share factions!
|
||||
nearby_mouse.faction = owner.faction.Copy()
|
||||
uplifted_mice = TRUE
|
||||
break
|
||||
|
||||
if(uplifted_mice)
|
||||
owner.visible_message(span_warning("[owner] commands their army to action, mutating them into rats!"))
|
||||
|
||||
else if(LAZYLEN(SSmobs.cheeserats) < cap)
|
||||
new /mob/living/basic/mouse(owner.loc)
|
||||
owner.visible_message(span_warning("[owner] commands a rat to their side!"))
|
||||
|
||||
else
|
||||
to_chat(owner,span_warning("There's too many mice on this station to beckon a new one! Find them first!"))
|
||||
|
||||
StartCooldown()
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
response_harm_continuous = "splats"
|
||||
response_harm_simple = "splat"
|
||||
density = FALSE
|
||||
faction = list("hostile")
|
||||
faction = list("hostile", FACTION_MAINT_CREATURES)
|
||||
attack_sound = 'sound/effects/reee.ogg'
|
||||
butcher_results = list(/obj/item/food/nugget = 1)
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 243 KiB |
Reference in New Issue
Block a user