diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm index 146a89f04f7..157a34c8ae2 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm @@ -12,6 +12,13 @@ /obj/item/shard, /turf/open/floor/plating/icemoon, /area/ruin/plasma_facility/operations) +"ak" = ( +/obj/structure/chair/sofa/left/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/general/hidden, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "ao" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -446,14 +453,6 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/ruin/plasma_facility/operations) -"gv" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/general/hidden, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "gD" = ( /obj/structure/bed{ dir = 4 @@ -662,17 +661,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/large, /area/ruin/plasma_facility/commons) -"jb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/lights/mixed{ - pixel_x = 15; - pixel_y = 14 - }, -/mob/living/simple_animal/hostile/retaliate/frog{ - name = "Peter Jr." - }, -/turf/open/floor/plating/icemoon, -/area/ruin/plasma_facility/operations) "js" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -1910,13 +1898,6 @@ /obj/machinery/light/small/broken/directional/north, /turf/open/lava/plasma/ice_moon, /area/ruin/plasma_facility/operations) -"Fs" = ( -/obj/structure/chair/sofa/left/brown{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/simple/general/hidden, -/turf/open/floor/plating/snowed/icemoon, -/area/icemoon/underground/explored) "FD" = ( /obj/structure/lattice/catwalk, /obj/structure/railing/corner, @@ -2070,6 +2051,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/icemoon, /area/ruin/plasma_facility/operations) +"IU" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/simple/general/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/explored) "Ja" = ( /obj/structure/lattice/catwalk, /obj/effect/decal/cleanable/glass, @@ -2230,6 +2219,17 @@ /obj/effect/decal/cleanable/glass, /turf/open/floor/plating/icemoon, /area/ruin/plasma_facility/operations) +"KF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/lights/mixed{ + pixel_x = 15; + pixel_y = 14 + }, +/mob/living/basic/frog{ + name = "Peter Jr." + }, +/turf/open/floor/plating/icemoon, +/area/ruin/plasma_facility/operations) "KO" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood{ @@ -2458,12 +2458,6 @@ /obj/structure/sign/warning, /turf/closed/wall, /area/icemoon/underground/explored) -"NI" = ( -/obj/machinery/computer/order_console/mining, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/broken/directional/west, -/turf/open/floor/wood/large, -/area/ruin/plasma_facility/commons) "NX" = ( /obj/structure/window/reinforced/spawner/west, /obj/structure/window/reinforced/spawner/north, @@ -2675,6 +2669,12 @@ /obj/item/screwdriver, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) +"QJ" = ( +/obj/machinery/computer/order_console/mining, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/wood/large, +/area/ruin/plasma_facility/commons) "QM" = ( /obj/structure/fence/cut/medium{ dir = 8 @@ -3667,7 +3667,7 @@ Wu zk Jy Gd -NI +QJ MU qW rF @@ -3958,7 +3958,7 @@ vt hR qW EZ -jb +KF QY rk rs @@ -4202,8 +4202,8 @@ ap Lu hr XK -Fs -gv +ak +IU Dp FD Ee diff --git a/_maps/shuttles/emergency_nature.dmm b/_maps/shuttles/emergency_nature.dmm index dd0210a6d5f..a9080d727ad 100644 --- a/_maps/shuttles/emergency_nature.dmm +++ b/_maps/shuttles/emergency_nature.dmm @@ -886,7 +886,7 @@ /area/shuttle/escape) "Iw" = ( /obj/item/reagent_containers/cup/bucket, -/mob/living/simple_animal/hostile/retaliate/frog, +/mob/living/basic/frog, /turf/open/floor/grass, /area/shuttle/escape) "Iz" = ( diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index 0ade512ca2b..b7c56ec01a9 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -48,6 +48,10 @@ emote_hear = list("squeaks.") emote_see = list("runs in a circle.", "shakes.") +/datum/ai_planning_subtree/random_speech/frog + speech_chance = 3 + emote_see = list("jumps in a circle.", "shakes.") + /datum/ai_planning_subtree/random_speech/sheep speech_chance = 5 speak = list("baaa","baaaAAAAAH!","baaah") diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm index 3aed7bb0ae3..e6edf365d9c 100644 --- a/code/game/objects/effects/spawners/random/trash.dm +++ b/code/game/objects/effects/spawners/random/trash.dm @@ -138,7 +138,7 @@ loot = list( // This spawner will scatter water related items around a moist site. /obj/item/clothing/head/cone = 7, /obj/item/clothing/suit/caution = 3, - /mob/living/simple_animal/hostile/retaliate/frog = 2, + /mob/living/basic/frog = 2, /obj/item/reagent_containers/cup/rag = 2, /obj/item/reagent_containers/cup/bucket = 2, /obj/effect/decal/cleanable/blood/old = 2, diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm similarity index 56% rename from code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm rename to code/modules/mob/living/basic/vermin/frog.dm index a3ad7aa675f..8c5e8e5a65c 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -1,18 +1,20 @@ -/mob/living/simple_animal/hostile/retaliate/frog +/mob/living/basic/frog name = "frog" desc = "They seem a little sad." icon_state = "frog" icon_living = "frog" icon_dead = "frog_dead" mob_biotypes = MOB_ORGANIC|MOB_BEAST - speak = list("ribbit","croak") - emote_see = list("hops in a circle.", "shakes.") - speak_chance = 1 - turns_per_move = 5 + verb_say = "ribbits" + verb_ask = "ribbits inquisitively" + verb_exclaim = "croaks" + verb_yell = "croaks loudly" maxHealth = 15 health = 15 + speed = 1.1 melee_damage_lower = 5 melee_damage_upper = 5 + obj_damage = 10 attack_verb_continuous = "bites" attack_verb_simple = "bite" response_help_continuous = "pets" @@ -32,13 +34,18 @@ held_w_class = WEIGHT_CLASS_TINY worn_slot_flags = ITEM_SLOT_HEAD head_icon = 'icons/mob/clothing/head/pets_head.dmi' + + habitable_atmos = list("min_oxy" = 3, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 15, "min_co2" = 0, "max_co2" = 15, "min_n2" = 0, "max_n2" = 0) + + ai_controller = /datum/ai_controller/basic_controller/frog + var/stepped_sound = 'sound/effects/huuu.ogg' ///How much of a reagent the mob injects on attack var/poison_per_bite = 3 ///What reagent the mob injects targets with var/poison_type = /datum/reagent/drug/space_drugs -/mob/living/simple_animal/hostile/retaliate/frog/Initialize(mapload) +/mob/living/basic/frog/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) @@ -57,15 +64,40 @@ ) AddElement(/datum/element/connect_loc, loc_connections) AddElement(/datum/element/venomous, poison_type, poison_per_bite) - add_cell_sample() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_FROG, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) -/mob/living/simple_animal/hostile/retaliate/frog/proc/on_entered(datum/source, AM as mob|obj) +/mob/living/basic/frog/proc/on_entered(datum/source, AM as mob|obj) SIGNAL_HANDLER if(!stat && isliving(AM)) var/mob/living/L = AM if(L.mob_size > MOB_SIZE_TINY) playsound(src, stepped_sound, 50, TRUE) -/mob/living/simple_animal/hostile/retaliate/frog/add_cell_sample() - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_FROG, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) +/datum/ai_controller/basic_controller/frog + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(), + BB_PET_TARGETTING_DATUM = new /datum/targetting_datum/not_friends(), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/random_speech/frog, + /datum/ai_planning_subtree/basic_melee_attack_subtree/frog, + ) + +/datum/ai_planning_subtree/basic_melee_attack_subtree/frog + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/frog + +/datum/ai_behavior/basic_melee_attack/frog + action_cooldown = 2.5 SECONDS + +/datum/ai_controller/basic_controller/frog/trash + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/random_speech/frog, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree/frog, + ) diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index c066097c3c3..4b652b5cc31 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -297,7 +297,7 @@ return var/uplifted_frog = FALSE - for (var/mob/living/simple_animal/hostile/retaliate/frog/nearby_frog in oview(owner, range)) + for (var/mob/living/basic/frog/nearby_frog in oview(owner, range)) uplifted_frog = convert_frog(nearby_frog, converted_check_list) || uplifted_frog if (uplifted_frog) owner.visible_message(span_warning("[owner] commands their army to action, mutating them into trash frogs!")) @@ -312,7 +312,7 @@ /// Makes a passed mob into our minion /datum/action/cooldown/riot/proc/make_minion(mob/living/new_minion, minion_desc, list/command_list = mouse_commands) - if (isbasicmob(new_minion)) // One day this will work for frogs too + if (isbasicmob(new_minion)) new_minion.AddComponent(/datum/component/obeys_commands, command_list) new_minion.befriend(owner) new_minion.faction = owner.faction.Copy() @@ -369,11 +369,12 @@ return TRUE /// Turns a frog into a crazy frog. This doesn't do anything interesting and should when it becomes a basic mob. -/datum/action/cooldown/riot/proc/convert_frog(mob/living/simple_animal/hostile/retaliate/frog/nearby_frog, list/converted_check_list) +/datum/action/cooldown/riot/proc/convert_frog(mob/living/basic/frog/nearby_frog, list/converted_check_list) // No need to convert when not on the same team. - if(faction_check(nearby_frog.faction, converted_check_list)) + if(faction_check(nearby_frog.faction, converted_check_list) || nearby_frog.stat == DEAD) return FALSE + var/list/minion_commands = mouse_commands if (!findtext(nearby_frog.name, "trash")) nearby_frog.name = replacetext(nearby_frog.name, "frog", "trash frog") @@ -384,8 +385,10 @@ nearby_frog.health += 10 nearby_frog.melee_damage_lower += 1 nearby_frog.melee_damage_upper += 5 + nearby_frog.obj_damage += 10 + nearby_frog.ai_controller = new /datum/ai_controller/basic_controller/frog/trash(nearby_frog) var/crazy_frog_desc = " ...[findtext(nearby_frog.name, "rare") ? "even though" : "perhaps because"] they live in a trash bag." - make_minion(nearby_frog, crazy_frog_desc) + make_minion(nearby_frog, crazy_frog_desc, minion_commands) return TRUE // Command you can give to a mouse to make it kill someone diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index 0b3cf60d648..68b9a984f67 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -581,7 +581,7 @@ /datum/reagent/toxin = -1) virus_suspectibility = 0.5 - resulting_atoms = list(/mob/living/simple_animal/hostile/retaliate/frog = 1) + resulting_atoms = list(/mob/living/basic/frog = 1) /datum/micro_organism/cell_line/walking_mushroom desc = "motile fungal hyphae" diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 0381ac5c61e..377593c4fb5 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -284,7 +284,6 @@ /mob/living/simple_animal/hostile/retaliate/clown/mutant, /mob/living/simple_animal/hostile/retaliate/clown/mutant/glutton, /mob/living/simple_animal/hostile/retaliate/clown/mutant/slow, - /mob/living/simple_animal/hostile/retaliate/frog, /mob/living/simple_animal/hostile/retaliate/ghost, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/hostile/retaliate/goose, diff --git a/tgstation.dme b/tgstation.dme index 11feb9426b2..8fdc98770d5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3703,6 +3703,7 @@ #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" #include "code\modules\mob\living\basic\vermin\axolotl.dm" #include "code\modules\mob\living\basic\vermin\cockroach.dm" +#include "code\modules\mob\living\basic\vermin\frog.dm" #include "code\modules\mob\living\basic\vermin\mothroach.dm" #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\brain\brain.dm" @@ -3980,7 +3981,6 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\ghost.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\spaceman.dm" diff --git a/tools/UpdatePaths/Scripts/72044_replace_frog.txt b/tools/UpdatePaths/Scripts/72044_replace_frog.txt new file mode 100644 index 00000000000..e0fd22a1b9e --- /dev/null +++ b/tools/UpdatePaths/Scripts/72044_replace_frog.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/hostile/retaliate/frog : /mob/living/basic/frog{@OLD}