Metroids:

You can perform some xenobiological dissection on Metroids to get a little something... I also made it impossible to push, drag, or grab Metroids while they're feeding on something. Metroids also eat slower, and you can more easily "wrestle" them off by clicking on them.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1793 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
vageyenaman@gmail.com
2011-07-07 01:13:10 +00:00
parent 513b6d0d91
commit 9bd966bf01
12 changed files with 135 additions and 10 deletions

View File

@@ -6,6 +6,11 @@ datum
var/result = null
var/list/required_reagents = new/list()
var/list/required_catalysts = new/list()
// Both of these variables are mostly going to be used with Metroid cores - but if you want to, you can use them for other things
var/atom/required_container = null // the container required for the reaction to happen
var/required_other = 0 // an integer required for the reaction to happen
var/result_amount = 0
proc
@@ -495,6 +500,14 @@ datum
result_amount = 5
/////////////////////////////////////METROID CORE REACTIONS ///////////////////////////////
// TODO
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
tofu

View File

@@ -828,7 +828,7 @@
user << "\red [target] is empty."
return
if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers))
if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
user << "\red You cannot directly remove reagents from this object."
return
@@ -845,13 +845,18 @@
return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core))
user << "\red You cannot directly fill this object."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red [target] is full."
return
if(istype(target, /obj/item/metroid_core))
var/obj/item/metroid_core/core = target
core.Flush = 30
if(ismob(target) && target != user)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] is trying to inject []!</B>", user, target), 1)

View File

@@ -27,6 +27,8 @@
var/attacked = 0 // determines if it's been attacked recently. Can be any number, is a cooloff-ish variable
var/cores = 3 // the number of /obj/item/metroid_core's the metroid has left inside
/mob/living/carbon/metroid/adult
name = "adult metroid"
icon = 'mob.dmi'

View File

@@ -1056,6 +1056,46 @@
//END BRAINS=====================================================
// Basically this Metroid Core catalyzes reactions that normally wouldn't happen anywhere
/obj/item/metroid_core
name = "metroid core"
desc = "A very slimy and tender part of a Metroid. They also legended to have \"magical powers\"."
icon = 'surgery.dmi'
icon_state = "metroid core"
flags = TABLEPASS
force = 1.0
w_class = 1.0
throwforce = 1.0
throw_speed = 3
throw_range = 6
origin_tech = "biotech=4"
var/POWERFLAG = 0 // sshhhhhhh
var/Flush = 30
New()
..()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
POWERFLAG = rand(-5,15)
//flags |= NOREACT
spawn()
Life()
proc/Life()
while(src)
sleep(10)
Flush--
if(Flush <= 0)
reagents.clear_reagents()
Flush = 30
/obj/noticeboard
name = "Notice Board"
icon = 'stationobjs.dmi'

View File

@@ -235,6 +235,7 @@
if(istype(Metroid, /mob/living/carbon/metroid/adult))
if(prob(5 + round(power/2)))
Metroid.Victim = null
Metroid.anchored = 0
spawn(0)
Metroid.canmove = 0
step_away(Metroid, user)
@@ -246,6 +247,7 @@
else
if(prob(10 + power*2))
Metroid.Victim = null
Metroid.anchored = 0
spawn(0)
step_away(Metroid, user)
Metroid.canmove = 0

View File

@@ -37,7 +37,7 @@ CIRCULAR SAW
user << "\red You're going to need to remove that mask/helmet/glasses first."
return
if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/metroid))//Aliens don't have eyes./N
user << "\red You cannot locate any eyes on this creature!"
return
@@ -230,6 +230,15 @@ CIRCULAR SAW
switch(M:brain_op_stage)
if(0.0)
if(istype(M, /mob/living/carbon/metroid))
if(M.stat == 2)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M.name] is beginning to have its flesh cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your flesh with [src]!"
user << "\red You cut [M]'s flesh open with [src]!"
M:brain_op_stage = 1.0
return
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1)
@@ -257,7 +266,25 @@ CIRCULAR SAW
M.updatehealth()
M:brain_op_stage = 1.0
if(1)
if(istype(M, /mob/living/carbon/metroid))
if(M.stat == 2)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M.name] is having its silky inndards cut apart with [src] by [user].", 1)
M << "\red [user] begins to cut apart your innards with [src]!"
user << "\red You cut [M]'s silky innards apart with [src]!"
M:brain_op_stage = 2.0
return
if(2.0)
if(istype(M, /mob/living/carbon/metroid))
if(M.stat == 2)
var/mob/living/carbon/metroid/Metroid = M
if(Metroid.cores > 0)
if(istype(M, /mob/living/carbon/metroid))
user << "\red You attempt to remove [M]'s core, but your [src] is ineffective!"
return
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1)
@@ -307,7 +334,7 @@ CIRCULAR SAW
user << "\red You're going to need to remove that mask/helmet/glasses first."
return
if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/metroid))//Aliens don't have eyes./N
user << "\red You cannot locate any eyes on this creature!"
return
@@ -380,6 +407,8 @@ CIRCULAR SAW
switch(M:brain_op_stage)
if(1.0)
if(istype(M, /mob/living/carbon/metroid))
return
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1)
@@ -408,6 +437,25 @@ CIRCULAR SAW
M.updatehealth()
M:brain_op_stage = 2.0
if(2.0)
if(istype(M, /mob/living/carbon/metroid))
if(M.stat == 2)
var/mob/living/carbon/metroid/Metroid = M
if(Metroid.cores > 0)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M.name] is having one of its cores sawed out with [src] by [user].", 1)
Metroid.cores--
M << "\red [user] begins to remove one of your cores with [src]! ([Metroid.cores] cores remaining)"
user << "\red You cut one of [M]'s cores out with [src]! ([Metroid.cores] cores remaining)"
new/obj/item/metroid_core(M.loc)
if(Metroid.cores <= 0)
M.icon_state = "baby metroid dead-nocore"
return
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))

View File

@@ -82,6 +82,10 @@
loc = tmob.loc
tmob.loc = oldloc
now_pushing = 0
for(var/mob/living/carbon/metroid/Metroid in view(1,tmob))
if(Metroid.Victim == tmob)
Metroid.UpdateFeed()
return
if(istype(equipped(), /obj/item/weapon/melee/baton)) // add any other item paths you think are necessary
if(loc:sd_lumcount < 3 || blinded)

View File

@@ -431,7 +431,7 @@
if(Victim)
if(Victim == M)
if(prob(90))
if(prob(60))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("\red [M] attempts to wrestle \the [name] off!", 1)
@@ -444,12 +444,13 @@
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
Victim = null
anchored = 0
step_away(src,M)
return
else
if(prob(80))
if(prob(30))
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("\red [M] attempts to wrestle \the [name] off of [Victim]!", 1)
@@ -462,6 +463,7 @@
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
Victim = null
anchored = 0
step_away(src,M)
return
@@ -505,7 +507,9 @@
if (prob(90))
if (M.mutations & HULK)
damage += 5
if(Victim) Victim = null
if(Victim)
Victim = null
anchored = 0
spawn(0)
step_away(src,M,15)
@@ -592,7 +596,10 @@
if ((O.client && !( O.blinded )))
O.show_message(text("\red <B>[] has tackled [name]!</B>", M), 1)
if(Victim) Victim = null
if(Victim)
Victim = null
anchored = 0
spawn(0)
step_away(src,M,15)

View File

@@ -41,6 +41,7 @@
Victim = M
src.loc = M.loc
canmove = 0
anchored = 1
var/lastnut = nutrition
//if(M.client) M << "\red You legs become paralyzed!"
if(istype(src, /mob/living/carbon/metroid/adult))
@@ -63,7 +64,7 @@
Victim.cloneloss += rand(1,10)
Victim.toxloss += rand(1,2)
if(Victim.health <= 0)
Victim.toxloss += rand(2,5)
Victim.toxloss += rand(2,4)
if(toxloss > 0)
toxloss -= 5
@@ -109,7 +110,7 @@
Victim.updatehealth()
updatehealth()
sleep(rand(5,25))
sleep(rand(15,45))
if(istype(src, /mob/living/carbon/metroid/adult))
@@ -119,6 +120,7 @@
Victim = null
canmove = 1
anchored = 0
if(M.health <= -70)
M.canmove = 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -708,8 +708,10 @@
#include "code\modules\mob\living\carbon\metroid\examine.dm"
#include "code\modules\mob\living\carbon\metroid\hud.dm"
#include "code\modules\mob\living\carbon\metroid\life.dm"
#include "code\modules\mob\living\carbon\metroid\login.dm"
#include "code\modules\mob\living\carbon\metroid\metroid.dm"
#include "code\modules\mob\living\carbon\metroid\powers.dm"
#include "code\modules\mob\living\carbon\metroid\say.dm"
#include "code\modules\mob\living\carbon\monkey\death.dm"
#include "code\modules\mob\living\carbon\monkey\emote.dm"
#include "code\modules\mob\living\carbon\monkey\examine.dm"