diff --git a/code/game/objects/effects/semirandom_mobs_vr.dm b/code/game/objects/effects/semirandom_mobs_vr.dm
index b7008b4627..75136cf5aa 100644
--- a/code/game/objects/effects/semirandom_mobs_vr.dm
+++ b/code/game/objects/effects/semirandom_mobs_vr.dm
@@ -51,6 +51,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
list(/mob/living/simple_mob/animal/passive/opossum),
list(/mob/living/simple_mob/animal/passive/pillbug),
list(/mob/living/simple_mob/animal/passive/snake),
+ list(/mob/living/simple_mob/animal/passive/snake/red),
+ list(/mob/living/simple_mob/animal/passive/snake/python),
list(/mob/living/simple_mob/animal/passive/tindalos),
list(/mob/living/simple_mob/animal/passive/yithian),
list(
@@ -359,6 +361,8 @@ var/global/list/semirandom_mob_spawner_decisions = list()
list(/mob/living/simple_mob/animal/passive/opossum) = 10,
list(/mob/living/simple_mob/animal/passive/pillbug) = 10,
list(/mob/living/simple_mob/animal/passive/snake) = 10,
+ list(/mob/living/simple_mob/animal/passive/snake/red) = 10,
+ list(/mob/living/simple_mob/animal/passive/snake/python) = 10,
list(/mob/living/simple_mob/animal/passive/tindalos) = 10,
list(/mob/living/simple_mob/animal/passive/yithian) = 10,
list(
@@ -537,7 +541,7 @@ var/global/list/semirandom_mob_spawner_decisions = list()
/mob/living/simple_mob/vore/lamia/zebra/bra,
/mob/living/simple_mob/vore/lamia/zebra/shirt
) = 100,
-// LOOK OKAY MERCS ARE HUMANOIDS SO THEY ARE HERE, but they are also kind of bullshit so they probably shouldn't be able to spawn in the same place as catgirls.
+// LOOK OKAY MERCS ARE HUMANOIDS SO THEY ARE HERE, but they are also kind of bullshit so they probably shouldn't be able to spawn in the same place as catgirls.
// I want some better potentially hostile humanoids that aren't stupid to fight. If they become a big issue I'll comment them out.
// For now they are just rare, and the ranged ones are way more rare than the melee ones, which I think will help balance them out.
list(
diff --git a/code/game/objects/items/weapons/taskmanager_ch.dm b/code/game/objects/items/weapons/taskmanager_ch.dm
index f8cb181abc..8d3ef847e4 100644
--- a/code/game/objects/items/weapons/taskmanager_ch.dm
+++ b/code/game/objects/items/weapons/taskmanager_ch.dm
@@ -102,7 +102,7 @@
scancount = 0
scanned = list()
scannables = list(/obj/machinery/deployable/barrier,/obj/machinery/flasher/portable,/obj/item/weapon/storage/box/flashbangs,/obj/item/device/taperecorder,
- /mob/living/simple_mob/animal/passive/snake/noodle,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/reagent_containers/spray/pepper,
+ /mob/living/simple_mob/animal/passive/snake/python/noodle,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/reagent_containers/spray/pepper,
/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud/aviator,/obj/machinery/computer/secure_data,/obj/machinery/computer/security,
/obj/item/weapon/storage/briefcase/crimekit,/obj/machinery/microscope,/obj/machinery/dnaforensics,/obj/machinery/flasher,/obj/structure/closet/secure_closet/brig,
/obj/structure/closet/secure_closet/warden,/obj/machinery/vending/security,/obj/structure/closet/secure_closet/hos2,/obj/structure/closet/secure_closet/hos,
diff --git a/code/modules/mob/living/simple_mob/donteatpets_vr.dm b/code/modules/mob/living/simple_mob/donteatpets_vr.dm
index 057373b4c7..adf7d00976 100644
--- a/code/modules/mob/living/simple_mob/donteatpets_vr.dm
+++ b/code/modules/mob/living/simple_mob/donteatpets_vr.dm
@@ -32,7 +32,7 @@
digestable = 0
devourable = 0
-/mob/living/simple_mob/animal/passive/snake/noodle
+/mob/living/simple_mob/animal/passive/snake/python/noodle
digestable = 0
devourable = 0
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
index 40aea9ea5d..e7dea44853 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm
@@ -3,30 +3,33 @@
desc = "Classification: Reptilia Serpentes\
\
Snakes are elongated, limbless, carnivorous reptiles of the suborder Serpentes \
- Like all other squamates, snakes are ectothermic, amniote vertebrates covered in overlapping scales. \
- Many species of snakes have skulls with several more joints than their lizard ancestors, \
+ Like all other squamates, pythons are ectothermic, amniote vertebrates covered in overlapping scales. \
+ Many species of snake have skulls with several more joints than their lizard ancestors, \
enabling them to swallow prey much larger than their heads with their highly mobile jaws. \
\
- This species of snake is nonvenomous and use their large bodies to primarily subdue their prey. \
+ This type of snake is nonvenomous and use their slender bodies to primarily subdue their prey. \
Nonvenomous snakes either swallow prey alive or kill them by constriction - this is dependant on the prey. \
\
- This specific snake is nonvenomous and is mostly passive - however they will attack if threatened - it is \
- recommended that persons keep their distance as to not provoke these animals."
+ Snakes are mostly passive - however they will attack if threatened - it is recommended that \
+ persons keep their distance as to not provoke these animals."
value = CATALOGUER_REWARD_TRIVIAL
+/*
+ * Green Snake
+ */
/mob/living/simple_mob/animal/passive/snake
name = "snake"
- desc = "A big thick snake."
- tt_desc = "Reptilia Serpentes"
+ desc = "A cute little, green snake. Wiggle wiggle."
+ tt_desc = "E Reptilia Serpentes"
catalogue_data = list(/datum/category_item/catalogue/fauna/snake)
- icon_state = "snake"
- icon_living = "snake"
- icon_dead = "snake_dead"
+ icon_state = "green"
+ icon_living = "green"
+ icon_dead = "green_dead"
icon = 'icons/mob/snake_vr.dmi'
- maxHealth = 20
- health = 20
+ maxHealth = 15
+ health = 15
movement_cooldown = 8 // SLOW-ASS MUTHAFUCKA, I hope.
@@ -47,17 +50,46 @@
/datum/say_list/snake
emote_hear = list("hisses")
-//NOODLE IS HERE! SQUEEEEEEEE~
-/mob/living/simple_mob/animal/passive/snake/noodle
+/*
+ * Red Snake
+ */
+/mob/living/simple_mob/animal/passive/snake/red
+ desc = "A cute little, red snake. Wiggle wiggle."
+
+ icon_state = "red"
+ icon_living = "red"
+ icon_dead = "red_dead"
+ icon = 'icons/mob/snake_vr.dmi'
+
+/*
+ * Python
+ */
+/mob/living/simple_mob/animal/passive/snake/python
+ name = "python"
+ desc = "A big, thick snake."
+ tt_desc = "E Reptilia Pythonidae"
+
+ icon_state = "python"
+ icon_living = "python"
+ icon_dead = "python_dead"
+ icon = 'icons/mob/snake_vr.dmi'
+
+/*
+ * NOODLE IS HERE! SQUEEEEEEEE~
+ */
+/mob/living/simple_mob/animal/passive/snake/python/noodle
name = "Noodle"
desc = "This snake is particularly chubby and demands nothing but the finest of treats."
+ maxHealth = 20
+ health = 20
+
makes_dirt = FALSE
var/turns_since_scan = 0
var/obj/movement_target
-/mob/living/simple_mob/animal/passive/snake/noodle/Life()
+/mob/living/simple_mob/animal/passive/snake/python/noodle/Life()
..()
//Not replacing with SA FollowTarget mechanics because Ian behaves... very... specifically.
@@ -100,41 +132,7 @@
else if(ishuman(movement_target.loc) && prob(20))
visible_emote("stares at the [movement_target] that [movement_target.loc] has with an unknowable reptilian gaze.")
-/* old eating code, couldn't figure out how to make the "swallows food" thing so I'm keeping this here incase someone wants legacy"
-/mob/living/simple_mob/animal/passive/snake/noodle/Life() //stolen from Ian in corgi.dm
- if(!..())
- return 0
-
- if(!stat && !resting && !buckled && !ai_inactive)
- turns_since_scan++
- if(turns_since_scan > 5)
- turns_since_scan = 0
- if(movement_target && !(isturf(movement_target.loc) || ishuman(movement_target.loc)))
- movement_target = null
- stop_automated_movement = 0
- if(!movement_target || !(movement_target.loc in oview(src, 5)) )
- movement_target = null
- stop_automated_movement = 0
- walk(src,0)
- for(var/obj/item/weapon/reagent_containers/food/snacks/snakesnack/S in oview(src,3))
- if(isturf(S.loc))
- movement_target = S
- visible_emote("turns towards \the [movement_target] and slithers towards it.")
- break
-
- if(movement_target)
- stop_automated_movement = 1
- walk_to(src, movement_target, 0, 5)
- spawn(10)
- if(Adjacent(movement_target))
- visible_message("[src] swallows the [movement_target] whole!")
- qdel(movement_target)
- walk(src,0)
- else if(ishuman(movement_target.loc) && prob(20))
- visible_emote("stares at the [movement_target] that [movement_target.loc] has with an unknowable reptilian gaze.")
-*/
-
-/mob/living/simple_mob/animal/passive/snake/noodle/apply_melee_effects(var/atom/A)
+/mob/living/simple_mob/animal/passive/snake/python/noodle/apply_melee_effects(var/atom/A)
if(ismouse(A))
var/mob/living/simple_mob/animal/passive/mouse/mouse = A
if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something.
@@ -143,14 +141,16 @@
else
..()
-/mob/living/simple_mob/animal/passive/snake/noodle/attackby(var/obj/item/O, var/mob/user)
+/mob/living/simple_mob/animal/passive/snake/python/noodle/attackby(var/obj/item/O, var/mob/user)
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/snakesnack))
visible_message("[user] feeds \the [O] to [src].")
qdel(O)
else
return ..()
-//Special snek-snax for Noodle!
+/*
+ * Special snek-snax for Noodle!
+ */
/obj/item/weapon/reagent_containers/food/snacks/snakesnack
name = "sugar mouse"
desc = "A little mouse treat made of coloured sugar. Noodle loves these!"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
index e171d912a0..07bcf6b99d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm
@@ -1,6 +1,6 @@
/datum/category_item/catalogue/fauna/frog
name = "Wildlife - Giant Frog"
- desc = "Classification: Anura gigantus\
+ desc = "Classification: Anura Gigantus\
\
A frog is any member of a diverse and largely carnivorous group of short-bodied, tailless amphibians composing \
the order Anura. This specific species - Anura gigantus - is a mutated form of frogs, largely due to exposure to mutagen chemicals. \
@@ -20,7 +20,7 @@
/mob/living/simple_mob/vore/aggressive/frog
name = "giant frog"
desc = "You've heard of having a frog in your throat, now get ready for the reverse."
- tt_desc = "Anura gigantus"
+ tt_desc = "Anura Gigantus"
catalogue_data = list(/datum/category_item/catalogue/fauna/frog)
icon_dead = "frog-dead"
diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm
index 40015eb871..9ffa59cc62 100644
--- a/code/modules/reagents/reactions/instant/instant_vr.dm
+++ b/code/modules/reagents/reactions/instant/instant_vr.dm
@@ -401,7 +401,7 @@
/mob/living/simple_mob/animal/passive/bird/parrot/poly,
/mob/living/simple_mob/animal/sif/fluffy,
/mob/living/simple_mob/animal/sif/fluffy/silky,
- /mob/living/simple_mob/animal/passive/snake/noodle,
+ /mob/living/simple_mob/animal/passive/snake/python/noodle,
/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,
/mob/living/simple_mob/animal/space/space_worm, //Space Worm parts that aren't proper heads
/mob/living/simple_mob/animal/space/space_worm/head/severed,
diff --git a/icons/mob/snake_vr.dmi b/icons/mob/snake_vr.dmi
index 42631b85de..6802aecc47 100644
Binary files a/icons/mob/snake_vr.dmi and b/icons/mob/snake_vr.dmi differ
diff --git a/maps/expedition_vr/beach/_beach.dm b/maps/expedition_vr/beach/_beach.dm
index 9428488b96..70fbaa8dbf 100644
--- a/maps/expedition_vr/beach/_beach.dm
+++ b/maps/expedition_vr/beach/_beach.dm
@@ -84,7 +84,10 @@
prob_fall = 25 //Chance goes down by this much each time it spawns one (not defining and prob_spawn 100 means they spawn as soon as one dies)
//guard = 40 //They'll stay within this range (not defining this disables them staying nearby and they will wander the map (and through step teleports))
mobs_to_pick_from = list(
- /mob/living/simple_mob/animal/passive/snake
+ /mob/living/simple_mob/vore/fennec = 300,
+ /mob/living/simple_mob/animal/passive/snake/python = 100,
+ /mob/living/simple_mob/vore/alienanimals/teppi = 10,
+ /mob/living/simple_mob/vore/alienanimals/teppi/baby = 1
)
/obj/tether_away_spawner/beach_outside_friendly
diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm
index a821d423ff..db6ee89e11 100644
--- a/maps/southern_cross/southern_cross-2.dmm
+++ b/maps/southern_cross/southern_cross-2.dmm
@@ -459,7 +459,7 @@
"aiR" = (/obj/machinery/computer/secure_data/detective_computer{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office)
"aiS" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/security/lobby)
"aiT" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby)
-"aiU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_mob/animal/passive/snake/noodle,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
+"aiU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_mob/animal/passive/snake/python/noodle,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
"aiV" = (/obj/machinery/photocopier,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/machinery/keycard_auth{pixel_y = 36},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hos)
"aiW" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/borderfloorblack{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/simulated/floor/tiled/dark,/area/lawoffice)
"aiX" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/windowtint{id = "lawyer_tint"; pixel_x = 30; pixel_y = -26; req_access = list(58)},/obj/machinery/newscaster{pixel_y = 30},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/simulated/floor/tiled/dark,/area/lawoffice)