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.

![promo](https://user-images.githubusercontent.com/25363960/202822758-f611f861-596a-4850-8279-af0bac9e3d0f.PNG)
## 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:
Comxy
2022-12-02 18:43:12 -08:00
committed by GitHub
parent 54602b43ea
commit 4c8597b2cd
8 changed files with 115 additions and 36 deletions
+2
View File
@@ -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