diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 44973327f0..9d8da6c145 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -267,15 +267,17 @@ GLOBAL_LIST_INIT(redacted_strings, list("\[REDACTED\]", "\[CLASSIFIED\]", "\[ARC GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt")) +//LANGUAGE CHARACTER CUSTOMIZATION GLOBAL_LIST_INIT(speech_verbs, list("default","says","gibbers", "states", "chitters", "chimpers", "declares", "bellows", "buzzes" ,"beeps", "chirps", "clicks", "hisses" ,"poofs" , "puffs", "rattles", "mewls" ,"barks", "blorbles", "squeaks", "squawks", "flutters", "warbles")) - GLOBAL_LIST_INIT(roundstart_tongues, list("default","human tongue" = /obj/item/organ/tongue, "lizard tongue" = /obj/item/organ/tongue/lizard, "skeleton tongue" = /obj/item/organ/tongue/bone, "fly tongue" = /obj/item/organ/tongue/fly, "ipc tongue" = /obj/item/organ/tongue/robot/ipc)) +//SPECIES BODYPART LISTS //locked parts are those that your picked species requires to have //unlocked parts are those that anyone can choose on customisation regardless //parts not in unlocked, but in all, are thus locked GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "body_markings" = "Body Markings", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns")) GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff")) + //parts in either of the above two lists that require a second option that allows them to be coloured GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color")) @@ -285,6 +287,40 @@ GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant //body ids that have prosthetic sprites GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon")) +//FAMILY HEIRLOOM LIST +//this works by using the first number for the species as a probability to choose one of the items in the following list for their family heirloom +//if the probability fails, or the species simply isn't in the list, then it defaults to the next global list, which has its own list of items for each job +//the first item in the list is for if your job isn't in that list + +//species-heirloom list (we categorise them by the species id var) +GLOBAL_LIST_INIT(species_heirlooms, list( + "dwarf" = list(25, list(/obj/item/reagent_containers/food/drinks/dwarf_mug)), //example: 25% chance for dwarves to get a dwarf mug as their heirloom (normal container but has manly dorf icon) + "insect" = list(25, list(/obj/item/flashlight/lantern/heirloom_moth)), + "ipc" = list(25, list(/obj/item/stock_parts/cell/family)), //gives a broken powercell for flavor text! + "synthliz" = list(25, list(/obj/item/stock_parts/cell/family)), //they're also robots + "slimeperson" = list(25, list(/obj/item/toy/plush/slimeplushie)), + "lizard" = list(25, list(/obj/item/toy/plush/lizardplushie)), + )) + +//job-heirloom list +GLOBAL_LIST_INIT(job_heirlooms, list( + "NO_JOB" = list(/obj/item/toy/cards/deck, /obj/item/lighter, /obj/item/dice/d20), + "Clown" = list(/obj/item/paint/anycolor, /obj/item/bikehorn/golden), + "Mime" = list(/obj/item/paint/anycolor, /obj/item/toy/dummy), + "Cook" = list(/obj/item/kitchen/knife/scimitar), + "Botanist" = list(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie), + "Medical Doctor" = list(/obj/item/healthanalyzer), + "Paramedic" = list(/obj/item/lighter), //..why? + "Station Engineer" = list(/obj/item/wirecutters/brass/family, /obj/item/crowbar/brass/family, /obj/item/screwdriver/brass/family, /obj/item/wrench/brass/family), //brass tools but without the tool speed modifier + "Atmospheric Technician" = list(/obj/item/extinguisher/mini/family), + "Lawyer" = list(/obj/item/storage/briefcase/lawyer/family), + "Janitor" = list(/obj/item/mop), + "Scientist" = list(/obj/item/toy/plush/slimeplushie), + "Assistant" = list(/obj/item/clothing/gloves/cut/family), + "Chaplain" = list(/obj/item/camera/spooky/family), + "Head of Personnel" = list(/obj/item/pinpointer/ian) + )) + //body ids that have non-gendered bodyparts GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 706a5ed955..9abc37c7e4 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -43,5 +43,4 @@ GLOBAL_LIST_EMPTY(ai_status_displays) GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert -//list of everyone playing rock paper scissors -GLOBAL_LIST_EMPTY(rockpaperscissors_players) +GLOBAL_LIST_EMPTY(rockpaperscissors_players) // List of everyone playing rock paper scissors diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 322fba0a33..fe27cc2baf 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -44,42 +44,16 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/family_heirloom/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/heirloom_type - switch(quirk_holder.mind.assigned_role) - if("Clown") - heirloom_type = pick(/obj/item/paint/anycolor, /obj/item/bikehorn/golden) - if("Mime") - heirloom_type = pick(/obj/item/paint/anycolor, /obj/item/toy/dummy) - if("Cook") - heirloom_type = /obj/item/kitchen/knife/scimitar - if("Botanist") - heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie) - if("Medical Doctor") - heirloom_type = /obj/item/healthanalyzer - if("Paramedic") - heirloom_type = /obj/item/lighter - if("Station Engineer") - heirloom_type = /obj/item/wirecutters/brass - if("Atmospheric Technician") - heirloom_type = /obj/item/extinguisher/mini/family - if("Lawyer") - heirloom_type = /obj/item/storage/briefcase/lawyer/family - if("Janitor") - heirloom_type = /obj/item/mop - if("Security Officer") - heirloom_type = /obj/item/clothing/accessory/medal/silver/valor - if("Scientist") - heirloom_type = /obj/item/toy/plush/slimeplushie - if("Assistant") - heirloom_type = /obj/item/clothing/gloves/cut/family - if("Chaplain") - heirloom_type = /obj/item/camera/spooky/family - if("Captain") - heirloom_type = /obj/item/clothing/accessory/medal/gold/captain/family + var/species_heirloom_entry = GLOB.species_heirlooms[H.dna.species.id] + if(species_heirloom_entry) + if(prob(species_heirloom_entry[1])) + heirloom_type = pick(species_heirloom_entry[2]) if(!heirloom_type) - heirloom_type = pick( - /obj/item/toy/cards/deck, - /obj/item/lighter, - /obj/item/dice/d20) + var/job_heirloom_entry = GLOB.job_heirlooms[quirk_holder.mind.assigned_role] + if(!job_heirloom_entry) + heirloom_type = pick(GLOB.job_heirlooms["NO_JOB"]) //consider: should this be a define? + else + heirloom_type = pick(job_heirloom_entry) heirloom = new heirloom_type(get_turf(quirk_holder)) GLOB.family_heirlooms += heirloom var/list/slots = list( diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 035375fdaf..a2459bce9f 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -366,6 +366,11 @@ flashlight_power = 0.8 custom_price = PRICE_CHEAP +/obj/item/flashlight/lantern/heirloom_moth + name = "old lantern" + desc = "An old lantern that has seen plenty of use." + light_range = 4 + /obj/item/flashlight/lantern/jade name = "jade lantern" desc = "An ornate, green lantern." diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 3420e72c72..abd9cec950 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -199,4 +199,12 @@ /obj/item/pinpointer/shuttle/Destroy() shuttleport = null - . = ..() \ No newline at end of file + . = ..() + +/obj/item/pinpointer/ian + name = "ian pinpointer" + desc = "A handheld tracking device that locates Ian. Made with real corgis!" + icon_state = "pinpointer_ian" + +/obj/item/pinpointer/ian/scan_for_target() + target = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 6159ab7ba0..0dd9885c29 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -37,6 +37,9 @@ icon_state = "crowbar_clock" toolspeed = 0.5 +/obj/item/crowbar/brass/family + toolspeed = 1 + /obj/item/crowbar/bronze name = "bronze plated crowbar" desc = "A bronze plated crowbar." diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 86c223606d..bb507e5725 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -89,6 +89,9 @@ toolspeed = 0.5 random_color = FALSE +/obj/item/screwdriver/brass/family + toolspeed = 1 + /obj/item/screwdriver/bronze name = "bronze screwdriver" desc = "A screwdriver plated with bronze." diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 53a578a45d..000b816d70 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -69,6 +69,9 @@ random_color = FALSE toolspeed = 0.5 +/obj/item/wirecutters/brass/family + toolspeed = 1 + /obj/item/wirecutters/bronze name = "bronze plated wirecutters" desc = "A pair of wirecutters plated with bronze." diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index e1c09f394e..e8b77199d7 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -40,6 +40,9 @@ icon_state = "wrench_clock" toolspeed = 0.5 +/obj/item/wrench/brass/family + toolspeed = 1 + /obj/item/wrench/bronze name = "bronze plated wrench" desc = "A bronze plated wrench." diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index a3ee8c5228..140923c1ef 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -618,3 +618,9 @@ icon_state = "monkey_energy" list_reagents = list(/datum/reagent/consumable/monkey_energy = 50) foodtype = SUGAR | JUNKFOOD + +/obj/item/reagent_containers/food/drinks/dwarf_mug //dwarf family heirloom (just a cup that always has the manly dorf icon!) + name = "ale mug" + desc = "An old stained mug used for filling with dwarven ale." + icon_state = "manlydorfglass" + isGlass = FALSE //it's a wooden mug! diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index fe05365dd9..a4daeb6a33 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -407,3 +407,10 @@ /obj/item/stock_parts/cell/toymagburst name = "toy mag burst rifle power supply" maxcharge = 4000 + +/obj/item/stock_parts/cell/family + name = "broken power cell" + desc = "An old faulty power cell. You can see your family name faintly etched onto it." + maxcharge = 100 + self_recharge = -5 //it loses power over time instead of gaining + rating = 1 diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 5a9e1e54b6..34f9867ee9 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ