diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index d435e55f793..57ddf7817e5 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -66,6 +66,29 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Monkey crate" group = "Hydroponics" +/datum/supply_packs/farwa + name = "Farwa crate" + contains = list (/obj/item/weapon/storage/box/farwacubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Farwa crate" + group = "Hydroponics" + +/datum/supply_packs/skrell + name = "Neaera crate" + contains = list (/obj/item/weapon/storage/box/neaeracubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Neaera crate" + group = "Hydroponics" + +/datum/supply_packs/stok + name = "Stok crate" + contains = list (/obj/item/weapon/storage/box/stokcubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Stok crate" + group = "Hydroponics" /datum/supply_packs/beanbagammo name = "Beanbag shells" diff --git a/code/game/dna.dm b/code/game/dna.dm index c652140d96c..cb58013e016 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -548,7 +548,17 @@ sleep(48) del(animation) - var/mob/living/carbon/monkey/O = new(src) + + var/mob/living/carbon/monkey/O = null + switch(M.dna.mutantrace) + if("tajaran") + O = new /mob/living/carbon/monkey/tajara(src) + if("lizard") + O = new /mob/living/carbon/monkey/unathi(src) + if("skrell") + O = new /mob/living/carbon/monkey/skrell(src) + else + O = new /mob/living/carbon/monkey(src) if(M) if (M.dna) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b89cfd6a7fd..f1b9319f954 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -277,7 +277,41 @@ ..() for(var/i = 1; i <= 5; i++) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) +/obj/item/weapon/storage/box/farwacubes + name = "farwa cube box" + desc = "Drymate brand farwa cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/farwacube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped(src) +/obj/item/weapon/storage/box/stokcubes + name = "stok cube box" + desc = "Drymate brand stok cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped(src) + +/obj/item/weapon/storage/box/neaeracubes + name = "neaera cube box" + desc = "Drymate brand neaera cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped(src) /obj/item/weapon/storage/box/ids name = "spare IDs" diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 5dcc1158545..3b0240fe39c 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -3,13 +3,113 @@ voice_name = "monkey" voice_message = "chimpers" say_message = "chimpers" - icon = 'icons/mob/monkey.dmi' icon_state = "monkey1" + icon = 'icons/mob/monkey.dmi' gender = NEUTER pass_flags = PASSTABLE update_icon = 0 ///no need to call regenerate_icon var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie +/mob/living/carbon/monkey/tajara + name = "farwa" + voice_name = "farwa" + voice_message = "mews" + say_message = "mews" + icon_state = "tajkey1" + +/mob/living/carbon/monkey/skrell + name = "neaera" + voice_name = "neaera" + voice_message = "squicks" + say_message = "squicks" + icon_state = "skrellkey1" +/mob/living/carbon/monkey/unathi + name = "stok" + voice_name = "stok" + voice_message = "hisses" + say_message = "hisses" + icon_state = "stok1" + +/mob/living/carbon/monkey/unathi/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "stok") + name = text("stok ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "lizard" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "044" + dna.uni_identity += "C5D" + ..() +/mob/living/carbon/monkey/skrell/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + if(name == "neaera") + name = text("neaera ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "skrell" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "01C" + dna.uni_identity += "C92" + ..() +/mob/living/carbon/monkey/tajara/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "farwa") + name = text("farwa ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "tajaran" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "0A0" + dna.uni_identity += "E00" + ..() /mob/living/carbon/monkey/New() var/datum/reagents/R = new/datum/reagents(1000) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 9dd3e416410..c6895db0070 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -28,12 +28,20 @@ update_hud() lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again overlays.Cut() + var/ico = "monkey" + switch(src.dna.mutantrace) //On monkey spawn, check the DNA of the mob. If alien, change to appropriate alien monkey sprite + if("tajaran") + ico = "tajkey" + if("lizard") + ico = "stok" + if("skrell") + icon_state = "skrellkey" if(lying) - icon_state = "monkey0" + icon_state = ico + "0" for(var/image/I in overlays_lying) overlays += I else - icon_state = "monkey1" + icon_state = ico + "1" for(var/image/I in overlays_standing) overlays += I diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 9e3ed4b3a11..0da452cd318 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -20,29 +20,104 @@ flick("h2monkey", animation) sleep(48) //animation = null - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc ) - del(animation) - O.name = "monkey" - O.dna = dna - dna = null - O.dna.uni_identity = "00600200A00E0110148FC01300B009" - //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" - O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" - O.loc = loc - O.viruses = viruses - viruses = list() - for(var/datum/disease/D in O.viruses) - D.affected_mob = O + var/mob/living/carbon/monkey/O = null + + switch(dna.mutantrace) + if("tajara") + O = new /mob/living/carbon/monkey/tajara( loc ) + O.name = "farwa" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660004DA0A0E00" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a farwa. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("lizard") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "stok" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a stok. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("skrell") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "neaera" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a neaera. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + else + O = new /mob/living/carbon/monkey( loc ) + O.name = "monkey" + O.dna = dna + dna = null + O.dna.uni_identity = "00600200A00E0110148FC01300B009" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a monkey." + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + - if (client) - client.mob = O - if(mind) - mind.transfer_to(O) - O.a_intent = "hurt" - O << "You are now a monkey." - spawn(0)//To prevent the proc from returning null. - del(src) return O /mob/new_player/AIize() diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index a5985618ec5..f15c3410947 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1367,6 +1367,126 @@ icon_state = "monkeycubewrap" wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/farwacube + name = "farwa cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The farwa cube expands!" + new /mob/living/carbon/monkey/tajara(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/stokcube + name = "stok cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The stok cube expands!" + new /mob/living/carbon/monkey/unathi(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return +/obj/item/weapon/reagent_containers/food/snacks/neaeracube + name = "neaera cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The neaera cube expands!" + new /mob/living/carbon/monkey/skrell(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + +/obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + /obj/item/weapon/reagent_containers/food/snacks/spellburger name = "Spell Burger" diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index 437ba085b15..75ce4c4596d 100644 Binary files a/icons/mob/monkey.dmi and b/icons/mob/monkey.dmi differ