mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-07 07:52:00 +00:00
Replaces Mice w/ Rats (#6625)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)),
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>")
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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\
|
||||
)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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!"
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user