From 03464e1f4d92da421cc5b40f649f5e3c0be2de0d Mon Sep 17 00:00:00 2001 From: Incoming Date: Mon, 13 Jan 2014 19:38:37 -0500 Subject: [PATCH] Slime Mob Refactor Death of the istype invasion from slimes, previously every single color of slime was its own kind of mob, and every single one of those slimes also had an adult form which was a different mob. There is now only one kind of slime, reliant on new var is_adult and old var colour to determine how it looks. All baby slimes functioned identically outside of icon and core, and all adult slimes functioned identically to each other and to the babys save for a bit higher Health and more capacity to break shit. A nice side effect is that this solves any inheritence issues of baby slimes growing up since it's still the same mob, though it doesn't solve the same issues for adult slimes splitting. Also fixed a few annoying but rare bugs (like getting ghosted because you got DC'd and your slime self split and you weren't around to get mind transfered) --- code/_onclick/item_attack.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/objects/structures/grille.dm | 4 +- code/game/objects/structures/mirror.dm | 1 - code/game/objects/structures/window.dm | 4 +- code/modules/admin/topic.dm | 1 - .../living/carbon/alien/humanoid/humanoid.dm | 2 +- .../mob/living/carbon/alien/larva/larva.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/metroid/death.dm | 28 +- .../modules/mob/living/carbon/metroid/life.dm | 50 +- .../mob/living/carbon/metroid/metroid.dm | 57 +- .../mob/living/carbon/metroid/powers.dm | 41 +- .../mob/living/carbon/metroid/subtypes.dm | 515 +++--------------- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 6 +- code/modules/mob/mob_helpers.dm | 5 - code/modules/mob/transform_procs.dm | 7 +- 19 files changed, 155 insertions(+), 578 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 063a1eb6f40..12ea157a3bc 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -59,7 +59,7 @@ slime.Discipline = 0 if(power >= 3) - if(istype(slime, /mob/living/carbon/slime/adult)) + if(slime.is_adult) if(prob(5 + round(power/2))) if(slime.Victim) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 3c095b71aba..85f8d7d383c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -153,7 +153,7 @@ return src.attack_hand(user) /obj/machinery/door/window/attack_paw(mob/user as mob) - if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/slime/adult)) + if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/slime/)) if(src.operating) return src.health = max(0, src.health - 25) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c3a04fb3315..9eed23ad697 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -59,8 +59,8 @@ healthcheck() return -/obj/structure/grille/attack_slime(mob/user as mob) - if(!istype(user, /mob/living/carbon/slime/adult)) return +/obj/structure/grille/attack_slime(mob/living/carbon/slime/user as mob) + if(!user.is_adult) return playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) user.visible_message("[user] smashes against [src].", \ diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 76e17f53146..97e471eabb8 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -89,7 +89,6 @@ /obj/structure/mirror/attack_slime(mob/user as mob) - if(!isslimeadult(user)) return if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a339db1ca01..3dc680175db 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -147,8 +147,8 @@ attack_generic(M, M.melee_damage_upper) -/obj/structure/window/attack_slime(mob/user as mob) - if(!isslimeadult(user)) return +/obj/structure/window/attack_slime(mob/living/carbon/slime/user as mob) + if(!user.is_adult) return attack_generic(user, rand(10, 15)) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 67f9c0fac6d..83d4e62a2c9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -219,7 +219,6 @@ if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob ) if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob ) - if("adultslime") M.change_mob_type( /mob/living/carbon/slime/adult , null, null, delmob ) if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob ) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index a3dedef0122..f7204a30410 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -165,7 +165,7 @@ var/damage = rand(1, 3) - if(istype(M, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(10, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 7f88fb56c6b..7707bb5d700 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -181,7 +181,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 41ddbb312f6..51665ffc5f5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -244,7 +244,7 @@ var/damage = rand(1, 3) - if(istype(M, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(10, 35) else damage = rand(5, 25) diff --git a/code/modules/mob/living/carbon/metroid/death.dm b/code/modules/mob/living/carbon/metroid/death.dm index 92ecf85b4ce..630ef977ae6 100644 --- a/code/modules/mob/living/carbon/metroid/death.dm +++ b/code/modules/mob/living/carbon/metroid/death.dm @@ -1,23 +1,19 @@ /mob/living/carbon/slime/death(gibbed) + if(!gibbed) + if(is_adult) + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime(loc) + M.colour = colour + M.rabid = 1 + is_adult = 0 + regenerate_icons() + health = maxHealth + return + if(stat == DEAD) return stat = DEAD icon_state = "[colour] baby slime dead" - - if(!gibbed) - if(istype(src, /mob/living/carbon/slime/adult)) - ghostize() - var/mob/living/carbon/slime/M1 = new primarytype(loc) - M1.rabid = 1 - if(src.mind) - src.mind.transfer_to(M1) - else - M1.key = src.key - var/mob/living/carbon/slime/M2 = new primarytype(loc) - M2.rabid = 1 - if(src) del(src) - else - for(var/mob/O in viewers(src, null)) - O.show_message("The [name] seizes up and falls limp...", 1) //ded -- Urist + for(var/mob/O in viewers(src, null)) + O.show_message("The [name] seizes up and falls limp...", 1) //ded -- Urist update_canmove() if(blind) blind.layer = 0 diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index f5cab1a36bc..62bb12487de 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -55,7 +55,7 @@ var/hungry = 0 var/starving = 0 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) switch(nutrition) if(400 to 1100) hungry = 1 if(0 to 399) @@ -229,7 +229,7 @@ /mob/living/carbon/slime/proc/handle_regular_status_updates() - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) else health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) @@ -310,7 +310,7 @@ /mob/living/carbon/slime/proc/handle_nutrition() if(prob(20)) - if(istype(src, /mob/living/carbon/slime/adult)) nutrition-=rand(4,6) + if(is_adult) nutrition-=rand(4,6) else nutrition-=rand(2,3) if(nutrition <= 0) @@ -320,7 +320,7 @@ adjustToxLoss(rand(0,5)) else - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition >= 1000) if(prob(40)) amount_grown++ @@ -329,36 +329,12 @@ if(prob(40)) amount_grown++ if(amount_grown >= 10 && !Victim && !Target) - if(istype(src, /mob/living/carbon/slime/adult)) - if(!client) - for(var/i=1,i<=4,i++) - var/newslime - if(prob(70)) - newslime = primarytype - else - newslime = slime_mutation[rand(1,4)] - - var/mob/living/carbon/slime/M = new newslime(loc) - M.powerlevel = round(powerlevel/4) - M.Friends = Friends - M.tame = tame - M.rabid = rabid - M.Discipline = Discipline - if(i != 1) step_away(M,src) - feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") - del(src) - - else - if(!client) - var/mob/living/carbon/slime/adult/A = new adulttype(src.loc) - A.nutrition = nutrition -// A.nutrition += 100 - A.powerlevel = max(0, powerlevel-1) - A.Friends = Friends - A.tame = tame - A.rabid = rabid - del(src) + if(!ckey) + if(is_adult) + Reproduce() + else + Evolve() /mob/living/carbon/slime/proc/handle_targets() if(Tempstun) @@ -403,7 +379,7 @@ 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 + if(is_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 @@ -435,7 +411,7 @@ continue if(issilicon(L)) - if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things + if(!is_adult) //Non-starving diciplined adult slimes wont eat things if(!starving && Discipline > 0) continue @@ -452,7 +428,7 @@ if(H.dna.mutantrace == "slime") continue - if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things + if(!is_adult) //Non-starving diciplined adult slimes wont eat things if(!starving && Discipline > 0) continue @@ -476,7 +452,7 @@ if((hungry || starving) && targets.len > 0) - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(!starving) for(var/mob/living/carbon/C in targets) if(!Discipline && prob(5)) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index af83e79751d..fd8f0109883 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -5,6 +5,7 @@ pass_flags = PASSTABLE voice_message = "skree!" say_message = "hums" + var/is_adult = 0 layer = 5 @@ -44,40 +45,22 @@ ///////////TIME FOR SUBSPECIES var/colour = "grey" - var/primarytype = /mob/living/carbon/slime - var/adulttype = /mob/living/carbon/slime/adult var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] -/mob/living/carbon/slime/adult - name = "adult slime" - icon = 'icons/mob/slimes.dmi' - icon_state = "grey adult slime" - - health = 200 - gender = NEUTER - - update_icon = 0 - nutrition = 800 // 1200 = max - - /mob/living/carbon/slime/New() create_reagents(100) - name = text("[colour] baby slime ([rand(1, 1000)])") - real_name = name - spawn (1) - regenerate_icons() - src << "\blue Your icons have been generated!" + spawn (0) + name = "[colour] [is_adult ? "adult" : "baby"] slime ([rand(1, 1000)])" + icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" + real_name = name + slime_mutation = mutation_table(colour) + coretype = text2path("/obj/item/slime_extract/[colour]") ..() -/mob/living/carbon/slime/adult/New() - //verbs.Remove(/mob/living/carbon/slime/verb/ventcrawl) +/mob/living/carbon/slime/regenerate_icons() + icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" ..() - name = text("[colour] adult slime ([rand(1,1000)])") - slime_mutation[1] = /mob/living/carbon/slime/orange - slime_mutation[2] = /mob/living/carbon/slime/metal - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/purple /mob/living/carbon/slime/movement_delay() var/tally = 0 @@ -123,7 +106,7 @@ if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille)) - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition <= 600 && !Atkcool) AM.attack_slime(src) spawn() @@ -142,7 +125,7 @@ if(ismob(AM)) var/mob/tmob = AM - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(istype(tmob, /mob/living/carbon/human)) if(prob(90)) now_pushing = 0 @@ -176,14 +159,14 @@ ..() statpanel("Status") - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_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/slime/adult)) + if(is_adult) stat(null, "Nutrition: [nutrition]/1200") if(amount_grown >= 10) stat(null, "You can reproduce!") @@ -291,7 +274,7 @@ var/damage = rand(1, 3) attacked += 5 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) damage = rand(1, 6) else damage = rand(1, 3) @@ -403,7 +386,7 @@ if(prob(80) && !client) Discipline++ - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(Discipline == 1) attacked = 0 @@ -712,7 +695,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. user << "\red The potion only works on baby slimes!" return ..() - if(istype(M, /mob/living/carbon/slime/adult)) //Can't tame adults + if(M.is_adult) //Can't tame adults user << "\red Only baby slimes can be tamed!" return..() if(M.stat) @@ -742,9 +725,9 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - attack(mob/living/carbon/slime/adult/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime/adult))//If target is not a slime. - user << "\red The potion only works on adult slimes!" + attack(mob/living/carbon/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. + user << "\red The potion only works on slimes!" return ..() if(M.stat) user << "\red The slime is dead!" @@ -778,7 +761,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. user << "\red The steroid only works on baby slimes!" return ..() - if(istype(M, /mob/living/carbon/slime/adult)) //Can't tame adults + if(M.is_adult) //Can't tame adults user << "\red Only baby slimes can use the steroid!" return..() if(M.stat) diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index c16039c5baf..29982814691 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -49,7 +49,7 @@ anchored = 1 var/lastnut = nutrition //if(M.client) M << "\red You legs become paralyzed!" - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) icon_state = "[colour] adult slime eat" else icon_state = "[colour] baby slime eat" @@ -96,7 +96,7 @@ if(powerlevel > 10) powerlevel = 10 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition > 1200) nutrition = 1200 else @@ -119,11 +119,11 @@ break if(stat == 2) - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) icon_state = "[colour] baby slime dead" else - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) icon_state = "[colour] adult slime" else icon_state = "[colour] baby slime" @@ -173,19 +173,13 @@ if(stat) src << "I must be conscious to do this..." return - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(amount_grown >= 10) - var/mob/living/carbon/slime/adult/new_slime = new adulttype(loc) - new_slime.nutrition = nutrition - new_slime.powerlevel = max(0, powerlevel-1) - new_slime.a_intent = "harm" - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - new_slime.universal_speak = universal_speak - new_slime << "You are now an adult slime." - del(src) + is_adult = 1 + maxHealth = 200 + amount_grown = 0 + regenerate_icons() + name = text("[colour] [is_adult ? "adult" : "baby"] slime ([rand(1, 1000)])") else src << "I am not ready to evolve yet..." else @@ -193,15 +187,14 @@ /mob/living/carbon/slime/verb/Reproduce() set category = "Slime" - set desc = "This will make you split into four Slimes. NOTE: this will KILL you, but you will be transferred into one of the babies." + set desc = "This will make you split into four Slimes." if(stat) src << "I must be conscious to do this..." return - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(amount_grown >= 10) - //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 must be conscious to do this..." return @@ -210,13 +203,11 @@ var/new_nutrition = round(nutrition * 0.9) var/new_powerlevel = round(powerlevel / 4) for(var/i=1,i<=4,i++) - var/newslime + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc) if(prob(70)) - newslime = primarytype + M.colour = colour else - newslime = slime_mutation[rand(1,4)] - - var/mob/living/carbon/slime/M = new newslime(loc) + M.colour = slime_mutation[rand(1,4)] M.nutrition = new_nutrition M.powerlevel = new_powerlevel if(i != 1) step_away(M,src) @@ -230,8 +221,6 @@ src.mind.transfer_to(new_slime) else new_slime.key = src.key - - new_slime << "You are now a slime!" del(src) else src << "I am not ready to reproduce yet..." diff --git a/code/modules/mob/living/carbon/metroid/subtypes.dm b/code/modules/mob/living/carbon/metroid/subtypes.dm index 2e6b6de0b1e..07ef76fa6b3 100644 --- a/code/modules/mob/living/carbon/metroid/subtypes.dm +++ b/code/modules/mob/living/carbon/metroid/subtypes.dm @@ -1,436 +1,79 @@ - -////////////////Tier 2 - -/mob/living/carbon/slime/purple - colour = "purple" - icon_state = "purple baby slime" - primarytype = /mob/living/carbon/slime/purple - adulttype = /mob/living/carbon/slime/adult/purple - coretype = /obj/item/slime_extract/purple - - -/mob/living/carbon/slime/adult/purple - icon_state = "purple adult slime" - colour = "purple" - primarytype = /mob/living/carbon/slime/purple - adulttype = /mob/living/carbon/slime/adult/purple - coretype = /obj/item/slime_extract/purple - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/darkpurple - slime_mutation[2] = /mob/living/carbon/slime/darkblue - slime_mutation[3] = /mob/living/carbon/slime/green - slime_mutation[4] = /mob/living/carbon/slime/green - -/mob/living/carbon/slime/metal - colour = "metal" - icon_state = "metal baby slime" - primarytype = /mob/living/carbon/slime/metal - adulttype = /mob/living/carbon/slime/adult/metal - coretype = /obj/item/slime_extract/metal - -/mob/living/carbon/slime/adult/metal - icon_state = "metal adult slime" - colour = "metal" - primarytype = /mob/living/carbon/slime/metal - adulttype = /mob/living/carbon/slime/adult/metal - coretype = /obj/item/slime_extract/metal - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/silver - slime_mutation[2] = /mob/living/carbon/slime/yellow - slime_mutation[3] = /mob/living/carbon/slime/gold - slime_mutation[4] = /mob/living/carbon/slime/gold - -/mob/living/carbon/slime/orange - colour = "orange" - icon_state = "orange baby slime" - primarytype = /mob/living/carbon/slime/orange - adulttype = /mob/living/carbon/slime/adult/orange - coretype = /obj/item/slime_extract/orange - -/mob/living/carbon/slime/adult/orange - colour = "orange" - icon_state = "orange adult slime" - primarytype = /mob/living/carbon/slime/orange - adulttype = /mob/living/carbon/slime/adult/orange - coretype = /obj/item/slime_extract/orange - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/red - slime_mutation[2] = /mob/living/carbon/slime/red - slime_mutation[3] = /mob/living/carbon/slime/darkpurple - slime_mutation[4] = /mob/living/carbon/slime/yellow - -/mob/living/carbon/slime/blue - colour = "blue" - icon_state = "blue baby slime" - primarytype = /mob/living/carbon/slime/blue - adulttype = /mob/living/carbon/slime/adult/blue - coretype = /obj/item/slime_extract/blue - -/mob/living/carbon/slime/adult/blue - icon_state = "blue adult slime" - colour = "blue" - primarytype = /mob/living/carbon/slime/blue - adulttype = /mob/living/carbon/slime/adult/blue - coretype = /obj/item/slime_extract/blue - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/darkblue - slime_mutation[2] = /mob/living/carbon/slime/pink - slime_mutation[3] = /mob/living/carbon/slime/pink - slime_mutation[4] = /mob/living/carbon/slime/silver - - -//Tier 3 - -/mob/living/carbon/slime/darkblue - colour = "dark blue" - icon_state = "dark blue baby slime" - primarytype = /mob/living/carbon/slime/darkblue - adulttype = /mob/living/carbon/slime/adult/darkblue - coretype = /obj/item/slime_extract/darkblue - -/mob/living/carbon/slime/adult/darkblue - icon_state = "dark blue adult slime" - colour = "dark blue" - primarytype = /mob/living/carbon/slime/darkblue - adulttype = /mob/living/carbon/slime/adult/darkblue - coretype = /obj/item/slime_extract/darkblue - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/purple - slime_mutation[2] = /mob/living/carbon/slime/cerulean - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/cerulean - -/mob/living/carbon/slime/darkpurple - colour = "dark purple" - icon_state = "dark purple baby slime" - primarytype = /mob/living/carbon/slime/darkpurple - adulttype = /mob/living/carbon/slime/adult/darkpurple - coretype = /obj/item/slime_extract/darkpurple - -/mob/living/carbon/slime/adult/darkpurple - icon_state = "dark purple adult slime" - colour = "dark purple" - primarytype = /mob/living/carbon/slime/darkpurple - adulttype = /mob/living/carbon/slime/adult/darkpurple - coretype = /obj/item/slime_extract/darkpurple - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/purple - slime_mutation[2] = /mob/living/carbon/slime/sepia - slime_mutation[3] = /mob/living/carbon/slime/orange - slime_mutation[4] = /mob/living/carbon/slime/sepia - - -/mob/living/carbon/slime/yellow - icon_state = "yellow baby slime" - colour = "yellow" - primarytype = /mob/living/carbon/slime/yellow - adulttype = /mob/living/carbon/slime/adult/yellow - coretype = /obj/item/slime_extract/yellow - -/mob/living/carbon/slime/adult/yellow - icon_state = "yellow adult slime" - colour = "yellow" - primarytype = /mob/living/carbon/slime/yellow - adulttype = /mob/living/carbon/slime/adult/yellow - coretype = /obj/item/slime_extract/yellow - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/metal - slime_mutation[2] = /mob/living/carbon/slime/bluespace - slime_mutation[3] = /mob/living/carbon/slime/orange - slime_mutation[4] = /mob/living/carbon/slime/bluespace - - -/mob/living/carbon/slime/silver - colour = "silver" - icon_state = "silver baby slime" - primarytype = /mob/living/carbon/slime/silver - adulttype = /mob/living/carbon/slime/adult/silver - coretype = /obj/item/slime_extract/silver - -/mob/living/carbon/slime/adult/silver - icon_state = "silver adult slime" - colour = "silver" - primarytype = /mob/living/carbon/slime/silver - adulttype = /mob/living/carbon/slime/adult/silver - coretype = /obj/item/slime_extract/silver - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/metal - slime_mutation[2] = /mob/living/carbon/slime/pyrite - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/pyrite - - -/////////////Tier 4 - - -/mob/living/carbon/slime/pink - colour = "pink" - icon_state = "pink baby slime" - primarytype = /mob/living/carbon/slime/pink - adulttype = /mob/living/carbon/slime/adult/pink - coretype = /obj/item/slime_extract/pink - -/mob/living/carbon/slime/adult/pink - icon_state = "pink adult slime" - colour = "pink" - primarytype = /mob/living/carbon/slime/pink - adulttype = /mob/living/carbon/slime/adult/pink - coretype = /obj/item/slime_extract/pink - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/pink - slime_mutation[2] = /mob/living/carbon/slime/pink - slime_mutation[3] = /mob/living/carbon/slime/lightpink - slime_mutation[4] = /mob/living/carbon/slime/lightpink - -/mob/living/carbon/slime/red - colour = "red" - icon_state = "red baby slime" - primarytype = /mob/living/carbon/slime/red - adulttype = /mob/living/carbon/slime/adult/red - coretype = /obj/item/slime_extract/red - -/mob/living/carbon/slime/adult/red - icon_state = "red adult slime" - colour = "red" - primarytype = /mob/living/carbon/slime/red - adulttype = /mob/living/carbon/slime/adult/red - coretype = /obj/item/slime_extract/red - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/red - slime_mutation[2] = /mob/living/carbon/slime/red - slime_mutation[3] = /mob/living/carbon/slime/oil - slime_mutation[4] = /mob/living/carbon/slime/oil - -/mob/living/carbon/slime/gold - colour = "gold" - icon_state = "gold baby slime" - primarytype = /mob/living/carbon/slime/gold - adulttype = /mob/living/carbon/slime/adult/gold - coretype = /obj/item/slime_extract/gold - -/mob/living/carbon/slime/adult/gold - icon_state = "gold adult slime" - colour = "gold" - primarytype = /mob/living/carbon/slime/gold - adulttype = /mob/living/carbon/slime/adult/gold - coretype = /obj/item/slime_extract/gold - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/gold - slime_mutation[2] = /mob/living/carbon/slime/gold - slime_mutation[3] = /mob/living/carbon/slime/adamantine - slime_mutation[4] = /mob/living/carbon/slime/adamantine - -/mob/living/carbon/slime/green - colour = "green" - icon_state = "green baby slime" - primarytype = /mob/living/carbon/slime/green - adulttype = /mob/living/carbon/slime/adult/green - coretype = /obj/item/slime_extract/green - -/mob/living/carbon/slime/adult/green - icon_state = "green adult slime" - colour = "green" - primarytype = /mob/living/carbon/slime/green - adulttype = /mob/living/carbon/slime/adult/green - coretype = /obj/item/slime_extract/green - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/green - slime_mutation[2] = /mob/living/carbon/slime/green - slime_mutation[3] = /mob/living/carbon/slime/black - slime_mutation[4] = /mob/living/carbon/slime/black - -// Tier 5 - -/mob/living/carbon/slime/lightpink - colour = "light pink" - icon_state = "light pink baby slime" - primarytype = /mob/living/carbon/slime/lightpink - adulttype = /mob/living/carbon/slime/adult/lightpink - coretype = /obj/item/slime_extract/lightpink - -/mob/living/carbon/slime/adult/lightpink - icon_state = "light pink adult slime" - colour = "light pink" - primarytype = /mob/living/carbon/slime/lightpink - adulttype = /mob/living/carbon/slime/adult/lightpink - coretype = /obj/item/slime_extract/lightpink - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/lightpink - slime_mutation[2] = /mob/living/carbon/slime/lightpink - slime_mutation[3] = /mob/living/carbon/slime/lightpink - slime_mutation[4] = /mob/living/carbon/slime/lightpink - -/mob/living/carbon/slime/oil - icon_state = "oil baby slime" - colour = "oil" - primarytype = /mob/living/carbon/slime/oil - adulttype = /mob/living/carbon/slime/adult/oil - coretype = /obj/item/slime_extract/oil - -/mob/living/carbon/slime/adult/oil - icon_state = "oil adult slime" - colour = "oil" - primarytype = /mob/living/carbon/slime/oil - adulttype = /mob/living/carbon/slime/adult/oil - coretype = /obj/item/slime_extract/oil - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/oil - slime_mutation[2] = /mob/living/carbon/slime/oil - slime_mutation[3] = /mob/living/carbon/slime/oil - slime_mutation[4] = /mob/living/carbon/slime/oil - -/mob/living/carbon/slime/black - icon_state = "black baby slime" - colour = "black" - primarytype = /mob/living/carbon/slime/black - adulttype = /mob/living/carbon/slime/adult/black - coretype = /obj/item/slime_extract/black - -/mob/living/carbon/slime/adult/black - icon_state = "black adult slime" - colour = "black" - primarytype = /mob/living/carbon/slime/black - adulttype = /mob/living/carbon/slime/adult/black - coretype = /obj/item/slime_extract/black - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/black - slime_mutation[2] = /mob/living/carbon/slime/black - slime_mutation[3] = /mob/living/carbon/slime/black - slime_mutation[4] = /mob/living/carbon/slime/black - -/mob/living/carbon/slime/adamantine - icon_state = "adamantine baby slime" - colour = "adamantine" - primarytype = /mob/living/carbon/slime/adamantine - adulttype = /mob/living/carbon/slime/adult/adamantine - coretype = /obj/item/slime_extract/adamantine - -/mob/living/carbon/slime/adult/adamantine - icon_state = "adamantine adult slime" - colour = "adamantine" - primarytype = /mob/living/carbon/slime/adamantine - adulttype = /mob/living/carbon/slime/adult/adamantine - coretype = /obj/item/slime_extract/adamantine - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/adamantine - slime_mutation[2] = /mob/living/carbon/slime/adamantine - slime_mutation[3] = /mob/living/carbon/slime/adamantine - slime_mutation[4] = /mob/living/carbon/slime/adamantine - -////////// Even in death I still code Tier ////////////// - -/mob/living/carbon/slime/bluespace - icon_state = "bluespace baby slime" - colour = "bluespace" - primarytype = /mob/living/carbon/slime/bluespace - adulttype = /mob/living/carbon/slime/adult/bluespace - coretype = /obj/item/slime_extract/bluespace - -/mob/living/carbon/slime/adult/bluespace - icon_state = "bluespace adult slime" - colour = "bluespace" - primarytype = /mob/living/carbon/slime/bluespace - adulttype = /mob/living/carbon/slime/adult/bluespace - coretype = /obj/item/slime_extract/bluespace - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/bluespace - slime_mutation[2] = /mob/living/carbon/slime/bluespace - slime_mutation[3] = /mob/living/carbon/slime/bluespace - slime_mutation[4] = /mob/living/carbon/slime/bluespace - -/mob/living/carbon/slime/pyrite - icon_state = "pyrite baby slime" - colour = "pyrite" - primarytype = /mob/living/carbon/slime/pyrite - adulttype = /mob/living/carbon/slime/adult/pyrite - coretype = /obj/item/slime_extract/pyrite - -/mob/living/carbon/slime/adult/pyrite - icon_state = "pyrite adult slime" - colour = "pyrite" - primarytype = /mob/living/carbon/slime/pyrite - adulttype = /mob/living/carbon/slime/adult/pyrite - coretype = /obj/item/slime_extract/pyrite - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/pyrite - slime_mutation[2] = /mob/living/carbon/slime/pyrite - slime_mutation[3] = /mob/living/carbon/slime/pyrite - slime_mutation[4] = /mob/living/carbon/slime/pyrite - -/mob/living/carbon/slime/cerulean - icon_state = "cerulean baby slime" - colour = "cerulean" - primarytype = /mob/living/carbon/slime/cerulean - adulttype = /mob/living/carbon/slime/adult/cerulean - coretype = /obj/item/slime_extract/cerulean - -/mob/living/carbon/slime/adult/cerulean - icon_state = "cerulean adult slime" - colour = "cerulean" - primarytype = /mob/living/carbon/slime/cerulean - adulttype = /mob/living/carbon/slime/adult/cerulean - coretype = /obj/item/slime_extract/cerulean - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/cerulean - slime_mutation[2] = /mob/living/carbon/slime/cerulean - slime_mutation[3] = /mob/living/carbon/slime/cerulean - slime_mutation[4] = /mob/living/carbon/slime/cerulean - -/mob/living/carbon/slime/sepia - icon_state = "sepia baby slime" - colour = "sepia" - primarytype = /mob/living/carbon/slime/sepia - adulttype = /mob/living/carbon/slime/adult/sepia - coretype = /obj/item/slime_extract/sepia - -/mob/living/carbon/slime/adult/sepia - icon_state = "sepia adult slime" - colour = "sepia" - primarytype = /mob/living/carbon/slime/sepia - adulttype = /mob/living/carbon/slime/adult/sepia - coretype = /obj/item/slime_extract/sepia - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/sepia - slime_mutation[2] = /mob/living/carbon/slime/sepia - slime_mutation[3] = /mob/living/carbon/slime/sepia - slime_mutation[4] = /mob/living/carbon/slime/sepia \ No newline at end of file +proc/mutation_table(var/colour) + var/list/slime_mutation[4] + switch(colour) + //Tier 1 + if("grey") + slime_mutation[1] = "orange" + slime_mutation[2] = "metal" + slime_mutation[3] = "blue" + slime_mutation[4] = "purple" + //Tier 2 + if("purple") + slime_mutation[1] = "darkpurple" + slime_mutation[2] = "darkblue" + slime_mutation[3] = "green" + slime_mutation[4] = "green" + if("metal") + slime_mutation[1] = "silver" + slime_mutation[2] = "yellow" + slime_mutation[3] = "gold" + slime_mutation[4] = "gold" + if("yellow") + slime_mutation[1] = "red" + slime_mutation[2] = "red" + slime_mutation[3] = "darkpurple" + slime_mutation[4] = "yellow" + if("blue") + slime_mutation[1] = "darkblue" + slime_mutation[2] = "pink" + slime_mutation[3] = "pink" + slime_mutation[4] = "silver" + //Tier 3 + if("darkblue") + slime_mutation[1] = "purple" + slime_mutation[2] = "cerulean" + slime_mutation[3] = "blue" + slime_mutation[4] = "cerulean" + if("darkpurple") + slime_mutation[1] = "purple" + slime_mutation[2] = "sepia" + slime_mutation[3] = "orange" + slime_mutation[4] = "sepia" + if("yellow") + slime_mutation[1] = "metal" + slime_mutation[2] = "bluespace" + slime_mutation[3] = "orange" + slime_mutation[4] = "bluespace" + if("silver") + slime_mutation[1] = "metal" + slime_mutation[2] = "pyrite" + slime_mutation[3] = "blue" + slime_mutation[4] = "pyrite" + //Tier 4 + if("pink") + slime_mutation[1] = "pink" + slime_mutation[2] = "pink" + slime_mutation[3] = "lightpink" + slime_mutation[4] = "lightpink" + if("red") + slime_mutation[1] = "red" + slime_mutation[2] = "red" + slime_mutation[3] = "oil" + slime_mutation[4] = "oil" + if("gold") + slime_mutation[1] = "gold" + slime_mutation[2] = "gold" + slime_mutation[3] = "adamantine" + slime_mutation[4] = "adamantine" + if("green") + slime_mutation[1] = "green" + slime_mutation[2] = "green" + slime_mutation[3] = "black" + slime_mutation[4] = "black" + // Tier 5 + else + slime_mutation[1] = "[colour]" + slime_mutation[2] = "[colour]" + slime_mutation[3] = "[colour]" + slime_mutation[4] = "[colour]" + return(slime_mutation) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 8217f0df4a9..6528981fbff 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -273,7 +273,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 43fc5db7108..ddf854239db 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -651,7 +651,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0e1fdd34f30..2501d2e1c26 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -363,7 +363,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) @@ -487,7 +487,7 @@ /mob/living/simple_animal/revive() health = maxHealth ..() - + /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 if(gender != FEMALE || stat || !scan_ready || !childtype || !species) return @@ -509,4 +509,4 @@ alone = 0 continue if(alone && partner && children < 3) - new childtype(loc) + new childtype(loc) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index ecbb91f74b6..63d292b63c4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -35,11 +35,6 @@ return 1 return 0 -/proc/isslimeadult(A) - if(istype(A, /mob/living/carbon/slime/adult)) - return 1 - return 0 - /proc/isrobot(A) if(istype(A, /mob/living/silicon/robot)) return 1 diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 5edc7dcad0c..174980c0813 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -339,7 +339,7 @@ . = new_xeno del(src) -/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num) +/mob/living/carbon/human/proc/slimeize(reproduce as num) if (notransform) return for(var/obj/item/W in src) @@ -363,10 +363,7 @@ babies += M new_slime = pick(babies) else - if(adult) - new_slime = new /mob/living/carbon/slime/adult(loc) - else - new_slime = new /mob/living/carbon/slime(loc) + new_slime = new /mob/living/carbon/slime(loc) new_slime.a_intent = "harm" new_slime.key = key