diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index c2109822170..15b574b9c2c 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -202,6 +202,10 @@ datum lowertemp.react() T.assume_air(lowertemp) del(hotspot) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O + if(!cube.wrapped) + cube.Expand() return lube diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index f7c9b0bf1a2..9ba9caef1ba 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -73,6 +73,12 @@ icon_state = "gibbl5" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") +/obj/decal/cleanable/blood/gibs/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") + +/obj/decal/cleanable/blood/gibs/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1") + /obj/decal/cleanable/blood/gibs/body random_icon_states = list("gibhead", "gibtorso") @@ -110,6 +116,12 @@ icon_state = "xgib1" random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") +/obj/decal/cleanable/xenoblood/xgibs/up + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") + +/obj/decal/cleanable/xenoblood/xgibs/down + random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1") + /obj/decal/cleanable/xenoblood/xgibs/body random_icon_states = list("xgibhead", "xgibtorso") @@ -138,6 +150,12 @@ /obj/decal/cleanable/robot_debris/limb random_icon_states = list("gibarm", "gibleg") +/obj/decal/cleanable/robot_debris/up + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 + +/obj/decal/cleanable/robot_debris/down + random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 + /obj/decal/cleanable/oil name = "motor oil" desc = "It's black." diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm index ac976937b51..10bcaeab267 100644 --- a/code/defines/obj/vending.dm +++ b/code/defines/obj/vending.dm @@ -62,8 +62,8 @@ name = "Getmore Chocolate Corp" desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars" icon_state = "snack" - product_paths = "/obj/item/weapon/reagent_containers/food/snacks/candy;/obj/item/weapon/reagent_containers/food/drinks/dry_ramen;/obj/item/weapon/reagent_containers/food/snacks/chips;/obj/item/weapon/reagent_containers/food/snacks/sosjerky;/obj/item/weapon/reagent_containers/food/snacks/no_raisin;/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie;/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers" - product_amounts = "10;10;10;10;10;10;10" + product_paths = "/obj/item/weapon/reagent_containers/food/snacks/candy;/obj/item/weapon/reagent_containers/food/drinks/dry_ramen;/obj/item/weapon/reagent_containers/food/snacks/chips;/obj/item/weapon/reagent_containers/food/snacks/sosjerky;/obj/item/weapon/reagent_containers/food/snacks/no_raisin;/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie;/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers;/obj/item/weapon/monkeycube_box" + product_amounts = "10;10;10;10;10;10;10;10" product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" product_hidden = "/obj/item/weapon/reagent_containers/food/snacks/syndicake" product_hideamt = "10" diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm index cd14466f600..602824f7b54 100644 --- a/code/game/objects/gibs.dm +++ b/code/game/objects/gibs.dm @@ -1,174 +1,81 @@ //HUMANS /proc/gibs(atom/location, var/datum/disease/virus) - var/obj/decal/cleanable/blood/gibs/gib = null - if(virus && virus.spread_type == SPECIAL) - virus = null - - // NORTH - gib = new /obj/decal/cleanable/blood/gibs(location) - if (prob(30)) - gib.icon_state = "gibup1" - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(NORTH, NORTHEAST, NORTHWEST)) - - // SOUTH - gib = new /obj/decal/cleanable/blood/gibs(location) - if (prob(30)) - gib.icon_state = "gibdown1" - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(SOUTH, SOUTHEAST, SOUTHWEST)) - - // WEST - gib = new /obj/decal/cleanable/blood/gibs(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(WEST, NORTHWEST, SOUTHWEST)) - - // EAST - gib = new /obj/decal/cleanable/blood/gibs(location) - if(virus) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(EAST, NORTHEAST, SOUTHEAST)) - - // RANDOM BODY - gib = new /obj/decal/cleanable/blood/gibs/body(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(alldirs) - - // RANDOM LIMBS - for (var/i = 0, i < pick(0, 1, 2), i++) - gib = new /obj/decal/cleanable/blood/gibs/limb(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(alldirs) - - // CORE - gib = new /obj/decal/cleanable/blood/gibs/core(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - -//ALIENS -//mostly carbon copy of the human code. N + new /obj/gibspawner/human(get_turf(location),virus) /proc/xgibs(atom/location, var/datum/disease/virus) - var/obj/decal/cleanable/xenoblood/xgibs/gib = null - if(virus && virus.spread_type == SPECIAL) - virus = null + new /obj/gibspawner/xeno(get_turf(location),virus) - // NORTH - gib = new /obj/decal/cleanable/xenoblood/xgibs(location) - if (prob(30)) - gib.icon_state = "xgibup1" - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(NORTH, NORTHEAST, NORTHWEST)) - - // SOUTH - gib = new /obj/decal/cleanable/xenoblood/xgibs(location) - if (prob(30)) - gib.icon_state = "xgibdown1" - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(SOUTH, SOUTHEAST, SOUTHWEST)) - - // WEST - gib = new /obj/decal/cleanable/xenoblood/xgibs(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(WEST, NORTHWEST, SOUTHWEST)) - - // EAST - gib = new /obj/decal/cleanable/xenoblood/xgibs(location) - if(virus) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(list(EAST, NORTHEAST, SOUTHEAST)) - - // RANDOM BODY - gib = new /obj/decal/cleanable/xenoblood/xgibs/body(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(alldirs) - - // RANDOM LIMBS - for (var/i = 0, i < pick(0, 1, 2), i++) - gib = new /obj/decal/cleanable/xenoblood/xgibs/limb(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - gib.streak(alldirs) - - // CORE - gib = new /obj/decal/cleanable/xenoblood/xgibs/core(location) - if(virus && prob(20)) - gib.virus = new virus.type - gib.virus.holder = gib - gib.virus.spread_type = CONTACT_FEET - -//ROBOTS /proc/robogibs(atom/location, var/datum/disease/virus) - var/obj/decal/cleanable/robot_debris/gib = null - if(virus && virus.spread_type == SPECIAL) - virus = null + new /obj/gibspawner/robot(get_turf(location),virus) - // RUH ROH - var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread - s.set_up(2, 1, location) - s.start() +/obj/gibspawner + var/sparks = 0 //whether sparks spread on Gib() + var/virusProb = 20 //the chance for viruses to spread on the gibs + var/list/gibtypes = list() + var/list/gibamounts = list() + var/list/gibdirections = list() //of lists - // NORTH - gib = new /obj/decal/cleanable/robot_debris(location) - if (prob(25)) - gib.icon_state = "gibup1" - gib.streak(list(NORTH, NORTHEAST, NORTHWEST)) + New(location, var/datum/disease/virus = null) + ..() - // SOUTH - gib = new /obj/decal/cleanable/robot_debris(location) - if (prob(25)) - gib.icon_state = "gibdown1" - gib.streak(list(SOUTH, SOUTHEAST, SOUTHWEST)) + if(istype(loc,/turf)) //basically if a badmin spawns it + Gib(loc,virus) - // WEST - gib = new /obj/decal/cleanable/robot_debris(location) - gib.streak(list(WEST, NORTHWEST, SOUTHWEST)) + proc/Gib(atom/location, var/datum/disease/virus = null) + if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) + world << "\red Gib list length mismatch!" + return - // EAST - gib = new /obj/decal/cleanable/robot_debris(location) - gib.streak(list(EAST, NORTHEAST, SOUTHEAST)) + var/obj/decal/cleanable/blood/gibs/gib = null + if(virus && virus.spread_type == SPECIAL) + virus = null - // RANDOM - gib = new /obj/decal/cleanable/robot_debris(location) - gib.streak(alldirs) + if(sparks) + var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread + s.set_up(2, 1, location) + s.start() - // RANDOM LIMBS - for (var/i = 0, i < pick(0, 1, 2), i++) - gib = new /obj/decal/cleanable/robot_debris/limb(location) - gib.streak(alldirs) + for(var/i = 1, i<= gibtypes.len, i++) + if(gibamounts[i]) + for(var/j = 1, j<= gibamounts[i], j++) + var/gibType = gibtypes[i] + gib = new gibType(location) + if(virus && prob(virusProb)) + gib.virus = new virus.type + gib.virus.holder = gib + gib.virus.spread_type = CONTACT_FEET + var/list/directions = gibdirections[i] + if(directions.len) + gib.streak(directions) + + del(src) + +/obj/gibspawner + human + gibtypes = list(/obj/decal/cleanable/blood/gibs/up,/obj/decal/cleanable/blood/gibs/down,/obj/decal/cleanable/blood/gibs,/obj/decal/cleanable/blood/gibs,/obj/decal/cleanable/blood/gibs/body,/obj/decal/cleanable/blood/gibs/limb,/obj/decal/cleanable/blood/gibs/core) + gibamounts = list(1,1,1,1,1,1,1) + + New() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) + gibamounts[6] = pick(0,1,2) + ..() + + xeno + gibtypes = list(/obj/decal/cleanable/xenoblood/xgibs/up,/obj/decal/cleanable/xenoblood/xgibs/down,/obj/decal/cleanable/xenoblood/xgibs,/obj/decal/cleanable/xenoblood/xgibs,/obj/decal/cleanable/xenoblood/xgibs/body,/obj/decal/cleanable/xenoblood/xgibs/limb,/obj/decal/cleanable/xenoblood/xgibs/core) + gibamounts = list(1,1,1,1,1,1,1) + + New() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list()) + gibamounts[6] = pick(0,1,2) + ..() + + robot + sparks = 1 + gibtypes = list(/obj/decal/cleanable/robot_debris/up,/obj/decal/cleanable/robot_debris/down,/obj/decal/cleanable/robot_debris,/obj/decal/cleanable/robot_debris,/obj/decal/cleanable/robot_debris,/obj/decal/cleanable/robot_debris/limb) + gibamounts = list(1,1,1,1,1,1) + + New() + gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs) + gibamounts[6] = pick(0,1,2) + ..() \ No newline at end of file diff --git a/code/game/objects/items/food.dm b/code/game/objects/items/food.dm index c8e45c60c03..688fa72cb78 100644 --- a/code/game/objects/items/food.dm +++ b/code/game/objects/items/food.dm @@ -165,4 +165,34 @@ YOUR MUMS BOX usr << text("There are [] eggs in the box.", n) return +/obj/item/weapon/monkeycube_box + name = "monkey cube box" + desc = "Drymate brand monkey cubes. Just add water!" + icon = 'food.dmi' + icon_state = "monkeycubebox" + var/amount = 5 + attack_hand(mob/user as mob, unused, flag) + add_fingerprint(user) + + if(user.r_hand == src || user.l_hand == src) + if(amount) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) + if (user.hand) + user.l_hand = M + else + user.r_hand = M + M.loc = user + M.layer = 20 + user.update_clothing() + user << "You take a monkey cube out of the box." + amount-- + else + user << "There are no monkey cubes left in the box." + else + ..() + + return + + attack_paw(mob/user as mob) + return attack_hand(user) \ No newline at end of file diff --git a/code/game/objects/livestock.dm b/code/game/objects/livestock.dm index 4b741599193..72a6a17f868 100644 --- a/code/game/objects/livestock.dm +++ b/code/game/objects/livestock.dm @@ -34,6 +34,8 @@ var/obj/item/weapon/card/id/anicard //By default, animals can open doors but not any with access restrictions. var/intelligence = null // the intelligence var allows for additional access (by job). + var/species = "animal" //affects icon_state + New() //Initializes the livestock's AI and access ..() anicard = new(src) @@ -307,6 +309,7 @@ if (get_dist(src, src.target) >= distance) src.frustration++ //If it hasn't reached the target yet, get a little angry. else src.frustration-- //It reached the target! Get less angry. if(frustration >= patience) set_null() //If too angry? Fuck this shit. + special_extra() if(target || flee_from.len) spawn(cycle_pause / 3) src.process() @@ -364,7 +367,7 @@ if(!alive) return alive = 0 density = 0 - icon_state = "[initial(icon_state)]_d" + icon_state = "[species]_d" set_null() if(!messy) for(var/mob/O in hearers(src, null)) @@ -410,6 +413,7 @@ name = "Spess Carp" desc = "Oh shit, you're really fucked now." icon_state = "spesscarp" + species = "spesscarp" aggressive = 1 health = 25 maxhealth = 25 @@ -439,6 +443,7 @@ name = "Lizard" desc = "A cute tiny lizard." icon_state = "lizard" + species = "lizard" cowardly = 1 health = 10 maxhealth = 10 @@ -447,6 +452,47 @@ patience = 50 view_range = 7 +/obj/livestock/bear + name = "ninja space bear" + desc = "Its sight is unbearable to your eye." + icon_state = "bear" + species = "bear" + aggressive = 1 + health = 100 + maxhealth = 100 + cycle_pause = 15 + patience = 75 + strength = 30 + intelligence = "Captain" + + var/adaptationChance = 10 //the chance per tick the bear will change its camouflage + var/camouflage = "space" //"", "space" or "floor" + + New() + ..() + //new /obj/item/clothing/suit/bearpelt(src) + new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src) + new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src) + new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src) + new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src) + new /obj/item/weapon/reagent_containers/food/snacks/bearmeat(src) + //new /obj/item/weapon/reagent_containers/food/snacks/bearinnards(src) + + special_extra() //camouflage check + if(prob(adaptationChance)) + if(istype(loc,/turf/simulated/floor)) + if(camouflage != "floor") + camouflage = "floor" + else if(istype(loc,/turf/space)) + if(camouflage != "space") + camouflage = "space" + else if(camouflage != "") + camouflage = "" + update_icon() + + update_icon() + icon_state = "[species][camouflage][alive?"":"_d"]" + /* Commented out because of Filthy Xeno-lovers. /obj/livestock/cow name = "Pigmy Cow" diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm index cdf9f229328..8b77e8b9c51 100644 --- a/code/modules/food/food.dm +++ b/code/modules/food/food.dm @@ -117,6 +117,15 @@ reagents.add_reagent("nutriment", 3) reagents.add_reagent("carpotoxin", 3) +/obj/item/weapon/reagent_containers/food/snacks/bearmeat + name = "bear meat" + desc = "A very manly slab of meat." + icon_state = "bearmeat" + New() + ..() + reagents.add_reagent("nutriment", 12) + reagents.add_reagent("hyperzine", 5) + /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" desc = "A slab of meat" @@ -760,6 +769,45 @@ if(bananaphone) bananaphone.hear_talk(M, msg) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube + name = "monkey cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",12) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/machinery/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 monkey cube expands!" + new /mob/living/carbon/monkey(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 + + wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 /////////////////////////////////////////////////Sliceable//////////////////////////////////////// // All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels @@ -988,7 +1036,7 @@ reagents.add_reagent("nutriment", 5) reagents.add_reagent("psilocybin", 5) bitesize = 2 - + /obj/item/weapon/reagent_containers/food/snacks/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index a68c0636f5a..b5012592d64 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/gib.dmi b/icons/effects/gib.dmi new file mode 100644 index 00000000000..1ec8ea02816 Binary files /dev/null and b/icons/effects/gib.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index e5dc4ae2759..18d517c3bf5 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 7855bd95d38..d54a69ad822 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index 17780bd4b51..bc11e52d6e4 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 3a5630364d2..b673729d61d 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 6261212fe57..6856b3da237 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index f4f455ce960..7550fbf7c22 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 296c891261a..9dbb245b4f0 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ