Replaces Mice w/ Rats (#6625)

This commit is contained in:
ParadoxSpace
2019-07-05 16:03:35 -06:00
committed by Werner
parent 4e88af8be2
commit 6916089d4e
72 changed files with 556 additions and 508 deletions

View File

@@ -24,7 +24,7 @@
#define isliving(A) istype(A, /mob/living)
#define ismouse(A) istype(A, /mob/living/simple_animal/mouse)
#define israt(A) istype(A, /mob/living/simple_animal/rat)
#define isnewplayer(A) istype(A, /mob/abstract/new_player)

View File

@@ -186,7 +186,7 @@
//Time of Death constants
//Used with a list in preference datums to track times of death
#define CREW "crew" //Used for crewmembers, AI, cyborgs, nymphs, antags
#define ANIMAL "animal" //Used for mice and any other simple animals
#define ANIMAL "animal" //Used for rats and any other simple animals
#define MINISYNTH "minisynth"//Used for drones and pAIs
#define RESPAWN_ANIMAL 3000

View File

@@ -84,8 +84,8 @@ var/list/gamemode_cache = list()
var/allow_drone_spawn = 1 //assuming the admin allow them to.
var/drone_build_time = 1200 //A drone will become available every X ticks since last drone spawn. Default is 2 minutes.
var/disable_player_mice = 0
var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech
var/disable_player_rats = 0
var/uneducated_rats = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech
var/usealienwhitelist = 0
var/limitalienplayers = 0
@@ -479,7 +479,7 @@ var/list/gamemode_cache = list()
if ("respawn_delay")
config.respawn_delay = text2num(value)
if("hacked_drones_limit")
config.hacked_drones_limit = text2num(value)
@@ -686,11 +686,11 @@ var/list/gamemode_cache = list()
if("nl_finish_hour")
config.nl_finish = text2num(value)
if("disable_player_mice")
config.disable_player_mice = 1
if("disable_player_rats")
config.disable_player_rats = 1
if("uneducated_mice")
config.uneducated_mice = 1
if("uneducated_rats")
config.uneducated_rats = 1
if("use_discord_pins")
config.use_discord_pins = 1

View File

@@ -8,7 +8,7 @@
var/list/slept = list()
var/list/currentrun = list()
var/list/all_mice = list() // Contains all *living* mice.
var/list/all_rats = list() // Contains all *living* rats.
var/list/mannequins = list() //Contains all mannequins used by character preview
var/list/greatworms = list()
var/list/greatasses = list()

View File

@@ -42,7 +42,7 @@ var/datum/controller/subsystem/traumas/SStraumas
"lizards" = typecacheof(list(/mob/living/simple_animal/lizard)),
"cats" = typecacheof(list(/mob/living/simple_animal/cat, /mob/living/simple_animal/familiar/pet/cat, /mob/living/simple_animal/cat/kitten)),
"robots" = typecacheof(list(/mob/living/silicon,/mob/living/bot, /mob/living/simple_animal/hostile/retaliate/malf_drone)),
"pests" = typecacheof(list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/mouse, /mob/living/carbon/alien/diona)),
"pests" = typecacheof(list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/rat, /mob/living/carbon/alien/diona)),
"paranormals" = typecacheof(list(/mob/living/simple_animal/hostile/scarybat, /mob/living/simple_animal/hostile/true_changeling,
/mob/living/simple_animal/hostile/mimic, /mob/living/simple_animal/hostile/faithless,
/mob/living/simple_animal/construct)),

View File

@@ -578,6 +578,6 @@
..()
mind.assigned_role = "Familiar"
/mob/living/simple_animal/mouse/familiar/familiar/mind_initialize()
/mob/living/simple_animal/rat/familiar/familiar/mind_initialize()
..()
mind.assigned_role = "Familiar"

View File

@@ -25,7 +25,7 @@
possible_wanted_items = list(
/mob/living/simple_animal/mushroom = TRADER_THIS_TYPE,
/mob/living/simple_animal/tomato = TRADER_THIS_TYPE,
/mob/living/simple_animal/mouse/king = TRADER_THIS_TYPE,
/mob/living/simple_animal/rat/king = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/diyaab = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/shantak = TRADER_THIS_TYPE,
/mob/living/simple_animal/hostile/samak = TRADER_THIS_TYPE,
@@ -44,7 +44,7 @@
/mob/living/simple_animal/cat/kitten = TRADER_THIS_TYPE,
/mob/living/simple_animal/crab = TRADER_THIS_TYPE,
/mob/living/simple_animal/lizard = TRADER_THIS_TYPE,
/mob/living/simple_animal/mouse = TRADER_THIS_TYPE,
/mob/living/simple_animal/rat = TRADER_THIS_TYPE,
/mob/living/simple_animal/parrot = TRADER_THIS_TYPE,
/mob/living/simple_animal/tindalos = TRADER_THIS_TYPE,
/mob/living/simple_animal/cow = TRADER_THIS_TYPE,

View File

@@ -53,7 +53,7 @@
name = "pylon"
desc = "A floating crystal that hums with an unearthly energy"
description_antag = "A pylon can be upgraded into a magical defensive turret that shoots anyone opposing the cult\
</br>Upgrading a pylon requires a sacrifice. Bring it a small organic creature, like a monkey or mouse. Use the creature on the pylon, or drag and drop to present it.\
</br>Upgrading a pylon requires a sacrifice. Bring it a small organic creature, like a monkey or rat. Use the creature on the pylon, or drag and drop to present it.\
</br>Once the sacrifice is accepted, kill it to complete the process. This will gib its body and make a very visible mess. After this point the pylon is fixed to the floor and cant be moved\
</br>The pylon will fire weak beams that are harmless to the cult. In addition it can be upgraded even more by shooting it with a laser, which will give it a limited number of extra-power shots."
@@ -427,7 +427,7 @@
attackpylon(user, W.force, W)
//Mousedrop so that constructs can drag mice out of maintenance to make turrets
//Mousedrop so that constructs can drag rats out of maintenance to make turrets
/obj/structure/cult/pylon/MouseDrop_T(var/atom/movable/C, mob/user)
if (istype(C, /mob/living))
present_sacrifice(user, C)

View File

@@ -36,7 +36,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
desc = "It's a floor-mounted device for projecting holographic images."
icon_state = "holopad0"
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
layer = TURF_LAYER+0.1 //Preventing rats and drones from sneaking under them.
var/power_per_hologram = 500 //per usage per hologram
idle_power_usage = 5

View File

@@ -193,6 +193,6 @@
to_chat(usr, "<span class='notice'>Transfer rate set to [src.transfer_amount] u/sec</span>")
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through.
if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, rats, drones, and the like through.
return 1
return ..()

View File

@@ -642,7 +642,7 @@
//Result type is one of the following:
//0 unfinished, no result yet
//1 Standard modification cooking. eg Fried Donk Pocket, Baked wheat, etc
//2 Modification but with a new object that's an inert copy of the old. Generally used for deepfried mice
//2 Modification but with a new object that's an inert copy of the old. Generally used for deepfried rats
//3 Combination cooking, EG Donut Bread, Donk pocket pizza, etc
//4:Specific recipe cooking. EG: Turning raw potato sticks into fries

View File

@@ -17,10 +17,10 @@
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
/obj/effect/decal/remains/mouse
name = "mouse skeleton"
/obj/effect/decal/remains/rat
name = "rat skeleton"
desc = "Looks like the remains of a small rodent. It doesn't squeak anymore."
icon = 'icons/mob/npc/mouse.dmi'
icon = 'icons/mob/npc/rat.dmi'
icon_state = "skeleton"
/obj/effect/decal/remains/lizard

View File

@@ -1043,7 +1043,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]")))
P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]")))
for(var/mob/M in player_list)
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice
if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to rats
if(istype(M, /mob/abstract/new_player))
continue
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")

View File

@@ -6,7 +6,7 @@
w_class = 2
matter = list("glass" = 200)
flags = NOBLUDGEON
var/list/accept_mobs = list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse)
var/list/accept_mobs = list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/rat)
var/contains = 0 // 0 = nothing, 1 = money, 2 = animal, 3 = spiderling
drop_sound = 'sound/items/drop/glass.ogg'

View File

@@ -137,7 +137,7 @@
"Hephaestus Industries", "Idris Incorporated", "Glorsh Omega II", "the Jargon Federation", "the People's Republic of Adhomai", "the Adhomai Liberation Army", "the Izweski Hegemony",
"the Zo'ra Hive","the Frontier Alliance", "Digital Dingo", "Optimum Jeffrey", "Lemmy and the Clockworks", "President Hadii", "King Azunja","Supreme Commander Nated'Hakhan",
"Lord-Regent Not'zar","Jesus Christ","Santa Claus","Mrs. Claus","Sandy Claws","Buddha","Gary","Jesus Christ!","the True Queen of Biesel, God-Lady Seon-rin von Illdenberg, First of Her Name",
"Admiral Frost","Pirate King Frost", "The Secret NanoTrasen Cabal of Duty Officers", "The Society for the Preservation of Mice", "Officer Beepsky","Lieutenant Columbo","B.O.B","Runtime",
"Admiral Frost","Pirate King Frost", "The Secret NanoTrasen Cabal of Duty Officers", "The Society for the Preservation of Rats", "Officer Beepsky","Lieutenant Columbo","B.O.B","Runtime",
"Bones","Chauncey","Ian","Pun Pun","Nup Nup","Waldo","Odlaw","Crew of the NSS Exodus", "Custodial Staff of the NTCC Odin","ERT Phoenix","grey slime (357)","Bob the Blob","People for the Ethical Treatment of Bluespace Bears",
"Mr. Clown and Mrs. Mime from New Puerto Rico","the Grinch","the Krampus","Satan","Mega-Satan","<span class='danger'>\[BENEFACTOR REDACTED]\</span>","Bluespace Cat","Union of Bluespace Technicians Tau Ceti","Robo Mickey Mouse")
var/pick_emotion = pick("love","platonic admiration","approval","love (not in a sexual way or anything, though)","apathy", "schadenfreude","love","God's blessing","Santa's blessing","Non-demoninational deity's blessing","love","compassion","appreciation",
@@ -260,9 +260,9 @@
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/shoes/galoshes,
/mob/living/simple_animal/lizard,
/mob/living/simple_animal/mouse/brown,
/mob/living/simple_animal/mouse/gray,
/mob/living/simple_animal/mouse/white,
/mob/living/simple_animal/rat/brown,
/mob/living/simple_animal/rat/gray,
/mob/living/simple_animal/rat/white,
/obj/item/weapon/xmasgift/small,
/obj/item/weapon/tank/jetpack/void,
/obj/item/weapon/xmasgift/large,

View File

@@ -135,7 +135,7 @@
icon = 'icons/obj/items.dmi'
icon_base = "small"
icon_state = "small0"
desc = "A small mechanical trap thas is used to catch small animals like mice, lizards, chick and spiderlings."
desc = "A small mechanical trap thas is used to catch small animals like rats, lizards, chick and spiderlings."
throwforce = 2
force = 1
w_class = 2
@@ -145,7 +145,7 @@
time_to_escape = 3 // Minutes
var/breakout = FALSE
var/last_shake = 0
var/list/allowed_mobs = list(/mob/living/simple_animal/mouse, /mob/living/simple_animal/chick, /mob/living/simple_animal/lizard)
var/list/allowed_mobs = list(/mob/living/simple_animal/rat, /mob/living/simple_animal/chick, /mob/living/simple_animal/lizard)
var/release_time = 0
var/list/resources = list(rods = 6)
var/spider = TRUE
@@ -157,7 +157,7 @@
/obj/item/weapon/trap/animal/update_icon()
icon = initial(icon)
icon_state = "[icon_base][deployed]"
icon_state = "[icon_base][deployed]"
var/datum/L = captured ? captured.resolve() : null
if (!L)
deployed = FALSE
@@ -169,7 +169,7 @@
if(isliving(L))
var/mutable_appearance/MA = new(L)
MA.layer = FLOAT_LAYER
MA.plane = FLOAT_PLANE
MA.plane = FLOAT_PLANE
underlays.Cut()
underlays += MA
@@ -196,7 +196,7 @@
else if (istype(L, /obj/effect/spider/spiderling))
var/obj/effect/spider/spiderling/S = L
to_chat(user, "<span class='notice'>\The [src] has [S] and it is alive.</span>")
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")

View File

@@ -9,7 +9,7 @@
explosion_resistance = 5
var/list/mobs_can_pass = list(
/mob/living/carbon/slime,
/mob/living/simple_animal/mouse,
/mob/living/simple_animal/rat,
/mob/living/silicon/robot/drone
)

View File

@@ -81,7 +81,7 @@
src.set_dir(turn(src.dir, 90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(israt(usr))
return
if(!usr || !isturf(usr.loc))
return
@@ -258,4 +258,4 @@
add_overlay(stool_cache[cache_key])
else
icon_state = initial(icon_state)
icon_state = initial(icon_state)

View File

@@ -36,7 +36,7 @@ var/global/list/random_junk
random_junk = subtypesof(/obj/item/trash)
random_junk += typesof(/obj/item/weapon/cigbutt)
random_junk += /obj/effect/decal/cleanable/spiderling_remains
random_junk += /obj/effect/decal/remains/mouse
random_junk += /obj/effect/decal/remains/rat
random_junk += /obj/effect/decal/remains/robot
random_junk -= /obj/item/trash/plate
random_junk -= /obj/item/trash/snack_bowl

View File

@@ -25,8 +25,8 @@
return
var/types = target.find_type()
if(ismouse(target))
var/mob/living/simple_animal/mouse/M = target
if(israt(target))
var/mob/living/simple_animal/rat/M = target
visible_message("<span class='danger'>SPLAT!</span>")
M.splat()
else
@@ -87,7 +87,7 @@
/obj/item/device/assembly/mousetrap/Crossed(AM as mob|obj)
if(armed)
if(ismouse(AM))
if(israt(AM))
triggered(AM)
else if(istype(AM, /mob/living))
var/mob/living/L = AM

View File

@@ -445,7 +445,7 @@ STOCK_ITEM_COMMON(target, 2)
STOCK_ITEM_COMMON(snacks, 4)
//Snackboxes are much more likely to spawn on tables than in crates.
//This ensures the cargo bay will have a supply of food in an obtainable place for animals
//allows nymphs and mice to raid it for nutrients, and thus gives playermice more
//allows nymphs and rats to raid it for nutrients, and thus gives player rats more
//reason to infest the warehouse
if (CS && prob(65))
if (!isturf(L))

View File

@@ -72,7 +72,7 @@ var/list/global/random_stock_large = list()
var/list/warehouseturfs = list()
var/list/infest_mobs_minor = list(
/mob/living/simple_animal/mouse = 1,
/mob/living/simple_animal/rat = 1,
/mob/living/simple_animal/lizard = 0.5,
/mob/living/simple_animal/yithian = 0.7,
/mob/living/simple_animal/tindalos = 0.6,

View File

@@ -24,7 +24,7 @@
var/moving = null
var/adminobs = null
var/area = null
var/time_died_as_mouse = 0
var/time_died_as_rat = 0
var/adminhelped = NOT_ADMINHELPED

View File

@@ -1,4 +1,4 @@
#define INFESTATION_MICE "mice"
#define INFESTATION_MICE "rats"
#define INFESTATION_LIZARDS "lizards"
#define INFESTATION_SPACE_BATS "space bats"
#define INFESTATION_SPIDERLINGS "spiderlings"
@@ -68,14 +68,16 @@
for(var/i = 1, i < rand(6,8),i++)
chosen_mob_types += /mob/living/simple_animal/lizard
if(INFESTATION_MICE)
event_name = "Mouse Nest"
event_name = "Rat Nest"
chosen_verb = "have been breeding in"
var/list/rat_breeds = list(
/mob/living/simple_animal/mouse/gray = 4,
/mob/living/simple_animal/mouse/brown = 2,
/mob/living/simple_animal/mouse/white = 1
/mob/living/simple_animal/rat/gray = 4,
/mob/living/simple_animal/rat/brown = 2,
/mob/living/simple_animal/rat/white = 3,
/mob/living/simple_animal/rat/hooded = 1,
/mob/living/simple_animal/rat/irish = 2,
)
for(var/i = 1, i < rand(6,12),i++)
for(var/i = 1, i < rand(8,24),i++)
chosen_mob_types += pickweight(rat_breeds)
if(INFESTATION_SLIMES)
event_name = "Slime Leak"

View File

@@ -114,7 +114,7 @@ I said no!
/datum/recipe/mouseburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/meat/mice
/obj/item/weapon/reagent_containers/food/snacks/meat/rat
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/mouse

View File

@@ -107,8 +107,8 @@
return
if(!istype(target))
if(istype(target, /mob/living/simple_animal/mouse))
new /obj/effect/decal/remains/mouse(get_turf(target))
if(israt(target))
new /obj/effect/decal/remains/rat(get_turf(target))
qdel(target)
else if(istype(target, /mob/living/simple_animal/lizard))
new /obj/effect/decal/remains/lizard(get_turf(target))

View File

@@ -786,8 +786,8 @@ var/list/worths = list(
/mob/living/simple_animal/hostile/bear/spatial = 2000,
/mob/living/simple_animal/hostile = 700,
/mob/living/simple_animal/construct = 10000,
/mob/living/simple_animal/mouse/king = 5000,
/mob/living/simple_animal/mouse = 10,
/mob/living/simple_animal/rat/king = 5000,
/mob/living/simple_animal/rat = 10,
/mob/living/simple_animal/borer = 10000,
/mob/living/simple_animal/corgi/Ian = 1000, //Ian is valuable,
/mob/living/simple_animal/spiderbot = 3000,

View File

@@ -448,15 +448,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(src, "<span class='notice'>Heat Capacity: [round(environment.heat_capacity(),0.1)]</span>")
/mob/abstract/observer/verb/become_mouse()
set name = "Become mouse"
set name = "Become Rat"
set category = "Ghost"
if(config.disable_player_mice)
to_chat(src, "<span class='warning'>Spawning as a mouse is currently disabled.</span>")
if(config.disable_player_rats)
to_chat(src, "<span class='warning'>Spawning as a rat is currently disabled.</span>")
return
if(!ROUND_IS_STARTED)
to_chat(src, "<span class='warning'>You can not spawn as a mouse before round start!</span>")
to_chat(src, "<span class='warning'>You can not spawn as a rat before round start!</span>")
return
if(!MayRespawn(1, ANIMAL))
@@ -464,31 +464,31 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/turf/T = get_turf(src)
if(!T || (T.z in current_map.admin_levels))
to_chat(src, "<span class='warning'>You may not spawn as a mouse on this Z-level.</span>")
to_chat(src, "<span class='warning'>You may not spawn as a rat on this Z-level.</span>")
return
var/response = alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?","Squeek!","Nope!")
var/response = alert(src, "Are you -sure- you want to become a rat?","Are you sure you want to squeek?","Squeek!","Nope!")
if(response != "Squeek!") return //Hit the wrong key...again.
//find a viable mouse candidate
var/mob/living/simple_animal/mouse/host
var/mob/living/simple_animal/rat/host
var/obj/machinery/atmospherics/unary/vent_pump/spawnpoint = find_mouse_spawnpoint(T.z)
if (spawnpoint)
host = new /mob/living/simple_animal/mouse(spawnpoint.loc)
host = new /mob/living/simple_animal/rat(spawnpoint.loc)
else
to_chat(src, "<span class='warning'>Unable to find any safe, unwelded vents to spawn mice at. The station must be quite a mess! Trying again might work, if you think there's still a safe place. </span>")
to_chat(src, "<span class='warning'>Unable to find any safe, unwelded vents to spawn rats at. The station must be quite a mess! Trying again might work, if you think there's still a safe place. </span>")
if(host)
if(config.uneducated_mice)
if(config.uneducated_rats)
host.universal_understand = 0
announce_ghost_joinleave(src, 0, "They are now a mouse.")
announce_ghost_joinleave(src, 0, "They are now a rat.")
host.ckey = src.ckey
to_chat(host, "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>")
to_chat(host, "<span class='info'>You are now a rat. Though you may interact with players, do not give any hints away that you are more than a simple rodent. Find food, avoid cats, and try to survive!</span>")
/proc/find_mouse_spawnpoint(var/ZLevel)
//This function will attempt to find a good spawnpoint for mice, and prevent them from spawning in closed vent systems with no escape
//This function will attempt to find a good spawnpoint for rats, and prevent them from spawning in closed vent systems with no escape
//It does this by bruteforce: Picks a random vent, tests if it has enough connections, if not, repeat
//Continues either until a valid one is found (in which case we return it), or until we hit a limit on attempts..
//If we hit the limit without finding a valid one, then the best one we found is selected

View File

@@ -63,7 +63,7 @@ var/list/holder_mob_icon_cache = list()
/obj/item/weapon/holder/drone
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5)
/obj/item/weapon/holder/mouse
/obj/item/weapon/holder/rat
w_class = 1
/obj/item/weapon/holder/borer
@@ -468,35 +468,44 @@ var/list/holder_mob_icon_cache = list()
slot_flags = SLOT_HEAD
w_class = 3
//Holders for mice
/obj/item/weapon/holder/mouse
name = "mouse"
//Holders for rats
/obj/item/weapon/holder/rat
name = "rat"
desc = "It's a fuzzy little critter."
desc_dead = "It's filthy vermin, throw it in the trash."
icon = 'icons/mob/npc/mouse.dmi'
icon_state = "mouse_brown_sleep"
item_state = "mouse_brown"
icon_state_dead = "mouse_brown_dead"
icon = 'icons/mob/npc/rat.dmi'
icon_state = "rat_brown_sleep"
item_state = "rat_brown"
icon_state_dead = "rat_brown_dead"
slot_flags = SLOT_EARS
contained_sprite = 1
origin_tech = list(TECH_BIO = 2)
w_class = 1
/obj/item/weapon/holder/mouse/white
icon_state = "mouse_white_sleep"
item_state = "mouse_white"
icon_state_dead = "mouse_white_dead"
/obj/item/weapon/holder/rat/white
icon_state = "rat_white_sleep"
item_state = "rat_white"
icon_state_dead = "rat_white_dead"
/obj/item/weapon/holder/mouse/gray
icon_state = "mouse_gray_sleep"
item_state = "mouse_gray"
icon_state_dead = "mouse_gray_dead"
/obj/item/weapon/holder/rat/gray
icon_state = "rat_gray_sleep"
item_state = "rat_gray"
icon_state_dead = "rat_gray_dead"
/obj/item/weapon/holder/mouse/brown
icon_state = "mouse_brown_sleep"
item_state = "mouse_brown"
icon_state_dead = "mouse_brown_dead"
/obj/item/weapon/holder/rat/brown
icon_state = "rat_brown_sleep"
item_state = "rat_brown"
icon_state_dead = "rat_brown_dead"
/obj/item/weapon/holder/rat/hooded
icon_state = "rat_hooded_sleep"
item_state = "rat_hooded"
icon_state_dead = "rat_hooded_dead"
/obj/item/weapon/holder/rat/irish
icon_state = "rat_irish_sleep"
item_state = "rat_irish"
icon_state_dead = "rat_irish_dead"
//Lizards

View File

@@ -394,7 +394,7 @@ emp_act
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
if(!istype(src,/mob/living/simple_animal/rat))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(M),ckey_target=key_name(src))
//thrown weapon embedded object code.

View File

@@ -40,7 +40,7 @@
/mob/living/carbon/human/say_understands(var/mob/other,var/datum/language/speaking = null)
if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak.
if(has_brain_worms()) //Brain worms translate everything. Even rat and alien speak.
return 1
if(species.can_understand(other))

View File

@@ -189,7 +189,7 @@
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
if(!istype(src,/mob/living/simple_animal/rat))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(M),ckey_target=key_name(src))
// Begin BS12 momentum-transfer code.

View File

@@ -58,7 +58,7 @@
plastic.add_charge(1000)
else if(istype(M,/mob/living/simple_animal/lizard) || (istype(M,/mob/living/simple_animal/mouse) && M.mob_size <= 2))
else if(istype(M,/mob/living/simple_animal/lizard) || (istype(M,/mob/living/simple_animal/rat) && M.mob_size <= 2))
src.loc.visible_message("<span class='danger'>[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.</span>","<span class='danger'>It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.</span>")
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
qdel(M)

View File

@@ -181,8 +181,8 @@
butchering_products = list(/obj/item/stack/material/animalhide/cat = 2)
/mob/living/simple_animal/mouse/familiar
name = "ancient mouse"
/mob/living/simple_animal/rat/familiar
name = "ancient rat"
desc = "A small rodent. It looks very old."
body_color = "gray"
@@ -205,7 +205,7 @@
supernatural = 1
/mob/living/simple_animal/mouse/familiar/Initialize()
/mob/living/simple_animal/rat/familiar/Initialize()
. = ..()
add_spell(new /spell/targeted/heal_target, "const_spell_ready")
add_spell(new /spell/targeted/heal_target/area, "const_spell_ready")

View File

@@ -19,7 +19,6 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
//var/mob/living/simple_animal/mouse/movement_target
var/mob/flee_target
min_oxy = 16 //Require atleast 16kPA oxygen
minbodytemp = 223 //Below -50 Degrees Celcius
@@ -30,21 +29,20 @@
metabolic_factor = 0.75
max_nutrition = 60
density = 0
var/mob/living/simple_animal/mouse/mousetarget = null
var/mob/living/simple_animal/rat/mousetarget = null
seek_speed = 5
pass_flags = PASSTABLE
possession_candidate = 1
butchering_products = list(/obj/item/stack/material/animalhide/cat = 2)
/mob/living/simple_animal/cat/think()
//MICE!
..()
if (!stat)
for(var/mob/living/simple_animal/mouse/snack in oview(src,7))
for(var/mob/living/simple_animal/rat/snack in oview(src,7))
if(snack.stat != DEAD && prob(65))//The probability allows her to not get stuck target the first mouse, reducing exploits
mousetarget = snack
movement_target = snack
foodtarget = 0 //chasing mice takes precedence over eating food
foodtarget = 0 //chasing rats takes precedence over eating food
if(prob(15))
audible_emote(pick("hisses and spits!","mrowls fiercely!","eyes [snack] hungrily."))
@@ -94,7 +92,7 @@
/mob/living/simple_animal/cat/proc/attack_mice()
if((src.loc) && isturf(src.loc))
if(!stat && !resting && !buckled)
for(var/mob/living/simple_animal/mouse/M in oview(src,1))
for(var/mob/living/simple_animal/rat/M in oview(src,1))
if(M.stat != DEAD)
M.splat()
visible_emote(pick("bites \the [M]!","toys with \the [M].","chomps on \the [M]!"),0)
@@ -107,7 +105,7 @@
visible_emote("licks [get_pronoun(POSESSIVE_ADJECTIVE)] lips and hungrily glares at [holder]'s [thing.name]",0)
/mob/living/simple_animal/cat/Released()
//A thrown cat will immediately attack mice near where it lands
//A thrown cat will immediately attack rats near where it lands
handle_movement_target()
addtimer(CALLBACK(src, .proc/attack_mice), 3)
..()
@@ -175,7 +173,7 @@
var/current_dist = get_dist(src, friend)
if (movement_target != friend)
if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/mouse) && (friend in oview(src)))
if (current_dist > follow_dist && !istype(movement_target, /mob/living/simple_animal/rat) && (friend in oview(src)))
//stop existing movement
walk_to(src,0)
turns_since_scan = 0

View File

@@ -1,311 +1,323 @@
/mob/living/simple_animal/mouse
name = "mouse"
real_name = "mouse"
desc = "It's a small, disgusting rodent, often found being annoying, and aiding in the spread of disease."
icon = 'icons/mob/npc/mouse.dmi'
icon_state = "mouse_gray"
item_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
icon_rest = "mouse_gray_sleep"
can_nap = 1
speak = list("Squeek!","SQUEEK!","Squeek?")
speak_emote = list("squeeks","squeeks","squiks")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
var/soft_squeaks = list('sound/effects/creatures/mouse_squeaks_1.ogg',
'sound/effects/creatures/mouse_squeaks_2.ogg',
'sound/effects/creatures/mouse_squeaks_3.ogg',
'sound/effects/creatures/mouse_squeaks_4.ogg')
var/last_softsqueak = null//Used to prevent the same soft squeak twice in a row
var/squeals = 5//Spam control.
var/maxSqueals = 2//SPAM PROTECTION
var/last_squealgain = 0// #TODO-FUTURE: Remove from life() once something else is created
var/squeakcooldown = 0
pass_flags = PASSTABLE
speak_chance = 5
turns_per_move = 5
see_in_dark = 6
maxHealth = 5
health = 5
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/mice
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps on"
density = 0
meat_amount = 1 // Mice are small so you will get less meat
var/body_color //brown, gray and white, leave blank for random
layer = MOB_LAYER
mob_size = MOB_MINISCULE
min_oxy = 16 //Require atleast 16kPA oxygen
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
universal_understand = 1
holder_type = /obj/item/weapon/holder/mouse
digest_factor = 0.05
min_scan_interval = 2
max_scan_interval = 20
seek_speed = 1
max_nutrition = 17
can_pull_size = 1
can_pull_mobs = MOB_PULL_NONE
var/decompose_time = 18000
kitchen_tag = "rodent"
/mob/living/simple_animal/mouse/Life()
if(..())
if(client)
walk_to(src,0)
//Player-animals don't do random speech normally, so this is here
//Player-controlled mice will still squeak, but less often than NPC mice
if (stat == CONSCIOUS && prob(speak_chance*0.05))
squeak_soft(0)
if(is_ventcrawling == 0)
sight = initial(sight) // Returns mouse sight to normal when they leave a vent
if (squeals < maxSqueals)
var/diff = world.time - last_squealgain
if (diff > 600)
squeals++
last_squealgain = world.time
else
if ((world.time - timeofdeath) > decompose_time)
dust()
/mob/living/simple_animal/mouse/Destroy()
SSmob.all_mice -= src
return ..()
//Pixel offsetting as they scamper around
/mob/living/simple_animal/mouse/Move()
if(..())
if (prob(50))
var/new_pixelx = pixel_x
new_pixelx += rand(-2,2)
new_pixelx = Clamp(new_pixelx, -10, 10)
animate(src, pixel_x = new_pixelx, time = 0.5)
else
var/new_pixely = pixel_y
new_pixely += rand(-2,2)
new_pixely = Clamp(new_pixely, -4, 14)
animate(src, pixel_y = new_pixely, time = 0.5)
/mob/living/simple_animal/mouse/Initialize()
. = ..()
nutrition = rand(max_nutrition*0.25, max_nutrition*0.75)
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
real_name = name
if(!body_color)
body_color = pick( list("brown","gray","white") )
icon_state = "mouse_[body_color]"
item_state = "mouse_[body_color]"
icon_living = "mouse_[body_color]"
icon_rest = "mouse_[body_color]_sleep"
icon_dead = "mouse_[body_color]_dead"
if (body_color == "brown")
holder_type = /obj/item/weapon/holder/mouse/brown
if (body_color == "gray")
holder_type = /obj/item/weapon/holder/mouse/gray
if (body_color == "white")
holder_type = /obj/item/weapon/holder/mouse/white
//verbs += /mob/living/simple_animal/mouse/proc/squeak
//verbs += /mob/living/simple_animal/mouse/proc/squeak_soft
//verbs += /mob/living/simple_animal/mouse/proc/squeak_loud(1)
SSmob.all_mice += src
/mob/living/simple_animal/mouse/speak_audio()
squeak_soft(0)
/mob/living/simple_animal/mouse/beg(var/atom/thing, var/atom/holder)
squeak_soft(0)
visible_emote("squeaks timidly, sniffs the air and gazes longingly up at \the [thing.name].",0)
/mob/living/simple_animal/mouse/attack_hand(mob/living/carbon/human/M as mob)
if (src.stat == DEAD)//If the mouse is dead, we don't pet it, we just pickup the corpse on click
get_scooped(M, usr)
return
else
..()
/mob/living/simple_animal/mouse/proc/splat()
src.health = 0
src.death()
src.icon_dead = "mouse_[body_color]_splat"
src.icon_state = "mouse_[body_color]_splat"
if(client)
client.time_died_as_mouse = world.time
//Plays a sound.
//This is triggered when a mob steps on an NPC mouse, or manually by a playermouse
/mob/living/simple_animal/mouse/proc/squeak(var/manual = 1)
if (stat == CONSCIOUS)
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 2 SECONDS
playsound(src, 'sound/effects/mousesqueek.ogg', 70, 1)
if (manual)
log_say("[key_name(src)] squeaks! ",ckey=key_name(src))
//Plays a random selection of four sounds, at a low volume
//This is triggered randomly periodically by any mouse, or manually
/mob/living/simple_animal/mouse/proc/squeak_soft(var/manual = 1)
if (stat != DEAD) //Soft squeaks are allowed while sleeping
var/list/new_squeaks = last_softsqueak ? soft_squeaks - last_softsqueak : soft_squeaks
var/sound = pick(new_squeaks)
last_softsqueak = sound
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 2 SECONDS
playsound(src, sound, 5, 1, -4.6)
if (manual)
log_say("[key_name(src)] squeaks softly! ",ckey=key_name(src))
//Plays a loud sound
//Triggered manually, when a mouse dies, or rarely when its stepped on
/mob/living/simple_animal/mouse/proc/squeak_loud(var/manual = 0)
if (stat == CONSCIOUS)
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 4 SECONDS
if (squeals > 0 || !manual)
playsound(src, 'sound/effects/creatures/mouse_squeak_loud.ogg', 50, 1)
squeals --
log_say("[key_name(src)] squeals! ",ckey=key_name(src))
else
to_chat(src, "<span class='warning'>Your hoarse mousey throat can't squeal just now, stop and take a breath!</span>")
//Wrapper verbs for the squeak functions
/mob/living/simple_animal/mouse/verb/squeak_loud_verb()
set name = "Squeal!"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak_loud(1)
/mob/living/simple_animal/mouse/verb/squeak_soft_verb()
set name = "Soft Squeaking"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak_soft(1)
/mob/living/simple_animal/mouse/verb/squeak_verb()
set name = "Squeak"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak(1)
/mob/living/simple_animal/mouse/Crossed(AM as mob|obj)
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
to_chat(M, "<span class='notice'>\icon[src] Squeek!</span>")
poke(1) //Wake up if stepped on
if (prob(95))
squeak(0)
else
squeak_loud(0)//You trod on its tail
if(!health)
return
if(istype(AM,/mob/living/simple_animal/mouse/king))
var/mob/living/simple_animal/mouse/king/K = AM
if(!K.health)
return
src.visible_message("<span class='warning'>[src] joins the [K.swarm_name] of \the [K]</span>", \
"<span class='notice'>We join our brethren in \the [K.swarm_name]. Long live \the [K].</span>")
K.absorb(src)
..()
/mob/living/simple_animal/mouse/death()
layer = MOB_LAYER
if (stat != DEAD && (ckey || prob(50)))
squeak_loud(0)//deathgasp
if(client)
client.time_died_as_mouse = world.time
SSmob.all_mice -= src
..()
/mob/living/simple_animal/mouse/dust()
..(anim = "dust_[body_color]", remains = /obj/effect/decal/remains/mouse, iconfile = 'icons/mob/npc/mouse.dmi')
/*
* Mouse types
*/
/mob/living/simple_animal/mouse/white
body_color = "white"
icon_state = "mouse_white"
icon_rest = "mouse_white_sleep"
holder_type = /obj/item/weapon/holder/mouse/white
/mob/living/simple_animal/mouse/gray
body_color = "gray"
icon_state = "mouse_gray"
icon_rest = "mouse_gray_sleep"
holder_type = /obj/item/weapon/holder/mouse/gray
/mob/living/simple_animal/mouse/brown
body_color = "brown"
icon_state = "mouse_brown"
icon_rest = "mouse_brown_sleep"
holder_type = /obj/item/weapon/holder/mouse/brown
/mob/living/simple_animal/mouse/brown/Tom
name = "Tom"
real_name = "Tom"
desc = "Jerry the cat is not amused."
/mob/living/simple_animal/mouse/brown/Tom/Initialize()
. = ..()
// Change my name back, don't want to be named Tom (666)
name = initial(name)
real_name = name
/mob/living/simple_animal/mouse/cannot_use_vents()
return
/mob/living/simple_animal/rat
name = "rat"
real_name = "rat"
desc = "It's a rather large, long-tailed rodent, often found rooting through tunnels, and aiding in the destruction of the culinary arts."
icon = 'icons/mob/npc/rat.dmi'
icon_state = "rat_gray"
item_state = "rat_gray"
icon_living = "rat_gray"
icon_dead = "rat_gray_dead"
icon_rest = "rat_gray_sleep"
can_nap = 1
speak = list("Squeek!","SQUEEK!","Squeek?")
speak_emote = list("squeeks","squeeks","squiks")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
var/soft_squeaks = list('sound/effects/creatures/rat_squeaks_1.ogg',
'sound/effects/creatures/rat_squeaks_2.ogg',
'sound/effects/creatures/rat_squeaks_3.ogg',
'sound/effects/creatures/rat_squeaks_4.ogg')
var/last_softsqueak = null//Used to prevent the same soft squeak twice in a row
var/squeals = 5//Spam control.
var/maxSqueals = 2//SPAM PROTECTION
var/last_squealgain = 0// #TODO-FUTURE: Remove from life() once something else is created
var/squeakcooldown = 0
pass_flags = PASSTABLE
speak_chance = 3
turns_per_move = 5
see_in_dark = 6
maxHealth = 10
health = 10
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/rat
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps on"
density = 0
meat_amount = 2 // Rats are a bit bigger, so a bit more meat for dreg-feeding.
var/body_color //brown, gray, white, american irish, hooded leave blank for random
layer = MOB_LAYER
mob_size = MOB_MINISCULE
min_oxy = 16 //Require atleast 16kPA oxygen
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
universal_understand = 1
holder_type = /obj/item/weapon/holder/rat
digest_factor = 0.05
min_scan_interval = 2
max_scan_interval = 20
seek_speed = 1
max_nutrition = 17
can_pull_size = 1
can_pull_mobs = MOB_PULL_NONE
var/decompose_time = 18000
kitchen_tag = "rodent"
/mob/living/simple_animal/rat/Life()
if(..())
if(client)
walk_to(src,0)
//Player-animals don't do random speech normally, so this is here
//Player-controlled rats will still squeak, but less often than NPC rats
if (stat == CONSCIOUS && prob(speak_chance*0.05))
squeak_soft(0)
if(is_ventcrawling == 0)
sight = initial(sight) // Returns mouse sight to normal when they leave a vent
if (squeals < maxSqueals)
var/diff = world.time - last_squealgain
if (diff > 600)
squeals++
last_squealgain = world.time
else
if ((world.time - timeofdeath) > decompose_time)
dust()
/mob/living/simple_animal/rat/Destroy()
SSmob.all_rats -= src
return ..()
//Pixel offsetting as they scamper around
/mob/living/simple_animal/rat/Move()
if(..())
if (prob(50))
var/new_pixelx = pixel_x
new_pixelx += rand(-2,2)
new_pixelx = Clamp(new_pixelx, -10, 10)
animate(src, pixel_x = new_pixelx, time = 0.5)
else
var/new_pixely = pixel_y
new_pixely += rand(-2,2)
new_pixely = Clamp(new_pixely, -4, 14)
animate(src, pixel_y = new_pixely, time = 0.5)
/mob/living/simple_animal/rat/Initialize()
. = ..()
nutrition = rand(max_nutrition*0.25, max_nutrition*0.75)
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
if(name == initial(name))
name = "[name] ([rand(1, 1000)])"
real_name = name
if(!body_color)
body_color = pick( list("brown","gray","white","hooded","irish") )
icon_state = "rat_[body_color]"
item_state = "rat_[body_color]"
icon_living = "rat_[body_color]"
icon_rest = "rat_[body_color]_sleep"
icon_dead = "rat_[body_color]_dead"
if (body_color == "brown")
holder_type = /obj/item/weapon/holder/rat/brown
if (body_color == "gray")
holder_type = /obj/item/weapon/holder/rat/gray
if (body_color == "white")
holder_type = /obj/item/weapon/holder/rat/white
if (body_color == "hooded")
holder_type = /obj/item/weapon/holder/rat/hooded
if (body_color == "irish")
holder_type = /obj/item/weapon/holder/rat/irish
SSmob.all_rats += src
/mob/living/simple_animal/rat/speak_audio()
squeak_soft(0)
/mob/living/simple_animal/rat/beg(var/atom/thing, var/atom/holder)
squeak_soft(0)
visible_emote("squeaks timidly, sniffs the air and gazes longingly up at \the [thing.name].",0)
/mob/living/simple_animal/rat/attack_hand(mob/living/carbon/human/M as mob)
if (src.stat == DEAD)//If the mouse is dead, we don't pet it, we just pickup the corpse on click
get_scooped(M, usr)
return
else
..()
/mob/living/simple_animal/rat/proc/splat()
src.health = 0
src.death()
src.icon_dead = "mouse_[body_color]_splat"
src.icon_state = "mouse_[body_color]_splat"
if(client)
client.time_died_as_rat = world.time
//Plays a sound.
//This is triggered when a mob steps on an NPC mouse, or manually by a playermouse
/mob/living/simple_animal/rat/proc/squeak(var/manual = 1)
if (stat == CONSCIOUS)
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 2 SECONDS
playsound(src, 'sound/effects/ratsqueek.ogg', 70, 1)
if (manual)
log_say("[key_name(src)] squeaks! ",ckey=key_name(src))
//Plays a random selection of four sounds, at a low volume
//This is triggered randomly periodically by any mouse, or manually
/mob/living/simple_animal/rat/proc/squeak_soft(var/manual = 1)
if (stat != DEAD) //Soft squeaks are allowed while sleeping
var/list/new_squeaks = last_softsqueak ? soft_squeaks - last_softsqueak : soft_squeaks
var/sound = pick(new_squeaks)
last_softsqueak = sound
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 2 SECONDS
playsound(src, sound, 5, 1, -4.6)
if (manual)
log_say("[key_name(src)] squeaks softly! ",ckey=key_name(src))
//Plays a loud sound
//Triggered manually, when a mouse dies, or rarely when its stepped on
/mob/living/simple_animal/rat/proc/squeak_loud(var/manual = 0)
if (stat == CONSCIOUS)
if (squeakcooldown > world.time)
return
squeakcooldown = world.time + 4 SECONDS
if (squeals > 0 || !manual)
playsound(src, 'sound/effects/creatures/rat_squeak_loud.ogg', 50, 1)
squeals --
log_say("[key_name(src)] squeals! ",ckey=key_name(src))
else
to_chat(src, "<span class='warning'>Your hoarse rattish throat can't squeal just now, stop and take a breath!</span>")
//Wrapper verbs for the squeak functions
/mob/living/simple_animal/rat/verb/squeak_loud_verb()
set name = "Squeal!"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak_loud(1)
/mob/living/simple_animal/rat/verb/squeak_soft_verb()
set name = "Soft Squeaking"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak_soft(1)
/mob/living/simple_animal/rat/verb/squeak_verb()
set name = "Squeak"
set category = "Abilities"
if (usr.client.prefs.muted & MUTE_IC)
to_chat(usr, "<span class='danger'>You are muted from IC emotes.</span>")
return
squeak(1)
/mob/living/simple_animal/rat/Crossed(AM as mob|obj)
if( ishuman(AM) )
if(!stat)
var/mob/M = AM
to_chat(M, "<span class='notice'>\icon[src] Squeek!</span>")
poke(1) //Wake up if stepped on
if (prob(95))
squeak(0)
else
squeak_loud(0)//You trod on its tail
if(!health)
return
if(istype(AM,/mob/living/simple_animal/rat/king))
var/mob/living/simple_animal/rat/king/K = AM
if(!K.health)
return
src.visible_message("<span class='warning'>[src] joins the [K.swarm_name] of \the [K]</span>", \
"<span class='notice'>We join our brethren in \the [K.swarm_name]. Long live \the [K].</span>")
K.absorb(src)
..()
/mob/living/simple_animal/rat/death()
layer = MOB_LAYER
if (stat != DEAD && (ckey || prob(50)))
squeak_loud(0)//deathgasp
if(client)
client.time_died_as_rat = world.time
SSmob.all_rats -= src
..()
/mob/living/simple_animal/rat/dust()
..(anim = "dust_[body_color]", remains = /obj/effect/decal/remains/rat, iconfile = 'icons/mob/npc/rat.dmi')
/*
* Mouse types
*/
/mob/living/simple_animal/rat/white
body_color = "white"
icon_state = "rat_white"
icon_rest = "rat_white_sleep"
holder_type = /obj/item/weapon/holder/rat/white
/mob/living/simple_animal/rat/gray
body_color = "gray"
icon_state = "rat_gray"
icon_rest = "rat_gray_sleep"
holder_type = /obj/item/weapon/holder/rat/gray
/mob/living/simple_animal/rat/brown
body_color = "brown"
icon_state = "rat_brown"
icon_rest = "rat_brown_sleep"
holder_type = /obj/item/weapon/holder/rat/brown
/mob/living/simple_animal/rat/hooded
body_color = "hooded"
icon_state = "rat_hooded"
icon_rest = "rat_brown_sleep"
holder_type = /obj/item/weapon/holder/rat/hooded
/mob/living/simple_animal/rat/irish
body_color = "irish"
icon_state = "rat_irish"
icon_rest = "rat_irish_sleep"
holder_type = /obj/item/weapon/holder/rat/irish
/mob/living/simple_animal/rat/brown/Tom
name = "Tom"
real_name = "Tom"
desc = "Jerry the cat is not amused."
/mob/living/simple_animal/rat/brown/Tom/Initialize()
. = ..()
// Change my name back, don't want to be named Tom (666)
name = initial(name)
real_name = name
/mob/living/simple_animal/rat/cannot_use_vents()
return

View File

@@ -8,18 +8,18 @@
/proc/announceToRodents(var/message)
for(var/R in SSmob.all_mice)
for(var/R in SSmob.all_rats)
to_chat(R, message)
/mob/living/simple_animal/mouse/king
/mob/living/simple_animal/rat/king
attacktext = "bitten"
a_intent = "harm"
icon_state = "mouse_gray"
item_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
icon_rest = "mouse_gray_sleep"
icon_state = "rat_gray"
item_state = "rat_gray"
icon_living = "rat_gray"
icon_dead = "rat_gray_dead"
icon_rest = "rat_gray_sleep"
see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
@@ -28,7 +28,7 @@
var/announce_name = "Request"
var/list/rats = list()
/mob/living/simple_animal/mouse/king/Initialize()
/mob/living/simple_animal/rat/king/Initialize()
. = ..()
update()
@@ -41,24 +41,24 @@
say_dead_direct("An heir to the rat throne has risen, all rejoice and celebrate.")
announceToRodents("<span class='notice'>The rat king has risen! Go at once and join his kingdom, long live the king!</span>")
/mob/living/simple_animal/mouse/king/death()
/mob/living/simple_animal/rat/king/death()
while(rats.len)
eject(rats[1], 1)
..()
/mob/living/simple_animal/mouse/king/Move()
/mob/living/simple_animal/rat/king/Move()
..()
for(var/image/I in overlays)
I.dir = src.dir
/mob/living/simple_animal/mouse/king/update_icon()
/mob/living/simple_animal/rat/king/update_icon()
..()
cut_overlays()
for(var/mob/living/simple_animal/mouse/R in rats)
for(var/mob/living/simple_animal/rat/R in rats)
var/image/rat_overlay = image('icons/mob/npc/animal.dmi', "[R.icon_state]")
rat_overlay.dir = src.dir
var/matrix/M = matrix()
@@ -66,7 +66,7 @@
rat_overlay.transform = M
add_overlay(rat_overlay)
/mob/living/simple_animal/mouse/king/proc/update()
/mob/living/simple_animal/rat/king/proc/update()
if( rats.len >= RAT_GOD_LEVEL)
name = "rat god"
swarm_name = "creation"
@@ -155,10 +155,10 @@
update_icon()
update_nutrition_stats()
/mob/living/simple_animal/mouse/king/splat()
/mob/living/simple_animal/rat/king/splat()
src.apply_damage(5, BRUTE)
/mob/living/simple_animal/mouse/king/verb/kingDecree()
/mob/living/simple_animal/rat/king/verb/kingDecree()
set category = "Abilities"
set name = "Decree"
@@ -176,7 +176,7 @@
announceToRodents( "[full_message]" )
/mob/living/simple_animal/mouse/king/verb/roar()
/mob/living/simple_animal/rat/king/verb/roar()
set category = "Abilities"
set name = "Mighty Roar"
@@ -200,7 +200,7 @@
L.flicker()
last_special = world.time + 30
/mob/living/simple_animal/mouse/king/verb/devourdead(mob/target as mob in oview())
/mob/living/simple_animal/rat/king/verb/devourdead(mob/target as mob in oview())
set category = "Abilities"
set name = "Devour Body"
@@ -236,7 +236,7 @@
last_special = world.time + 100
return
/mob/living/simple_animal/mouse/king/proc/absorb(var/mob/living/simple_animal/mouse/R, var/update = 1)
/mob/living/simple_animal/rat/king/proc/absorb(var/mob/living/simple_animal/rat/R, var/update = 1)
if(!(R in rats))
R.forceMove(src)
rats += R
@@ -244,7 +244,7 @@
if( update )
update()
/mob/living/simple_animal/mouse/king/proc/eject(var/mob/living/simple_animal/mouse/R, var/update = 1)
/mob/living/simple_animal/rat/king/proc/eject(var/mob/living/simple_animal/rat/R, var/update = 1)
if(R in rats)
R.forceMove(get_turf(src))
rats -= R
@@ -252,7 +252,7 @@
if(update)
update()
/mob/living/simple_animal/mouse/king/proc/kingdomMessage(var/message, var/king_message)
/mob/living/simple_animal/rat/king/proc/kingdomMessage(var/message, var/king_message)
for(var/R in rats)
to_chat(R, message)
@@ -261,22 +261,22 @@
else
to_chat(src, message)
/mob/living/simple_animal/mouse/king/proc/canNibbleWire()
/mob/living/simple_animal/rat/king/proc/canNibbleWire()
if(rats.len >= RAT_MAYOR_LEVEL)
return 1
return 0
/mob/living/simple_animal/mouse/king/proc/canRoar()
/mob/living/simple_animal/rat/king/proc/canRoar()
if(rats.len >= RAT_BARON_LEVEL)
return 1
return 0
/mob/living/simple_animal/mouse/king/proc/canRoarBreakLights()
/mob/living/simple_animal/rat/king/proc/canRoarBreakLights()
if(rats.len >= RAT_EMPEROR_LEVEL)
return 1
return 0
/mob/living/simple_animal/mouse/king/proc/canEatCorpse()
/mob/living/simple_animal/rat/king/proc/canEatCorpse()
if(rats.len >= RAT_KING_LEVEL)
return 1
return 0

View File

@@ -368,8 +368,8 @@
return 1
if(ispath(MP, /mob/living/simple_animal/tomato))
return 1
if(ispath(MP, /mob/living/simple_animal/mouse))
return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak)
if(ispath(MP, /mob/living/simple_animal/rat))
return 1 //It is impossible to pull up the player panel for rats (Fixed! - Nodrak)
if(ispath(MP, /mob/living/simple_animal/hostile/bear))
return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak)
if(ispath(MP, /mob/living/simple_animal/parrot))

View File

@@ -27,7 +27,7 @@
var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
new grass_path(T)
if(prob(5))
var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/rat))
new mob_type(T)
if(5 to 6)
if(prob(20))

View File

@@ -52,7 +52,7 @@
var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
new grass_path(T)
if(prob(5))
var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/rat))
new mob_type(T)
if(7)
if(prob(60))

View File

@@ -704,23 +704,6 @@
/datum/reagent/nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.contract_disease(new /datum/disease/robotic_transformation(0), 1)
/datum/reagent/rattoxin
name = "Toxins"
id = "rattoxin"
description = "Toxins, yuck!."
reagent_state = LIQUID
color = "#535E66"
taste_description = "eugh!"
fallback_specific_heat = 3
/datum/reagent/rattoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(prob(50))
M.drowsyness = max(M.drowsyness, 3)
if(prob(10))
M.emote("vomit")
/datum/reagent/xenomicrobes
name = "Xenomicrobes"
id = "xenomicrobes"

View File

@@ -1208,8 +1208,8 @@
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/burger/mouse
name = "mouse burger"
desc = "Squeaky and a little furry."
name = "rat burger"
desc = "Squeaky and a little furry. Do you see any cows around here, Detective?"
icon_state = "ratburger"
center_of_mass = list("x"=16, "y"=11)
bitesize = 2
@@ -1217,7 +1217,6 @@
/obj/item/weapon/reagent_containers/food/snacks/burger/mouse/Initialize()
. = ..()
reagents.add_reagent("protein", 5)
reagents.add_reagent("rattoxin", 1)
/obj/item/weapon/reagent_containers/food/snacks/omelette
name = "omelette du fromage"
@@ -4068,7 +4067,7 @@
switch (MF.kitchen_tag)
if ("rodent")
result = new /obj/item/weapon/reagent_containers/food/snacks/burger/mouse(src)
to_chat(user, "You make a mouseburger!")
to_chat(user, "You make a ratburger!")
if (result)
if (W.reagents)

View File

@@ -97,16 +97,15 @@
day Adhomai needs their resources less thanks to synthetic fabric and more efficient food sources, both the meat and the fur of the nav'twir has become an export of the Adhomai \
people. In the olden days, carved nav'twir antlers were used as decoration for pelts and armors."
/obj/item/weapon/reagent_containers/food/snacks/meat/mice
name = "mice meat"
/obj/item/weapon/reagent_containers/food/snacks/meat/rat
name = "rat meat"
icon_state = "chickenbreast"
desc = "You have reached the epitome of poorness: eating the station's vermin."
/obj/item/weapon/reagent_containers/food/snacks/meat/mice/Initialize()
/obj/item/weapon/reagent_containers/food/snacks/meat/rat/Initialize()
. = ..()
reagents.add_reagent("protein", 5)
reagents.add_reagent("rattoxin", 1)
src.bitesize = 1.5
/obj/item/weapon/reagent_containers/food/snacks/meat/dionanymph

View File

@@ -38,7 +38,7 @@
/mob/living/simple_animal/parrot,\
/mob/living/simple_animal/slime,\
/mob/living/simple_animal/crab,\
/mob/living/simple_animal/mouse,\
/mob/living/simple_animal/rat,\
/mob/living/simple_animal/hostile/retaliate/goat\
)

View File

@@ -160,7 +160,7 @@
src.set_dir(turn(src.dir, -90))
return
else
if(istype(usr,/mob/living/simple_animal/mouse))
if(istype(usr,/mob/living/simple_animal/rat))
return
if(!usr || !isturf(usr.loc))
return

View File

@@ -9,14 +9,14 @@
var/uses = 1
var/temp = null
var/list/monster = list(/mob/living/simple_animal/familiar/pet/cat,
/mob/living/simple_animal/mouse/familiar,
/mob/living/simple_animal/rat/familiar,
/mob/living/simple_animal/familiar/carcinus,
/mob/living/simple_animal/familiar/horror,
/mob/living/simple_animal/familiar/goat,
/mob/living/simple_animal/familiar/pike
)
var/list/monster_info = list( "It is well known that the blackest of cats make good familiars.",
"Mice are small but fragile creatures. This one is gifted with unending life, and the ability to renew others.",
"Rats are small but fragile creatures. This one is gifted with unending life, and the ability to renew others.",
"A mortal decendant of the original Carcinus, it is said their shells are near impenetrable and their claws as sharp as knives.",
"A creature from other plane, its very own presence is enough to shatter the sanity of men.",
"A stubborn and mischievous creature, this goat delights in stirring trouble.",

View File

@@ -83,7 +83,7 @@
name = "Baleful Polymorth"
desc = "This spell transforms its target into a small, furry animal. Those practiced in the high arcane arts can block this spell with ease, however."
feedback = "BP"
possible_transformations = list(/mob/living/simple_animal/lizard,/mob/living/simple_animal/mouse,/mob/living/simple_animal/corgi, /mob/living/simple_animal/cat)
possible_transformations = list(/mob/living/simple_animal/lizard,/mob/living/simple_animal/rat,/mob/living/simple_animal/corgi, /mob/living/simple_animal/cat)
share_damage = 0
invocation = "Yo'balada!"

View File

@@ -18,7 +18,7 @@
set category = "Object"
set src in oview(1)
if (!can_touch(usr) || ismouse(usr))
if (!can_touch(usr) || israt(usr))
return
if(flipped < 0 || !flip(get_cardinal_dir(usr,src)))

View File

@@ -11,7 +11,7 @@ var/global/list/can_enter_vent_with = list(
/obj/item/weapon/holder,
/obj/machinery/camera,
/mob/living/simple_animal/borer,
/mob/living/simple_animal/mouse
/mob/living/simple_animal/rat
)
/mob/living/var/list/icon/pipes_shown = list()
@@ -95,7 +95,7 @@ var/global/list/can_enter_vent_with = list(
/mob/living/simple_animal/borer/ventcrawl_carry()
return 1
/mob/living/simple_animal/mouse/can_ventcrawl()
/mob/living/simple_animal/rat/can_ventcrawl()
return 1
/mob/living/simple_animal/spiderbot/can_ventcrawl()