diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm index 8c61e4ae817..157eaf3cd50 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm @@ -21,7 +21,7 @@ /turf/simulated/floor/engine/cult, /area/ruin/powered/fountain_hall) "g" = ( -/mob/living/simple_animal/butterfly, +/mob/living/basic/butterfly, /turf/simulated/floor/engine/cult, /area/ruin/powered/fountain_hall) "h" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_nt.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_nt.dmm index dd4974cdeed..55818f95163 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_nt.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_nt.dmm @@ -2710,7 +2710,7 @@ /obj/structure/railing, /obj/effect/decal/cleanable/dirt, /obj/structure/bed/dogbed/brad, -/mob/living/simple_animal/cockroach/brad, +/mob/living/basic/cockroach/brad, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/lava/mapping_lava, /area/lavaland/surface/outdoors/outpost/catwalk) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index 631dfa60e31..c5e6135b77e 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -31,7 +31,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "et" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "ez" = ( @@ -296,7 +296,7 @@ /turf/template_noop, /area/template_noop) "VL" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm index 7fd9fc9f35a..7277cfc6a9f 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm @@ -10929,7 +10929,7 @@ }, /area/ruin/space/moonbase19) "Sp" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) "Sq" = ( @@ -12574,7 +12574,7 @@ /area/ruin/space/moonbase19) "ZK" = ( /obj/machinery/light/small, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) "ZL" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm index 4ce36fd5684..e9985212a92 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm @@ -875,7 +875,7 @@ icon_state = "1-2" }, /obj/structure/bed/dogbed, -/mob/living/simple_animal/bunny/syndi, +/mob/living/basic/bunny/syndi, /turf/simulated/floor/engine, /area/ruin/space/syndicakefactory) "Ho" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/unathi_skiff.dmm b/_maps/map_files/RandomRuins/SpaceRuins/unathi_skiff.dmm index b60a1441348..656a7f78516 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/unathi_skiff.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/unathi_skiff.dmm @@ -221,7 +221,7 @@ /turf/simulated/floor/plasteel/airless, /area/ruin/space/unathi_breacher/engineering) "ri" = ( -/mob/living/simple_animal/lizard{ +/mob/living/basic/lizard{ name = "Lil' Fella" }, /obj/structure/cable{ diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index db8daf0aed2..bb99edfcd92 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -4815,7 +4815,7 @@ }, /area/ruin/space/derelict/hallway/primary) "mZ" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plasteel{ icon_state = "bar" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm index e7919193839..c581443c2a9 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm @@ -623,7 +623,7 @@ /area/ruin/space/wreck_cargoship) "yG" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/retaliate/poison/snake{ +/mob/living/basic/snake{ name = "Rattlesnake Hardie"; desc = "A relatively menacing looking snake. Despite their intimidating look, they have cute collar attached to their neck. You can't help but think that name sounds familiar from somewhere." }, diff --git a/_maps/map_files/shuttles/emergency_jungle.dmm b/_maps/map_files/shuttles/emergency_jungle.dmm index f27d81b7ad0..fb69b98dc65 100644 --- a/_maps/map_files/shuttles/emergency_jungle.dmm +++ b/_maps/map_files/shuttles/emergency_jungle.dmm @@ -264,7 +264,7 @@ /area/shuttle/escape) "bn" = ( /obj/structure/flora/junglebush, -/mob/living/simple_animal/hostile/retaliate/poison/snake, +/mob/living/basic/snake, /turf/simulated/floor/grass, /area/shuttle/escape) "bo" = ( @@ -546,7 +546,7 @@ pixel_x = 28 }, /obj/structure/flora/junglebush, -/mob/living/simple_animal/hostile/retaliate/poison/snake, +/mob/living/basic/snake, /turf/simulated/floor/grass, /area/shuttle/escape) "cu" = ( @@ -739,12 +739,12 @@ /area/shuttle/escape) "xd" = ( /obj/structure/flora/junglebush, -/mob/living/simple_animal/hostile/retaliate/poison/snake, +/mob/living/basic/snake, /obj/machinery/light/small, /turf/simulated/floor/grass, /area/shuttle/escape) "Av" = ( -/mob/living/simple_animal/bunny, +/mob/living/basic/bunny, /turf/simulated/floor/grass, /area/shuttle/escape) "BA" = ( @@ -799,7 +799,7 @@ /obj/structure/chair/sofa/bamboo{ dir = 8 }, -/mob/living/simple_animal/bunny, +/mob/living/basic/bunny, /turf/simulated/floor/grass, /area/shuttle/escape) "LW" = ( @@ -843,7 +843,7 @@ /area/shuttle/escape) "SO" = ( /obj/structure/flora/grass/jungle, -/mob/living/simple_animal/hostile/retaliate/poison/snake, +/mob/living/basic/snake, /turf/simulated/floor/grass, /area/shuttle/escape) "TY" = ( diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index a6b8958bf14..e0306dbfd9d 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -2538,7 +2538,7 @@ /area/station/command/office/hos) "akL" = ( /obj/structure/flora/rock/jungle, -/mob/living/simple_animal/lizard{ +/mob/living/basic/lizard{ name = "Greentext" }, /turf/simulated/floor/grass, @@ -46980,7 +46980,7 @@ /turf/simulated/floor/wood, /area/station/maintenance/aft) "dvv" = ( -/mob/living/simple_animal/pet/sloth/paperwork, +/mob/living/basic/pet/sloth/paperwork, /turf/simulated/floor/carpet, /area/station/legal/lawoffice) "dvD" = ( @@ -63294,7 +63294,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "lpS" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/maintenance/asmaint2) "lqc" = ( @@ -87490,7 +87490,7 @@ /turf/simulated/floor/wood, /area/station/command/office/ntrep) "xtZ" = ( -/mob/living/simple_animal/pet/penguin/baby, +/mob/living/basic/pet/penguin/baby, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "xuw" = ( @@ -88416,7 +88416,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/mob/living/simple_animal/lizard/wags_his_tail, +/mob/living/basic/lizard/wags_his_tail, /turf/simulated/floor/plasteel, /area/station/service/janitor) "xPE" = ( diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index 6e5e7932093..513b0a3f8df 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -23075,7 +23075,7 @@ }, /area/station/security/permabrig) "drC" = ( -/mob/living/simple_animal/hostile/retaliate/poison/snake{ +/mob/living/basic/snake{ name = "Sssylvester" }, /turf/simulated/floor/plasteel{ @@ -24008,7 +24008,7 @@ }, /area/station/medical/virology) "dzO" = ( -/mob/living/simple_animal/pet/sloth/paperwork, +/mob/living/basic/pet/sloth/paperwork, /obj/structure/bed/dogbed{ name = "Paperwork's bed" }, @@ -24620,7 +24620,7 @@ }, /area/station/command/office/rd) "dGz" = ( -/mob/living/simple_animal/butterfly, +/mob/living/basic/butterfly, /turf/simulated/floor/grass/jungle, /area/station/hallway/secondary/garden) "dGH" = ( @@ -36807,7 +36807,7 @@ /area/station/engineering/atmos) "gtD" = ( /obj/structure/bed/dogbed, -/mob/living/simple_animal/pet/penguin/baby, +/mob/living/basic/pet/penguin/baby, /obj/effect/mapping_helpers/turfs/damage, /turf/simulated/floor/wood, /area/station/maintenance/starboard) @@ -50940,7 +50940,7 @@ dir = 4 }, /obj/machinery/hologram/holopad, -/mob/living/simple_animal/lizard/wags_his_tail, +/mob/living/basic/lizard/wags_his_tail, /turf/simulated/floor/plasteel, /area/station/service/janitor) "jso" = ( @@ -103621,7 +103621,7 @@ }, /area/station/maintenance/port2) "uGG" = ( -/mob/living/simple_animal/lizard, +/mob/living/basic/lizard, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fore2) "uGM" = ( @@ -105002,7 +105002,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/misc_lab) "uWB" = ( -/mob/living/simple_animal/bunny{ +/mob/living/basic/bunny{ desc = "It's Spaghetti, the official bnuy of Atmospherics. Appropriately named after the jumbled mess of piping."; name = "Spaghetti" }, @@ -108124,7 +108124,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/lizard{ +/mob/living/basic/lizard{ name = "Greentext" }, /turf/simulated/floor/plasteel, diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index df1be429c0c..87788c92ce0 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -5499,7 +5499,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/disposal) "azk" = ( -/mob/living/simple_animal/lizard/wags_his_tail, +/mob/living/basic/lizard/wags_his_tail, /turf/simulated/floor/plasteel, /area/station/service/janitor) "azl" = ( @@ -27685,7 +27685,7 @@ /turf/simulated/floor/plasteel/grimy, /area/station/legal/lawoffice) "ccv" = ( -/mob/living/simple_animal/pet/sloth/paperwork, +/mob/living/basic/pet/sloth/paperwork, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index 303dbeb9a4d..6f45bc86a31 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -3624,7 +3624,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/mob/living/simple_animal/lizard/wags_his_tail, +/mob/living/basic/lizard/wags_his_tail, /turf/simulated/floor/plasteel, /area/station/service/janitor) "aNu" = ( @@ -37624,7 +37624,7 @@ /turf/simulated/floor/plasteel, /area/station/maintenance/starboard) "hxa" = ( -/mob/living/simple_animal/lizard{ +/mob/living/basic/lizard{ name = "Greentext" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -45709,7 +45709,7 @@ }, /area/station/turret_protected/ai) "jbt" = ( -/mob/living/simple_animal/pet/sloth/paperwork, +/mob/living/basic/pet/sloth/paperwork, /obj/structure/bed/dogbed, /obj/item/radio/intercom{ name = "south bump"; @@ -46420,7 +46420,7 @@ /turf/simulated/floor/wood, /area/station/maintenance/dorms/starboard) "jjT" = ( -/mob/living/simple_animal/bunny, +/mob/living/basic/bunny, /obj/structure/railing{ dir = 6 }, @@ -55305,7 +55305,7 @@ /obj/machinery/atmospherics/binary/valve{ dir = 4 }, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/blood/maybe, /obj/machinery/light/small, @@ -69058,7 +69058,7 @@ /area/station/aisat/hall) "nMY" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/maintenance/apmaint2) "nNc" = ( @@ -77334,7 +77334,7 @@ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; name = "old sink" }, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/effect/spawner/random/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -82840,7 +82840,7 @@ /obj/effect/turf_decal{ dir = 8 }, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/apmaint2) @@ -91273,7 +91273,7 @@ /turf/simulated/floor/grass, /area/station/public/park) "sfv" = ( -/mob/living/simple_animal/bunny, +/mob/living/basic/bunny, /obj/structure/flora/ausbushes/brflowers, /obj/machinery/status_display{ name = "cargo display"; @@ -93190,7 +93190,7 @@ /area/station/engineering/atmos) "szh" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "szl" = ( @@ -96210,7 +96210,7 @@ }, /area/station/security/storage) "teq" = ( -/mob/living/simple_animal/lizard{ +/mob/living/basic/lizard{ name = "Valid" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -113234,7 +113234,7 @@ }, /area/station/science/genetics) "wxT" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -113293,7 +113293,7 @@ /area/station/engineering/hardsuitstorage) "wyS" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "wyU" = ( @@ -119636,7 +119636,7 @@ "xPt" = ( /obj/effect/spawner/random/blood/maybe, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plasteel{ icon_state = "red" }, diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index 23f583b9a87..1842a9450ab 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -33124,7 +33124,7 @@ }, /area/station/hallway/supply/port) "dre" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/maintenance/theatre) "drL" = ( @@ -53571,7 +53571,7 @@ }, /area/station/command/office/cmo) "kKp" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /turf/simulated/floor/plating, /area/station/supply/warehouse) "kLd" = ( @@ -56395,7 +56395,7 @@ }, /area/station/hallway/primary/aft/south) "lIe" = ( -/mob/living/simple_animal/cockroach, +/mob/living/basic/cockroach, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -76007,7 +76007,7 @@ }, /area/station/engineering/equipmentstorage) "sMM" = ( -/mob/living/simple_animal/pet/sloth/paperwork, +/mob/living/basic/pet/sloth/paperwork, /turf/simulated/floor/carpet, /area/station/legal/lawoffice) "sMZ" = ( @@ -88908,7 +88908,7 @@ /area/shuttle/arrival/station) "xBG" = ( /obj/effect/spawner/random/dirt/often, -/mob/living/simple_animal/lizard/wags_his_tail, +/mob/living/basic/lizard/wags_his_tail, /turf/simulated/floor/plasteel, /area/station/service/janitor) "xBX" = ( diff --git a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm index e0762fccde5..9c8db806551 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/flee_target.dm @@ -23,3 +23,9 @@ if(controller.blackboard[BB_BASIC_MOB_STOP_FLEEING] || QDELETED(flee_from)) return FALSE return TRUE + +/// Try to escape from your current target, without performing any other actions. +/// Reads from some fleeing-specific targeting keys rather than the current mob target. +/datum/ai_planning_subtree/flee_target/from_flee_key + target_key = BB_BASIC_MOB_FLEE_TARGET + hiding_place_key = BB_BASIC_MOB_FLEE_TARGET_HIDING_LOCATION diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm index b91ac32b1ed..c5c97033116 100644 --- a/code/datums/diseases/anxiety.dm +++ b/code/datums/diseases/anxiety.dm @@ -38,13 +38,13 @@ affected_mob.visible_message("[affected_mob] coughs up butterflies!", \ "You cough up butterflies!") for(var/i in 1 to 2) - var/mob/living/simple_animal/butterfly/B = new(affected_mob.loc) - addtimer(CALLBACK(B, TYPE_PROC_REF(/mob/living/simple_animal/butterfly, decompose)), rand(5, 25) SECONDS) + var/mob/living/basic/butterfly/B = new(affected_mob.loc) + addtimer(CALLBACK(B, TYPE_PROC_REF(/mob/living/basic/butterfly, decompose)), rand(5, 25) SECONDS) /** * Made so severe anxiety does not overload the SSmob while keeping it's effect */ -/mob/living/simple_animal/butterfly/proc/decompose() +/mob/living/basic/butterfly/proc/decompose() visible_message("[src] decomposes due to being outside of its original habitat for too long!", "You decompose for being too long out of your habitat!") melt() diff --git a/code/datums/keybindings/emote_keybinds.dm b/code/datums/keybindings/emote_keybinds.dm index 8f2ebf8f099..bde88ae0da9 100644 --- a/code/datums/keybindings/emote_keybinds.dm +++ b/code/datums/keybindings/emote_keybinds.dm @@ -683,6 +683,10 @@ /datum/keybinding/emote/simple_animal/pet/cat/can_use(client/C, mob/M) return iscat(M) && ..() +/datum/keybinding/emote/simple_animal/lizard/whicker + linked_emote = /datum/emote/lizard/whicker + name = "Whicker (Lizard)" + /datum/keybinding/custom category = KB_CATEGORY_EMOTE_CUSTOM var/default_emote_text = "Insert custom me emote text." diff --git a/code/datums/spell_targeting/matter_eater_targeting.dm b/code/datums/spell_targeting/matter_eater_targeting.dm index 74868a289ce..a44d3b152b6 100644 --- a/code/datums/spell_targeting/matter_eater_targeting.dm +++ b/code/datums/spell_targeting/matter_eater_targeting.dm @@ -16,7 +16,7 @@ /mob/living/simple_animal/slime, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, - /mob/living/simple_animal/lizard, + /mob/living/basic/lizard, /mob/living/basic/cow, /mob/living/simple_animal/spiderbot ) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 115044e016b..0d5f225e486 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -355,7 +355,7 @@ return owner.visible_message("[owner]'s soul is absorbed into the rod, relieving the previous snake of its duty.") - var/mob/living/simple_animal/hostile/retaliate/poison/snake/healSnake = new(owner.loc) + var/mob/living/basic/snake/healSnake = new(owner.loc) var/list/chems = list("bicaridine", "perfluorodecalin", "kelotane") healSnake.poison_type = pick(chems) healSnake.name = "Asclepius's Snake" diff --git a/code/game/objects/items/weapons/melee/melee_misc.dm b/code/game/objects/items/weapons/melee/melee_misc.dm index 517fbabafff..b81fb4d0977 100644 --- a/code/game/objects/items/weapons/melee/melee_misc.dm +++ b/code/game/objects/items/weapons/melee/melee_misc.dm @@ -55,8 +55,8 @@ . = ..() strong_against = typecacheof(list( /mob/living/simple_animal/hostile/poison/bees/, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/cockroach, + /mob/living/basic/butterfly, + /mob/living/basic/cockroach, /obj/item/queen_bee)) strong_against -= /mob/living/simple_animal/hostile/poison/bees/syndi // Syndi-bees have special anti-flyswatter tech installed diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index 6b4511a0b0d..8c330c5b57f 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -57,7 +57,7 @@ /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/pet/dog/fox, - /mob/living/simple_animal/bunny) + /mob/living/basic/bunny) /obj/structure/closet/critter/corgi name = "corgi crate" @@ -108,7 +108,7 @@ /obj/structure/closet/critter/butterfly name = "butterfly crate" - content_mob = /mob/living/simple_animal/butterfly + content_mob = /mob/living/basic/butterfly /obj/structure/closet/critter/nian_caterpillar name = "nian caterpillar crate" @@ -120,7 +120,7 @@ /obj/structure/closet/critter/bunny name = "bunny crate" - content_mob = /mob/living/simple_animal/bunny + content_mob = /mob/living/basic/bunny /obj/structure/closet/critter/gorilla name = "gorilla crate" diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index e0067923b7a..7ddea7436b6 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -57,7 +57,7 @@ max_number = 12 vermstring = "mice" if(VERM_LIZARDS) - spawn_types = list(/mob/living/simple_animal/lizard) + spawn_types = list(/mob/living/basic/lizard) max_number = 6 vermstring = "lizards" if(VERM_SPIDERS) diff --git a/code/modules/mob/living/basic/basic_emotes.dm b/code/modules/mob/living/basic/basic_emotes.dm new file mode 100644 index 00000000000..adf4bab9211 --- /dev/null +++ b/code/modules/mob/living/basic/basic_emotes.dm @@ -0,0 +1,8 @@ +/datum/emote/lizard + mob_type_allowed_typecache = /mob/living/basic/lizard + mob_type_blacklist_typecache = list() + +/datum/emote/lizard/whicker + key = "tongue" + message = "sticks its tongue out contentedly!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE diff --git a/code/modules/mob/living/basic/basic_mob.dm b/code/modules/mob/living/basic/basic_mob.dm index 37a0859c706..2376cdba275 100644 --- a/code/modules/mob/living/basic/basic_mob.dm +++ b/code/modules/mob/living/basic/basic_mob.dm @@ -175,6 +175,9 @@ RESTRICT_TYPE(/mob/living/basic) apply_temperature_requirements() if(step_type) AddComponent(/datum/component/footstep, step_type) + if(can_hide) + var/datum/action/innate/hide/hide = new() + hide.Grant(src) if(is_ranged) AddComponent(/datum/component/ranged_attacks, projectile_type = projectile_type, projectile_sound = projectile_sound, burst_shots = ranged_burst_count, burst_intervals = ranged_burst_interval) diff --git a/code/modules/mob/living/basic/friendly/basic_pet.dm b/code/modules/mob/living/basic/friendly/basic_pet.dm new file mode 100644 index 00000000000..524d318a10a --- /dev/null +++ b/code/modules/mob/living/basic/friendly/basic_pet.dm @@ -0,0 +1,17 @@ +/mob/living/basic/pet + icon = 'icons/mob/pets.dmi' + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC | MOB_BEAST + blood_volume = BLOOD_VOLUME_NORMAL + speed = 0 // same speed as a person. + hud_type = /datum/hud/corgi + +/mob/living/basic/pet/item_interaction(mob/living/user, obj/item/O, list/modifiers) + if(!istype(O, /obj/item/newspaper)) + return ..() + var/obj/item/newspaper/paper = O + if(stat != CONSCIOUS || !paper.rolled) + return ..() + user.visible_message("[user] baps [name] on the nose with the rolled up [O].") + INVOKE_ASYNC(src, PROC_REF(spin), 7 DECISECONDS, 1) + return ITEM_INTERACT_COMPLETE diff --git a/code/modules/mob/living/basic/friendly/bunny.dm b/code/modules/mob/living/basic/friendly/bunny.dm new file mode 100644 index 00000000000..5a23ad03502 --- /dev/null +++ b/code/modules/mob/living/basic/friendly/bunny.dm @@ -0,0 +1,64 @@ +/mob/living/basic/bunny + name = "bunny" + real_name = "bunny" + desc = "Awww a cute bunny." + icon_state = "m_bunny" + icon_living = "m_bunny" + icon_dead = "bunny_dead" + icon_resting = "bunny_stretch" + faction = list("neutral", "jungle") + see_in_dark = 6 + maxHealth = 10 + health = 10 + ai_controller = /datum/ai_controller/basic_controller/bunny + butcher_results = list(/obj/item/food/meat = 1) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + density = FALSE + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_BEAST + mob_size = MOB_SIZE_TINY + atmos_requirements = list("min_oxy" = 16, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + minimum_survivable_temperature = 223 // Below -50 Degrees Celcius + maximum_survivable_temperature = 323 // Above 50 Degrees Celcius + can_hide = TRUE + holder_type = /obj/item/holder/bunny + gold_core_spawnable = FRIENDLY_SPAWN + ventcrawler = VENTCRAWLER_ALWAYS + +/mob/living/basic/bunny/Initialize(mapload) + . = ..() + AddElement(/datum/element/wears_collar) + AddElement(/datum/element/ai_retaliate) + +/mob/living/basic/bunny/attack_hand(mob/living/carbon/human/M) + if(M.a_intent == INTENT_HELP) + get_scooped(M, TRUE) + return ..() + +/mob/living/basic/bunny/syndi // for the syndicake factory bunny so its not being shot + faction = list("syndicate") + gold_core_spawnable = NO_SPAWN + +/datum/ai_controller/basic_controller/bunny + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/rabbit, + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + /datum/ai_planning_subtree/flee_target, + ) + +/datum/ai_planning_subtree/random_speech/rabbit + speech_chance = 10 + speak = list("Mrrp.", "CHIRP!", "Mrrp?") // rabbits make some weird noises dude i don't know what to tell you + emote_hear = list("hops.", "thumps.") + emote_see = list("hops around.", "bounces up and down.", "flips their ears up") diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/basic/friendly/butterfly.dm similarity index 54% rename from code/modules/mob/living/simple_animal/friendly/butterfly.dm rename to code/modules/mob/living/basic/friendly/butterfly.dm index ef4598656df..0f7b4913401 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/basic/friendly/butterfly.dm @@ -1,18 +1,20 @@ -/mob/living/simple_animal/butterfly +/mob/living/basic/butterfly name = "butterfly" desc = "A colorful butterfly, how'd it get up here?" icon_state = "butterfly" icon_living = "butterfly" icon_dead = "butterfly_dead" - emote_see = list("flutters") faction = list("neutral", "jungle") - response_help = "shoos" - response_disarm = "brushes aside" - response_harm = "squashes" + response_help_continuous = "shoos" + response_help_simple = "shoo" + response_disarm_continuous = "brushes aside" + response_disarm_simple = "brush aside" + response_harm_continuous = "squashes" + response_harm_simple = "squash" + ai_controller = /datum/ai_controller/basic_controller/butterfly maxHealth = 2 health = 2 harm_intent_damage = 1 - friendly = "nudges" density = FALSE pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = VENTCRAWLER_ALWAYS @@ -22,9 +24,10 @@ gold_core_spawnable = FRIENDLY_SPAWN initial_traits = list(TRAIT_FLYING, TRAIT_EDIBLE_BUG) -/mob/living/simple_animal/butterfly/Initialize(mapload) +/mob/living/basic/butterfly/Initialize(mapload) . = ..() color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) -/mob/living/simple_animal/butterfly/npc_safe(mob/user) - return TRUE +/datum/ai_controller/basic_controller/butterfly + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/basic/friendly/cockroach.dm similarity index 50% rename from code/modules/mob/living/simple_animal/friendly/cockroach.dm rename to code/modules/mob/living/basic/friendly/cockroach.dm index f38bf75d4ab..fde2a467c9a 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/basic/friendly/cockroach.dm @@ -1,30 +1,33 @@ -/mob/living/simple_animal/cockroach +/mob/living/basic/cockroach name = "cockroach" desc = "This station is just crawling with bugs." icon_state = "cockroach" icon_dead = "cockroach" health = 1 maxHealth = 1 - turns_per_move = 5 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 = 270 - maxbodytemp = INFINITY + minimum_survivable_temperature = 270 + maximum_survivable_temperature = INFINITY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_biotypes = MOB_ORGANIC | MOB_BUG mob_size = MOB_SIZE_TINY - response_disarm = "shoos" - response_harm = "splats" + ai_controller = /datum/ai_controller/basic_controller/cockroach + response_disarm_continuous = "shoos" + response_disarm_simple = "shoo" + response_harm_continuous = "splats" + response_harm_simple = "splat" density = FALSE ventcrawler = VENTCRAWLER_ALWAYS gold_core_spawnable = FRIENDLY_SPAWN - var/squish_chance = 50 loot = list(/obj/effect/decal/cleanable/insectguts) - del_on_death = TRUE + basic_mob_flags = DEL_ON_DEATH + /// Chance to get squished + var/squish_chance = 50 -/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. +/mob/living/basic/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. -/mob/living/simple_animal/cockroach/Initialize(mapload) //Lizards are a great way to deal with cockroaches +/mob/living/basic/cockroach/Initialize(mapload) // Lizards are a great way to deal with cockroaches . = ..() ADD_TRAIT(src, TRAIT_EDIBLE_BUG, "edible_bug") var/static/list/loc_connections = list( @@ -32,7 +35,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/mob/living/simple_animal/cockroach/proc/on_atom_entered(datum/source, atom/movable/entered) +/mob/living/basic/cockroach/proc/on_atom_entered(datum/source, atom/movable/entered) if(isliving(entered)) var/mob/living/A = entered if(A.mob_size > MOB_SIZE_SMALL) @@ -45,14 +48,28 @@ visible_message("As \the [entered] moved over \the [name], it was crushed.") death() -/mob/living/simple_animal/cockroach/ex_act() //Explosions are a terrible way to handle a cockroach. +/mob/living/basic/cockroach/ex_act() // Explosions are a terrible way to handle a cockroach. return -//mining pet -/mob/living/simple_animal/cockroach/brad +// mining pet +/mob/living/basic/cockroach/brad name = "Brad" desc = "Lavaland's most resilient cockroach. Seeing this little guy walk through the wastes almost makes you wish for nuclear winter." - response_help = "carefully pets" + response_help_continuous = "carefully pets" + response_help_simple = "carefully pet" weather_immunities = list("ash") - unique_pet = TRUE gold_core_spawnable = NO_SPAWN + +/datum/ai_controller/basic_controller/cockroach + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_and_hunt_target/roach, + ) + +/datum/ai_planning_subtree/find_and_hunt_target/roach + hunt_targets = list(/obj/effect/decal/cleanable/ants) diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/basic/friendly/lizard.dm similarity index 54% rename from code/modules/mob/living/simple_animal/friendly/lizard.dm rename to code/modules/mob/living/basic/friendly/lizard.dm index bfb512190db..419246bc537 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/basic/friendly/lizard.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/lizard +/mob/living/basic/lizard name = "lizard" desc = "A cute tiny lizard." icon = 'icons/mob/critter.dmi' @@ -6,14 +6,20 @@ icon_living = "lizard" icon_dead = "lizard-dead" speak_emote = list("hisses") - health = 5 - maxHealth = 5 - attacktext = "bites" + health = 10 + maxHealth = 10 + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_sound = 'sound/effects/bite.ogg' melee_damage_lower = 1 melee_damage_upper = 2 - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" + ai_controller = /datum/ai_controller/basic_controller/lizard + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "shoos" + response_disarm_simple = "shoo" + response_harm_continuous = "stomps on" + response_harm_simple = "stomp on" faction = list("neutral", "jungle") ventcrawler = VENTCRAWLER_ALWAYS density = FALSE @@ -24,41 +30,39 @@ butcher_results = list(/obj/item/food/meat = 1) mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE gold_core_spawnable = FRIENDLY_SPAWN - var/eating_sound = 'sound/weapons/bite.ogg' + /// List of stuff that we want to eat + var/static/list/edibles = list( + /mob/living/basic/butterfly, + /mob/living/basic/cockroach, + /obj/structure/spider/spiderling + ) /// Lizards start with a tail var/has_tail = TRUE -/mob/living/simple_animal/lizard/Initialize(mapload) +/mob/living/basic/lizard/Initialize(mapload) . = ..() AddElement(/datum/element/wears_collar) + AddElement(/datum/element/basic_eating, heal_amt_ = 5, food_types_ = edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) -/mob/living/simple_animal/lizard/handle_automated_action() - if(stat == CONSCIOUS && !buckled) - if(prob(1)) - custom_emote(EMOTE_VISIBLE, pick("sticks out its tongue.", "wags its tail.", "lies down.")) +/datum/ai_controller/basic_controller/lizard + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/random_speech/lizard, + ) - if(!isturf(loc)) - return - var/list/lizard_view = view(1, src) - for(var/mob/living/M in lizard_view) - if(M.stat == CONSCIOUS && Adjacent(M) && HAS_TRAIT(M, TRAIT_EDIBLE_BUG)) - custom_emote(EMOTE_VISIBLE, "eats \the [M]!") - playsound(loc, eating_sound, 20, 1) - M.death() - break - for(var/obj/structure/spider/spiderling/spider in lizard_view) - if(Adjacent(spider) && HAS_TRAIT(spider, TRAIT_EDIBLE_BUG)) - if(prob(90)) // Slippery things aren't they? - visible_message("The spiderling skitters away from the [src]!") - spider.random_skitter() - return - else - custom_emote(EMOTE_VISIBLE, "eats \the [spider]!") - playsound(loc, eating_sound, 20, 1) - qdel(spider) - break +/datum/ai_planning_subtree/random_speech/lizard // all of these have to be three words long or i'm killing you. you're dead. + speech_chance = 3 + emote_hear = list("stamps around some.", "hisses a bit.") + emote_see = list("blehs the tongue.", "tilts the head.", "does a spin.") -/mob/living/simple_animal/lizard/verb/lose_tail() +/mob/living/basic/lizard/verb/lose_tail() set name = "Lose tail" set desc = "Allows you to lose your tail and escape a sticky situation. Takes 5 minutes for your tail to grow back." set category = "Animal" @@ -76,11 +80,11 @@ has_tail = FALSE addtimer(CALLBACK(src, PROC_REF(new_tail)), 5 MINUTES) -/mob/living/simple_animal/lizard/proc/new_tail() +/mob/living/basic/lizard/proc/new_tail() has_tail = TRUE to_chat(src, "You regrow your tail!") -/mob/living/simple_animal/lizard/decompile_act(obj/item/matter_decompiler/C, mob/user) +/mob/living/basic/lizard/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!isdrone(user)) user.visible_message("[user] sucks [src] into its decompiler. There's a horrible crunching noise.", \ "It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.") @@ -91,12 +95,11 @@ return TRUE return ..() -/mob/living/simple_animal/lizard/wags_his_tail +/mob/living/basic/lizard/wags_his_tail name = "Wags-His-Tail" real_name = "Wags-His-Tail" - unique_pet = TRUE gold_core_spawnable = NO_SPAWN -/mob/living/simple_animal/lizard/wags_his_tail/update_desc() +/mob/living/basic/lizard/wags_his_tail/update_desc() . = ..() desc = "The official mascot of Janitalia." diff --git a/code/modules/mob/living/basic/friendly/penguin.dm b/code/modules/mob/living/basic/friendly/penguin.dm new file mode 100644 index 00000000000..bb491007dcf --- /dev/null +++ b/code/modules/mob/living/basic/friendly/penguin.dm @@ -0,0 +1,90 @@ +// Penguins + +/mob/living/basic/pet/penguin + name = "penguin" + real_name = "penguin" + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "bops" + response_disarm_simple = "bop" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + speak_emote = list("squawks", "gakkers") + faction = list("penguin") + ai_controller = /datum/ai_controller/basic_controller/penguin + see_in_dark = 5 + icon = 'icons/mob/penguins.dmi' + step_type = FOOTSTEP_MOB_BAREFOOT + +/mob/living/basic/pet/penguin/Initialize(mapload) + . = ..() + AddElement(/datum/element/wears_collar) + AddElement(/datum/element/waddling) + +/mob/living/basic/pet/penguin/emperor + name = "Emperor penguin" + desc = "Emperor of all he surveys." + icon_state = "penguin" + icon_living = "penguin" + icon_dead = "penguin_dead" + butcher_results = list() + gold_core_spawnable = FRIENDLY_SPAWN + +/mob/living/basic/pet/penguin/eldrich + name = "Albino penguin" + desc = "Found in the depths of mountains." + response_help_continuous = "taps" + response_help_simple = "tap" + response_disarm_continuous = "pokes" + response_disarm_simple = "poke" + response_harm_continuous = "flails at" + response_harm_simple = "flail at" + icon_state = "penguin_elder" + icon_living = "penguin_elder" + icon_dead = "penguin_dead" + faction = list("penguin", "cult") + +/mob/living/basic/pet/penguin/emperor/shamebrero + name = "Shamebrero penguin" + desc = "Shameful of all he surveys." + icon_state = "penguin_shamebrero" + icon_living = "penguin_shamebrero" + gold_core_spawnable = NO_SPAWN + +/mob/living/basic/pet/penguin/baby + name = "Penguin chick" + desc = "Can't fly and can barely waddles, but the prince of all chicks." + icon_state = "penguin_baby" + icon_living = "penguin_baby" + icon_dead = "penguin_baby_dead" + density = FALSE + pass_flags = PASSMOB + +/datum/ai_controller/basic_controller/penguin + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/random_speech/penguin, + ) + +/datum/ai_planning_subtree/random_speech/penguin + speech_chance = 5 + speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!") + emote_hear = list("squawks", "gakkers") + emote_see = list("shakes its beak.", "flaps it's wings.", "preens itself.") + +/datum/ai_controller/basic_controller/penguin/eldrich + planning_subtrees = list( + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/random_speech/penguin/eldrich, + ) + +/datum/ai_planning_subtree/random_speech/penguin/eldrich + speak = list("Gah Gah!", "Tekeli-li! Tekeli-li!", "Tekeli-li!", "Teke", "li") diff --git a/code/modules/mob/living/basic/friendly/sloth.dm b/code/modules/mob/living/basic/friendly/sloth.dm new file mode 100644 index 00000000000..39210d199d3 --- /dev/null +++ b/code/modules/mob/living/basic/friendly/sloth.dm @@ -0,0 +1,55 @@ +/mob/living/basic/pet/sloth + name = "sloth" + desc = "An adorable, sleepy creature." + icon_state = "sloth" + icon_living = "sloth" + icon_dead = "sloth_dead" + gender = MALE + speak_emote = list("yawns") + faction = list("neutral", "jungle") + butcher_results = list(/obj/item/food/meat = 3) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + ai_controller = /datum/ai_controller/basic_controller/sloth + gold_core_spawnable = FRIENDLY_SPAWN + melee_damage_upper = 5 + health = 50 + maxHealth = 50 + speed = 2 + step_type = FOOTSTEP_MOB_CLAW + +/mob/living/basic/pet/sloth/Initialize(mapload) + . = ..() + AddElement(/datum/element/wears_collar) + AddElement(/datum/element/ai_retaliate) + +//IAA Sloth +/mob/living/basic/pet/sloth/paperwork + name = "Paperwork" + desc = "Internal Affairs' pet sloth. About as useful as the rest of the agents." + gold_core_spawnable = NO_SPAWN + +/datum/ai_controller/basic_controller/sloth + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/random_speech/sloth, + ) + +/datum/ai_planning_subtree/random_speech/sloth + speech_chance = 1 + speak = list("Ahhhh") + emote_hear = list("snores.", "yawns.") + emote_see = list("dozes off.", "looks around sleepily.") diff --git a/code/modules/mob/living/basic/friendly/snake.dm b/code/modules/mob/living/basic/friendly/snake.dm new file mode 100644 index 00000000000..869c3d1b7a9 --- /dev/null +++ b/code/modules/mob/living/basic/friendly/snake.dm @@ -0,0 +1,72 @@ +/mob/living/basic/snake + name = "snake" + desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike." + icon_state = "snake" + icon_living = "snake" + icon_dead = "snake_dead" + speak_emote = list("hisses") + health = 20 + maxHealth = 20 + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_sound = 'sound/effects/bite.ogg' + melee_damage_lower = 5 + melee_damage_upper = 6 + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "shoos" + response_disarm_simple = "shoo" + response_harm_continuous = "steps on" + response_harm_simple = "step on" + faction = list("hostile", "jungle") + ventcrawler = VENTCRAWLER_ALWAYS + density = FALSE + pass_flags = PASSTABLE | PASSMOB + mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE + mob_size = MOB_SIZE_SMALL + gold_core_spawnable = FRIENDLY_SPAWN + + ai_controller = /datum/ai_controller/basic_controller/snake + /// How much poison? + var/poison_per_bite = 0 + /// What poison + var/poison_type = "toxin" + /// List of stuff (mice) that we want to eat + var/static/list/edibles = list( + /mob/living/simple_animal/mouse, + ) + +/mob/living/basic/snake/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/basic_eating, heal_amt_ = 2, food_types_ = edibles) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(edibles)) + +/mob/living/basic/snake/melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if(. && isliving(target)) + var/mob/living/L = target + if(L.reagents && poison_per_bite > 0) + L.reagents.add_reagent(poison_type, poison_per_bite) + +/// Snakes are primarily concerned with getting those tasty, tasty mice, but aren't afraid to strike back at those who attack them +/datum/ai_controller/basic_controller/snake + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + ) + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + 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/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, + /datum/ai_planning_subtree/random_speech/snake, + ) + +/datum/ai_planning_subtree/random_speech/snake + speech_chance = 5 + speak = list("hsssss", "sssSSsssss...", "hiisssss") + sound = list('sound/creatures/snake_hissing1.ogg', 'sound/creatures/snake_hissing2.ogg') + emote_hear = list("hisses.") + emote_see = list("slithers around.", "glances.", "stares.") diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index a2a95c8b926..003d4f2131e 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -44,7 +44,7 @@ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ ) - allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) + allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/basic/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) suicide_messages = list( "is attempting to bite their tongue off!", diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 7a9620aaaad..a86247eb1ad 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -48,8 +48,8 @@ "eyes" = /obj/item/organ/internal/eyes/unathi //3 darksight. ) - allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, - /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) + allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/basic/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, + /mob/living/simple_animal/crab, /mob/living/basic/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) suicide_messages = list( "is attempting to bite their tongue off!", diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm index a6ba75e80e5..5238db6d9e7 100644 --- a/code/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -38,8 +38,8 @@ unless they choose otherwise by selecting the colourblind disability in character creation (darksight = 8 but colourblind).*/ ) - allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, - /mob/living/simple_animal/crab, /mob/living/simple_animal/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) + allowed_consumed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/basic/lizard, /mob/living/simple_animal/chick, /mob/living/simple_animal/chicken, + /mob/living/simple_animal/crab, /mob/living/basic/butterfly, /mob/living/simple_animal/parrot, /mob/living/simple_animal/hostile/poison/bees) suicide_messages = list( "is attempting to bite their tongue off!", diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 3da93373ced..f14de53f175 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -136,3 +136,8 @@ /// The toggle for if this creature should ignore the rolls for generic organs upon dissection var/ignore_generic_organs = FALSE + + /// Can this mob hide? + var/can_hide = FALSE + /// Allows a mob to pass unbolted doors while hidden + var/pass_door_while_hidden = FALSE diff --git a/code/modules/mob/living/simple_animal/friendly/bunny.dm b/code/modules/mob/living/simple_animal/friendly/bunny.dm deleted file mode 100644 index ff96383f425..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/bunny.dm +++ /dev/null @@ -1,42 +0,0 @@ -/mob/living/simple_animal/bunny - name = "bunny" - real_name = "bunny" - desc = "Awww a cute bunny." - icon_state = "m_bunny" - icon_living = "m_bunny" - icon_dead = "bunny_dead" - icon_resting = "bunny_stretch" - emote_see = list("thumps", "sniffs at something", "hops around", "flips their ears up") - faction = list("neutral", "jungle") - turns_per_move = 5 - see_in_dark = 6 - maxHealth = 10 - health = 10 - butcher_results = list(/obj/item/food/meat = 1) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - density = FALSE - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - mob_biotypes = MOB_ORGANIC | MOB_BEAST - mob_size = MOB_SIZE_TINY - atmos_requirements = list("min_oxy" = 16, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 223 //Below -50 Degrees Celcius - maxbodytemp = 323 //Above 50 Degrees Celcius - can_hide = TRUE - holder_type = /obj/item/holder/bunny - gold_core_spawnable = FRIENDLY_SPAWN - ventcrawler = VENTCRAWLER_ALWAYS - -/mob/living/simple_animal/bunny/Initialize(mapload) - . = ..() - AddElement(/datum/element/wears_collar) - -/mob/living/simple_animal/bunny/attack_hand(mob/living/carbon/human/M) - if(M.a_intent == INTENT_HELP) - get_scooped(M, TRUE) - ..() - -/mob/living/simple_animal/bunny/syndi // for the syndicake factory bunny so its not being shot - faction = list("syndicate") - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm deleted file mode 100644 index 3fb7a6dfe8d..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ /dev/null @@ -1,65 +0,0 @@ -//Penguins - -/mob/living/simple_animal/pet/penguin - name = "penguin" - real_name = "penguin" - response_help = "pets" - response_disarm = "bops" - response_harm = "kicks" - speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!") - speak_emote = list("squawks", "gakkers") - emote_hear = list("squawk!", "gakkers!", "noots.","NOOTS!") - emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") - faction = list("penguin") - see_in_dark = 5 - speak_chance = 1 - turns_per_move = 10 - icon = 'icons/mob/penguins.dmi' - footstep_type = FOOTSTEP_MOB_BAREFOOT - -/mob/living/simple_animal/pet/penguin/Initialize(mapload) - . = ..() - AddElement(/datum/element/wears_collar) - AddElement(/datum/element/waddling) - -/mob/living/simple_animal/pet/penguin/emperor - name = "Emperor penguin" - desc = "Emperor of all he surveys." - icon_state = "penguin" - icon_living = "penguin" - icon_dead = "penguin_dead" - butcher_results = list() - gold_core_spawnable = FRIENDLY_SPAWN - -/mob/living/simple_animal/pet/penguin/eldrich - name = "Albino penguin" - desc = "Found in the depths of mountains." - response_help = "taps" - response_disarm = "pokes" - response_harm = "flails at" - icon_state = "penguin_elder" - icon_living = "penguin_elder" - icon_dead = "penguin_dead" - speak = list("Gah Gah!", "Tekeli-li! Tekeli-li!", "Tekeli-li!", "Teke", "li") - speak_emote = list("gibbers", "gakkers") - emote_hear = list("whistles!", "gakkers!") - emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") - faction = list("penguin", "cult") - -/mob/living/simple_animal/pet/penguin/emperor/shamebrero - name = "Shamebrero penguin" - desc = "Shameful of all he surveys." - icon_state = "penguin_shamebrero" - icon_living = "penguin_shamebrero" - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - -/mob/living/simple_animal/pet/penguin/baby - speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!") - name = "Penguin chick" - desc = "Can't fly and can barely waddles, but the prince of all chicks." - icon_state = "penguin_baby" - icon_living = "penguin_baby" - icon_dead = "penguin_baby_dead" - density = FALSE - pass_flags = PASSMOB diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm deleted file mode 100644 index 6046082fc87..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ /dev/null @@ -1,34 +0,0 @@ -/mob/living/simple_animal/pet/sloth - name = "sloth" - desc = "An adorable, sleepy creature." - icon_state = "sloth" - icon_living = "sloth" - icon_dead = "sloth_dead" - gender = MALE - speak = list("Ahhhh") - speak_emote = list("yawns") - emote_hear = list("snores.","yawns.") - emote_see = list("dozes off.", "looks around sleepily.") - faction = list("neutral", "jungle") - speak_chance = 1 - turns_per_move = 5 - butcher_results = list(/obj/item/food/meat = 3) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - gold_core_spawnable = FRIENDLY_SPAWN - health = 50 - maxHealth = 50 - speed = 2 - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/pet/sloth/Initialize(mapload) - . = ..() - AddElement(/datum/element/wears_collar) - -//IAA Sloth -/mob/living/simple_animal/pet/sloth/paperwork - name = "Paperwork" - desc = "Internal Affairs' pet sloth. About as useful as the rest of the agents." - unique_pet = TRUE - gold_core_spawnable = NO_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm deleted file mode 100644 index 61b53ac184f..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/snake.dm +++ /dev/null @@ -1,59 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/poison - var/poison_per_bite = 0 - var/poison_type = "toxin" - -/mob/living/simple_animal/hostile/retaliate/poison/AttackingTarget() - . = ..() - if(. && isliving(target)) - var/mob/living/L = target - if(L.reagents && !poison_per_bite == 0) - L.reagents.add_reagent(poison_type, poison_per_bite) - -/mob/living/simple_animal/hostile/retaliate/poison/snake - name = "snake" - desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike." - icon_state = "snake" - icon_living = "snake" - icon_dead = "snake_dead" - speak_emote = list("hisses") - attacktext = "bites" - melee_damage_lower = 5 - melee_damage_upper = 6 - response_help = "pets" - response_disarm = "shoos" - response_harm = "steps on" - faction = list("hostile", "jungle") - ventcrawler = VENTCRAWLER_ALWAYS - density = FALSE - pass_flags = PASSTABLE | PASSMOB - mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE - mob_size = MOB_SIZE_SMALL - gold_core_spawnable = FRIENDLY_SPAWN - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - - -/mob/living/simple_animal/hostile/retaliate/poison/snake/ListTargets(atom/the_target) - . = oview(vision_range, targets_from) //get list of things in vision range - var/list/living_mobs = list() - var/list/mice = list() - for(var/HM in .) - //Yum a tasty mouse - if(ismouse(HM)) - mice += HM - if(isliving(HM)) - living_mobs += HM - - // if no tasty mice to chase, lets chase any living mob enemies in our vision range - if(length(mice) == 0) - //Filter living mobs (in range mobs) by those we consider enemies (retaliate behaviour) - return living_mobs & enemies - return mice - -/mob/living/simple_animal/hostile/retaliate/poison/snake/AttackingTarget() - if(ismouse(target)) - visible_message("[name] consumes [target] in a single gulp!", "You consume [target] in a single gulp!") - QDEL_NULL(target) - adjustHealth(-2) - else - return ..() diff --git a/code/modules/mob/living/simple_animal/hide_action.dm b/code/modules/mob/living/simple_animal/hide_action.dm index b2de59d53fb..71c1e2ce630 100644 --- a/code/modules/mob/living/simple_animal/hide_action.dm +++ b/code/modules/mob/living/simple_animal/hide_action.dm @@ -7,19 +7,20 @@ button_icon_state = "mouse_gray_sleep" /datum/action/innate/hide/Activate() - var/mob/living/simple_animal/simplemob = owner + if(istype(owner, /mob/living)) + var/mob/living/hiding_mob = owner - if(owner.layer != layer_to_change_to) - owner.layer = layer_to_change_to - owner.visible_message("[owner] scurries to the ground!", "You are now hiding.") - if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob)) - simplemob.pass_flags |= PASSDOOR - return + if(owner.layer != layer_to_change_to) + owner.layer = layer_to_change_to + owner.visible_message("[owner] scurries to the ground!", "You are now hiding.") + if(istype(hiding_mob) && hiding_mob.pass_door_while_hidden || isdrone(hiding_mob)) + hiding_mob.pass_flags |= PASSDOOR + return - simplemob.layer = layer_to_change_from - owner.visible_message("[owner] slowly peeks up from the ground...", "You have stopped hiding.") - if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob)) - simplemob.pass_flags &= ~PASSDOOR + hiding_mob.layer = layer_to_change_from + owner.visible_message("[owner] slowly peeks up from the ground...", "You have stopped hiding.") + if(istype(hiding_mob) && hiding_mob.pass_door_while_hidden || isdrone(hiding_mob)) + hiding_mob.pass_flags &= ~PASSDOOR /datum/action/innate/hide/alien_larva_hide desc = "Allows to hide beneath tables or certain items. Toggled on or off." diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index d0d02ad62c8..3ce3ca105c0 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,9 +82,6 @@ /// Higher speed is slower, negative speed is faster var/speed = 1 - var/can_hide = FALSE - /// Allows a mob to pass unbolted doors while hidden - var/pass_door_while_hidden = FALSE /// If the mob can be renamed var/unique_pet = FALSE diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm index bbb9117d219..d3b31286f50 100644 --- a/code/modules/projectiles/projectile/magic_projectiles.dm +++ b/code/modules/projectiles/projectile/magic_projectiles.dm @@ -211,14 +211,14 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list( "mouse" = /mob/living/simple_animal/mouse, "chicken" = /mob/living/simple_animal/chicken, "cow" = /mob/living/basic/cow, - "lizard" = /mob/living/simple_animal/lizard, + "lizard" = /mob/living/basic/lizard, "fox" = /mob/living/simple_animal/pet/dog/fox, "chick" = /mob/living/simple_animal/chick, "pug" = /mob/living/simple_animal/pet/dog/pug, "turkey" = /mob/living/simple_animal/turkey, "seal" = /mob/living/simple_animal/seal, - "bunny" = /mob/living/simple_animal/bunny, - "penguin" = /mob/living/simple_animal/pet/penguin/emperor, + "bunny" = /mob/living/basic/bunny, + "penguin" = /mob/living/basic/pet/penguin/emperor, )) /proc/wabbajack(mob/living/M, force_borg = FALSE, force_animal = FALSE) diff --git a/code/modules/research/strange_objects.dm b/code/modules/research/strange_objects.dm index c9ebfc1b5f0..2215dec165f 100644 --- a/code/modules/research/strange_objects.dm +++ b/code/modules/research/strange_objects.dm @@ -51,9 +51,9 @@ /mob/living/simple_animal/pet/dog/fox, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/dog/pug, - /mob/living/simple_animal/lizard, + /mob/living/basic/lizard, /mob/living/simple_animal/diona, - /mob/living/simple_animal/butterfly, + /mob/living/basic/butterfly, /mob/living/carbon/human/monkey, ) @@ -125,12 +125,12 @@ var/list/valid_animals = list( /mob/living/simple_animal/parrot, - /mob/living/simple_animal/butterfly, + /mob/living/basic/butterfly, /mob/living/simple_animal/pet/cat, /mob/living/simple_animal/pet/dog/corgi, /mob/living/simple_animal/crab, /mob/living/simple_animal/pet/dog/fox, - /mob/living/simple_animal/lizard, + /mob/living/basic/lizard, /mob/living/simple_animal/mouse, /mob/living/simple_animal/pet/dog/pug, /mob/living/basic/bear/black, diff --git a/paradise.dme b/paradise.dme index ad8654c4737..2f7905363e8 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2409,7 +2409,16 @@ #include "code\modules\mob\living\login.dm" #include "code\modules\mob\living\stat_states.dm" #include "code\modules\mob\living\taste.dm" +#include "code\modules\mob\living\basic\basic_emotes.dm" #include "code\modules\mob\living\basic\basic_mob.dm" +#include "code\modules\mob\living\basic\friendly\basic_pet.dm" +#include "code\modules\mob\living\basic\friendly\bunny.dm" +#include "code\modules\mob\living\basic\friendly\butterfly.dm" +#include "code\modules\mob\living\basic\friendly\cockroach.dm" +#include "code\modules\mob\living\basic\friendly\lizard.dm" +#include "code\modules\mob\living\basic\friendly\penguin.dm" +#include "code\modules\mob\living\basic\friendly\sloth.dm" +#include "code\modules\mob\living\basic\friendly\snake.dm" #include "code\modules\mob\living\basic\posessed_object.dm" #include "code\modules\mob\living\basic\farm_animals\cow.dm" #include "code\modules\mob\living\basic\farm_animals\deer.dm" @@ -2614,10 +2623,7 @@ #include "code\modules\mob\living\simple_animal\bot\mulebot.dm" #include "code\modules\mob\living\simple_animal\bot\secbot.dm" #include "code\modules\mob\living\simple_animal\bot\syndicate_bots.dm" -#include "code\modules\mob\living\simple_animal\friendly\bunny.dm" -#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" -#include "code\modules\mob\living\simple_animal\friendly\cockroach.dm" #include "code\modules\mob\living\simple_animal\friendly\corgi_stripping.dm" #include "code\modules\mob\living\simple_animal\friendly\crab.dm" #include "code\modules\mob\living\simple_animal\friendly\diona_nymph.dm" @@ -2625,13 +2631,9 @@ #include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm" #include "code\modules\mob\living\simple_animal\friendly\fox.dm" #include "code\modules\mob\living\simple_animal\friendly\friendly_emote.dm" -#include "code\modules\mob\living\simple_animal\friendly\lizard.dm" #include "code\modules\mob\living\simple_animal\friendly\mouse.dm" #include "code\modules\mob\living\simple_animal\friendly\nian_caterpillar.dm" -#include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" -#include "code\modules\mob\living\simple_animal\friendly\sloth.dm" -#include "code\modules\mob\living\simple_animal\friendly\snake.dm" #include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm" #include "code\modules\mob\living\simple_animal\hostile\alien_types.dm" #include "code\modules\mob\living\simple_animal\hostile\angel_statue.dm" diff --git a/sound/creatures/snake_hissing1.ogg b/sound/creatures/snake_hissing1.ogg new file mode 100644 index 00000000000..17af4fb62e7 Binary files /dev/null and b/sound/creatures/snake_hissing1.ogg differ diff --git a/sound/creatures/snake_hissing2.ogg b/sound/creatures/snake_hissing2.ogg new file mode 100644 index 00000000000..5d91f66323c Binary files /dev/null and b/sound/creatures/snake_hissing2.ogg differ diff --git a/tools/UpdatePaths/Scripts/29815_batched_friendly_mob_basic.txt b/tools/UpdatePaths/Scripts/29815_batched_friendly_mob_basic.txt new file mode 100644 index 00000000000..8131f4e7759 --- /dev/null +++ b/tools/UpdatePaths/Scripts/29815_batched_friendly_mob_basic.txt @@ -0,0 +1,7 @@ +/mob/living/simple_animal/lizard/@SUBTYPES : /mob/living/basic/lizard/@SUBTYPES{@OLD} +/mob/living/simple_animal/butterfly/@SUBTYPES : /mob/living/basic/butterfly/@SUBTYPES{@OLD} +/mob/living/simple_animal/cockroach/@SUBTYPES : /mob/living/basic/cockroach/@SUBTYPES{@OLD} +/mob/living/simple_animal/hostile/retaliate/poison/snake/@SUBTYPES : /mob/living/basic/snake/@SUBTYPES{@OLD} +/mob/living/simple_animal/bunny/@SUBTYPES : /mob/living/basic/bunny/@SUBTYPES{@OLD} +/mob/living/simple_animal/pet/penguin/@SUBTYPES : /mob/living/basic//pet/penguin/@SUBTYPES{@OLD} +/mob/living/simple_animal/pet/sloth/@SUBTYPES : /mob/living/basic//pet/sloth/@SUBTYPES{@OLD}