From 23809ac6d5221cbc7e2927dd374cb51ea7ec7f34 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Sun, 22 May 2022 02:11:47 +0200
Subject: [PATCH] [MIRROR] Adds Puzzgrid smite to trap enemy gamers in a
fiendishly hard puzzle [MDB IGNORE] (#13780)
* Adds Puzzgrid smite to trap enemy gamers in a fiendishly hard puzzle (#66855)
* Puzzgrids
* Adds Puzzgrid smite to trap enemy gamers in a fiendishly hard puzzle
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
---
code/__DEFINES/rust_g.dm | 49 ++++
code/__HELPERS/text.dm | 2 +-
code/datums/components/puzzgrid.dm | 306 +++++++++++++++++++++
code/modules/admin/admin_verbs.dm | 1 +
code/modules/admin/smites/puzzgrid.dm | 118 ++++++++
code/modules/admin/verbs/mapping.dm | 2 +-
code/modules/tgui/external.dm | 11 +
config/puzzgrids.txt | 4 +
rust_g.dll | Bin 6437888 -> 6271488 bytes
tgstation.dme | 2 +
tgui/packages/tgui/interfaces/Puzzgrid.tsx | 139 ++++++++++
11 files changed, 632 insertions(+), 2 deletions(-)
create mode 100644 code/datums/components/puzzgrid.dm
create mode 100644 code/modules/admin/smites/puzzgrid.dm
create mode 100644 config/puzzgrids.txt
create mode 100644 tgui/packages/tgui/interfaces/Puzzgrid.tsx
diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm
index c2fb07f2510..4b2ac79d8fd 100644
--- a/code/__DEFINES/rust_g.dm
+++ b/code/__DEFINES/rust_g.dm
@@ -41,6 +41,49 @@
/// Gets the version of rust_g
/proc/rustg_get_version() return call(RUST_G, "get_version")()
+
+/**
+ * Sets up the Aho-Corasick automaton with its default options.
+ *
+ * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+ * Arguments:
+ * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+ * * patterns - A non-associative list of strings to search for
+ * * replacements - Default replacements for this automaton, used with rustg_acreplace
+ */
+#define rustg_setup_acreplace(key, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
+
+/**
+ * Sets up the Aho-Corasick automaton using supplied options.
+ *
+ * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+ * Arguments:
+ * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+ * * options - An associative list like list("anchored" = 0, "ascii_case_insensitive" = 0, "match_kind" = "Standard"). The values shown on the example are the defaults, and default values may be omitted. See the identically named methods at https://docs.rs/aho-corasick/latest/aho_corasick/struct.AhoCorasickBuilder.html to see what the options do.
+ * * patterns - A non-associative list of strings to search for
+ * * replacements - Default replacements for this automaton, used with rustg_acreplace
+ */
+#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) call(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
+
+/**
+ * Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
+ *
+ * Arguments:
+ * * key - The key for the automaton
+ * * text - Text to run replacements on
+ */
+#define rustg_acreplace(key, text) call(RUST_G, "acreplace")(key, text)
+
+/**
+ * Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
+ *
+ * Arguments:
+ * * key - The key for the automaton
+ * * text - Text to run replacements on
+ * * replacements - Replacements for this call. Must be the same length as the set-up patterns
+ */
+#define rustg_acreplace_with_replacements(key, text, replacements) call(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
+
/**
* This proc generates a cellular automata noise grid which can be used in procedural generation methods.
*
@@ -65,6 +108,8 @@
#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname)
#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname)
#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname)
+#define rustg_file_get_line_count(fname) text2num(call(RUST_G, "file_get_line_count")(fname))
+#define rustg_file_seek_line(fname, line) call(RUST_G, "file_seek_line")(fname, "[line]")
#ifdef RUSTG_OVERRIDE_BUILTINS
#define file2text(fname) rustg_file_read("[fname]")
@@ -102,6 +147,10 @@
#define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle)
#define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]")
+#define rustg_time_microseconds(id) text2num(call(RUST_G, "time_microseconds")(id))
+#define rustg_time_milliseconds(id) text2num(call(RUST_G, "time_milliseconds")(id))
+#define rustg_time_reset(id) call(RUST_G, "time_reset")(id)
+
#define rustg_read_toml_file(path) json_decode(call(RUST_G, "toml_file_to_json")(path) || "null")
#define rustg_url_encode(text) call(RUST_G, "url_encode")("[text]")
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 24e2d863c25..a109e2b8ec9 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -993,7 +993,7 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
try
return json_decode(data)
catch
- return
+ return null
/proc/num2loadingbar(percent as num, numSquares = 20, reverse = FALSE)
var/loadstring = ""
diff --git a/code/datums/components/puzzgrid.dm b/code/datums/components/puzzgrid.dm
new file mode 100644
index 00000000000..65ac1a00881
--- /dev/null
+++ b/code/datums/components/puzzgrid.dm
@@ -0,0 +1,306 @@
+#define PUZZGRID_CONFIG "[global.config.directory]/puzzgrids.txt"
+#define PUZZGRID_GROUP_COUNT 4
+#define PUZZGRID_MAX_ATTEMPTS 10
+
+/// Attaches a puzzgrid to the atom.
+/// You are expected to pass in the puzzgrid, likely from create_random_puzzgrid().
+/// This is so you can handle when a puzzgrid can't be generated, either because the
+/// config does not exist, or because the config is not set up properly.
+/datum/component/puzzgrid
+ var/datum/puzzgrid/puzzgrid
+
+ /// Callback that will be called when you win
+ var/datum/callback/on_victory_callback
+
+ /// Callback that will be called when you lose, either through running out of time or running out of lives
+ var/datum/callback/on_fail_callback
+
+ /// The world timestamp for when the puzzgrid will fail, if timer was set in Initialize
+ var/time_to_finish
+
+ /// Every answer, in text, including already solved ones
+ var/list/all_answers
+
+ /// The answers, in text, that are currently selected
+ var/list/selected_answers = list()
+
+ /// The puzzgrid groups that have already been solved
+ var/list/datum/puzzgrid_group/solved_groups = list()
+
+ /// The number of lives left
+ var/lives = 3
+
+ COOLDOWN_DECLARE(wrong_group_select_cooldown)
+
+/datum/component/puzzgrid/Initialize(
+ datum/puzzgrid/puzzgrid,
+ timer,
+ datum/callback/on_victory_callback,
+ datum/callback/on_fail_callback,
+)
+ if (!isatom(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ if (!istype(puzzgrid))
+ stack_trace("Invalid puzzgrid passed: [puzzgrid]")
+ return COMPONENT_INCOMPATIBLE
+
+ src.puzzgrid = puzzgrid
+ src.on_victory_callback = on_victory_callback
+ src.on_fail_callback = on_fail_callback
+
+ all_answers = puzzgrid.answers.Copy()
+
+ if (!isnull(timer))
+ addtimer(CALLBACK(src, .proc/out_of_time), timer)
+ time_to_finish = world.time + timer
+
+/datum/component/puzzgrid/RegisterWithParent()
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand)
+
+/datum/component/puzzgrid/UnregisterFromParent()
+ UnregisterSignal(parent, COMSIG_ATOM_ATTACK_HAND)
+
+/datum/component/puzzgrid/proc/on_attack_hand(atom/source, mob/user)
+ SIGNAL_HANDLER
+
+ INVOKE_ASYNC(src, .proc/ui_interact, user)
+
+/datum/component/puzzgrid/ui_interact(mob/user, datum/tgui/ui)
+ . = ..()
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "Puzzgrid")
+ ui.open()
+
+/datum/component/puzzgrid/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if (.)
+ return .
+
+ switch (action)
+ if ("select")
+ return try_select(params["answer"])
+ if ("unselect")
+ return try_unselect(params["answer"])
+
+ return TRUE
+
+/datum/component/puzzgrid/proc/try_select(answer)
+ if (!(answer in all_answers))
+ return FALSE
+
+ if (!COOLDOWN_FINISHED(src, wrong_group_select_cooldown))
+ return TRUE
+
+ selected_answers |= answer
+
+ if (selected_answers.len < PUZZGRID_GROUP_COUNT)
+ return TRUE
+
+ var/list/current_selected_answers = selected_answers
+ selected_answers = list()
+
+ search_group:
+ for (var/datum/puzzgrid_group/puzzgrid_group in (puzzgrid.groups - solved_groups))
+ for (var/selected_answer in current_selected_answers)
+ if (!(selected_answer in puzzgrid_group.answers))
+ continue search_group
+
+ // This group has the right answers
+ solved_groups += puzzgrid_group
+
+ if (solved_groups.len == puzzgrid.groups.len - 1)
+ on_victory()
+ else
+ update_static_data_for_all_viewers()
+
+ return TRUE
+
+ COOLDOWN_START(src, wrong_group_select_cooldown, 0.2 SECONDS)
+
+ if (solved_groups.len == puzzgrid.groups.len - 2)
+ lives -= 1
+
+ if (lives == 0)
+ out_of_lives()
+
+ return TRUE
+
+/datum/component/puzzgrid/proc/try_unselect(answer)
+ selected_answers -= answer
+ return TRUE
+
+/datum/component/puzzgrid/proc/on_victory()
+ report_answers()
+ on_victory_callback?.InvokeAsync()
+ qdel(src)
+
+/datum/component/puzzgrid/proc/out_of_lives()
+ var/atom/movable/movable_parent = parent
+ if (istype(movable_parent))
+ movable_parent.say("Ran out of lives!", forced = "puzzgrid component")
+
+ fail()
+
+/datum/component/puzzgrid/proc/out_of_time()
+ var/atom/movable/movable_parent = parent
+ if (istype(movable_parent))
+ movable_parent.say("Ran out of time!", forced = "puzzgrid component")
+
+ fail()
+
+/datum/component/puzzgrid/proc/fail()
+ report_answers()
+ on_fail_callback?.InvokeAsync()
+ qdel(src)
+
+/datum/component/puzzgrid/proc/report_answers()
+ var/list/answers = list()
+ for (var/datum/puzzgrid_group/puzzgrid_group as anything in puzzgrid.groups)
+ var/list/answers_encoded = list()
+ for (var/answer in puzzgrid_group.answers)
+ answers_encoded += html_encode(answer)
+
+ answers += span_boldnotice("
[answers_encoded.Join(", ")]
") + span_notice("[html_encode(puzzgrid_group.description)]
")
+
+ var/message = answers.Join("-----
")
+
+ for (var/mob/mob as anything in get_hearers_in_view(DEFAULT_MESSAGE_RANGE, src))
+ to_chat(mob, message)
+
+/datum/component/puzzgrid/ui_data(mob/user)
+ return list(
+ "selected_answers" = selected_answers,
+ "time_left" = time_to_finish && (max(0, (time_to_finish - world.time) / (1 SECONDS))),
+ "wrong_group_select_cooldown" = !COOLDOWN_FINISHED(src, wrong_group_select_cooldown),
+ "lives" = lives,
+ )
+
+/datum/component/puzzgrid/ui_static_data(mob/user)
+ var/list/data = list()
+
+ data["answers"] = puzzgrid.answers
+
+ var/list/serialized_solved_groups = list()
+ for (var/datum/puzzgrid_group/solved_group as anything in solved_groups)
+ serialized_solved_groups += list(list(
+ "answers" = solved_group.answers,
+ ))
+
+ var/atom/atom_parent = parent
+
+ data["host"] = atom_parent.name
+ data["solved_groups"] = serialized_solved_groups
+
+ return data
+
+/// Returns a random puzzgrid from config.
+/// If config is empty, or no valid puzzgrids can be found in time, will return null.
+/proc/create_random_puzzgrid()
+ var/static/total_lines
+
+ if (isnull(total_lines))
+ total_lines = rustg_file_get_line_count(PUZZGRID_CONFIG)
+
+ if (isnull(total_lines))
+ // There was an error reading the file
+ total_lines = 0
+
+ if (total_lines == 0)
+ return null
+
+ for (var/_ in 1 to PUZZGRID_MAX_ATTEMPTS)
+ var/line_number = rand(0, total_lines - 1)
+ var/line = rustg_file_seek_line(PUZZGRID_CONFIG, line_number)
+ if (!line)
+ continue
+
+ var/line_json_decoded = safe_json_decode(line)
+ if (isnull(line_json_decoded))
+ log_config("Line [line_number + 1] in puzzgrids.txt is not a JSON: [line]")
+ continue
+
+ var/datum/puzzgrid/puzzgrid = new
+ var/populate_result = puzzgrid.populate(line_json_decoded)
+
+ if (populate_result == TRUE)
+ return puzzgrid
+ else
+ log_config("Line [line_number + 1] in puzzgrids.txt is not formatted correctly: [populate_result]")
+
+ stack_trace("No valid puzzgrid config could be found in [PUZZGRID_MAX_ATTEMPTS] attempts, please check config_error. If it is empty, then seek line is failing.")
+ return null
+
+/// Represents an individual puzzgrid
+/datum/puzzgrid
+ var/list/answers = list()
+ var/list/datum/puzzgrid_group/groups = list()
+
+/// Will populate a puzzgrid with the information from the JSON.
+/// Will return TRUE if the populate succeeded, or a string denoting the error otherwise.
+/datum/puzzgrid/proc/populate(list/from_json)
+ if (!islist(from_json))
+ return "Puzzgrid was not a list"
+
+ var/list/answers = list()
+ var/list/groups = list()
+
+ for (var/group_json in from_json)
+ if (!islist(group_json))
+ return "Group was not a list (received [json_encode(group_json)])"
+
+ if (!("cells" in group_json))
+ return "Group did not have a 'cells' field (received [json_encode(group_json)])"
+
+ if (!("description" in group_json))
+ return "Group did not have a 'description' field (received [json_encode(group_json)])"
+
+ var/datum/puzzgrid_group/group = new
+ group.answers = group_json["cells"]
+ group.description = group_json["description"]
+
+ answers += group.answers
+
+ groups += group
+
+ src.answers = shuffle(answers)
+ src.groups = groups
+
+ return TRUE
+
+/// Represents an individual group in a puzzgrid
+/datum/puzzgrid_group
+ var/list/answers = list()
+ var/description
+
+/// Debug verb for validating that all puzzgrids can be created successfully.
+/// Locked behind a verb because it's fairly slow and memory intensive.
+/client/proc/validate_puzzgrids()
+ set name = "Validate Puzzgrid Config"
+ set category = "Debug"
+
+ var/line_number = 0
+
+ for (var/line in world.file2list(PUZZGRID_CONFIG))
+ line_number += 1
+
+ if (length(line) == 0)
+ continue
+
+ var/line_json_decoded = safe_json_decode(line)
+ if (isnull(line_json_decoded))
+ to_chat(src, span_warning("Line [line_number] in puzzgrids.txt is not a JSON: [line]"))
+ continue
+
+ var/datum/puzzgrid/puzzgrid = new
+ var/populate_result = puzzgrid.populate(line_json_decoded)
+
+ if (populate_result != TRUE)
+ to_chat(src, span_warning("Line [line_number] in puzzgrids.txt is not formatted correctly: [populate_result]"))
+
+ to_chat(src, span_notice("Validated. If you did not see any errors, you're in the clear."))
+
+#undef PUZZGRID_CONFIG
+#undef PUZZGRID_GROUP_COUNT
+#undef PUZZGRID_MAX_ATTEMPTS
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 0edf9951aa8..f424c20d432 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -218,6 +218,7 @@ GLOBAL_PROTECT(admin_verbs_debug)
/client/proc/cmd_admin_toggle_fov,
/client/proc/cmd_admin_debug_traitor_objectives,
/client/proc/spawn_debug_full_crew,
+ /client/proc/validate_puzzgrids,
)
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
GLOBAL_PROTECT(admin_verbs_possess)
diff --git a/code/modules/admin/smites/puzzgrid.dm b/code/modules/admin/smites/puzzgrid.dm
new file mode 100644
index 00000000000..80b7f795ba9
--- /dev/null
+++ b/code/modules/admin/smites/puzzgrid.dm
@@ -0,0 +1,118 @@
+/// Turns the user into a puzzgrid
+/datum/smite/puzzgrid
+ name = "Puzzgrid"
+
+ var/timer
+ var/gib_on_loss
+
+/datum/smite/puzzgrid/configure(client/user)
+ var/timer = input(user, "How long should other people have to solve the grid? 0 gives infinite time.", "Puzzgrid", 0) as num | null
+ if (isnull(timer))
+ return FALSE
+
+ var/gib_on_loss = tgui_alert(user, "What should happen to them when they lose?", "Puzzgrid", list("Gib", "New puzzle")) == "Gib"
+
+ src.gib_on_loss = gib_on_loss
+ src.timer = timer == 0 ? null : (timer * 1 SECONDS)
+
+ return TRUE
+
+/datum/smite/puzzgrid/effect(client/user, mob/living/target)
+ . = ..()
+
+ var/datum/puzzgrid/puzzgrid = create_random_puzzgrid()
+ if (isnull(puzzgrid))
+ to_chat(user, span_warning("Couldn't create a puzzgrid! Maybe the config isn't setup?"))
+ return
+
+ var/obj/structure/puzzgrid_effect/puzzgrid_effect = new(target.loc, target, puzzgrid, timer, gib_on_loss)
+ target.forceMove(puzzgrid_effect)
+ puzzgrid_effect.visible_message(span_warning("[target] has suddenly transformed into a fiendishly hard puzzle!"))
+
+ playsound(puzzgrid_effect, 'sound/effects/magic.ogg', 70)
+
+/obj/structure/puzzgrid_effect
+ anchored = TRUE
+ density = TRUE
+ resistance_flags = INDESTRUCTIBLE
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "shield2"
+
+ var/mob/living/victim
+ var/timer
+ var/gib_on_loss
+
+/obj/structure/puzzgrid_effect/Initialize(mapload, mob/living/victim, datum/puzzgrid/puzzgrid, timer, gib_on_loss)
+ . = ..()
+
+ if (isnull(victim))
+ return
+
+ src.victim = victim
+ src.timer = timer
+ src.gib_on_loss = gib_on_loss
+
+ name = "[victim]'s fiendish curse"
+
+ ADD_TRAIT(victim, TRAIT_HANDS_BLOCKED, "[type]")
+ ADD_TRAIT(victim, TRAIT_IMMOBILIZED, "[type]")
+
+ add_puzzgrid_component(puzzgrid)
+
+/obj/structure/puzzgrid_effect/Destroy()
+ QDEL_NULL(victim)
+ return ..()
+
+/obj/structure/puzzgrid_effect/proc/add_puzzgrid_component(datum/puzzgrid/puzzgrid)
+ AddComponent( \
+ /datum/component/puzzgrid, \
+ puzzgrid = puzzgrid, \
+ timer = timer, \
+ on_victory_callback = CALLBACK(src, .proc/on_victory), \
+ on_fail_callback = CALLBACK(src, gib_on_loss ? .proc/loss_gib : .proc/loss_restart), \
+ )
+
+/obj/structure/puzzgrid_effect/proc/on_victory()
+ victim.forceMove(loc)
+ victim.Paralyze(5 SECONDS)
+ victim.visible_message(
+ span_notice("[victim] is unshackled from their fiendish prison!"),
+ span_notice("You are unshackled from your fiendish prison!"),
+ )
+
+ remove_traits()
+
+ victim = null
+
+ qdel(src)
+
+/obj/structure/puzzgrid_effect/proc/loss_gib()
+ victim.forceMove(loc)
+ victim.visible_message(
+ span_bolddanger("You were unable to free [victim] from their fiendish prison, leaving them as nothing more than a smattering of mush!"),
+ span_bolddanger("Your compatriates were unable to free you from your fiendish prison, leaving you as nothing more than a smattering of mush!"),
+ )
+ victim.gib()
+ victim = null
+
+ qdel(src)
+
+/obj/structure/puzzgrid_effect/proc/loss_restart()
+ var/datum/puzzgrid/puzzgrid = create_random_puzzgrid()
+ if (isnull(puzzgrid))
+ victim.forceMove(loc)
+ victim.Paralyze(5 SECONDS)
+ victim.visible_message(span_bolddanger("Despite completely failing the puzzle, through unbelievable luck, [victim] manages to break out anyway!"))
+ remove_traits()
+ qdel(src)
+ victim = null
+ return
+
+ visible_message(span_danger("The fiendishly hard puzzle shapeshifts into a different, equally as challenging puzzle!"))
+
+ // Defer until after the fail proc finishes, since that will qdel the component.
+ addtimer(CALLBACK(src, .proc/add_puzzgrid_component, puzzgrid), 0)
+
+/obj/structure/puzzgrid_effect/proc/remove_traits()
+ REMOVE_TRAIT(victim, TRAIT_HANDS_BLOCKED, "[type]")
+ REMOVE_TRAIT(victim, TRAIT_IMMOBILIZED, "[type]")
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index c37d5ff6c45..719aa475db7 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -493,7 +493,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
var/not_told = 0
var/list/valid_device_types = typecacheof(list(
- /obj/machinery/computer/atmos_control,
+ /obj/machinery/computer/atmos_control,
/obj/machinery/air_sensor,
/obj/machinery/atmospherics/components/unary/outlet_injector/monitored,
/obj/machinery/meter/monitored,
diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm
index 69888bd6417..6af2f94d2cb 100644
--- a/code/modules/tgui/external.dm
+++ b/code/modules/tgui/external.dm
@@ -62,6 +62,17 @@
if(ui)
ui.send_full_update()
+/**
+ * public
+ *
+ * Will force an update on static data for all viewers.
+ * Should be done manually whenever something happens to
+ * change static data.
+ */
+/datum/proc/update_static_data_for_all_viewers()
+ for (var/datum/tgui/window as anything in SStgui.open_uis_by_src[REF(src)])
+ window.send_full_update()
+
/**
* public
*
diff --git a/config/puzzgrids.txt b/config/puzzgrids.txt
new file mode 100644
index 00000000000..56e3ee99702
--- /dev/null
+++ b/config/puzzgrids.txt
@@ -0,0 +1,4 @@
+[{"cells": ["Hour", "Year", "Second", "Day"], "description": "Measurements of time."}, {"cells": ["Items", "Emits", "Smite", "Mites"], "description": "Anagrams of each other."}, {"cells": ["Little", "Miniature", "Tiny", "Wee"], "description": "Synonyms of small."}, {"cells": ["City", "Minute", "Times", "Mets"], "description": "Words that can follow \"New York.\""}]
+[{"cells": ["Ben", "Rob", "Dave", "Nick"], "description": "Shortened Boys Names"}, {"cells": ["Scrambled", "Boiled", "Fried", "Easter"], "description": "Eggs"}, {"cells": ["Poached", "Took", "Stole", "Plundered"], "description": "Words for theft"}, {"cells": ["Beech", "Willow", "Oak", "Christmas"], "description": "______Trees"}]
+[{"cells": ["Earth", "Book", "Silk", "Inch"], "description": "Types of worm."}, {"cells": ["Humpback", "Blue", "Beluga", "Killer"], "description": "Types of whale."}, {"cells": ["Cerulean", "Azure", "Cornflower", "Cobalt"], "description": "Shades of blue."}, {"cells": ["Obtuse", "Acute", "Right", "Straight"], "description": "Types of angle"}]
+[{"cells": ["Celsius", "Carbon; Periodically.", "Coding Language", "Cosmic Constant"], "description": "All are represented as \"C\"\n\nCarbon is \"C\" on the periodic table.\nCosmic Constant is the speed of light, represented as \"c\" (E = mc^2 for example)\nCoding Language is \"C\"\nCelsius is represented as \"C\""}, {"cells": ["Catch A Glimpse", "Cones & Rods Function", "Coupled With Saw", "Catholic Governing Body"], "description": "All items relate to the word \"see\"\n\nCones & Rods in your eyes help you to \"see\"\nCatholic Governing Body is the Holy \"See\"\n\"See\" Saw\nCatch A Glimpse is to \"See\""}, {"cells": ["China (South)", "Could Be Black", "Could Be Red", "Caspian"], "description": "All items refer to \"seas\"\n\nCaspian Sea\nRed Sea\nBlack Sea\nSouth China Sea"}, {"cells": ["Coupled With Fire", "Cancel", "Companion To Desist", "Come To An End"], "description": "All are associated with the word \"cease\"\n\nCease and desist.\nTo cease is to come to an end.\nCeasefire.\nTo cancel something is to cease its operation."}]
diff --git a/rust_g.dll b/rust_g.dll
index be19f57946da48fba2666a0cc8c4ad9897191897..b72315ec5cf19201a3535e9cc18f3b86ce792b6c 100644
GIT binary patch
literal 6271488
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%0AS;xudtF2HR*PHWU7<
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