diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index e05882c6ca8..00d7e34c41e 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -270,6 +270,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
usr.client.running_find_references = type
testing("Beginning search for references to a [type].")
+ find_references_in_globals()
for(var/datum/thing in world)
if(usr && usr.client && !usr.client.running_find_references) return
for(var/varname in thing.vars)
@@ -326,4 +327,735 @@ var/datum/subsystem/garbage_collector/SSgarbage
dat += "[path] - [tmplist[path]] times
"
usr << browse(dat, "window=qdeletedlog")
+
+#define SearchVar(X) DoSearchVar(X, #X)
+
+/datum/proc/DoSearchVar(X, Xname)
+ if(islist(X))
+ if(src in X)
+ testing("Found [src.type] \ref[src] in global list [Xname].")
+ else if(istype(X, /datum))
+ var/datum/D = X
+ for(var/V in D.vars)
+ for(var/varname in D.vars)
+ var/variable = D.vars[varname]
+ if(variable == src)
+ testing("Found [src.type] \ref[src] in [D.type]'s [varname] var. Global: [Xname]")
+ else if(islist(variable) && src in variable)
+ testing("Found [src.type] \ref[src] in [D.type]'s [varname] list var. Global: [Xname]")
+ CHECK_TICK
+
+//if find_references isn't working for some datum
+//update this list using tools/DMTreeToGlobalsList
+/datum/proc/find_references_in_globals()
+ SearchVar(last_irc_status)
+ SearchVar(inerror)
+ SearchVar(failed_db_connections)
+ SearchVar(nextmap)
+ SearchVar(mapchanging)
+ SearchVar(rebootingpendingmapchange)
+ SearchVar(clockwork_construction_value)
+ SearchVar(clockwork_caches)
+ SearchVar(clockwork_daemons)
+ SearchVar(clockwork_generals_invoked)
+ SearchVar(all_clockwork_objects)
+ SearchVar(all_clockwork_mobs)
+ SearchVar(clockwork_component_cache)
+ SearchVar(ratvar_awakens)
+ SearchVar(clockwork_gateway_activated)
+ SearchVar(all_scripture)
+ SearchVar(pointed_types)
+ SearchVar(bloody_footprints_cache)
+ SearchVar(ghost_accs_options)
+ SearchVar(ghost_others_options)
+ SearchVar(special_roles)
+ SearchVar(string_cache)
+ SearchVar(string_filename_current_key)
+ SearchVar(cmp_field)
+ SearchVar(friendly_animal_types)
+ SearchVar(humanoid_icon_cache)
+ SearchVar(freeze_item_icons)
+ SearchVar(E)
+ SearchVar(Sqrt2)
+ SearchVar(sqrtTable)
+ SearchVar(gaussian_next)
+ SearchVar(skin_tones)
+ SearchVar(species_list)
+ SearchVar(roundstart_species)
+ SearchVar(church_name)
+ SearchVar(command_name)
+ SearchVar(religion_name)
+ SearchVar(syndicate_name)
+ SearchVar(syndicate_code_phrase)
+ SearchVar(syndicate_code_response)
+ SearchVar(zero_character_only)
+ SearchVar(hex_characters)
+ SearchVar(alphabet)
+ SearchVar(binary)
+ SearchVar(can_embed_types)
+ SearchVar(WALLITEMS)
+ SearchVar(WALLITEMS_EXTERNAL)
+ SearchVar(WALLITEMS_INVERSE)
+ SearchVar(sortInstance)
+ SearchVar(config)
+ SearchVar(protected_config)
+ SearchVar(host)
+ SearchVar(join_motd)
+ SearchVar(station_name)
+ SearchVar(game_version)
+ SearchVar(changelog_hash)
+ SearchVar(ooc_allowed)
+ SearchVar(dooc_allowed)
+ SearchVar(abandon_allowed)
+ SearchVar(enter_allowed)
+ SearchVar(guests_allowed)
+ SearchVar(shuttle_frozen)
+ SearchVar(shuttle_left)
+ SearchVar(tinted_weldhelh)
+ SearchVar(Debug)
+ SearchVar(Debug2)
+ SearchVar(comms_key)
+ SearchVar(comms_allowed)
+ SearchVar(cross_address)
+ SearchVar(cross_allowed)
+ SearchVar(medal_hub)
+ SearchVar(medal_pass)
+ SearchVar(medals_enabled)
+ SearchVar(MAX_EX_DEVESTATION_RANGE)
+ SearchVar(MAX_EX_HEAVY_RANGE)
+ SearchVar(MAX_EX_LIGHT_RANGE)
+ SearchVar(MAX_EX_FLASH_RANGE)
+ SearchVar(MAX_EX_FLAME_RANGE)
+ SearchVar(DYN_EX_SCALE)
+ SearchVar(sqladdress)
+ SearchVar(sqlport)
+ SearchVar(sqlfdbkdb)
+ SearchVar(sqlfdbklogin)
+ SearchVar(sqlfdbkpass)
+ SearchVar(sqlfdbktableprefix)
+ SearchVar(dbcon)
+ SearchVar(master_mode)
+ SearchVar(secret_force_mode)
+ SearchVar(wavesecret)
+ SearchVar(start_state)
+ SearchVar(NEARSIGHTBLOCK)
+ SearchVar(EPILEPSYBLOCK)
+ SearchVar(COUGHBLOCK)
+ SearchVar(TOURETTESBLOCK)
+ SearchVar(NERVOUSBLOCK)
+ SearchVar(BLINDBLOCK)
+ SearchVar(DEAFBLOCK)
+ SearchVar(HULKBLOCK)
+ SearchVar(TELEBLOCK)
+ SearchVar(FIREBLOCK)
+ SearchVar(XRAYBLOCK)
+ SearchVar(CLUMSYBLOCK)
+ SearchVar(STRANGEBLOCK)
+ SearchVar(RACEBLOCK)
+ SearchVar(bad_se_blocks)
+ SearchVar(good_se_blocks)
+ SearchVar(op_se_blocks)
+ SearchVar(NULLED_SE)
+ SearchVar(NULLED_UI)
+ SearchVar(global_mutations)
+ SearchVar(bad_mutations)
+ SearchVar(good_mutations)
+ SearchVar(not_good_mutations)
+ SearchVar(diary)
+ SearchVar(diaryofmeanpeople)
+ SearchVar(href_logfile)
+ SearchVar(bombers)
+ SearchVar(admin_log)
+ SearchVar(lastsignalers)
+ SearchVar(lawchanges)
+ SearchVar(combatlog)
+ SearchVar(IClog)
+ SearchVar(OOClog)
+ SearchVar(adminlog)
+ SearchVar(active_turfs_startlist)
+ SearchVar(admin_notice)
+ SearchVar(timezoneOffset)
+ SearchVar(fileaccess_timer)
+ SearchVar(TAB)
+ SearchVar(map_ready)
+ SearchVar(data_core)
+ SearchVar(CELLRATE)
+ SearchVar(CHARGELEVEL)
+ SearchVar(powernets)
+ SearchVar(map_name)
+ SearchVar(hair_styles_list)
+ SearchVar(hair_styles_male_list)
+ SearchVar(hair_styles_female_list)
+ SearchVar(facial_hair_styles_list)
+ SearchVar(facial_hair_styles_male_list)
+ SearchVar(facial_hair_styles_female_list)
+ SearchVar(underwear_list)
+ SearchVar(underwear_m)
+ SearchVar(underwear_f)
+ SearchVar(undershirt_list)
+ SearchVar(undershirt_m)
+ SearchVar(undershirt_f)
+ SearchVar(socks_list)
+ SearchVar(body_markings_list)
+ SearchVar(tails_list_lizard)
+ SearchVar(animated_tails_list_lizard)
+ SearchVar(snouts_list)
+ SearchVar(horns_list)
+ SearchVar(frills_list)
+ SearchVar(spines_list)
+ SearchVar(legs_list)
+ SearchVar(animated_spines_list)
+ SearchVar(tails_list_human)
+ SearchVar(animated_tails_list_human)
+ SearchVar(ears_list)
+ SearchVar(wings_list)
+ SearchVar(wings_open_list)
+ SearchVar(r_wings_list)
+ SearchVar(ghost_forms_with_directions_list)
+ SearchVar(ghost_forms_with_accessories_list)
+ SearchVar(security_depts_prefs)
+ SearchVar(backbaglist)
+ SearchVar(uplink_spawn_loc_list)
+ SearchVar(female_clothing_icons)
+ SearchVar(hit_appends)
+ SearchVar(scarySounds)
+ SearchVar(TAGGERLOCATIONS)
+ SearchVar(guitar_notes)
+ SearchVar(station_prefixes)
+ SearchVar(station_names)
+ SearchVar(station_suffixes)
+ SearchVar(greek_letters)
+ SearchVar(phonetic_alphabet)
+ SearchVar(numbers_as_words)
+ SearchVar(station_numerals)
+ SearchVar(cardinal)
+ SearchVar(alldirs)
+ SearchVar(diagonals)
+ SearchVar(accessable_z_levels)
+ SearchVar(global_map)
+ SearchVar(landmarks_list)
+ SearchVar(start_landmarks_list)
+ SearchVar(department_security_spawns)
+ SearchVar(generic_event_spawns)
+ SearchVar(monkeystart)
+ SearchVar(wizardstart)
+ SearchVar(newplayer_start)
+ SearchVar(latejoin)
+ SearchVar(prisonwarp)
+ SearchVar(holdingfacility)
+ SearchVar(xeno_spawn)
+ SearchVar(tdome1)
+ SearchVar(tdome2)
+ SearchVar(tdomeobserve)
+ SearchVar(tdomeadmin)
+ SearchVar(prisonsecuritywarp)
+ SearchVar(prisonwarped)
+ SearchVar(blobstart)
+ SearchVar(secequipment)
+ SearchVar(deathsquadspawn)
+ SearchVar(emergencyresponseteamspawn)
+ SearchVar(ruin_landmarks)
+ SearchVar(awaydestinations)
+ SearchVar(sortedAreas)
+ SearchVar(map_templates)
+ SearchVar(ruins_templates)
+ SearchVar(space_ruins_templates)
+ SearchVar(lava_ruins_templates)
+ SearchVar(shuttle_templates)
+ SearchVar(shelter_templates)
+ SearchVar(transit_markers)
+ SearchVar(clients)
+ SearchVar(admins)
+ SearchVar(deadmins)
+ SearchVar(directory)
+ SearchVar(stealthminID)
+ SearchVar(current_watchlist)
+ SearchVar(player_list)
+ SearchVar(mob_list)
+ SearchVar(living_mob_list)
+ SearchVar(dead_mob_list)
+ SearchVar(joined_player_list)
+ SearchVar(silicon_mobs)
+ SearchVar(pai_list)
+ SearchVar(ai_names)
+ SearchVar(wizard_first)
+ SearchVar(wizard_second)
+ SearchVar(ninja_titles)
+ SearchVar(ninja_names)
+ SearchVar(commando_names)
+ SearchVar(first_names_male)
+ SearchVar(first_names_female)
+ SearchVar(last_names)
+ SearchVar(lizard_names_male)
+ SearchVar(lizard_names_female)
+ SearchVar(clown_names)
+ SearchVar(mime_names)
+ SearchVar(carp_names)
+ SearchVar(golem_names)
+ SearchVar(plasmaman_names)
+ SearchVar(verbs)
+ SearchVar(adjectives)
+ SearchVar(cable_list)
+ SearchVar(portals)
+ SearchVar(airlocks)
+ SearchVar(mechas_list)
+ SearchVar(shuttle_caller_list)
+ SearchVar(machines)
+ SearchVar(syndicate_shuttle_boards)
+ SearchVar(navbeacons)
+ SearchVar(teleportbeacons)
+ SearchVar(deliverybeacons)
+ SearchVar(deliverybeacontags)
+ SearchVar(nuke_list)
+ SearchVar(alarmdisplay)
+ SearchVar(chemical_reactions_list)
+ SearchVar(chemical_reagents_list)
+ SearchVar(materials_list)
+ SearchVar(tech_list)
+ SearchVar(surgeries_list)
+ SearchVar(crafting_recipes)
+ SearchVar(rcd_list)
+ SearchVar(apcs_list)
+ SearchVar(tracked_implants)
+ SearchVar(tracked_chem_implants)
+ SearchVar(poi_list)
+ SearchVar(pinpointer_list)
+ SearchVar(zombie_infection_list)
+ SearchVar(meteor_list)
+ SearchVar(poll_ignore)
+ SearchVar(typecache_mob)
+ SearchVar(tk_maxrange)
+ SearchVar(Failsafe)
+ SearchVar(Master)
+ SearchVar(MC_restart_clear)
+ SearchVar(MC_restart_timeout)
+ SearchVar(MC_restart_count)
+ SearchVar(CURRENT_TICKLIMIT)
+ SearchVar(SSacid)
+ SearchVar(SSair)
+ SearchVar(SSasset)
+ SearchVar(SSaugury)
+ SearchVar(SScommunications)
+ SearchVar(SSdisease)
+ SearchVar(SSevent)
+ SearchVar(SSfire_burning)
+ SearchVar(SSgarbage)
+ SearchVar(SSicon_smooth)
+ SearchVar(SSipintel)
+ SearchVar(SSjob)
+ SearchVar(SSlighting)
+ SearchVar(SSmachine)
+ SearchVar(SSmapping)
+ SearchVar(SSminimap)
+ SearchVar(SSmob)
+ SearchVar(SSnpc)
+ SearchVar(SSorbit)
+ SearchVar(SSpai)
+ SearchVar(pai_card_list)
+ SearchVar(SSparallax)
+ SearchVar(SSpersistence)
+ SearchVar(SSping)
+ SearchVar(SSradio)
+ SearchVar(SSreligion)
+ SearchVar(SSserver)
+ SearchVar(SSshuttle)
+ SearchVar(SSspacedrift)
+ SearchVar(SSsqueak)
+ SearchVar(SSstickyban)
+ SearchVar(SSsun)
+ SearchVar(SStgui)
+ SearchVar(SSthrowing)
+ SearchVar(round_start_time)
+ SearchVar(ticker)
+ SearchVar(SStimer)
+ SearchVar(SSvote)
+ SearchVar(SSweather)
+ SearchVar(SSfastprocess)
+ SearchVar(SSflightpacks)
+ SearchVar(SSobj)
+ SearchVar(SSprocessing)
+ SearchVar(record_id_num)
+ SearchVar(emote_list)
+ SearchVar(huds)
+ SearchVar(diseases)
+ SearchVar(archive_diseases)
+ SearchVar(advance_cures)
+ SearchVar(list_symptoms)
+ SearchVar(dictionary_symptoms)
+ SearchVar(SYMPTOM_ACTIVATION_PROB)
+ SearchVar(revdata)
+ SearchVar(all_status_effects)
+ SearchVar(wire_colors)
+ SearchVar(wire_color_directory)
+ SearchVar(wire_name_directory)
+ SearchVar(possiblethemes)
+ SearchVar(max_secret_rooms)
+ SearchVar(blood_splatter_icons)
+ SearchVar(all_radios)
+ SearchVar(radiochannels)
+ SearchVar(radiochannelsreverse)
+ SearchVar(SYND_FREQ)
+ SearchVar(SUPP_FREQ)
+ SearchVar(SERV_FREQ)
+ SearchVar(SCI_FREQ)
+ SearchVar(COMM_FREQ)
+ SearchVar(MED_FREQ)
+ SearchVar(ENG_FREQ)
+ SearchVar(SEC_FREQ)
+ SearchVar(CENTCOM_FREQ)
+ SearchVar(AIPRIV_FREQ)
+ SearchVar(RADIO_TO_AIRALARM)
+ SearchVar(RADIO_FROM_AIRALARM)
+ SearchVar(RADIO_CHAT)
+ SearchVar(RADIO_ATMOSIA)
+ SearchVar(RADIO_NAVBEACONS)
+ SearchVar(RADIO_AIRLOCK)
+ SearchVar(RADIO_MAGNETS)
+ SearchVar(pointers)
+ SearchVar(freqtospan)
+ SearchVar(teleportlocs)
+ SearchVar(the_station_areas)
+ SearchVar(possible_items)
+ SearchVar(possible_items_special)
+ SearchVar(blobs)
+ SearchVar(blob_cores)
+ SearchVar(overminds)
+ SearchVar(blob_nodes)
+ SearchVar(blobs_legit)
+ SearchVar(possible_changeling_IDs)
+ SearchVar(slots)
+ SearchVar(slot2slot)
+ SearchVar(slot2type)
+ SearchVar(hivemind_bank)
+ SearchVar(blacklisted_pylon_turfs)
+ SearchVar(non_revealed_runes)
+ SearchVar(teleport_runes)
+ SearchVar(wall_runes)
+ SearchVar(whiteness)
+ SearchVar(allDevils)
+ SearchVar(lawlorify)
+ SearchVar(gang_name_pool)
+ SearchVar(gang_colors_pool)
+ SearchVar(borers)
+ SearchVar(total_borer_hosts_needed)
+ SearchVar(bomb_set)
+ SearchVar(hsboxspawn)
+ SearchVar(multiverse)
+ SearchVar(announcement_systems)
+ SearchVar(doppler_arrays)
+ SearchVar(HOLOPAD_MODE)
+ SearchVar(holopads)
+ SearchVar(news_network)
+ SearchVar(allCasters)
+ SearchVar(SAFETY_COOLDOWN)
+ SearchVar(req_console_assistance)
+ SearchVar(req_console_supplies)
+ SearchVar(req_console_information)
+ SearchVar(allConsoles)
+ SearchVar(time_last_changed_position)
+ SearchVar(CALL_SHUTTLE_REASON_LENGTH)
+ SearchVar(crewmonitor)
+ SearchVar(possible_uplinker_IDs)
+ SearchVar(airlock_overlays)
+ SearchVar(pipeID2State)
+ SearchVar(telecomms_list)
+ SearchVar(recentmessages)
+ SearchVar(message_delay)
+ SearchVar(year)
+ SearchVar(year_integer)
+ SearchVar(explosionid)
+ SearchVar(fire_overlay)
+ SearchVar(acid_overlay)
+ SearchVar(BUMP_TELEPORTERS)
+ SearchVar(contrabandposters)
+ SearchVar(legitposters)
+ SearchVar(blacklisted_glowshroom_turfs)
+ SearchVar(PDAs)
+ SearchVar(rod_recipes)
+ SearchVar(glass_recipes)
+ SearchVar(reinforced_glass_recipes)
+ SearchVar(human_recipes)
+ SearchVar(corgi_recipes)
+ SearchVar(monkey_recipes)
+ SearchVar(xeno_recipes)
+ SearchVar(sinew_recipes)
+ SearchVar(sandstone_recipes)
+ SearchVar(sandbag_recipes)
+ SearchVar(diamond_recipes)
+ SearchVar(uranium_recipes)
+ SearchVar(plasma_recipes)
+ SearchVar(gold_recipes)
+ SearchVar(silver_recipes)
+ SearchVar(clown_recipes)
+ SearchVar(titanium_recipes)
+ SearchVar(plastitanium_recipes)
+ SearchVar(snow_recipes)
+ SearchVar(abductor_recipes)
+ SearchVar(metal_recipes)
+ SearchVar(plasteel_recipes)
+ SearchVar(wood_recipes)
+ SearchVar(cloth_recipes)
+ SearchVar(cardboard_recipes)
+ SearchVar(runed_metal_recipes)
+ SearchVar(brass_recipes)
+ SearchVar(disposalpipeID2State)
+ SearchVar(RPD_recipes)
+ SearchVar(highlander_claymores)
+ SearchVar(biblenames)
+ SearchVar(biblestates)
+ SearchVar(bibleitemstates)
+ SearchVar(globalBlankCanvases)
+ SearchVar(crematoriums)
+ SearchVar(icons_to_ignore_at_floor_init)
+ SearchVar(js_byjax)
+ SearchVar(js_dropdowns)
+ SearchVar(BSACooldown)
+ SearchVar(admin_ranks)
+ SearchVar(admin_verbs_default)
+ SearchVar(admin_verbs_admin)
+ SearchVar(admin_verbs_ban)
+ SearchVar(admin_verbs_sounds)
+ SearchVar(admin_verbs_fun)
+ SearchVar(admin_verbs_spawn)
+ SearchVar(admin_verbs_server)
+ SearchVar(admin_verbs_debug)
+ SearchVar(admin_verbs_possess)
+ SearchVar(admin_verbs_permissions)
+ SearchVar(admin_verbs_rejuv)
+ SearchVar(admin_verbs_hideable)
+ SearchVar(create_object_html)
+ SearchVar(create_object_forms)
+ SearchVar(admin_datums)
+ SearchVar(CMinutes)
+ SearchVar(Banlist)
+ SearchVar(whitelist)
+ SearchVar(TYPES_SHORTCUTS)
+ SearchVar(intercom_range_display_status)
+ SearchVar(admin_verbs_debug_mapping)
+ SearchVar(say_disabled)
+ SearchVar(VVlocked)
+ SearchVar(VVicon_edit_lock)
+ SearchVar(VVckey_edit)
+ SearchVar(VVpixelmovement)
+ SearchVar(highlander)
+ SearchVar(admin_sound)
+ SearchVar(custom_outfits)
+ SearchVar(meta_gas_info)
+ SearchVar(gaslist_cache)
+ SearchVar(hardcoded_gases)
+ SearchVar(pipenetwarnings)
+ SearchVar(the_gateway)
+ SearchVar(potentialRandomZlevels)
+ SearchVar(maploader)
+ SearchVar(use_preloader)
+ SearchVar(_preloader)
+ SearchVar(swapmaps_iconcache)
+ SearchVar(SWAPMAPS_SAV)
+ SearchVar(SWAPMAPS_TEXT)
+ SearchVar(swapmaps_mode)
+ SearchVar(swapmaps_compiled_maxx)
+ SearchVar(swapmaps_compiled_maxy)
+ SearchVar(swapmaps_compiled_maxz)
+ SearchVar(swapmaps_initialized)
+ SearchVar(swapmaps_loaded)
+ SearchVar(swapmaps_byname)
+ SearchVar(sc_safecode1)
+ SearchVar(sc_safecode2)
+ SearchVar(sc_safecode3)
+ SearchVar(sc_safecode4)
+ SearchVar(sc_safecode5)
+ SearchVar(exports_list)
+ SearchVar(clientmessages)
+ SearchVar(preferences_datums)
+ SearchVar(ghost_forms)
+ SearchVar(ghost_orbits)
+ SearchVar(normal_ooc_colour)
+ SearchVar(damaged_clothes_icons)
+ SearchVar(emojis)
+ SearchVar(non_fakeattack_weapons)
+ SearchVar(cards_against_space)
+ SearchVar(chem_t1_reagents)
+ SearchVar(chem_t2_reagents)
+ SearchVar(chem_t3_reagents)
+ SearchVar(chem_t4_reagents)
+ SearchVar(ENGSEC)
+ SearchVar(CAPTAIN)
+ SearchVar(HOS)
+ SearchVar(WARDEN)
+ SearchVar(DETECTIVE)
+ SearchVar(OFFICER)
+ SearchVar(CHIEF)
+ SearchVar(ENGINEER)
+ SearchVar(ATMOSTECH)
+ SearchVar(ROBOTICIST)
+ SearchVar(AI)
+ SearchVar(CYBORG)
+ SearchVar(MEDSCI)
+ SearchVar(RD)
+ SearchVar(SCIENTIST)
+ SearchVar(CHEMIST)
+ SearchVar(CMO)
+ SearchVar(DOCTOR)
+ SearchVar(GENETICIST)
+ SearchVar(VIROLOGIST)
+ SearchVar(CIVILIAN)
+ SearchVar(HOP)
+ SearchVar(BARTENDER)
+ SearchVar(BOTANIST)
+ SearchVar(COOK)
+ SearchVar(JANITOR)
+ SearchVar(LIBRARIAN)
+ SearchVar(QUARTERMASTER)
+ SearchVar(CARGOTECH)
+ SearchVar(MINER)
+ SearchVar(LAWYER)
+ SearchVar(CHAPLAIN)
+ SearchVar(CLOWN)
+ SearchVar(MIME)
+ SearchVar(ASSISTANT)
+ SearchVar(assistant_occupations)
+ SearchVar(command_positions)
+ SearchVar(engineering_positions)
+ SearchVar(medical_positions)
+ SearchVar(science_positions)
+ SearchVar(supply_positions)
+ SearchVar(civilian_positions)
+ SearchVar(security_positions)
+ SearchVar(nonhuman_positions)
+ SearchVar(cap_expand)
+ SearchVar(cmo_expand)
+ SearchVar(hos_expand)
+ SearchVar(hop_expand)
+ SearchVar(rd_expand)
+ SearchVar(ce_expand)
+ SearchVar(qm_expand)
+ SearchVar(sec_expand)
+ SearchVar(engi_expand)
+ SearchVar(atmos_expand)
+ SearchVar(doc_expand)
+ SearchVar(mine_expand)
+ SearchVar(chef_expand)
+ SearchVar(borg_expand)
+ SearchVar(available_depts)
+ SearchVar(cachedbooks)
+ SearchVar(total_extraction_beacons)
+ SearchVar(next_mob_id)
+ SearchVar(firstname)
+ SearchVar(ghost_darkness_images)
+ SearchVar(ghost_images_full)
+ SearchVar(ghost_images_default)
+ SearchVar(ghost_images_simple)
+ SearchVar(department_radio_keys)
+ SearchVar(crit_allowed_modes)
+ SearchVar(ventcrawl_machinery)
+ SearchVar(posibrain_notif_cooldown)
+ SearchVar(NO_SLIP_WHEN_WALKING)
+ SearchVar(SLIDE)
+ SearchVar(GALOSHES_DONT_HELP)
+ SearchVar(SLIDE_ICE)
+ SearchVar(limb_icon_cache)
+ SearchVar(ALIEN_AFK_BRACKET)
+ SearchVar(MIN_IMPREGNATION_TIME)
+ SearchVar(MAX_IMPREGNATION_TIME)
+ SearchVar(MIN_ACTIVE_TIME)
+ SearchVar(MAX_ACTIVE_TIME)
+ SearchVar(default_martial_art)
+ SearchVar(plasmaman_on_fire)
+ SearchVar(ai_list)
+ SearchVar(announcing_vox)
+ SearchVar(VOX_CHANNEL)
+ SearchVar(VOX_DELAY)
+ SearchVar(vox_sounds)
+ SearchVar(CHUNK_SIZE)
+ SearchVar(cameranet)
+ SearchVar(mulebot_count)
+ SearchVar(MAX_CHICKENS)
+ SearchVar(chicken_count)
+ SearchVar(parasites)
+ SearchVar(protected_objects)
+ SearchVar(AISwarmers)
+ SearchVar(AISwarmersByType)
+ SearchVar(AISwarmerCapsByType)
+ SearchVar(slime_colours)
+ SearchVar(global_modular_computers)
+ SearchVar(file_uid)
+ SearchVar(nttransfer_uid)
+ SearchVar(ntnet_card_uid)
+ SearchVar(ntnet_global)
+ SearchVar(ntnrc_uid)
+ SearchVar(employmentCabinets)
+ SearchVar(cable_coil_recipes)
+ SearchVar(gravity_generators)
+ SearchVar(POWER_IDLE)
+ SearchVar(POWER_UP)
+ SearchVar(POWER_DOWN)
+ SearchVar(GRAV_NEEDS_SCREWDRIVER)
+ SearchVar(GRAV_NEEDS_WELDING)
+ SearchVar(GRAV_NEEDS_PLASTEEL)
+ SearchVar(GRAV_NEEDS_WRENCH)
+ SearchVar(rad_collectors)
+ SearchVar(blacklisted_tesla_types)
+ SearchVar(TOUCH)
+ SearchVar(INGEST)
+ SearchVar(VAPOR)
+ SearchVar(PATCH)
+ SearchVar(INJECT)
+ SearchVar(chemical_mob_spawn_meancritters)
+ SearchVar(chemical_mob_spawn_nicecritters)
+ SearchVar(message_servers)
+ SearchVar(blackbox)
+ SearchVar(keycard_events)
+ SearchVar(blacklisted_cargo_types)
+ SearchVar(z_levels_list)
+ SearchVar(spells)
+ SearchVar(non_simple_animals)
+ SearchVar(FrozenAccounts)
+ SearchVar(stockExchange)
+ SearchVar(stun_words)
+ SearchVar(weaken_words)
+ SearchVar(sleep_words)
+ SearchVar(vomit_words)
+ SearchVar(silence_words)
+ SearchVar(hallucinate_words)
+ SearchVar(wakeup_words)
+ SearchVar(heal_words)
+ SearchVar(hurt_words)
+ SearchVar(bleed_words)
+ SearchVar(burn_words)
+ SearchVar(hot_words)
+ SearchVar(cold_words)
+ SearchVar(repulse_words)
+ SearchVar(attract_words)
+ SearchVar(whoareyou_words)
+ SearchVar(saymyname_words)
+ SearchVar(knockknock_words)
+ SearchVar(statelaws_words)
+ SearchVar(move_words)
+ SearchVar(left_words)
+ SearchVar(right_words)
+ SearchVar(up_words)
+ SearchVar(down_words)
+ SearchVar(walk_words)
+ SearchVar(run_words)
+ SearchVar(helpintent_words)
+ SearchVar(disarmintent_words)
+ SearchVar(grabintent_words)
+ SearchVar(harmintent_words)
+ SearchVar(throwmode_words)
+ SearchVar(flip_words)
+ SearchVar(speak_words)
+ SearchVar(rest_words)
+ SearchVar(getup_words)
+ SearchVar(sit_words)
+ SearchVar(stand_words)
+ SearchVar(dance_words)
+ SearchVar(jump_words)
+ SearchVar(salute_words)
+ SearchVar(deathgasp_words)
+ SearchVar(clap_words)
+ SearchVar(honk_words)
+ SearchVar(multispin_words)
+ SearchVar(GPS_list)
+ SearchVar(uplinks)
+ SearchVar(uplink_items)
#endif
diff --git a/tools/DMTreeToGlobalsList/DMTreeToGlobalsList.csproj b/tools/DMTreeToGlobalsList/DMTreeToGlobalsList.csproj
new file mode 100644
index 00000000000..db4350daa48
--- /dev/null
+++ b/tools/DMTreeToGlobalsList/DMTreeToGlobalsList.csproj
@@ -0,0 +1,59 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {9799169C-0C95-4873-B6B5-211E007A15F4}
+ Exe
+ Properties
+ DMTreeToGlobalsList
+ DMTreeToGlobalsList
+ v4.5.2
+ 512
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tools/DMTreeToGlobalsList/Program.cs b/tools/DMTreeToGlobalsList/Program.cs
new file mode 100644
index 00000000000..44258824d46
--- /dev/null
+++ b/tools/DMTreeToGlobalsList/Program.cs
@@ -0,0 +1,65 @@
+using System;
+using System.IO;
+using System.Xml;
+
+namespace DMTreeToGlobalsList
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ if (args.Length < 1 || !File.Exists(args[0]))
+ {
+ Console.WriteLine("Usage: DMTreeToGlobalsList.exe [Prefix] [Postfix]");
+ return;
+ }
+
+ var XMLPath = args[0];
+ string Prefix = "", Postfix = "";
+ if (args.Length > 1)
+ {
+ Prefix = args[1];
+ if (args.Length > 2)
+ Postfix = args[2];
+ }
+
+ XmlDocument Doc;
+ using (var FS = new FileStream(XMLPath, FileMode.Open, FileAccess.Read))
+ {
+ try
+ {
+ while (FS.ReadByte() != '<') ;
+ }
+ catch
+ {
+ Console.WriteLine("Failed to find start point of XML in output");
+ return;
+ }
+ FS.Seek(-1, SeekOrigin.Current);
+
+ Doc = new XmlDocument();
+ try
+ {
+ Doc.Load(FS);
+ }
+ catch
+ {
+ Console.WriteLine("Failed to load the XML document");
+ return;
+ }
+ }
+ try
+ {
+ var DMNode = Doc.ChildNodes[1];
+ foreach (XmlNode Child in DMNode.ChildNodes)
+ if (Child.Name == "var")
+ Console.WriteLine(Prefix + Child.FirstChild.Value.Trim() + Postfix);
+ }
+ catch
+ {
+ Console.WriteLine("Failed parsing the XML");
+ return;
+ }
+ }
+ }
+}