[MIRROR] Have you bingled that (#10545)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-03-29 22:12:53 +01:00
committed by GitHub
co-authored by Cameron Lennox Kashargul
parent 057fffd669
commit 16a213f699
386 changed files with 5637 additions and 1162 deletions
+7 -7
View File
@@ -29,9 +29,9 @@
switch(type)
if("feet")
if(!H.shoes)
affecting = H.get_organ(pick("l_leg", "r_leg"))
affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG))
H.Weaken(3)
if("l_hand", "r_hand")
if(BP_L_HAND, BP_R_HAND)
if(!H.gloves)
affecting = H.get_organ(type)
H.Stun(3)
@@ -54,9 +54,9 @@
to_chat(user, span_notice("You arm [src]."))
else
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
var/which_hand = BP_L_HAND
if(!user.hand)
which_hand = "r_hand"
which_hand = BP_R_HAND
triggered(user, which_hand)
user.visible_message(span_warning("[user] accidentally sets off [src], breaking their fingers."), \
span_warning("You accidentally trigger [src]!"))
@@ -70,9 +70,9 @@
/obj/item/assembly/mousetrap/attack_hand(var/mob/living/user)
if(armed)
if((CLUMSY in user.mutations) && prob(50))
var/which_hand = "l_hand"
var/which_hand = BP_L_HAND
if(!user.hand)
which_hand = "r_hand"
which_hand = BP_R_HAND
triggered(user, which_hand)
user.visible_message(span_warning("[user] accidentally sets off [src], breaking their fingers."), \
span_warning("You accidentally trigger [src]!"))
@@ -97,7 +97,7 @@
if(armed)
finder.visible_message(span_warning("[finder] accidentally sets off [src], breaking their fingers."), \
span_warning("You accidentally trigger [src]!"))
triggered(finder, finder.hand ? "l_hand" : "r_hand")
triggered(finder, finder.hand ? BP_L_HAND : BP_R_HAND)
return 1 //end the search!
return 0
+1 -1
View File
@@ -351,7 +351,7 @@ GLOBAL_DATUM_INIT(catalogue_data, /datum/category_collection/catalogue, new)
name = "TSC - Major Bill's Transportation"
datum_to_copy = /datum/lore/organization/tsc/mbt
/datum/category_item/catalogue/information/organization/commonwealth //VS EDIT 1
/datum/category_item/catalogue/information/organization/solgov //VS EDIT 1
name = "Government - Commonwealth of Sol-Procyon" //VS EDIT 2
datum_to_copy = /datum/lore/organization/gov/commonwealth //VS EDIT 3
@@ -1,6 +1,3 @@
/datum/category_item/catalogue/information/organization/solgov
name = "Government - Commonwealth of Sol-Procyon"
//TODO: VIRGO_LORE_WRITING_WIP - this whole file
//CHOMPedits: basically every "desc" variable in this file.
@@ -845,7 +845,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
// Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy.
var/datum/species/current_species = GLOB.all_species[pref.species]
if(!current_species.has_organ["brain"])
if(!current_species.has_organ[O_BRAIN])
limb_selection_list -= "Full Body"
else if(pref.organ_data[BP_TORSO] == "cyborg")
limb_selection_list |= "Head"
@@ -990,7 +990,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(pref.organ_data[BP_HEAD] != "cyborg")
to_chat(user, span_warning("You may only select a cybernetic or synthetic brain if you have a full prosthetic body."))
return
organ = "brain"
organ = O_BRAIN
var/datum/species/current_species = GLOB.all_species[pref.species]
var/list/organ_choices = list("Normal")
@@ -167,11 +167,11 @@
. += "<del>[rank]</del></td></a><td>" + span_bold(" \[WHITELIST ONLY]") + "</td></tr>"
continue
//VOREStation Add End
if(job.is_species_banned(user.client.prefs.species, user.client.prefs.organ_data["brain"]) == TRUE)
if(job.is_species_banned(user.client.prefs.species, user.client.prefs.organ_data[O_BRAIN]) == TRUE)
. += "<del>[rank]</del></td></a><td> \[THIS RACE/BRAIN TYPE CANNOT TAKE THIS ROLE.\]</td></tr>"
continue
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])))
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE FOR SELECTED RACE/BRAIN TYPE: [job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data["brain"])]\]</td></tr>"
if((job.minimum_character_age || job.min_age_by_species) && user.client && (user.read_preference(/datum/preference/numeric/human/age) < job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data[O_BRAIN])))
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE FOR SELECTED RACE/BRAIN TYPE: [job.get_min_age(user.client.prefs.species, user.client.prefs.organ_data[O_BRAIN])]\]</td></tr>"
continue
if((pref.job_civilian_low & ASSISTANT) && job.type != /datum/job/assistant)
. += span_gray("[rank]") + "</a></td><td></td></tr>"
@@ -53,7 +53,7 @@
var/activate_string = "Activate"
var/deactivate_string = "Deactivate"
var/list/stat_rig_module/stat_modules = new()
var/list/stat_modules = new()
/obj/item/rig_module/examine()
. = ..()
@@ -129,11 +129,11 @@
charges = processed_charges
stat_modules += new/stat_rig_module/activate(src)
stat_modules += new/stat_rig_module/deactivate(src)
stat_modules += new/stat_rig_module/engage(src)
stat_modules += new/stat_rig_module/select(src)
stat_modules += new/stat_rig_module/charge(src)
stat_modules += new/atom/movable/stat_rig_module/activate(src)
stat_modules += new/atom/movable/stat_rig_module/deactivate(src)
stat_modules += new/atom/movable/stat_rig_module/engage(src)
stat_modules += new/atom/movable/stat_rig_module/select(src)
stat_modules += new/atom/movable/stat_rig_module/charge(src)
/obj/item/rig_module/Destroy()
holder.installed_modules -= src
@@ -236,28 +236,27 @@
/obj/item/rig_module/proc/accepts_item(var/obj/item/input_device)
return 0
/stat_rig_module
parent_type = /atom/movable
/atom/movable/stat_rig_module
var/module_mode = ""
var/obj/item/rig_module/module
/stat_rig_module/Initialize(mapload)
/atom/movable/stat_rig_module/Initialize(mapload)
. = ..()
module = loc
if(!istype(module))
return INITIALIZE_HINT_QDEL
/stat_rig_module/Destroy()
/atom/movable/stat_rig_module/Destroy()
module = null
. = ..()
/stat_rig_module/proc/AddHref(var/list/href_list)
/atom/movable/stat_rig_module/proc/AddHref(var/list/href_list)
return
/stat_rig_module/proc/CanUse()
/atom/movable/stat_rig_module/proc/CanUse()
return 0
/stat_rig_module/Click()
/atom/movable/stat_rig_module/Click()
if(CanUse())
switch(module_mode)
if("select")
@@ -276,10 +275,10 @@
if("select_charge_type")
module.charge_selected = module.charges[module.charges.Find(module.charge_selected)]
/stat_rig_module/DblClick()
/atom/movable/stat_rig_module/DblClick()
return Click()
/stat_rig_module/activate/Initialize(mapload)
/atom/movable/stat_rig_module/activate/Initialize(mapload)
. = ..()
if(!istype(module))
return INITIALIZE_HINT_QDEL
@@ -288,10 +287,10 @@
name += " ([module.active_power_cost*10]A)"
module_mode = "activate"
/stat_rig_module/activate/CanUse()
/atom/movable/stat_rig_module/activate/CanUse()
return module.toggleable && !module.active
/stat_rig_module/deactivate/Initialize(mapload)
/atom/movable/stat_rig_module/deactivate/Initialize(mapload)
. = ..()
if(!istype(module))
return INITIALIZE_HINT_QDEL
@@ -302,10 +301,10 @@
module_mode = "deactivate"
/stat_rig_module/deactivate/CanUse()
/atom/movable/stat_rig_module/deactivate/CanUse()
return module.toggleable && module.active
/stat_rig_module/engage/Initialize(mapload)
/atom/movable/stat_rig_module/engage/Initialize(mapload)
. = ..()
if(!istype(module))
return INITIALIZE_HINT_QDEL
@@ -314,26 +313,26 @@
name += " ([module.use_power_cost*10]E)"
module_mode = "engage"
/stat_rig_module/engage/CanUse()
/atom/movable/stat_rig_module/engage/CanUse()
return module.usable
/stat_rig_module/select/Initialize(mapload)
/atom/movable/stat_rig_module/select/Initialize(mapload)
. = ..()
name = "Select"
module_mode = "select"
/stat_rig_module/select/CanUse()
/atom/movable/stat_rig_module/select/CanUse()
if(module.selectable)
name = module.holder.selected_module == module ? "Selected" : "Select"
return 1
return 0
/stat_rig_module/charge/Initialize(mapload)
/atom/movable/stat_rig_module/charge/Initialize(mapload)
. = ..()
name = "Change Charge"
module_mode = "select_charge_type"
/stat_rig_module/charge/AddHref(var/list/href_list)
/atom/movable/stat_rig_module/charge/AddHref(var/list/href_list)
var/charge_index = module.charges.Find(module.charge_selected)
if(!charge_index)
charge_index = 0
@@ -342,7 +341,7 @@
href_list["charge_type"] = module.charges[charge_index]
/stat_rig_module/charge/CanUse()
/atom/movable/stat_rig_module/charge/CanUse()
if(module.charges && module.charges.len)
var/datum/rig_charge/charge = module.charges[module.charge_selected]
name = "[charge.display_name] ([charge.charges]C) - Change"
+2 -2
View File
@@ -996,8 +996,8 @@
return wearer.pulledby.relaymove(wearer, direction)
else if(istype(wearer.buckled, /obj/structure/bed/chair/wheelchair))
if(ishuman(wearer.buckled))
var/obj/item/organ/external/l_hand = wearer.get_organ("l_hand")
var/obj/item/organ/external/r_hand = wearer.get_organ("r_hand")
var/obj/item/organ/external/l_hand = wearer.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand = wearer.get_organ(BP_R_HAND)
if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED)))
return // No hands to drive your chair? Tough luck!
wearer_move_delay += 2
@@ -94,13 +94,13 @@
user.visible_message(span_danger("\The [user] tries to take prints from \the [H], but they move away."))
return 1
if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND)
var/has_hand
var/obj/item/organ/external/O = H.organs_by_name["r_hand"]
var/obj/item/organ/external/O = H.organs_by_name[BP_R_HAND]
if(istype(O) && !O.is_stump())
has_hand = 1
else
O = H.organs_by_name["l_hand"]
O = H.organs_by_name[BP_L_HAND]
if(istype(O) && !O.is_stump())
has_hand = 1
if(!has_hand)
+1 -1
View File
@@ -28,7 +28,7 @@
to_chat(user, span_notice("No fingerprints found on [M]"))
flick("[icon_state]0",src)
return 0
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
else if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND)
var/obj/item/sample/print/P = new /obj/item/sample/print(user.loc)
P.attack(M, user)
to_chat(user, span_notice("Done printing."))
+38
View File
@@ -112,3 +112,41 @@
for(var/datum/money_account/D in all_money_accounts)
if(D.account_number == account_number)
return D
//Performing purchases by ID card
/proc/purchase_with_id_card(obj/item/card/id/I, mob/M, var/purchase_title = "Company", var/purchase_terminal = "Terminal", var/purchase_desc = "Purchase of Something", var/price = 0)
// Check if account can pay at all
var/datum/money_account/customer_account = get_account(I.associated_account_number)
if(!customer_account)
to_chat(M, span_warning("Error: Unable to access account. Please contact technical support if problem persists."))
return FALSE
if(customer_account.suspended)
to_chat(M, span_warning("Unable to access account: account suspended."))
return FALSE
// Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is
// empty at high security levels
if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2)
var/attempt_pin = tgui_input_number(M, "Enter pin code", "Vendor transaction")
customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2)
if(!customer_account)
to_chat(M, span_warning("Unable to access account: incorrect credentials."))
return FALSE
if(price > customer_account.money)
to_chat(M, span_warning("Insufficient funds in account."))
return FALSE
// debit money from the purchaser's account
customer_account.money -= price
// create entry in the purchaser's account log
var/datum/transaction/T = new()
T.target_name = "[purchase_title] (via [purchase_terminal])"
T.purpose = purchase_desc
if(price > 0)
T.amount = "([price])"
else
T.amount = "[price]"
T.source_terminal = purchase_terminal
T.date = current_date_string
T.time = stationtime2text()
// Okay to move the money at this point
customer_account.transaction_log.Add(T)
return TRUE
+2 -41
View File
@@ -316,51 +316,12 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/machinery/vending/proc/pay_with_card(obj/item/card/id/I, mob/M)
visible_message(span_info("[M] swipes a card through [src]."))
playsound(src, 'sound/machines/id_swipe.ogg', 50, 1)
var/datum/money_account/customer_account = get_account(I.associated_account_number)
if(!customer_account)
to_chat(M, span_warning("Error: Unable to access account. Please contact technical support if problem persists."))
if(!purchase_with_id_card(I, M, vendor_account.owner_name, name, "Purchase of [currently_vending.item_name]", currently_vending.price))
return FALSE
if(customer_account.suspended)
to_chat(M, span_warning("Unable to access account: account suspended."))
return FALSE
// Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is
// empty at high security levels
if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2)
var/attempt_pin = tgui_input_number(M, "Enter pin code", "Vendor transaction")
customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2)
if(!customer_account)
to_chat(M, span_warning("Unable to access account: incorrect credentials."))
return FALSE
if(currently_vending.price > customer_account.money)
to_chat(M, span_warning("Insufficient funds in account."))
return FALSE
// Okay to move the money at this point
// debit money from the purchaser's account
customer_account.money -= currently_vending.price
// create entry in the purchaser's account log
var/datum/transaction/T = new()
T.target_name = "[vendor_account.owner_name] (via [name])"
T.purpose = "Purchase of [currently_vending.item_name]"
if(currently_vending.price > 0)
T.amount = "([currently_vending.price])"
else
T.amount = "[currently_vending.price]"
T.source_terminal = name
T.date = current_date_string
T.time = stationtime2text()
customer_account.transaction_log.Add(T)
// Give the vendor the money. We use the account owner name, which means
// that purchases made with stolen/borrowed card will look like the card
// owner made them
var/datum/money_account/customer_account = get_account(I.associated_account_number)
credit_purchase(customer_account.owner_name)
return 1
+31 -3
View File
@@ -902,6 +902,7 @@
reagents.add_reagent(REAGENT_ID_POISONBERRYJUICE, 5)
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/slimejelly
name = "slime jelly donut"
filling_color = "#ED1169"
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/slimejelly/Initialize(mapload)
@@ -909,6 +910,7 @@
reagents.add_reagent(REAGENT_ID_SLIMEJELLY, 5)
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly
name = "cherry jelly donut"
filling_color = "#ED1169"
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly/Initialize(mapload)
@@ -1557,6 +1559,7 @@
nutriment_desc = list("sweetness" = 2, "pie" = 3)
bitesize = 3
/obj/item/reagent_containers/food/snacks/ber
/obj/item/reagent_containers/food/snacks/berryclafoutis/berry/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_BERRYJUICE, 5)
@@ -2223,6 +2226,12 @@
nutriment_desc = list("toasted bread" = 2)
bitesize = 3
/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry
name = "Cherry Jellied Toast"
/obj/item/reagent_containers/food/snacks/jelliedtoast/slime
name = "Slime Jellied Toast"
/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_CHERRYJELLY, 5)
@@ -2264,6 +2273,12 @@
nutriment_desc = list("buns" = 5)
bitesize = 2
/obj/item/reagent_containers/food/snacks/jellyburger/slime
name = "Slime Jelly Burger"
/obj/item/reagent_containers/food/snacks/jellyburger/cherry
name = "Cherry Jelly Burger"
/obj/item/reagent_containers/food/snacks/jellyburger/slime/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_SLIMEJELLY, 5)
@@ -2521,6 +2536,15 @@
nutriment_desc = list("bread" = 2)
bitesize = 3
/obj/item/reagent_containers/food/snacks/jellysandwich/slime
name = "Slime Jelly Sandwich"
/obj/item/reagent_containers/food/snacks/jellysandwich/slime
name = "Cherry Jelly Sandwich"
/obj/item/reagent_containers/food/snacks/jellysandwich/peanutbutter
name = "Peanut Butter Jelly Sandwich"
/obj/item/reagent_containers/food/snacks/jellysandwich/slime/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_SLIMEJELLY, 5)
@@ -3755,11 +3779,13 @@
trash = /obj/item/trash/plate
/obj/item/reagent_containers/food/snacks/gigapuddi/happy
name = "Astro-Pudding (Happy)"
desc = "A crème caramel of astronomical size, made with extra love."
icon = 'icons/obj/food.dmi'
icon_state = "happypuddi"
/obj/item/reagent_containers/food/snacks/gigapuddi/anger
name = "Astro-Pudding (Angry)"
desc = "A crème caramel of astronomical size, made with extra hate."
icon_state = "angerpuddi"
@@ -4088,7 +4114,7 @@
bitesize = 2
/obj/item/reagent_containers/food/snacks/pizzacrunchslice
name = "pizza crunch"
name = "pizza crunch slice"
desc = "A little piece of a heart attack. It's toppings are a mystery, hidden under batter"
icon_state = "pizzacrunchslice"
filling_color = "#BAA14C"
@@ -4603,8 +4629,8 @@
reagents.add_reagent(REAGENT_ID_SUGAR, 5)
/obj/item/reagent_containers/food/snacks/roastedsunflower
name = "sunflower seeds"
desc = "Sunflower seeds!"
name = "roasted sunflower seeds"
desc = "Roasted sunflower seeds!"
icon = 'icons/obj/food.dmi'
icon_state = "sunflowerseed"
bitesize = 1
@@ -6492,10 +6518,12 @@
bitesize = 1
/obj/item/reagent_containers/food/snacks/omurice/heart
name = "omelette rice (Love)"
icon = 'icons/obj/food.dmi'
icon_state = "omuriceheart"
/obj/item/reagent_containers/food/snacks/omurice/face
name = "omelette rice (Cute)"
icon = 'icons/obj/food.dmi'
icon_state = "omuriceface"
+3 -2
View File
@@ -15,6 +15,7 @@
bitesize = 5
/obj/item/reagent_containers/food/snacks/slice/sushi/filled
name = "stuffed sushi roll"
name = "piece of sushi"
desc = "A slice of a larger sushi roll, ready to devour."
icon = 'icons/obj/food_vr.dmi'
@@ -649,7 +650,7 @@
bitesize = 3
/obj/item/reagent_containers/food/snacks/grub_purple
name = "pink candy grub"
name = "purple candy grub"
desc = "A thoroughly candied grub, it smells of grape."
icon = 'icons/obj/food_vr.dmi'
icon_state = "grub_purple"
@@ -661,7 +662,7 @@
bitesize = 3
/obj/item/reagent_containers/food/snacks/grub_blue
name = "pink candy grub"
name = "blue candy grub"
desc = "A thoroughly candied grub, it smells of blueberry."
icon = 'icons/obj/food_vr.dmi'
icon_state = "grub_blue"
+9
View File
@@ -10,6 +10,7 @@
/obj/item/reagent_containers/food/snacks/meat/
)
result = /obj/structure/chaoscake
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layertwo
reagents = list(REAGENT_ID_FLOUR = 30, REAGENT_ID_MILK = 20, REAGENT_ID_SUGAR = 10, REAGENT_ID_EGG = 9, )
@@ -21,6 +22,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerthree
reagents = list(REAGENT_ID_FLOUR = 25, REAGENT_ID_MILK = 15, REAGENT_ID_SUGAR = 10, REAGENT_ID_EGG = 6, REAGENT_ID_DEATHBELL = 10)
@@ -31,6 +33,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/three
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerfour
reagents = list(REAGENT_ID_FLOUR = 25, REAGENT_ID_MILK = 15, REAGENT_ID_SUGAR = 10, REAGENT_ID_EGG = 6, REAGENT_ID_MILKSHAKE = 30)
@@ -41,12 +44,14 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/four
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerfive
reagents = list(REAGENT_ID_FLOUR = 20, REAGENT_ID_MILK = 10, REAGENT_ID_SUGAR = 10, REAGENT_ID_EGG = 6, REAGENT_ID_BLOOD = 30)
fruit = list(PLANT_TOMATO = 2)
items = list() //supposed to be made with lobster, still has to be ported.
result = /obj/item/chaoscake_layer/five
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layersix
reagents = list(REAGENT_ID_FLOUR = 20, REAGENT_ID_MILK = 10, REAGENT_ID_SUGAR = 10, REAGENT_ID_EGG = 6, REAGENT_ID_SPRINKLES = 5)
@@ -60,6 +65,7 @@
/obj/item/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/chaoscake_layer/six
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerseven
reagents = list(REAGENT_ID_FLOUR = 15, REAGENT_ID_MILK = 10, REAGENT_ID_SUGAR = 5, REAGENT_ID_EGG = 3, REAGENT_ID_DEVILSKISS = 20)
@@ -70,6 +76,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/seven
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layereight
reagents = list(REAGENT_ID_FLOUR = 15, REAGENT_ID_MILK = 10, REAGENT_ID_SUGAR = 5, REAGENT_ID_EGG = 3, REAGENT_ID_CREAM = 20)
@@ -80,12 +87,14 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/eight
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layernine
reagents = list(REAGENT_ID_WATER = 10, REAGENT_ID_BLOOD = 10)
fruit = list(PLANT_GOLDAPPLE = 1)
items = list()
result = /obj/item/chaoscake_layer/nine
wiki_flag = WIKI_SPOILER
/obj/structure/chaoscake
name = "An unfinished cake"
+13 -1
View File
@@ -44,6 +44,7 @@
/obj/item/stack/material/diamond
)
result = /obj/item/thecake_layer
wiki_flag = WIKI_SPOILER
/datum/recipe/thecake_thirdlayer
reagents = list(REAGENT_ID_FLOUR = 300, REAGENT_ID_SINGULO = 300, REAGENT_ID_ATOMICBOMB = 150, REAGENT_ID_THREEMILEISLAND = 150, REAGENT_ID_MANHATTANPROJ = 100)
@@ -66,6 +67,7 @@
/obj/item/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/thecake_layer/three
wiki_flag = WIKI_SPOILER
/datum/recipe/thecake_fourthlayer
reagents = list(REAGENT_ID_FLOUR = 400, REAGENT_ID_HOLYMARY = 100, REAGENT_ID_ANGELSKISS = 100, REAGENT_ID_GOLDSCHLAGER = 100, REAGENT_ID_GOLD = 300)
@@ -88,6 +90,7 @@
/obj/item/reagent_containers/food/snacks/appletart
)
result = /obj/item/thecake_layer/four
wiki_flag = WIKI_SPOILER
/datum/recipe/thecake_fifthlayer
reagents = list(REAGENT_ID_DEATHBELL = 1000)
@@ -110,6 +113,7 @@
/obj/item/reagent_containers/food/snacks/xenomeat
)
result = /obj/item/thecake_layer/five
wiki_flag = WIKI_SPOILER
/obj/structure/thecake/proc/HasSliceMissing()
if(slices < maxslices)
@@ -248,6 +252,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerthree
reagents = list(REAGENT_ID_FLOUR = 240, REAGENT_ID_MILK = 150, REAGENT_ID_SUGAR = 80, REAGENT_ID_EGG = 24, REAGENT_ID_DEATHBELL = 100)
@@ -258,6 +263,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/three
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerfour
reagents = list(REAGENT_ID_FLOUR = 240, REAGENT_ID_MILK = 150, REAGENT_ID_SUGAR = 80, REAGENT_ID_EGG = 24, REAGENT_ID_MILKSHAKE = 300)
@@ -268,6 +274,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/four
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerfive
reagents = list(REAGENT_ID_FLOUR = 180, REAGENT_ID_MILK = 100, REAGENT_ID_SUGAR = 60, REAGENT_ID_EGG = 18, REAGENT_ID_BLOOD = 300)
@@ -279,6 +286,7 @@
/obj/item/reagent_containers/food/snacks/lobster
)
result = /obj/item/chaoscake_layer/five
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layersix
reagents = list(REAGENT_ID_FLOUR = 180, REAGENT_ID_MILK = 100, REAGENT_ID_SUGAR = 60, REAGENT_ID_EGG = 18, REAGENT_ID_SPRINKLES = 10)
@@ -292,6 +300,7 @@
/obj/item/reagent_containers/food/snacks/chocolatebar
)
result = /obj/item/chaoscake_layer/six
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layerseven
reagents = list(REAGENT_ID_FLOUR = 120, REAGENT_ID_MILK = 50, REAGENT_ID_SUGAR = 40, REAGENT_ID_EGG = 12, REAGENT_ID_DEVILSKISS = 200)
@@ -302,6 +311,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/seven
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layereight
reagents = list(REAGENT_ID_FLOUR = 120, REAGENT_ID_MILK = 50, REAGENT_ID_SUGAR = 40, REAGENT_ID_EGG = 12, REAGENT_ID_CREAM = 200)
@@ -312,15 +322,17 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/chaoscake_layer/eight
wiki_flag = WIKI_SPOILER
/datum/recipe/chaoscake_layernine
reagents = list(REAGENT_ID_WATER = 100, REAGENT_ID_BLOOD = 100)
fruit = list(PLANT_GOLDAPPLE = 50)
items = list()
result = /obj/item/chaoscake_layer/nine
wiki_flag = WIKI_SPOILER
/obj/structure/chaoscake
name = "An unfinished cake"
name = "An strange unfinished cake"
desc = "A single layer of a strange cake, you can see the cherry paste ooze, but it feels very incomplete..."
icon = 'icons/obj/food64x64.dmi'
+1
View File
@@ -603,6 +603,7 @@
/obj/item/holder
)
result = /obj/effect/decal/cleanable/blood/gibs
wiki_flag = WIKI_SPOILER
/datum/recipe/splat/before_cook(obj/container)
if(istype(container, /obj/machinery/microwave))
+2
View File
@@ -62,6 +62,8 @@
// This is a bitfield, more than one type can be used
// Grill is presently unused and not listed
var/wiki_flag = 0
/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents, var/exact = FALSE)
if(!reagents || !reagents.len)
return TRUE
+3
View File
@@ -89,6 +89,7 @@
)
result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/crunch
coating = /datum/reagent/nutriment/coating/batter
wiki_flag = WIKI_SPOILER
/datum/recipe/friedmushroom
appliance = FRYER
@@ -141,6 +142,7 @@
/obj/item/reagent_containers/food/snacks/dough
)
result = /obj/item/reagent_containers/food/snacks/donut/plain/jelly/poisonberry
wiki_flag = WIKI_SPOILER
/datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies.
reagents = list(REAGENT_ID_SLIMEJELLY = 5, REAGENT_ID_SUGAR = 5)
@@ -168,6 +170,7 @@
)
result = /obj/item/reagent_containers/food/snacks/donut/chaos
result_quantity = 2
wiki_flag = WIKI_SPOILER
/datum/recipe/funnelcake
appliance = FRYER
-12
View File
@@ -18,18 +18,6 @@
)
result = /obj/item/storage/box/wings //This is kinda like the donut box.
//CHOMP remove start
/*/datum/recipe/chickenwings
* appliance = FRYER
* items = list(
* /obj/item/reagent_containers/food/snacks/meat,
* /obj/item/reagent_containers/food/snacks/meat,
* /obj/item/reagent_containers/food/snacks/meat,
* /obj/item/reagent_containers/food/snacks/meat
* )
* result = /obj/item/reagent_containers/food/snacks/generalschicken
*CHOMP remove end */
/datum/recipe/locust
appliance = FRYER
reagents = list(REAGENT_ID_SODIUMCHLORIDE = 1)
+7
View File
@@ -5,6 +5,7 @@
/obj/item/reagent_containers/food/snacks/bun
)
result = /obj/item/reagent_containers/food/snacks/human/burger
wiki_flag = WIKI_SPOILER // Alt recipie doesn't need to be shown(breaks tgui)
/datum/recipe/plainburger
appliance = GRILL
@@ -21,6 +22,7 @@
/obj/item/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/reagent_containers/food/snacks/monkeyburger
wiki_flag = WIKI_SPOILER // Alt recipie doesn't need to be shown(breaks tgui)
/datum/recipe/brainburger
appliance = GRILL
@@ -102,6 +104,7 @@
/obj/item/reagent_containers/food/snacks/bun
)
result = /obj/item/reagent_containers/food/snacks/bunbun
wiki_flag = WIKI_SPOILER
/datum/recipe/hotdog
appliance = GRILL
@@ -119,6 +122,7 @@
/obj/item/reagent_containers/food/snacks/meat/human,
)
result = /obj/item/reagent_containers/food/snacks/human/kabob
wiki_flag = WIKI_SPOILER
/datum/recipe/kabob //Do not put before humankabob
appliance = GRILL
@@ -137,6 +141,7 @@
/obj/item/reagent_containers/food/snacks/meat/monkey
)
result = /obj/item/reagent_containers/food/snacks/monkeykabob
wiki_flag = WIKI_SPOILER // Alt recipie doesn't need to be shown(breaks tgui)
/datum/recipe/syntikabob
appliance = GRILL
@@ -146,6 +151,7 @@
/obj/item/reagent_containers/food/snacks/meat/syntiflesh
)
result = /obj/item/reagent_containers/food/snacks/monkeykabob
wiki_flag = WIKI_SPOILER // Alt recipie doesn't need to be shown(breaks tgui)
/datum/recipe/tofukabob
appliance = GRILL
@@ -163,6 +169,7 @@
/obj/item/clothing/head/wizard/fake,
)
result = /obj/item/reagent_containers/food/snacks/spellburger
wiki_flag = WIKI_SPOILER
/datum/recipe/spellburger
appliance = GRILL
+9 -1
View File
@@ -49,6 +49,7 @@ I said no!
/obj/item/reagent_containers/food/snacks/meatball
)
result = /obj/item/reagent_containers/food/snacks/donkpocket //SPECIAL
wiki_flag = WIKI_SPOILER
/datum/recipe/donkpocket/proc/warm_up(var/obj/item/reagent_containers/food/snacks/donkpocket/being_cooked)
being_cooked.heat()
@@ -111,6 +112,7 @@ I said no!
/obj/item/reagent_containers/food/snacks/sliceable/flatdough
)
result = /obj/item/reagent_containers/food/snacks/berryclafoutis/poison
wiki_flag = WIKI_SPOILER
/datum/recipe/wingfangchu
reagents = list(REAGENT_ID_SOYSAUCE = 5)
@@ -480,6 +482,7 @@ I said no!
/obj/item/reagent_containers/food/snacks/doughslice
)
result = /obj/item/reagent_containers/food/snacks/donkpocket/dankpocket
wiki_flag = WIKI_SPOILER
/datum/recipe/validsalad/make_food(var/obj/container as obj)
. = ..(container)
@@ -546,6 +549,7 @@ I said no!
)
result = /obj/item/reagent_containers/food/snacks/roastedsunflower
result_quantity = 2
wiki_flag = WIKI_SPOILER // Other recipies are other oils
/datum/recipe/roastedsunflowerseeds
reagents = list(REAGENT_ID_SODIUMCHLORIDE = 1, REAGENT_ID_COOKINGOIL = 1)
@@ -562,6 +566,7 @@ I said no!
)
result = /obj/item/reagent_containers/food/snacks/roastedsunflower
result_quantity = 2
wiki_flag = WIKI_SPOILER // Other recipies are other oils
/datum/recipe/roastedpeanuts
fruit = list(PLANT_PEANUT = 2)
@@ -574,12 +579,14 @@ I said no!
reagents = list(REAGENT_ID_SODIUMCHLORIDE = 2, REAGENT_ID_CORNOIL = 1)
result = /obj/item/reagent_containers/food/snacks/roastedpeanuts
result_quantity = 2
wiki_flag = WIKI_SPOILER // other recipies are just other oils
/datum/recipe/roastedpeanutspeanut
fruit = list(PLANT_PEANUT = 2)
reagents = list(REAGENT_ID_SODIUMCHLORIDE = 2, REAGENT_ID_PEANUTOIL = 1)
result = /obj/item/reagent_containers/food/snacks/roastedpeanuts
result_quantity = 2
wiki_flag = WIKI_SPOILER // other recipies are just other oils
/datum/recipe/mint
reagents = list(REAGENT_ID_SUGAR = 5, REAGENT_ID_FROSTOIL = 5)
@@ -630,6 +637,7 @@ I said no!
fruit = list(PLANT_POISONBERRIES = 1)
result = /obj/item/reagent_containers/food/snacks/berrymuffin/poison
result_quantity = 2
wiki_flag = WIKI_SPOILER
/datum/recipe/ghostmuffin
reagents = list(REAGENT_ID_MILK = 5, REAGENT_ID_SUGAR = 5)
@@ -650,6 +658,7 @@ I said no!
fruit = list(PLANT_POISONBERRIES = 1)
result = /obj/item/reagent_containers/food/snacks/ghostmuffin/poison
result_quantity = 2
wiki_flag = WIKI_SPOILER
/datum/recipe/eggroll
reagents = list(REAGENT_ID_SOYSAUCE = 10)
@@ -954,7 +963,6 @@ I said no!
/obj/item/reagent_containers/food/snacks/meatball,
/obj/item/reagent_containers/food/snacks/meatball
)
result
result = /obj/item/reagent_containers/food/snacks/burrito_hell
reagent_mix = RECIPE_REAGENT_REPLACE //Already hot sauce
@@ -99,6 +99,7 @@
/obj/item/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/reagent_containers/food/snacks/sliceable/sushi
wiki_flag = WIKI_SPOILER // Secretish? Just assume carp is fish anyway
/datum/recipe/lobster
fruit = list(PLANT_LEMON = 1, PLANT_LETTUCE = 1)
+3
View File
@@ -81,6 +81,7 @@
/obj/item/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/reagent_containers/food/snacks/zestfish
wiki_flag = WIKI_SPOILER // secret if you know!
//Predesigned breads
@@ -166,6 +167,7 @@
/obj/item/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread
wiki_flag = WIKI_SPOILER // Synthflesh secret
/datum/recipe/xenomeatbread
appliance = OVEN
@@ -400,6 +402,7 @@
/obj/item/reagent_containers/food/snacks/cheesewedge
)
result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza
wiki_flag = WIKI_SPOILER // Synthflesh spoiler
/datum/recipe/mushroompizza
appliance = OVEN
+4 -4
View File
@@ -242,10 +242,10 @@
if(!isanimal(user))
if( !user.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user,span_notice("You try to move your [temp.name], but cannot!"))
return
@@ -261,10 +261,10 @@
if(!isanimal(user))
if( !user.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user,span_notice("You try to move your [temp.name], but cannot!"))
return
+1 -1
View File
@@ -355,7 +355,7 @@
if(!reagents || reagents.total_volume <= 0)
return
reagents.remove_any(rand(1,3)) //Todo, make it actually remove the reagents the seed uses.
var/affected = pick("r_hand","l_hand")
var/affected = pick(BP_R_HAND,BP_L_HAND)
seed.do_thorns(H,src,affected)
seed.do_sting(H,src,affected)
+1
View File
@@ -26,6 +26,7 @@
var/has_item_product // Item products. (Eggy)
var/force_layer
var/harvest_sound = null //Vorestation edit - sound the plant makes when harvested
var/wiki_flag = 0
// Making the assumption anything in HYDRO-ponics is capable of processing water, and nutrients commonly associated with it, leaving us with the below to be tweaked.
var/list/beneficial_reagents // Reagents considered uniquely 'beneficial' by a plant.
@@ -24,6 +24,7 @@
name = PLANT_POISONAPPLE
mutants = null
chems = list(REAGENT_ID_CYANIDE = list(1,5))
wiki_flag = WIKI_SPOILER
/datum/seed/apple/gold
name = PLANT_GOLDAPPLE
@@ -51,7 +51,7 @@
if(istype(H) && H.shoes)
return
seed.do_thorns(victim,src)
seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg"))
seed.do_sting(victim,src,pick(BP_R_FOOT,BP_L_FOOT,BP_R_LEG,BP_L_LEG))
if(seed.get_trait(TRAIT_SPORING) && prob(round(seed.get_trait(TRAIT_POTENCY)/2)))
seed.create_spores(get_turf(victim))
+1 -1
View File
@@ -179,7 +179,7 @@
data["name"] = seed_name
data["uid"] = uid
data["endurance"] = get_trait(TRAIT_ENDURANCE)
data["yield"] = get_trait(TRAIT_YIELD)
data["crop_yield"] = get_trait(TRAIT_YIELD)
data["maturation_time"] = get_trait(TRAIT_MATURATION)
data["production_time"] = get_trait(TRAIT_PRODUCTION)
data["potency"] = get_trait(TRAIT_POTENCY)
+241
View File
@@ -0,0 +1,241 @@
/*
* Library Public Computer
* Complete recode of this into a search engine for recipes and reagents
*/
/obj/machinery/librarywikicomp
name = "datacore computer"
icon = 'icons/obj/library.dmi'
icon_state = "computer"
anchored = TRUE
density = TRUE
desc = "Used for research, I swear!"
VAR_PRIVATE/doc_title = "Click a search entry!"
VAR_PRIVATE/doc_body = ""
VAR_PRIVATE/searchmode = null
VAR_PRIVATE/sub_category = null //sublists for food menu
VAR_PRIVATE/crash = FALSE
VAR_PRIVATE/just_donated = FALSE
VAR_PRIVATE/datum/internal_wiki/page/P
/obj/machinery/librarywikicomp/Initialize(mapload)
. = ..()
/obj/machinery/librarywikicomp/attack_hand(mob/user)
if(..())
return 1
if(crash)
user.visible_message("[user] performs percussive maintenance on \the [src].", "You try to smack some sense into \the [src].")
if(prob(10))
crash = FALSE
if(!crash)
tgui_interact(user)
playsound(src, "keyboard", 40) // into console
/obj/machinery/librarywikicomp/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
just_donated = FALSE
ui = new(user, src, "PublicLibraryWiki", name)
ui.open()
/obj/machinery/librarywikicomp/tgui_close(mob/user)
. = ..()
P = null
sub_category= null
searchmode = null
/obj/machinery/librarywikicomp/tgui_data(mob/user)
var/data = list()
if(SSinternal_wiki)
data["crash"] = crash
data["botany_data"] = null
data["material_data"] = null
data["particle_data"] = null
data["catalog_data"] = null
data["ore_data"] = null
data["sub_categories"] = null
data["donated"] = SSinternal_wiki.get_donation_current()
data["goal"] = SSinternal_wiki.get_donation_goal()
data["has_donated"] = just_donated
if(!crash)
// search page
data["errorText"] = ""
data["searchmode"] = searchmode
// get searches
switch(searchmode)
if("Food Recipes")
data["sub_categories"] = SSinternal_wiki.get_appliances()
data["search"] = list()
if(sub_category)
data["search"] = SSinternal_wiki.get_searchcache_food(sub_category)
if(P)
data["food_data"] = P.get_data()
if("Drink Recipes")
data["search"] = SSinternal_wiki.get_searchcache_drink()
if(P)
data["drink_data"] = P.get_data()
if("Chemistry")
data["search"] = SSinternal_wiki.get_searchcache_chem()
if(P)
data["chemistry_data"] = P.get_data()
if("Botany")
data["search"] = SSinternal_wiki.get_searchcache_seed()
if(P)
data["botany_data"] = P.get_data()
if("Catalogs")
data["sub_categories"] = SSinternal_wiki.get_catalogs()
data["search"] = list()
if(sub_category)
data["search"] = SSinternal_wiki.get_searchcache_catalog(sub_category)
if(P)
data["catalog_data"] = P.get_data()
if("Materials")
data["search"] = SSinternal_wiki.get_searchcache_material()
if(P)
data["material_data"] = P.get_data()
if("Particle Physics")
data["search"] = SSinternal_wiki.get_searchcache_particle()
if(P)
data["particle_data"] = P.get_data()
if("Ores")
data["search"] = SSinternal_wiki.get_searchcache_ore()
if(P)
data["ore_data"] = P.get_data()
else
data["search"] = list()
// display message
data["print"] = (doc_body && length(doc_body) > 0)
else
// intentional TGUI crash, amazingly awful
data["searchmode"] = "Error"
data["search"] = null
else
data["errorText"] = "Database unreachable."
return data
/obj/machinery/librarywikicomp/tgui_act(action, params, datum/tgui/ui)
if(..())
return TRUE
add_fingerprint(ui.user)
playsound(src, "keyboard", 40) // into console
switch(action)
if("closesearch")
if(!crash)
P = null
searchmode = null
sub_category = null
doc_title = "Click a search entry!"
doc_body = ""
. = TRUE
if("swapsearch")
if(!crash)
var/new_mode = params["data"]
if(searchmode == new_mode)
return FALSE
P = null
doc_title = null
doc_body = null
searchmode = new_mode
. = TRUE
if("crash")
// intentional TGUI crash, amazingly awful
if(issilicon(ui.user) && ui.user.client)
ui.user.client.create_fake_ad_popup_multiple(/obj/screen/popup/default, rand(4,10))
if(!crash)
crash = TRUE
// crashes till it fixes itself
VARSET_IN(src, crash, FALSE, rand(1000, 4000))
. = TRUE
if("print")
if(!crash && doc_title && doc_body)
visible_message(span_notice("[src] rattles and prints out a sheet of paper."))
// playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
var/obj/item/paper/paper = new /obj/item/paper(loc)
paper.name = doc_title
paper.info = doc_body
. = TRUE
if("setsubcat")
if(!crash)
var/new_subcat = params["data"]
if(sub_category == new_subcat)
return FALSE
P = null
doc_title = null
doc_body = null
sub_category = new_subcat
. = TRUE
// final search
if("search")
if(!crash)
var/search = params["data"]
var/datum/internal_wiki/page/new_page = null
if(searchmode == "Food Recipes")
new_page = SSinternal_wiki.get_page_food(search)
if(searchmode == "Drink Recipes")
new_page = SSinternal_wiki.get_page_drink(search)
if(searchmode == "Chemistry")
new_page = SSinternal_wiki.get_page_chem(search)
if(searchmode == "Botany")
new_page = SSinternal_wiki.get_page_seed(search)
if(searchmode == "Catalogs")
new_page = SSinternal_wiki.get_page_catalog(search)
if(searchmode == "Materials")
new_page = SSinternal_wiki.get_page_material(search)
if(searchmode == "Particle Physics")
new_page = SSinternal_wiki.get_page_particle(search)
if(searchmode == "Ores")
new_page = SSinternal_wiki.get_page_ore(search)
if(new_page == P)
return FALSE
P = new_page
if(P)
doc_title = P.title
doc_body = P.get_print() // TODO - pass get_data() instead, as only printing should use get_print()
else
doc_title = "Error"
doc_body = "Invalid data."
. = TRUE
// Support the wiki
if("donate")
if(!crash)
var/amount = params["donate"]
var/mob/living/carbon/human/H = ui.user
if(!ishuman(H) || !H.IsAdvancedToolUser(TRUE))
to_chat(ui.user,"Donating to Bingle.exo is Byond your comprehension!")
else if(amount)
pay_donation(H.GetIdCard(), ui.user, amount, ui)
. = TRUE
/obj/machinery/librarywikicomp/proc/pay_donation(var/obj/item/card/id/I, var/mob/user, var/amount, var/datum/tgui/ui)
visible_message(span_info("[user] swipes a card through [src]."))
playsound(src, 'sound/machines/id_swipe.ogg', 50, 1)
if(SSinternal_wiki.pay_with_card(I, user, src, amount))
playsound(src, 'sound/machines/ping.ogg', 50, 1)
just_donated = TRUE
SStgui.update_user_uis(user, ui)
// mapper varient for dorms and residences
/obj/machinery/librarywikicomp/personal
name = "personal datacore computer"
desc = "Have you Bingled THAT today?"
@@ -235,6 +235,8 @@ var/list/name_to_material
// Wallrot crumble message.
var/rotting_touch_message = "crumbles under your touch"
var/wiki_flag = 0
// Placeholders for light tiles and rglass.
/datum/material/proc/build_rod_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
if(!rod_product)
@@ -306,6 +308,7 @@ var/list/name_to_material
// Used by walls when qdel()ing to avoid neighbor merging.
/datum/material/placeholder
name = "placeholder"
wiki_flag = WIKI_SPOILER
// Places a girder object when a wall is dismantled, also applies reinforced material.
/datum/material/proc/place_dismantled_girder(var/turf/target, var/datum/material/reinf_material, var/datum/material/girder_material)
@@ -11,6 +11,7 @@
hardness = 500
weight = 500
protectiveness = 80 // 80%
wiki_flag = WIKI_SPOILER
/datum/material/alienalloy/elevatorium
name = "elevatorium"
+1
View File
@@ -9,6 +9,7 @@
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
conductive = 0
wiki_flag = WIKI_SPOILER
/datum/material/cult/place_dismantled_girder(var/turf/target)
new /obj/structure/girder/cult(target, MAT_CULT)
+1 -1
View File
@@ -103,7 +103,7 @@
icon_base = "stone"
door_icon_base = "stone"
icon_reinf = "reinf_mesh"
icon_colour = "##FFF3B2"
icon_colour = "#FFF3B2"
protectiveness = 30
integrity = 240
weight = 30
@@ -3,15 +3,18 @@
display_name = MAT_STEEL
stack_type = null
shard_type = SHARD_NONE
wiki_flag = WIKI_SPOILER
/datum/material/plastic/holographic
name = "holo" + MAT_PLASTIC
display_name = MAT_PLASTIC
stack_type = null
shard_type = SHARD_NONE
wiki_flag = WIKI_SPOILER
/datum/material/wood/holographic
name = "holo" + MAT_WOOD
display_name = MAT_WOOD
stack_type = null
shard_type = SHARD_NONE
wiki_flag = WIKI_SPOILER
@@ -59,57 +59,66 @@
/datum/material/cloth/teal
name = MAT_CLOTH_TEAL
display_name =MAT_CLOTH_TEAL
display_name = MAT_CLOTH_TEAL
use_name = "teal cloth"
icon_colour = "#00EAFA"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/black
name = MAT_CLOTH_BLACK
display_name = MAT_CLOTH_BLACK
use_name = "black cloth"
icon_colour = "#505050"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/green
name = MAT_CLOTH_GREEN
display_name = MAT_CLOTH_GREEN
use_name = "green cloth"
icon_colour = "#01C608"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/puple
name = MAT_CLOTH_PURPLE
display_name = MAT_CLOTH_PURPLE
use_name = "purple cloth"
icon_colour = "#9C56C4"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/blue
name = MAT_CLOTH_BLUE
display_name = MAT_CLOTH_BLUE
use_name = "blue cloth"
icon_colour = "#6B6FE3"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/beige
name = MAT_CLOTH_BEIGE
display_name = MAT_CLOTH_BEIGE
use_name = "beige cloth"
icon_colour = "#E8E7C8"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/lime
name = MAT_CLOTH_LIME
display_name = MAT_CLOTH_LIME
use_name = "lime cloth"
icon_colour = "#62E36C"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/yellow
name = MAT_CLOTH_YELLOW
display_name = MAT_CLOTH_YELLOW
use_name = "yellow cloth"
icon_colour = "#EEF573"
wiki_flag = WIKI_SPOILER
/datum/material/cloth/orange
name = MAT_CLOTH_ORANGE
display_name = MAT_CLOTH_ORANGE
use_name = "orange cloth"
icon_colour = "#E3BF49"
wiki_flag = WIKI_SPOILER
@@ -128,6 +137,7 @@
conductive = 0
hardness = 5
integrity = 40
wiki_flag = WIKI_SPOILER
/datum/material/cotton
name = MAT_COTTON
@@ -117,6 +117,7 @@
/datum/material/wood/log/hard
name = MAT_HARDLOG
display_name = MAT_HARDWOOD
icon_colour = "#6f432a"
stack_type = /obj/item/stack/material/log/hard
@@ -9,6 +9,7 @@
explosion_resistance = 200
hardness = 500
weight = 500
wiki_flag = WIKI_SPOILER
/datum/material/fluff //This is to allow for 2 handed weapons that don't want to have a prefix.
name = " "
@@ -18,6 +19,7 @@
sheet_plural_name = "fluffs"
hardness = 60
weight = 20 //Strong as iron.
wiki_flag = WIKI_SPOILER
/datum/material/darkglass
name = MAT_DARKGLASS
@@ -25,6 +27,7 @@
icon_base = MAT_DARKGLASS
table_icon_base = MAT_DARKGLASS
icon_colour = "#FFFFFF"
wiki_flag = WIKI_SPOILER
/datum/material/fancyblack
name = MAT_FANCYBLACK
@@ -32,3 +35,4 @@
icon_base = MAT_FANCYBLACK
table_icon_base = MAT_FANCYBLACK
icon_colour = "#FFFFFF"
wiki_flag = WIKI_SPOILER
@@ -5,7 +5,6 @@
stack_type = /obj/item/stack/material/supermatter
shard_type = SHARD_SHARD
radioactivity = 20
stack_type = null
luminescence = 3
ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE
icon_base = "stone"
+2 -2
View File
@@ -34,8 +34,8 @@
if(burn_user)
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
H.apply_damage(amount / 2 + 5, BURN, "r_hand", used_weapon=src)
H.apply_damage(amount / 2 + 5, BURN, "l_hand", used_weapon=src)
H.apply_damage(amount / 2 + 5, BURN, BP_R_HAND, used_weapon=src)
H.apply_damage(amount / 2 + 5, BURN, BP_L_HAND, used_weapon=src)
H.drop_from_inventory(src, get_turf(H))
return
+3
View File
@@ -16,6 +16,7 @@
)
var/xarch_source_mineral = REAGENT_ID_IRON
var/reagent = REAGENT_ID_SILICATE
var/wiki_flag = 0
/ore/New()
. = ..()
@@ -65,6 +66,7 @@
display_name = ORE_SAND
smelts_to = MAT_GLASS
alloy = 1
ore = /obj/item/ore/glass
compresses_to = MAT_SANDSTONE
/ore/phoron
@@ -140,6 +142,7 @@
display_name = "metallic hydrogen"
smelts_to = MAT_TRITIUM
compresses_to = MAT_METALHYDROGEN
ore = /obj/item/ore/hydrogen
scan_icon = "mineral_rare"
reagent = REAGENT_ID_HYDROGEN
+3 -3
View File
@@ -56,9 +56,9 @@
if(!istype(M, /mob/living/carbon)) return
if (ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(H, span_warning("You can't use your [temp.name]"))
return
@@ -122,7 +122,7 @@
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
if(status_flags & GODMODE) return 0 //godmode
if(def_zone == "l_hand" || def_zone == "r_hand") //Diona (And any other potential plant people) hands don't get shocked.
if(def_zone == BP_L_HAND || def_zone == BP_R_HAND) //Diona (And any other potential plant people) hands don't get shocked.
if(species.flags & IS_PLANT)
return 0
shock_damage *= siemens_coeff
@@ -109,7 +109,7 @@
user.visible_message(span_danger("\The [user] plunges \the [W] into \the [src]!"))
var/damage = shank_armor_helper(W, G, user)
apply_damage(damage, W.damtype, "torso", 0, sharp=W.sharp, edge=W.edge)
apply_damage(damage, W.damtype, BP_TORSO, 0, sharp=W.sharp, edge=W.edge)
if(W.hitsound)
playsound(src, W.hitsound, 50, 1, -1)
@@ -313,7 +313,7 @@
msg += span_warning("[T.He] [T.is] on fire!.")
var/ssd_msg = species.get_ssd(src)
if(ssd_msg && (!should_have_organ("brain") || has_brain()) && stat != DEAD)
if(ssd_msg && (!should_have_organ(O_BRAIN) || has_brain()) && stat != DEAD)
if(!key)
msg += span_deadsay("[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.")
else if(!client)
@@ -139,7 +139,7 @@
L[++L.len] = list("Suit charge: [cell_status]", null, null, null, null)
for(var/obj/item/rig_module/module in R.installed_modules)
{
for(var/stat_rig_module/SRM in module.stat_modules)
for(var/atom/movable/stat_rig_module/SRM in module.stat_modules)
if(SRM.CanUse())
L[++L.len] = list(SRM.module.interface_name,null,null,SRM.name,REF(SRM))
}
@@ -377,7 +377,7 @@
if(status_flags & GODMODE) return 0 //godmode
if (!def_zone)
def_zone = pick("l_hand", "r_hand")
def_zone = pick(BP_L_HAND, BP_R_HAND)
if(species.siemens_coefficient == -1)
if(stored_shock_by_ref["\ref[src]"])
@@ -813,7 +813,7 @@
//Used by various things that knock people out by applying blunt trauma to the head.
//Checks that the species has a "head" (brain containing organ) and that hit_zone refers to it.
/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = "brain")
/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = O_BRAIN)
var/obj/item/organ/affecting = internal_organs_by_name[brain_tag]
@@ -1635,7 +1635,7 @@
/mob/living/carbon/human/can_stand_overridden()
if(wearing_rig && wearing_rig.ai_can_move_suit(check_for_ai = 1))
// Actually missing a leg will screw you up. Everything else can be compensated for.
for(var/limbcheck in list("l_leg","r_leg"))
for(var/limbcheck in list(BP_L_LEG,BP_R_LEG))
var/obj/item/organ/affecting = get_organ(limbcheck)
if(!affecting)
return 0
@@ -41,9 +41,9 @@
var/has_hands = TRUE
if(istype(H))
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if(H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(!temp || !temp.is_usable())
has_hands = FALSE
for(var/thing in GetViruses()) //This is intentionally not having a has_hands check. If you are clicking on someone next to them, you're close enough to sneeze/cough on them!
@@ -51,8 +51,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
sponge.take_damage(amount)
brainloss = sponge.damage
@@ -65,8 +65,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
sponge.damage = min(max(amount, 0),(getMaxHealth()*2))
brainloss = sponge.damage
@@ -79,8 +79,8 @@
if(status_flags & GODMODE) return 0 //godmode
if(should_have_organ("brain"))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
if(should_have_organ(O_BRAIN))
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[O_BRAIN]
if(sponge)
brainloss = min(sponge.damage,getMaxHealth()*2)
else
@@ -545,9 +545,9 @@ emp_act
// This does a prob check to catch the thing flying at you, with a minimum of 1%
/mob/living/carbon/human/proc/can_catch(var/obj/O)
if(!get_active_hand()) // If active hand is empty
var/obj/item/organ/external/temp = organs_by_name["r_hand"]
var/obj/item/organ/external/temp = organs_by_name[BP_R_HAND]
if (hand)
temp = organs_by_name["l_hand"]
temp = organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
return FALSE // The hand isn't working in the first place
@@ -74,7 +74,7 @@
return
var/limb_pain = FALSE
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
for(var/limb_tag in list(BP_L_LEG,BP_R_LEG,BP_L_FOOT,BP_R_FOOT))
var/obj/item/organ/external/E = organs_by_name[limb_tag]
if(!E || !E.is_usable())
stance_damage += 2 // let it fail even if just foot&leg
@@ -47,8 +47,8 @@
if(stat)
return
var/obj/item/organ/external/l_hand = get_organ("l_hand")
var/obj/item/organ/external/r_hand = get_organ("r_hand")
var/obj/item/organ/external/l_hand = get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand = get_organ(BP_R_HAND)
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
to_chat(src, span_warning("You have no hands to play games with!"))
return
@@ -59,8 +59,8 @@
continue
if(H == src)
continue
var/obj/item/organ/external/l_hand2 = H.get_organ("l_hand")
var/obj/item/organ/external/r_hand2 = H.get_organ("r_hand")
var/obj/item/organ/external/l_hand2 = H.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand2 = H.get_organ(BP_R_HAND)
if((!l_hand2 || l_hand2.is_stump()) && (!r_hand2 || r_hand2.is_stump()))
continue
nearby |= H
@@ -70,8 +70,8 @@
continue
if(H == src)
continue
var/obj/item/organ/external/l_hand2 = H.get_organ("l_hand")
var/obj/item/organ/external/r_hand2 = H.get_organ("r_hand")
var/obj/item/organ/external/l_hand2 = H.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand2 = H.get_organ(BP_R_HAND)
if((!l_hand2 || l_hand2.is_stump()) && (!r_hand2 || r_hand2.is_stump()))
continue
nearby |= H
+2 -2
View File
@@ -1293,7 +1293,7 @@
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
if(health <= CONFIG_GET(number/health_threshold_dead) || (should_have_organ("brain") && !has_brain()))
if(health <= CONFIG_GET(number/health_threshold_dead) || (should_have_organ(O_BRAIN) && !has_brain()))
death()
blinded = 1
silent = 0
@@ -1321,7 +1321,7 @@
qdel(a)
//Brain damage from Oxyloss
if(should_have_organ("brain"))
if(should_have_organ(O_BRAIN))
var/brainOxPercent = 0.015 //Default 1.5% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
if(CE_STABLE in chem_effects)
brainOxPercent = 0.008 //Halved in effect
@@ -57,6 +57,7 @@
reagent_state = LIQUID
color = "#ffffff"
scannable = 1
wiki_flag = WIKI_SPOILER
/datum/reagent/glamour_scaling/affect_blood(var/mob/living/carbon/target, var/removed)
if(!(/mob/living/proc/set_size in target.verbs))
@@ -551,7 +551,7 @@
return
//VOREStation Edit Start - Headpats and Handshakes.
if(H.zone_sel.selecting == "head")
if(H.zone_sel.selecting == BP_HEAD)
if(target.touch_reaction_flags & SPECIES_TRAIT_PATTING_DEFENCE)
H.visible_message( \
span_warning("[target] reflexively bites the hand of [H] to prevent head patting!"), \
@@ -564,7 +564,7 @@
H.visible_message( \
span_notice("[H] pats [target] on the head."), \
span_notice("You pat [target] on the head."), )
else if(H.zone_sel.selecting == "r_hand" || H.zone_sel.selecting == "l_hand")
else if(H.zone_sel.selecting == BP_R_HAND || H.zone_sel.selecting == BP_L_HAND)
H.visible_message( \
span_notice("[H] shakes [target]'s hand."), \
span_notice("You shake [target]'s hand."), )
@@ -25,7 +25,7 @@
virus_immune = 1
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
O_BRAIN = /obj/item/organ/internal/brain/golem
)
death_message = "becomes completely motionless..."
@@ -30,11 +30,11 @@ var/global/list/sparring_attack_cache = list()
return FALSE
// Check if they have a functioning hand.
var/obj/item/organ/external/E = user.organs_by_name["l_hand"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_HAND]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_hand"]
E = user.organs_by_name[BP_R_HAND]
if(E && !E.is_stump())
return TRUE
@@ -79,7 +79,7 @@ var/global/list/sparring_attack_cache = list()
if(BP_GROIN)
target.visible_message(span_warning("[target] looks like [TT.he] [TT.is] in pain!"), span_warning("Oh god that hurt!")) // Chompstation edit
target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
if("l_leg", "l_foot", "r_leg", "r_foot")
if(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT)
if(!target.lying)
target.visible_message(span_warning("[target] gives way slightly."))
target.apply_effect(attack_damage*3, AGONY, armour)
@@ -199,14 +199,14 @@ var/global/list/sparring_attack_cache = list()
if(user.legcuffed || user.buckled)
return FALSE
if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", BP_GROIN)))
if(!(zone in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_GROIN)))
return FALSE
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_foot"]
E = user.organs_by_name[BP_R_FOOT]
if(E && !E.is_stump())
return TRUE
@@ -247,14 +247,14 @@ var/global/list/sparring_attack_cache = list()
if(!istype(target))
return FALSE
if (!user.lying && (target.lying || (zone in list("l_foot", "r_foot"))))
if (!user.lying && (target.lying || (zone in list(BP_L_FOOT, BP_R_FOOT))))
if(target.grabbed_by == user && target.lying)
return FALSE
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT]
if(E && !E.is_stump())
return TRUE
E = user.organs_by_name["r_foot"]
E = user.organs_by_name[BP_R_FOOT]
if(E && !E.is_stump())
return TRUE
+1 -1
View File
@@ -966,7 +966,7 @@
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(!H.isSynthetic())
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name[O_LIVER]
if(!L || L.is_broken())
blood_vomit = 1
@@ -336,11 +336,11 @@
else
t_him = "them"
if(H.zone_sel.selecting == "head")
if(H.zone_sel.selecting == BP_HEAD)
H.visible_message( \
span_notice("[H] pats [target] on the head."), \
span_notice("You pat [target] on the head."), )
else if(H.zone_sel.selecting == "r_hand" || H.zone_sel.selecting == "l_hand")
else if(H.zone_sel.selecting == BP_R_HAND || H.zone_sel.selecting == BP_L_HAND)
H.visible_message( \
span_notice("[H] shakes [target]'s hand."), \
span_notice("You shake [target]'s hand."), )
@@ -77,7 +77,7 @@
if(!E || E.is_stump())
to_chat(src, span_warning("\The [H] does not have a head!"))
if(!H.should_have_organ("brain"))
if(!H.should_have_organ(O_BRAIN))
to_chat(src, span_warning("\The [H] does not seem to have an ear canal to breach."))
return
@@ -112,7 +112,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/I = H.internal_organs_by_name["brain"]
var/obj/item/organ/I = H.internal_organs_by_name[O_BRAIN]
if(!I) // No brain organ, so the borer moves in and replaces it permanently.
replace_brain()
else
@@ -182,7 +182,7 @@
H.ChangeToHusk()
var/obj/item/organ/internal/borer/B = new(H)
H.internal_organs_by_name["brain"] = B
H.internal_organs_by_name[O_BRAIN] = B
H.internal_organs |= B
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
+2 -2
View File
@@ -277,8 +277,8 @@
else if(istype(my_mob.buckled, /obj/structure/bed/chair/wheelchair))
if(ishuman(my_mob))
var/mob/living/carbon/human/driver = my_mob
var/obj/item/organ/external/l_hand = driver.get_organ("l_hand")
var/obj/item/organ/external/r_hand = driver.get_organ("r_hand")
var/obj/item/organ/external/l_hand = driver.get_organ(BP_L_HAND)
var/obj/item/organ/external/r_hand = driver.get_organ(BP_R_HAND)
if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump()))
return // No hands to drive your chair? Tough luck!
//drunk wheelchair driving
+8 -6
View File
@@ -50,12 +50,14 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image
created_for = ckey
new_player_panel()
client.init_verbs()
spawn(40)
if(client)
handle_privacy_poll()
client.playtitlemusic()
version_warnings()
addtimer(CALLBACK(src, PROC_REF(do_after_login)), 4 SECONDS, TIMER_DELETE_ME)
/mob/new_player/proc/do_after_login()
PRIVATE_PROC(TRUE)
if(client)
handle_privacy_poll()
client.playtitlemusic()
version_warnings()
/mob/new_player/proc/version_warnings()
var/problems // string to store message to present to player as a problem
@@ -195,7 +195,6 @@
client.prefs.dress_preview_mob(mannequin)
var/mob/observer/dead/observer = new(mannequin)
observer.moveToNullspace() //Let's not stay in our doomed mannequin
qdel(mannequin) //We're not used anymore, so goodbye!
spawning = 1
if(client.media)
+2 -2
View File
@@ -4,7 +4,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
name = "brain"
health = 400 //They need to live awhile longer than other organs. Is this even used by organ code anymore?
desc = "A piece of juicy meat found in a person's head."
organ_tag = "brain"
organ_tag = O_BRAIN
parent_organ = BP_HEAD
vital = 1
icon_state = "brain2"
@@ -175,7 +175,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
/obj/item/organ/internal/brain/pariah_brain
name = "brain remnants"
desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
organ_tag = "brain"
organ_tag = O_BRAIN
parent_organ = BP_HEAD
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/organ/internal/liver
name = "liver"
icon_state = "liver"
organ_tag = "liver"
organ_tag = O_LIVER
parent_organ = BP_GROIN
/obj/item/organ/internal/liver/process()
+1 -1
View File
@@ -3,7 +3,7 @@
name = "cortical borer"
icon = 'icons/obj/objects.dmi'
icon_state = "borer"
organ_tag = "brain"
organ_tag = O_BRAIN
desc = "A disgusting space slug."
parent_organ = BP_HEAD
vital = 1
+2 -2
View File
@@ -508,9 +508,9 @@
if(user == src.owner)
var/grasp
if(user.l_hand == tool && (src.body_part & (ARM_LEFT|HAND_LEFT)))
grasp = "l_hand"
grasp = BP_L_HAND
else if(user.r_hand == tool && (src.body_part & (ARM_RIGHT|HAND_RIGHT)))
grasp = "r_hand"
grasp = BP_R_HAND
if(grasp)
to_chat(user, span_warning("You can't reach your [src.name] while holding [tool] in your [owner.get_bodypart_name(grasp)]."))
+1 -1
View File
@@ -48,7 +48,7 @@
/obj/item/organ/internal/mmi_holder/Initialize(mapload, var/internal, var/obj/item/mmi/installed)
. = ..(mapload, internal)
if(!ishuman(loc) || istype(loc, /mob/living/carbon/human/dummy/mannequin))
if(!ishuman(loc) || ismannequin(loc))
return
if(installed)
stored_mmi = installed
+3 -5
View File
@@ -93,11 +93,9 @@
/obj/item/organ/internal/regennetwork/Initialize(mapload)
. = ..()
var/mob/living/carbon/human/H = null
spawn(15)
if(ishuman(owner))
H = owner
color = H.species.get_blood_colour(H)
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
color = H.species.get_blood_colour(H)
/obj/item/organ/internal/regennetwork/proc/get_strain_percent(var/cost)
adjust_strain(cost)
+2 -2
View File
@@ -71,10 +71,10 @@
if(!isanimal(user))
if( !user.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user, span_notice("You try to move your [temp.name], but cannot!"))
return
+4 -4
View File
@@ -25,10 +25,10 @@
if(!isanimal(user))
if( !user.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user, span_notice("You try to move your [temp.name], but cannot!"))
return
@@ -41,9 +41,9 @@
/obj/item/paper_bin/attack_hand(mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (H.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user, span_notice("You try to move your [temp.name], but cannot!"))
return
@@ -270,6 +270,7 @@
*/
/datum/particle_smasher_recipe
var/display_name = ""
var/list/reagents // example: = list(REAGENT_ID_PACID = 5)
var/list/items // example: = list(/obj/item/tool/crowbar, /obj/item/welder) Place /foo/bar before /foo. Do not include fruit. Maximum of 3 items.
var/recipe_type = PS_RESULT_STACK // Are we producing a stack or an item?
@@ -282,6 +283,7 @@
var/required_atmos_temp_max = 600 // The maximum ambient atmospheric temperature required, in kelvin.
var/probability = 0 // The probability for the recipe to be produced. 0 will make it impossible.
var/item_consume_chance = 100 // The probability for the items (not materials) used in the recipe to be consume.
var/wiki_flag = NONE
/datum/particle_smasher_recipe/proc/check_items(var/obj/container as obj)
. = 1
@@ -320,6 +322,7 @@
return .
/datum/particle_smasher_recipe/deuterium_tritium
display_name = MAT_TRITIUM + " from " + MAT_DEUTERIUM
reagents = list(REAGENT_ID_HYDROGEN = 15)
result = /obj/item/stack/material/tritium
@@ -332,6 +335,7 @@
probability = 30
/datum/particle_smasher_recipe/verdantium_morphium
display_name = MAT_MORPHIUM + " from " + MAT_VERDANTIUM
result = /obj/item/stack/material/morphium
required_material = /obj/item/stack/material/verdantium
@@ -340,6 +344,7 @@
probability = 20
/datum/particle_smasher_recipe/plasteel_morphium
display_name = MAT_MORPHIUM + " from Alien Junk"
items = list(/obj/item/prop/alien/junk)
result = /obj/item/stack/material/morphium
@@ -350,6 +355,7 @@
probability = 10
/datum/particle_smasher_recipe/osmium_lead
display_name = MAT_OSMIUM + " from " + MAT_LEAD
reagents = list(REAGENT_ID_TUNGSTEN = 10)
result = /obj/item/stack/material/lead
@@ -363,6 +369,7 @@
probability = 50
/datum/particle_smasher_recipe/phoron_valhollide
display_name = MAT_VALHOLLIDE + " from " + MAT_PHORON
reagents = list(REAGENT_ID_PHORON = 10, REAGENT_ID_PACID = 10)
result = /obj/item/stack/material/valhollide
@@ -376,6 +383,7 @@
probability = 10
/datum/particle_smasher_recipe/valhollide_supermatter
display_name = MAT_SUPERMATTER + " from " + MAT_VALHOLLIDE
reagents = list(REAGENT_ID_PHORON = 300)
result = /obj/item/stack/material/supermatter
@@ -389,6 +397,7 @@
probability = 1
/datum/particle_smasher_recipe/donkpockets_coal
display_name = "Ruined Donkpocket"
items = list(/obj/item/reagent_containers/food/snacks/donkpocket)
recipe_type = PS_RESULT_ITEM
@@ -404,6 +413,7 @@
probability = 90
/datum/particle_smasher_recipe/donkpockets_ascend
display_name = "Ascended Donkpocket"
items = list(/obj/item/reagent_containers/food/snacks/donkpocket)
reagents = list(REAGENT_ID_PHORON = 120)
@@ -420,6 +430,7 @@
probability = 20
/datum/particle_smasher_recipe/glamour
display_name = "Synthesize " + MAT_GLAMOUR
items = list(/obj/item/glamour_unstable)
result = /obj/item/stack/material/glamour
+1 -1
View File
@@ -194,7 +194,7 @@
log_game("SMES FAILURE: <b>[src.x]X [src.y]Y [src.z]Z</b> User: [h_user.ckey], Intensity: [intensity]/100")
message_admins("SMES FAILURE: <b>[src.x]X [src.y]Y [src.z]Z</b> User: [h_user.ckey], Intensity: [intensity]/100 - <A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>")
var/used_hand = h_user.hand?"l_hand":"r_hand"
var/used_hand = h_user.hand?BP_L_HAND:BP_R_HAND
switch (intensity)
if (0 to 15)
+2 -2
View File
@@ -204,7 +204,7 @@
if((CLUMSY in M.mutations) && prob(40)) //Clumsy handling
var/obj/P = consume_next_projectile()
if(P)
if(process_projectile(P, user, user, pick("l_foot", "r_foot")))
if(process_projectile(P, user, user, pick(BP_L_FOOT, BP_R_FOOT)))
handle_post_fire(user, user)
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
user.visible_message(
@@ -729,7 +729,7 @@
in_chamber.on_hit(M)
if(in_chamber.damage_type != HALLOSS && !in_chamber.nodamage)
log_and_message_admins("commited suicide using \a [src]", user)
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", sharp = TRUE, used_weapon = src)
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, BP_HEAD, sharp = TRUE, used_weapon = src)
user.death()
else if(in_chamber.damage_type == HALLOSS)
to_chat(user, span_notice("Ow..."))
+45 -143
View File
@@ -14,6 +14,7 @@
idle_power_usage = 20
clicksound = "button"
var/analyzing = FALSE
var/list/found_reagents = list()
/obj/machinery/chemical_analyzer/update_icon()
icon_state = "chem_analyzer[analyzing ? "-working":""]"
@@ -26,7 +27,6 @@
return
if(default_deconstruction_crowbar(user, I))
return
if(istype(I,/obj/item/reagent_containers))
analyzing = TRUE
update_icon()
@@ -45,153 +45,55 @@
I.identify(IDENTITY_FULL, user)
// Now tell us everything that is inside.
var/final_message = ""
if(I.reagents && I.reagents.reagent_list.len)
final_message += "<br>" // To add padding between regular chat and the output.
found_reagents.Cut()
for(var/datum/reagent/R in I.reagents.reagent_list)
if(!R.name)
continue
final_message += span_notice("*=*=*=*= Contains " + span_info("[R.volume]u") + " of " + span_bold(span_underline("[R.name]")) + " =*=*=*=*<br>[R.description][R.from_belly ? " Something seems strange about it...? (OOC: It's from a belly!)" : ""]<br><br>")
/* Downstream addiction code
if(R.id in addictives)
final_message += span_boldnotice(span_red("DANGER") + ", [(R.id in fast_addictives) ? "highly " : ""]addictive.)") + "<br>"
*/
var/list/products = SSchemistry.chemical_reactions_by_product[R.id]
if(products != null && products.len > 0)
var/segment = 1
var/list/display_reactions = list()
for(var/decl/chemical_reaction/CR in products)
// if(!CR.spoiler) - Downstream self documenting wiki code
display_reactions.Add(CR)
for(var/decl/chemical_reaction/CR in display_reactions)
if(display_reactions.len == 1)
final_message += span_underline("Potential Chemical breakdown: <br>")
else
final_message += span_underline("Potential Chemical breakdown [segment]: <br>")
segment += 1
found_reagents[R.id] = R.volume
tgui_interact(user)
else
to_chat(user, span_warning("Nothing detected in [I]"))
if(istype(CR,/decl/chemical_reaction/instant/slime))
// Handle slimes
var/decl/chemical_reaction/instant/slime/SR = CR
if(SR.required)
var/slime_path = SR.required
final_message += " -core [span_info(initial(slime_path:name))]<br>"
for(var/RQ in CR.required_reagents)
var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
if(!r_RQ)
continue
final_message += " -inducer [span_info(r_RQ.name)]<br>"
else
// Standard
for(var/RQ in CR.required_reagents)
var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
if(!r_RQ)
continue
final_message += " -parts [span_info(r_RQ.name)]<br>"
for(var/IH in CR.inhibitors)
var/decl/chemical_reaction/r_IH = SSchemistry.chemical_reagents[IH]
if(!r_IH)
continue
final_message += " -inhbi [span_info(r_IH.name)]<br>"
for(var/CL in CR.catalysts)
var/decl/chemical_reaction/r_CL = SSchemistry.chemical_reagents[CL]
if(!r_CL)
continue
final_message += " -catyl [span_info(r_CL.name)]<br>"
final_message += "<br>"
else
final_message += span_underline("Potential Chemical breakdown:") + "<br>" + span_red("UNKNOWN OR BASE-REAGENT") + "<br><br>"
var/list/distilled_products = SSchemistry.distilled_reactions_by_product[R.id]
if(distilled_products != null && distilled_products.len > 0)
var/segment = 1
var/list/display_reactions = list()
for(var/decl/chemical_reaction/distilling/CR in distilled_products)
// if(!CR.spoiler) - Downstream self documenting wiki code
display_reactions.Add(CR)
for(var/decl/chemical_reaction/distilling/CR in display_reactions)
if(display_reactions.len == 1)
final_message += span_underline("Potential Chemical Distillation: <br>")
else
final_message += span_underline("Potential Chemical Distillation [segment]: <br>")
segment += 1
final_message += " -temps " + span_info("[CR.temp_range[1]]k") + " - " + span_info("[CR.temp_range[2]]k") + "<br>"
for(var/RQ in CR.required_reagents)
var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
if(!r_RQ)
continue
final_message += " -parts [span_info(r_RQ.name)]<br>"
for(var/IH in CR.inhibitors)
var/decl/chemical_reaction/r_IH = SSchemistry.chemical_reagents[IH]
if(!r_IH)
continue
final_message += " -inhbi [span_info(r_IH.name)]<br>"
for(var/CL in CR.catalysts)
var/decl/chemical_reaction/r_CL = SSchemistry.chemical_reagents[CL]
if(!r_CL)
continue
final_message += " -catyl [span_info(r_CL.name)]<br>"
final_message += "<br>"
// We can get some reagents by grinding sheets and ores!
var/grind_results = ""
for(var/source in global.sheet_reagents)
if(R.id in global.sheet_reagents[source])
var/nm = initial(source:name)
grind_results += " -grind [span_info(nm)]<br>"
if(grind_results != "")
final_message += span_underline("Material Sources: <br>")
final_message += grind_results
final_message += "<br>"
grind_results = ""
for(var/source in global.ore_reagents)
if(R.id in global.ore_reagents[source])
var/nm = initial(source:name)
grind_results += " -grind [span_info(nm)]<br>"
if(grind_results != "")
final_message += span_underline("Ore Sources: <br>")
final_message += grind_results
final_message += "<br>"
// The long forgotten fluid pumps!
// TODO : Update turfs to provide what their fluidpump outputs are too
var/pump_results = ""
for(var/O in GLOB.ore_data)
var/ore/OR = GLOB.ore_data[O]
if(OR.reagent == R.id)
pump_results += " -erosion [span_info(OR.display_name)]<br>"
if(pump_results != "")
final_message += span_underline("Fluid Pump Filtrate: <br>")
final_message += pump_results
final_message += "<br>"
var/makes_result = ""
var/list/instant_by_reagent = SSchemistry.instant_reactions_by_reagent["[R.id]"]
if(instant_by_reagent && instant_by_reagent.len)
for(var/i = 1, i <= instant_by_reagent.len, i++)
var/decl/chemical_reaction/OR = instant_by_reagent[i]
if(istype(OR,/decl/chemical_reaction/instant/slime)) // very bloated and meant to be a mystery
continue
makes_result += " -[span_info(OR.name)]<br>"
var/list/distilled_by_reagent = SSchemistry.distilled_reactions_by_reagent["[R.id]"]
if(distilled_by_reagent && distilled_by_reagent.len)
for(var/i = 1, i <= distilled_by_reagent.len, i++)
var/decl/chemical_reaction/OR = distilled_by_reagent[i]
makes_result += " -[span_info(OR.name)]<br>"
if(makes_result != "")
final_message += span_underline("Can Be Used To Produce: <br>")
final_message += makes_result
final_message += "<br>"
final_message += "Scanning of \the [I] complete."
to_chat(user, span_notice(final_message))
analyzing = FALSE
update_icon()
return
/obj/machinery/chemical_analyzer/attack_hand(mob/user)
if(!found_reagents.len)
return ..()
tgui_interact(user) // Show last analysis
/obj/machinery/chemical_analyzer/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "ChemAnalyzerPro", name)
ui.open()
/obj/machinery/chemical_analyzer/tgui_data(mob/user)
var/list/data = list()
var/total_vol = 0
var/list/reagents_sent = list()
var/obj/item/reagent_containers/glass/beaker/large/beaker_path = /obj/item/reagent_containers/glass/beaker/large
for(var/ID in found_reagents)
var/datum/reagent/R = SSchemistry.chemical_reagents[ID]
if(!R)
continue
var/list/subdata = list()
subdata["title"] = R.name
SSinternal_wiki.add_icon(subdata, initial(beaker_path.icon), initial(beaker_path.icon_state), R.color)
// Get internal data
subdata["description"] = R.description
subdata["flavor"] = R.taste_description
subdata["allergen"] = SSinternal_wiki.assemble_allergens(R.allergen_type)
subdata["beakerAmount"] = found_reagents[ID]
total_vol += found_reagents[ID]
SSinternal_wiki.assemble_reaction_data(subdata, R)
// Send as a big list of lists
reagents_sent += list(subdata)
data["scannedReagents"] = reagents_sent
data["beakerTotal"] = total_vol
data["beakerMax"] = initial(beaker_path.volume)
return data
@@ -34,6 +34,7 @@
var/reaction_sound = 'sound/effects/bubbles.ogg'
var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file.
var/wiki_flag = 0
/decl/chemical_reaction/proc/can_happen(var/datum/reagents/holder)
//check that all the required reagents are present
@@ -1325,14 +1325,14 @@
result_amount = 15
/decl/chemical_reaction/instant/drinks/nuclearwaste_radium
name = REAGENT_NUCLEARWASTE
name = REAGENT_NUCLEARWASTE + " 226"
id = "nuclearwasterad"
result = REAGENT_ID_NUCLEARWASTE
required_reagents = list(REAGENT_ID_OILSLICK = 1, REAGENT_ID_RADIUM = 1, REAGENT_ID_LIMEJUICE = 1)
result_amount = 2
/decl/chemical_reaction/instant/drinks/nuclearwaste_uranium
name = REAGENT_NUCLEARWASTE
name = REAGENT_NUCLEARWASTE + " 238"
id = "nuclearwasteuran"
result = REAGENT_ID_NUCLEARWASTE
required_reagents = list(REAGENT_ID_OILSLICK = 2, REAGENT_ID_URANIUM = 1)
@@ -1,5 +1,6 @@
/decl/chemical_reaction/instant/food
name = REAGENT_DEVELOPER_WARNING // Unit test ignore
wiki_flag = WIKI_FOOD
/decl/chemical_reaction/instant/food/hot_ramen
name = REAGENT_HOTRAMEN
@@ -30,7 +31,7 @@
return
/decl/chemical_reaction/instant/food/chocolate_bar
name = "Chocolate Bar"
name = "Chocolate Bar Soy"
id = "chocolate_bar_soy"
result = null
required_reagents = list(REAGENT_ID_SOYMILK = 2, REAGENT_ID_COCO = 2, REAGENT_ID_SUGAR = 2)
@@ -44,7 +45,7 @@
return
/decl/chemical_reaction/instant/food/chocolate_bar2
name = "Chocolate Bar"
name = "Chocolate Bar Milk"
id = "chocolate_bar_milk"
result = null
required_reagents = list(REAGENT_ID_MILK = 2, REAGENT_ID_COCO = 2, REAGENT_ID_SUGAR = 2)
@@ -58,7 +59,7 @@
return
/decl/chemical_reaction/instant/food/cookingoilcorn
name = REAGENT_COOKINGOIL
name = "corn " + REAGENT_COOKINGOIL
id = "cookingoilcorn"
result = REAGENT_ID_COOKINGOIL
required_reagents = list(REAGENT_ID_CORNOIL = 10)
@@ -66,7 +67,7 @@
result_amount = 10
/decl/chemical_reaction/instant/food/cookingoilpeanut
name = REAGENT_COOKINGOIL
name = "peanut " + REAGENT_ID_COOKINGOIL
id = "cookingoilpeanut"
result = REAGENT_ID_COOKINGOIL
required_reagents = list(REAGENT_ID_PEANUTOIL = 10)
@@ -45,6 +45,7 @@
var/list/glass_special = null // null equivalent to list()
var/from_belly = FALSE
var/wiki_flag = 0 // Bitflags for secret/food/drink reagent sorting
/datum/reagent/proc/remove_self(var/amount) // Shortcut
if(holder)
@@ -104,6 +104,7 @@
allergen_factor = 1 //simulates mixed drinks containing less of the allergen, as they have only a single actual reagent unlike food
affects_robots = 1 //kiss my shiny metal ass
wiki_flag = WIKI_DRINK
/datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount)
..()
+1
View File
@@ -54,6 +54,7 @@
sober_message_list = list("Everything feels a little more grounded.",
"Colors seem... flatter.",
"Everything feels a little dull, now.")
wiki_flag = WIKI_SPOILER
/datum/reagent/drugs/bliss/affect_blood(mob/living/carbon/M, var/alien, var/removed)
..()
@@ -12,6 +12,7 @@
var/injectable = 0
color = "#664330"
affects_robots = 1 //VOREStation Edit
wiki_flag = WIKI_FOOD
/datum/reagent/nutriment/mix_data(var/list/newdata, var/newamount)
@@ -411,6 +412,7 @@
nutriment_factor = 1
color = "#482000"
allergen_type = ALLERGEN_COFFEE | ALLERGEN_STIMULANT //Again, coffee contains coffee
wiki_flag = WIKI_DRINK
/datum/reagent/nutriment/tea
name = REAGENT_TEAPOWDER
@@ -421,6 +423,7 @@
nutriment_factor = 1
color = "#101000"
allergen_type = ALLERGEN_STIMULANT //Strong enough to contain caffeine
wiki_flag = WIKI_DRINK
/datum/reagent/nutriment/decaf_tea
name = REAGENT_DECAFTEAPOWDER
@@ -430,6 +433,7 @@
taste_mult = 1.3
nutriment_factor = 1
color = "#101000"
wiki_flag = WIKI_DRINK
/datum/reagent/nutriment/coco
name = REAGENT_COCO
@@ -461,6 +465,7 @@
taste_mult = 1.3
nutriment_factor = 1
allergen_type = ALLERGEN_FRUIT //I suppose it's implied here that the juice is from dehydrated fruit.
wiki_flag = WIKI_DRINK
/datum/reagent/nutriment/instantjuice/grape
name = REAGENT_INSTANTGRAPE
@@ -691,6 +696,7 @@
ingest_met = REM
color = "#000000"
cup_prefix = "peppery"
wiki_flag = WIKI_FOOD
/datum/reagent/enzyme
name = REAGENT_ENZYME
@@ -701,6 +707,7 @@
reagent_state = LIQUID
color = "#365E30"
overdose = REAGENTS_OVERDOSE
wiki_flag = WIKI_FOOD
/datum/reagent/spacespice
name = REAGENT_SPACESPICE
@@ -709,6 +716,7 @@
reagent_state = SOLID
color = "#e08702"
cup_prefix = "spicy"
wiki_flag = WIKI_FOOD
/datum/reagent/browniemix
name = REAGENT_BROWNIEMIX
@@ -717,6 +725,7 @@
reagent_state = SOLID
color = "#441a03"
allergen_type = ALLERGEN_CHOCOLATE
wiki_flag = WIKI_FOOD
/datum/reagent/cakebatter
name = REAGENT_CAKEBATTER
@@ -724,6 +733,7 @@
description = "A batter for making delicious cakes."
reagent_state = LIQUID
color = "#F0EDDA"
wiki_flag = WIKI_FOOD
/datum/reagent/frostoil
name = REAGENT_FROSTOIL
@@ -734,6 +744,7 @@
reagent_state = LIQUID
ingest_met = REM
color = "#B31008"
wiki_flag = WIKI_FOOD
/datum/reagent/frostoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -783,6 +794,7 @@
ingest_met = REM
color = "#B31008"
cup_prefix = "hot"
wiki_flag = WIKI_FOOD
/datum/reagent/capsaicin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -970,6 +982,7 @@
var/adj_temp = 0
var/nutriment_factor = 0 //CHOMPStation addition
var/water_based = TRUE
wiki_flag = WIKI_DRINK
/datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/strength_mod = 1
@@ -27,6 +27,7 @@
taste_mult = 1.3
nutriment_factor = 5
color = "#fff200"
wiki_flag = WIKI_DRINK
/datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjust_nutrition(-20 * removed)
@@ -543,6 +544,7 @@
id = REAGENT_ID_BRAINPROTEIN
taste_description = "fatty, mushy meat and allspice"
color = "#caa3c9"
wiki_flag = WIKI_FOOD|WIKI_SPOILER
/datum/reagent/nutriment/protein/brainzsnax/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -580,6 +582,7 @@
description = "A mixture of water and protein commonly used as a meal supplement."
taste_description = "pure protein"
color = "#ebd8cb"
wiki_flag = WIKI_DRINK
/datum/reagent/nutriment/protein_powder/vanilla
name = REAGENT_VANILLAPROTEINPOWDER
@@ -1392,6 +1392,7 @@
metabolism = REM * 4 // Nanomachines gotta go fast.
scannable = 1
affects_robots = TRUE
wiki_flag = WIKI_SPOILER
/datum/reagent/healing_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.heal_organ_damage(2 * removed, 2 * removed)
@@ -28,6 +28,7 @@
mrate_static = TRUE
overdose = 20 //High OD. This is to make numbing bites have somewhat of a downside if you get bit too much. Have to go to medical for dialysis.
scannable = 0 //Let's not have medical mechs able to make an extremely strong organic painkiller
wiki_flag = WIKI_SPOILER
/datum/reagent/numbing_enzyme/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 200)
+4
View File
@@ -176,6 +176,7 @@
glass_name = "liquid gold"
glass_desc = "It's magic. We don't have to explain it."
wiki_flag = WIKI_SPOILER
/datum/reagent/adminordrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
affect_blood(M, alien, removed)
@@ -316,6 +317,7 @@
affects_robots = TRUE
description = "The immense power of a supermatter crystal, in liquid form. You're not entirely sure how that's possible, but it's probably best handled with care."
taste_description = "taffy" // 0. The supermatter is tasty, tasty taffy.
wiki_flag = WIKI_SPOILER
// Same as if you boop it wrong. It touches you, you die
/datum/reagent/supermatter/affect_touch(mob/living/carbon/M, alien, removed)
@@ -357,6 +359,7 @@
glass_name = "holy water"
glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
wiki_flag = WIKI_SPOILER
/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -651,6 +654,7 @@
color = "#333333"
metabolism = REM * 3 // Broken nanomachines go a bit slower.
scannable = 1
wiki_flag = WIKI_SPOILER
/datum/reagent/defective_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.take_organ_damage(2 * removed, 2 * removed)
@@ -39,6 +39,7 @@
color = "#333333"
scannable = 1
affects_robots = TRUE
wiki_flag = WIKI_SPOILER
/datum/reagent/nif_repair_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
+16
View File
@@ -73,6 +73,7 @@
color = "#005555"
strength = 8
skin_danger = 0.4
wiki_flag = WIKI_SPOILER
/datum/reagent/toxin/neurotoxic_protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_CHIMERA)
@@ -201,6 +202,7 @@
taste_description = "mold"
reagent_state = SOLID
strength = 5
wiki_flag = WIKI_SPOILER
/datum/reagent/toxin/mold/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -215,6 +217,7 @@
reagent_state = LIQUID
strength = 5
filtered_organs = list(O_SPLEEN)
wiki_flag = WIKI_SPOILER
/datum/reagent/toxin/expired_medicine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -484,6 +487,7 @@
color = "#664330"
power = 2
meltdose = 30
wiki_flag = WIKI_SPOILER
/datum/reagent/acid/diet_digestive
name = REAGENT_DIETSTOMACID
@@ -494,6 +498,7 @@
color = "#664330"
power = 0.4
meltdose = 150
wiki_flag = WIKI_SPOILER
/datum/reagent/thermite/venom
name = REAGENT_THERMITEV
@@ -503,6 +508,7 @@
reagent_state = SOLID
color = "#673910"
touch_met = 50
wiki_flag = WIKI_SPOILER
/datum/reagent/thermite/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustFireLoss(3 * removed)
@@ -524,6 +530,7 @@
taste_description = "fire"
color = "#B31008"
filtered_organs = list(O_SPLEEN)
wiki_flag = WIKI_SPOILER
/datum/reagent/condensedcapsaicin/venom/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -635,6 +642,7 @@
taste_mult = 1.3
reagent_state = LIQUID
color = "#801E28"
wiki_flag = WIKI_SPOILER
/datum/reagent/slimejelly/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -762,6 +770,7 @@
glass_name = REAGENT_ID_BEER
glass_desc = "A freezing pint of beer"
wiki_flag = WIKI_SPOILER
/* Drugs */
@@ -774,6 +783,7 @@
color = "#202040"
metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
wiki_flag = WIKI_SPOILER
/datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -876,6 +886,7 @@
taste_description = "sludge"
reagent_state = LIQUID
color = "#13BC5E"
wiki_flag = WIKI_SPOILER
/datum/reagent/slimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.isSynthetic())
@@ -902,6 +913,7 @@
taste_description = "sludge"
reagent_state = LIQUID
color = "#FF69B4"
wiki_flag = WIKI_SPOILER
/datum/reagent/aslimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.isSynthetic())
@@ -935,6 +947,7 @@
color = "#555555"
metabolism = REM * 4 // Nanomachines. Fast.
affects_robots = TRUE
wiki_flag = WIKI_SPOILER
/datum/reagent/shredding_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustBruteLoss(4 * removed)
@@ -949,6 +962,7 @@
color = "#555555"
metabolism = REM * 4
affects_robots = TRUE
wiki_flag = WIKI_SPOILER
/datum/reagent/irradiated_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
SSradiation.radiate(get_turf(M), 20) // Irradiate people around you.
@@ -964,6 +978,7 @@
metabolism = REM * 4
filtered_organs = list(O_SPLEEN)
affects_robots = TRUE
wiki_flag = WIKI_SPOILER
/datum/reagent/neurophage_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjustBrainLoss(2 * removed) // Their job is to give you a bad time.
@@ -976,6 +991,7 @@
reagent_state = LIQUID
color = "#1E4600"
taste_mult = 0
wiki_flag = WIKI_SPOILER
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
+1 -1
View File
@@ -40,7 +40,7 @@
color = "#D18AA5"
/datum/reagent/toxin/phoron/phoronvirusfood
name = REAGENT_ADRANOLVIRUSFOOD
name = REAGENT_PHORONVIRUSFOOD
id = REAGENT_ID_PHORONVIRUSFOOD
description = "Mutates viruses when mixed in blood. This one seems to be the strongest."
color = "#A69DA9"
+8 -8
View File
@@ -88,12 +88,12 @@
switch(damage_type)
if("BRUTE")
H.visible_message(span_danger("\The [src] creaks as it ravages [H]'s hands!"))
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, BP_R_HAND, used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, BP_L_HAND, used_weapon=src)
if("BURN")
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, BP_R_HAND, used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, BP_L_HAND, used_weapon=src)
if("TOX")
H.visible_message(span_danger("\The [src] seethes and hisses like burning acid!"))
if(!H.isSynthetic())
@@ -145,12 +145,12 @@
switch(damage_type)
if("BRUTE")
H.visible_message(span_danger("\The [src] creaks as it ravages [H]'s hands!"))
H.apply_damage(rand(min_damage,max_damage), BRUTE, "r_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, "l_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, BP_R_HAND, used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BRUTE, BP_L_HAND, used_weapon=src)
if("BURN")
H.visible_message(span_danger("\The [src] flashes as it scorches [H]'s hands!"))
H.apply_damage(rand(min_damage,max_damage), BURN, "r_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, "l_hand", used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, BP_R_HAND, used_weapon=src)
H.apply_damage(rand(min_damage,max_damage), BURN, BP_L_HAND, used_weapon=src)
if("TOX")
H.visible_message(span_danger("\The [src] seethes and hisses like burning acid!"))
if(!H.isSynthetic())
+1 -1
View File
@@ -200,7 +200,7 @@
/datum/surgery_step/cavity/implant_removal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(affected.organ_tag == BP_HEAD)
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name[O_BRAIN]
return ..() && (!sponge || !sponge.damage)
else
return ..()
+6 -6
View File
@@ -533,12 +533,12 @@
user.balloon_alert(user, "you cannot install a computer brain into a meat skull") // CHOMPEdit
return SURGERY_FAILURE
if(!target.should_have_organ("brain"))
if(!target.should_have_organ(O_BRAIN))
to_chat(user, span_danger("You're pretty sure [target.species.name_plural] don't normally have a brain."))
user.balloon_alert(user, "you're pertty sure [target.species.name_plural] don't normall have a brain") // CHOMPEdit
return SURGERY_FAILURE
if(!isnull(target.internal_organs["brain"]))
if(!isnull(target.internal_organs[O_BRAIN]))
to_chat(user, span_danger("Your subject already has a brain."))
user.balloon_alert(user, "your subject already has a brain") // CHOMPEdit
return SURGERY_FAILURE
@@ -572,7 +572,7 @@
else
holder = new /obj/item/organ/internal/mmi_holder(target, 1, M) // Fallback to old behavior if organic MMI or if no subtype exists.
//VOREstation edit end
target.internal_organs_by_name["brain"] = holder
target.internal_organs_by_name[O_BRAIN] = holder
if(M.brainmob && M.brainmob.mind)
M.brainmob.mind.transfer_to(target)
@@ -640,12 +640,12 @@
user.balloon_alert(user, "you're fairly certain a nymph can't pilot a normal robot") // CHOMPEdit
return SURGERY_FAILURE
if(!target.should_have_organ("brain"))
if(!target.should_have_organ(O_BRAIN))
to_chat(user, span_danger("You're pretty sure [target.species.name_plural] don't normally have a brain."))
user.balloon_alert(user, "you're pretty sure [target.species.name_plural] don't normall have a brain") // CHOMPEdit
return SURGERY_FAILURE
if(!isnull(target.internal_organs["brain"]))
if(!isnull(target.internal_organs[O_BRAIN]))
to_chat(user, span_danger("Your subject already has a cephalon."))
user.balloon_alert(user, "your subject already has a cephalon") // CHOMPEdit
return SURGERY_FAILURE
@@ -667,7 +667,7 @@
var/obj/item/holder/diona/N = tool
var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1)
target.internal_organs_by_name["brain"] = cephalon
target.internal_organs_by_name[O_BRAIN] = cephalon
var/mob/living/carbon/alien/diona/D = N.held_mob
user.drop_from_inventory(tool)
@@ -687,6 +687,8 @@
var/list/usable_markings = markings.Copy() ^ body_marking_styles_list.Copy()
var/marking_styles[0]
for(var/marking_style in usable_markings)
if(marking_style == DEVELOPER_WARNING_NAME)
continue
var/datum/sprite_accessory/marking/S = body_marking_styles_list[marking_style]
var/our_iconstate = S.icon_state
if(LAZYLEN(S.body_parts))
+1 -1
View File
@@ -49,7 +49,7 @@
if(!job.minimum_character_age && !job.min_age_by_species)
return TRUE
var/min_age = job.get_min_age(prefs.species, prefs.organ_data["brain"])
var/min_age = job.get_min_age(prefs.species, prefs.organ_data[O_BRAIN])
if(prefs.read_preference(/datum/preference/numeric/human/age) >= min_age)
return TRUE
return FALSE
+1 -1
View File
@@ -1536,7 +1536,7 @@
holder = holdertmp
else
holder = new(body_backup, 1)
body_backup.internal_organs_by_name["brain"] = holder
body_backup.internal_organs_by_name[O_BRAIN] = holder
MMI.loc = holder
holder.stored_mmi = MMI
holder.update_from_mmi()
+2 -2
View File
@@ -13,9 +13,9 @@
return
if (hasorgans(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
var/obj/item/organ/external/temp = H.organs_by_name[BP_R_HAND]
if (user.hand)
temp = H.organs_by_name["l_hand"]
temp = H.organs_by_name[BP_L_HAND]
if(temp && !temp.is_usable())
to_chat(user, span_notice("You try to move your [temp.name], but cannot!"))
return
@@ -89,7 +89,7 @@
/obj/item/melee/artifact_blade/attack(mob/living/M, mob/living/user, var/target_zone)
if(M == user) //No accidentally hitting yourself and exploding.
return
var/zone = (user.hand ? "l_arm":"r_arm") //Which arm we're in!
var/zone = (user.hand ? BP_L_ARM:BP_R_ARM) //Which arm we're in!
var/prior_force = force
if(empowered)
force = force*2
+3
View File
@@ -655,6 +655,7 @@
description = "A slimy liquid which appears to rapidly clot internal hemorrhages by increasing the effectiveness of platelets at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
wiki_flag = WIKI_SPOILER
/datum/reagent/osteodaxon/slime
name = REAGENT_SLIMEBONEFIXER
@@ -662,6 +663,7 @@
description = "A slimy liquid which can be used to heal bone fractures at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
wiki_flag = WIKI_SPOILER
/datum/reagent/peridaxon/slime
name = REAGENT_SLIMEORGANFIXER
@@ -669,6 +671,7 @@
description = "A slimy liquid which is used to encourage recovery of internal organs and nervous systems in low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
wiki_flag = WIKI_SPOILER
// **************
@@ -218,3 +218,4 @@
color = "#FABA3A"
nutriment_factor = 30
taste_description = "slimy nectar"
wiki_flag = WIKI_FOOD|WIKI_SPOILER