From b2b2894e3bc8521d5f26867cebdb18f680f4e41a Mon Sep 17 00:00:00 2001 From: RavingManiac Date: Tue, 19 Feb 2013 08:04:53 +0800 Subject: [PATCH] Players have to wait 5 minutes between dying as a mouse and respawning as a mouse. Global variable mouse_respawn_time determines the respawn time in minutes. Mice can no longer open airlocks. Mice can no longer strip items from humans Mice can no longer put other creatures into disposal units (though they can still climb into disposal units) Message for when mice crawl into vents removed. Mouse nibbling message only displayed to observers half the time. --- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/door.dm | 2 +- code/global.dm | 1 + code/modules/client/client defines.dm | 1 + code/modules/mob/dead/observer/observer.dm | 4 ++++ .../mob/living/carbon/human/inventory.dm | 1 + .../mob/living/simple_animal/friendly/mouse.dm | 17 +++++++++++++++++ .../reagents/reagent_containers/food/snacks.dm | 5 ++++- code/modules/recycling/disposal.dm | 1 + 9 files changed, 31 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 5d6aa3823ff..f945a1576be 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -910,7 +910,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0) if(!nowindow) ..() - if(usr.stat || usr.restrained()) + if(usr.stat || usr.restrained()|| ismouse(usr)) return add_fingerprint(usr) if(href_list["close"]) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 9405732d940..4aafbe667fa 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -47,7 +47,7 @@ var/mob/M = AM if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam. M.last_bumped = world.time - if(!M.restrained()) + if(!M.restrained() && !ismouse(M)) bumpopen(M) return diff --git a/code/global.dm b/code/global.dm index c7b2404e0ab..3a81f7bac43 100644 --- a/code/global.dm +++ b/code/global.dm @@ -103,6 +103,7 @@ var/list/shuttles = list( ) var/list/reg_dna = list( ) // list/traitobj = list( ) +var/mouse_respawn_time = 5 //Amount of time that must pass between a player dying as a mouse and repawning as a mouse. In minutes. var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 2675436c33a..6fbb741b990 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -16,6 +16,7 @@ var/moving = null var/adminobs = null var/area = null + var/can_spawn_as_mouse = 1 /////////////// diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d8b3b9b92ca..68a9a834809 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -263,6 +263,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Become mouse" set category = "Ghost" + if(client.can_spawn_as_mouse == 0) + src << "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death." + return + //find a viable mouse candidate var/mob/living/simple_animal/mouse/host var/obj/machinery/atmospherics/unary/vent_pump/vent_found diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 24c03f57445..8c22808fdef 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -461,6 +461,7 @@ It can still be worn/put on as normal. */ /obj/effect/equip_e/human/done() //TODO: And rewrite this :< ~Carn target.cpr_time = 1 + if(ismouse(source)) return //mice cannot strip people if(!source || !target) return //Target or source no longer exist if(source.loc != s_loc) return //source has moved if(target.loc != t_loc) return //target has moved diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 837b7e24903..9e5648005f1 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -84,9 +84,11 @@ if(loc==startloc) var/obj/target_vent = vents[selection_position] if(target_vent) + /* for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("[src] scrambles into the ventillation ducts!"), 1) + */ loc = target_vent.loc else src << "\blue You need to remain still while entering a vent." @@ -107,15 +109,19 @@ if (layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 src << text("\blue You are now hiding.") + /* for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) O << text("[] scurries to the ground!", src) + */ else layer = MOB_LAYER src << text("\blue You have stopped hiding.") + /* for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) O << text("[] slowly peaks up from the ground...", src) + */ //make mice fit under tables etc? this was hacky, and not working /* @@ -152,6 +158,17 @@ M << 'sound/effects/mousesqueek.ogg' ..() +/mob/living/simple_animal/mouse/Die() + if(client) + client.mouse_respawn_timer() + ..() + +/client/proc/mouse_respawn_timer() + can_spawn_as_mouse = 0 + spawn(mouse_respawn_time * 600) + can_spawn_as_mouse = 1 + return + /* * Mouse types */ diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 49c6aac75d6..c20091e4c30 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -198,7 +198,10 @@ del(src) if(ismouse(M)) var/mob/living/simple_animal/mouse/N = M - N.emote("nibbles away at the [src]") + N << text("\blue You nibble away at [src].") + if(prob(50)) + N.visible_message("[N] nibbles away at [src].", "") + //N.emote("nibbles away at the [src]") N.health = min(N.health + 1, N.maxHealth) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 51a44003ed3..f4e53667a2e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -136,6 +136,7 @@ MouseDrop_T(mob/target, mob/user) if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai)) return + if(ismouse(user) && target != user) return //mice cannot put mobs other than themselves into disposal src.add_fingerprint(user) var/target_loc = target.loc var/msg