mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 06:57:42 +01:00
Added Cheridan's slime sprites to replace roros. Replaced all mentions of roro/metroid with slime. Once Cheri has the rest of the sprites/Phol gets mutant race sprites I'll start work on redoing metroid/slime code with Giacom and adding breeding.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5223 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -213,7 +213,7 @@
|
||||
if ((s_active && !( s_active in contents ) ))
|
||||
s_active.close(src)
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
|
||||
return
|
||||
@@ -265,7 +265,7 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/humanoid/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
|
||||
if(istype(M, /mob/living/carbon/metroid/adult))
|
||||
if(istype(M, /mob/living/carbon/slime/adult))
|
||||
damage = rand(10, 40)
|
||||
else
|
||||
damage = rand(5, 35)
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
if ((s_active && !( s_active in contents ) ))
|
||||
s_active.close(src)
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
|
||||
return
|
||||
@@ -279,7 +279,7 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/alien/larva/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/carbon/alien/larva/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -294,7 +294,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
damage = rand(20, 40)
|
||||
else
|
||||
damage = rand(5, 35)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/human))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/metroid))
|
||||
if (istype(other, /mob/living/carbon/slime))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -64,9 +64,9 @@
|
||||
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()
|
||||
for(var/mob/living/carbon/slime/slime in view(1,tmob))
|
||||
if(slime.Victim == tmob)
|
||||
slime.UpdateFeed()
|
||||
return
|
||||
|
||||
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
|
||||
@@ -317,7 +317,7 @@
|
||||
if ((s_active && !( s_active in contents ) ))
|
||||
s_active.close(src)
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
return
|
||||
|
||||
@@ -357,7 +357,7 @@
|
||||
if(armor >= 2) return
|
||||
|
||||
|
||||
/mob/living/carbon/human/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/carbon/human/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if(M.Victim) return // can't attack while eating!
|
||||
|
||||
if (health > -100)
|
||||
@@ -368,7 +368,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
|
||||
if(istype(M, /mob/living/carbon/metroid/adult))
|
||||
if(istype(M, /mob/living/carbon/slime/adult))
|
||||
damage = rand(10, 35)
|
||||
else
|
||||
damage = rand(5, 25)
|
||||
|
||||
@@ -1034,7 +1034,7 @@
|
||||
sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
|
||||
if(dna)
|
||||
switch(dna.mutantrace)
|
||||
if("lizard","metroid")
|
||||
if("lizard","slime")
|
||||
see_in_dark = 3
|
||||
see_invisible = SEE_INVISIBLE_LEVEL_ONE
|
||||
if("shadow")
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
message = replacetext(message, "s", stutter("ss"))
|
||||
|
||||
if(src.dna.mutantrace == "metroid" && prob(5))
|
||||
if(src.dna.mutantrace == "slime" && prob(5))
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
if(copytext(message, 1, 2) == ";")
|
||||
message = ";"
|
||||
@@ -134,7 +134,7 @@
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/brain))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/metroid))
|
||||
if (istype(other, /mob/living/carbon/slime))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ There are several things that need to be remembered:
|
||||
|
||||
All of these are named after the variable they update from. They are defined at the mob/ level like
|
||||
update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a
|
||||
metroid etc. Instead, it'll just return without doing any work. So no harm in calling it for metroids and such.
|
||||
slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such.
|
||||
|
||||
|
||||
> There are also these special cases:
|
||||
@@ -323,7 +323,7 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
|
||||
if(dna)
|
||||
switch(dna.mutantrace)
|
||||
if("lizard","golem","metroid","shadow")
|
||||
if("lizard","golem","slime","shadow")
|
||||
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l")
|
||||
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s")
|
||||
if("plant")
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/mob/living/carbon/metroid/death(gibbed)
|
||||
/mob/living/carbon/slime/death(gibbed)
|
||||
if(stat == DEAD) return
|
||||
stat = DEAD
|
||||
icon_state = "baby roro dead"
|
||||
icon_state = "baby slime dead"
|
||||
|
||||
if(!gibbed)
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
ghostize()
|
||||
explosion(loc, -1,-1,3,12)
|
||||
if(src) del(src)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/metroid/emote(var/act)
|
||||
/mob/living/carbon/slime/emote(var/act)
|
||||
|
||||
|
||||
if (findtext(act, "-", 1, null))
|
||||
@@ -16,11 +16,6 @@
|
||||
if("moan")
|
||||
message = "<B>The [src.name]</B> moans."
|
||||
m_type = 2
|
||||
// if("roar")
|
||||
// if (!muzzled)
|
||||
// message = "<B>The [src.name]</B> roars." Commenting out since larva shouldn't roar /N
|
||||
// m_type = 2
|
||||
|
||||
if("shiver")
|
||||
message = "<B>The [src.name]</B> shivers."
|
||||
m_type = 2
|
||||
@@ -36,17 +31,11 @@
|
||||
if("light")
|
||||
message = "<B>The [src.name]</B> lights up for a bit, then stops."
|
||||
m_type = 1
|
||||
if("click")
|
||||
message = "<B>The [src.name]</B> makes a clicking noise!"
|
||||
if("jiggle")
|
||||
message = "<B>The [src.name]</B> jiggles!"
|
||||
m_type = 1
|
||||
if("chatter")
|
||||
message = "<B>The [src.name]</B> makes a noisy chattering sound!"
|
||||
m_type = 1
|
||||
if("growl")
|
||||
message = "<B>The [src.name]</B> growls!"
|
||||
m_type = 1
|
||||
if("shriek")
|
||||
message = "<B>The [src.name]</B> makes a high-pitched shriek!"
|
||||
if("bounce")
|
||||
message = "<B>The [src.name]</B> bounces in place."
|
||||
m_type = 1
|
||||
else
|
||||
src << text("Invalid Emote: []", act)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/metroid/examine()
|
||||
/mob/living/carbon/slime/examine()
|
||||
set src in oview()
|
||||
|
||||
if(!usr || !src) return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
/mob/living/carbon/metroid/proc/regular_hud_updates()
|
||||
/mob/living/carbon/slime/proc/regular_hud_updates()
|
||||
return
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/metroid/Life()
|
||||
/mob/living/carbon/slime/Life()
|
||||
set invisibility = 0
|
||||
set background = 1
|
||||
|
||||
@@ -41,21 +41,21 @@
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/metroid
|
||||
/mob/living/carbon/slime
|
||||
var/AIproc = 0 // determines if the AI loop is activated
|
||||
var/Atkcool = 0 // attack cooldown
|
||||
var/Tempstun = 0 // temporary temperature stuns
|
||||
var/Discipline = 0 // if a metroid has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while
|
||||
var/Discipline = 0 // if a slime has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while
|
||||
var/SStun = 0 // stun variable
|
||||
|
||||
/mob/living/carbon/metroid/proc/AIprocess() // the master AI process
|
||||
/mob/living/carbon/slime/proc/AIprocess() // the master AI process
|
||||
|
||||
//world << "AI proc started."
|
||||
if(AIproc || stat == DEAD || client) return
|
||||
|
||||
var/hungry = 0
|
||||
var/starving = 0
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
switch(nutrition)
|
||||
if(400 to 1100) hungry = 1
|
||||
if(0 to 399)
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
if(Target)
|
||||
//world << "[Target] Target Found"
|
||||
for(var/mob/living/carbon/metroid/M in view(1,Target))
|
||||
for(var/mob/living/carbon/slime/M in view(1,Target))
|
||||
if(M.Victim == Target)
|
||||
Target = null
|
||||
AIproc = 0
|
||||
@@ -104,7 +104,7 @@
|
||||
Atkcool = 0
|
||||
|
||||
if(get_obstacle_ok(Target))
|
||||
Target.attack_metroid(src)
|
||||
Target.attack_slime(src)
|
||||
//world << "retrun 1"
|
||||
return
|
||||
if(!Target.lying && prob(80))
|
||||
@@ -117,7 +117,7 @@
|
||||
Atkcool = 0
|
||||
|
||||
if(get_obstacle_ok(Target))
|
||||
Target.attack_metroid(src)
|
||||
Target.attack_slime(src)
|
||||
|
||||
|
||||
if(prob(30))
|
||||
@@ -145,12 +145,12 @@
|
||||
var/sleeptime = movement_delay()
|
||||
if(sleeptime <= 0) sleeptime = 1
|
||||
|
||||
sleep(sleeptime + 2) // this is about as fast as a player Metroid can go
|
||||
sleep(sleeptime + 2) // this is about as fast as a player slime can go
|
||||
|
||||
AIproc = 0
|
||||
//world << "AI proc ended."
|
||||
|
||||
/mob/living/carbon/metroid/proc/handle_environment(datum/gas_mixture/environment)
|
||||
/mob/living/carbon/slime/proc/handle_environment(datum/gas_mixture/environment)
|
||||
if(!environment)
|
||||
adjustToxLoss(rand(10,20))
|
||||
return
|
||||
@@ -208,7 +208,7 @@
|
||||
return //TODO: DEFERRED
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/proc/adjust_body_temperature(current, loc_temp, boost)
|
||||
/mob/living/carbon/slime/proc/adjust_body_temperature(current, loc_temp, boost)
|
||||
var/temperature = current
|
||||
var/difference = abs(current-loc_temp) //get difference
|
||||
var/increments// = difference/10 //find how many increments apart they are
|
||||
@@ -225,7 +225,7 @@
|
||||
temp_change = (temperature - current)
|
||||
return temp_change
|
||||
|
||||
/mob/living/carbon/metroid/proc/handle_chemicals_in_body()
|
||||
/mob/living/carbon/slime/proc/handle_chemicals_in_body()
|
||||
|
||||
if(reagents) reagents.metabolize(src)
|
||||
|
||||
@@ -235,9 +235,9 @@
|
||||
return //TODO: DEFERRED
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/proc/handle_regular_status_updates()
|
||||
/mob/living/carbon/slime/proc/handle_regular_status_updates()
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
else
|
||||
health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
@@ -315,10 +315,10 @@
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/proc/handle_nutrition()
|
||||
/mob/living/carbon/slime/proc/handle_nutrition()
|
||||
|
||||
if(prob(20))
|
||||
if(istype(src, /mob/living/carbon/metroid/adult)) nutrition-=rand(4,6)
|
||||
if(istype(src, /mob/living/carbon/slime/adult)) nutrition-=rand(4,6)
|
||||
else nutrition-=rand(2,3)
|
||||
|
||||
if(nutrition <= 0)
|
||||
@@ -327,38 +327,44 @@
|
||||
|
||||
adjustToxLoss(rand(0,5))
|
||||
|
||||
else
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(nutrition >= 1000)
|
||||
if(prob(40)) amount_grown++
|
||||
|
||||
else
|
||||
if(nutrition >= 800)
|
||||
if(prob(40)) amount_grown++
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(nutrition >= 1000)
|
||||
if(prob(40)) amount_grown++
|
||||
|
||||
else
|
||||
if(nutrition >= 800)
|
||||
if(prob(40)) amount_grown++
|
||||
|
||||
//lay eggs or grow
|
||||
if(amount_grown >= 10 && !Victim && !Target)
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(!client && nutrition >= 1000)
|
||||
var/number = pick(1,1,1,1,1,1,2,2,2,3) //number of eggs laid
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/egg/roro/E
|
||||
for(var/i=1,i<=number,i++)
|
||||
E = new(loc)
|
||||
src.nutrition -= 200
|
||||
step_away(E,src)
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(!client)
|
||||
var/number = pick(2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4)
|
||||
for(var/i=1,i<=number,i++) // reproduce (has a small chance of producing 3 or 4 offspring)
|
||||
var/mob/living/carbon/slime/M = new/mob/living/carbon/slime(loc)
|
||||
// M.nutrition = round(nutrition * 0.9)
|
||||
M.powerlevel = round(powerlevel/number)
|
||||
M.Friends = Friends
|
||||
M.tame = tame
|
||||
M.rabid = rabid
|
||||
M.Discipline = Discipline
|
||||
if(i != 1) step_away(M,src)
|
||||
|
||||
del(src)
|
||||
|
||||
else
|
||||
if(!client)
|
||||
var/mob/living/carbon/metroid/adult/A = new/mob/living/carbon/metroid/adult(src.loc)
|
||||
var/mob/living/carbon/slime/adult/A = new/mob/living/carbon/slime/adult(src.loc)
|
||||
A.nutrition = nutrition
|
||||
A.nutrition += 100
|
||||
// A.nutrition += 100
|
||||
A.powerlevel = max(0, powerlevel-1)
|
||||
A.Friends = Friends
|
||||
A.tame = tame
|
||||
A.rabid = rabid
|
||||
del(src)
|
||||
|
||||
/mob/living/carbon/metroid/proc/handle_targets()
|
||||
|
||||
/mob/living/carbon/slime/proc/handle_targets()
|
||||
if(Tempstun)
|
||||
if(!Victim) // not while they're eating!
|
||||
canmove = 0
|
||||
@@ -394,14 +400,14 @@
|
||||
|
||||
|
||||
if(prob(5))
|
||||
emote(pick("click","chatter","sway","light","vibrate","chatter","shriek"))
|
||||
emote(pick("bounce","sway","light","vibrate","jiggle"))
|
||||
|
||||
if(AIproc && SStun) return
|
||||
|
||||
|
||||
var/hungry = 0 // determines if the metroid is hungry
|
||||
var/starving = 0 // determines if the metroid is starving-hungry
|
||||
if(istype(src, /mob/living/carbon/metroid/adult)) // 1200 max nutrition
|
||||
var/hungry = 0 // determines if the slime is hungry
|
||||
var/starving = 0 // determines if the slime is starving-hungry
|
||||
if(istype(src, /mob/living/carbon/slime/adult)) // 1200 max nutrition
|
||||
switch(nutrition)
|
||||
if(601 to 900)
|
||||
if(prob(25)) hungry = 1//Ensures they continue eating, but aren't as aggressive at the same time
|
||||
@@ -417,7 +423,7 @@
|
||||
if(0 to 200) starving = 1
|
||||
|
||||
|
||||
if(starving && !client) // if a metroid is starving, it starts losing its friends
|
||||
if(starving && !client) // if a slime is starving, it starts losing its friends
|
||||
if(Friends.len > 0 && prob(1))
|
||||
var/mob/nofriend = pick(Friends)
|
||||
Friends -= nofriend
|
||||
@@ -428,42 +434,42 @@
|
||||
if(hungry || starving) //Only add to the list if we need to
|
||||
for(var/mob/living/L in view(7,src))
|
||||
|
||||
//Ignore other metroids, dead mobs and simple_animals
|
||||
if(ismetroid(L) || L.stat != CONSCIOUS || isanimal(L))
|
||||
//Ignore other slimes, dead mobs and simple_animals
|
||||
if(isslime(L) || L.stat != CONSCIOUS || isanimal(L))
|
||||
continue
|
||||
|
||||
if(issilicon(L))
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult)) //Non-starving diciplined adult metroids wont eat things
|
||||
if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things
|
||||
if(!starving && Discipline > 0)
|
||||
continue
|
||||
|
||||
if(tame) //Tame metroids ignore electronic life
|
||||
if(tame) //Tame slimes ignore electronic life
|
||||
continue
|
||||
|
||||
targets += L //Possible target found!
|
||||
|
||||
else if(iscarbon(L))
|
||||
|
||||
if(istype(L, /mob/living/carbon/human)) //Ignore metroid(wo)men
|
||||
if(istype(L, /mob/living/carbon/human)) //Ignore slime(wo)men
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.dna)
|
||||
if(H.dna.mutantrace == "metroid")
|
||||
if(H.dna.mutantrace == "slime")
|
||||
continue
|
||||
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult)) //Non-starving diciplined adult metroids wont eat things
|
||||
if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things
|
||||
if(!starving && Discipline > 0)
|
||||
continue
|
||||
|
||||
if(L in Friends) //No eating friends!
|
||||
continue
|
||||
|
||||
if(tame && ishuman(L)) //Tame metroids dont eat people.
|
||||
if(tame && ishuman(L)) //Tame slimes dont eat people.
|
||||
continue
|
||||
|
||||
if(!L.canmove) //Only one metroid can latch on at a time.
|
||||
if(!L.canmove) //Only one slime can latch on at a time.
|
||||
|
||||
var/notarget = 0
|
||||
for(var/mob/living/carbon/metroid/M in view(1,L))
|
||||
for(var/mob/living/carbon/slime/M in view(1,L))
|
||||
if(M.Victim == L)
|
||||
notarget = 1
|
||||
if(notarget)
|
||||
@@ -474,7 +480,7 @@
|
||||
|
||||
|
||||
if((hungry || starving) && targets.len > 0)
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(!istype(src, /mob/living/carbon/slime/adult))
|
||||
if(!starving)
|
||||
for(var/mob/living/carbon/C in targets)
|
||||
if(!Discipline && prob(5))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/metroid/Login()
|
||||
/mob/living/carbon/slime/Login()
|
||||
..()
|
||||
update_hud()
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/metroid
|
||||
name = "baby roro"
|
||||
/mob/living/carbon/slime
|
||||
name = "baby slime"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "baby roro"
|
||||
icon_state = "baby slime"
|
||||
pass_flags = PASSTABLE
|
||||
voice_message = "skree!"
|
||||
say_message = "hums"
|
||||
@@ -17,33 +17,33 @@
|
||||
|
||||
see_in_dark = 8
|
||||
|
||||
// canstun and canweaken don't affect metroids because they ignore stun and weakened variables
|
||||
// canstun and canweaken don't affect slimes because they ignore stun and weakened variables
|
||||
// for the sake of cleanliness, though, here they are.
|
||||
status_flags = CANPARALYSE|CANPUSH
|
||||
|
||||
var/cores = 3 // the number of /obj/item/metroid_core's the metroid has left inside
|
||||
var/cores = 3 // the number of /obj/item/slime_core's the slime has left inside
|
||||
|
||||
var/powerlevel = 0 // 1-10 controls how much electricity they are generating
|
||||
var/amount_grown = 0 // controls how long the metroid has been overfed, if 10, grows into an adult
|
||||
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows into an adult
|
||||
// if adult: if 10: reproduces
|
||||
|
||||
|
||||
var/mob/living/Victim = null // the person the metroid is currently feeding on
|
||||
var/mob/living/Target = null // AI variable - tells the Metroid to hunt this down
|
||||
var/mob/living/Victim = null // the person the slime is currently feeding on
|
||||
var/mob/living/Target = null // AI variable - tells the slime to hunt this down
|
||||
|
||||
var/attacked = 0 // determines if it's been attacked recently. Can be any number, is a cooloff-ish variable
|
||||
var/tame = 0 // if set to 1, the Metroid will not eat humans ever, or attack them
|
||||
var/rabid = 0 // if set to 1, the Metroid will attack and eat anything it comes in contact with
|
||||
var/tame = 0 // if set to 1, the slime will not eat humans ever, or attack them
|
||||
var/rabid = 0 // if set to 1, the slime will attack and eat anything it comes in contact with
|
||||
|
||||
var/list/Friends = list() // A list of potential friends
|
||||
var/list/FriendsWeight = list() // A list containing values respective to Friends. This determines how many times a Metroid "likes" something. If the Metroid likes it more than 2 times, it becomes a friend
|
||||
var/list/FriendsWeight = list() // A list containing values respective to Friends. This determines how many times a slime "likes" something. If the slime likes it more than 2 times, it becomes a friend
|
||||
|
||||
// Metroids pass on genetic data, so all their offspring have the same "Friends",
|
||||
// slimes pass on genetic data, so all their offspring have the same "Friends",
|
||||
|
||||
/mob/living/carbon/metroid/adult
|
||||
name = "adult roro"
|
||||
/mob/living/carbon/slime/adult
|
||||
name = "adult slime"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "adult roro"
|
||||
icon_state = "adult slime"
|
||||
|
||||
health = 200
|
||||
gender = NEUTER
|
||||
@@ -52,25 +52,25 @@
|
||||
nutrition = 800 // 1200 = max
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/New()
|
||||
/mob/living/carbon/slime/New()
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
if(name == "baby roro")
|
||||
name = text("baby roro ([rand(1, 1000)])")
|
||||
if(name == "baby slime")
|
||||
name = text("baby slime ([rand(1, 1000)])")
|
||||
else
|
||||
name = text("adult roro ([rand(1,1000)])")
|
||||
name = text("adult slime ([rand(1,1000)])")
|
||||
real_name = name
|
||||
spawn (1)
|
||||
regenerate_icons()
|
||||
src << "\blue Your icons have been generated!"
|
||||
..()
|
||||
|
||||
/mob/living/carbon/metroid/adult/New()
|
||||
verbs.Remove(/mob/living/carbon/metroid/verb/ventcrawl)
|
||||
/mob/living/carbon/slime/adult/New()
|
||||
verbs.Remove(/mob/living/carbon/slime/verb/ventcrawl)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/metroid/movement_delay()
|
||||
/mob/living/carbon/slime/movement_delay()
|
||||
var/tally = 0
|
||||
|
||||
var/health_deficiency = (100 - health)
|
||||
@@ -80,22 +80,22 @@
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
|
||||
if(reagents)
|
||||
if(reagents.has_reagent("hyperzine")) // hyperzine slows Metroids down
|
||||
if(reagents.has_reagent("hyperzine")) // hyperzine slows slimes down
|
||||
tally *= 2 // moves twice as slow
|
||||
|
||||
if(reagents.has_reagent("frostoil")) // frostoil also makes them move VEEERRYYYYY slow
|
||||
tally *= 5
|
||||
|
||||
if(health <= 0) // if damaged, the metroid moves twice as slow
|
||||
if(health <= 0) // if damaged, the slime moves twice as slow
|
||||
tally *= 2
|
||||
|
||||
if (bodytemperature >= 330.23) // 135 F
|
||||
return -1 // Metroids become supercharged at high temperatures
|
||||
return -1 // slimes become supercharged at high temperatures
|
||||
|
||||
return tally+config.metroid_delay
|
||||
return tally+config.slime_delay
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/Bump(atom/movable/AM as mob|obj, yes)
|
||||
/mob/living/carbon/slime/Bump(atom/movable/AM as mob|obj, yes)
|
||||
spawn( 0 )
|
||||
if ((!( yes ) || now_pushing))
|
||||
return
|
||||
@@ -115,9 +115,9 @@
|
||||
|
||||
|
||||
if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille))
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(nutrition <= 600 && !Atkcool)
|
||||
AM.attack_metroid(src)
|
||||
AM.attack_slime(src)
|
||||
spawn()
|
||||
Atkcool = 1
|
||||
sleep(15)
|
||||
@@ -125,7 +125,7 @@
|
||||
else
|
||||
if(nutrition <= 500 && !Atkcool)
|
||||
if(prob(5))
|
||||
AM.attack_metroid(src)
|
||||
AM.attack_slime(src)
|
||||
spawn()
|
||||
Atkcool = 1
|
||||
sleep(15)
|
||||
@@ -134,7 +134,7 @@
|
||||
if(ismob(AM))
|
||||
var/mob/tmob = AM
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(istype(tmob, /mob/living/carbon/human))
|
||||
if(prob(90))
|
||||
now_pushing = 0
|
||||
@@ -162,22 +162,22 @@
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/carbon/metroid/Process_Spacemove()
|
||||
/mob/living/carbon/slime/Process_Spacemove()
|
||||
return 2
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/Stat()
|
||||
/mob/living/carbon/slime/Stat()
|
||||
..()
|
||||
|
||||
statpanel("Status")
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
stat(null, "Health: [round((health / 200) * 100)]%")
|
||||
else
|
||||
stat(null, "Health: [round((health / 150) * 100)]%")
|
||||
|
||||
|
||||
if (client.statpanel == "Status")
|
||||
if(istype(src,/mob/living/carbon/metroid/adult))
|
||||
if(istype(src,/mob/living/carbon/slime/adult))
|
||||
stat(null, "Nutrition: [nutrition]/1200")
|
||||
if(amount_grown >= 10)
|
||||
stat(null, "You can reproduce!")
|
||||
@@ -189,21 +189,21 @@
|
||||
stat(null,"Power Level: [powerlevel]")
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/adjustFireLoss(amount)
|
||||
/mob/living/carbon/slime/adjustFireLoss(amount)
|
||||
..(-abs(amount)) // Heals them
|
||||
return
|
||||
|
||||
/mob/living/carbon/metroid/bullet_act(var/obj/item/projectile/Proj)
|
||||
/mob/living/carbon/slime/bullet_act(var/obj/item/projectile/Proj)
|
||||
attacked += 10
|
||||
..(Proj)
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/emp_act(severity)
|
||||
/mob/living/carbon/slime/emp_act(severity)
|
||||
powerlevel = 0 // oh no, the power!
|
||||
..()
|
||||
|
||||
/mob/living/carbon/metroid/ex_act(severity)
|
||||
/mob/living/carbon/slime/ex_act(severity)
|
||||
|
||||
if (stat == 2 && client)
|
||||
return
|
||||
@@ -234,7 +234,7 @@
|
||||
updatehealth()
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/blob_act()
|
||||
/mob/living/carbon/slime/blob_act()
|
||||
if (stat == 2)
|
||||
return
|
||||
var/shielded = 0
|
||||
@@ -256,14 +256,14 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/u_equip(obj/item/W as obj)
|
||||
/mob/living/carbon/slime/u_equip(obj/item/W as obj)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/attack_ui(slot)
|
||||
/mob/living/carbon/slime/attack_ui(slot)
|
||||
return
|
||||
|
||||
/mob/living/carbon/metroid/meteorhit(O as obj)
|
||||
/mob/living/carbon/slime/meteorhit(O as obj)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message(text("\red [] has been hit by []", src, O), 1)
|
||||
@@ -275,7 +275,7 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/Move(a, b, flag)
|
||||
/mob/living/carbon/slime/Move(a, b, flag)
|
||||
|
||||
var/t7 = 1
|
||||
if (restrained())
|
||||
@@ -337,7 +337,7 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/carbon/slime/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -353,7 +353,7 @@
|
||||
var/damage = rand(1, 3)
|
||||
attacked += 5
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
damage = rand(1, 6)
|
||||
else
|
||||
damage = rand(1, 3)
|
||||
@@ -366,7 +366,7 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/attack_animal(mob/living/simple_animal/M as mob)
|
||||
/mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob)
|
||||
if(M.melee_damage_upper == 0)
|
||||
M.emote("[M.friendly] [src]")
|
||||
else
|
||||
@@ -380,7 +380,7 @@
|
||||
adjustBruteLoss(damage)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/carbon/metroid/attack_paw(mob/living/carbon/monkey/M as mob)
|
||||
/mob/living/carbon/slime/attack_paw(mob/living/carbon/monkey/M as mob)
|
||||
if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
|
||||
|
||||
if (!ticker)
|
||||
@@ -401,16 +401,16 @@
|
||||
return
|
||||
if (health > 0)
|
||||
attacked += 10
|
||||
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
|
||||
//playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[M.name] has bit [src]!</B>"), 1)
|
||||
O.show_message(text("\red <B>[M.name] has attacked [src]!</B>"), 1)
|
||||
adjustBruteLoss(rand(1, 3))
|
||||
updatehealth()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/attack_hand(mob/living/carbon/human/M as mob)
|
||||
/mob/living/carbon/slime/attack_hand(mob/living/carbon/human/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -466,7 +466,7 @@
|
||||
if(prob(80) && !client)
|
||||
Discipline++
|
||||
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(!istype(src, /mob/living/carbon/slime/adult))
|
||||
if(Discipline == 1)
|
||||
attacked = 0
|
||||
|
||||
@@ -566,7 +566,7 @@
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
/mob/living/carbon/slime/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -591,7 +591,7 @@
|
||||
damage = rand(20, 40)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has slashed [name]!</B>", M), 1)
|
||||
O.show_message(text("\red <B>[] has attacked [name]!</B>", M), 1)
|
||||
else
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
@@ -635,7 +635,7 @@
|
||||
anchored = 0
|
||||
if(prob(80) && !client)
|
||||
Discipline++
|
||||
if(!istype(src, /mob/living/carbon/metroid))
|
||||
if(!istype(src, /mob/living/carbon/slime))
|
||||
if(Discipline == 1)
|
||||
attacked = 0
|
||||
|
||||
@@ -660,15 +660,15 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/restrained()
|
||||
/mob/living/carbon/slime/restrained()
|
||||
return 0
|
||||
|
||||
|
||||
mob/living/carbon/metroid/var/co2overloadtime = null
|
||||
mob/living/carbon/metroid/var/temperature_resistance = T0C+75
|
||||
mob/living/carbon/slime/var/co2overloadtime = null
|
||||
mob/living/carbon/slime/var/temperature_resistance = T0C+75
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/show_inv(mob/user as mob)
|
||||
/mob/living/carbon/slime/show_inv(mob/user as mob)
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = {"
|
||||
@@ -680,22 +680,22 @@ mob/living/carbon/metroid/var/temperature_resistance = T0C+75
|
||||
onclose(user, "mob[name]")
|
||||
return
|
||||
|
||||
/mob/living/carbon/metroid/updatehealth()
|
||||
/mob/living/carbon/slime/updatehealth()
|
||||
if(status_flags & GODMODE)
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
health = 200
|
||||
else
|
||||
health = 150
|
||||
stat = CONSCIOUS
|
||||
else
|
||||
// metroids can't suffocate unless they suicide. They are also not harmed by fire
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
// slimes can't suffocate unless they suicide. They are also not harmed by fire
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
else
|
||||
health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/proc/get_obstacle_ok(atom/A)
|
||||
/mob/living/carbon/slime/proc/get_obstacle_ok(atom/A)
|
||||
var/direct = get_dir(src, A)
|
||||
var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( src.loc )
|
||||
var/ok = 0
|
||||
@@ -777,12 +777,12 @@ mob/living/carbon/metroid/var/temperature_resistance = T0C+75
|
||||
return 1
|
||||
|
||||
|
||||
// Basically this Metroid Core catalyzes reactions that normally wouldn't happen anywhere
|
||||
/obj/item/metroid_core
|
||||
name = "roro core"
|
||||
desc = "A very slimy and tender part of a Rorobeast. Legends claim these to have \"magical powers\"."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "roro core"
|
||||
// Basically this slime Core catalyzes reactions that normally wouldn't happen anywhere
|
||||
/obj/item/slime_core
|
||||
name = "slime extract"
|
||||
desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "slime extract"
|
||||
flags = TABLEPASS
|
||||
force = 1.0
|
||||
w_class = 1.0
|
||||
@@ -794,7 +794,7 @@ mob/living/carbon/metroid/var/temperature_resistance = T0C+75
|
||||
var/Flush = 30
|
||||
var/Uses = 5 // uses before it goes inert
|
||||
|
||||
/obj/item/metroid_core/New()
|
||||
/obj/item/slime_core/New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
reagents = R
|
||||
@@ -815,45 +815,45 @@ mob/living/carbon/metroid/var/temperature_resistance = T0C+75
|
||||
Flush = 30
|
||||
*/
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro
|
||||
name = "roro egg"
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime
|
||||
name = "slime egg"
|
||||
desc = "A small, gelatinous egg."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "roro egg-growing"
|
||||
icon_state = "slime egg-growing"
|
||||
bitesize = 12
|
||||
origin_tech = "biotech=4"
|
||||
var/grown = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro/New()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 4)
|
||||
reagents.add_reagent("rorojelly", 1)
|
||||
reagents.add_reagent("slimejelly", 1)
|
||||
spawn(rand(1200,1500))//the egg takes a while to "ripen"
|
||||
Grow()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro/proc/Grow()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/proc/Grow()
|
||||
grown = 1
|
||||
icon_state = "roro egg-grown"
|
||||
icon_state = "slime egg-grown"
|
||||
processing_objects.Add(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro/proc/Hatch()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/proc/Hatch()
|
||||
processing_objects.Remove(src)
|
||||
var/turf/T = get_turf(src)
|
||||
src.visible_message("\blue The [name] pulsates and quivers!")
|
||||
spawn(rand(50,100))
|
||||
src.visible_message("\blue The [name] bursts open!")
|
||||
new/mob/living/carbon/metroid(T)
|
||||
new/mob/living/carbon/slime(T)
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro/process()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/process()
|
||||
var/turf/location = get_turf(src)
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
if (environment.toxins > MOLES_PLASMA_VISIBLE)//plasma exposure causes the egg to hatch
|
||||
src.Hatch()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/roro/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype( W, /obj/item/toy/crayon ))
|
||||
return
|
||||
else
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/metroid/verb/Feed()
|
||||
set category = "Roro"
|
||||
/mob/living/carbon/slime/verb/Feed()
|
||||
set category = "Slime"
|
||||
set desc = "This will let you feed on any valid creature in the surrounding area. This should also be used to halt the feeding process."
|
||||
if(Victim)
|
||||
Feedstop()
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/C in view(1,src))
|
||||
if(C!=src && !istype(C,/mob/living/carbon/metroid))
|
||||
if(C!=src && !istype(C,/mob/living/carbon/slime))
|
||||
choices += C
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to feed on?") in null|choices
|
||||
@@ -19,11 +19,11 @@
|
||||
if(M in view(1, src))
|
||||
|
||||
if(!istype(src, /mob/living/carbon/brain))
|
||||
if(!istype(M, /mob/living/carbon/metroid))
|
||||
if(!istype(M, /mob/living/carbon/slime))
|
||||
if(stat != 2)
|
||||
if(health > -70)
|
||||
|
||||
for(var/mob/living/carbon/metroid/met in view())
|
||||
for(var/mob/living/carbon/slime/met in view())
|
||||
if(met.Victim == M && met != src)
|
||||
src << "<i>The [met.name] is already feeding on this subject...</i>"
|
||||
return
|
||||
@@ -42,17 +42,17 @@
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/proc/Feedon(var/mob/living/carbon/M)
|
||||
/mob/living/carbon/slime/proc/Feedon(var/mob/living/carbon/M)
|
||||
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))
|
||||
icon_state = "adult roro eat"
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
icon_state = "adult slime eat"
|
||||
else
|
||||
icon_state = "baby roro eat"
|
||||
icon_state = "baby slime eat"
|
||||
|
||||
while(Victim && M.health > -70 && stat != 2)
|
||||
// M.canmove = 0
|
||||
@@ -84,9 +84,9 @@
|
||||
adjustCloneLoss(-10)
|
||||
|
||||
if(Victim)
|
||||
for(var/mob/living/carbon/metroid/Metroid in view(1,M))
|
||||
if(Metroid.Victim == M && Metroid != src)
|
||||
Metroid.Feedstop()
|
||||
for(var/mob/living/carbon/slime/slime in view(1,M))
|
||||
if(slime.Victim == M && slime != src)
|
||||
slime.Feedstop()
|
||||
|
||||
nutrition += rand(10,25)
|
||||
if(nutrition >= lastnut + 50)
|
||||
@@ -96,7 +96,7 @@
|
||||
if(powerlevel > 10)
|
||||
powerlevel = 10
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(nutrition > 1200)
|
||||
nutrition = 1200
|
||||
else
|
||||
@@ -119,14 +119,14 @@
|
||||
break
|
||||
|
||||
if(stat == 2)
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult))
|
||||
icon_state = "baby roro dead"
|
||||
if(!istype(src, /mob/living/carbon/slime/adult))
|
||||
icon_state = "baby slime dead"
|
||||
|
||||
else
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
icon_state = "adult roro"
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
icon_state = "adult slime"
|
||||
else
|
||||
icon_state = "baby roro"
|
||||
icon_state = "baby slime"
|
||||
|
||||
canmove = 1
|
||||
anchored = 0
|
||||
@@ -152,64 +152,81 @@
|
||||
|
||||
Victim = null
|
||||
|
||||
/mob/living/carbon/metroid/proc/Feedstop()
|
||||
/mob/living/carbon/slime/proc/Feedstop()
|
||||
if(Victim)
|
||||
if(Victim.client) Victim << "[src] has let go of your head!"
|
||||
Victim = null
|
||||
|
||||
/mob/living/carbon/metroid/proc/UpdateFeed(var/mob/M)
|
||||
/mob/living/carbon/slime/proc/UpdateFeed(var/mob/M)
|
||||
if(Victim)
|
||||
if(Victim == M)
|
||||
loc = M.loc // simple "attach to head" effect!
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/verb/Evolve()
|
||||
set category = "Roro"
|
||||
set desc = "This will let you evolve from baby to adult metroid."
|
||||
/mob/living/carbon/slime/verb/Evolve()
|
||||
set category = "slime"
|
||||
set desc = "This will let you evolve from baby to adult slime."
|
||||
|
||||
if(stat)
|
||||
src << "<i>I must be conscious to do this...</i>"
|
||||
return
|
||||
if(!istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(!istype(src, /mob/living/carbon/slime/adult))
|
||||
if(amount_grown >= 10)
|
||||
var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult(loc)
|
||||
new_metroid.nutrition = nutrition
|
||||
new_metroid.powerlevel = max(0, powerlevel-1)
|
||||
new_metroid.a_intent = "hurt"
|
||||
new_metroid.key = key
|
||||
var/mob/living/carbon/slime/adult/new_slime = new /mob/living/carbon/slime/adult(loc)
|
||||
new_slime.nutrition = nutrition
|
||||
new_slime.powerlevel = max(0, powerlevel-1)
|
||||
new_slime.a_intent = "hurt"
|
||||
new_slime.key = key
|
||||
|
||||
new_metroid << "<B>You are now an adult Metroid.</B>"
|
||||
new_slime << "<B>You are now an adult slime.</B>"
|
||||
del(src)
|
||||
else
|
||||
src << "<i>I am not ready to evolve yet...</i>"
|
||||
else
|
||||
src << "<i>I have already evolved...</i>"
|
||||
|
||||
/mob/living/carbon/metroid/verb/Reproduce()
|
||||
set category = "Roro"
|
||||
set desc = "This will make you lay an egg. NOTE: This decreases your nutrition."
|
||||
/mob/living/carbon/slime/verb/Reproduce()
|
||||
set category = "Slime"
|
||||
set desc = "This will make you split into a random number of Slimes (usually 2). NOTE: this will KILL you, but you will be transferred into one of the babies."
|
||||
|
||||
if(stat)
|
||||
src << "<i>I must be conscious to do this...</i>"
|
||||
return
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
if(amount_grown >= 10)
|
||||
if(src.nutrition >= 300)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/egg/roro(loc)
|
||||
src.nutrition -= 200
|
||||
else
|
||||
src << "<i>I have not fed enough...</i>"
|
||||
if(input("Are you absolutely sure you want to reproduce? Your current body will cease to be, but your consciousness will be transferred into a produced slime.") in list("Yes","No")=="Yes")
|
||||
if(stat)
|
||||
src << "<i>I must be conscious to do this...</i>"
|
||||
return
|
||||
|
||||
var/list/babies = list()
|
||||
var/number = pick(14;2,3,4)
|
||||
var/new_nutrition = round(nutrition * 0.9)
|
||||
var/new_powerlevel = round(powerlevel / number)
|
||||
for(var/i=1,i<=number,i++) // reproduce (has a small chance of producing 3 or 4 offspring)
|
||||
var/mob/living/carbon/slime/M = new/mob/living/carbon/slime(loc)
|
||||
M.nutrition = new_nutrition
|
||||
M.powerlevel = new_powerlevel
|
||||
if(i != 1) step_away(M,src)
|
||||
babies += M
|
||||
|
||||
var/mob/living/carbon/slime/new_slime = pick(babies)
|
||||
new_slime.a_intent = "hurt"
|
||||
new_slime.key = key
|
||||
|
||||
new_slime << "<B>You are now a slime!</B>"
|
||||
del(src)
|
||||
else
|
||||
src << "<i>I am not ready to reproduce yet...</i>"
|
||||
else
|
||||
src << "<i>I am not old enough to lay eggs yet...</i>"
|
||||
src << "<i>I am not old enough to reproduce yet...</i>"
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/metroid/verb/ventcrawl()
|
||||
/mob/living/carbon/slime/verb/ventcrawl()
|
||||
set name = "Crawl through Vent"
|
||||
set desc = "Enter an air vent and crawl through the pipe system."
|
||||
set category = "Roro"
|
||||
set category = "Slime"
|
||||
if(Victim) return
|
||||
handle_ventcrawl()
|
||||
handle_ventcrawl()
|
||||
@@ -1,10 +1,10 @@
|
||||
/mob/living/carbon/metroid/say(var/message)
|
||||
/mob/living/carbon/slime/say(var/message)
|
||||
if (silent)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/metroid/say_quote(var/text)
|
||||
/mob/living/carbon/slime/say_quote(var/text)
|
||||
var/ending = copytext(text, length(text))
|
||||
|
||||
if (ending == "?")
|
||||
@@ -14,8 +14,8 @@
|
||||
|
||||
return "telepathically chirps, \"[text]\"";
|
||||
|
||||
/mob/living/carbon/metroid/say_understands(var/other)
|
||||
if (istype(other, /mob/living/carbon/metroid))
|
||||
/mob/living/carbon/slime/say_understands(var/other)
|
||||
if (istype(other, /mob/living/carbon/slime))
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
updatehealth()
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/carbon/monkey/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -352,7 +352,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
damage = rand(20, 40)
|
||||
else
|
||||
damage = rand(5, 35)
|
||||
@@ -457,7 +457,7 @@
|
||||
if ((s_active && !( contents.Find(s_active) )))
|
||||
s_active.close(src)
|
||||
|
||||
for(var/mob/living/carbon/metroid/M in view(1,src))
|
||||
for(var/mob/living/carbon/slime/M in view(1,src))
|
||||
M.UpdateFeed(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/oxyloss = 0.0 //Oxygen depravation damage (no air in lungs)
|
||||
var/toxloss = 0.0 //Toxic damage caused by being poisoned or radiated
|
||||
var/fireloss = 0.0 //Burn damage caused by being way too hot, too cold or burnt.
|
||||
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. Metroids also deal cloneloss damage to victims
|
||||
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
|
||||
var/halloss = 0 //Hallucination damage. 'Fake' damage obtained through hallucinating or the holodeck. Sleeping should cause it to wear off.
|
||||
|
||||
|
||||
@@ -638,7 +638,7 @@
|
||||
|
||||
|
||||
|
||||
/mob/living/silicon/robot/attack_metroid(mob/living/carbon/metroid/M as mob)
|
||||
/mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob)
|
||||
if (!ticker)
|
||||
M << "You cannot attack people before the game has started."
|
||||
return
|
||||
@@ -653,7 +653,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
if(istype(src, /mob/living/carbon/slime/adult))
|
||||
damage = rand(20, 40)
|
||||
else
|
||||
damage = rand(5, 35)
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
statpanel("[P.panel]","",P)
|
||||
*/
|
||||
|
||||
//The last mob/living/carbon to push/drag/grab this mob (mostly used by Metroids friend recognition)
|
||||
//The last mob/living/carbon to push/drag/grab this mob (mostly used by slimes friend recognition)
|
||||
var/mob/living/carbon/LAssailant = null
|
||||
|
||||
//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
return
|
||||
*/
|
||||
|
||||
if(istype(affecting, /mob/living/carbon/metroid))
|
||||
if(istype(affecting, /mob/living/carbon/slime))
|
||||
assailant << "\blue You squeeze [affecting], but nothing interesting happens."
|
||||
return
|
||||
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/ismetroid(A)
|
||||
if(istype(A, /mob/living/carbon/metroid))
|
||||
/proc/isslime(A)
|
||||
if(istype(A, /mob/living/carbon/slime))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/ismetroidadult(A)
|
||||
if(istype(A, /mob/living/carbon/metroid/adult))
|
||||
/proc/isslimeadult(A)
|
||||
if(istype(A, /mob/living/carbon/slime/adult))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
del(src)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/Metroidize(adult as num, reproduce as num)
|
||||
/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num)
|
||||
if (monkeyizing)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
@@ -220,25 +220,25 @@
|
||||
for(var/t in organs)
|
||||
del(t)
|
||||
|
||||
var/mob/living/carbon/metroid/new_metroid
|
||||
var/mob/living/carbon/slime/new_slime
|
||||
if(reproduce)
|
||||
var/number = pick(14;2,3,4) //reproduce (has a small chance of producing 3 or 4 offspring)
|
||||
var/list/babies = list()
|
||||
for(var/i=1,i<=number,i++)
|
||||
var/mob/living/carbon/metroid/M = new/mob/living/carbon/metroid(loc)
|
||||
var/mob/living/carbon/slime/M = new/mob/living/carbon/slime(loc)
|
||||
M.nutrition = round(nutrition/number)
|
||||
step_away(M,src)
|
||||
babies += M
|
||||
new_metroid = pick(babies)
|
||||
new_slime = pick(babies)
|
||||
else
|
||||
if(adult)
|
||||
new_metroid = new /mob/living/carbon/metroid/adult(loc)
|
||||
new_slime = new /mob/living/carbon/slime/adult(loc)
|
||||
else
|
||||
new_metroid = new /mob/living/carbon/metroid(loc)
|
||||
new_metroid.a_intent = "hurt"
|
||||
new_metroid.key = key
|
||||
new_slime = new /mob/living/carbon/slime(loc)
|
||||
new_slime.a_intent = "hurt"
|
||||
new_slime.key = key
|
||||
|
||||
new_metroid << "<B>You are now a Metroid. Skreee!</B>"
|
||||
new_slime << "<B>You are now a slime. Skreee!</B>"
|
||||
spawn(0)//To prevent the proc from returning null.
|
||||
del(src)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user