From 56650f449d7d0108d963ef0d3266a30a4976f781 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 9 Feb 2020 16:36:46 -0600 Subject: [PATCH 001/127] Jail break objective --- code/game/gamemodes/objective.dm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 7da2177f35a..3bd847303a3 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -306,6 +306,29 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list name = "protect nonhuman" human_check = FALSE +/datum/objective/jailbreak + name = "jailbreak" + var/target_role_type=FALSE + martyr_compatible = 1 //why not? + +/datum/objective/jailbreak/find_target_by_role(role, role_type=FALSE,invert=FALSE) + if(!invert) + target_role_type = role_type + ..() + +/datum/objective/jailbreak/check_completion() + return completed || (considered_escaped(target)) + +/datum/objective/jailbreak/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role : target.special_role] escapes alive and out of custody." + else + explanation_text = "Free Objective" + +/datum/objective/jailbreak/admin_edit(mob/admin) + admin_simple_target_pick(admin) + /datum/objective/hijack name = "hijack" explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." @@ -1062,6 +1085,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/maroon, /datum/objective/debrain, /datum/objective/protect, + /datum/objective/jailbreak, /datum/objective/destroy, /datum/objective/hijack, /datum/objective/escape, From 5f27e0d33b5209749fa942e856c93b5244a2316c Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 9 Feb 2020 18:50:32 -0600 Subject: [PATCH 002/127] This is a one way mission --- code/game/gamemodes/objective.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3bd847303a3..1b21ad44679 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -308,8 +308,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/jailbreak name = "jailbreak" + martyr_compatible = true //why not? var/target_role_type=FALSE - martyr_compatible = 1 //why not? + /datum/objective/jailbreak/find_target_by_role(role, role_type=FALSE,invert=FALSE) if(!invert) From c5e75ec829932ec19905d9c50bb39a71e17b87fd Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 9 Feb 2020 18:52:09 -0600 Subject: [PATCH 003/127] WHY ARE WE YELLING --- code/game/gamemodes/objective.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 1b21ad44679..89fe6696a51 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -308,10 +308,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/jailbreak name = "jailbreak" - martyr_compatible = true //why not? + martyr_compatible = TRUE //why not? var/target_role_type=FALSE - /datum/objective/jailbreak/find_target_by_role(role, role_type=FALSE,invert=FALSE) if(!invert) target_role_type = role_type From 84aadd8897ea290882eba8d5f7dd81072ff3b446 Mon Sep 17 00:00:00 2001 From: Mickyan Date: Tue, 11 Feb 2020 20:37:23 +0100 Subject: [PATCH 004/127] things --- code/game/objects/items/robot/robot_items.dm | 8 +- .../food_and_drinks/food/snacks_other.dm | 76 ++++++++++++------- .../chemistry/reagents/drug_reagents.dm | 3 +- 3 files changed, 55 insertions(+), 32 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index a546f68dc01..13c0cc5bfd0 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -390,7 +390,7 @@ var/obj/item/reagent_containers/food/snacks/L switch(mode) if(DISPENSE_LOLLIPOP_MODE) - L = new /obj/item/reagent_containers/food/snacks/lollipop(T) + L = new /obj/item/reagent_containers/food/snacks/chewable/lollipop(T) if(DISPENSE_ICECREAM_MODE) L = new /obj/item/reagent_containers/food/snacks/icecream(T) var/obj/item/reagent_containers/food/snacks/icecream/I = L @@ -517,13 +517,13 @@ name = "lollipop" desc = "Oh noes! A fast-moving lollipop!" icon_state = "lollipop_1" - ammo_type = /obj/item/reagent_containers/food/snacks/lollipop/cyborg + ammo_type = /obj/item/reagent_containers/food/snacks/chewable/lollipop/cyborg var/color2 = rgb(0, 0, 0) nodamage = TRUE /obj/projectile/bullet/reusable/lollipop/Initialize() . = ..() - var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(src) + var/obj/item/reagent_containers/food/snacks/chewable/lollipop/S = new ammo_type(src) color2 = S.headcolor var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2") head.color = color2 @@ -532,7 +532,7 @@ /obj/projectile/bullet/reusable/lollipop/handle_drop() if(!dropped) var/turf/T = get_turf(src) - var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(T) + var/obj/item/reagent_containers/food/snacks/chewable/lollipop/S = new ammo_type(T) S.change_head_color(color2) dropped = TRUE diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 8e93b8b4782..50cf0faf252 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -420,29 +420,14 @@ tastes = list("cherry" = 1, "crepe" = 1) foodtype = GRAIN | FRUIT | SUGAR -/obj/item/reagent_containers/food/snacks/lollipop - name = "lollipop" - desc = "A delicious lollipop. Makes for a great Valentine's present." - icon = 'icons/obj/lollipop.dmi' - icon_state = "lollipop_stick" - item_state = "lollipop_stick" +/obj/item/reagent_containers/food/snacks/chewable slot_flags = ITEM_SLOT_MASK - list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //Honk - var/mutable_appearance/head - var/headcolor = rgb(0, 0, 0) var/succ_dur = 180 var/succ_int = 100 var/next_succ = 0 - tastes = list("candy" = 1) - foodtype = JUNKFOOD | SUGAR -/obj/item/reagent_containers/food/snacks/lollipop/Initialize() - . = ..() - head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head") - change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) - - //makes lollipops actually wearable as masks and still edible the old fashioned way. -/obj/item/reagent_containers/food/snacks/lollipop/proc/handle_reagents() + //makes snacks actually wearable as masks and still edible the old fashioned way. +/obj/item/reagent_containers/food/snacks/chewable/proc/handle_reagents() if(reagents.total_volume) if(iscarbon(loc)) var/mob/living/carbon/C = loc @@ -454,7 +439,7 @@ return reagents.remove_any(REAGENTS_METABOLISM) -/obj/item/reagent_containers/food/snacks/lollipop/process() +/obj/item/reagent_containers/food/snacks/chewable/process() if(iscarbon(loc)) if(succ_dur < 1) qdel(src) @@ -464,43 +449,80 @@ handle_reagents() next_succ = world.time + succ_int -/obj/item/reagent_containers/food/snacks/lollipop/equipped(mob/user, slot) +/obj/item/reagent_containers/food/snacks/chewable/equipped(mob/user, slot) . = ..() if(slot == ITEM_SLOT_MASK) START_PROCESSING(SSobj, src) else STOP_PROCESSING(SSobj, src) -/obj/item/reagent_containers/food/snacks/lollipop/Destroy() +/obj/item/reagent_containers/food/snacks/chewable/lollipop/Destroy() STOP_PROCESSING(SSobj, src) . = ..() -/obj/item/reagent_containers/food/snacks/lollipop/proc/change_head_color(C) +/obj/item/reagent_containers/food/snacks/chewable/lollipop + name = "lollipop" + desc = "A delicious lollipop. Makes for a great Valentine's present." + icon = 'icons/obj/lollipop.dmi' + icon_state = "lollipop_stick" + item_state = "lollipop_stick" + list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //Honk + var/mutable_appearance/head + var/headcolor = rgb(0, 0, 0) + succ_dur = 180 + succ_int = 100 + next_succ = 0 + tastes = list("candy" = 1) + foodtype = JUNKFOOD | SUGAR + +/obj/item/reagent_containers/food/snacks/chewable/lollipop/Initialize() + . = ..() + head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head") + change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) + +/obj/item/reagent_containers/food/snacks/chewable/lollipop/proc/change_head_color(C) headcolor = C cut_overlay(head) head.color = C add_overlay(head) -/obj/item/reagent_containers/food/snacks/lollipop/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/reagent_containers/food/snacks/chewable/lollipop/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) ..(hit_atom) throw_speed = 1 throwforce = 0 -/obj/item/reagent_containers/food/snacks/lollipop/cyborg +/obj/item/reagent_containers/food/snacks/chewable/lollipop/cyborg var/spamchecking = TRUE -/obj/item/reagent_containers/food/snacks/lollipop/cyborg/Initialize() +/obj/item/reagent_containers/food/snacks/chewable/lollipop/cyborg/Initialize() . = ..() addtimer(CALLBACK(src, .proc/spamcheck), 1200) -/obj/item/reagent_containers/food/snacks/lollipop/cyborg/equipped(mob/living/user, slot) +/obj/item/reagent_containers/food/snacks/chewable/lollipop/cyborg/equipped(mob/living/user, slot) . = ..(user, slot) spamchecking = FALSE -/obj/item/reagent_containers/food/snacks/lollipop/cyborg/proc/spamcheck() +/obj/item/reagent_containers/food/snacks/chewable/lollipop/cyborg/proc/spamcheck() if(spamchecking) qdel(src) +/obj/item/reagent_containers/food/snacks/chewable/chewinggum + name = "chewing gum" + desc = "A rubbery strip of gum. Not exactly filling, but it keeps you busy." + icon = 'icons/obj/lollipop.dmi' + icon_state = "chewinggum" + item_state = "chewinggum" + color = "#FFFFFF" // craftable custom gums someday, maybe? + list_reagents = list(/datum/reagent/consumable/sugar = 5) + tastes = list("candy" = 1) + +/obj/item/reagent_containers/food/snacks/chewable/chewinggum/happiness + name = "smile! gum" + desc = "A rubbery strip of gum. The color and smell isn't very inviting." + list_reagents = list(/datum/reagent/drug/happiness = 15, /datum/reagent/consumable/sugar = 5) + tastes = list("paint thinner" = 1) + color = "#EE35FF" + /obj/item/reagent_containers/food/snacks/gumball name = "gumball" desc = "A colorful, sugary gumball." diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 87c1fe954a0..a3d36e28455 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -369,9 +369,10 @@ name = "Happiness" description = "Fills you with ecstasic numbness and causes minor brain damage. Highly addictive. If overdosed causes sudden mood swings." reagent_state = LIQUID - color = "#FFF378" + color = "#EE35FF" addiction_threshold = 10 overdose_threshold = 20 + taste_description = "paint thinner" /datum/reagent/drug/happiness/on_mob_metabolize(mob/living/L) ..() From 3370b5a4e6e480c1ea7a360ef3cbcc7f0b955a31 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 11 Feb 2020 18:34:51 -0600 Subject: [PATCH 005/127] detain it --- code/game/gamemodes/objective.dm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 89fe6696a51..036e42e9bdf 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -329,6 +329,29 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/jailbreak/admin_edit(mob/admin) admin_simple_target_pick(admin) +/datum/objective/detain + name = "detain" + martyr_compatible = TRUE + var/target_role_type=FALSE + +/datum/objective/detain/find_target_by_role(role, role_type=FALSE,invert=FALSE) + if(!invert) + target_role_type = role_type + ..() + +/datum/objective/detain/check_completion() + return completed || (!considered_escaped(target) && (considered_alive(target) && target.current.onCentCom())) + +/datum/objective/detain/update_explanation_text() + ..() + if(target && target.current) + explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role : target.special_role] is delivered to nanotrasen alive and in custody." + else + explanation_text = "Free Objective" + +/datum/objective/detain/admin_edit(mob/admin) + admin_simple_target_pick(admin) + /datum/objective/hijack name = "hijack" explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." @@ -1086,6 +1109,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/debrain, /datum/objective/protect, /datum/objective/jailbreak, + /datum/objective/detain, /datum/objective/destroy, /datum/objective/hijack, /datum/objective/escape, From e1b5781c6f77c951bf12c37ae897546ef2691da6 Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Thu, 13 Feb 2020 03:00:31 -0800 Subject: [PATCH 006/127] gg --- code/modules/ninja/suit/ninjaDrainAct.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index b8e18fa465a..efaa497c4d0 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -115,7 +115,7 @@ They *could* go in their appropriate files, but this is supposed to be modular update_icon() /obj/machinery/proc/AI_notify_hack() - var/turf/location = get_turf(src) + var/area/location = get_area(src) var/alertstr = "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]." for(var/mob/living/silicon/ai/AI in GLOB.player_list) to_chat(AI, alertstr) From ca8647607ef7bb5873c355ab632ad2e8e7d70e19 Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Thu, 13 Feb 2020 03:02:21 -0800 Subject: [PATCH 007/127] fix 2 --- code/modules/ninja/suit/ninjaDrainAct.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index efaa497c4d0..ad629269b0c 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -116,7 +116,7 @@ They *could* go in their appropriate files, but this is supposed to be modular /obj/machinery/proc/AI_notify_hack() var/area/location = get_area(src) - var/alertstr = "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]." + var/alertstr = "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]." for(var/mob/living/silicon/ai/AI in GLOB.player_list) to_chat(AI, alertstr) From b0616160f236f670e0221f093c0ad2116c5238ed Mon Sep 17 00:00:00 2001 From: Mickyan Date: Sat, 15 Feb 2020 15:33:43 +0100 Subject: [PATCH 008/127] progress? --- .../food_and_drinks/food/snacks_other.dm | 16 ++++++++-------- icons/mob/clothing/mask.dmi | Bin 51230 -> 51413 bytes icons/obj/food/food.dmi | Bin 69170 -> 69431 bytes 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 50cf0faf252..5d240dc87eb 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -432,6 +432,7 @@ if(iscarbon(loc)) var/mob/living/carbon/C = loc if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob + to_chat(world, "handle_reagents") var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1) reagents.reaction(C, INGEST, fraction) if(!reagents.trans_to(C, REAGENTS_METABOLISM)) @@ -456,7 +457,7 @@ else STOP_PROCESSING(SSobj, src) -/obj/item/reagent_containers/food/snacks/chewable/lollipop/Destroy() +/obj/item/reagent_containers/food/snacks/chewable/Destroy() STOP_PROCESSING(SSobj, src) . = ..() @@ -506,17 +507,16 @@ if(spamchecking) qdel(src) -/obj/item/reagent_containers/food/snacks/chewable/chewinggum - name = "chewing gum" +/obj/item/reagent_containers/food/snacks/chewable/bubblegum + name = "bubblegum gum" desc = "A rubbery strip of gum. Not exactly filling, but it keeps you busy." - icon = 'icons/obj/lollipop.dmi' - icon_state = "chewinggum" - item_state = "chewinggum" - color = "#FFFFFF" // craftable custom gums someday, maybe? + icon_state = "bubblegum" + item_state = "bubblegum" + color = "#FFFFFF" // craftable custom gums someday? list_reagents = list(/datum/reagent/consumable/sugar = 5) tastes = list("candy" = 1) -/obj/item/reagent_containers/food/snacks/chewable/chewinggum/happiness +/obj/item/reagent_containers/food/snacks/chewable/bubblegum/happiness name = "smile! gum" desc = "A rubbery strip of gum. The color and smell isn't very inviting." list_reagents = list(/datum/reagent/drug/happiness = 15, /datum/reagent/consumable/sugar = 5) diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 7ae1fd2c79396ebba8683827fe549605877f94b5..5b416d578a21719f2b803a5da5a1086cb4d73316 100644 GIT binary patch delta 16701 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 Ua$r6VGwQYO>D?{9{p8L60V`&&rT_o{ delta 15612 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 delta 14714 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 Y;wBaH3D(h?KDe6emm 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 From 56d08f9908fbaef6e30d63a53b40fe639798afe5 Mon Sep 17 00:00:00 2001 From: Mickyan Date: Sun, 16 Feb 2020 16:49:37 +0100 Subject: [PATCH 009/127] space drugs --- code/datums/mood_events/drug_events.dm | 4 ++-- code/game/objects/items/storage/boxes.dm | 22 +++++++++++++++++++ code/game/objects/items/storage/firstaid.dm | 8 ------- .../food_and_drinks/food/snacks_other.dm | 9 +++++++- .../reagents/reagent_containers/pill.dm | 6 ----- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 15102a0cfe8..5b30b521837 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -11,7 +11,7 @@ description = "I hate that brand of cigarettes.\n" mood_change = -2 timeout = 6 MINUTES - + /datum/mood_event/overdose mood_change = -8 timeout = 5 MINUTES @@ -44,7 +44,7 @@ description = "[drug_name]! [drug_name]! [drug_name]!\n" /datum/mood_event/happiness_drug - description = "I can't feel anything and I never want this to end.\n" + description = "Can't feel a thing...\n" mood_change = 50 /datum/mood_event/happiness_drug_good_od diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 2de1c004eb7..f4b0cbb622c 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1266,3 +1266,25 @@ /obj/item/storage/box/sparklers/PopulateContents() for(var/i in 1 to 7) new/obj/item/sparkler(src) + +/obj/item/storage/box/gum + name = "bubblegum packet" + desc = "The packaging is entirely in japanese, apparently. You can't make out a single word of it." + icon_state = "bubblegum_generic" + illustration = null + foldable = null + +/obj/item/storage/box/gum/nicotine + name = "nicotine gum packet" + desc = "Designed to help with nicotine addiction and oral fixation all at once without destroying your lungs in the process. Mint flavored!" + icon_state = "bubblegum_nicotine" + +/obj/item/storage/box/gum/happiness + name = "HP+ gum packet" + desc = "A seemingly homemade packaging with an odd smell. It has a weird drawing of a smiling face sticking out its tongue." + icon_state = "bubblegum_happiness" + +/obj/item/storage/box/gum/happiness/Initialize() + . = ..() + if (prob(50)) + desc += "You can faintly make out the word 'Hemopagopril' was once scribbled on the faded packaging." \ No newline at end of file diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 88968a6f78a..0a4c7609479 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -435,14 +435,6 @@ for(var/i in 1 to 7) new /obj/item/reagent_containers/pill/psicodine(src) -/obj/item/storage/pill_bottle/happiness - name = "happiness pill bottle" - desc = "The label is long gone, in its place an 'H' written with a marker." - -/obj/item/storage/pill_bottle/happiness/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/happiness(src) - /obj/item/storage/pill_bottle/penacid name = "bottle of pentetic acid pills" desc = "Contains pills to expunge radiation and toxins." diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 5d240dc87eb..1770efae4e0 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -516,9 +516,16 @@ list_reagents = list(/datum/reagent/consumable/sugar = 5) tastes = list("candy" = 1) -/obj/item/reagent_containers/food/snacks/chewable/bubblegum/happiness +/obj/item/reagent_containers/food/snacks/chewable/bubblegum/nicotine name = "smile! gum" desc = "A rubbery strip of gum. The color and smell isn't very inviting." + list_reagents = list(/datum/reagent/drug/nicotine = 5, /datum/reagent/consumable/menthol = 5, /datum/reagent/consumable/sugar = 5) + tastes = list("mint" = 1) + color = "#60A584" + +/obj/item/reagent_containers/food/snacks/chewable/bubblegum/happiness + name = "smile! gum" + desc = "A rubbery strip of gum. It smells funny." list_reagents = list(/datum/reagent/drug/happiness = 15, /datum/reagent/consumable/sugar = 5) tastes = list("paint thinner" = 1) color = "#EE35FF" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 13f29c06be2..e4ec49ad676 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -218,12 +218,6 @@ list_reagents = list(/datum/reagent/drug/aranesp = 10) icon_state = "pill3" -/obj/item/reagent_containers/pill/happiness - name = "happiness pill" - desc = "It has a creepy smiling face on it." - icon_state = "pill_happy" - list_reagents = list(/datum/reagent/drug/happiness = 10) - /obj/item/reagent_containers/pill/floorpill name = "floorpill" desc = "A strange pill found in the depths of maintenance" From 14fd4d745b886f9eb3507cc20242da779ba262e0 Mon Sep 17 00:00:00 2001 From: Arkatos Date: Mon, 17 Feb 2020 19:58:40 +0100 Subject: [PATCH 010/127] Basic assembly cleanup, ui_status and ui_host fixes --- code/modules/assembly/assembly.dm | 23 +++++++++++------------ code/modules/assembly/signaler.dm | 29 ++++++++++++----------------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 4e0c5a92eb2..7fb5a7fefe4 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -16,7 +16,8 @@ throwforce = 2 throw_speed = 3 throw_range = 7 - + drop_sound = 'sound/items/handling/component_drop.ogg' + pickup_sound = 'sound/items/handling/component_pickup.ogg' var/is_position_sensitive = FALSE //set to true if the device has different icons for each position. //This will prevent things such as visible lasers from facing the incorrect direction when transformed by assembly_holder's update_icon() var/secured = TRUE @@ -25,24 +26,23 @@ var/wire_type = WIRE_RECEIVE | WIRE_PULSE var/attachable = FALSE // can this be attached to wires var/datum/wires/connected = null - var/next_activate = 0 //When we're next allowed to activate - for spam control - drop_sound = 'sound/items/handling/component_drop.ogg' - pickup_sound = 'sound/items/handling/component_pickup.ogg' /obj/item/assembly/get_part_rating() return 1 /obj/item/assembly/proc/on_attach() -/obj/item/assembly/proc/on_detach() //call this when detaching it from a device. handles any special functions that need to be updated ex post facto +//Call this when detaching it from a device. handles any special functions that need to be updated ex post facto +/obj/item/assembly/proc/on_detach() if(!holder) return FALSE forceMove(holder.drop_location()) holder = null return TRUE -/obj/item/assembly/proc/holder_movement() //Called when the holder is moved +//Called when the holder is moved +/obj/item/assembly/proc/holder_movement() if(!holder) return FALSE setDir(holder.dir) @@ -54,7 +54,6 @@ return FALSE return TRUE - //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs /obj/item/assembly/proc/pulsed(radio = FALSE) if(wire_type & WIRE_RECEIVE) @@ -63,7 +62,6 @@ INVOKE_ASYNC(src, .proc/activate) return TRUE - //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct /obj/item/assembly/proc/pulse(radio = FALSE) if(connected && wire_type) @@ -75,7 +73,6 @@ holder.process_activation(src, 0, 1) return TRUE - // What the device does when turned on /obj/item/assembly/proc/activate() if(QDELETED(src) || !secured || (next_activate > world.time)) @@ -83,13 +80,11 @@ next_activate = world.time + 30 return TRUE - /obj/item/assembly/proc/toggle_secure() secured = !secured update_icon() return secured - /obj/item/assembly/attackby(obj/item/W, mob/user, params) if(isassembly(W)) var/obj/item/assembly/A = W @@ -116,7 +111,6 @@ . = ..() . += "\The [src] [secured? "is secured and ready to be used!" : "can be attached to other things."]" - /obj/item/assembly/attack_self(mob/user) if(!user) return FALSE @@ -126,3 +120,8 @@ /obj/item/assembly/interact(mob/user) return ui_interact(user) + +/obj/item/assembly/ui_host(mob/user) + if(holder) + return holder + return src diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 41f229b49ec..f58324f2d4f 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -8,7 +8,10 @@ custom_materials = list(/datum/material/iron=400, /datum/material/glass=120) wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE attachable = TRUE - + drop_sound = 'sound/items/handling/component_drop.ogg' + pickup_sound = 'sound/items/handling/component_pickup.ogg' + var/ui_x = 280 + var/ui_y = 132 var/code = DEFAULT_SIGNALER_CODE var/frequency = FREQ_SIGNALER var/datum/radio_frequency/radio_connection @@ -17,8 +20,6 @@ ///Holds a reference string to the mob, decides how much of a gamer you are. var/suicide_mob var/hearing_range = 1 - drop_sound = 'sound/items/handling/component_drop.ogg' - pickup_sound = 'sound/items/handling/component_pickup.ogg' /obj/item/assembly/signaler/suicide_act(mob/living/carbon/user) user.visible_message("[user] eats \the [src]! If it is signaled, [user.p_they()] will die!") @@ -47,7 +48,6 @@ . = ..() set_frequency(frequency) - /obj/item/assembly/signaler/Destroy() SSradio.remove_object(src,frequency) suicider = null @@ -64,14 +64,16 @@ holder.update_icon() return -/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - if(!is_secured(user)) - return +/obj/item/assembly/signaler/ui_status(mob/user) + if(is_secured(user)) + return ..() + return UI_CLOSE + +/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - var/ui_width = 280 - var/ui_height = 132 - ui = new(user, src, ui_key, "signaler", name, ui_width, ui_height, master_ui, state) + ui = new(user, src, ui_key, "signaler", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/assembly/signaler/ui_data(mob/user) @@ -80,7 +82,6 @@ data["code"] = code data["minFrequency"] = MIN_FREE_FREQ data["maxFrequency"] = MAX_FREE_FREQ - return data /obj/item/assembly/signaler/ui_act(action, params) @@ -109,7 +110,6 @@ update_icon() - /obj/item/assembly/signaler/attackby(obj/item/W, mob/user, params) if(issignaler(W)) var/obj/item/assembly/signaler/signaler2 = W @@ -131,9 +131,6 @@ if(usr) GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") - - return - /obj/item/assembly/signaler/receive_signal(datum/signal/signal) . = FALSE if(!signal) @@ -153,7 +150,6 @@ LM.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) return TRUE - /obj/item/assembly/signaler/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency @@ -182,7 +178,6 @@ return return ..(signal) - // Embedded signaller used in anomalies. /obj/item/assembly/signaler/anomaly name = "anomaly core" From 187b698edd763541145dcff4a7b4d1310354b370 Mon Sep 17 00:00:00 2001 From: Arkatos Date: Mon, 17 Feb 2020 22:08:49 +0100 Subject: [PATCH 011/127] Assembly UI sanity, cleanup, TTV UI --- .../objects/items/devices/transfer_valve.dm | 116 +++++++++--------- .../tgui/interfaces/ProximitySensor.js | 10 +- tgui/packages/tgui/interfaces/Timer.js | 4 + .../packages/tgui/interfaces/TransferValve.js | 88 +++++++++++++ tgui/packages/tgui/public/tgui.bundle.js | 4 +- tgui/packages/tgui/routes.js | 5 + 6 files changed, 166 insertions(+), 61 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/TransferValve.js diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 5b012089f8e..eed5ce2c838 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -7,12 +7,14 @@ righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' desc = "Regulates the transfer of air between two tanks." w_class = WEIGHT_CLASS_BULKY + var/ui_x = 310 + var/ui_y = 310 var/obj/item/tank/tank_one var/obj/item/tank/tank_two var/obj/item/assembly/attached_device var/mob/attacher = null var/valve_open = FALSE - var/toggle = 1 + var/toggle = TRUE /obj/item/transfer_valve/IsAssemblyHolder() return TRUE @@ -54,7 +56,7 @@ attacher = user return -//Attached device memes +//These keep attached devices synced up, for example a TTV with a mouse trap being found in a bag so it's triggered, or moving the TTV with an infrared beam sensor to update the beam's direction. /obj/item/transfer_valve/Move() . = ..() if(attached_device) @@ -74,58 +76,14 @@ if(attached_device) attached_device.Crossed(AM) -/obj/item/transfer_valve/attack_hand()//Triggers mousetraps +//Triggers mousetraps +/obj/item/transfer_valve/attack_hand() . = ..() if(.) return if(attached_device) attached_device.attack_hand() -//These keep attached devices synced up, for example a TTV with a mouse trap being found in a bag so it's triggered, or moving the TTV with an infrared beam sensor to update the beam's direction. - - -/obj/item/transfer_valve/attack_self(mob/user) - user.set_machine(src) - var/dat = {" Valve properties: -
Attachment one: [tank_one] [tank_one ? "
Remove" : ""] -
Attachment two: [tank_two] [tank_two ? "Remove" : ""] -
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] -
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} - - var/datum/browser/popup = new(user, "trans_valve", name) - popup.set_content(dat) - popup.open() - return - -/obj/item/transfer_valve/Topic(href, href_list) - ..() - if(!usr.canUseTopic(src, BE_CLOSE)) - return - if(tank_one && href_list["tankone"]) - split_gases() - valve_open = FALSE - tank_one.forceMove(drop_location()) - tank_one = null - update_icon() - else if(tank_two && href_list["tanktwo"]) - split_gases() - valve_open = FALSE - tank_two.forceMove(drop_location()) - tank_two = null - update_icon() - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) - attached_device.on_detach() - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - - attack_self(usr) - add_fingerprint(usr) - /obj/item/transfer_valve/proc/process_activation(obj/item/D) if(toggle) toggle = FALSE @@ -186,11 +144,10 @@ tank_one.air_contents.merge(temp) tank_two.air_contents.volume -= tank_one.air_contents.volume - /* +/* Exadv1: I know this isn't how it's going to work, but this was just to check it explodes properly when it gets a signal (and it does). - */ - +*/ /obj/item/transfer_valve/proc/toggle_valve() if(!valve_open && tank_one && tank_two) valve_open = TRUE @@ -216,7 +173,6 @@ admin_bomber_message = " - Last touched by: [ADMIN_LOOKUPFLW(bomber)]" bomber_message = " - Last touched by: [key_name_admin(bomber)]" - var/admin_bomb_message = "Bomb valve opened in [ADMIN_VERBOSEJMP(bombturf)][admin_attachment_message][admin_bomber_message]" GLOB.bombers += admin_bomb_message message_admins(admin_bomb_message) @@ -230,8 +186,58 @@ split_gases() valve_open = FALSE update_icon() - -// this doesn't do anything but the timer etc. expects it to be here -// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs +/* + This doesn't do anything but the timer etc. expects it to be here + eventually maybe have it update icon to show state (timer, prox etc.) like old bombs +*/ /obj/item/transfer_valve/proc/c_state() return + +/obj/item/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "transfer_valve", name, ui_x, ui_y, master_ui, state) + ui.open() + +/obj/item/transfer_valve/ui_data(mob/user) + var/list/data = list() + data["tank_one"] = tank_one + data["tank_two"] = tank_two + data["attached_device"] = attached_device + data["valve"] = valve_open + return data + +/obj/item/transfer_valve/ui_act(action, params) + if(..()) + return + + switch(action) + if("tankone") + if(tank_one) + split_gases() + valve_open = FALSE + tank_one.forceMove(drop_location()) + tank_one = null + . = TRUE + if("tanktwo") + if(tank_two) + split_gases() + valve_open = FALSE + tank_two.forceMove(drop_location()) + tank_two = null + . = TRUE + if("toggle") + toggle_valve() + . = TRUE + if("device") + if(attached_device) + attached_device.attack_self(usr) + . = TRUE + if("remove_device") + if(attached_device) + attached_device.on_detach() + attached_device = null + . = TRUE + + update_icon() diff --git a/tgui/packages/tgui/interfaces/ProximitySensor.js b/tgui/packages/tgui/interfaces/ProximitySensor.js index d0fb57602a5..82f99afc8b1 100644 --- a/tgui/packages/tgui/interfaces/ProximitySensor.js +++ b/tgui/packages/tgui/interfaces/ProximitySensor.js @@ -25,12 +25,14 @@ export const ProximitySensor = props => {