diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index f83d772e48..6b89f795b7 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -278,7 +278,7 @@ datum/objective/steal "the station blueprints" = /obj/item/blueprints, "a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid, "28 moles of plasma (full tank)" = /obj/item/weapon/tank, - "a sample of slime extract" = /obj/item/slime_core, + "a sample of slime extract" = /obj/item/slime_extract, "a piece of corgi meat" = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi, "a research director's jumpsuit" = /obj/item/clothing/under/rank/research_director, "a chief engineer's jumpsuit" = /obj/item/clothing/under/rank/chief_engineer, diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 8b64956651..4a28f6a29b 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -609,10 +609,10 @@ M << "\red [user] begins to remove one of your cores with [src]! ([slime.cores] cores remaining)" user << "\red You cut one of [M]'s cores out with [src]! ([slime.cores] cores remaining)" - new/obj/item/slime_core(M.loc) + new slime.coretype(M.loc) if(slime.cores <= 0) - M.icon_state = "baby slime dead-nocore" + M.icon_state = "[slime.colour] baby slime dead-nocore" return diff --git a/code/modules/mob/living/carbon/metroid/death.dm b/code/modules/mob/living/carbon/metroid/death.dm index 934c00395d..2e95e92cde 100644 --- a/code/modules/mob/living/carbon/metroid/death.dm +++ b/code/modules/mob/living/carbon/metroid/death.dm @@ -1,7 +1,7 @@ /mob/living/carbon/slime/death(gibbed) if(stat == DEAD) return stat = DEAD - icon_state = "baby slime dead" + icon_state = "[colour] baby slime dead" if(!gibbed) if(istype(src, /mob/living/carbon/slime/adult)) diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index db196efe4e..a1a7297403 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -339,22 +339,56 @@ if(amount_grown >= 10 && !Victim && !Target) 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) + for(var/i=1,i<=4,i++) + if(prob(80)) + var/mob/living/carbon/slime/M = new primarytype(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) + else + var/mutations = pick("one","two","three","four") + switch(mutations) + if("one") + var/mob/living/carbon/slime/M = new mutationone(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) + if("two") + var/mob/living/carbon/slime/M = new mutationtwo(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) + if("three") + var/mob/living/carbon/slime/M = new mutationthree(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) + if("four") + var/mob/living/carbon/slime/M = new mutationfour(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) del(src) else if(!client) - var/mob/living/carbon/slime/adult/A = new/mob/living/carbon/slime/adult(src.loc) + var/mob/living/carbon/slime/adult/A = new adulttype(src.loc) A.nutrition = nutrition // A.nutrition += 100 A.powerlevel = max(0, powerlevel-1) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 6ecf98d228..12cf90c0d6 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -1,7 +1,7 @@ /mob/living/carbon/slime name = "baby slime" icon = 'icons/mob/slimes.dmi' - icon_state = "baby slime" + icon_state = "grey baby slime" pass_flags = PASSTABLE voice_message = "skree!" say_message = "hums" @@ -22,7 +22,7 @@ // for the sake of cleanliness, though, here they are. status_flags = CANPARALYSE|CANPUSH - var/cores = 3 // the number of /obj/item/slime_core's the slime has left inside + var/cores = 1 // the number of /obj/item/slime_extract'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 slime has been overfed, if 10, grows into an adult @@ -41,10 +41,21 @@ // slimes pass on genetic data, so all their offspring have the same "Friends", + ///////////TIME FOR SUBSPECIES + + var/colour = "grey" + var/primarytype = /mob/living/carbon/slime + var/mutationone = /mob/living/carbon/slime/orange + var/mutationtwo = /mob/living/carbon/slime/metal + var/mutationthree = /mob/living/carbon/slime/blue + var/mutationfour = /mob/living/carbon/slime/purple + var/adulttype = /mob/living/carbon/slime/adult + var/coretype = /obj/item/slime_extract/grey + /mob/living/carbon/slime/adult name = "adult slime" icon = 'icons/mob/slimes.dmi' - icon_state = "adult slime" + icon_state = "grey adult slime" health = 200 gender = NEUTER @@ -58,9 +69,9 @@ reagents = R R.my_atom = src if(name == "baby slime") - name = text("baby slime ([rand(1, 1000)])") + name = text("[colour] baby slime ([rand(1, 1000)])") else - name = text("adult slime ([rand(1,1000)])") + name = text("[colour] adult slime ([rand(1,1000)])") real_name = name spawn (1) regenerate_icons() @@ -716,6 +727,100 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 return 1 +/obj/item/slime_extract + name = "slime extract" + desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." + icon = 'icons/mob/slimes.dmi' + icon_state = "grey slime extract" + flags = TABLEPASS + force = 1.0 + w_class = 1.0 + throwforce = 1.0 + throw_speed = 3 + throw_range = 6 + origin_tech = "biotech=4" + var/Flush = 30 + var/Uses = 1 // uses before it goes inert + +/obj/item/slime_extract/New() + ..() + var/datum/reagents/R = new/datum/reagents(100) + reagents = R + R.my_atom = src + +/obj/item/slime_extract/grey + icon_state = "grey slime extract" + +/obj/item/slime_extract/gold + icon_state = "gold slime extract" + +/obj/item/slime_extract/silver + icon_state = "silver slime extract" + +/obj/item/slime_extract/metal + icon_state = "metal slime extract" + +/obj/item/slime_extract/purple + icon_state = "purple slime extract" + +/obj/item/slime_extract/darkpurple + icon_state = "dark purple slime extract" + +/obj/item/slime_extract/orange + icon_state = "orange slime extract" + +/obj/item/slime_extract/yellow + icon_state = "yellow slime extract" + +/obj/item/slime_extract/red + icon_state = "red slime extract" + +/obj/item/slime_extract/blue + icon_state = "blue slime extract" + +/obj/item/slime_extract/darkblue + icon_state = "dark blue slime extract" + +/obj/item/slime_extract/pink + icon_state = "pink slime extract" + +/obj/item/slime_extract/green + icon_state = "green slime extract" + +////Pet Slime Creation/// + +/obj/item/weapon/slimepotion + name = "docility potion" + desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" + + 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 baby slimes!" + return ..() + if(istype(M, /mob/living/carbon/slime/adult)) //Can't tame adults + user << "/red Only baby slimes can be tamed!" + return..() + if(M.stat) + user << "\red The slime is dead!" + return..() + var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) + pet.icon_state = "[M.colour] baby slime" + pet.icon_living = "[M.colour] baby slime" + pet.icon_dead = "[M.colour] baby slime dead" + user <<"You feed the slime the potion, removing it's powers and calming it." + del (M) + var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) + + if (!newname) + newname = "pet slime" + pet.name = newname + pet.real_name = newname + del (src) +//////////////////////////////Old shit from metroids/RoRos, and the old cores, would not take much work to re-add them//////////////////////// + +/* // Basically this slime Core catalyzes reactions that normally wouldn't happen anywhere /obj/item/slime_core name = "slime extract" @@ -754,6 +859,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 Flush = 30 */ + + /obj/item/weapon/reagent_containers/food/snacks/egg/slime name = "slime egg" desc = "A small, gelatinous egg." @@ -796,4 +903,5 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 if(istype( W, /obj/item/toy/crayon )) return else - ..() \ No newline at end of file + ..() +*/ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 590a456ac0..2d546710e7 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -50,9 +50,9 @@ var/lastnut = nutrition //if(M.client) M << "\red You legs become paralyzed!" if(istype(src, /mob/living/carbon/slime/adult)) - icon_state = "adult slime eat" + icon_state = "[colour] adult slime eat" else - icon_state = "baby slime eat" + icon_state = "[colour] baby slime eat" while(Victim && M.health > -70 && stat != 2) // M.canmove = 0 @@ -120,13 +120,13 @@ if(stat == 2) if(!istype(src, /mob/living/carbon/slime/adult)) - icon_state = "baby slime dead" + icon_state = "[colour] baby slime dead" else if(istype(src, /mob/living/carbon/slime/adult)) - icon_state = "adult slime" + icon_state = "[colour] adult slime" else - icon_state = "baby slime" + icon_state = "[colour] baby slime" canmove = 1 anchored = 0 @@ -164,7 +164,7 @@ /mob/living/carbon/slime/verb/Evolve() - set category = "slime" + set category = "Slime" set desc = "This will let you evolve from baby to adult slime." if(stat) @@ -172,7 +172,7 @@ return if(!istype(src, /mob/living/carbon/slime/adult)) if(amount_grown >= 10) - var/mob/living/carbon/slime/adult/new_slime = new /mob/living/carbon/slime/adult(loc) + 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 = "hurt" @@ -187,7 +187,7 @@ /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." + 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." if(stat) src << "I must be conscious to do this..." @@ -195,28 +195,55 @@ if(istype(src, /mob/living/carbon/slime/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 + //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 - 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) + var/list/babies = list() + var/new_nutrition = round(nutrition * 0.9) + var/new_powerlevel = round(powerlevel / 4) + for(var/i=1,i<=4,i++) + if(prob(80)) + var/mob/living/carbon/slime/M = new primarytype(loc) M.nutrition = new_nutrition M.powerlevel = new_powerlevel if(i != 1) step_away(M,src) babies += M + else + var/mutations = pick("one","two","three","four") + switch(mutations) + if("one") + var/mob/living/carbon/slime/M = new mutationone(loc) + M.nutrition = new_nutrition + M.powerlevel = new_powerlevel + if(i != 1) step_away(M,src) + babies += M + if("two") + var/mob/living/carbon/slime/M = new mutationtwo(loc) + M.nutrition = new_nutrition + M.powerlevel = new_powerlevel + if(i != 1) step_away(M,src) + babies += M + if("three") + var/mob/living/carbon/slime/M = new mutationthree(loc) + M.nutrition = new_nutrition + M.powerlevel = new_powerlevel + if(i != 1) step_away(M,src) + babies += M + if("four") + var/mob/living/carbon/slime/M = new mutationfour(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 + var/mob/living/carbon/slime/new_slime = pick(babies) + new_slime.a_intent = "hurt" + new_slime.key = key - new_slime << "You are now a slime!" - del(src) + new_slime << "You are now a slime!" + del(src) else src << "I am not ready to reproduce yet..." else diff --git a/code/modules/mob/living/carbon/metroid/subtypes.dm b/code/modules/mob/living/carbon/metroid/subtypes.dm new file mode 100644 index 0000000000..77f759dbb1 --- /dev/null +++ b/code/modules/mob/living/carbon/metroid/subtypes.dm @@ -0,0 +1,277 @@ + +////////////////Tier 2 + +/mob/living/carbon/slime/purple + colour = "purple" + icon_state = "purple baby slime" + primarytype = /mob/living/carbon/slime/purple + mutationone = /mob/living/carbon/slime/darkpurple + mutationtwo = /mob/living/carbon/slime/darkblue + mutationthree = /mob/living/carbon/slime/green + mutationfour = /mob/living/carbon/slime + 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 + mutationone = /mob/living/carbon/slime/darkpurple + mutationtwo = /mob/living/carbon/slime/darkblue + mutationthree = /mob/living/carbon/slime/green + mutationfour = /mob/living/carbon/slime + adulttype = /mob/living/carbon/slime/adult/purple + coretype = /obj/item/slime_extract/purple + +/mob/living/carbon/slime/metal + colour = "metal" + icon_state = "metal baby slime" + primarytype = /mob/living/carbon/slime/metal + mutationone = /mob/living/carbon/slime/silver + mutationtwo = /mob/living/carbon/slime/yellow + mutationthree = /mob/living/carbon/slime/gold + mutationfour = /mob/living/carbon/slime + 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 + mutationone = /mob/living/carbon/slime/silver + mutationtwo = /mob/living/carbon/slime/yellow + mutationthree = /mob/living/carbon/slime/gold + mutationfour = /mob/living/carbon/slime + adulttype = /mob/living/carbon/slime/adult/metal + coretype = /obj/item/slime_extract/metal + +/mob/living/carbon/slime/orange + colour = "orange" + icon_state = "orange baby slime" + primarytype = /mob/living/carbon/slime/orange + mutationone = /mob/living/carbon/slime/red + mutationtwo = /mob/living/carbon/slime/yellow + mutationthree = /mob/living/carbon/slime/darkpurple + mutationfour = /mob/living/carbon/slime + 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 + mutationone = /mob/living/carbon/slime/red + mutationtwo = /mob/living/carbon/slime/yellow + mutationthree = /mob/living/carbon/slime/darkpurple + mutationfour = /mob/living/carbon/slime + adulttype = /mob/living/carbon/slime/adult/orange + coretype = /obj/item/slime_extract/orange + +/mob/living/carbon/slime/blue + colour = "blue" + icon_state = "blue baby slime" + primarytype = /mob/living/carbon/slime/blue + mutationone = /mob/living/carbon/slime/darkblue + mutationtwo = /mob/living/carbon/slime/pink + mutationthree = /mob/living/carbon/slime/silver + mutationfour = /mob/living/carbon/slime + 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 + mutationone = /mob/living/carbon/slime/darkblue + mutationtwo = /mob/living/carbon/slime/pink + mutationthree = /mob/living/carbon/slime/silver + mutationfour = /mob/living/carbon/slime + adulttype = /mob/living/carbon/slime/adult/blue + coretype = /obj/item/slime_extract/blue + + + + +//Tier 3 + +/mob/living/carbon/slime/darkblue + colour = "dark blue" + icon_state = "dark blue baby slime" + primarytype = /mob/living/carbon/slime/darkblue + mutationone = /mob/living/carbon/slime/purple + mutationtwo = /mob/living/carbon/slime/purple + mutationthree = /mob/living/carbon/slime/blue + mutationfour = /mob/living/carbon/slime/blue + 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 + mutationone = /mob/living/carbon/slime/purple + mutationtwo = /mob/living/carbon/slime/purple + mutationthree = /mob/living/carbon/slime/blue + mutationfour = /mob/living/carbon/slime/blue + adulttype = /mob/living/carbon/slime/adult/darkblue + coretype = /obj/item/slime_extract/darkblue + +/mob/living/carbon/slime/darkpurple + colour = "dark purple" + icon_state = "dark purple baby slime" + primarytype = /mob/living/carbon/slime/darkpurple + mutationone = /mob/living/carbon/slime/purple + mutationtwo = /mob/living/carbon/slime/purple + mutationthree = /mob/living/carbon/slime/orange + mutationfour = /mob/living/carbon/slime/orange + 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 + mutationone = /mob/living/carbon/slime/purple + mutationtwo = /mob/living/carbon/slime/purple + mutationthree = /mob/living/carbon/slime/orange + mutationfour = /mob/living/carbon/slime/orange + adulttype = /mob/living/carbon/slime/adult/darkpurple + coretype = /obj/item/slime_extract/darkpurple + + +/mob/living/carbon/slime/yellow + icon_state = "yellow baby slime" + colour = "yellow" + primarytype = /mob/living/carbon/slime/yellow + mutationone = /mob/living/carbon/slime/metal + mutationtwo = /mob/living/carbon/slime/metal + mutationthree = /mob/living/carbon/slime/orange + mutationfour = /mob/living/carbon/slime/orange + 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 + mutationone = /mob/living/carbon/slime/metal + mutationtwo = /mob/living/carbon/slime/metal + mutationthree = /mob/living/carbon/slime/orange + mutationfour = /mob/living/carbon/slime/orange + adulttype = /mob/living/carbon/slime/adult/yellow + coretype = /obj/item/slime_extract/yellow + + +/mob/living/carbon/slime/silver + colour = "silver" + icon_state = "silver baby slime" + primarytype = /mob/living/carbon/slime/silver + mutationone = /mob/living/carbon/slime/metal + mutationtwo = /mob/living/carbon/slime/metal + mutationthree = /mob/living/carbon/slime/blue + mutationfour = /mob/living/carbon/slime/blue + 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 + mutationone = /mob/living/carbon/slime/metal + mutationtwo = /mob/living/carbon/slime/metal + mutationthree = /mob/living/carbon/slime/blue + mutationfour = /mob/living/carbon/slime/blue + adulttype = /mob/living/carbon/slime/adult/silver + coretype = /obj/item/slime_extract/silver + + + +/////////////Tier 4 + + +/mob/living/carbon/slime/pink + colour = "pink" + icon_state = "pink baby slime" + primarytype = /mob/living/carbon/slime/pink + mutationone = /mob/living/carbon/slime/pink + mutationtwo = /mob/living/carbon/slime/pink + mutationthree = /mob/living/carbon/slime/pink + mutationfour = /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 + mutationone = /mob/living/carbon/slime/pink + mutationtwo = /mob/living/carbon/slime/pink + mutationthree = /mob/living/carbon/slime/pink + mutationfour = /mob/living/carbon/slime/pink + adulttype = /mob/living/carbon/slime/adult/pink + coretype = /obj/item/slime_extract/pink + +/mob/living/carbon/slime/red + colour = "red" + icon_state = "red baby slime" + primarytype = /mob/living/carbon/slime/red + mutationone = /mob/living/carbon/slime/red + mutationtwo = /mob/living/carbon/slime/red + mutationthree = /mob/living/carbon/slime/red + mutationfour = /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 + mutationone = /mob/living/carbon/slime/red + mutationtwo = /mob/living/carbon/slime/red + mutationthree = /mob/living/carbon/slime/red + mutationfour = /mob/living/carbon/slime/red + adulttype = /mob/living/carbon/slime/adult/red + coretype = /obj/item/slime_extract/red + +/mob/living/carbon/slime/gold + colour = "gold" + icon_state = "gold baby slime" + primarytype = /mob/living/carbon/slime/gold + mutationone = /mob/living/carbon/slime/gold + mutationtwo = /mob/living/carbon/slime/gold + mutationthree = /mob/living/carbon/slime/gold + mutationfour = /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 + mutationone = /mob/living/carbon/slime/gold + mutationtwo = /mob/living/carbon/slime/gold + mutationthree = /mob/living/carbon/slime/gold + mutationfour = /mob/living/carbon/slime/gold + adulttype = /mob/living/carbon/slime/adult/gold + coretype = /obj/item/slime_extract/gold +/mob/living/carbon/slime/green + colour = "green" + icon_state = "green baby slime" + primarytype = /mob/living/carbon/slime/green + mutationone = /mob/living/carbon/slime/green + mutationtwo = /mob/living/carbon/slime/green + mutationthree = /mob/living/carbon/slime/green + mutationfour = /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 + mutationone = /mob/living/carbon/slime/green + mutationtwo = /mob/living/carbon/slime/green + mutationthree = /mob/living/carbon/slime/green + mutationfour = /mob/living/carbon/slime/green + adulttype = /mob/living/carbon/slime/adult/green + coretype = /obj/item/slime_extract/green \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm new file mode 100644 index 0000000000..3953db870f --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -0,0 +1,50 @@ +/mob/living/simple_animal/slime + name = "pet slime" + desc = "A lovable, domesticated slime." + icon = 'icons/mob/slimes.dmi' + icon_state = "grey baby slime" + icon_living = "grey baby slime" + icon_dead = "grey baby slime dead" + speak_emote = list("chirps") + health = 50 + maxHealth = 50 + response_help = "pets" + response_disarm = "shoos" + response_harm = "stomps on" + emote_see = list("jiggles", "bounces in place") + +/mob/living/simple_animal/slime/Bump(atom/movable/AM as mob|obj, yes) + + spawn( 0 ) + if ((!( yes ) || now_pushing)) + return + now_pushing = 1 + if(ismob(AM)) + var/mob/tmob = AM + if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) + if(prob(70)) + src << "\red You fail to push [tmob]'s fat ass out of the way." + now_pushing = 0 + return + if(!(tmob.status_flags & CANPUSH)) + now_pushing = 0 + return + + tmob.LAssailant = src + now_pushing = 0 + ..() + if (!( istype(AM, /atom/movable) )) + return + if (!( now_pushing )) + now_pushing = 1 + if (!( AM.anchored )) + var/t = get_dir(src, AM) + if (istype(AM, /obj/structure/window)) + if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + for(var/obj/structure/window/win in get_step(AM,t)) + now_pushing = 0 + return + step(AM, t) + now_pushing = null + return + return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 25210f5b4e..6c2a5ab642 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -226,10 +226,15 @@ datum matching_other = 1 else - if(istype(my_atom, /obj/item/slime_core)) + /*if(istype(my_atom, /obj/item/slime_core)) var/obj/item/slime_core/M = my_atom if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1*/ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/M = my_atom + + if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this matching_other = 1 @@ -249,12 +254,20 @@ datum for(var/mob/M in viewers(4, get_turf(my_atom)) ) M << "\blue \icon[my_atom] The solution begins to bubble." - if(istype(my_atom, /obj/item/slime_core)) + /* if(istype(my_atom, /obj/item/slime_core)) var/obj/item/slime_core/ME = my_atom ME.Uses-- if(ME.Uses <= 0) // give the notification that the slime core is dead for(var/mob/M in viewers(4, get_turf(my_atom)) ) M << "\blue \icon[my_atom] The innards begin to boil!" + */ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/ME2 = my_atom + ME2.Uses-- + if(ME2.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in viewers(4, get_turf(my_atom)) ) + M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction." + ME2.desc = "This extract has been used up." playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 5abb8bcb9d..4eaa8a2a26 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -335,6 +335,23 @@ datum ..() return + slimetoxin + name = "Mutation Toxin" + id = "mutationtoxin" + description = "A corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + + on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/human = M + if(human.dna.mutantrace == null) + M << "\red Your flesh rapidly mutates!" + human.dna.mutantrace = "slime" + human.update_mutantrace() + ..() + return stoxin name = "Sleep Toxin" id = "stoxin" @@ -1104,10 +1121,10 @@ datum return reaction_obj(var/obj/O, var/volume) src = null - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg/slime)) + /*if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg/slime)) var/obj/item/weapon/reagent_containers/food/snacks/egg/slime/egg = O if (egg.grown) - egg.Hatch() + egg.Hatch()*/ if((!O) || (!volume)) return 0 var/turf/the_turf = get_turf(O) var/datum/gas_mixture/napalm = new diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index ab1b6e0f7e..c217c9cf43 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -616,8 +616,8 @@ datum result_amount = 5 -/////////////////////////////////////slime CORE REACTIONS /////////////////////////////// - +/////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// +/* slimepepper name = "Slime Condensedcapaicin" id = "m_condensedcapaicin" @@ -898,12 +898,237 @@ datum s.start() holder.clear_reagents() return +*/ +/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// + +//Grey (Functional) + slimespawn + name = "Slime Spawn" + id = "m_spawn" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null)) + O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, turning into a new baby slime!"), 1) + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.loc = get_turf_loc(holder.my_atom) + del (holder.my_atom) + +//Green (Functional) + slimemutate + name = "Mutation Toxin" + id = "mutationtoxin" + result = "mutationtoxin" + required_reagents = list("plasma" = 5) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/green + +//Metal (Functional) + slimemetal + name = "Slime Metal" + id = "m_metal" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/metal + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal + M.amount = 15 + M.loc = get_turf_loc(holder.my_atom) + var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel + P.amount = 5 + P.loc = get_turf_loc(holder.my_atom) + del (holder.my_atom) +//Gold (Functional) + slimecrit + name = "Slime Crit" + id = "m_tele" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/blocked = list(/mob/living/simple_animal/hostile, + /mob/living/simple_animal/hostile/pirate, + /mob/living/simple_animal/hostile/pirate/ranged, + /mob/living/simple_animal/hostile/russian, + /mob/living/simple_animal/hostile/russian/ranged, + /mob/living/simple_animal/hostile/syndicate, + /mob/living/simple_animal/hostile/syndicate/melee, + /mob/living/simple_animal/hostile/syndicate/melee/space, + /mob/living/simple_animal/hostile/syndicate/ranged, + /mob/living/simple_animal/hostile/syndicate/ranged/space, + /mob/living/simple_animal/hostile/alien/queen/large, + /mob/living/simple_animal/clown + )//exclusion list for things you don't want the reaction to create. + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + + playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 5, i++) + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.loc = get_turf_loc(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) + del (holder.my_atom) +//Silver (Functional) + slimebork + name = "Slime Bork" + id = "m_tele2" + result = null + required_reagents = list("plasma" = 5) + result_amount = 3 + required_container = /obj/item/slime_extract/silver + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks + // BORK BORK BORK + + playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= created_volume + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf_loc(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) + del (holder.my_atom) + +//Blue (Functional) + slimefrost + name = "Slime Frost Oil" + id = "m_frostoil" + result = "frostoil" + required_reagents = list("plasma" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/blue + required_other = 1 +//Dark Blue + slimefreeze + name = "Slime Freeze" + id = "m_freeze" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(5) + playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/M in range (get_turf_loc(holder.my_atom), 7)) + M.bodytemperature -= 140 + M << "\blue You feel a chill!" + del (holder.my_atom) +//Orange (Functional) + slimecasp + name = "Slime Capsaicin Oil" + id = "m_capsaicinoil" + result = "capsaicin" + required_reagents = list("plasma" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/orange + required_other = 1 + +//Yellow (Functional?) + slimeoverload + name = "Slime EMP" + id = "m_emp" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + empulse(get_turf_loc(holder.my_atom), 3, 7) + del (holder.my_atom) +//Purple (Functional) + slimejam + name = "Slime Jam" + id = "m_jam" + result = "slimejelly" + required_reagents = list("plasma" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/purple + required_other = 1 +//Dark Purple (Functional) + slimeplasma + name = "Slime Plasma" + id = "m_plasma" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkpurple + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma + P.amount = 10 + P.loc = get_turf_loc(holder.my_atom) + del (holder.my_atom) +//Red (Non functional) + slimefire + name = "Slime fire" + id = "m_fire" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(5) + var/turf/location = get_turf(holder.my_atom.loc) + for(var/turf/simulated/floor/target_tile in range(0,location)) + if(target_tile.parent && target_tile.parent.group_processing) + target_tile.parent.suspend_group_processing() + var/datum/gas_mixture/napalm = new + napalm.toxins = 25 + napalm.temperature = 1400 + target_tile.assume_air(napalm) + spawn (0) target_tile.hotspot_expose(700, 400) + del (holder.my_atom) + +//Pink (Functional) + slimeppotion + name = "Slime Potion" + id = "m_potion" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/pink + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion + P.loc = get_turf_loc(holder.my_atom) + del (holder.my_atom) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 384d2dd90e..1dc76f06ad 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -119,7 +119,7 @@ user << "\red [target] is empty." return - if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_core)) + if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract)) user << "\red You cannot directly remove reagents from this object." return @@ -137,15 +137,15 @@ if(istype(target, /obj/item/weapon/implantcase/chem)) return - if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket)) + if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket)) 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/slime_core)) - var/obj/item/slime_core/core = target + if(istype(target, /obj/item/slime_extract)) + var/obj/item/slime_extract/core = target core.Flush = 30 // reset flush counter if(ismob(target) && target != user) diff --git a/html/changelog.html b/html/changelog.html index c90e3aaa78..0fc5a3a549 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,11 @@ should be listed in the changelog upon commit tho. Thanks. -->