diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 17117546896..337155091a6 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -32,11 +32,17 @@ var/datum/roundinfo/roundinfo = new()
var/pregame_timeleft = 0
+ //automated spawning of mice and roaches
+ var/global/spawn_vermin = 1
+ var/spawning_vermin = 0
+ var/list/vermin_spawn_areas
/datum/controller/gameticker/proc/pregame()
login_music = pick('title1.ogg', 'title2.ogg') // choose title music!
do
+ vermin_spawn_areas = new/list("/area/maintenance","/area/mine/maintenance","/area/crew_quarters/toilet","/area/crew_quarters/locker/locker_toilet")
+
pregame_timeleft = 180
world << "Welcome to the pre-game lobby!"
world << "Please, setup your character and select ready. Game will start in [pregame_timeleft] seconds"
@@ -303,6 +309,36 @@ var/datum/roundinfo/roundinfo = new()
while(!going) sleep(10)
world.Reboot()
+ //randomly spawn vermin in maintenance and other areas
+ //doesn't seem to be working
+ /*if(spawn_vermin && vermin_spawn_areas.len)
+ if(!spawning_vermin)
+ spawning_vermin = 1
+ spawn(rand(10,10)) //between 10 (6000) and 15 (9000) minutes interval
+ var/area_text = pick( text2path(vermin_spawn_areas) )
+ world << area_text
+ var/random_area = pick( typesof(area_text) )
+ world << random_area
+ var/list/turfs = get_area_turfs(random_area)
+ world << turfs.len
+ if(!turfs.len)
+ turfs = get_area_turfs(pick(typesof(pick(vermin_spawn_areas))))
+ world << turfs.len
+ else
+ world << "-----"
+ //
+ if(turfs && turfs.len)
+ var/turf/T = get_random_turf(turfs)
+ world << T
+ //
+ if(prob(100))
+ //spawn a mouse, any of the gray, brown or white varieties
+ new /mob/living/simple_animal/mouse(T)
+ else
+ //spawn a roach
+ new /obj/effect/critter/roach(T)
+ spawning_vermin = 0*/
+
return 1
proc/getfactionbyname(var/name)
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 497b0b7f7c2..ffcad4fc5d2 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -148,6 +148,14 @@
affecting.take_damage(1, 0)
H.UpdateDamageIcon()
H.updatehealth()
+ else if(ismouse(target))
+ var/mob/living/simple_animal/mouse/M = target
+ src.visible_message("\red \icon[src] SPLAT!")
+ M.splat()
+ else if(isroach(target))
+ var/obj/effect/critter/roach/R = target
+ src.visible_message("\red \icon[src] CRUNCH!")
+ R.Die()
playsound(target.loc, 'snap.ogg', 50, 1)
icon_state = "mousetrap"
armed = 0
diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm
index 71aa424c2ab..e915928bb13 100644
--- a/code/modules/critters/critters.dm
+++ b/code/modules/critters/critters.dm
@@ -167,8 +167,12 @@
Die()
..()
+ new /obj/effect/decal/cleanable/mucus(src.loc)
del(src)
+/proc/isroach(var/obj/O)
+ return istype(O,/obj/effect/critter/roach)
+
// We can maybe make these controllable via some console or something
/obj/effect/critter/manhack
name = "viscerator"
diff --git a/code/modules/mob/simple_animal/mouse.dm b/code/modules/mob/simple_animal/mouse.dm
index e5c59eb8c0b..b5044275f59 100644
--- a/code/modules/mob/simple_animal/mouse.dm
+++ b/code/modules/mob/simple_animal/mouse.dm
@@ -1,13 +1,13 @@
/mob/living/simple_animal/mouse
name = "mouse"
- desc = "It's a nasty, ugly, evil, disease-ridden rodent."
+ desc = "It's a small, disease-ridden rodent."
icon_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
speak = list("Squeek!","SQUEEK!","Squeek?")
speak_emote = list("squeeks")
emote_hear = list("squeeks")
- emote_see = list("runs in a circle", "shakes")
+ emote_see = list("runs in a circle", "shakes", "scritches at something")
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
@@ -17,7 +17,7 @@
response_disarm = "gently pushes aside the"
response_harm = "splats the"
density = 0
- var/color //brown, gray and white, leave blank for random
+ var/color = "gray" //brown, gray and white
/mob/living/simple_animal/mouse/Life()
..()
@@ -30,10 +30,6 @@
color = "white"
icon_state = "mouse_white"
-/mob/living/simple_animal/mouse/gray
- color = "gray"
- icon_state = "mouse_gray"
-
/mob/living/simple_animal/mouse/brown
color = "brown"
icon_state = "mouse_brown"
@@ -44,9 +40,13 @@
icon_state = "mouse_[color]"
icon_living = "mouse_[color]"
icon_dead = "mouse_[color]_dead"
+ desc = "It's a small, [color], disease-ridden rodent."
/mob/living/simple_animal/mouse/proc/splat()
src.health = 0
src.stat = DEAD
src.icon_dead = "mouse_[color]_splat"
src.icon_state = "mouse_[color]_splat"
+
+/proc/ismouse(var/obj/O)
+ return istype(O,/mob/living/simple_animal/mouse)