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/result = null
var/list/required_reagents = new/list() var/list/required_reagents = new/list()
var/list/required_catalysts = 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 var/result_amount = 0
proc proc
@@ -495,6 +500,14 @@ datum
result_amount = 5 result_amount = 5
/////////////////////////////////////METROID CORE REACTIONS ///////////////////////////////
// TODO
//////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// //////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
tofu tofu

View File

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

View File

@@ -1056,6 +1056,46 @@
//END BRAINS===================================================== //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 /obj/noticeboard
name = "Notice Board" name = "Notice Board"
icon = 'stationobjs.dmi' icon = 'stationobjs.dmi'

View File

@@ -235,6 +235,7 @@
if(istype(Metroid, /mob/living/carbon/metroid/adult)) if(istype(Metroid, /mob/living/carbon/metroid/adult))
if(prob(5 + round(power/2))) if(prob(5 + round(power/2)))
Metroid.Victim = null Metroid.Victim = null
Metroid.anchored = 0
spawn(0) spawn(0)
Metroid.canmove = 0 Metroid.canmove = 0
step_away(Metroid, user) step_away(Metroid, user)
@@ -246,6 +247,7 @@
else else
if(prob(10 + power*2)) if(prob(10 + power*2))
Metroid.Victim = null Metroid.Victim = null
Metroid.anchored = 0
spawn(0) spawn(0)
step_away(Metroid, user) step_away(Metroid, user)
Metroid.canmove = 0 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." user << "\red You're going to need to remove that mask/helmet/glasses first."
return 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!" user << "\red You cannot locate any eyes on this creature!"
return return
@@ -230,6 +230,15 @@ CIRCULAR SAW
switch(M:brain_op_stage) switch(M:brain_op_stage)
if(0.0) 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) if(M != user)
for(var/mob/O in (viewers(M) - user - M)) 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) 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.updatehealth()
M:brain_op_stage = 1.0 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(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) if(M != user)
for(var/mob/O in (viewers(M) - user - M)) 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) 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." user << "\red You're going to need to remove that mask/helmet/glasses first."
return 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!" user << "\red You cannot locate any eyes on this creature!"
return return
@@ -380,6 +407,8 @@ CIRCULAR SAW
switch(M:brain_op_stage) switch(M:brain_op_stage)
if(1.0) if(1.0)
if(istype(M, /mob/living/carbon/metroid))
return
if(M != user) if(M != user)
for(var/mob/O in (viewers(M) - user - M)) for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1) O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1)
@@ -408,6 +437,25 @@ CIRCULAR SAW
M.updatehealth() M.updatehealth()
M:brain_op_stage = 2.0 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(3.0)
if(M != user) if(M != user)
for(var/mob/O in (viewers(M) - user - M)) for(var/mob/O in (viewers(M) - user - M))

View File

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

View File

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

View File

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