diff --git a/aurorastation.dme b/aurorastation.dme index 6fd11a61c5c..c866568df25 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1641,6 +1641,7 @@ #include "code\modules\mining\abandonedcrates.dm" #include "code\modules\mining\alloys.dm" #include "code\modules\mining\coins.dm" +#include "code\modules\mining\gemstones.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" #include "code\modules\mining\machine_rigpress.dm" diff --git a/code/modules/cargo/exports/precious.dm b/code/modules/cargo/exports/precious.dm new file mode 100644 index 00000000000..98f22d54b99 --- /dev/null +++ b/code/modules/cargo/exports/precious.dm @@ -0,0 +1,124 @@ +// Precious objects and materials. + +/datum/export/precious/gemstone/smallruby + cost = 50 + unit_name = "small ruby" + export_types = list(/obj/item/precious/gemstone/ruby) + +/datum/export/precious/gemstone/smallsapphire + cost = 50 + unit_name = "small sapphire" + export_types = list(/obj/item/precious/gemstone/sapphire) + +/datum/export/precious/gemstone/smallemerald + cost = 50 + unit_name = "small emerald" + export_types = list(/obj/item/precious/gemstone/emerald) + +/datum/export/precious/gemstone/smalltopaz + cost = 50 + unit_name = "small topaz" + export_types = list(/obj/item/precious/gemstone/topaz) + +/datum/export/precious/gemstone/smallamethyst + cost = 50 + unit_name = "small amethyst" + export_types = list(/obj/item/precious/gemstone/amethyst) + +/datum/export/precious/gemstone/smalldiamond + cost = 75 + unit_name = "small diamond" + export_types = list(/obj/item/precious/gemstone/diamond) + +/datum/export/precious/gemstone/medruby + cost = 250 + unit_name = "medium ruby" + export_types = list(/obj/item/precious/gemstone/ruby/med/med) + +/datum/export/precious/gemstone/medsapphire + cost = 250 + unit_name = "medium sapphire" + export_types = list(/obj/item/precious/gemstone/sapphire/med) + +/datum/export/precious/gemstone/medemerald + cost = 250 + unit_name = "medium emerald" + export_types = list(/obj/item/precious/gemstone/emerald/med) + +/datum/export/precious/gemstone/medtopaz + cost = 250 + unit_name = "medium topaz" + export_types = list(/obj/item/precious/gemstone/topaz/med) + +/datum/export/precious/gemstone/medamethyst + cost = 250 + unit_name = "medium amethyst" + export_types = list(/obj/item/precious/gemstone/amethyst/med) + +/datum/export/precious/gemstone/meddiamond + cost = 375 + unit_name = "medium diamond" + export_types = list(/obj/item/precious/gemstone/diamond/med) + +/datum/export/precious/gemstone/largeruby + cost = 1500 + unit_name = "large ruby" + export_types = list(/obj/item/precious/gemstone/ruby/large) + +/datum/export/precious/gemstone/largesapphire + cost = 1500 + unit_name = "large sapphire" + export_types = list(/obj/item/precious/gemstone/sapphire/large) + +/datum/export/precious/gemstone/largeemerald + cost = 1500 + unit_name = "large emerald" + export_types = list(/obj/item/precious/gemstone/emerald/large) + +/datum/export/precious/gemstone/largetopaz + cost = 1500 + unit_name = "large topaz" + export_types = list(/obj/item/precious/gemstone/topaz/large) + +/datum/export/precious/gemstone/largeamethyst + cost = 1500 + unit_name = "large amethyst" + export_types = list(/obj/item/precious/gemstone/amethyst/large) + +/datum/export/precious/gemstone/largediamond + cost = 2250 + unit_name = "large diamond" + export_types = list(/obj/item/precious/gemstone/diamond/large) + +/datum/export/precious/gemstone/hugeruby + cost = 25000 + unit_name = "enormous ruby" + export_types = list(/obj/item/precious/gemstone/ruby/huge) + +/datum/export/precious/gemstone/largesapphire + cost = 25000 + unit_name = "enormous sapphire" + export_types = list(/obj/item/precious/gemstone/sapphire/huge) + +/datum/export/precious/gemstone/largeemerald + cost = 25000 + unit_name = "enormous emerald" + export_types = list(/obj/item/precious/gemstone/emerald/huge) + +/datum/export/precious/gemstone/largetopaz + cost = 25000 + unit_name = "enormous topaz" + export_types = list(/obj/item/precious/gemstone/topaz/huge) + +/datum/export/precious/gemstone/largeamethyst + cost = 25000 + unit_name = "enormous amethyst" + export_types = list(/obj/item/precious/gemstone/amethyst/huge) + +/datum/export/precious/gemstone/largediamond + cost = 37500 + unit_name = "enormous diamond" + export_types = list(/obj/item/precious/gemstone/diamond/huge) + +/obj/item/precious/gemstone/Value(var/base) + return base * stacksize \ No newline at end of file diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index c380d8c441d..070931cc812 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -142,6 +142,31 @@ var/list/worths = list( /obj/item/stack/material/glass/phoronglass = -35, /obj/item/stack/material/glass/phoronrglass = -65, /obj/item/stack/material = -5, +//GEMSTONES + /obj/item/precious/gemstone/ruby = -50, + /obj/item/precious/gemstone/amethyst = -50, + /obj/item/precious/gemstone/emerald = -50, + /obj/item/precious/gemstone/topaz = -50, + /obj/item/precious/gemstone/sapphire = -50, + /obj/item/precious/gemstone/diamond = -75, + /obj/item/precious/gemstone/ruby/med = -250, + /obj/item/precious/gemstone/amethyst/med = -250, + /obj/item/precious/gemstone/emerald/med = -250, + /obj/item/precious/gemstone/topaz/med = -250, + /obj/item/precious/gemstone/sapphire/med = -250, + /obj/item/precious/gemstone/diamond/med = -375, + /obj/item/precious/gemstone/ruby/large = -1500, + /obj/item/precious/gemstone/amethyst/large = -1500, + /obj/item/precious/gemstone/emerald/large = -1500, + /obj/item/precious/gemstone/topaz/large = -1500, + /obj/item/precious/gemstone/sapphire/large = -1500, + /obj/item/precious/gemstone/diamond/large = -2250, + /obj/item/precious/gemstone/ruby/huge = -25000, + /obj/item/precious/gemstone/amethyst/huge = -25000, + /obj/item/precious/gemstone/emerald/huge = -25000, + /obj/item/precious/gemstone/topaz/huge = -25000, + /obj/item/precious/gemstone/sapphire/huge = -25000, + /obj/item/precious/gemstone/diamond/huge = -37500, //STACKS, /obj/item/stack/medical/advanced/bruise_pack = -30, /obj/item/stack/medical/advanced/ointment = -40, diff --git a/code/modules/mining/gemstones.dm b/code/modules/mining/gemstones.dm new file mode 100644 index 00000000000..5b06252a33c --- /dev/null +++ b/code/modules/mining/gemstones.dm @@ -0,0 +1,618 @@ + +#define GEM_RUBY "ruby" +#define GEM_TOPAZ "topaz" +#define GEM_SAPPHIRE "sapphire" +#define GEM_AMETHYST "amethyst" +#define GEM_EMERALD "emerald" +#define GEM_DIAMOND "diamond" +#define GEM_MIXED "mixed" + +#define GEM_SMALL "small" +#define GEM_MEDIUM "medium" +#define GEM_LARGE "large" +#define GEM_ENORMOUS "enormous" + +/obj/item/precious + name = "valuable object" + desc = "An object of value, made of crystallized coder tears." + var/maxstack + var/stack_contents = list() + var/pickup = 0 + var/stacksize = 1 + var/plural + +/obj/item/precious/gemstone + name = "gemstone" + desc = "An impossibly generic gemstone. How do you even have this?" + icon = 'icons/obj/gemstones.dmi' + var/gemcolor + var/gemtype + var/gemsize + +/obj/item/precious/gemstone/Initialize(mapload, amount) + . = ..() + if(amount) + stacksize = amount + update_gem() + +/obj/item/precious/gemstone/mixed/Initialize(mapload, amount, kind) + ASSERT(kind) + stack_contents[kind] = amount + . = ..(mapload, amount) + +/obj/item/precious/gemstone/attackby(obj/item/precious/gemstone/G, mob/user) + if (!istype(G)) + return ..() + if(G.gemtype == GEM_MIXED) + to_chat(user, span("notice", "Try doing it the other way - put an unmixed gem into the pile, instead of the pile onto an organized gem stack.")) + return + if(src.gemsize != G.gemsize) + to_chat(user, span("notice", "You can't mix gem sizes. It would be too disorganized!")) + return + if(src.gemsize == GEM_ENORMOUS) + to_chat(user, span("notice", "That gem is far too big to stack!")) + return + if(src.gemtype == G.gemtype) + gemstacker(G, user) + else + gemmixer(G, user) + +/obj/item/precious/gemstone/AltClick(mob/user) + if(src.gemsize == GEM_ENORMOUS) + user.put_in_hands(src) + return + if(src.stacksize == 1) // just pick it up... + user.put_in_hands(src) + return + if(src.gemtype == GEM_MIXED) + to_chat(user, span("notice", "Try disassembling the whole stack instead, if you want to separate it.")) + return + else + to_chat(user, span("notice", "You take a [src.gemsize] [src.gemtype] from the pile.")) + src.stacksize -= 1 + src.update_gem() + var/obj/O = new type(loc, 1) + user.put_in_hands(O) + src.update_gem() + +/obj/item/precious/gemstone/attack_self(mob/user) + . = ..() + if(src.gemsize == GEM_ENORMOUS) + user.visible_message(span("notice", "[user] admires the sparkling facets of [src]."), + span("notice", "You gaze into the sparkling facets of [src.name]. Hypnotically beautiful...")) + return + switch (stacksize) + if(1) + user.visible_message(span("notice", "[user] flips [src] in one hand."), + span("notice", "You give [src] a little flip. Shiny!")) + return + if(1 to 5) + user.visible_message(span("notice", "[user] sifts [src] through their fingers, admiring the gleaming gemstones."), + span("notice", "You sift [src] through your fingers. Glittery..."), + span("notice", "You hear soft clinking.")) + return + if(6 to 10) + user.visible_message(span("notice", "[user] counts [src], looking pleased with their bounty."), + span("notice", "You count [src]. Yep, still [stacksize] gems in the pile!"), + span("notice", "You hear soft clinking.")) + return + if(11 to 30) + user.visible_message(span("notice", "[user] begins counting [src], looking extremely pleased."), + span("notice", "You start counting [src]. 1... 2... 3..."), + span("notice", "You hear soft clinking.")) + if(do_after(5)) + to_chat(user, span("notice", "You finish counting. There's still [stacksize] gems in the pile. Hurray!")) + else + to_chat(user, span("notice", "You lost your count of [src]!")) + +/obj/item/precious/gemstone/proc/gemstacker(obj/item/precious/gemstone/G, mob/user) + if(src.stacksize == src.maxstack) + to_chat(user, span("notice", "That stack can't get any bigger!")) + return + else + src.stacksize += 1 + G.stacksize -= 1 + update_gem(G) + G.update_gem(src) + +/obj/item/precious/gemstone/proc/gemmixer(obj/item/precious/gemstone/G, mob/user) + if(src.stacksize == src.maxstack) + to_chat(user, span("notice", "You can't fit any more gems into that pile!")) + return + if(src.gemtype != GEM_MIXED) + to_chat(user, span("notice", "You mix the gemstones together into a pile.")) + src.stacksize -= 1 + G.stacksize -= 1 + switch(gemsize) + if(GEM_SMALL) + var/obj/item/precious/gemstone/mixed/pile = new(loc, stacksize, gemtype) + pile.add_gem(G) + if(GEM_MEDIUM) + var/obj/item/precious/gemstone/mixed/med/pile = new(loc, stacksize, gemtype) + pile.add_gem(G) + if(GEM_LARGE) + var/obj/item/precious/gemstone/mixed/large/pile = new(loc, stacksize, gemtype) + pile.add_gem(G) + else + to_chat(user, span("notice", "You add the [G.gemtype] to the pile.")) + stack_contents[G.gemtype] += 1 + src.stacksize += 1 + G.stacksize -= 1 + update_gem() + G.update_gem() + + +/obj/item/precious/gemstone/proc/add_gem(obj/item/precious/gemstone/G) + stack_contents[G.gemtype] += 1 + stacksize += 1 + + +/obj/item/precious/gemstone/proc/update_gem() + if(src.stacksize <= 0) + qdel(src) + return + if(src.gemtype == GEM_MIXED) + switch (gemsize) + if(GEM_SMALL) + switch(stacksize) + if(30) + icon_state = "smixed_30" + if(10 to 29) + icon_state = "smixed_10" + else + icon_state = "smixed_5" + if(GEM_MEDIUM) + switch(stacksize) + if(15) + icon_state = "mmixed_10" + else + icon_state = "mmixed_5" + if(GEM_LARGE) + icon_state = "lmixed" + else + switch (gemsize) + if(GEM_SMALL) + switch (stacksize) + if(30) + icon_state = "s[gemtype]_30" + if(10 to 29) + icon_state = "s[gemtype]_10" + if(5 to 9) + icon_state = "s[gemtype]_5" + else + icon_state = "s[gemtype]_[stacksize]" + if(GEM_MEDIUM) + switch (stacksize) + if(15) + icon_state = "m[gemtype]_10" + if(5 to 14) + icon_state = "m[gemtype]_5" + else + icon_state = "m[gemtype]_[stacksize]" + if(GEM_LARGE) + icon_state = "l[gemtype]_[stacksize]" + updatedesc() + +/obj/item/precious/gemstone/proc/updatedesc() + if(src.stacksize == 1) + name = "[gemsize] [gemtype]" + desc = "A single [gemcolor] gemstone of [gemsize] size" + return + if(src.gemtype != GEM_MIXED) + switch(stacksize) + if(2 to 5) + name = "[gemsize] [plural]" + desc = "Several [gemsize] [gemcolor] gemstones. There are [stacksize] gems." + if(5 to 14) + name = "pile of [gemsize] [plural]" + desc = "A pile of [gemsize] [gemcolor] gemstones, stacked into a pile. There are [stacksize] gems in the pile." + if(15 to 30) + name = "heap of [gemsize] [plural]" + desc = "A hefty stack of [gemsize] [gemcolor] gemstones, heaped into a mass of glittering wealth. There are [stacksize] gems in the pile." + else + desc = "A colorful pile of assorted [gemsize] gleaming gemstones. There are [stacksize] gems in the pile." + +var/list/gemtype2type = list( + GEM_RUBY = list( + GEM_SMALL = /obj/item/precious/gemstone/ruby, + GEM_MEDIUM = /obj/item/precious/gemstone/ruby/med, + GEM_LARGE = /obj/item/precious/gemstone/ruby/large), + GEM_AMETHYST = list( + GEM_SMALL = /obj/item/precious/gemstone/amethyst, + GEM_MEDIUM = /obj/item/precious/gemstone/amethyst/med, + GEM_LARGE = /obj/item/precious/gemstone/amethyst/large), + GEM_TOPAZ = list( + GEM_SMALL = /obj/item/precious/gemstone/topaz, + GEM_MEDIUM = /obj/item/precious/gemstone/topaz/med, + GEM_LARGE = /obj/item/precious/gemstone/topaz/large), + GEM_DIAMOND = list( + GEM_SMALL = /obj/item/precious/gemstone/diamond, + GEM_MEDIUM = /obj/item/precious/gemstone/diamond/med, + GEM_LARGE = /obj/item/precious/gemstone/diamond/large), + GEM_EMERALD = list ( + GEM_SMALL = /obj/item/precious/gemstone/emerald, + GEM_MEDIUM = /obj/item/precious/gemstone/emerald/med, + GEM_LARGE = /obj/item/precious/gemstone/emerald/large), + GEM_SAPPHIRE = list( + GEM_SMALL = /obj/item/precious/gemstone/sapphire, + GEM_MEDIUM = /obj/item/precious/gemstone/sapphire/med, + GEM_LARGE = /obj/item/precious/gemstone/sapphire/large)) + + +/obj/item/precious/gemstone/mixed/verb/separate_pile() + set name = "Separate Pile" + set category = "Object" + set src in view(1) + + for (var/gtype in stack_contents) + var/realtype = global.gemtype2type[gtype][gemsize] + new realtype(loc, stack_contents[gtype]) + to_chat(usr, span("notice", "You separate the gemstone pile into neat, organized stacks of similar gems.")) + qdel(src) + +// Small gemstones + +/obj/item/precious/gemstone/ruby + name = "small ruby" + desc = "A single red gemstone of small size." + icon_state = "sruby_1" + gemtype = GEM_RUBY + gemsize = GEM_SMALL + plural = "rubies" + gemcolor = "red" + maxstack = 30 + stacksize = 1 + +/obj/item/precious/gemstone/topaz + name = "small topaz" + desc = "A single yellow gemstone of small size." + icon_state = "stopaz_1" + gemtype = GEM_TOPAZ + gemsize = GEM_SMALL + plural = "topazes" + gemcolor = "yellow" + maxstack = 30 + stacksize = 1 + +/obj/item/precious/gemstone/sapphire + name = "small sapphire" + desc = "A single blue gemstone of small size." + icon_state = "ssapphire_1" + gemtype = GEM_SAPPHIRE + gemsize = GEM_SMALL + plural = "sapphires" + gemcolor = "blue" + maxstack = 30 + stacksize = 1 + +/obj/item/precious/gemstone/amethyst + name = "small amethyst" + desc = "A single purple gemstone of small size." + icon_state = "samethyst_1" + gemtype = GEM_AMETHYST + gemsize = GEM_SMALL + plural = "amethysts" + gemcolor = "purple" + maxstack = 30 + stacksize = 1 + +/obj/item/precious/gemstone/emerald + name = "small emerald" + desc = "A single green gemstone of small size." + icon_state = "semerald_1" + gemtype = GEM_EMERALD + gemsize = GEM_SMALL + plural = "emeralds" + gemcolor = "green" + maxstack = 30 + stacksize = 1 + +/obj/item/precious/gemstone/diamond + name = "small diamond" + desc = "A single colorless gemstone of small size." + icon_state = "sdiamond_1" + gemtype = GEM_DIAMOND + gemsize = GEM_SMALL + plural = "diamonds" + gemcolor = "colorless" + maxstack = 30 + stacksize = 1 + +// Medium Gemstones + +/obj/item/precious/gemstone/ruby/med + name = "medium ruby" + desc = "A single red gemstone of medium size." + icon_state = "mruby_1" + gemtype = GEM_RUBY + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +/obj/item/precious/gemstone/topaz/med + name = "medium topaz" + desc = "A single yellow gemstone of medium size." + icon_state = "mtopaz_1" + gemtype = GEM_TOPAZ + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +/obj/item/precious/gemstone/sapphire/med + name = "medium sapphire" + desc = "A single blue gemstone of medium size." + icon_state = "msapphire_1" + gemtype = GEM_SAPPHIRE + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +/obj/item/precious/gemstone/amethyst/med + name = "medium amethyst" + desc = "A single purple gemstone of medium size." + icon_state = "mamethyst_1" + gemtype = GEM_AMETHYST + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +/obj/item/precious/gemstone/emerald/med + name = "medium emerald" + desc = "A single green gemstone of medium size." + icon_state = "memerald_1" + gemtype = GEM_EMERALD + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +/obj/item/precious/gemstone/diamond/med + name = "medium diamond" + desc = "A single colorless gemstone of medium size." + icon_state = "mdiamond_1" + gemtype = GEM_DIAMOND + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 1 + +// Large Gemstones + +/obj/item/precious/gemstone/ruby/large + name = "large ruby" + desc = "A single red gemstone of large size." + icon_state = "lruby_1" + gemtype = GEM_RUBY + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/topaz/large + name = "large topaz" + desc = "A single yellow gemstone of large size." + icon_state = "ltopaz_1" + gemtype = GEM_TOPAZ + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/sapphire/large + name = "large sapphire" + desc = "A single blue gemstone of large size." + icon_state = "lsapphire_1" + gemtype = GEM_SAPPHIRE + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/amethyst/large + name = "large amethyst" + desc = "A single purple gemstone of large size." + icon_state = "lamethyst_1" + gemtype = GEM_AMETHYST + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/emerald/large + name = "large emerald" + desc = "A single green gemstone of large size." + icon_state = "lemerald_1" + gemtype = GEM_EMERALD + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/diamond/large + name = "large diamond" + desc = "A single colorless gemstone of large size." + icon_state = "ldiamond_1" + gemtype = GEM_DIAMOND + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 1 + +// Enormous Gemstones + +/obj/item/precious/gemstone/ruby/huge + name = "enormous ruby" + desc = "A single red gemstone of enormous size." + icon_state = "eruby" + gemtype = GEM_RUBY + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/topaz/huge + name = "enormous topaz" + desc = "A single yellow gemstone of enormous size." + icon_state = "etopaz" + gemtype = GEM_TOPAZ + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/sapphire/huge + name = "enormous sapphire" + desc = "A single blue gemstone of enormous size." + icon_state = "esapphire" + gemtype = GEM_SAPPHIRE + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/amethyst/huge + name = "enormous amethyst" + desc = "A single purple gemstone of enormous size." + icon_state = "eamethyst" + gemtype = GEM_AMETHYST + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/emerald/huge + name = "enormous emerald" + desc = "A single green gemstone of enormous size." + icon_state = "eemerald" + gemtype = GEM_EMERALD + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +/obj/item/precious/gemstone/diamond/huge + name = "enormous diamond" + desc = "A single colorless gemstone of enormous size." + icon_state = "ediamond" + gemtype = GEM_DIAMOND + gemsize = GEM_ENORMOUS + maxstack = 5 + stacksize = 1 + +// Temporary treasure hunt space - to be deleted after someone finds the first enormous gemstone + +/obj/item/precious/gemstone/pickup(mob/living/user) + if(src.gemsize != GEM_ENORMOUS) + return + if(src.pickup == 0) + to_chat(user, "As you struggle to pick up [src.name], you realize this might possibly be the most valuable object you will ever hold in your life. Can you even put a value on a gemstone this large?") + log_and_message_admins ("[user.name] has found the first enormous gemstone, \a [src.gemtype]. Please inform Kaedwuff about this, he has plans to give them a surprise.") + src.pickup = 1 + + +// Mixed Gem Piles + +/obj/item/precious/gemstone/mixed + name = "small gemstone pile" + desc = "A pile of assorted small gemstones." + icon_state = "smixed_5" + gemtype = GEM_MIXED + gemsize = GEM_SMALL + maxstack = 30 + stacksize = 0 + +/obj/item/precious/gemstone/mixed/med + name = "medium gemstone pile" + desc = "A pile of assorted medium gemstones." + gemtype = GEM_MIXED + gemsize = GEM_MEDIUM + maxstack = 15 + stacksize = 0 + +/obj/item/precious/gemstone/mixed/large + name = "large gemstone pile" + desc = "A pile of assorted large gemstones." + gemtype = GEM_MIXED + gemsize = GEM_LARGE + maxstack = 5 + stacksize = 0 + +/turf/simulated/mineral/proc/findgem(loc) + if(prob(95)) + spawnsmallgem() + else + if(prob(99)) + spawnmediumgem() + else + if (prob (95)) + spawnlargegem() + else + spawnhugegem() + +/turf/simulated/mineral/proc/spawnsmallgem(loc) + if(prob(75)) + if(prob(80)) + var/picked = pick(/obj/item/precious/gemstone/ruby, /obj/item/precious/gemstone/topaz, /obj/item/precious/gemstone/sapphire, /obj/item/precious/gemstone/amethyst, /obj/item/precious/gemstone/emerald) + new picked(loc) + visible_message(span("notice", "A tiny, glittering gemstone was in the rubble!")) + else + new /obj/item/precious/gemstone/diamond(loc) + visible_message(span("notice", "A tiny, glittering diamond was in the rubble! Shiny!")) + + else + if(prob(80)) + var/picked = pick(/obj/item/precious/gemstone/ruby, /obj/item/precious/gemstone/topaz, /obj/item/precious/gemstone/sapphire, /obj/item/precious/gemstone/amethyst, /obj/item/precious/gemstone/emerald) + new picked(loc, 2) + visible_message(span("notice", "A couple tiny, glittering gemstones were in the rubble! Lucky!")) + else + new /obj/item/precious/gemstone/diamond(loc) + visible_message(span("notice", "A couple tiny, glittering diamonds were in the rubble! Sweet!")) + +/turf/simulated/mineral/proc/spawnmediumgem(loc) + if(prob(80)) + var/picked = pick(/obj/item/precious/gemstone/ruby/med, /obj/item/precious/gemstone/topaz/med, /obj/item/precious/gemstone/sapphire/med, /obj/item/precious/gemstone/amethyst/med, /obj/item/precious/gemstone/emerald/med) + new picked(loc) + visible_message(span("notice", "You found a small gemstone in the rubble! Nice!")) + else + new /obj/item/precious/gemstone/diamond/med(loc) + visible_message(span("notice", "You found a small diamond in the rubble! Yeehaw!")) + +/turf/simulated/mineral/proc/spawnlargegem(loc) + var/picked = pick(/obj/item/precious/gemstone/ruby/large, /obj/item/precious/gemstone/topaz/large, /obj/item/precious/gemstone/sapphire/large, /obj/item/precious/gemstone/amethyst/large, /obj/item/precious/gemstone/diamond/large, /obj/item/precious/gemstone/emerald/large) + new picked(loc) + visible_message(span("notice", "There was sizable gemstone in the rubble! Wow!")) + +/turf/simulated/mineral/proc/spawnhugegem(loc) + if(prob(90)) + var/picked = pick(/obj/item/precious/gemstone/ruby/large, /obj/item/precious/gemstone/topaz/large, /obj/item/precious/gemstone/sapphire/large, /obj/item/precious/gemstone/amethyst/large, /obj/item/precious/gemstone/diamond/large, /obj/item/precious/gemstone/emerald/large) + new picked(loc, rand(2,5)) + visible_message(span("danger", "There is a loud crunching sound and you watch in horror as a enormous gemstone that had been embedded in the rock fractures into pieces.")) + visible_message(span("notice", "Well, that was unlucky... at least the fragments are worth something, though...")) + else + var/picked = pick(/obj/item/precious/gemstone/ruby/huge, /obj/item/precious/gemstone/topaz/huge, /obj/item/precious/gemstone/sapphire/huge, /obj/item/precious/gemstone/amethyst/huge, /obj/item/precious/gemstone/diamond/huge, /obj/item/precious/gemstone/emerald/huge) + new picked(loc) + visible_message("An enormous gemstone tumbles out of the rubble, somehow managing to survive the destruction of the rock it was hidden in. Holy shit - this thing is larger than your head! You're going to be rich if you can get hold of that!") + +/turf/simulated/mineral/proc/spawndiamond(loc) + if(prob(95)) + spawnsmalldiamond() + else + if(prob(99)) + spawnmediumdiamond() + else + if (prob (95)) + spawnlargediamond() + else + spawnhugediamond() + +/turf/simulated/mineral/proc/spawnsmalldiamond(loc) + if(prob(75)) + new /obj/item/precious/gemstone/diamond(loc) + visible_message(span("notice", "There was also a tiny, glittering higher quality diamond among the rubble!")) + else + new /obj/item/precious/gemstone/diamond(loc, 2) + visible_message(span("notice", "A couple of tiny higher quality diamonds were also among the rubble! Lucky!")) + +/turf/simulated/mineral/proc/spawnmediumdiamond(loc) + new /obj/item/precious/gemstone/diamond/med(loc) + visible_message(span("notice", "A small higher quality diamond was also in the rubble! Nice!")) + +/turf/simulated/mineral/proc/spawnlargediamond(loc) + new /obj/item/precious/gemstone/diamond/large(loc) + visible_message(span("notice", "A sizable higher quality diamond was in the rubble! Wow!")) + +/turf/simulated/mineral/proc/spawnhugediamond(loc) + if(prob(90)) + new /obj/item/precious/gemstone/diamond/large(loc, rand(2,5)) + visible_message(span("danger", "There is a loud crunching sound and you watch in horror as a enormous diamond that had been embedded in the rock fractures into pieces.")) + visible_message(span("notice", "Well, that was unlucky... at least the fragments are worth something, though...")) + else + new /obj/item/precious/gemstone/diamond/huge(loc) + visible_message("You find an enormous diamond in the rubble that managed to survive the destruction of the rock it was hidden in. Holy shit - this thing is larger than your head! You're going to be rich if you can get hold of that!") diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 2f28b44db84..052d24b6d1f 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -391,6 +391,8 @@ var/list/mineral_can_smooth_with = list( clear_ore_effects() var/obj/item/ore/O = new mineral.ore (src) + if(src.mineral == "diamond") + spawndiamond() if(istype(O)) geologic_data.UpdateNearbyArtifactInfo(src) O.geologic_data = geologic_data @@ -431,6 +433,8 @@ var/list/mineral_can_smooth_with = list( if(rand(1,500) == 1) visible_message("An old dusty crate was buried within!") new /obj/structure/closet/crate/secure/loot(src) + else if(prob(5)) + findgem(loc) /turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) //with skill and luck, players can cleanly extract finds diff --git a/html/changelogs/Kaedwuff - Gemstones.yml b/html/changelogs/Kaedwuff - Gemstones.yml new file mode 100644 index 00000000000..183f7ef0f56 --- /dev/null +++ b/html/changelogs/Kaedwuff - Gemstones.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Kaedwuff + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Gemstones can now be found in mined rocks! They come in six different flavors and four sizes, with increasing rarity!" + - rscadd: "Gemstones can be sent to centcomm for extra cargo funds. For now, this is their only function." diff --git a/icons/obj/gemstones.dmi b/icons/obj/gemstones.dmi new file mode 100644 index 00000000000..f817fc73a78 Binary files /dev/null and b/icons/obj/gemstones.dmi differ diff --git a/icons/obj/gemstonesbase.dmi b/icons/obj/gemstonesbase.dmi new file mode 100644 index 00000000000..a65974ca7fd Binary files /dev/null and b/icons/obj/gemstonesbase.dmi differ