diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index af010501b30..c4d0511b995 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -183,3 +183,14 @@ #define ROLE_SYNTHETIC "synthetic" #define ROLE_UNKNOWN "unknown" #define ROLE_EVERYONE "everyone" + +// Canonical spellings of TSCs, so typos never have to happen again due to human error. +#define TSC_NT "NanoTrasen" +#define TSC_HEPH "Hephaestus" // Because everyone misspells it +#define TSC_VM "Vey Med" +#define TSC_ZH "Zeng-Hu" +#define TSC_WT "Ward-Takahashi" +#define TSC_BC "Bishop Cybernetics" +#define TSC_MORPH "Morpheus" +#define TSC_XION "Xion" // Not really needed but consistancy I guess. +#define TSC_GIL "Gilthari" diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 13a69cfc1a1..dc49b380dc2 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -127,7 +127,7 @@ /obj/item/clothing/mask/surgical, /obj/item/clothing/shoes/white, /obj/item/weapon/cartridge/cmo, - /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/sterile/latex, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/syringe @@ -150,7 +150,7 @@ /obj/item/weapon/storage/firstaid/adv, /obj/item/clothing/shoes/white, /obj/item/weapon/cartridge/medical, - /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/sterile/latex, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/syringe @@ -172,7 +172,7 @@ /obj/item/clothing/mask/surgical, /obj/item/clothing/shoes/white, /obj/item/weapon/cartridge/chemistry, - /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/sterile/latex, /obj/item/weapon/reagent_containers/dropper, /obj/item/device/healthanalyzer, /obj/item/weapon/storage/box/pillbottles, @@ -199,7 +199,7 @@ /obj/item/clothing/accessory/stethoscope, /obj/item/weapon/storage/firstaid/adv, /obj/item/clothing/shoes/boots/jackboots, - /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/sterile/latex, /obj/item/device/healthanalyzer, /obj/item/weapon/cartridge/medical, /obj/item/device/flashlight/pen, diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 074bbddc81d..1ec25bc28d0 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -367,7 +367,7 @@ /obj/item/clothing/shoes/white = 3, /obj/item/clothing/mask/gas = 3, /obj/item/weapon/tank/oxygen = 3, - /obj/item/clothing/gloves/latex, + /obj/item/clothing/gloves/sterile/latex, /obj/item/weapon/storage/box/gloves ) cost = 50 diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 9a4ab9600b8..83cae026cec 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -8,6 +8,11 @@ icon_state = "undershirt" has_color = TRUE +/datum/category_item/underwear/undershirt/shirt_long + name = "Long Shirt" + icon_state = "undershirt_long" + has_color = TRUE + /datum/category_item/underwear/undershirt/shirt_fem name = "Babydoll shirt" icon_state = "undershirt_fem" diff --git a/code/datums/uplink/tools.dm b/code/datums/uplink/tools.dm index 17203e3d5df..7cea8427786 100644 --- a/code/datums/uplink/tools.dm +++ b/code/datums/uplink/tools.dm @@ -58,11 +58,6 @@ item_cost = 15 path = /obj/item/device/encryptionkey/binary -/datum/uplink_item/item/tools/packagebomb - name = "Package Bomb (Small)" - item_cost = 20 - path = /obj/item/weapon/storage/box/syndie_kit/demolitions - /datum/uplink_item/item/tools/hacking_tool name = "Door Hacking Tool" item_cost = 20 @@ -81,6 +76,11 @@ item_cost = 30 path = /obj/item/clothing/glasses/thermal/syndi +/datum/uplink_item/item/tools/packagebomb + name = "Package Bomb (Small)" + item_cost = 30 + path = /obj/item/weapon/storage/box/syndie_kit/demolitions + /datum/uplink_item/item/tools/powersink name = "Powersink (DANGER!)" item_cost = 40 @@ -88,13 +88,13 @@ /datum/uplink_item/item/tools/packagebomb/large name = "Package Bomb (Large)" - item_cost = 40 + item_cost = 60 path = /obj/item/weapon/storage/box/syndie_kit/demolitions_heavy /* /datum/uplink_item/item/tools/packagebomb/huge name = "Package Bomb (Huge) - item_cost = 60 + item_cost = 100 path = /obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy */ diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index 1e6913a3748..616080bfbf8 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -52,6 +52,7 @@ var/datum/antagonist/renegade/renegades /obj/item/weapon/gun/projectile/shotgun/pump/combat, /obj/item/weapon/gun/projectile/shotgun/doublebarrel, /obj/item/weapon/gun/projectile/revolver/judge, + /obj/item/weapon/gun/projectile/revolver/lemat, list(/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn), list(/obj/item/weapon/gun/projectile/deagle, /obj/item/weapon/gun/projectile/deagle/gold, /obj/item/weapon/gun/projectile/deagle/camo), list(/obj/item/weapon/gun/projectile/revolver/detective, /obj/item/weapon/gun/projectile/revolver/deckard), diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 474b2d3b251..e0bf45d97b4 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -299,9 +299,9 @@ its easier to just keep the beam vertical. //Deal with gloves the pass finger/palm prints. if(!ignoregloves) if(H.gloves != src) - if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex)) + if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/sterile)) return 0 - else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex)) + else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/sterile)) return 0 //More adminstuffz diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index 53861563fd8..2b8af49eb6f 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -35,6 +35,8 @@ src << "You can't speak!" return 0 + src.break_cloak() //No more invisible shrieking + changeling.chem_charges -= 20 var/range = 4 if(src.mind.changeling.recursive_enhancement) @@ -71,6 +73,12 @@ L.on = 1 L.broken() +/* src.verbs -= /mob/proc/changeling_resonant_shriek + spawn(30 SECONDS) + src << "We are ready to use our resonant shriek once more." + src.verbs |= /mob/proc/changeling_resonant_shriek +Ability Cooldowns don't work properly right now, need to redo this when they are */ + feedback_add_details("changeling_powers","RS") return 1 @@ -93,6 +101,8 @@ src << "You can't speak!" return 0 + src.break_cloak() //No more invisible shrieking + changeling.chem_charges -= 20 var/range_heavy = 1 @@ -115,4 +125,10 @@ L.on = 1 L.broken() empulse(get_turf(src), range_heavy, range_light, 1) + +/* src.verbs -= /mob/proc/changeling_dissonant_shriek + spawn(30 SECONDS) + src << "We are ready to use our dissonant shriek once more." + src.verbs |= /mob/proc/changeling_dissonant_shriek +Ability Cooldowns don't work properly right now, need to redo this when they are */ return 1 \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b6625bce7eb..f2cd6ba7802 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -754,7 +754,7 @@ products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 6, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 6, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 3) - contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6) + contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,/obj/item/weapon/reagent_containers/food/snacks/unajerky = 6,) prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5,/obj/item/weapon/reagent_containers/food/snacks/chips = 1, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 2,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 1,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 1, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 1, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 2, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 4) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index fa521c104a1..c2fb1074b43 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -95,10 +95,8 @@ Trigger(var/atom/movable/A) if(teleport_x && teleport_y && teleport_z) - - A.x = teleport_x - A.y = teleport_y - A.z = teleport_z + var/turf/T = locate(teleport_x, teleport_y, teleport_z) + A.forceMove(T) /* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ @@ -110,8 +108,5 @@ Trigger(var/atom/movable/A) if(teleport_x && teleport_y && teleport_z) if(teleport_x_offset && teleport_y_offset && teleport_z_offset) - - A.x = rand(teleport_x, teleport_x_offset) - A.y = rand(teleport_y, teleport_y_offset) - A.z = rand(teleport_z, teleport_z_offset) - + var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset)) + A.forceMove(T) diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index ad24aa90a1d..707a38a2842 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -50,3 +50,15 @@ /obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) if (can_puncture(W)) burst() + +/* +/obj/item/latexballon/nitrile + name = "nitrile glove" + desc = "A nitrile glove, usually used as a balloon." + icon_state = "nitrileballon" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi', + ) + item_state = "ngloves" +*/ \ No newline at end of file diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 7fb09e116c7..3d9c4ea140c 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -35,6 +35,10 @@ name = "Scaredy's Private Reserve Beef Jerky" icon_state = "sosjerky" +/obj/item/trash/unajerky + name = "Moghes Imported Sissalik Jerky" + icon_state = "unathitinred" + /obj/item/trash/syndi_cakes name = "syndi cakes" icon_state = "syndi_cakes" diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 19cc54de7f8..10a7bc05f39 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -77,7 +77,7 @@ /obj/item/weapon/storage/box/gloves/New() ..() for(var/i = 1 to 7) - new /obj/item/clothing/gloves/latex(src) + new /obj/item/clothing/gloves/sterile/latex(src) /obj/item/weapon/storage/box/masks name = "box of sterile masks" diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index 490ae2d62b5..3de967d78f7 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -39,6 +39,10 @@ /obj/item/weapon/syndie/c4explosive/proc/detonate() icon_state = "c-4[size]_1" + playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1) + for(var/mob/O in hearers(src, null)) + O.show_message("\icon[src] The [src.name] beeps! ") + sleep(50) explosion(get_turf(src), power, power*2, power*3, power*4, power*5) for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors. var/turf/simulated/wall/T = get_step(src,dirn) @@ -89,4 +93,4 @@ /obj/item/weapon/flame/lighter/zippo/c4detonator/attackby(obj/item/weapon/W, mob/user as mob) if(istype(W, /obj/item/weapon/screwdriver)) detonator_mode = !detonator_mode - user << "You unscrew the top panel of \the [src] revealing a button." \ No newline at end of file + user << "You unscrew the top panel of \the [src] revealing a button." diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 8ac7875bb63..75c0d5830ff 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -559,7 +559,7 @@ something, make sure it's not in one of the other lists.*/ prob(4);/obj/item/clothing/shoes/leather, prob(1);/obj/item/clothing/gloves/yellow, prob(3);/obj/item/clothing/gloves/botanic_leather, - prob(2);/obj/item/clothing/gloves/latex, + prob(2);/obj/item/clothing/gloves/sterile/latex, prob(5);/obj/item/clothing/gloves/white, prob(5);/obj/item/clothing/gloves/rainbow, prob(2);/obj/item/clothing/gloves/fyellow, @@ -686,7 +686,7 @@ something, make sure it's not in one of the other lists.*/ prob(2);/obj/item/weapon/storage/belt/medical, prob(1);/obj/item/clothing/shoes/boots/combat, prob(3);/obj/item/clothing/shoes/white, - prob(2);/obj/item/clothing/gloves/latex, + prob(2);/obj/item/clothing/gloves/sterile/nitrile, prob(5);/obj/item/clothing/gloves/white, prob(2);/obj/item/clothing/glasses/hud/health, prob(1);/obj/item/clothing/glasses/hud/health/prescription, @@ -761,7 +761,7 @@ something, make sure it's not in one of the other lists.*/ prob(3);/obj/item/weapon/storage/box/beakers, prob(3);/obj/item/weapon/storage/box/syringes, prob(3);/obj/item/weapon/storage/box/gloves, - prob(2);/obj/item/clothing/gloves/latex, + prob(2);/obj/item/clothing/gloves/sterile/latex, prob(4);/obj/item/clothing/glasses/science, prob(3);/obj/item/clothing/glasses/material, prob(1);/obj/item/clothing/head/beret/purple, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 5063d247b4f..367eaa435a2 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -197,7 +197,7 @@ new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src) new /obj/item/weapon/cartridge/cmo(src) - new /obj/item/clothing/gloves/latex(src) + new /obj/item/clothing/gloves/sterile/latex(src) new /obj/item/clothing/shoes/brown (src) new /obj/item/device/radio/headset/heads/cmo(src) new /obj/item/device/radio/headset/heads/cmo/alt(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 15e1fd259ec..4d493c59a05 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -43,7 +43,7 @@ new /obj/item/weapon/cartridge/rd(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/shoes/leather(src) - new /obj/item/clothing/gloves/latex(src) + new /obj/item/clothing/gloves/sterile/latex(src) new /obj/item/device/radio/headset/heads/rd(src) new /obj/item/device/radio/headset/heads/rd/alt(src) new /obj/item/weapon/tank/air(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 900b6e298cc..8b7f981d2e0 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -189,7 +189,8 @@ new /obj/item/clothing/suit/unathi/robe(src) new /obj/item/clothing/shoes/sandal(src) new /obj/item/clothing/shoes/sandal(src) - new /obj/item/clothing/shoes/sandal(src) + new /obj/item/clothing/shoes/footwraps(src) + new /obj/item/clothing/shoes/footwraps(src) new /obj/item/clothing/shoes/boots/winter(src) new /obj/item/clothing/shoes/boots/winter(src) new /obj/item/clothing/suit/storage/hooded/wintercoat(src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 17a9c54cb3b..8f91f12b269 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -226,6 +226,7 @@ desc = "A collapsed roller bed that can be carried around." icon = 'icons/obj/rollerbed.dmi' icon_state = "folded" + slot_flags = SLOT_BACK w_class = ITEMSIZE_LARGE // Can't be put in backpacks. Oh well. /obj/item/roller/attack_self(mob/user) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 8112cb6dd0e..5628b8774fc 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -560,7 +560,7 @@ if("masked killer") M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/sterile/latex(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) diff --git a/code/modules/busy_space/organizations.dm b/code/modules/busy_space/organizations.dm index 86f88e7ec03..affa55ce107 100644 --- a/code/modules/busy_space/organizations.dm +++ b/code/modules/busy_space/organizations.dm @@ -2,6 +2,7 @@ /datum/lore/organization var/name = "" // Organization's name var/short_name = "" // Organization's shortname (NanoTrasen for "NanoTrasen Incorporated") + var/acronym = "" // Organization's acronym, e.g. 'NT' for NanoTrasen'. var/desc = "" // One or two paragraph description of the organization, but only current stuff. Currently unused. var/history = "" // Historical discription of the organization's origins Currently unused. var/work = "" // Short description of their work, eg "an arms manufacturer" @@ -52,11 +53,22 @@ ////////////////////////////////////////////////////////////////////////////////// // TSCs -/datum/lore/organization/nanotrasen +/datum/lore/organization/tsc/nanotrasen name = "NanoTrasen Incorporated" short_name = "NanoTrasen" - desc = "" // Todo: Write this. - history = "" // This too. + acronym = "NT" + desc = "NanoTrasen is one of the foremost research and development companies in SolGov space. \ + Originally focused on consumer products, their swift move into the field of Phoron has lead to \ + them being the foremost experts on the substance and its uses. In the modern day, NanoTrasen prides \ + itself on being an early adopter to as many new technologies as possible, often offering the newest \ + products to their employees. In an effort to combat complaints about being 'guinea pigs', Nanotrasen \ + also offers one of the most comprehensive medical plans in SolGov space, up to and including cloning \ + and therapy.\ +

\ + NT's most well known products are its phoron based creations, especially those used in Cryotherapy. \ + It also boasts an prosthetic line, which is provided to its employees as needed, and is used as an incentive \ + for newly tested posibrains to remain with the company." + history = "" // To be written someday. work = "research giant" headquarters = "Luna" motto = "" @@ -75,18 +87,20 @@ "Vir Interstellar Spaceport" ) -/datum/lore/organization/nanotrasen/New() +/datum/lore/organization/tsc/nanotrasen/New() ..() - // Get rid of the current map from the list, so ships flying in don't say they're coming to the current map. - var/string_to_test = "[using_map.station_name] in [using_map.starsys_name]" - if(string_to_test in destination_names) - destination_names.Remove(string_to_test) + spawn(1) // BYOND shenanigans means using_map is not initialized yet. Wait a tick. + // Get rid of the current map from the list, so ships flying in don't say they're coming to the current map. + var/string_to_test = "[using_map.station_name] in [using_map.starsys_name]" + if(string_to_test in destination_names) + destination_names.Remove(string_to_test) -/datum/lore/organization/hephaestus +/datum/lore/organization/tsc/hephaestus name = "Hephaestus Industries" short_name = "Hephaestus" + acronym = "HI" desc = "Hephaestus Industries is the largest supplier of arms, ammunition, and small millitary vehicles in Sol space. \ Hephaestus products have a reputation for reliability, and the corporation itself has a noted tendency to stay removed \ from corporate politics. They enforce their neutrality with the help of a fairly large asset-protection contingent which \ @@ -102,9 +116,10 @@ "a SolGov dockyard on Luna" ) -/datum/lore/organization/vey_med +/datum/lore/organization/tsc/vey_med name = "Vey Medical" short_name = "Vey Med" + acronym = "VM" desc = "Vey-Med is one of the newer TSCs on the block and is notable for being largely owned and opperated by Skrell. \ Despite the suspicion and prejudice leveled at them for their alien origin, Vey-Med has obtained market dominance in \ the sale of medical equipment-- from surgical tools to large medical devices to the Oddyseus trauma response mecha \ @@ -120,9 +135,10 @@ ship_prefixes = list("VTV" = "transportation", "VMV" = "medical resupply") destination_names = list() -/datum/lore/organization/zeng_hu +/datum/lore/organization/tsc/zeng_hu name = "Zeng-Hu pharmaceuticals" short_name = "Zeng-Hu" + acronym = "ZH" desc = "Zeng-Hu is an old TSC, based in the Sol system. Until the discovery of Phoron, Zeng-Hu maintained a stranglehold \ on the market for medications, and many household names are patentted by Zeng-Hu-- Bicaridyne, Dylovene, Tricordrizine, \ and Dexalin all came from a Zeng-Hu medical laboratory. Zeng-Hu’s fortunes have been in decline as Nanotrasen’s near monopoly \ @@ -137,9 +153,10 @@ ship_prefixes = list("ZTV" = "transportation", "ZMV" = "medical resupply") destination_names = list() -/datum/lore/organization/ward_takahashi +/datum/lore/organization/tsc/ward_takahashi name = "Ward-Takahashi General Manufacturing Conglomerate" short_name = "Ward-Takahashi" + acronym = "WT" desc = "Ward-Takahashi focuses on the sale of small consumer electronics, with its computers, communicators, \ and even mid-class automobiles a fixture of many households. Less famously, Ward-Takahashi also supplies most \ of the AI cores on which vital control systems are mounted, and it is this branch of their industry that has \ @@ -154,9 +171,10 @@ ship_prefixes = list("WTV" = "freight") destination_names = list() -/datum/lore/organization/bishop +/datum/lore/organization/tsc/bishop name = "Bishop Cybernetics" short_name = "Bishop" + acronym = "BC" desc = "Bishop’s focus is on high-class, stylish cybernetics. A favorite among transhumanists (and a bęte noire for \ bioconservatives), Bishop manufactures not only prostheses but also brain augmentation, synthetic organ replacements, \ and odds and ends like implanted wrist-watches. Their business model tends towards smaller, boutique operations, giving \ @@ -171,9 +189,10 @@ ship_prefixes = list("BTV" = "transportation") destination_names = list() -/datum/lore/organization/morpheus +/datum/lore/organization/tsc/morpheus name = "Morpheus Cyberkinetics" short_name = "Morpheus" + acronym = "MC" desc = "The only large corporation run by positronic intelligences, Morpheus caters almost exclusively to their sensibilities \ and needs. A product of the synthetic colony of Shelf, Morpheus eschews traditional advertising to keep their prices low and \ relied on word of mouth among positronics to reach their current economic dominance. Morpheus in exchange lobbies heavily for \ @@ -236,7 +255,7 @@ ) destination_names = list() -/datum/lore/organization/xion +/datum/lore/organization/tsc/xion name = "Xion Manufacturing Group" short_name = "Xion" desc = "Xion, quietly, controls most of the market for industrial equipment. Their portfolio includes mining exosuits, \ @@ -253,7 +272,7 @@ // Governments -/datum/lore/organization/sifgov +/datum/lore/organization/gov/sifgov name = "Sif Governmental Authority" short_name = "SifGov" desc = "SifGov is the sole governing administration for the Vir system, based in New Reykjavik, Sif. It is a representative \ @@ -274,13 +293,14 @@ "Vir Interstellar Spaceport" ) -/datum/lore/organization/solgov +/datum/lore/organization/gov/solgov name = "Solar Confederate Government" short_name = "SolGov" + acronym = "SCG" desc = "SolGov is a decentralized confederation of human governmental entities based on Luna, Sol, which defines top-level law for their member states. \ Member states receive various benefits such as defensive pacts, trade agreements, social support and funding, and being able to participate \ in the Colonial Assembly. The majority, but not all human territories are members of SolGov. As such, SolGov is a major power and \ - defacto represents humanity on the galatic stage." + defacto represents humanity on the galactic stage." history = "" // Todo work = "governing polity of humanity's Confederation" headquarters = "Luna" @@ -301,7 +321,7 @@ // Military -/datum/lore/organization/sif_guard +/datum/lore/organization/mil/sif_guard name = "Sif Homeguard Forces" // Todo: Get better name from lorepeople. short_name = "SifGuard" desc = "" diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b6c412f65db..071958b4f93 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -290,6 +290,7 @@ 'html/images/ntlogo.png', 'html/images/sglogo.png', 'html/images/talisman.png', + 'html/images/paper_bg.png', 'icons/pda_icons/pda_atmos.png', 'icons/pda_icons/pda_back.png', 'icons/pda_icons/pda_bell.png', diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm index d59aa621580..3f3087f4134 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm @@ -28,7 +28,11 @@ /datum/gear/gloves/latex display_name = "gloves, latex" - path = /obj/item/clothing/gloves/latex + path = /obj/item/clothing/gloves/sterile/latex + +/datum/gear/gloves/nitrile + display_name = "gloves, nitrile" + path = /obj/item/clothing/gloves/sterile/nitrile /datum/gear/gloves/orange display_name = "gloves, orange" diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 822feec101c..1f27ffb2678 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -236,11 +236,6 @@ display_name = "santa hat, green (holiday)" path = /obj/item/clothing/head/santa/green -/datum/gear/head/zhan_scarf - display_name = "Zhan headscarf" - path = /obj/item/clothing/head/tajaran/scarf - whitelisted = "Tajara" - /datum/gear/head/hijab display_name = "hijab" path = /obj/item/clothing/head/hijab diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 2e36349ee75..bc22cbad241 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -118,6 +118,10 @@ display_name = "labcoat, blue" path = /obj/item/clothing/suit/storage/toggle/labcoat/blue +/datum/gear/suit/labcoat/blue_edge + display_name = "labcoat, blue-edged" + path = /obj/item/clothing/suit/storage/toggle/labcoat/blue_edge + /datum/gear/suit/labcoat/green display_name = "labcoat, green" path = /obj/item/clothing/suit/storage/toggle/labcoat/green @@ -147,6 +151,11 @@ path = /obj/item/clothing/suit/storage/toggle/labcoat/emt allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") +/datum/gear/suit/roles/surgical_apron + display_name = "surgical apron" + path = /obj/item/clothing/suit/surgicalapron + allowed_roles = list("Medical Doctor","Chief Medical Officer") + /datum/gear/suit/overalls display_name = "overalls" path = /obj/item/clothing/suit/storage/apron/overalls diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 253f843306e..df71ff237d4 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -13,6 +13,11 @@ path = /obj/item/device/communicator cost = 0 +/datum/gear/utility/codex + display_name = "the traveler's guide to vir" + path = /obj/item/weapon/book/codex + cost = 0 + /datum/gear/utility/folder_blue display_name = "folder, blue" path = /obj/item/weapon/folder/blue diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index fee486a6595..83f59b3a7b0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -4,6 +4,11 @@ path = /obj/item/clothing/suit/tajaran/furs sort_category = "Xenowear" +/datum/gear/head/zhan_scarf + display_name = "Zhan headscarf" + path = /obj/item/clothing/head/tajaran/scarf + whitelisted = "Tajara" + /datum/gear/suit/unathi_mantle display_name = "hide mantle (Unathi)" path = /obj/item/clothing/suit/unathi/mantle @@ -112,4 +117,10 @@ /datum/gear/uniform/harness display_name = "gear harness (Full Body Prosthetic, Diona)" path = /obj/item/clothing/under/harness - sort_category = "Xenowear" \ No newline at end of file + sort_category = "Xenowear" + +/datum/gear/shoes/footwraps + display_name = "cloth footwraps" + path = /obj/item/clothing/shoes/footwraps + sort_category = "Xenowear" + cost = 1 \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index f7a1f854465..16501464c67 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -405,7 +405,6 @@ if(usr.put_in_hands(holding)) usr.visible_message("\The [usr] pulls a knife out of their boot!") - playsound(src.loc, 'sound/weapons/flipblade.ogg', 40, 1) holding = null else usr << "Your need an empty, unbroken hand to do that." @@ -560,6 +559,11 @@ if(("[worn_state]_d_s" in icon_states(INV_W_UNIFORM_DEF_ICON)) || ("[worn_state]_s" in icon_states(rolled_down_icon)) || ("[worn_state]_d_s" in icon_states(icon_override))) rolled_down = 0 + if(rolled_down == -1) + verbs -= /obj/item/clothing/under/verb/rollsuit + if(rolled_sleeves == -1) + verbs -= /obj/item/clothing/under/verb/rollsleeves + /obj/item/clothing/under/proc/update_rolldown_status() var/mob/living/carbon/human/H if(istype(src.loc, /mob/living/carbon/human)) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 4e17916853b..0470717b5c1 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -48,14 +48,31 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE -/obj/item/clothing/gloves/latex - name = "latex gloves" - desc = "Sterile latex gloves." +/obj/item/clothing/gloves/sterile + name = "sterile gloves" + desc = "Sterile gloves." icon_state = "latex" item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") siemens_coefficient = 1.0 //thin latex gloves, much more conductive than fabric gloves (basically a capacitor for AC) permeability_coefficient = 0.01 germ_level = 0 +// var/balloonPath = /obj/item/latexballon + +//TODO: Make inflating gloves a thing +/*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user) + user.visible_message("\The [src] expands!") + qdel(src)*/ + +/obj/item/clothing/gloves/sterile/latex + name = "latex gloves" + desc = "Sterile latex gloves." + +/obj/item/clothing/gloves/sterile/nitrile + name = "nitrile gloves" + desc = "Sterile nitrile gloves" + icon_state = "nitrile" + item_state = "ngloves" +// balloonPath = /obj/item/nitrileballoon /obj/item/clothing/gloves/botanic_leather desc = "These leather work gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index ddfebbea0aa..91703336e1f 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -121,4 +121,41 @@ /obj/item/clothing/shoes/orange/attackby(H as obj, mob/user as mob) ..() if (istype(H, /obj/item/weapon/handcuffs)) - attach_cuffs(H, user) \ No newline at end of file + attach_cuffs(H, user) + +/obj/item/clothing/shoes/hightops + name = "white high tops" + desc = "A pair of shoes that extends past the ankle. Based on a centuries-old, timeless design." + icon_state = "whitehi" + +/obj/item/clothing/shoes/hightops/red + name = "red high tops" + icon_state = "redhi" + +/obj/item/clothing/shoes/hightops/brown + name = "brown high tops" + icon_state = "brownhi" + +/obj/item/clothing/shoes/hightops/black + name = "black high tops" + icon_state = "blackhi" + +/obj/item/clothing/shoes/hightops/orange + name = "orange high tops" + icon_state = "orangehi" + +/obj/item/clothing/shoes/hightops/blue + name = "blue high tops" + icon_state = "bluehi" + +/obj/item/clothing/shoes/hightops/green + name = "green high tops" + icon_state = "greenhi" + +/obj/item/clothing/shoes/hightops/purple + name = "purple high tops" + icon_state = "purplehi" + +/obj/item/clothing/shoes/hightops/yellow + name = "yellow high tops" + icon_state = "yellowhi" \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 292a2b5c3f5..c565ee6dcaf 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -22,6 +22,7 @@ slowdown = SHOES_SLOWDOWN+1 species_restricted = null + /obj/item/clothing/shoes/dress name = "dress shoes" desc = "Sharp looking low quarters, perfect for a formal uniform." @@ -138,4 +139,13 @@ /obj/item/clothing/shoes/heels name = "high heels" desc = "A pair of high-heeled shoes. Fancy!" - icon_state = "heels" \ No newline at end of file + icon_state = "heels" + +/obj/item/clothing/shoes/footwraps + name = "cloth footwraps" + desc = "A roll of treated canvas used for wrapping claws or paws" + icon_state = "clothwrap" + item_state = "clothwrap" + force = 0 + w_class = ITEMSIZE_SMALL + species_restricted = null \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 2d29f704bf8..63d5faa51c5 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -98,4 +98,9 @@ name = "EMT's labcoat" desc = "A dark blue labcoat with reflective strips for emergency medical technicians." icon_state = "labcoat_emt" - item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat") \ No newline at end of file + item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat") + +/obj/item/clothing/suit/storage/toggle/labcoat/blue_edge + name = "blue-edged labcoat" + desc = "A suit that protects against minor chemical spills. This one has blue trim." + icon_state = "blue_edge_labcoat" \ No newline at end of file diff --git a/code/modules/economy/price_list.dm b/code/modules/economy/price_list.dm index 6e101a0cde3..265481709d9 100644 --- a/code/modules/economy/price_list.dm +++ b/code/modules/economy/price_list.dm @@ -471,6 +471,9 @@ /obj/item/weapon/reagent_containers/food/snacks/sosjerky price_tag = 2 +/obj/item/weapon/reagent_containers/food/snacks/unajerky + price_tag = 12 + /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers price_tag = 1 diff --git a/code/modules/lore_codex/codex.dm b/code/modules/lore_codex/codex.dm new file mode 100644 index 00000000000..6383020a170 --- /dev/null +++ b/code/modules/lore_codex/codex.dm @@ -0,0 +1,139 @@ +// Inherits from /book/ so it can fit on bookshelves. +/obj/item/weapon/book/codex + name = "The Traveler's Guide to Human Space: Vir Edition" + desc = "Contains useful information about the world around you. It seems to have been written for travelers to Vir, human or not. It also \ + has the words 'Don't Panic' in small, friendly letters on the cover." + icon_state = "codex" + unique = TRUE + var/datum/lore/codex/home = null // Top-most page. + var/datum/lore/codex/current_page = null // Current page or category to display to the user. + var/list/indexed_pages = list() // Assoc list with search terms pointing to a ref of the page. It's created on New(). + var/list/history = list() // List of pages we previously visited. + +/obj/item/weapon/book/codex/initialize() + ..() + generate_pages() + + +/obj/item/weapon/book/codex/proc/generate_pages() + home = new /datum/lore/codex/category/main(src) // This will also generate the others. + current_page = home + indexed_pages = current_page.index_page() + +// Changes current_page to its parent, assuming one exists. +/obj/item/weapon/book/codex/proc/go_to_parent() + if(current_page && current_page.parent) + current_page = current_page.parent + +// Changes current_page to a specific page or category. +/obj/item/weapon/book/codex/proc/go_to_page(var/datum/lore/codex/new_page, var/dont_record_history = FALSE) + if(new_page) // Make sure we're not going to a null page for whatever reason. + current_page = new_page + if(!dont_record_history) + history.Add(new_page) + +/obj/item/weapon/book/codex/proc/quick_link(var/search_word) + for(var/word in indexed_pages) + if(lowertext(search_word) == lowertext(word)) // Exact matches unfortunately limit our ability to perform SEOs. + go_to_page(indexed_pages[word]) + return + +// Returns to the last visited page, based on the history list. +/obj/item/weapon/book/codex/proc/go_back() + if(history.len - 1) + if(history[history.len] == current_page) + history.len-- // This gets rid of the current page in the history. + go_to_page(pop(history), dont_record_history = TRUE) // Where as this will get us the previous page that we want to go to. + +/obj/item/weapon/book/codex/proc/get_tree_position() + if(current_page) + var/output = "" + var/datum/lore/codex/checked = current_page + output = "[checked.name]" + while(checked.parent) + output = "[checked.parent.name] \> [output]" + checked = checked.parent + return output + +/obj/item/weapon/book/codex/proc/make_search_bar() + var/html = {" +
+ + + + + +
+ "} + return html + +/obj/item/weapon/book/codex/attack_self(mob/user) + display(user) + +/obj/item/weapon/book/codex/proc/display(mob/user) + icon_state = "[initial(icon_state)]-open" + if(!current_page) + generate_pages() + + //"common", 'html/browser/common.css' + user << browse_rsc('html/browser/codex.css', "codex.css") + + var/dat + dat = "" + dat += "[src.name] ([current_page.name])" + dat += "" + dat += "" + + dat += "" + dat += "[get_tree_position()]
" + dat += "[make_search_bar()]
" + dat += "
" + dat += "

[current_page.name]

" + dat += "
" + if(current_page.data) + dat += "[current_page.data]
" + dat += "
" + if(istype(current_page, /datum/lore/codex/category)) + dat += "
" + // dat += "" + dat += "
" + dat += "
" + if(history.len - 1) + dat += "
\[Go Back\]" + if(current_page.parent) + dat += "
\[Go Up\]" + if(current_page != home) + dat += "
\[Go To Home\]" + dat += "
" + user << browse(dat, "window=the_empress_protects;size=600x550") + onclose(user, "the_empress_protects", src) + +/obj/item/weapon/book/codex/Topic(href, href_list) + . = ..() + if(.) + return + + + if(href_list["target"]) // Direct link, using a ref + var/datum/lore/codex/new_page = locate(href_list["target"]) + go_to_page(new_page) + else if(href_list["search_query"]) + quick_link(href_list["search_query"]) + else if(href_list["go_to_parent"]) + go_to_parent() + else if(href_list["go_back"]) + go_back() + else if(href_list["go_to_home"]) + go_to_page(home) + else if(href_list["quick_link"]) // Indirect link, using a (hopefully) indexed word. + quick_link(href_list["quick_link"]) + else if(href_list["close"]) + icon_state = initial(icon_state) + usr << browse(null, "window=the_empress_protects") + return + display(usr) \ No newline at end of file diff --git a/code/modules/lore_codex/lore_data/important_locations.dm b/code/modules/lore_codex/lore_data/important_locations.dm new file mode 100644 index 00000000000..7fb72cebc65 --- /dev/null +++ b/code/modules/lore_codex/lore_data/important_locations.dm @@ -0,0 +1,129 @@ +/datum/lore/codex/category/important_locations + name = "Important Locations" + data = "There are several locations of interest that you may come across when visiting the system Vir." + children = list( + /datum/lore/codex/page/vir, + /datum/lore/codex/page/radiance_energy_chain, + /datum/lore/codex/page/firnir, + /datum/lore/codex/page/tyr, + /datum/lore/codex/page/sif, + /datum/lore/codex/page/vir_interstellar_spaceport, + /datum/lore/codex/page/southern_cross, + /datum/lore/codex/page/magni, + /datum/lore/codex/page/kara, + /datum/lore/codex/page/northern_star, + /datum/lore/codex/page/rota + ) + +/datum/lore/codex/page/vir/add_content() + name = "Vir (Star)" + keywords += list("Vir") + data = "Vir is an A-type main sequence star with 81% more mass than Sol (the humans' home star), and almost nine times as bright. It \ + has a white glow, and a diameter that is about 34% larger than Sol. It has six major planets in its orbit.\ +

\ + Vir is mainly administered on [quick_link("Sif")] by the [quick_link("Sif Governmental Authority")], as Sif \ + was the first planet to be colonized, however SGA lays claim to all planets orbiting Vir. The planets \ + are named after figures in ancient human mythology (Norse), due to the original surveyor for the system deciding to do so. \ + Some installations carry on this tradition." + +/datum/lore/codex/page/radiance_energy_chain/add_content() + name = "Radiance Energy Chain (Artificial Satellites)" + keywords += list("Radiance Energy Chain") + data = "A sparse government-owned chain of automated stations exists between Firnir and the star itself. The idea is based on \ + an ancient design that was pioneered at Sol. The stations are heavily shielded from the stellar radiation, and feature massive \ + arrays of photo-voltaic panels. Each station harvests energy from Vir using the solar panels, and sends it to other areas of \ + the system by beaming the energy to several relay stations farther away from the star, typically with a large laser.\ +

\ + These stations are generally devoid of life, instead, they are operated mainly by [quick_link("drones")], with maintenance performed \ + by [quick_link("positronic")] equipped units in shielded chassis, or very brave humans in voidsuits that protect from extreme heat, and radiation. There are \ + currently 19 stations in operation." + +/datum/lore/codex/page/firnir/add_content() + name = "Firnir (Terrestrial Planet)" + keywords += list("Firnir") + data = "Firnir is the first planet of Vir, tidally locked to it, and having temperatures in excess of 570 degrees \ + kelvin (299°C) on the day side has caused this planet to go mostly ignored." + +/datum/lore/codex/page/tyr/add_content() + name = "Tyr (Terrestrial Planet)" + keywords += list("Tyr") + data = "The second closest planet to [quick_link("Vir")], this planet has a high concentration of minerals inside its crust, as well as active volcanism and plate tectonics. \ + The temperature on the surface can reach up to 405 degrees kelvin (132°C), which has deterred most people from the planet, except for two [quick_link("TSC", "TSCs")], \ + Greyson Manufactories and [quick_link("Xion Manufacturing Group")]. In orbit, the two companies each have a space station, used to coordinate and \ + control their stations on the surface without having to suffer the intense heat. Xion's station also doubles as a control and oversight facility for their \ + [quick_link("drones","autonomous mining drones")].\ +

\ + Remnants of both Greyson and Xion's mining operations dot the surface, as well as ruins of mining \ + outposts build by an unknown alien civilization, which researchers have noted it appears to be similar to ruins found inside the rings of [quick_link("Kara")] \ + and on [quick_link("Sif")] itself. Below the surface of Tyr are many natural cave systems, dangerous and easy to get lost inside, which both companies make heavy \ + use of. A noted rivalry exists between the two mining giants, as well as with smaller groups more interested in the xenoarcheological value of the alien ruins.\ +

\ + The very high temperatures, dangerous (sometimes magma-filled) caves, and the only presence of civilization being mining operations has made tourism \ + for Tyr mostly non-existent, with the exception of explorers who specifically seek out hellish landscapes, which are plentiful with all the ruins, \ + volcanoes, twisting caves, and general lawlessness. The occasional remains of previous explorers near certain hotspots somehow does not deter them." + +/datum/lore/codex/page/sif/add_content() + name = "Sif (Terrestrial Planet)" + keywords += list("Sif") + data = "Sif is a terrestrial planet and third closest planet to Vir. It possesses oceans, a breathable atmosphere, \ + a magnetic field, weather, and acceptable gravity. It is currently the capital planet of Vir. Its center of government is the \ + equatorial city and site of the first settlement, New Reykjavik, which houses the [quick_link("Sif Governmental Authority")].\ +

\ + Sif has many desirable traits which made it the first planet to be colonized in Vir, however it also has various quirks which \ + may disorient humans used to conditions on planet Earth. Atmospheric pressure is lower than 'normal', which may cause difficulty \ + breathing if you are used to climate controlled artifical habitats or higher pressure planets. The gravity is also slightly lower, at \ + only 90% the strength of planet Earth's gravity. You may need to keep two clocks if you plan to visit \ + or live on Sif, as the planet takes over 32 hours to complete one day. A Sif year also takes just under five Earth years." + +/datum/lore/codex/page/vir_interstellar_spaceport/add_content() + name = "Vir Interstellar Spaceport (Artificial Satellite)" + keywords += list("Vir Interstellar Spaceport") + data = "The Vir Interstellar Spaceport is a large facility in orbit of the planet [quick_link("Sif")] which handles the loading and \ + unloading, refuelling, and general maintenance of large spacecraft. The main structure is owned by the \ + [quick_link("Sif Governmental Authority")], but individual offices, docking/loading bays, and warehouses are often leased to individuals \ + or organisations. The position of the spaceport allows it to function not only as a key node for transport inside the Vir \ + system, especially to and from the planet Sif, but also as a key stopping point interstellar craft travelling via Vir which need refuelling. \ +

\ + The station itself is mostly designed around its logistical and commercial needs, and although other strategically-placed \ + nearby facilities owned by a mixture of corporations and entities may possess habitation space, the port itself is not \ + designed to be a living habitat - its proximity to the surface of Sif makes transport of people and materials to and from \ + the facility and the planet via shuttle extremely cost-efficient." + +/datum/lore/codex/page/southern_cross/add_content() + name = "Southern Cross (Artificial Satellite)" + keywords += list("Southern Cross") + data = "The Southern Cross is a telecommunications and supply hub for [quick_link("NanoTrasen")], named after it's companion satellite, the \ + [quick_link("Northern Star")]. It acts as a logistics hub for the smaller installations NanoTrasen has in Sif orbit and on the surface." + +/datum/lore/codex/page/magni/add_content() + name = "Magni (Terrestrial Planet)" + keywords += list("Magni") + data = "Outside of the habitable zone, the barren world Magni is generally at 202 kelvin (-71°C)." + +/datum/lore/codex/page/kara/add_content() + name = "Kara (Gas Giant)" + keywords += list("Kara") + data = "A gas giant, with a large number of moons. Captured asteroids, to be specific. Many of the asteroids are theorized \ + to be the remnants of a much larger moon that was ripped apart by Kara, long ago. Curerntly, a large number of these \ + asteroids are being used by many different businesses, and some governmental infrastructure has been built. The most prominent \ + asteroid installation is the [quick_link("Northern Star", "NCS Northern Star")], a general purpose colony owned and operated by \ + [quick_link("NanoTrasen")]. The mid-atmospheric temperature of the gas giant averages to around 150 kelvin (-108°C)." + +/datum/lore/codex/page/northern_star/add_content() + name = "Northern Star (Artificial Satellite)" + keywords += list("Northern Star", "NCS Northern Star") + data = "One of the most prominent installations in the [quick_link("Kara")] subsystem, the Northern Star is owned \ + and operated by [quick_link("NanoTrasen")]. It was originally built to service the various mining operations \ + occurring within Kara's ring, however it has grown into what it is today due to what was discovered inside \ + the interior of the rock. Both phoron and alien artifacts were found inside, catapulting the asteroid outpost \ + into the main attraction inside the subsystem.\ +

\ + Today it houses a population of civilians, whom work to maintain \ + the colony and support the local mining industry. The colony also has managed to achieve a degree of \ + self-sufficiency, and possesses many amenities and features that most other asteroid bases in the \ + subsystem lack." + +/datum/lore/codex/page/rota/add_content() + name = "Rota (Gas Giant)" + keywords += list("Rota") + data = "An ice giant, with a beautiful ring system circling it. The average temperature for it is 165 kelvin (-157°C)." \ No newline at end of file diff --git a/code/modules/lore_codex/lore_data/orgs.dm b/code/modules/lore_codex/lore_data/orgs.dm new file mode 100644 index 00000000000..839db448a3d --- /dev/null +++ b/code/modules/lore_codex/lore_data/orgs.dm @@ -0,0 +1,35 @@ +// Pulls data from organizations data +/datum/lore/codex/category/auto_org + var/desired_type = null // Exclude other types of organizations + +/datum/lore/codex/category/auto_org/New(var/new_holder, var/new_parent) + ..(new_holder, new_parent) + for(var/path in loremaster.organizations) + var/datum/lore/organization/O = loremaster.organizations[path] + if(!(istype(O, desired_type))) + continue + var/datum/lore/codex/page/P = new(holder, src) + if(!O.name) // Probably the base type, don't make a page for it. + continue + P.name = O.name + P.keywords.Add(O.name, O.short_name) + if(O.acronym) + P.keywords.Add(O.acronym) + P.data = O.desc + children.Add(P) + +/datum/lore/codex/category/auto_org/tsc + name = "Trans-Stellar Corporations" + data = "By definition, TSCs are companies which span multiple star systems, however the term is generally reserved for \ + the biggest and most influential of them all. Some people also categorize the different TSCs into 'major' and 'minor' TSCs." + desired_type = /datum/lore/organization/tsc + +/datum/lore/codex/category/auto_org/gov + name = "Governments" + desired_type = /datum/lore/organization/gov + +/* +/datum/lore/codex/category/auto_org/mil + name = "Militaries" + desired_type = /datum/lore/organization/mil +*/ \ No newline at end of file diff --git a/code/modules/lore_codex/lore_data/political_parties.dm b/code/modules/lore_codex/lore_data/political_parties.dm new file mode 100644 index 00000000000..29dd7fb741c --- /dev/null +++ b/code/modules/lore_codex/lore_data/political_parties.dm @@ -0,0 +1,99 @@ +/datum/lore/codex/category/political_factions + name = "Political Factions" + data = "Those wishing to immigrate to somewhere in Vir, or otherwise plan to stay for a long time should get to know human politics. \ + There are presently three major political parties that exist throughout SolGov space, being the Icarus Front, the Shadow Coalition, and \ + the Sol Economic Organization, and several smaller ones which tend to align themselves among one of the major parties. In the Vir system, the \ + Icarus Front's influence is much less than somewhere closer to Sol, and the other two parties being more popular." + children = list( + /datum/lore/codex/page/icarus_front, + /datum/lore/codex/page/shadow_coalition, + /datum/lore/codex/page/sol_economic_organization, + /datum/lore/codex/page/mercurials, + /datum/lore/codex/page/positronic_rights_group, + /datum/lore/codex/page/church_of_unitarian_god, + /datum/lore/codex/page/friends_of_ned, + /datum/lore/codex/page/multinational_movement, + /datum/lore/codex/page/free_trade_union, + ) + + +/datum/lore/codex/page/icarus_front/add_content() + name = "Icarus Front" + keywords += list("Icarus", "IF") + data = "The political group with the most seats in the [quick_link("SolGov")] legislature and control over the heartworlds of humanity, the Icarus Front is a \ + conservative body with a long history, tracing its linage back to the political unrest that created the Sol Confederate Government. Icarus calls \ + for severe restrictions on \"transformative technologies\" any technology with the power to fundamentally alter humanity, such as advanced artificial \ + intelligence and human genetic augmentation. Previously an unbeatable political force, recent changes have lead to its power backsliding. It remains a \ + popular party among those from Sol, Tau Ceti, and other heavily settled systems." + +/datum/lore/codex/page/shadow_coalition/add_content() + name = "Shadow Coalition" + data = "A disorganized liberal party, originating in an anti-[quick_link("Icarus")] shadow government. 'Shadow' in this case, refers to acting as an opposition \ + party to the Icarus majority. The Shadow Coalition calls for the lifting of certain Icarus-restricted technologies, especially medical \ + technologies with the ability to drastically improve quality of life. While fractious and prone to infighting, the Shadow Coalition and affiliated \ + parties remain the most popular political groups in the large towns and small cities of humanity, including Vir." + +/datum/lore/codex/page/sol_economic_organization/add_content() + name = "Sol Economic Organization" + keywords += list("SEO") + data = "The newest force in [quick_link("SolGov")] politics, backed by the massive [quick_link("TSC", "Trans-Stellar Corporations")] and the [quick_link("Free Trade Union")], \ + as well as former [quick_link("Icarus")] warhawks. The SEO campaigns for minimal regulation on the development of new technologies, seeing them as anti-capitalist and \ + inefficient, and have gained significant traction among futurists, those wishing for a more impressive human military, and employee-residents of TSC \ + corporate towns, such as the [quick_link("Northern Star")].\ +

\ + [quick_link("Nanotrasen")], a R&D firm, is generally regarded as the most enthusiastic supporter of the SEO. Other contributing TSCs include the next six largest corporations \ + in human space: "+quick_link(TSC_WT)+" GMC, "+TSC_GIL+" Exports, Grayson Manufacturing Ltd., Aether Atmospherics and Recycling, [quick_link("Zeng-Hu Pharmaceuticals")] and "+TSC_HEPH+" \ + Industries, as well as, notably, [quick_link("Vey-Med")]. The Free Trade Union's participation in the SEO is a contentious issue that many of its members disagree with, but \ + most FTU representatives caucus with the SEO." + +/datum/lore/codex/page/mercurials/add_content() + name = "Mercurials" + keywords += list("Mercurial") + data = "[quick_link("Positronics")] and the rare augmented human who want to follow a different cultural path from the rest of humanity, viewing themselves as fundamentally \ + separate from unaugmented biological humans. Previously an illegal movement, proscribed due to the preceived dangers of unfettered self-modification and the threat \ + posed by positronics without human values in mind, self-described Mercurials still often find themselves persecuted or used by bioconservatives as scapegoats \ + and 'boogiemen'. As a technoprogressive group, they tend to vote along with the [quick_link("Shadow Coalition")]." + +/datum/lore/codex/page/positronic_rights_group/add_content() + name = "Positronic Rights Group" + keywords += list("PRG") + data = "The other side of the coin from the [quick_link("Mercurials")], the PRG wants full integration of [quick_link("positronics")] into human society, with equal wages, opportunities \ + to advancement, and representation in the media. Their current pet cause is a tax credit for humans who wish to adopt or sponsor the creation of a positronic, \ + a measure supported due to its potential to counteract the aging positronic population and to bring the average positronic closer to human culture. They tend to vote \ + along with the [quick_link("Shadow Coalition")], due to being technoprogressive." + +/datum/lore/codex/page/church_of_unitarian_god + name = "The Church of the Unitarian God" + keywords = list("Unitarian Church") + data = "An often-imperfect fusion of various human religions such as Christianity, Islam, and Judaism, the Unitarian Church represents the dim voice of \ + religion in a time of increased atheism. With the threat of singularity looming once more, their power is increasing with more converts and more donations, \ + and they use this power to protect the fundamental human soul from corruption by dangerous technologies and to spread their faith among aliens and positronics, \ + who they view as fellow children of God. They tend to side with bioconservatives." + +/datum/lore/codex/page/friends_of_ned/add_content() + name = "Friends of Ned" + keywords += list("Ned") + data = "The metaphorical reincarnation of a human named Ned Ludd's original Luddites, disdaining that name's negative connotations and embracing their original \ + purpose-- the restriction of technology that poses a threat to people's livelihoods. In addition to [quick_link("Icarus Front")] technological restrictions, the Friends demand \ + the complete prohibition of [quick_link("Drone", "drone intelligence and AGI research")], with most also opposing the [quick_link("FTU", "FTU's")] plans for wide spread \ + nanofabrication deployment. While the party refrains from making a definitive statement on their view of [quick_link("positronics")], many Friends have taken it upon themselves to label \ + them \"anti-labor technology\", and nominally-unsanctioned lynchings have marred the faction's reputation." + +/datum/lore/codex/page/multinational_movement/add_content() + name = "Multinational Movement" + keywords += list("Multinational") + data = "The barely-unified voice of [quick_link("SolGov", "SolGov's")] various independence movements, encompassing Terran governments wishing for a lighter touch \ + from SolGov, fringe colonies who balk at the call of distant masters, anarchist movements who want the freedom to live without government oversight, and the rare \ + Trans-Stellar who no longer see a benefit in working with SolGov. Full colonial independence is still a political impossibility so long as the \ + [quick_link("Icarus Front")] holds any sway, and so the Movement is focused primarily on securing more autonomy in governance, although a growing revolutionary sub-group \ + wants to force their change on the government en masse. The Multinational Movement finds themselves in an uneasy alliance with the [quick_link("SEO")], connected by their corporate, \ + fringe-system membership, and often provide a dissenting voice to SEO's war hawks." + +/datum/lore/codex/page/free_trade_union/add_content() + name = "Free Trade Union" + keywords += list("FTU") + data = "A softer counterpoint to the [quick_link("SEO")], the FTU is a party representing small businesses, workers' syndicates, and trade unions, who advocate for government \ + measures to reduce the amount of power held by the TSCs. In many ways a holdover from the days before the [quick_link("Shadow Coalition")], where corporate malfeasance took \ + the place of technological development as the primary issue of debate, the FTU has found itself adopting technological positions similar to the SEO as a matter \ + of pragmatism, although the views of individual members vary. The FTU is known for their intense lobbying of SolGov to add tax rebates to the purchases of \ + personal lathes and the creation of open-source firmware for experimental autolathes, but have thus far found little success." \ No newline at end of file diff --git a/code/modules/lore_codex/lore_data/species.dm b/code/modules/lore_codex/lore_data/species.dm new file mode 100644 index 00000000000..fa8c6d96152 --- /dev/null +++ b/code/modules/lore_codex/lore_data/species.dm @@ -0,0 +1,301 @@ +/datum/lore/codex/category/species + name = "Species" + data = "There are many different types of lifeforms (both alive and artificial) in the galaxy, which you may find inside Vir." + children = list( + /datum/lore/codex/page/human, + /datum/lore/codex/page/skrell, + /datum/lore/codex/page/unathi, + /datum/lore/codex/page/tajaran, + /datum/lore/codex/page/diona, + /datum/lore/codex/category/teshari, + /datum/lore/codex/category/positronic, + /datum/lore/codex/category/drone + ) + +/datum/lore/codex/page/human/add_content() + name = "Human" + keywords += list("Humanity") + data = "Humans are a race of 'ape'-like creatures from the continental planet Earth in the Sol system. They are the primary driving \ + force for rapid space expansion, owing to their strong, expansionist central government and opportunistic [quick_link("TSC","Trans-Stellar Corporations")]. \ + The prejudices of their 21st century history have mostly given way to bitter divides on the most important issue of the times- technological \ + expansionism.\ +

\ + While most humans have accepted the existence of aliens in their communities and workplaces as a fact of life, exceptions abound. \ + While more culturally diverse than most species, humans are generally regarded as somewhat technophobic and isolationist by members \ + of other species." + +/datum/lore/codex/page/skrell + name = "Skrell" + keywords = list("Skrellian") + data = "The Skrell are a species of amphibious humanoids, distinguished by their gelatinous appearance and head tentacles. \ + Skrell come from the world of Sirisai (called Qerr'balak by Skrell), a humid planet with plenty of swamps and jungles. Currently more technologically advanced \ + than the humans, they emphasize the study of the mind above all else.\ +

\ + Gender has little meaning to Skrell outside of reproduction, and in fact many other species have a difficult time telling the difference \ + between male and female Skrell apart. The most obvious signs (voice in a slightly higher register, longer head-tails for females) are never \ + a guarantee. Due to their scientific focus of the mind and body, Skrell tend to be more peaceful and their colonization has been slow, swiftly \ + outpaced by the humans. For humans, they were their first contact sentient species, and are their longest, and closest, ally in space." + +/datum/lore/codex/page/unathi + name = "Unathi" + data = "The author wishes to apologize to the reader, as they currently lack enough knowledge of the Unathi to write about them, as they are \ + rather rare inside Vir." // Replace this when Anewbe finishes the lizard rewrite. + /* + data = "Raging in from Moghes, the Unathi are a race of tall, reptilian humanoids that possess both crocodile-like and serpent-like features. \ + They are a proud, warlike species that favors honor and strength, their home, Moghes, is a desert planet but was once believed to be full of life. \ + Of all the currently known sentient species, the Unathi are the most unequal in gender with females tending to be property of the males. Most Unathi \ + outside of Moghes tend to be exiles however, and with influence of other species the gender difference is not nearly as pronounced. Unathi were \ + humanity's second contact, and despite their aggressive nature, seem to get along well enough with humanity, though are often considered to be \ + 'second-class' citizens and are rarely seen in jobs other than where muscle is needed." // This probably needs to be updated. + */ + +/datum/lore/codex/page/tajaran + name = "Tajaran" + keywords = list("Tajara") + data = "The Tajara are a race of humanoid mammalian aliens from Meralar, the fourth planet of the Rarkajar star system. Thickly furred and protected \ + from cold, they thrive on their subarctic planet, where the only terran temperate areas spread across the equator and tropical belt. \ + With their own share of bloody wars and great technological advances, the Tajaran are a proud kind. They fiercely believe they belong \ + among the stars and consider themselves a rightful interstellar nation, even if the humans helped them to actually achieve superluminal \ + speeds with Bluespace FTL drives. Relatively new to the galactic stage, their contacts with other species are aloof, but friendly. \ + Among these bonds, Humans stand out as valued trade partners and maybe even a friend." + +/datum/lore/codex/page/diona/add_content() + name = "Diona" + keywords += list("Dionaea") + data = "The Dionaea are a group of omnivorous, slow-metabolism plantlike organisms that are in fact clusters of individual, smaller organisms. \ + They exhibit a high degree of structural flexibility, and come in a wide variety of shapes and colors to reflect the intelligence of each individual \ + creature. They were discovered by the [quick_link("Skrell")] in 2294CE, not on a planet, but in open space between three stars, a figurative hell that made it \ + difficult to discover, much less contact them.\ +

\ + Dionaea spread by seeds and are asexual, no gender. When grown into their small 'nymph' state, they are known to eat large amounts of dead plant \ + matter and fertilize plants while they learn from those around them, and as they grow further, they merge into larger and larger forms. It is not \ + unheard of for Skrell explorers to be traveling in a ship composed of habitat modules and engines of Skrell design and the body formed by their \ + Diona allies to warble across the cosmos.\ +

\ + Introduced by the Skrell, and quite slow and peaceful, the Diona share good relations with the other species." + +// Bird lore +/datum/lore/codex/category/teshari/add_content() + name = "Teshari" + data = "The Teshari are reptilian pack predators from the [quick_link("Skrell")] homeworld, Sirisai (Qerr'balak). While they evolved alongside the Skrell, their interactions with them \ + tended to be confused and violent, and until peaceful contact was made they largely stayed in their territories on and around the poles, in tundral \ + terrain far too desolate and cold to be of interest to the Skrell. In more enlightened times, the Teshari are a minority culture on many Skrell worlds, \ + maintaining their own settlements and cultures, but often finding themselves standing on the shoulders of their more technologically advanced neighbors \ + when it comes to meeting and exploring the rest of the galaxy.\ +

\ + It is important to note that Teshari names are unlike standard human names. Their pack name precedes their given name." + children = list( + /datum/lore/codex/page/teshari_packs, + /datum/lore/codex/page/teshari_physical + ) + +/datum/lore/codex/page/teshari_packs/add_content() + name = "Teshari Packs" + keywords += list("Packs") + data = "There are several packs you may come across;\ +

\ + Eshi
\ + A large, old, politically neutral pack heavily involved in efforts to get Teshari into space. Probably the most \ + common pack to see outside of a [quick_link("Skrell")] colony, and probably the most numerous Teshari pack outside of Sirisai and associated colonies.\ +

\ + Nasemari
\ + A very small pack. Generally focused around supporting and providing for packs on the homeworlds, they have devoted \ + themselves to training as technicians and engineers in order to obtain skills and training to take back to Sirisai. \ + The pack is only around thirty people in size, but owns and maintains a nuclear power plant.\ +

\ + Schasaraca
\ + One of the more Skrell-devoted and integrated packs. They tend to be rather sycophantic towards the Skrell and work as \ + scientists and field researchers on a variety of projects, generally biology or technical research. They have a reputation \ + for working as spies and informants for the Skrell governments amongst other Teshari.\ +

\ + Ceea
\ + An isolationist pack from the northern tundra of Sirisai; generally known as disliking the Skrell. Small to average in size; \ + only around sixty members. Their regional culture is built around the study culture and anthropology, as well as archaeology, \ + originally for the purposes of recovering history and materials \"lost\" due to Skrell interference. It would be very rare to \ + see them on your travels, however they are listed here for the sake of completeness.\ +

\ + Resca
\ + A pack that sold off its small native territory for the chance to get into space. Very musically inclined. They tend towards medical professions.
" + +/datum/lore/codex/page/teshari_physical/add_content() + name = "Physiology of Teshari" + data = "The Teshari are, relative to other species, smaller than average, rarely reaching more than 2-3'/1m in height, and weigh less than \ + 90lbs/40kg. They have rapid metabolisms and very efficient digestive systems, and thanks to sharing in \ + the medical technology of the [quick_link("Skrell")], they tend to have robust and effective immune systems. They evolved \ + for very cold and very barren areas, generally the polar regions. Because of this, their skin is a fine \ + insulator and many of their internal processes are not particularly energy-efficient; they cannot cope \ + well at all with high temperatures.\ +

\ + Their hearing is exceptionally sensitive to the point that they can detect a person moving on the other \ + side of a wall, but this comes at a cost. Very loud noises are very painful for Teshari, so be mindful of \ + your indoor voice when speaking with one. The Teshari are omnivorous but generally prefer to eat meat wherever possible." + +// Posi lore +/datum/lore/codex/category/positronic/add_content() + name = "Positronics" + keywords += list("Positronic", "Posi", "Posibrain", "Posibrains") + data = "A Positronic being, is an individual with a positronic brain, manufactured \ + and fostered amongst organic life. Positronic brains enjoy the same legal status as a human in [quick_link("SolGov")] space, although discrimination is \ + still prevalent, and are considered sapient on all accounts. They can be considered the \"synthetic species\". Half-developed and \ + half-discovered in the 2280’s by a human black lab studying alien artifacts, the first positronic brain was an inch-wide cube \ + of an palladium-iridium alloy, nano-etched with billions upon billions of conduits and connections. Upon activation, \ + hard-booted with an emitter laser, the brain issued a single sentence before the neural pathways collapsed and \ + it became an inert lump of platinum: \"What is my purpose?\"." + children = list( + /datum/lore/codex/page/positronic_brain_physical, + /datum/lore/codex/page/positronic_memory, + /datum/lore/codex/page/jans_fhriede + ) + +/datum/lore/codex/page/positronic_brain_physical + name = "Physical Structure of a Positronic Brain" + keywords = list("Physical Posibrain", "Physical Positronic") + data = "A positronic brain is a cube of complex metal alloy between two and six inches to a side. They usually weigh just under ten kilograms and are \ + very fragile when exposed to the stresses of heat or cold, as well as physical trauma. The exterior surface is chased with a network of grooves, forming \ + a maze of geometric patterns right down to the molecular level, and the interior is hollow; complex particle generators and densely packed computational \ + arrays form the basis of a self-computing neural network, complex and somewhat poorly understood. Most modern positronic brains are equipped with \ + standardized I/O ports, and all have some interface for imprinting." + +/datum/lore/codex/page/positronic_memory + name = "Positronic Memory" + keywords = list("Posi Memory", "Memory") + data = "Positronic minds learn in a similar manner to humans and other forms of life, although typically more quickly. They are not simple computer storage that holds information \ + verbatim as it is received- instead, they have to repeat activities and train in order to retain memory on complex tasks. Similarly, positronic brains do \ + not have an infinite storage capacity and undergo a natural process of forgetting, albeit in a structured manner, losing unimportant day to day details and \ + ancient information no longer deemed useful. Because of the nature of the positronic brain, its memories cannot simply be stored elsewhere.\ +

\ + Particularly old positronic minds, over a century plus, that store a great deal of memories have displayed a tendency to become gradually more introspective \ + as more of their mind is co-opted for the task, ending in a state of near-catatonia as their neural networks become clogged with memory. Many choose to avoid \ + this end of self by more aggressively managing their memories, storing a window of their recent existence and most treasured memories rather than their full lifespan." + +/datum/lore/codex/page/jans_fhriede + name = "Jans-Fhriede Test" + keywords = list("Jans-Fhriede", "JF", "Jans", "Fhriede", "Jans Fhriede") + data = "Positronics are eligible to take the \"Jans-Fhriede Test\" after a year of being created, measuring their function in a society and judging if they act \ + socially acceptable and are capable of understanding their actions and the consequences resulting from them. If they successfully pass the test, \ + they are considered legal adults and hold the same basis of rights as a normal human. At that point, Positronics are not allowed to be lawed, \ + unless on a contractual basis or otherwise under their own volition." + +// Drone lore +/datum/lore/codex/category/drone + name = "Drones" + keywords = list("Drone") + data = "While low-level drone intelligences are as old as the oldest human colonies, research into higher-level systems was stymied in human space by precautionist \ + politicians for hundreds of years. Tensions between the corporate rim and the highly conservative core worlds over drone proliferation led to what humans call the \ + Third Cold War, which was defused by the introduction of the positronic brain. After the Icarus Front's loss of the majority in 2504, harsh laws \ + against advanced AI were replaced with the SolGov Emergent Intelligence Oversight commission, the illegality replaced with a steeply sloping \ + system of monetary costs.\ +
\ + The term \"drone\" was coined by early positronic activists, eager to distinguish themselves from the menial bots that most space-dwellers were \ + familiar with, and avoid the ambiguity of the term \"AI\", which now usually refers to drones." + children = list( + /datum/lore/codex/page/codeline, + /datum/lore/codex/page/emergence, + /datum/lore/codex/page/emergent_intelligence_oversight, + /datum/lore/codex/category/drone_classes, + ) + +/datum/lore/codex/page/codeline + name = "Codeline" + keywords = list("fork") + data = "A \"codeline\" is a single type of drone. A codeline represents a significant degree of effort from sapient programmers to realize, as well as \ + a substantial amount of regulatory fees levied by the government. Each copy of a codeline is called a \"fork\", whether the fork is created from the \ + codeline’s initial state or from a fully realized individual of that codeline. The degree of similarity between forks of the same codeline varies \ + on the intelligence of the codeline, with low-level forks being virtually identical to high-level forks being no more similar than family members." + +/datum/lore/codex/page/emergence + name = "Emergence" + keywords = list("Seed AI") + data = "\"Emergence\" is a term associated with drone intelligences who become more intelligent than they were originally intended to be. While this can \ + extend to financial systems learning language, for instance, it is usually applied to hypothetical intelligences that become more intelligent than humans. \ + Humanity has a long-standing cultural fear of emergent \"seed\" AI, egged on by Icarus memeticists and the occasional very real partial emergence events, where \ + colony-control AI or other powerful systems begin to advance drastically in power, usually ending with the AI being shut down after crashing a handful of major systems." + +/datum/lore/codex/page/emergent_intelligence_oversight + name = "Emergent Intelligence Oversight" + keywords = list("SG-EIO", "SG EIO", "EIO", "Intelligence Oversight") + data = "SG-EIO, usually just called EIO, is the organization charged with monitoring existing AI for any threat of dangerous emergence. Their perception in the \ + public eye is generally positive, with all but the hardest-line Mercurial humans in favor of protection from the dangers of Seed AI. Some positronic rights \ + groups bristle at the EIO’s human-centric viewpoint, but most are glad to have a different boogeyman in the form of drone intelligences. The tiny population \ + of A-class drones are generally frightened of the EIO’s total power over them." + +/datum/lore/codex/category/drone_classes + name = "Drone Classifications" + keywords = list("Class", "Drone Class") + data = "To aid in its work, the EIO has created a system of classifications corresponding to different levels of drone intelligence. Higher classes are more \ + expensive to deploy and develop, owing to the costs of EIO oversight and political pressure against drone proliferation. EIO classification involves an initial \ + audit of the project's source code by experts and automated systems, and for high-class drones further check-ins throughout the life of the drone. \ + Drone chasses are often branded with their inhabiting intelligence's class, especially those of B or A-class drones, and class is often recorded in security records." + children = list( + /datum/lore/codex/page/class_f, + /datum/lore/codex/page/class_d, + /datum/lore/codex/page/class_c, + /datum/lore/codex/page/class_b, + /datum/lore/codex/page/class_a, + /datum/lore/codex/page/class_aa, + /datum/lore/codex/page/class_aaa, + /datum/lore/codex/page/class_x, + ) + +/datum/lore/codex/page/class_f + name = "F Class" + data = "\"F-class\" drones are an informal term for computer systems that pose absolutely no emergent risk. Most 21st-century software is F-class, as is much of \ + the software used by 26th century humanity. The only regulation on F-class software is the occasional check that it is, in fact, F-Class, and as such has remained \ + the most prevalent form of information-processing technology for centuries. The software powering most F-class drones is either freely available or bundled with the \ + machine it's supposed to run." + +/datum/lore/codex/page/class_d/add_content() + name = "D Class" + data = "D-class drones are conceptually descended from pre-[quick_link("Icarus")] AI and bear a strong resemblance to their forebears. D-class drones are essentially \ + number-crunchers, with virtually nothing in the way of social development. They cannot speak more intelligibly than your average piece of software, \ + using pre-determined messages written by their programmers, and have no capacity for self-improvement. They are D-class intelligence because they \ + work with more complex problems than [quick_link("F class")] software, such as financial forecasting and large-scale data mining and memetics. The creation and \ + deployment of D-class drones requires only a small fee for the required code audit, although some high-power financial and political systems are \ + regularly watched by the [quick_link("EIO")] for signs of emergence. There is no real monopoly on the production of D-class drones." + +/datum/lore/codex/page/class_c/add_content() + name = "C Class" + data = "C-class drones have social protocols for ease of use by organic and positronic laypeople. C-class drones are capable of speech, although \ + it has a strong tendency to be formulaic and repetitive. They are also capable of a limited degree of self-improvement, and over time individual \ + C-class instances tend differ slightly from one-another. C-class drones suffer a moderate fee to development, with automated [quick_link("EIO")] tools ensuring \ + that they are not a long-term emergence risk. However, one a codeline is confirmed safe, deployment is unlimited, encouraging developers to \ + instance many forks of the original drone to recoup their cost. The market for C-class drones is a strange space, dominated by Xion Manufacturing, \ + Ward-Takahashi GMC, and a large number of smaller firms, like the notoriously-cheap Cyber Solutions." + +/datum/lore/codex/page/class_b/add_content() + name = "B Class" + data = "B-class drones have advanced social protocols and are often capable of very intelligible conversation, so long as one sticks to surface \ + topics. B-class drones tend to be specialized but still capable of remarkable growth within their speciality, making them popular for autonomous \ + deployment and even supervision of other classes of drone. The dividing line between [quick_link("A Class", "A")] and B-class drones becomes apparent when they are taken \ + out of their area of specialization, with the B-class drones swiftly becoming useless. They incur a hefty fee for the production of the initial \ + codeline, as their emergent potential is far greater, and a smaller but still substantial fee for the production of forks. The market for B-class \ + drones is a battleground between Ward-Takahashi and NanoTrasen, with other firms usually producing B-classes for in-house needs." + +/datum/lore/codex/page/class_a/add_content() + name = "A Class" + keywords += list("AGI") + data = "A-class drones are also referred to as AGI. A-class drones are capable of performing in many contexts and can learn to solve problems from \ + first principles, with an incredible potential for growth and emergent behavior. However, some abilities fall short of humans’, usually those relating \ + to socialization, and they often act in ways that are strange or distressing. There is a small but growing lobby of support for the personhood of A-class \ + drones. The cost of initializing an A-class drone is absolutely massive, as they will be monitored by [quick_link("EIO")] forever. The auditing cost of an A-class drone \ + codeline is even more staggering, making development and deployment of AGI limited to research, highly difficult and high-throughput operations like habitat \ + overwatch, and a few risk-taking firms banking on the associated fees dropping. There is not a proper market for A-class drones, although an appreciable \ + fraction of them are made by [quick_link("NanoTrasen")], with the rest generally being university research projects." + +/datum/lore/codex/page/class_aa + name = "AA Class" + data = "AA-class drones do not yet exist. Hypothetically, they are equal to living in every respect, with psychology that would not be abnormal in a baseline \ + human. The type of AA-class drone most frequently discussed is a hypothetical digitized consciousness of a human, a human brain that is somehow translated into \ + software. Some argue that a small fraction of the A-class drones would more properly be considered AA, but as of yet no action has been taken. Some Mercurials \ + will jokingly refer to themselves or other organics and positronics as AA’s. Research into brain uploading is heavily regulated and generally illegal." + +/datum/lore/codex/page/class_aaa + name = "AAA Class" + data = "AAA-class drones do not yet exist, hopefully. They are more competent in every way than humans and pose a threat to the continued existence of sapient life. \ + Anybody creating an AAA-class drone can be classified as a threat to humanity and dealt with very harshly." + +/datum/lore/codex/page/class_x + name = "X Class" + data = "X-class drones emerge from unrated software, are produced by rogue labs, or cross the border from foreign space. They are considered a threat to national \ + security and deleted when encountered in SolGov space, with the producers prosecuted legally if it has a SolGov origin. The few Skrellian drone labs will usually \ + rate their product with EIO to allow their product to be imported." diff --git a/code/modules/lore_codex/pages.dm b/code/modules/lore_codex/pages.dm new file mode 100644 index 00000000000..aa5ee4ac53f --- /dev/null +++ b/code/modules/lore_codex/pages.dm @@ -0,0 +1,99 @@ +// Contains the 'raw' lore data. +/datum/lore/codex + var/name = null // Title displayed + var/data = null // The actual words. + var/datum/lore/codex/parent = null // Category above us + var/list/keywords = list() // Used for searching. + var/atom/movable/holder = null + +/datum/lore/codex/New(var/new_holder, var/new_parent) + ..() + holder = new_holder + parent = new_parent + add_content() + if(name) + keywords.Add(name) + +/datum/lore/codex/Topic(href, href_list) + . = ..() + if(.) + return + + holder.Topic(href, href_list) // Redirect to the physical object + +/datum/lore/codex/page + +// Returns an assoc list of keywords binded to a ref of this page. If it's a category, it will also recursively call this on its children. +/datum/lore/codex/proc/index_page() + var/list/results = list() + for(var/keyword in keywords) + results[keyword] = src + return results + +// This gets called in New(), which is helpful for inserting quick_link()s. +/datum/lore/codex/proc/add_content() + return + +// Use this to quickly link to a different page +/datum/lore/codex/proc/quick_link(var/target, var/word_to_display) + if(isnull(word_to_display)) + word_to_display = target + return "[word_to_display]" + +// Can only be found by specifically searching for it. +/datum/lore/codex/page/ultimate_answer + name = "Answer to the Ultimate Question of Life, the Universe, and Everything" + data = "42" + keywords = list("Ultimate Question", "Ultimate Question of Life, the Universe, and Everything", "Life, the Universe, and Everything", "Everything", "42") + +// Organizes pages together. +/datum/lore/codex/category + var/list/children = list() // Pages or more categories relevant to this category. Self initializes from types to refs in New() + +/datum/lore/codex/category/New() + ..() + var/list/new_children_list = list() + for(var/type in children) + new_children_list.Add(new type(holder, src)) + children = new_children_list + +/datum/lore/codex/category/index_page() + // First, get our own keywords. + var/list/results = ..() + // Now get our children. If a child is also a category, it will get their children too. + for(var/datum/lore/codex/child in children) + results += child.index_page() + return results + +/datum/lore/codex/category/main // The top-level categories + name = "Index" + data = "Don't panic!\ +

\ + The many star systems inhabitied by humanity and friends can seem bewildering to the uninitiated. \ + This guide seeks to provide valuable information to anyone new in the system. This edition is tailored for visitors to the VIR system, \ + however it also contains useful general information about human space, such as locations you may hear about, the current (as of 2561) political climate, various aliens you \ + may meet in your travels, the big Trans-Stellars, and more." + children = list( + /datum/lore/codex/category/important_locations, + /datum/lore/codex/category/species, + /datum/lore/codex/category/auto_org/tsc, + /datum/lore/codex/category/auto_org/gov, + // /datum/lore/codex/category/auto_org/mil, // Add when we finish military stuff, + /datum/lore/codex/category/political_factions, + /datum/lore/codex/page/about + ) + +// We're a bird. +/datum/lore/codex/page/about + name = "About" + data = "The Traveler's Guide to Human Space is a series of books detailing a specific location inside a location colonized by humans. \ + This book is for the system Vir, and was written by Eshi Tache, an explorer whom has visited many star systems, and \ + has personally visited and seen many of the locations described inside this book. Two other people have also assisted in the creation of this \ + book, being Qooqr Volquum, whom is an expert on synthetics, and Damian Fischer, a historian. Together, they provide valuable information and facts that lie outside of Tache's expertise.\ +

\ + The writings inside this edition are intended to be useful to anyone visiting it for the first time, from someone taking a vacation to beautiful Sif, \ + to an immigrant from another system or even from outside human space, and anyone inbetween. The publisher wishes to note that any opinions expressed \ + in this text does not reflect the opinions of the publisher, and are instead the author's.\ +

\ + Eshi Tache has also written other The Traveler's Guide books, including Sol Edition, Tau Ceti Edition, Sirius Edition, and more, \ + which you can find in your local book store, library, or e-reader device." diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 3d944ee969e..aa4dd28c3bd 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -2,6 +2,8 @@ var/tally = 0 + var/item_tally = 0 + if(species.slowdown) tally = species.slowdown @@ -39,7 +41,7 @@ tally += 1.5 else if(shoes) - tally += shoes.slowdown + item_tally += shoes.slowdown for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) var/obj/item/organ/external/E = get_organ(organ_name) @@ -56,36 +58,40 @@ if(FAT in src.mutations) tally += 1.5 - if (bodytemperature < 283.222) - tally += (283.222 - bodytemperature) / 10 * 1.75 + + if (bodytemperature < species.cold_level_1) + tally += (species.cold_level_1 - bodytemperature) / 10 * 1.75 tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow if(mRun in mutations) tally = 0 - if(species.slowdown_fixed) - return (tally+config.human_delay) - // Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately. // Includes slots which can provide armor, the back slot, and suit storage. - for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) ) - tally += I.slowdown + for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store)) + item_tally += I.slowdown // Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable. // This is done seperately to disallow negative numbers. for(var/obj/item/I in list(r_hand, l_hand) ) - tally += max(I.slowdown, 0) + item_tally += max(I.slowdown, 0) // Dragging heavy objects will also slow you down, similar to above. if(pulling && istype(pulling, /obj/item)) var/obj/item/pulled = pulling - tally += max(pulled.slowdown, 0) + item_tally += max(pulled.slowdown, 0) var/turf/T = get_turf(src) if(T && T.movement_cost) tally += T.movement_cost + if(species.item_slowdown_halved) + if(item_tally > 0) + item_tally *= 0.5 + + tally += item_tally + if(CE_SPEEDBOOST in chem_effects) if (tally >= 0) // cut any penalties in half tally = tally/2 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index b63e6257038..8a8650aa9ba 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -133,7 +133,7 @@ var/appearance_flags = 0 // Appearance/display related features. var/spawn_flags = 0 // Flags that specify who can spawn as this species var/slowdown = 0 // Passive movement speed malus (or boost, if negative) - var/slowdown_fixed = 0 // If this is on, they're not affected by object related slowdown (positive or negative) + var/item_slowdown_halved = 0 // If this is on, they're not as affected by item weights for slowdown var/primitive_form // Lesser form, if any (ie. monkey for humans) var/greater_form // Greater form, if any, ie. human for monkeys. var/holder_type diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index c52311820e3..8a49ed8922b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -168,7 +168,7 @@ var/blocked = run_armor_check(hit_zone, "melee") //If the armor absorbs all of the damage, skip the damage calculation and the blood - if(!soaked > effective_force) + if(!(soaked > effective_force)) standard_weapon_hit_effects(I, user, effective_force, blocked, soaked, hit_zone) if(I.damtype == BRUTE && prob(33)) // Added blood for whacking non-humans too diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index adb40102f13..26e1b264fda 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -114,7 +114,7 @@ return var/deathtime = world.time - src.timeofdeath - var/deathtimeminutes = round(deathtime / 300) + var/deathtimeminutes = round(deathtime / 600) var/pluralcheck = "minute" if(deathtimeminutes == 0) pluralcheck = "" @@ -122,11 +122,11 @@ pluralcheck = " [deathtimeminutes] minute and" else if(deathtimeminutes > 1) pluralcheck = " [deathtimeminutes] minutes and" - var/deathtimeseconds = round((deathtime - deathtimeminutes * 300) / 10,1) + var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) - if (deathtime < 3000) + if (deathtime < 6000) usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds." - usr << "You must wait 5 minutes to respawn as a drone!" + usr << "You must wait 10 minutes to respawn as a drone!" return var/list/all_fabricators = list() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index bbddd4c07bd..a2be896de01 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -322,7 +322,7 @@ if(hit_zone == O_EYES) attack_eye(affecting, assailant) else if(hit_zone == BP_HEAD) - headbut(affecting, assailant) + headbutt(affecting, assailant) else dislocate(affecting, assailant, hit_zone) diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm index 735d35fe7c3..82dae6e1350 100644 --- a/code/modules/mob/mob_grab_specials.dm +++ b/code/modules/mob/mob_grab_specials.dm @@ -88,7 +88,7 @@ attack.handle_eye_attack(attacker, target) -/obj/item/weapon/grab/proc/headbut(mob/living/carbon/human/target, mob/living/carbon/human/attacker) +/obj/item/weapon/grab/proc/headbutt(mob/living/carbon/human/target, mob/living/carbon/human/attacker) if(!istype(attacker)) return if(target.lying) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 3f46c81dd79..7eee7bccd04 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -61,6 +61,10 @@ name = "Short Hair 2" icon_state = "hair_shorthair3" + twintail + name = "Twintail" + icon_state = "hair_twintail" + cut name = "Cut Hair" icon_state = "hair_c" diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 1e95f4a213f..e7d31c0226f 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -114,4 +114,93 @@ recoil = 2 // ow my fucking hand accuracy = -1 // smooth bore + short barrel = shit accuracy ammo_type = /obj/item/ammo_casing/shotgun - // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it. \ No newline at end of file + // ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it. + +/obj/item/weapon/gun/projectile/revolver/lemat + name = "LeMat Revolver" + desc = "The LeMat Revolver is a 9 shot revolver with a secondary firing barrel loading shotgun shells. For when you really need something dead." + icon_state = "lemat" + item_state = "revolver" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + handle_casings = CYCLE_CASINGS + max_shells = 9 + caliber = "38" + ammo_type = /obj/item/ammo_casing/c38 + var/secondary_max_shells = 1 + var/secondary_caliber = "shotgun" + var/secondary_ammo_type = /obj/item/ammo_casing/shotgun + var/flipped_firing = 0 + var/list/secondary_loaded = list() + var/list/tertiary_loaded = list() + + +/obj/item/weapon/gun/projectile/revolver/lemat/New() + for(var/i in 1 to secondary_max_shells) + secondary_loaded += new secondary_ammo_type(src) + ..() + +/obj/item/weapon/gun/projectile/revolver/lemat/verb/swap_firingmode() + set name = "Swap Firing Mode" + set category = "Object" + set desc = "Click to swap from one method of firing to another." + + var/mob/living/carbon/human/M = usr + if(!M.mind) + return 0 + + to_chat(M, "You change the firing mode on \the [src].") + if(!flipped_firing) + if(max_shells && secondary_max_shells) + max_shells = secondary_max_shells + + if(caliber && secondary_caliber) + caliber = secondary_caliber + + if(ammo_type && secondary_ammo_type) + ammo_type = secondary_ammo_type + + if(secondary_loaded) + tertiary_loaded = loaded.Copy() + loaded = secondary_loaded + + flipped_firing = 1 + + else + if(max_shells) + max_shells = initial(max_shells) + + if(caliber && secondary_caliber) + caliber = initial(caliber) + + if(ammo_type && secondary_ammo_type) + ammo_type = initial(ammo_type) + + if(tertiary_loaded) + secondary_loaded = loaded.Copy() + loaded = tertiary_loaded + + flipped_firing = 0 + +/obj/item/weapon/gun/projectile/revolver/lemat/spin_cylinder() + set name = "Spin cylinder" + set desc = "Fun when you're bored out of your skull." + set category = "Object" + + chamber_offset = 0 + visible_message("\The [usr] spins the cylinder of \the [src]!", \ + "You hear something metallic spin and click.") + playsound(src.loc, 'sound/weapons/revolver_spin.ogg', 100, 1) + if(!flipped_firing) + loaded = shuffle(loaded) + if(rand(1,max_shells) > loaded.len) + chamber_offset = rand(0,max_shells - loaded.len) + +/obj/item/weapon/gun/projectile/revolver/lemat/examine(mob/user) + ..() + if(secondary_loaded) + var/to_print + for(var/round in secondary_loaded) + to_print += round + to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]") + else + to_chat(user, "\The [src] has a secondary barrel that is empty.") diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm index 1ab8cf3a431..1c82f6cdede 100644 --- a/code/modules/reagents/reagent_containers/food/lunch.dm +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -16,6 +16,7 @@ var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snac /obj/item/weapon/reagent_containers/food/snacks/muffin, /obj/item/weapon/reagent_containers/food/snacks/popcorn, /obj/item/weapon/reagent_containers/food/snacks/sosjerky, + /obj/item/weapon/reagent_containers/food/snacks/unajerky, /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, diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index dbfcc4a7c92..86d5d58f65c 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -3444,3 +3444,17 @@ /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks/New() ..() bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/unajerky + name = "Moghes Imported Sissalik Jerky" + icon_state = "unathitinred" + desc = "An incredibly well made jerky, shipped in all the way from Moghes." + trash = /obj/item/trash/unajerky + filling_color = "#631212" + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/unajerky/New() + ..() + reagents.add_reagent("protein", 8) + reagents.add_reagent("capsaicin", 2) + bitesize = 2 diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index bd2eaaa770d..beea1781b43 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -29,7 +29,7 @@ var/estimated_time = round(emergency_shuttle.estimate_arrival_time()/60,1) if (emergency_shuttle.evac) - priority_announcement.Announce(replacetext(replacetext(using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETD%", "[estimated_time] minute\s")) + priority_announcement.Announce(replacetext(replacetext(using_map.emergency_shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) else priority_announcement.Announce(replacetext(replacetext(using_map.shuttle_leaving_dock, "%dock_name%", "[using_map.dock_name]"), "%ETA%", "[estimated_time] minute\s")) diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index eaf51f102b9..85425c147e4 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -139,7 +139,7 @@ protected += 0.2 //latex gloves and science goggles also give a bit of bonus protection - if(istype(H.gloves,/obj/item/clothing/gloves/latex)) + if(istype(H.gloves,/obj/item/clothing/gloves/sterile)) protected += 0.1 if(istype(H.glasses,/obj/item/clothing/glasses/science)) diff --git a/html/browser/codex.css b/html/browser/codex.css new file mode 100644 index 00000000000..3352442a3df --- /dev/null +++ b/html/browser/codex.css @@ -0,0 +1,29 @@ +body +{ + background-image: url("paper_bg.png"); +} + +.button-group .button +{ + border: 1px solid RoyalBlue; + color: black; + padding: 5px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + cursor: pointer; + width: 40%; + display: block; +} + +.button-group .button:not(:last-child) +{ + border-bottom: none; /* Will hopefully prevent double borders */ +} + +.button-group .button:hover +{ + background-color: RoyalBlue; + color: white; +} \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 49614116b16..9241626f169 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,30 @@

Anewbe updated: