mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user