Copy disabled (too large)
Download .txt
Showing preview only (69,599K chars total). Download the full file to get everything.
Repository: tgstation/TerraGov-Marine-Corps
Branch: master
Commit: 5a3f8fafd35e
Files: 9382
Total size: 65.4 MB
Directory structure:
gitextract_w7npq9da/
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ATOMIZATION.md
│ ├── AUTODOC.md
│ ├── CODEOWNERS
│ ├── EZDB.md
│ ├── HARDDELETES.md
│ ├── HARDDEL_GUIDE.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── TICK_ORDER.md
│ ├── VISUALS.md
│ ├── actions/
│ │ ├── restore_or_install_byond/
│ │ │ └── action.yml
│ │ └── setup_node/
│ │ └── action.yml
│ ├── alternate_byond_versions.txt
│ ├── guides/
│ │ └── EZDB.md
│ ├── max_required_byond_client.txt
│ └── workflows/
│ ├── auto_changelog.yml
│ ├── ci_suite.yml
│ ├── compile_changelogs.yml
│ ├── discord_pr_announce.yml
│ ├── gbp.yml
│ ├── generate_documentation.yml
│ ├── remove_guide_comments.yml
│ ├── round_id_linker.yml
│ ├── run_approval.yml
│ ├── run_integration_tests.yml
│ ├── stale.yml
│ └── update_tgs_dmapi.yml
├── .gitignore
├── .prettierignore
├── .tgs4.yml
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ └── tasks.json
├── BUILD.cmd
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── LICENSE-CC-BY-NC-3.0
├── LICENSE-CC-BY-NC-SA-3.0
├── README.md
├── SQL/
│ ├── database_changelog.md
│ └── tgmc-schema.sql
├── SpacemanDMM.toml
├── __odlint.dm
├── _maps/
│ ├── _basemap.dm
│ ├── arachne.json
│ ├── bigred_v2.json
│ ├── bluemoon.json
│ ├── bluesummers.json
│ ├── combat_patrol_base.json
│ ├── corsat.json
│ ├── daedalusprison.json
│ ├── debugdalus.json
│ ├── deltastation.json
│ ├── desertdam.json
│ ├── desparity.json
│ ├── fiorina.json
│ ├── fort_phobos.json
│ ├── gelida_iv.json
│ ├── ice_colony_v2.json
│ ├── icy_caves.json
│ ├── interiors/
│ │ ├── apc_cloner.dmm
│ │ ├── apc_medical.dmm
│ │ ├── apc_transport.dmm
│ │ ├── icc_recontank.dmm
│ │ ├── mrap.dmm
│ │ ├── som_tank.dmm
│ │ └── tank.dmm
│ ├── iteron.json
│ ├── kutjevo.json
│ ├── lavaoutpost.json
│ ├── lawanka.json
│ ├── lv624.json
│ ├── lv759.json
│ ├── magmoor_digsite_iv.json
│ ├── map_files/
│ │ ├── Arachne/
│ │ │ └── TGS_Arachne.dmm
│ │ ├── BigRed_v2/
│ │ │ └── BigRed_v2.dmm
│ │ ├── Blue_Moon/
│ │ │ └── bluemoon.dmm
│ │ ├── Bluesummers/
│ │ │ └── bluesummers.dmm
│ │ ├── Campaign maps/
│ │ │ ├── jungle_outpost/
│ │ │ │ └── jungle_outpost.dmm
│ │ │ ├── nt_base/
│ │ │ │ └── nt_base.dmm
│ │ │ ├── orion_2/
│ │ │ │ └── orionoutpost_2.dmm
│ │ │ ├── patricks_rest/
│ │ │ │ └── patricks_rest.dmm
│ │ │ ├── som_base/
│ │ │ │ └── sombase.dmm
│ │ │ ├── som_raid_base/
│ │ │ │ └── som_raiding_base.dmm
│ │ │ ├── tgmc_airfield/
│ │ │ │ └── tgmc_airfield.dmm
│ │ │ └── tgmc_raid_base/
│ │ │ └── tgmc_raiding_base.dmm
│ │ ├── DaedalusPrison/
│ │ │ └── DaedalusPrison.dmm
│ │ ├── Fort_Phobos/
│ │ │ └── Fort_Phobos.dmm
│ │ ├── Ice_Colony_v2/
│ │ │ └── Ice_Colony_v2.dmm
│ │ ├── Iteron/
│ │ │ └── Iteron.dmm
│ │ ├── LV624/
│ │ │ └── LV624.dmm
│ │ ├── LV759/
│ │ │ └── LV759.dmm
│ │ ├── Lawanka_Outpost/
│ │ │ └── LawankaOutpost.dmm
│ │ ├── Magmoor_Digsite_IV/
│ │ │ └── Magmoor_Digsite_IV.dmm
│ │ ├── Metnal_Operation/
│ │ │ └── Metnal_Operation.dmm
│ │ ├── Orion_Military_Outpost/
│ │ │ └── orionoutpost.dmm
│ │ ├── Pillar_of_Spring/
│ │ │ └── TGS_Pillar_of_Spring.dmm
│ │ ├── Prison_Station_FOP/
│ │ │ └── Prison_Station_FOP.dmm
│ │ ├── Research_Outpost/
│ │ │ └── Research_Outpost.dmm
│ │ ├── Sulaco/
│ │ │ └── TGS_Sulaco.dmm
│ │ ├── Theseus/
│ │ │ └── TGS_Theseus.dmm
│ │ ├── Vapor_Processing/
│ │ │ └── Vapor_Processing.dmm
│ │ ├── Whiskey_Outpost/
│ │ │ └── Whiskey_Outpost_v2.dmm
│ │ ├── combat_patrol_base/
│ │ │ └── combat_patrol_base.dmm
│ │ ├── corsat/
│ │ │ └── corsat.dmm
│ │ ├── debugdalus/
│ │ │ └── tgs_debugdalus.dmm
│ │ ├── deltastation/
│ │ │ └── deltastation.dmm
│ │ ├── desertdam/
│ │ │ └── desertdam.dmm
│ │ ├── desparity/
│ │ │ └── desparity.dmm
│ │ ├── fiorina/
│ │ │ └── fiorina.dmm
│ │ ├── gelida_iv/
│ │ │ └── gelida_iv.dmm
│ │ ├── generic/
│ │ │ └── Admin_Level.dmm
│ │ ├── icy_caves/
│ │ │ └── icy_caves.dmm
│ │ ├── kutjevo/
│ │ │ └── kutjevo.dmm
│ │ ├── lavaoutpost/
│ │ │ └── LavaOutpost.dmm
│ │ ├── multiz_debug/
│ │ │ └── multiz_debug.dmm
│ │ ├── oscar_outpost/
│ │ │ └── oscar_outpost.dmm
│ │ ├── riptide/
│ │ │ └── riptide.dmm
│ │ └── slumbridge/
│ │ └── slumbridge.dmm
│ ├── metnal.json
│ ├── modularmaps/
│ │ ├── EORG/
│ │ │ ├── basketball.dmm
│ │ │ ├── cs_mansion.dmm
│ │ │ ├── cs_militia.dmm
│ │ │ ├── cs_office.dmm
│ │ │ ├── de_dust2.dmm
│ │ │ ├── de_inferno.dmm
│ │ │ ├── de_nuke.dmm
│ │ │ ├── old.dmm
│ │ │ └── original.dmm
│ │ ├── big_red/
│ │ │ ├── barracks.dmm
│ │ │ ├── bigredatmosvar1.dmm
│ │ │ ├── bigredatmosvar2.dmm
│ │ │ ├── bigredatmosvar3.dmm
│ │ │ ├── bigredatmosvar4.dmm
│ │ │ ├── bigredatmosvar5.dmm
│ │ │ ├── bigredatmosvar6.dmm
│ │ │ ├── bigredcargoareavar1.dmm
│ │ │ ├── bigredcargoareavar2.dmm
│ │ │ ├── bigredcargoareavar3.dmm
│ │ │ ├── bigredcargoareavar4.dmm
│ │ │ ├── bigredcargoareavar5.dmm
│ │ │ ├── bigredcargoareavar6.dmm
│ │ │ ├── bigredcargoareavar7.dmm
│ │ │ ├── bigredcargoareavar8.dmm
│ │ │ ├── bigredcargoentryvar1.dmm
│ │ │ ├── bigredcargoentryvar2.dmm
│ │ │ ├── bigredcargoentryvar3.dmm
│ │ │ ├── bigredcargovar1.dmm
│ │ │ ├── bigredcargovar2.dmm
│ │ │ ├── bigredcaveswvar1.dmm
│ │ │ ├── bigredcaveswvar2.dmm
│ │ │ ├── bigredcaveswvar3.dmm
│ │ │ ├── bigredcaveswvar4.dmm
│ │ │ ├── bigredcaveswvar5.dmm
│ │ │ ├── bigredcavevar1.dmm
│ │ │ ├── bigredcavevar2.dmm
│ │ │ ├── bigredcavevar3.dmm
│ │ │ ├── bigredcavevar4.dmm
│ │ │ ├── bigredcavevar5.dmm
│ │ │ ├── bigredchapelvar1.dmm
│ │ │ ├── bigredchapelvar2.dmm
│ │ │ ├── bigredcheckpointsouthvar1.dmm
│ │ │ ├── bigredcheckpointsouthvar2.dmm
│ │ │ ├── bigredcheckpointsouthvar3.dmm
│ │ │ ├── bigredcheckpointvar1.dmm
│ │ │ ├── bigredcheckpointvar2.dmm
│ │ │ ├── bigreddoor1.dmm
│ │ │ ├── bigreddoor2.dmm
│ │ │ ├── bigreddoor3.dmm
│ │ │ ├── bigreddoor4.dmm
│ │ │ ├── bigreddormvar1.dmm
│ │ │ ├── bigreddormvar2.dmm
│ │ │ ├── bigredengineeringvar1.dmm
│ │ │ ├── bigredengineeringvar2.dmm
│ │ │ ├── bigredengineeringvar3.dmm
│ │ │ ├── bigredengineeringvar4.dmm
│ │ │ ├── bigredetavar1.dmm
│ │ │ ├── bigredetavar2.dmm
│ │ │ ├── bigredetavar3.dmm
│ │ │ ├── bigredetavar4.dmm
│ │ │ ├── bigredetavar5.dmm
│ │ │ ├── bigredgeneralstorevar1.dmm
│ │ │ ├── bigredgeneralstorevar2.dmm
│ │ │ ├── bigredlambdacave1.dmm
│ │ │ ├── bigredlambdacave2.dmm
│ │ │ ├── bigredlambdatunnelsouthvar1.dmm
│ │ │ ├── bigredlambdatunnelsouthvar2.dmm
│ │ │ ├── bigredlambdatunnelsouthvar3.dmm
│ │ │ ├── bigredlambdatunnelsouthvar4.dmm
│ │ │ ├── bigredlambdatunnelvar1.dmm
│ │ │ ├── bigredlambdatunnelvar2.dmm
│ │ │ ├── bigredlibraryvar1.dmm
│ │ │ ├── bigredlibraryvar2.dmm
│ │ │ ├── bigredlibraryvar3.dmm
│ │ │ ├── bigredmedbaypassagevar1.dmm
│ │ │ ├── bigredmedbaypassagevar2.dmm
│ │ │ ├── bigredmedbayvar1.dmm
│ │ │ ├── bigredmedbayvar2.dmm
│ │ │ ├── bigredmedbayvar3.dmm
│ │ │ ├── bigredmedbayvar4.dmm
│ │ │ ├── bigredmedbayvar5.dmm
│ │ │ ├── bigredmedbayvar6.dmm
│ │ │ ├── bigredmedbayvar7.dmm
│ │ │ ├── bigrednorthlambdavar1.dmm
│ │ │ ├── bigrednorthlambdavar2.dmm
│ │ │ ├── bigrednorthlambdavar3.dmm
│ │ │ ├── bigrednorthlambdavar4.dmm
│ │ │ ├── bigrednorthlambdavar5.dmm
│ │ │ ├── bigrednorthlambdavar6.dmm
│ │ │ ├── bigredofficevar1.dmm
│ │ │ ├── bigredofficevar2.dmm
│ │ │ ├── bigredofficevar3.dmm
│ │ │ ├── bigredsecornervar1.dmm
│ │ │ ├── bigredsecornervar2.dmm
│ │ │ ├── bigredsecornervar3.dmm
│ │ │ ├── bigredsecornervar4.dmm
│ │ │ ├── bigredsecornervar5.dmm
│ │ │ ├── bigredsecornervar6.dmm
│ │ │ ├── bigredsecornervar7.dmm
│ │ │ ├── bigredsouthetavar1.dmm
│ │ │ ├── bigredsouthetavar2.dmm
│ │ │ ├── bigredsouthetavar3.dmm
│ │ │ ├── bigredsouthetavar4.dmm
│ │ │ ├── bigredsouthetavar5.dmm
│ │ │ ├── bigredsouthwestetavar1.dmm
│ │ │ ├── bigredsouthwestetavar2.dmm
│ │ │ ├── bigredsouthwestetavar3.dmm
│ │ │ ├── bigredsouthwestetavar4.dmm
│ │ │ ├── bigredsouthwestetavar5.dmm
│ │ │ ├── bigredsweastcornervar1.dmm
│ │ │ ├── bigredsweastcornervar2.dmm
│ │ │ ├── bigredsweastcornervar3.dmm
│ │ │ ├── bigredsweastcornervar4.dmm
│ │ │ ├── bigredsweastcornervar5.dmm
│ │ │ ├── bigredtoolshedvar1.dmm
│ │ │ ├── bigredtoolshedvar2.dmm
│ │ │ ├── bigredtoolshedvar3.dmm
│ │ │ ├── bigredtoolshedvar4.dmm
│ │ │ ├── bigredtoolshedvar5.dmm
│ │ │ └── operation.dmm
│ │ ├── corsatdome/
│ │ │ ├── corsatdomebigred.dmm
│ │ │ ├── corsatdomeicecolony.dmm
│ │ │ └── corsatdomelv.dmm
│ │ ├── fiorina/
│ │ │ ├── engiofficevar1.dmm
│ │ │ ├── engiofficevar2.dmm
│ │ │ ├── gearvar1.dmm
│ │ │ ├── gearvar2.dmm
│ │ │ ├── medicalvar1.dmm
│ │ │ ├── medicalvar2.dmm
│ │ │ ├── meetingroomsvar1.dmm
│ │ │ ├── meetingroomsvar2.dmm
│ │ │ ├── panelsvarone.dmm
│ │ │ ├── panelsvartwo.dmm
│ │ │ ├── pizzavar1.dmm
│ │ │ ├── pizzavar2.dmm
│ │ │ ├── researchvar1.dmm
│ │ │ ├── researchvar2.dmm
│ │ │ ├── ringvar1.dmm
│ │ │ ├── ringvar2.dmm
│ │ │ ├── scavshipvar1.dmm
│ │ │ ├── scavshipvar2.dmm
│ │ │ ├── wardenofficevar1.dmm
│ │ │ └── wardenofficevar2.dmm
│ │ ├── jungle_outpost/
│ │ │ ├── joutpostengi1.dmm
│ │ │ ├── joutpostengi2.dmm
│ │ │ ├── joutpostengi3.dmm
│ │ │ ├── joutposthydro1.dmm
│ │ │ ├── joutposthydro2.dmm
│ │ │ ├── joutposthydro3.dmm
│ │ │ ├── joutpostmedbay1.dmm
│ │ │ ├── joutpostmedbay2.dmm
│ │ │ ├── joutpostmedbay3.dmm
│ │ │ ├── joutpostscrates1.dmm
│ │ │ ├── joutpostscrates2.dmm
│ │ │ ├── joutpostscrates3.dmm
│ │ │ ├── joutpostscrates4.dmm
│ │ │ ├── joutpostwtower1.dmm
│ │ │ ├── joutpostwtower2.dmm
│ │ │ ├── joutpostwtower3.dmm
│ │ │ └── joutpostwtower4.dmm
│ │ ├── lv624/
│ │ │ ├── atmospherics.dmm
│ │ │ ├── auxbotany.dmm
│ │ │ ├── cargo_bay.dmm
│ │ │ ├── cargo_bay2.dmm
│ │ │ ├── hydro_jungle.dmm
│ │ │ ├── hydro_path.dmm
│ │ │ ├── internal_affairs.dmm
│ │ │ ├── lakebase.dmm
│ │ │ ├── lvhydrobridge1.dmm
│ │ │ ├── lvhydrobridge2.dmm
│ │ │ ├── lvhydrobridge3.dmm
│ │ │ ├── lvhydrobridge4.dmm
│ │ │ ├── medbayone.dmm
│ │ │ ├── medbaytwo.dmm
│ │ │ ├── newcavevar1.dmm
│ │ │ ├── newcavevar10.dmm
│ │ │ ├── newcavevar11.dmm
│ │ │ ├── newcavevar12.dmm
│ │ │ ├── newcavevar2.dmm
│ │ │ ├── newcavevar3.dmm
│ │ │ ├── newcavevar4.dmm
│ │ │ ├── newcavevar5.dmm
│ │ │ ├── newcavevar6.dmm
│ │ │ ├── newcavevar7.dmm
│ │ │ ├── newcavevar8.dmm
│ │ │ ├── newcavevar9.dmm
│ │ │ ├── robotics.dmm
│ │ │ ├── southsandtemple1.dmm
│ │ │ ├── southsandtemple2.dmm
│ │ │ ├── southsandtemple3.dmm
│ │ │ ├── southsandtemple4.dmm
│ │ │ └── telecomms.dmm
│ │ ├── oscaroutpost/
│ │ │ ├── oscarnorthvar1.dmm
│ │ │ ├── oscarnorthvar2.dmm
│ │ │ ├── oscarnorthvar3.dmm
│ │ │ ├── oscarnorthvar4.dmm
│ │ │ ├── oscarsouthvar1.dmm
│ │ │ ├── oscarsouthvar2.dmm
│ │ │ ├── oscarsouthvar3.dmm
│ │ │ ├── oscarsouthvar4.dmm
│ │ │ ├── oscarsouthvar5.dmm
│ │ │ ├── oscarsouthvar6.dmm
│ │ │ └── oscarsouthvar7.dmm
│ │ └── prison/
│ │ ├── civresbeach.dmm
│ │ └── civresgym.dmm
│ ├── multiz_debug.json
│ ├── orion_outpost.json
│ ├── oscar_outpost.json
│ ├── pillar_of_spring.json
│ ├── prison_station_fop.json
│ ├── research_outpost.json
│ ├── riptide.json
│ ├── shuttles/
│ │ ├── alamo.dmm
│ │ ├── big_ert.dmm
│ │ ├── casplane.dmm
│ │ ├── distress.dmm
│ │ ├── distress_pmc.dmm
│ │ ├── distress_ufo.dmm
│ │ ├── distress_upp.dmm
│ │ ├── escape_pod.dmm
│ │ ├── escape_shuttle.dmm
│ │ ├── minidropship_big.dmm
│ │ ├── minidropship_factorio.dmm
│ │ ├── minidropship_food.dmm
│ │ ├── minidropship_mobile_bar.dmm
│ │ ├── minidropship_outrider.dmm
│ │ ├── minidropship_panopticon.dmm
│ │ ├── minidropship_standard.dmm
│ │ ├── minidropship_umbilical.dmm
│ │ ├── minidropship_urbantower.dmm
│ │ ├── normandy.dmm
│ │ ├── supply.dmm
│ │ ├── tgs_bigbury.dmm
│ │ ├── tgs_canterbury.dmm
│ │ └── vehicle_supply.dmm
│ ├── slumbridge.json
│ ├── sulaco.json
│ ├── templates/
│ │ ├── capsule_1.dmm
│ │ └── unit_tests.dmm
│ ├── theseus.json
│ ├── vapor_processing.json
│ └── whiskey_outpost_v2.json
├── bin/
│ ├── build.cmd
│ ├── clean.cmd
│ ├── server.cmd
│ ├── test.cmd
│ ├── tgfont.cmd
│ ├── tgui-bench.cmd
│ ├── tgui-build.cmd
│ ├── tgui-dev.cmd
│ └── tgui-sonar.cmd
├── code/
│ ├── __DEFINES/
│ │ ├── DNA.dm
│ │ ├── MC.dm
│ │ ├── __game.dm
│ │ ├── _click.dm
│ │ ├── _globals.dm
│ │ ├── _helpers.dm
│ │ ├── _math.dm
│ │ ├── _protect.dm
│ │ ├── _radio.dm
│ │ ├── _subsystems.dm
│ │ ├── _tick.dm
│ │ ├── access.dm
│ │ ├── action.dm
│ │ ├── actions.dm
│ │ ├── admin.dm
│ │ ├── admin_verb.dm
│ │ ├── ai.dm
│ │ ├── alerts.dm
│ │ ├── announce.dm
│ │ ├── apc_defines.dm
│ │ ├── area.dm
│ │ ├── artillery.dm
│ │ ├── assert.dm
│ │ ├── atmospherics.dm
│ │ ├── atom.dm
│ │ ├── atom_hud.dm
│ │ ├── atom_movable.dm
│ │ ├── attachments.dm
│ │ ├── autofire.dm
│ │ ├── bitfields.dm
│ │ ├── blend_modes.dm
│ │ ├── buckling.dm
│ │ ├── calibers.dm
│ │ ├── callbacks.dm
│ │ ├── campaign.dm
│ │ ├── cas.dm
│ │ ├── chat.dm
│ │ ├── chat_filter.dm
│ │ ├── client.dm
│ │ ├── colors.dm
│ │ ├── combat.dm
│ │ ├── configuration.dm
│ │ ├── conflict.dm
│ │ ├── construction.dm
│ │ ├── cooldowns.dm
│ │ ├── coordinates.dm
│ │ ├── crafting.dm
│ │ ├── dcs/
│ │ │ ├── flags.dm
│ │ │ ├── helpers.dm
│ │ │ └── signals/
│ │ │ ├── mapping.dm
│ │ │ ├── signals.dm
│ │ │ ├── signals_atom/
│ │ │ │ ├── signals_atom_mouse.dm
│ │ │ │ └── signals_atom_x_act.dm
│ │ │ ├── signals_client.dm
│ │ │ ├── signals_datum.dm
│ │ │ ├── signals_food.dm
│ │ │ ├── signals_hud.dm
│ │ │ ├── signals_keybindings.dm
│ │ │ ├── signals_ladder.dm
│ │ │ ├── signals_lazy_templates.dm
│ │ │ ├── signals_lift.dm
│ │ │ ├── signals_mind.dm
│ │ │ ├── signals_plane_master_group.dm
│ │ │ ├── signals_reagent.dm
│ │ │ ├── signals_subsystem.dm
│ │ │ ├── signals_tgui.dm
│ │ │ └── signals_transport.dm
│ │ ├── defibrillator.dm
│ │ ├── directional.dm
│ │ ├── do_afters.dm
│ │ ├── dropship_equipment.dm
│ │ ├── emote.dm
│ │ ├── equipment.dm
│ │ ├── events.dm
│ │ ├── factions.dm
│ │ ├── factory.dm
│ │ ├── fire_support.dm
│ │ ├── flags.dm
│ │ ├── flags_turf.dm
│ │ ├── foam.dm
│ │ ├── font_awesome_icons.dm
│ │ ├── fonts.dm
│ │ ├── food.dm
│ │ ├── footsteps.dm
│ │ ├── fov.dm
│ │ ├── generators.dm
│ │ ├── greyscale.dm
│ │ ├── health_scan.dm
│ │ ├── html_assistant.dm
│ │ ├── hud.dm
│ │ ├── icon_smoothing.dm
│ │ ├── implants.dm
│ │ ├── instruments.dm
│ │ ├── interaction.dm
│ │ ├── is_helpers.dm
│ │ ├── items.dm
│ │ ├── jobs.dm
│ │ ├── keybind.dm
│ │ ├── language.dm
│ │ ├── layers.dm
│ │ ├── lazy_templates.dm
│ │ ├── legacy_modular_armor.dm
│ │ ├── lighting.dm
│ │ ├── loadout.dm
│ │ ├── loadout_variants.dm
│ │ ├── logging.dm
│ │ ├── machines.dm
│ │ ├── map_switch.dm
│ │ ├── mapping.dm
│ │ ├── maps.dm
│ │ ├── maths.dm
│ │ ├── matrices.dm
│ │ ├── mecha.dm
│ │ ├── minimap.dm
│ │ ├── misc.dm
│ │ ├── mobs.dm
│ │ ├── mode.dm
│ │ ├── modular_armor.dm
│ │ ├── monitor.dm
│ │ ├── move_force.dm
│ │ ├── movement.dm
│ │ ├── movement_info.dm
│ │ ├── movespeed_modification.dm
│ │ ├── multiz.dm
│ │ ├── mutations.dm
│ │ ├── obj_flags.dm
│ │ ├── objects.dm
│ │ ├── overlays.dm
│ │ ├── overwatch.dm
│ │ ├── particles.dm
│ │ ├── pipe_construction.dm
│ │ ├── power.dm
│ │ ├── preferences.dm
│ │ ├── procpath.dm
│ │ ├── progress_display.dm
│ │ ├── qdel.dm
│ │ ├── reagents.dm
│ │ ├── rust_g.dm
│ │ ├── rust_g_overrides.dm
│ │ ├── say.dm
│ │ ├── security_level.dm
│ │ ├── shuttles.dm
│ │ ├── sight.dm
│ │ ├── skills.dm
│ │ ├── smoothing.dm
│ │ ├── sound.dm
│ │ ├── spaceman_dmm.dm
│ │ ├── span.dm
│ │ ├── spatial_gridmap.dm
│ │ ├── species.dm
│ │ ├── speech_channels.dm
│ │ ├── speech_controller.dm
│ │ ├── stat_tracking.dm
│ │ ├── status_effects.dm
│ │ ├── stripping.dm
│ │ ├── structures.dm
│ │ ├── supply.dm
│ │ ├── synthetic.dm
│ │ ├── text.dm
│ │ ├── tgs.config.dm
│ │ ├── tgs.dm
│ │ ├── tgui.dm
│ │ ├── time.dm
│ │ ├── tools.dm
│ │ ├── traits.dm
│ │ ├── transport.dm
│ │ ├── tts.dm
│ │ ├── turfs.dm
│ │ ├── typeids.dm
│ │ ├── unit_tests.dm
│ │ ├── vehicles.dm
│ │ ├── vv.dm
│ │ ├── wires.dm
│ │ ├── xeno.dm
│ │ └── zombie.dm
│ ├── __HELPERS/
│ │ ├── _lists.dm
│ │ ├── _planes.dm
│ │ ├── _string_lists.dm
│ │ ├── admin.dm
│ │ ├── ai.dm
│ │ ├── announce.dm
│ │ ├── bitflag_lists.dm
│ │ ├── chat.dm
│ │ ├── chat_filter.dm
│ │ ├── cmp.dm
│ │ ├── colors.dm
│ │ ├── config.dm
│ │ ├── datums.dm
│ │ ├── duplicating.dm
│ │ ├── files.dm
│ │ ├── filters.dm
│ │ ├── game.dm
│ │ ├── generators.dm
│ │ ├── global_lists.dm
│ │ ├── heap.dm
│ │ ├── icon_smoothing.dm
│ │ ├── icons.dm
│ │ ├── jatum.dm
│ │ ├── lazy_templates.dm
│ │ ├── level_traits.dm
│ │ ├── lighting.dm
│ │ ├── logging/
│ │ │ ├── _logging.dm
│ │ │ ├── admin.dm
│ │ │ ├── attack.dm
│ │ │ ├── debug.dm
│ │ │ ├── game.dm
│ │ │ ├── manifest.dm
│ │ │ ├── mecha.dm
│ │ │ ├── mob.dm
│ │ │ ├── paper.dm
│ │ │ ├── talk.dm
│ │ │ ├── tool.dm
│ │ │ ├── transport.dm
│ │ │ └── ui.dm
│ │ ├── math.dm
│ │ ├── matrices.dm
│ │ ├── mech.dm
│ │ ├── mobs.dm
│ │ ├── names.dm
│ │ ├── ooc_announcement.dm
│ │ ├── patterns.dm
│ │ ├── pencode.dm
│ │ ├── pronouns.dm
│ │ ├── qdel.dm
│ │ ├── sanitize_values.dm
│ │ ├── screen_objs.dm
│ │ ├── shell.dm
│ │ ├── sorts/
│ │ │ ├── InsertSort.dm
│ │ │ ├── MergeSort.dm
│ │ │ ├── TimSort.dm
│ │ │ └── __main.dm
│ │ ├── spatial_info.dm
│ │ ├── stat_tracking.dm
│ │ ├── string_lists.dm
│ │ ├── text.dm
│ │ ├── time.dm
│ │ ├── traits.dm
│ │ ├── tts.dm
│ │ ├── turfs.dm
│ │ ├── type2type.dm
│ │ ├── type_processing.dm
│ │ ├── unsorted.dm
│ │ ├── verbs.dm
│ │ ├── view.dm
│ │ └── visual_effects.dm
│ ├── __byond_version_compat.dm
│ ├── _compile_options.dm
│ ├── _globalvars/
│ │ ├── admin.dm
│ │ ├── bitfields.dm
│ │ ├── colorvars.dm
│ │ ├── configuration.dm
│ │ ├── game_modes.dm
│ │ ├── lists/
│ │ │ ├── admin.dm
│ │ │ ├── client.dm
│ │ │ ├── crafting.dm
│ │ │ ├── flavor_misc.dm
│ │ │ ├── game_modes.dm
│ │ │ ├── hud.dm
│ │ │ ├── icons.dm
│ │ │ ├── keybinding.dm
│ │ │ ├── mapping.dm
│ │ │ ├── mobs.dm
│ │ │ ├── objects.dm
│ │ │ ├── typechache.dm
│ │ │ └── vending.dm
│ │ ├── logging.dm
│ │ ├── misc.dm
│ │ ├── regexes.dm
│ │ └── tgui.dm
│ ├── _onclick/
│ │ ├── adjacent.dm
│ │ ├── ai.dm
│ │ ├── click.dm
│ │ ├── double_click.dm
│ │ ├── drag_drop.dm
│ │ ├── hud/
│ │ │ ├── ai.dm
│ │ │ ├── alerts.dm
│ │ │ ├── fullscreen.dm
│ │ │ ├── ghost.dm
│ │ │ ├── hud.dm
│ │ │ ├── human.dm
│ │ │ ├── interactive_emotes.dm
│ │ │ ├── map_popups.dm
│ │ │ ├── map_view.dm
│ │ │ ├── movable_screen_objects.dm
│ │ │ ├── new_player.dm
│ │ │ ├── parallax/
│ │ │ │ ├── parallax.dm
│ │ │ │ └── random_layer.dm
│ │ │ ├── picture_in_picture.dm
│ │ │ ├── radial.dm
│ │ │ ├── radial_persistent.dm
│ │ │ ├── rendering/
│ │ │ │ ├── _render_readme.md
│ │ │ │ ├── plane_master_controller.dm
│ │ │ │ ├── plane_master_group.dm
│ │ │ │ ├── plane_masters/
│ │ │ │ │ ├── _plane_master.dm
│ │ │ │ │ └── plane_master_subtypes.dm
│ │ │ │ └── render_plate.dm
│ │ │ ├── screen_objects/
│ │ │ │ ├── menu_text_objects.dm
│ │ │ │ ├── screen_objects.dm
│ │ │ │ └── text_objects.dm
│ │ │ └── xeno/
│ │ │ ├── hivemind.dm
│ │ │ ├── larva.dm
│ │ │ └── xeno.dm
│ │ ├── human.dm
│ │ ├── item_attack.dm
│ │ ├── living.dm
│ │ ├── observer.dm
│ │ ├── other_mobs.dm
│ │ ├── telekinesis.dm
│ │ ├── ventcrawl.dm
│ │ └── xeno.dm
│ ├── controllers/
│ │ ├── admin.dm
│ │ ├── configuration/
│ │ │ ├── config_entry.dm
│ │ │ ├── configuration.dm
│ │ │ └── entries/
│ │ │ ├── comms.dm
│ │ │ ├── dbconfig.dm
│ │ │ ├── game_options.dm
│ │ │ ├── general.dm
│ │ │ └── resources.dm
│ │ ├── controller.dm
│ │ ├── failsafe.dm
│ │ ├── globals.dm
│ │ ├── master.dm
│ │ ├── subsystem/
│ │ │ ├── admin_verbs.dm
│ │ │ ├── advanced_pathfinding.dm
│ │ │ ├── air.dm
│ │ │ ├── ambience.dm
│ │ │ ├── area_contents.dm
│ │ │ ├── asset_loading.dm
│ │ │ ├── assets.dm
│ │ │ ├── atoms.dm
│ │ │ ├── aura.dm
│ │ │ ├── autofire.dm
│ │ │ ├── blackbox.dm
│ │ │ ├── chat.dm
│ │ │ ├── codex.dm
│ │ │ ├── dbcore.dm
│ │ │ ├── dcs.dm
│ │ │ ├── direction.dm
│ │ │ ├── discord.dm
│ │ │ ├── early_asset.dm
│ │ │ ├── egrill.dm
│ │ │ ├── evacuation.dm
│ │ │ ├── events.dm
│ │ │ ├── excavation.dm
│ │ │ ├── explosions.dm
│ │ │ ├── garbage.dm
│ │ │ ├── greyscale.dm
│ │ │ ├── icon_smooth.dm
│ │ │ ├── idlenpcpool.dm
│ │ │ ├── input.dm
│ │ │ ├── job.dm
│ │ │ ├── lighting.dm
│ │ │ ├── loopingsound.dm
│ │ │ ├── machines.dm
│ │ │ ├── mapping.dm
│ │ │ ├── minimap/
│ │ │ │ ├── minimap_action_subtypes.dm
│ │ │ │ └── minimaps.dm
│ │ │ ├── mobs.dm
│ │ │ ├── modularmapping.dm
│ │ │ ├── monitor.dm
│ │ │ ├── mouse_entered.dm
│ │ │ ├── npcpool.dm
│ │ │ ├── overlays.dm
│ │ │ ├── parallax.dm
│ │ │ ├── pathfinder.dm
│ │ │ ├── persistence/
│ │ │ │ ├── _persistence.dm
│ │ │ │ └── counter_tram_hits.dm
│ │ │ ├── ping.dm
│ │ │ ├── points.dm
│ │ │ ├── processing/
│ │ │ │ ├── fastprocess.dm
│ │ │ │ ├── instruments.dm
│ │ │ │ ├── obj.dm
│ │ │ │ ├── obj_tab_items.dm
│ │ │ │ ├── processing.dm
│ │ │ │ ├── projectiles.dm
│ │ │ │ ├── resinshaping.dm
│ │ │ │ └── slowprocess.dm
│ │ │ ├── radio.dm
│ │ │ ├── runechat.dm
│ │ │ ├── security_level.dm
│ │ │ ├── server_maint.dm
│ │ │ ├── shuttle.dm
│ │ │ ├── silo.dm
│ │ │ ├── sounds.dm
│ │ │ ├── spatial_gridmap.dm
│ │ │ ├── spawning.dm
│ │ │ ├── speech_controller.dm
│ │ │ ├── statpanel.dm
│ │ │ ├── stickyban.dm
│ │ │ ├── strings.dm
│ │ │ ├── tgui.dm
│ │ │ ├── ticker.dm
│ │ │ ├── time_track.dm
│ │ │ ├── timer.dm
│ │ │ ├── transport.dm
│ │ │ ├── tts.dm
│ │ │ ├── tutorials.dm
│ │ │ ├── vis_overlays.dm
│ │ │ ├── vote.dm
│ │ │ ├── weather.dm
│ │ │ ├── weeds.dm
│ │ │ └── weeds_decay.dm
│ │ └── subsystem.dm
│ ├── datums/
│ │ ├── actions/
│ │ │ ├── ability_actions.dm
│ │ │ ├── action.dm
│ │ │ ├── innate.dm
│ │ │ ├── item_action.dm
│ │ │ ├── item_toggles.dm
│ │ │ ├── observer_action.dm
│ │ │ ├── order_action.dm
│ │ │ ├── order_designation/
│ │ │ │ ├── base.dm
│ │ │ │ ├── build_mode.dm
│ │ │ │ └── interactions.dm
│ │ │ ├── orders.dm
│ │ │ ├── skill.dm
│ │ │ ├── species_actions/
│ │ │ │ ├── prototype_supersoldier_action.dm
│ │ │ │ ├── sectoid_action.dm
│ │ │ │ └── zombie_actions.dm
│ │ │ ├── weapon_actions.dm
│ │ │ └── xeno_action.dm
│ │ ├── antag.dm
│ │ ├── armor.dm
│ │ ├── atom_hud.dm
│ │ ├── balance.dm
│ │ ├── beam.dm
│ │ ├── browser.dm
│ │ ├── callback.dm
│ │ ├── changelog/
│ │ │ └── changelog.dm
│ │ ├── chat_payload.dm
│ │ ├── chatmessage.dm
│ │ ├── cinematic.dm
│ │ ├── components/
│ │ │ ├── _component.dm
│ │ │ ├── admin_popup.dm
│ │ │ ├── after_image.dm
│ │ │ ├── ai.dm
│ │ │ ├── anti_juggling.dm
│ │ │ ├── attachment_handler.dm
│ │ │ ├── autobalance_monitor.dm
│ │ │ ├── autofire.dm
│ │ │ ├── beacon.dm
│ │ │ ├── blur_protection.dm
│ │ │ ├── bump_attack.dm
│ │ │ ├── chem_booster.dm
│ │ │ ├── climbable.dm
│ │ │ ├── clothing_fov_visor.dm
│ │ │ ├── clothing_tint.dm
│ │ │ ├── companion.dm
│ │ │ ├── connect_containers.dm
│ │ │ ├── connect_loc_behalf.dm
│ │ │ ├── connect_mob_behalf.dm
│ │ │ ├── connect_range.dm
│ │ │ ├── crafting/
│ │ │ │ ├── _recipes.dm
│ │ │ │ └── crafting.dm
│ │ │ ├── deployable_item.dm
│ │ │ ├── dripping.dm
│ │ │ ├── fov_handler.dm
│ │ │ ├── fuel_component.dm
│ │ │ ├── grillable.dm
│ │ │ ├── harvester.dm
│ │ │ ├── hide_highest_offset.dm
│ │ │ ├── hide_weather_planes.dm
│ │ │ ├── jump.dm
│ │ │ ├── largeobjecttransparency.dm
│ │ │ ├── larva_queue.dm
│ │ │ ├── mobile_power.dm
│ │ │ ├── mounted_gun.dm
│ │ │ ├── npc_controller.dm
│ │ │ ├── orbiter.dm
│ │ │ ├── overlay_lighting.dm
│ │ │ ├── reequip.dm
│ │ │ ├── remote_control.dm
│ │ │ ├── riding/
│ │ │ │ ├── riding.dm
│ │ │ │ ├── riding_mob.dm
│ │ │ │ └── riding_vehicle.dm
│ │ │ ├── rotation.dm
│ │ │ ├── seethrough_mob.dm
│ │ │ ├── shield.dm
│ │ │ ├── sizzle.dm
│ │ │ ├── slippery.dm
│ │ │ ├── squeak.dm
│ │ │ ├── stamina_behavior.dm
│ │ │ ├── sticky_item.dm
│ │ │ ├── stun_mitigation.dm
│ │ │ ├── submerge_mod.dm
│ │ │ ├── suit_autodoc.dm
│ │ │ ├── tac_reload_storage.dm
│ │ │ ├── takes_reagent_appearance.dm
│ │ │ ├── throw_parry.dm
│ │ │ ├── udder.dm
│ │ │ └── xeno_iff.dm
│ │ ├── custom_emotes.dm
│ │ ├── datacore.dm
│ │ ├── datum.dm
│ │ ├── elements/
│ │ │ ├── _element.dm
│ │ │ ├── attachment.dm
│ │ │ ├── connect_loc.dm
│ │ │ ├── debris.dm
│ │ │ ├── directional_attack.dm
│ │ │ ├── egrill_element.dm
│ │ │ ├── footstep.dm
│ │ │ ├── gestures.dm
│ │ │ ├── keybinding_update.dm
│ │ │ ├── light_blocking.dm
│ │ │ ├── limb_support.dm
│ │ │ ├── plasma_on_attack.dm
│ │ │ ├── plasma_on_attacked.dm
│ │ │ ├── riding.dm
│ │ │ ├── scalping.dm
│ │ │ ├── shrapnel_removal.dm
│ │ │ ├── special_clothing_overlay.dm
│ │ │ ├── strappable.dm
│ │ │ ├── strippable.dm
│ │ │ ├── submerge.dm
│ │ │ ├── turf_transparency.dm
│ │ │ ├── undertile.dm
│ │ │ ├── wall_speedup.dm
│ │ │ ├── window_smash.dm
│ │ │ └── windowshutter.dm
│ │ ├── embedding_behavior.dm
│ │ ├── emergency_calls/
│ │ │ ├── clf.dm
│ │ │ ├── colonists.dm
│ │ │ ├── deathsquad.dm
│ │ │ ├── emergency_call.dm
│ │ │ ├── erp.dm
│ │ │ ├── freelancers.dm
│ │ │ ├── icc.dm
│ │ │ ├── imperium.dm
│ │ │ ├── pizza.dm
│ │ │ ├── pmc.dm
│ │ │ ├── retired.dm
│ │ │ ├── sectoid.dm
│ │ │ ├── skeleton.dm
│ │ │ ├── sons_of_mars_breachers.dm
│ │ │ ├── sonsofmars.dm
│ │ │ ├── special_forces.dm
│ │ │ ├── supplies.dm
│ │ │ ├── upp.dm
│ │ │ ├── upp_commando.dm
│ │ │ ├── vsd.dm
│ │ │ ├── xeno.dm
│ │ │ ├── xenoalpha.dm
│ │ │ ├── xenobeta.dm
│ │ │ ├── xenocorrupted.dm
│ │ │ └── xenozeta.dm
│ │ ├── emotes.dm
│ │ ├── fire_support/
│ │ │ ├── drop_pod.dm
│ │ │ ├── fire_support.dm
│ │ │ ├── gun_run.dm
│ │ │ ├── missile.dm
│ │ │ ├── mortar.dm
│ │ │ ├── rockets.dm
│ │ │ └── teleport.dm
│ │ ├── fluff_emails.dm
│ │ ├── gamemodes/
│ │ │ ├── _game_mode.dm
│ │ │ ├── campaign/
│ │ │ │ ├── campaign_assets.dm
│ │ │ │ ├── campaign_mission.dm
│ │ │ │ ├── faction_stats.dm
│ │ │ │ ├── individual_stats.dm
│ │ │ │ ├── loadout_items/
│ │ │ │ │ ├── SOM/
│ │ │ │ │ │ ├── back_slot.dm
│ │ │ │ │ │ ├── belt.dm
│ │ │ │ │ │ ├── ears.dm
│ │ │ │ │ │ ├── feet.dm
│ │ │ │ │ │ ├── gloves.dm
│ │ │ │ │ │ ├── head.dm
│ │ │ │ │ │ ├── pockets.dm
│ │ │ │ │ │ ├── secondaries.dm
│ │ │ │ │ │ ├── suit.dm
│ │ │ │ │ │ ├── suit_storage/
│ │ │ │ │ │ │ ├── engineer.dm
│ │ │ │ │ │ │ ├── field_commander.dm
│ │ │ │ │ │ │ ├── medic.dm
│ │ │ │ │ │ │ ├── squad_leader.dm
│ │ │ │ │ │ │ ├── standard.dm
│ │ │ │ │ │ │ └── veteran.dm
│ │ │ │ │ │ └── uniform.dm
│ │ │ │ │ ├── _TGMC/
│ │ │ │ │ │ ├── back_slot.dm
│ │ │ │ │ │ ├── belt.dm
│ │ │ │ │ │ ├── ears.dm
│ │ │ │ │ │ ├── eyes.dm
│ │ │ │ │ │ ├── feet.dm
│ │ │ │ │ │ ├── gloves.dm
│ │ │ │ │ │ ├── head.dm
│ │ │ │ │ │ ├── mask.dm
│ │ │ │ │ │ ├── pockets.dm
│ │ │ │ │ │ ├── secondaries.dm
│ │ │ │ │ │ ├── suit.dm
│ │ │ │ │ │ ├── suit_storage/
│ │ │ │ │ │ │ ├── corpsman.dm
│ │ │ │ │ │ │ ├── engineer.dm
│ │ │ │ │ │ │ ├── field_commander.dm
│ │ │ │ │ │ │ ├── marine.dm
│ │ │ │ │ │ │ ├── smartgunner.dm
│ │ │ │ │ │ │ └── squad_leader.dm
│ │ │ │ │ │ ├── suit_storage.dm
│ │ │ │ │ │ └── uniform.dm
│ │ │ │ │ ├── generic_secondaries/
│ │ │ │ │ │ ├── corpsman.dm
│ │ │ │ │ │ └── engineer.dm
│ │ │ │ │ ├── secondary.dm
│ │ │ │ │ └── secondary_types.dm
│ │ │ │ ├── loadout_items.dm
│ │ │ │ ├── missions/
│ │ │ │ │ ├── airbase_raid.dm
│ │ │ │ │ ├── asat_capture.dm
│ │ │ │ │ ├── base_rescue.dm
│ │ │ │ │ ├── capture_mission.dm
│ │ │ │ │ ├── comm_uplink.dm
│ │ │ │ │ ├── destroy_mission.dm
│ │ │ │ │ ├── final_mission.dm
│ │ │ │ │ ├── fire_support_raid.dm
│ │ │ │ │ ├── mech_wars.dm
│ │ │ │ │ ├── patrol_mission.dm
│ │ │ │ │ ├── phoron_capture.dm
│ │ │ │ │ ├── raiding_base.dm
│ │ │ │ │ ├── spearhead_assault.dm
│ │ │ │ │ ├── supply_raid.dm
│ │ │ │ │ └── teleporter_raid.dm
│ │ │ │ ├── outfit_holder.dm
│ │ │ │ ├── perks.dm
│ │ │ │ └── rewards/
│ │ │ │ ├── allies.dm
│ │ │ │ ├── attrition_mods.dm
│ │ │ │ ├── campaign_asset_jobs.dm
│ │ │ │ ├── disablers.dm
│ │ │ │ ├── drop_pods.dm
│ │ │ │ ├── equipment.dm
│ │ │ │ ├── fire_support.dm
│ │ │ │ ├── mechs.dm
│ │ │ │ ├── reserves.dm
│ │ │ │ └── teleporter.dm
│ │ │ ├── campaign.dm
│ │ │ ├── combat_patrol.dm
│ │ │ ├── crash.dm
│ │ │ ├── extended.dm
│ │ │ ├── hvh.dm
│ │ │ ├── infestation.dm
│ │ │ ├── nuclear_war.dm
│ │ │ ├── objective.dm
│ │ │ ├── objective_items.dm
│ │ │ ├── sensor_capture.dm
│ │ │ ├── sovl_war.dm
│ │ │ └── zombie_crash.dm
│ │ ├── greyscale/
│ │ │ ├── README.md
│ │ │ ├── _greyscale_config.dm
│ │ │ ├── config_types/
│ │ │ │ └── new_mech.dm
│ │ │ ├── greyscale_configs.dm
│ │ │ ├── json_configs/
│ │ │ │ ├── ammo.json
│ │ │ │ ├── armor_mk1.json
│ │ │ │ ├── armor_mk2.json
│ │ │ │ ├── badge.json
│ │ │ │ ├── bench_corner.json
│ │ │ │ ├── bench_left.json
│ │ │ │ ├── bench_middle.json
│ │ │ │ ├── bench_right.json
│ │ │ │ ├── bench_solo.json
│ │ │ │ ├── broken_man.json
│ │ │ │ ├── cape.json
│ │ │ │ ├── cape_highlight.json
│ │ │ │ ├── duster.json
│ │ │ │ ├── exoskeleton.json
│ │ │ │ ├── greyscale_visor.json
│ │ │ │ ├── hardsuit_variant.json
│ │ │ │ ├── leather_jacket.json
│ │ │ │ ├── marine_uniform.json
│ │ │ │ ├── mech_arm.json
│ │ │ │ ├── mech_head.json
│ │ │ │ ├── mech_legs.json
│ │ │ │ ├── mech_torso.json
│ │ │ │ ├── mech_visor.json
│ │ │ │ ├── new_mech_arm.json
│ │ │ │ ├── new_mech_head.json
│ │ │ │ ├── new_mech_legs.json
│ │ │ │ ├── new_mech_torso.json
│ │ │ │ ├── new_mech_visor.json
│ │ │ │ ├── pillbottle.json
│ │ │ │ ├── pillbottlebox.json
│ │ │ │ ├── pillbottlebubble.json
│ │ │ │ ├── pillbottlecrate.json
│ │ │ │ ├── pillbottleround.json
│ │ │ │ ├── pillbottlespire.json
│ │ │ │ ├── projectiles.json
│ │ │ │ ├── protein.json
│ │ │ │ ├── robot_armor.json
│ │ │ │ ├── screwdriver.json
│ │ │ │ ├── screwdriver_inhand_left.json
│ │ │ │ ├── screwdriver_inhand_right.json
│ │ │ │ ├── stylehats.json
│ │ │ │ ├── stylehats_greyscale.json
│ │ │ │ ├── visor_glyphs.json
│ │ │ │ ├── visors.json
│ │ │ │ ├── vsd_hardsuit.json
│ │ │ │ ├── xenogrenade.json
│ │ │ │ ├── xenonaut.json
│ │ │ │ └── xenonaut_helm.json
│ │ │ └── layer.dm
│ │ ├── health_scan/
│ │ │ ├── _advice.dm
│ │ │ ├── advice/
│ │ │ │ ├── chem_mix_warnings.dm
│ │ │ │ ├── crit_condition.dm
│ │ │ │ ├── damage_types.dm
│ │ │ │ ├── implanted_embryo.dm
│ │ │ │ ├── limb_warnings.dm
│ │ │ │ ├── revival_tips.dm
│ │ │ │ ├── special_max_health.dm
│ │ │ │ ├── species_notes.dm
│ │ │ │ └── traumatic_shock.dm
│ │ │ ├── health_scan.dm
│ │ │ └── historic_scans.dm
│ │ ├── helper_datums/
│ │ │ ├── getrev.dm
│ │ │ └── stack_end_detector.dm
│ │ ├── holocall.dm
│ │ ├── http.dm
│ │ ├── interior/
│ │ │ ├── _interior.dm
│ │ │ ├── interior_apc.dm
│ │ │ ├── interior_icc_recontank.dm
│ │ │ ├── interior_tank.dm
│ │ │ ├── link_interior.dm
│ │ │ └── map_templates.dm
│ │ ├── jobs/
│ │ │ ├── access.dm
│ │ │ ├── job/
│ │ │ │ ├── clf.dm
│ │ │ │ ├── deathsquad.dm
│ │ │ │ ├── erp.dm
│ │ │ │ ├── fallen.dm
│ │ │ │ ├── freelancers.dm
│ │ │ │ ├── icc.dm
│ │ │ │ ├── imperium.dm
│ │ │ │ ├── job.dm
│ │ │ │ ├── job_exp.dm
│ │ │ │ ├── marines.dm
│ │ │ │ ├── mercenaries.dm
│ │ │ │ ├── other.dm
│ │ │ │ ├── pmc.dm
│ │ │ │ ├── retired.dm
│ │ │ │ ├── sectoid.dm
│ │ │ │ ├── shipside.dm
│ │ │ │ ├── skeleton.dm
│ │ │ │ ├── sons_of_mars_ert.dm
│ │ │ │ ├── sons_of_mars_shipside.dm
│ │ │ │ ├── sonsofmars.dm
│ │ │ │ ├── special_forces.dm
│ │ │ │ ├── survivor.dm
│ │ │ │ ├── terragov.dm
│ │ │ │ ├── upp.dm
│ │ │ │ ├── upp_commando.dm
│ │ │ │ ├── vsd.dm
│ │ │ │ └── xenomorph.dm
│ │ │ └── squads.dm
│ │ ├── keybinding/
│ │ │ ├── _keybindings.dm
│ │ │ ├── admin.dm
│ │ │ ├── carbon.dm
│ │ │ ├── client.dm
│ │ │ ├── communication.dm
│ │ │ ├── custom_emote.dm
│ │ │ ├── cyberware.dm
│ │ │ ├── emote.dm
│ │ │ ├── human.dm
│ │ │ ├── item_toggles.dm
│ │ │ ├── living.dm
│ │ │ ├── mecha.dm
│ │ │ ├── mob.dm
│ │ │ ├── movement.dm
│ │ │ ├── sectoid.dm
│ │ │ ├── vehicle_keybinds.dm
│ │ │ ├── weapons.dm
│ │ │ └── xeno.dm
│ │ ├── lazy_template.dm
│ │ ├── loadout/
│ │ │ ├── item_representation/
│ │ │ │ ├── _item_representation.dm
│ │ │ │ ├── armor_representation.dm
│ │ │ │ ├── gun_representation.dm
│ │ │ │ ├── helmet_representation.dm
│ │ │ │ └── uniform_representation.dm
│ │ │ ├── loadout.dm
│ │ │ ├── loadout_helper.dm
│ │ │ ├── loadout_manager.dm
│ │ │ ├── loadout_seller.dm
│ │ │ └── old_typepaths.dm
│ │ ├── looping_sounds/
│ │ │ ├── _looping_sound.dm
│ │ │ ├── machinery_sounds.dm
│ │ │ ├── music.dm
│ │ │ ├── tank.dm
│ │ │ ├── vehicle.dm
│ │ │ ├── weather_sounds.dm
│ │ │ └── xeno_sounds.dm
│ │ ├── managed_inventory.dm
│ │ ├── map_config.dm
│ │ ├── medal_awards.dm
│ │ ├── mind.dm
│ │ ├── movement_detector.dm
│ │ ├── mutable_appearance.dm
│ │ ├── namepool.dm
│ │ ├── outfits/
│ │ │ ├── _outfit.dm
│ │ │ ├── campaign_asset.dm
│ │ │ ├── clf.dm
│ │ │ ├── deathsquad.dm
│ │ │ ├── erp.dm
│ │ │ ├── freelancers.dm
│ │ │ ├── icc.dm
│ │ │ ├── imperium.dm
│ │ │ ├── job.dm
│ │ │ ├── marines.dm
│ │ │ ├── mercenaries.dm
│ │ │ ├── misc.dm
│ │ │ ├── npc_marines.dm
│ │ │ ├── pmc.dm
│ │ │ ├── quick_load_beginners.dm
│ │ │ ├── quick_load_civil_war.dm
│ │ │ ├── quick_load_outfits.dm
│ │ │ ├── quick_load_robots.dm
│ │ │ ├── retired.dm
│ │ │ ├── sectoid.dm
│ │ │ ├── shipside.dm
│ │ │ ├── skeleton.dm
│ │ │ ├── som.dm
│ │ │ ├── som_ert.dm
│ │ │ ├── som_shipside.dm
│ │ │ ├── special_forces.dm
│ │ │ ├── survivor.dm
│ │ │ ├── upp.dm
│ │ │ ├── upp_commando.dm
│ │ │ ├── vsd.dm
│ │ │ └── vv_outfit.dm
│ │ ├── personal_statistics.dm
│ │ ├── progressbar.dm
│ │ ├── proximity_monitor/
│ │ │ ├── field.dm
│ │ │ └── proximity_monitor.dm
│ │ ├── recipe.dm
│ │ ├── round_statistics.dm
│ │ ├── saymode.dm
│ │ ├── shuttles.dm
│ │ ├── signals.dm
│ │ ├── skills.dm
│ │ ├── status_effects/
│ │ │ ├── debuffs.dm
│ │ │ ├── gun_skill.dm
│ │ │ ├── sectoid.dm
│ │ │ ├── speech_debuffs.dm
│ │ │ ├── status_effect.dm
│ │ │ └── xeno_buffs.dm
│ │ ├── storage/
│ │ │ ├── storage.dm
│ │ │ └── subtypes/
│ │ │ ├── backpack.dm
│ │ │ ├── bag.dm
│ │ │ ├── belt.dm
│ │ │ ├── bible.dm
│ │ │ ├── box.dm
│ │ │ ├── briefcase.dm
│ │ │ ├── holster.dm
│ │ │ ├── internal.dm
│ │ │ ├── kitchen_tray.dm
│ │ │ ├── lockbox.dm
│ │ │ ├── pill_bottle.dm
│ │ │ ├── pouch.dm
│ │ │ ├── reagent_tank.dm
│ │ │ ├── surgical_tray.dm
│ │ │ ├── tank.dm
│ │ │ └── wallet.dm
│ │ ├── tgs_event_handler.dm
│ │ ├── verbs.dm
│ │ ├── view.dm
│ │ ├── visual_data.dm
│ │ ├── weakrefs.dm
│ │ ├── weather/
│ │ │ ├── weather.dm
│ │ │ └── weather_types/
│ │ │ ├── acid_rain.dm
│ │ │ ├── ash_storm.dm
│ │ │ ├── sand_storm.dm
│ │ │ └── snow_storm.dm
│ │ ├── wires/
│ │ │ ├── _wires.dm
│ │ │ ├── airlock.dm
│ │ │ ├── apc.dm
│ │ │ ├── radio.dm
│ │ │ ├── spaceship.dm
│ │ │ └── vending.dm
│ │ └── world_topic.dm
│ ├── game/
│ │ ├── alternate_appearance.dm
│ │ ├── area/
│ │ │ ├── LV759_Hybrisa_Prospera.dm
│ │ │ ├── ai_monitored.dm
│ │ │ ├── area.dm
│ │ │ ├── areas/
│ │ │ │ └── shuttles.dm
│ │ │ ├── bigred.dm
│ │ │ ├── bluemoon.dm
│ │ │ ├── bluesummers.dm
│ │ │ ├── campaign_maps/
│ │ │ │ ├── jungle_outpost.dm
│ │ │ │ ├── som_base.dm
│ │ │ │ ├── som_raiding_base.dm
│ │ │ │ ├── tgmc_airfield.dm
│ │ │ │ └── tgmc_raiding_base.dm
│ │ │ ├── centcom.dm
│ │ │ ├── corsat.dm
│ │ │ ├── daedalusprison.dm
│ │ │ ├── deltastation.dm
│ │ │ ├── desertdam.dm
│ │ │ ├── gelida_iv.dm
│ │ │ ├── general.dm
│ │ │ ├── icecolony.dm
│ │ │ ├── icy_caves.dm
│ │ │ ├── kutjevo.dm
│ │ │ ├── lava_outpost.dm
│ │ │ ├── lawankaoutpost.dm
│ │ │ ├── lv624.dm
│ │ │ ├── magmoor_digsite.dm
│ │ │ ├── mainship.dm
│ │ │ ├── metnal.dm
│ │ │ ├── orion_outpost.dm
│ │ │ ├── oscaroutpost.dm
│ │ │ ├── patricks_rest.dm
│ │ │ ├── port_hamburg.dm
│ │ │ ├── prison.dm
│ │ │ ├── prison_v3_fiorina.dm
│ │ │ ├── research_outpost.dm
│ │ │ ├── riptide.dm
│ │ │ ├── slumbridge.dm
│ │ │ ├── sulaco.dm
│ │ │ ├── valhallastation.dm
│ │ │ ├── vaporprocessing.dm
│ │ │ └── whiskeyoutpost.dm
│ │ ├── atoms/
│ │ │ ├── _atom.dm
│ │ │ ├── atom_appearance.dm
│ │ │ ├── atom_examine.dm
│ │ │ ├── atom_movable/
│ │ │ │ └── pass_flags.dm
│ │ │ ├── atom_movable.dm
│ │ │ └── mouse_entered.dm
│ │ ├── blood.dm
│ │ ├── buckling.dm
│ │ ├── communications.dm
│ │ ├── data_huds.dm
│ │ ├── movable_luminosity.dm
│ │ ├── objects/
│ │ │ ├── effects/
│ │ │ │ ├── acid_hole.dm
│ │ │ │ ├── aliens.dm
│ │ │ │ ├── countdown.dm
│ │ │ │ ├── decals/
│ │ │ │ │ ├── Cleanable/
│ │ │ │ │ │ ├── aliens.dm
│ │ │ │ │ │ ├── fuel.dm
│ │ │ │ │ │ ├── humans.dm
│ │ │ │ │ │ ├── misc.dm
│ │ │ │ │ │ ├── robots.dm
│ │ │ │ │ │ └── tracks.dm
│ │ │ │ │ ├── cleanable.dm
│ │ │ │ │ ├── contraband.dm
│ │ │ │ │ ├── crayon.dm
│ │ │ │ │ ├── decal.dm
│ │ │ │ │ ├── hybrisa_decals.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── posters/
│ │ │ │ │ │ └── bs12.dm
│ │ │ │ │ ├── remains.dm
│ │ │ │ │ ├── rune.dm
│ │ │ │ │ └── turfdecals/
│ │ │ │ │ ├── environmental.dm
│ │ │ │ │ ├── markings.dm
│ │ │ │ │ ├── medical_decals.dm
│ │ │ │ │ ├── tilecoloring.dm
│ │ │ │ │ ├── tracks.dm
│ │ │ │ │ └── warning_stripes.dm
│ │ │ │ ├── effect.dm
│ │ │ │ ├── effect_system/
│ │ │ │ │ ├── effect_system.dm
│ │ │ │ │ ├── effects_other.dm
│ │ │ │ │ ├── foam.dm
│ │ │ │ │ ├── particle_effects.dm
│ │ │ │ │ └── smoke.dm
│ │ │ │ ├── elevator.dm
│ │ │ │ ├── glowshroom.dm
│ │ │ │ ├── landmarks/
│ │ │ │ │ ├── corpsespawner.dm
│ │ │ │ │ ├── excavation_site_spawner.dm
│ │ │ │ │ ├── gamemode/
│ │ │ │ │ │ ├── campaign_reward_spawns.dm
│ │ │ │ │ │ ├── campaign_vehicle_spawners.dm
│ │ │ │ │ │ ├── crash_spawns.dm
│ │ │ │ │ │ └── hvh_deploy_points.dm
│ │ │ │ │ ├── itemspawner.dm
│ │ │ │ │ ├── landmarks.dm
│ │ │ │ │ ├── marine_spawns.dm
│ │ │ │ │ ├── mob_spawner.dm
│ │ │ │ │ └── mode.dm
│ │ │ │ ├── manifest.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── overlays.dm
│ │ │ │ ├── particle_holder.dm
│ │ │ │ ├── portals.dm
│ │ │ │ ├── spawners/
│ │ │ │ │ ├── bombspawner.dm
│ │ │ │ │ ├── gibspawner.dm
│ │ │ │ │ ├── modularmappingspawner.dm
│ │ │ │ │ ├── random/
│ │ │ │ │ │ ├── clothing.dm
│ │ │ │ │ │ ├── engineering.dm
│ │ │ │ │ │ ├── food_or_drink.dm
│ │ │ │ │ │ ├── machinery.dm
│ │ │ │ │ │ ├── medical.dm
│ │ │ │ │ │ ├── misc_item.dm
│ │ │ │ │ │ ├── misc_structure.dm
│ │ │ │ │ │ ├── random.dm
│ │ │ │ │ │ ├── random_set.dm
│ │ │ │ │ │ └── weaponry.dm
│ │ │ │ │ ├── spawner.dm
│ │ │ │ │ └── vaultspawner.dm
│ │ │ │ ├── step_triggers.dm
│ │ │ │ ├── tele_blocker.dm
│ │ │ │ ├── temporary_visuals/
│ │ │ │ │ ├── explosions.dm
│ │ │ │ │ ├── miscellaneous.dm
│ │ │ │ │ ├── telegraph_effects.dm
│ │ │ │ │ └── temporary_visual.dm
│ │ │ │ ├── turf_overunderlays.dm
│ │ │ │ └── weeds.dm
│ │ │ ├── empulse.dm
│ │ │ ├── items/
│ │ │ │ ├── ashtray.dm
│ │ │ │ ├── autopsy_scanner.dm
│ │ │ │ ├── binoculars.dm
│ │ │ │ ├── blink_drive.dm
│ │ │ │ ├── blueprints.dm
│ │ │ │ ├── bodybag.dm
│ │ │ │ ├── books/
│ │ │ │ │ ├── book.dm
│ │ │ │ │ └── manuals.dm
│ │ │ │ ├── capsule_deployables/
│ │ │ │ │ ├── capsule_deployable.dm
│ │ │ │ │ └── templates.dm
│ │ │ │ ├── cards_ids.dm
│ │ │ │ ├── circuitboards/
│ │ │ │ │ ├── circuitboard.dm
│ │ │ │ │ ├── computer.dm
│ │ │ │ │ └── machine.dm
│ │ │ │ ├── cloaking.dm
│ │ │ │ ├── cocoon.dm
│ │ │ │ ├── coins.dm
│ │ │ │ ├── cosmetics.dm
│ │ │ │ ├── debugger.dm
│ │ │ │ ├── defibrillator.dm
│ │ │ │ ├── devices/
│ │ │ │ │ ├── minimap_tablet.dm
│ │ │ │ │ ├── mirage.dm
│ │ │ │ │ ├── paper_map.dm
│ │ │ │ │ ├── spyglasses.dm
│ │ │ │ │ ├── squad_transfer_tablet.dm
│ │ │ │ │ ├── tablets.dm
│ │ │ │ │ └── tweezers.dm
│ │ │ │ ├── disks.dm
│ │ │ │ ├── embedding.dm
│ │ │ │ ├── explosives/
│ │ │ │ │ ├── bombvest.dm
│ │ │ │ │ ├── explosive.dm
│ │ │ │ │ ├── genghis_charge.dm
│ │ │ │ │ ├── grenades/
│ │ │ │ │ │ ├── bullet_grenade.dm
│ │ │ │ │ │ ├── chem_grenade.dm
│ │ │ │ │ │ ├── emgrenade.dm
│ │ │ │ │ │ ├── explosive_grenades.dm
│ │ │ │ │ │ ├── flares.dm
│ │ │ │ │ │ ├── flashbang.dm
│ │ │ │ │ │ ├── grenade.dm
│ │ │ │ │ │ ├── incendiary_grenades.dm
│ │ │ │ │ │ ├── phosphorus_grenades.dm
│ │ │ │ │ │ ├── rad_grenade.dm
│ │ │ │ │ │ ├── smoke_grenades.dm
│ │ │ │ │ │ ├── spawnergrenade.dm
│ │ │ │ │ │ ├── sticky_grenades.dm
│ │ │ │ │ │ ├── training_grenade.dm
│ │ │ │ │ │ └── xeno_grenade.dm
│ │ │ │ │ ├── mine.dm
│ │ │ │ │ └── plastique.dm
│ │ │ │ ├── firesupport_binoculars.dm
│ │ │ │ ├── fishing.dm
│ │ │ │ ├── flash.dm
│ │ │ │ ├── flashlight.dm
│ │ │ │ ├── floor_painter.dm
│ │ │ │ ├── frames/
│ │ │ │ │ ├── alarms.dm
│ │ │ │ │ ├── frame.dm
│ │ │ │ │ ├── light_fixtures.dm
│ │ │ │ │ └── table_rack.dm
│ │ │ │ ├── gift_wrappaper.dm
│ │ │ │ ├── handcuffs.dm
│ │ │ │ ├── implants/
│ │ │ │ │ ├── implant.dm
│ │ │ │ │ ├── implant_chem.dm
│ │ │ │ │ ├── implant_cloak.dm
│ │ │ │ │ ├── implant_items.dm
│ │ │ │ │ ├── implant_neurostim.dm
│ │ │ │ │ ├── implant_suicidedust.dm
│ │ │ │ │ ├── implantcase.dm
│ │ │ │ │ ├── implantchair.dm
│ │ │ │ │ ├── implanter.dm
│ │ │ │ │ ├── implantpad.dm
│ │ │ │ │ ├── jump_mod.dm
│ │ │ │ │ └── sandevistan.dm
│ │ │ │ ├── jetpack.dm
│ │ │ │ ├── lightreplacer.dm
│ │ │ │ ├── lightstick.dm
│ │ │ │ ├── loot_box.dm
│ │ │ │ ├── marine_gear.dm
│ │ │ │ ├── megaphone.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── motion_detector.dm
│ │ │ │ ├── multitool.dm
│ │ │ │ ├── npc_beacon.dm
│ │ │ │ ├── pamphlets.dm
│ │ │ │ ├── pda.dm
│ │ │ │ ├── pinpointer.dm
│ │ │ │ ├── pipe_painter.dm
│ │ │ │ ├── plantable_flags.dm
│ │ │ │ ├── portable_vendor.dm
│ │ │ │ ├── power_cells.dm
│ │ │ │ ├── quickdeploy_cade.dm
│ │ │ │ ├── radio/
│ │ │ │ │ ├── beacon.dm
│ │ │ │ │ ├── detpack.dm
│ │ │ │ │ ├── electropack.dm
│ │ │ │ │ ├── encryptionkey.dm
│ │ │ │ │ ├── headset.dm
│ │ │ │ │ ├── intercom.dm
│ │ │ │ │ └── radio.dm
│ │ │ │ ├── rcd.dm
│ │ │ │ ├── restraints.dm
│ │ │ │ ├── robot/
│ │ │ │ │ └── robot_parts.dm
│ │ │ │ ├── rpd.dm
│ │ │ │ ├── rsf.dm
│ │ │ │ ├── rsp.dm
│ │ │ │ ├── scanners/
│ │ │ │ │ ├── gas_analyzer.dm
│ │ │ │ │ ├── health_analyzer.dm
│ │ │ │ │ ├── mass_spectrometer.dm
│ │ │ │ │ ├── reagent_scanner.dm
│ │ │ │ │ └── terahertz_scanner.dm
│ │ │ │ ├── shards.dm
│ │ │ │ ├── shooting_range.dm
│ │ │ │ ├── stacks/
│ │ │ │ │ ├── barbed_wire.dm
│ │ │ │ │ ├── catwalk.dm
│ │ │ │ │ ├── flags.dm
│ │ │ │ │ ├── medical.dm
│ │ │ │ │ ├── nanopaste.dm
│ │ │ │ │ ├── rods.dm
│ │ │ │ │ ├── sandbags.dm
│ │ │ │ │ ├── sheets/
│ │ │ │ │ │ ├── glass.dm
│ │ │ │ │ │ ├── leather.dm
│ │ │ │ │ │ ├── light.dm
│ │ │ │ │ │ ├── mineral.dm
│ │ │ │ │ │ ├── sheet_types.dm
│ │ │ │ │ │ └── sheets.dm
│ │ │ │ │ ├── snow.dm
│ │ │ │ │ ├── stack.dm
│ │ │ │ │ ├── stack_recipe.dm
│ │ │ │ │ └── tiles/
│ │ │ │ │ └── tile_types.dm
│ │ │ │ ├── stock_parts.dm
│ │ │ │ ├── storage/
│ │ │ │ │ ├── backpack.dm
│ │ │ │ │ ├── bags.dm
│ │ │ │ │ ├── belt.dm
│ │ │ │ │ ├── bible.dm
│ │ │ │ │ ├── boxes.dm
│ │ │ │ │ ├── briefcase.dm
│ │ │ │ │ ├── dispenser.dm
│ │ │ │ │ ├── fancy.dm
│ │ │ │ │ ├── firstaid.dm
│ │ │ │ │ ├── holsters.dm
│ │ │ │ │ ├── kitchen_tray.dm
│ │ │ │ │ ├── lockbox.dm
│ │ │ │ │ ├── marine_boxes.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── pill_packets.dm
│ │ │ │ │ ├── pouch.dm
│ │ │ │ │ ├── reagent_pouch.dm
│ │ │ │ │ ├── secure.dm
│ │ │ │ │ ├── storage.dm
│ │ │ │ │ ├── surgical_tray.dm
│ │ │ │ │ ├── toolbox.dm
│ │ │ │ │ └── wallets.dm
│ │ │ │ ├── suit_cooling.dm
│ │ │ │ ├── tanks/
│ │ │ │ │ ├── jetpack.dm
│ │ │ │ │ ├── tank_types.dm
│ │ │ │ │ └── tanks.dm
│ │ │ │ ├── taperecorder.dm
│ │ │ │ ├── tools/
│ │ │ │ │ ├── cleaning_tools.dm
│ │ │ │ │ ├── extinguisher.dm
│ │ │ │ │ ├── flame_tools.dm
│ │ │ │ │ ├── hydro_tools.dm
│ │ │ │ │ ├── kitchen_tools.dm
│ │ │ │ │ ├── maintenance_tools.dm
│ │ │ │ │ ├── mining_tools.dm
│ │ │ │ │ ├── misc_tools.dm
│ │ │ │ │ ├── policetape.dm
│ │ │ │ │ ├── research_tools.dm
│ │ │ │ │ ├── shovel_tools.dm
│ │ │ │ │ ├── surgery_tools.dm
│ │ │ │ │ └── tool.dm
│ │ │ │ ├── toys/
│ │ │ │ │ ├── cards.dm
│ │ │ │ │ ├── crayons.dm
│ │ │ │ │ ├── toy_weapons.dm
│ │ │ │ │ └── toys.dm
│ │ │ │ ├── transfer_valve.dm
│ │ │ │ ├── trash.dm
│ │ │ │ ├── weapons/
│ │ │ │ │ ├── batons.dm
│ │ │ │ │ ├── blades.dm
│ │ │ │ │ ├── civilian.dm
│ │ │ │ │ ├── energy.dm
│ │ │ │ │ ├── harvester.dm
│ │ │ │ │ ├── holo_weapons.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── shields.dm
│ │ │ │ │ ├── shivs.dm
│ │ │ │ │ ├── stunbaton.dm
│ │ │ │ │ ├── swords.dm
│ │ │ │ │ ├── two_handed/
│ │ │ │ │ │ ├── basic.dm
│ │ │ │ │ │ ├── boarding_axe.dm
│ │ │ │ │ │ ├── chainsaws.dm
│ │ │ │ │ │ ├── industrial_saw.dm
│ │ │ │ │ │ ├── rocket_sledge.dm
│ │ │ │ │ │ ├── spears.dm
│ │ │ │ │ │ └── twohanded.dm
│ │ │ │ │ ├── weapon.dm
│ │ │ │ │ └── weaponry.dm
│ │ │ │ ├── whistle.dm
│ │ │ │ └── xeno_iff_tags.dm
│ │ │ ├── items.dm
│ │ │ ├── machinery/
│ │ │ │ ├── OpTable.dm
│ │ │ │ ├── adv_med.dm
│ │ │ │ ├── air_alarm.dm
│ │ │ │ ├── artillery/
│ │ │ │ │ ├── boxes.dm
│ │ │ │ │ ├── howitzer.dm
│ │ │ │ │ ├── mlrs.dm
│ │ │ │ │ ├── mortar.dm
│ │ │ │ │ └── shells.dm
│ │ │ │ ├── autodoc.dm
│ │ │ │ ├── bees_apiary.dm
│ │ │ │ ├── bioprinter.dm
│ │ │ │ ├── bots/
│ │ │ │ │ ├── bots.dm
│ │ │ │ │ ├── cleanbot.dm
│ │ │ │ │ └── roomba.dm
│ │ │ │ ├── buttons.dm
│ │ │ │ ├── camera/
│ │ │ │ │ ├── camera.dm
│ │ │ │ │ ├── camera_assembly.dm
│ │ │ │ │ ├── deployable_camera.dm
│ │ │ │ │ └── tracking.dm
│ │ │ │ ├── cell_charger.dm
│ │ │ │ ├── cic_maptable.dm
│ │ │ │ ├── cloning/
│ │ │ │ │ └── cloning.dm
│ │ │ │ ├── computer/
│ │ │ │ │ ├── HolodeckControl.dm
│ │ │ │ │ ├── Operating.dm
│ │ │ │ │ ├── aifixer.dm
│ │ │ │ │ ├── arcade.dm
│ │ │ │ │ ├── area_air_control.dm
│ │ │ │ │ ├── atmos_alert.dm
│ │ │ │ │ ├── buildandrepair.dm
│ │ │ │ │ ├── camera.dm
│ │ │ │ │ ├── camera_advanced.dm
│ │ │ │ │ ├── camera_console.dm
│ │ │ │ │ ├── code_generator.dm
│ │ │ │ │ ├── communications.dm
│ │ │ │ │ ├── computer.dm
│ │ │ │ │ ├── crew.dm
│ │ │ │ │ ├── droppod_control.dm
│ │ │ │ │ ├── dropship_picker.dm
│ │ │ │ │ ├── dropship_weapons.dm
│ │ │ │ │ ├── emails.dm
│ │ │ │ │ ├── general_air_control.dm
│ │ │ │ │ ├── guestpass.dm
│ │ │ │ │ ├── intel_computer.dm
│ │ │ │ │ ├── marines_consoles.dm
│ │ │ │ │ ├── medical.dm
│ │ │ │ │ ├── nt_access.dm
│ │ │ │ │ ├── nuke_disk_generator.dm
│ │ │ │ │ ├── pod.dm
│ │ │ │ │ ├── prisoner.dm
│ │ │ │ │ ├── robot.dm
│ │ │ │ │ ├── security.dm
│ │ │ │ │ ├── skills.dm
│ │ │ │ │ ├── som_computer.dm
│ │ │ │ │ └── station_alert.dm
│ │ │ │ ├── constructable_frame.dm
│ │ │ │ ├── cryopod.dm
│ │ │ │ ├── data_disks.dm
│ │ │ │ ├── deployable.dm
│ │ │ │ ├── door_control.dm
│ │ │ │ ├── door_display/
│ │ │ │ │ └── door_display.dm
│ │ │ │ ├── doors/
│ │ │ │ │ ├── airlock.dm
│ │ │ │ │ ├── airlock_control.dm
│ │ │ │ │ ├── airlock_types.dm
│ │ │ │ │ ├── checkForMultipleDoors.dm
│ │ │ │ │ ├── door.dm
│ │ │ │ │ ├── firedoor.dm
│ │ │ │ │ ├── multi_tile.dm
│ │ │ │ │ ├── poddoor.dm
│ │ │ │ │ ├── railing.dm
│ │ │ │ │ ├── shutters.dm
│ │ │ │ │ ├── unpowered.dm
│ │ │ │ │ └── windowdoor.dm
│ │ │ │ ├── dropship_part_fabricator.dm
│ │ │ │ ├── fax.dm
│ │ │ │ ├── fire_alarm.dm
│ │ │ │ ├── flasher.dm
│ │ │ │ ├── floodlight.dm
│ │ │ │ ├── fuelcell_recycler.dm
│ │ │ │ ├── gear.dm
│ │ │ │ ├── hologram.dm
│ │ │ │ ├── holosign.dm
│ │ │ │ ├── igniter.dm
│ │ │ │ ├── iv_drip.dm
│ │ │ │ ├── kitchen/
│ │ │ │ │ ├── gibber.dm
│ │ │ │ │ ├── microwave.dm
│ │ │ │ │ ├── processor.dm
│ │ │ │ │ └── smartfridge.dm
│ │ │ │ ├── lightswitch.dm
│ │ │ │ ├── line_nexter.dm
│ │ │ │ ├── minelayer.dm
│ │ │ │ ├── miner.dm
│ │ │ │ ├── navbeacon.dm
│ │ │ │ ├── newscaster.dm
│ │ │ │ ├── nuclearbomb.dm
│ │ │ │ ├── overwatch/
│ │ │ │ │ ├── _overwatch.dm
│ │ │ │ │ ├── military.dm
│ │ │ │ │ └── types.dm
│ │ │ │ ├── pipe/
│ │ │ │ │ ├── construction.dm
│ │ │ │ │ └── pipe_dispenser.dm
│ │ │ │ ├── portable_reagent_tank.dm
│ │ │ │ ├── practice/
│ │ │ │ │ └── medical.dm
│ │ │ │ ├── recharger.dm
│ │ │ │ ├── rechargestation.dm
│ │ │ │ ├── research.dm
│ │ │ │ ├── robot_fabricator.dm
│ │ │ │ ├── robotic_cradle.dm
│ │ │ │ ├── science.dm
│ │ │ │ ├── scoreboard.dm
│ │ │ │ ├── seed_extractor.dm
│ │ │ │ ├── self_destruct.dm
│ │ │ │ ├── sellingpad.dm
│ │ │ │ ├── shield_gen.dm
│ │ │ │ ├── sleeper.dm
│ │ │ │ ├── spaceheater.dm
│ │ │ │ ├── squad_manager.dm
│ │ │ │ ├── squad_selector.dm
│ │ │ │ ├── squad_supply/
│ │ │ │ │ ├── supply_beacon.dm
│ │ │ │ │ ├── supply_console.dm
│ │ │ │ │ ├── supply_packer.dm
│ │ │ │ │ └── supply_pads.dm
│ │ │ │ ├── status_display.dm
│ │ │ │ ├── street_lamps.dm
│ │ │ │ ├── suit_storage_unit.dm
│ │ │ │ ├── telecomms/
│ │ │ │ │ ├── broadcasting.dm
│ │ │ │ │ ├── computers/
│ │ │ │ │ │ ├── logbrowser.dm
│ │ │ │ │ │ └── telemonitor.dm
│ │ │ │ │ ├── machines/
│ │ │ │ │ │ ├── allinone.dm
│ │ │ │ │ │ ├── broadcaster.dm
│ │ │ │ │ │ ├── bus.dm
│ │ │ │ │ │ ├── hub.dm
│ │ │ │ │ │ ├── processor.dm
│ │ │ │ │ │ ├── receiver.dm
│ │ │ │ │ │ ├── relay.dm
│ │ │ │ │ │ └── server.dm
│ │ │ │ │ └── telecomunications.dm
│ │ │ │ ├── teleporter.dm
│ │ │ │ ├── tesla_turret.dm
│ │ │ │ ├── vending/
│ │ │ │ │ ├── beginner_vendor.dm
│ │ │ │ │ ├── civil_war_vendor.dm
│ │ │ │ │ ├── loadout_vendor.dm
│ │ │ │ │ ├── marine_vending.dm
│ │ │ │ │ ├── new_marine_vendors.dm
│ │ │ │ │ ├── quick_vendor.dm
│ │ │ │ │ ├── vending.dm
│ │ │ │ │ ├── vending_types.dm
│ │ │ │ │ └── zombie_crash_vendor.dm
│ │ │ │ └── washing_machine.dm
│ │ │ ├── machinery.dm
│ │ │ ├── metnal_objects.dm
│ │ │ ├── obj_defense.dm
│ │ │ ├── objs.dm
│ │ │ ├── structures/
│ │ │ │ ├── barricade.dm
│ │ │ │ ├── barsign.dm
│ │ │ │ ├── bedsheet_bin.dm
│ │ │ │ ├── benchpress.dm
│ │ │ │ ├── bookcase.dm
│ │ │ │ ├── campaign_props.dm
│ │ │ │ ├── campaign_structures/
│ │ │ │ │ ├── campaign_structure.dm
│ │ │ │ │ ├── capture_objectives.dm
│ │ │ │ │ ├── deploy_blockers.dm
│ │ │ │ │ ├── destroy_objectives.dm
│ │ │ │ │ ├── misc_structures.dm
│ │ │ │ │ └── orbital_beacons.dm
│ │ │ │ ├── cargo_container.dm
│ │ │ │ ├── cas_plane_parts.dm
│ │ │ │ ├── coathanger.dm
│ │ │ │ ├── concrete_planter.dm
│ │ │ │ ├── crates_lockers/
│ │ │ │ │ ├── closets/
│ │ │ │ │ │ ├── coffin.dm
│ │ │ │ │ │ ├── crittercrate.dm
│ │ │ │ │ │ ├── fireaxe.dm
│ │ │ │ │ │ ├── fitness.dm
│ │ │ │ │ │ ├── gimmick.dm
│ │ │ │ │ │ ├── job_closets.dm
│ │ │ │ │ │ ├── l3closet.dm
│ │ │ │ │ │ ├── malfunction.dm
│ │ │ │ │ │ ├── secure/
│ │ │ │ │ │ │ ├── bar.dm
│ │ │ │ │ │ │ ├── cargo.dm
│ │ │ │ │ │ │ ├── cm_closets.dm
│ │ │ │ │ │ │ ├── engineering.dm
│ │ │ │ │ │ │ ├── freezer.dm
│ │ │ │ │ │ │ ├── guncabinet.dm
│ │ │ │ │ │ │ ├── hydroponics.dm
│ │ │ │ │ │ │ ├── medical.dm
│ │ │ │ │ │ │ ├── personal.dm
│ │ │ │ │ │ │ ├── scientist.dm
│ │ │ │ │ │ │ ├── secure_closets.dm
│ │ │ │ │ │ │ └── security.dm
│ │ │ │ │ │ ├── utility_closets.dm
│ │ │ │ │ │ └── wardrobe.dm
│ │ │ │ │ ├── closets.dm
│ │ │ │ │ ├── crates.dm
│ │ │ │ │ ├── largecrate.dm
│ │ │ │ │ ├── largecrate_supplies.dm
│ │ │ │ │ ├── secure_crates.dm
│ │ │ │ │ └── walllocker.dm
│ │ │ │ ├── curtains.dm
│ │ │ │ ├── desertdam.dm
│ │ │ │ ├── displaycase.dm
│ │ │ │ ├── door_assembly.dm
│ │ │ │ ├── droppod.dm
│ │ │ │ ├── dropship_ammo.dm
│ │ │ │ ├── dropship_equipment.dm
│ │ │ │ ├── dummy_mapping_objects.dm
│ │ │ │ ├── electricchair.dm
│ │ │ │ ├── extinguisher.dm
│ │ │ │ ├── fence.dm
│ │ │ │ ├── flora.dm
│ │ │ │ ├── girders.dm
│ │ │ │ ├── grille.dm
│ │ │ │ ├── handrail.dm
│ │ │ │ ├── hybrisa_props.dm
│ │ │ │ ├── inflatable.dm
│ │ │ │ ├── janicart.dm
│ │ │ │ ├── kitchen_spike.dm
│ │ │ │ ├── ladders.dm
│ │ │ │ ├── lamarr_cage.dm
│ │ │ │ ├── landing_signs.dm
│ │ │ │ ├── large_vehicle_props.dm
│ │ │ │ ├── lattice.dm
│ │ │ │ ├── memorial.dm
│ │ │ │ ├── mine_structures.dm
│ │ │ │ ├── mineral_doors.dm
│ │ │ │ ├── mirror.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── morgue.dm
│ │ │ │ ├── musician.dm
│ │ │ │ ├── noticeboard.dm
│ │ │ │ ├── orbital_cannon.dm
│ │ │ │ ├── patrol_points.dm
│ │ │ │ ├── platforms.dm
│ │ │ │ ├── prop.dm
│ │ │ │ ├── rappel_system.dm
│ │ │ │ ├── razorwire.dm
│ │ │ │ ├── reagent_dispensers.dm
│ │ │ │ ├── rocks.dm
│ │ │ │ ├── safe.dm
│ │ │ │ ├── sensor_tower.dm
│ │ │ │ ├── signs.dm
│ │ │ │ ├── som_cas_parts.dm
│ │ │ │ ├── stairs.dm
│ │ │ │ ├── stool_bed_chair_nest/
│ │ │ │ │ ├── bed.dm
│ │ │ │ │ ├── chairs.dm
│ │ │ │ │ ├── janicart.dm
│ │ │ │ │ ├── stools.dm
│ │ │ │ │ └── xeno_nest.dm
│ │ │ │ ├── supplypod.dm
│ │ │ │ ├── supports.dm
│ │ │ │ ├── tables_racks.dm
│ │ │ │ ├── tank_dispenser.dm
│ │ │ │ ├── teleporter.dm
│ │ │ │ ├── teleporter_array.dm
│ │ │ │ ├── toolboxtrophy.dm
│ │ │ │ ├── tram_rail.dm
│ │ │ │ ├── vehicle_props.dm
│ │ │ │ ├── watercloset.dm
│ │ │ │ ├── windoor_assembly.dm
│ │ │ │ ├── window.dm
│ │ │ │ ├── window_frame.dm
│ │ │ │ └── xeno.dm
│ │ │ └── structures.dm
│ │ ├── say.dm
│ │ ├── shuttle_engines.dm
│ │ ├── smoothwall.dm
│ │ ├── sound.dm
│ │ ├── turfs/
│ │ │ ├── baseturf_skipover.dm
│ │ │ ├── closed.dm
│ │ │ ├── floor.dm
│ │ │ ├── floor_ground.dm
│ │ │ ├── floor_types.dm
│ │ │ ├── iron_floor.dm
│ │ │ ├── liquid_turfs.dm
│ │ │ ├── markings.dm
│ │ │ ├── open/
│ │ │ │ └── openspace.dm
│ │ │ ├── open.dm
│ │ │ ├── open_ground.dm
│ │ │ ├── plating.dm
│ │ │ ├── roof_types.dm
│ │ │ ├── snow.dm
│ │ │ ├── space/
│ │ │ │ └── transit.dm
│ │ │ ├── space.dm
│ │ │ ├── turf.dm
│ │ │ └── walls/
│ │ │ ├── r_wall.dm
│ │ │ ├── resin.dm
│ │ │ ├── wall_types.dm
│ │ │ └── walls.dm
│ │ ├── verbs/
│ │ │ ├── ooc.dm
│ │ │ ├── suicide.dm
│ │ │ ├── typing.dm
│ │ │ └── who.dm
│ │ ├── visual_objects.dm
│ │ └── world.dm
│ ├── genesis_call.dme
│ ├── modules/
│ │ ├── admin/
│ │ │ ├── IsBanned.dm
│ │ │ ├── admin_ranks.dm
│ │ │ ├── admin_verbs.dm
│ │ │ ├── callproc.dm
│ │ │ ├── debug_verbs.dm
│ │ │ ├── fun_verbs.dm
│ │ │ ├── holder.dm
│ │ │ ├── outfit_editor.dm
│ │ │ ├── outfit_manager.dm
│ │ │ ├── outfits.dm
│ │ │ ├── panels/
│ │ │ │ ├── Campaign_panel.dm
│ │ │ │ ├── antag_panel.dm
│ │ │ │ ├── ban_panel.dm
│ │ │ │ ├── game_panel.dm
│ │ │ │ ├── mode_panel.dm
│ │ │ │ ├── note_panel.dm
│ │ │ │ ├── permission_panel.dm
│ │ │ │ ├── player_panel.dm
│ │ │ │ ├── poll_panel.dm
│ │ │ │ └── secrets_panel.dm
│ │ │ ├── preferences_verbs.dm
│ │ │ ├── server_verbs.dm
│ │ │ ├── smites/
│ │ │ │ ├── ai_replacement.dm
│ │ │ │ ├── bloodless.dm
│ │ │ │ ├── boneless.dm
│ │ │ │ ├── brain_damage.dm
│ │ │ │ ├── bread.dm
│ │ │ │ ├── bsa.dm
│ │ │ │ ├── fake_bwoink.dm
│ │ │ │ ├── fat.dm
│ │ │ │ ├── gib.dm
│ │ │ │ ├── knot_shoes.dm
│ │ │ │ ├── lightning.dm
│ │ │ │ ├── nugget.dm
│ │ │ │ ├── puzzle.dm
│ │ │ │ └── smite.dm
│ │ │ ├── special_verbs.dm
│ │ │ ├── stickyban.dm
│ │ │ ├── tag.dm
│ │ │ ├── topic.dm
│ │ │ ├── verb_datums/
│ │ │ │ └── _admin_verb_datum.dm
│ │ │ ├── verbs/
│ │ │ │ ├── SDQL2/
│ │ │ │ │ ├── SDQL_2.dm
│ │ │ │ │ ├── SDQL_2_parser.dm
│ │ │ │ │ └── SDQL_2_wrappers.dm
│ │ │ │ ├── adminhelp.dm
│ │ │ │ ├── centcom_podlauncher.dm
│ │ │ │ ├── chat_commands.dm
│ │ │ │ ├── datumvars.dm
│ │ │ │ ├── faxes.dm
│ │ │ │ ├── map_template.dm
│ │ │ │ ├── plane_debugger.dm
│ │ │ │ ├── poll_managment.dm
│ │ │ │ ├── pray.dm
│ │ │ │ ├── request_internet_sound.dm
│ │ │ │ ├── selectequipment.dm
│ │ │ │ ├── shuttlepanel.dm
│ │ │ │ └── whitelist.dm
│ │ │ └── view_variables/
│ │ │ ├── admin_delete.dm
│ │ │ ├── color_matrix_editor.dm
│ │ │ ├── debug_variable_appearance.dm
│ │ │ ├── debug_variables.dm
│ │ │ ├── filterrific.dm
│ │ │ ├── get_variables.dm
│ │ │ ├── greyscale_modify_menu.dm
│ │ │ ├── mark_datum.dm
│ │ │ ├── mass_edit_variables.dm
│ │ │ ├── modify_variables.dm
│ │ │ ├── nobody_wants_to_learn_matrix_math.dm
│ │ │ ├── particle_editor.dm
│ │ │ ├── reference_tracking.dm
│ │ │ ├── tag_datum.dm
│ │ │ ├── topic.dm
│ │ │ ├── topic_basic.dm
│ │ │ ├── topic_list.dm
│ │ │ └── view_variables.dm
│ │ ├── ai/
│ │ │ ├── ai_behaviors/
│ │ │ │ ├── ai_behavior.dm
│ │ │ │ ├── human_mobs/
│ │ │ │ │ ├── atom_interaction.dm
│ │ │ │ │ ├── engineering.dm
│ │ │ │ │ ├── grenades.dm
│ │ │ │ │ ├── hazard_avoidance.dm
│ │ │ │ │ ├── heal_procs.dm
│ │ │ │ │ ├── healing.dm
│ │ │ │ │ ├── helper_procs.dm
│ │ │ │ │ ├── human_mob.dm
│ │ │ │ │ └── weapon_module.dm
│ │ │ │ └── xeno/
│ │ │ │ ├── puppet.dm
│ │ │ │ ├── xeno.dm
│ │ │ │ ├── xeno_illusion.dm
│ │ │ │ └── zombie.dm
│ │ │ ├── ai_node.dm
│ │ │ ├── presets/
│ │ │ │ ├── basic_ai.dm
│ │ │ │ ├── xeno_presets.dm
│ │ │ │ └── zombie_presets.dm
│ │ │ └── spawners/
│ │ │ ├── human.dm
│ │ │ ├── spawner.dm
│ │ │ ├── xeno.dm
│ │ │ └── zombie.dm
│ │ ├── animations/
│ │ │ └── animation_library.dm
│ │ ├── antagonists/
│ │ │ └── _common/
│ │ │ └── antag_datum.dm
│ │ ├── assembly/
│ │ │ ├── assembly.dm
│ │ │ ├── doorcontrol.dm
│ │ │ ├── helpers.dm
│ │ │ ├── holder.dm
│ │ │ ├── igniter.dm
│ │ │ ├── infrared.dm
│ │ │ ├── mousetrap.dm
│ │ │ ├── proximity.dm
│ │ │ ├── signaler.dm
│ │ │ ├── timer.dm
│ │ │ └── voice.dm
│ │ ├── asset_cache/
│ │ │ ├── asset_cache_client.dm
│ │ │ ├── asset_cache_item.dm
│ │ │ ├── asset_list.dm
│ │ │ ├── asset_list_items.dm
│ │ │ ├── assets/
│ │ │ │ ├── cargo.dm
│ │ │ │ ├── crafting.dm
│ │ │ │ ├── plane_debug.dm
│ │ │ │ ├── tgui.dm
│ │ │ │ └── vv.dm
│ │ │ ├── readme.md
│ │ │ ├── transports/
│ │ │ │ ├── asset_transport.dm
│ │ │ │ └── webroot_transport.dm
│ │ │ └── validate_assets.html
│ │ ├── atmospherics/
│ │ │ └── machinery/
│ │ │ ├── atmosmachinery.dm
│ │ │ ├── components/
│ │ │ │ ├── binary_devices/
│ │ │ │ │ ├── binary_devices.dm
│ │ │ │ │ ├── circulator.dm
│ │ │ │ │ ├── dp_vent_pump.dm
│ │ │ │ │ ├── passive_gate.dm
│ │ │ │ │ ├── pump.dm
│ │ │ │ │ ├── valve.dm
│ │ │ │ │ └── volume_pump.dm
│ │ │ │ ├── components_base.dm
│ │ │ │ ├── trinary_devices/
│ │ │ │ │ ├── filter.dm
│ │ │ │ │ ├── mixer.dm
│ │ │ │ │ └── trinary_devices.dm
│ │ │ │ └── unary_devices/
│ │ │ │ ├── cryo.dm
│ │ │ │ ├── heat_exchanger.dm
│ │ │ │ ├── outlet_injector.dm
│ │ │ │ ├── portables_connector.dm
│ │ │ │ ├── tank.dm
│ │ │ │ ├── thermomachine.dm
│ │ │ │ ├── unary_devices.dm
│ │ │ │ ├── vent_pump.dm
│ │ │ │ └── vent_scrubber.dm
│ │ │ ├── datum_pipeline.dm
│ │ │ ├── other/
│ │ │ │ └── meter.dm
│ │ │ ├── pipes/
│ │ │ │ ├── heat_exchange/
│ │ │ │ │ ├── he_pipes.dm
│ │ │ │ │ ├── junction.dm
│ │ │ │ │ ├── manifold.dm
│ │ │ │ │ ├── manifold4w.dm
│ │ │ │ │ └── simple.dm
│ │ │ │ ├── layermanifold.dm
│ │ │ │ ├── manifold.dm
│ │ │ │ ├── manifold4w.dm
│ │ │ │ ├── mapping.dm
│ │ │ │ ├── pipes.dm
│ │ │ │ └── simple.dm
│ │ │ └── portable/
│ │ │ ├── canister.dm
│ │ │ ├── portable_atmospherics.dm
│ │ │ ├── pump.dm
│ │ │ └── scrubber.dm
│ │ ├── balloon_alert/
│ │ │ └── balloon_alert.dm
│ │ ├── buildmode/
│ │ │ ├── BUILDMODE.md
│ │ │ ├── bm_mode.dm
│ │ │ ├── buildmode.dm
│ │ │ ├── buttons.dm
│ │ │ └── submodes/
│ │ │ ├── advanced.dm
│ │ │ ├── area_edit.dm
│ │ │ ├── basic.dm
│ │ │ ├── boom.dm
│ │ │ ├── copy.dm
│ │ │ ├── delete.dm
│ │ │ ├── fill.dm
│ │ │ ├── loadout.dm
│ │ │ ├── proccall.dm
│ │ │ ├── smite.dm
│ │ │ ├── throwing.dm
│ │ │ └── variable_edit.dm
│ │ ├── client/
│ │ │ ├── client_defines.dm
│ │ │ ├── client_procs.dm
│ │ │ ├── message.dm
│ │ │ ├── player_details.dm
│ │ │ ├── preferences.dm
│ │ │ ├── preferences_gear.dm
│ │ │ ├── preferences_savefile.dm
│ │ │ ├── preferences_toggles.dm
│ │ │ └── preferences_ui.dm
│ │ ├── clothing/
│ │ │ ├── clothing.dm
│ │ │ ├── glasses/
│ │ │ │ ├── glasses.dm
│ │ │ │ ├── hud.dm
│ │ │ │ ├── meson.dm
│ │ │ │ ├── night.dm
│ │ │ │ └── thermal.dm
│ │ │ ├── gloves/
│ │ │ │ ├── analyzer_gloves.dm
│ │ │ │ ├── color.dm
│ │ │ │ ├── defibrillator_gloves.dm
│ │ │ │ ├── marine_gloves.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── head/
│ │ │ │ ├── collectable.dm
│ │ │ │ ├── hardhat.dm
│ │ │ │ ├── head.dm
│ │ │ │ ├── helmet.dm
│ │ │ │ ├── jobs.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── misc_special.dm
│ │ │ │ └── soft_caps.dm
│ │ │ ├── masks/
│ │ │ │ ├── breath.dm
│ │ │ │ ├── gasmask.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── modular_armor/
│ │ │ │ ├── attachments/
│ │ │ │ │ ├── arm_plates.dm
│ │ │ │ │ ├── badges.dm
│ │ │ │ │ ├── cape.dm
│ │ │ │ │ ├── chest_plates.dm
│ │ │ │ │ ├── leg_plates.dm
│ │ │ │ │ ├── modules.dm
│ │ │ │ │ ├── secondary_color.dm
│ │ │ │ │ ├── storage.dm
│ │ │ │ │ ├── uniform.dm
│ │ │ │ │ └── visors.dm
│ │ │ │ ├── attachments.dm
│ │ │ │ ├── combat_robot.dm
│ │ │ │ ├── jaeger.dm
│ │ │ │ ├── mark_one.dm
│ │ │ │ ├── modular.dm
│ │ │ │ ├── som.dm
│ │ │ │ ├── style_line.dm
│ │ │ │ ├── tdf.dm
│ │ │ │ └── xenonauten.dm
│ │ │ ├── shoes/
│ │ │ │ ├── colour.dm
│ │ │ │ ├── magboots.dm
│ │ │ │ ├── marine_shoes.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── spacesuits/
│ │ │ │ ├── rig.dm
│ │ │ │ ├── spacesuits.dm
│ │ │ │ ├── standard_space_suits.dm
│ │ │ │ └── syndi.dm
│ │ │ ├── suits/
│ │ │ │ ├── armor.dm
│ │ │ │ ├── bio.dm
│ │ │ │ ├── jobs.dm
│ │ │ │ ├── labcoat.dm
│ │ │ │ ├── marine_armor.dm
│ │ │ │ ├── miscellaneous.dm
│ │ │ │ ├── storage.dm
│ │ │ │ ├── utility.dm
│ │ │ │ └── wiz_robe.dm
│ │ │ └── under/
│ │ │ ├── color.dm
│ │ │ ├── gimmick.dm
│ │ │ ├── jobs/
│ │ │ │ ├── civilian.dm
│ │ │ │ ├── engineering.dm
│ │ │ │ ├── medsci.dm
│ │ │ │ └── security.dm
│ │ │ ├── marine_uniform.dm
│ │ │ ├── miscellaneous.dm
│ │ │ ├── shorts.dm
│ │ │ ├── syndicate.dm
│ │ │ ├── ties.dm
│ │ │ └── under.dm
│ │ ├── codex/
│ │ │ ├── categories/
│ │ │ │ ├── _category.dm
│ │ │ │ └── category_reagents.dm
│ │ │ ├── codex_atom.dm
│ │ │ ├── codex_client.dm
│ │ │ ├── codex_mob.dm
│ │ │ └── entries/
│ │ │ ├── _codex_entry.dm
│ │ │ ├── ammunition_codex.dm
│ │ │ ├── atmospherics_codex.dm
│ │ │ ├── clothing_codex.dm
│ │ │ ├── engineering_codex.dm
│ │ │ ├── faction_codex.dm
│ │ │ ├── guns_codex.dm
│ │ │ ├── machinery_codex.dm
│ │ │ ├── magazine_codex.dm
│ │ │ ├── medical_codex.dm
│ │ │ ├── misc_codex.dm
│ │ │ ├── mobs_codex.dm
│ │ │ ├── paperwork_codex.dm
│ │ │ ├── stacks_codex.dm
│ │ │ ├── structures_codex.dm
│ │ │ ├── tools_codex.dm
│ │ │ ├── turfs_codex.dm
│ │ │ └── weapons_codex.dm
│ │ ├── condor/
│ │ │ ├── cas_actions.dm
│ │ │ ├── cas_chair.dm
│ │ │ └── cas_shuttle.dm
│ │ ├── detectivework/
│ │ │ ├── evidence.dm
│ │ │ ├── footprints_and_rag.dm
│ │ │ ├── forensics.dm
│ │ │ ├── scanner.dm
│ │ │ └── scanning_console.dm
│ │ ├── discord/
│ │ │ ├── accountlink.dm
│ │ │ ├── discord_embed.dm
│ │ │ ├── discord_link_record.dm
│ │ │ ├── tgs_commands.dm
│ │ │ └── toggle_notify.dm
│ │ ├── economy/
│ │ │ ├── ATM.dm
│ │ │ ├── Accounts.dm
│ │ │ ├── EFTPOS.dm
│ │ │ └── cash.dm
│ │ ├── emoji/
│ │ │ └── emoji_parse.dm
│ │ ├── error_handler/
│ │ │ ├── error_handler.dm
│ │ │ └── error_viewer.dm
│ │ ├── events/
│ │ │ ├── _events.dm
│ │ │ ├── hive_threat.dm
│ │ │ ├── intel_computer.dm
│ │ │ ├── stock_uptick.dm
│ │ │ └── supply_drop.dm
│ │ ├── factory/
│ │ │ ├── howtopaper.dm
│ │ │ ├── machines.dm
│ │ │ ├── parts.dm
│ │ │ └── unboxer.dm
│ │ ├── flufftext/
│ │ │ ├── Dreaming.dm
│ │ │ └── Hallucination.dm
│ │ ├── food/
│ │ │ └── recipes_microwave.dm
│ │ ├── food_and_drinks/
│ │ │ ├── kitchen_machinery/
│ │ │ │ ├── griddle.dm
│ │ │ │ └── grill.dm
│ │ │ └── recipes/
│ │ │ ├── drinks/
│ │ │ │ ├── drinks_alcoholic.dm
│ │ │ │ ├── drinks_lizard.dm
│ │ │ │ ├── drinks_moth.dm
│ │ │ │ └── drinks_non-alcoholic.dm
│ │ │ └── recipes_drink.dm
│ │ ├── hydroponics/
│ │ │ ├── biogenerator.dm
│ │ │ ├── grown_inedible.dm
│ │ │ ├── hydro_tools.dm
│ │ │ ├── hydro_tray.dm
│ │ │ ├── seed_datums.dm
│ │ │ ├── seed_machines.dm
│ │ │ ├── seeds.dm
│ │ │ └── vines.dm
│ │ ├── instruments/
│ │ │ ├── instrument_data/
│ │ │ │ ├── _instrument_data.dm
│ │ │ │ ├── _instrument_key.dm
│ │ │ │ ├── brass.dm
│ │ │ │ ├── chromatic_percussion.dm
│ │ │ │ ├── fun.dm
│ │ │ │ ├── guitar.dm
│ │ │ │ ├── hardcoded.dm
│ │ │ │ ├── organ.dm
│ │ │ │ ├── piano.dm
│ │ │ │ └── synth_tones.dm
│ │ │ ├── items.dm
│ │ │ ├── songs/
│ │ │ │ ├── _song.dm
│ │ │ │ ├── editor.dm
│ │ │ │ ├── play_legacy.dm
│ │ │ │ └── play_synthesized.dm
│ │ │ └── stationary.dm
│ │ ├── keybindings/
│ │ │ ├── bindings_atom.dm
│ │ │ ├── bindings_client.dm
│ │ │ ├── focus.dm
│ │ │ ├── readme.md
│ │ │ └── setup.dm
│ │ ├── language/
│ │ │ ├── aphasia.dm
│ │ │ ├── beachbum.dm
│ │ │ ├── common.dm
│ │ │ ├── felinid.dm
│ │ │ ├── imperial.dm
│ │ │ ├── language.dm
│ │ │ ├── language_holder.dm
│ │ │ ├── machine.dm
│ │ │ ├── monkey.dm
│ │ │ ├── moth.dm
│ │ │ ├── mushroom.dm
│ │ │ ├── narsian.dm
│ │ │ ├── piratespeak.dm
│ │ │ ├── russian.dm
│ │ │ ├── sectoid.dm
│ │ │ ├── slime.dm
│ │ │ ├── trader.dm
│ │ │ ├── xenocommon.dm
│ │ │ └── zombie.dm
│ │ ├── lighting/
│ │ │ ├── _LIGHTING_README.MD
│ │ │ ├── lighting_area.dm
│ │ │ ├── lighting_atom.dm
│ │ │ ├── lighting_mask/
│ │ │ │ ├── dynamic_lighting_source.dm
│ │ │ │ ├── lighting_mask.dm
│ │ │ │ ├── lighting_mask_holder.dm
│ │ │ │ └── shadow_calculator.dm
│ │ │ ├── lighting_static/
│ │ │ │ ├── static_lighting_area.dm
│ │ │ │ ├── static_lighting_atom.dm
│ │ │ │ ├── static_lighting_corner.dm
│ │ │ │ ├── static_lighting_object.dm
│ │ │ │ ├── static_lighting_setup.dm
│ │ │ │ ├── static_lighting_source.dm
│ │ │ │ └── static_lighting_turf.dm
│ │ │ └── lighting_turf.dm
│ │ ├── logging/
│ │ │ ├── categories/
│ │ │ │ ├── log_category_admin.dm
│ │ │ │ ├── log_category_attack.dm
│ │ │ │ ├── log_category_compats.dm
│ │ │ │ ├── log_category_debug.dm
│ │ │ │ ├── log_category_game.dm
│ │ │ │ ├── log_category_href.dm
│ │ │ │ └── log_category_misc.dm
│ │ │ ├── log_category.dm
│ │ │ ├── log_entry.dm
│ │ │ └── log_holder.dm
│ │ ├── mapping/
│ │ │ ├── README.txt
│ │ │ ├── cordon.dm
│ │ │ ├── map_template.dm
│ │ │ ├── mapping_helpers.dm
│ │ │ ├── merge_conflicts.dm
│ │ │ ├── modular_mapping.dm
│ │ │ ├── preloader.dm
│ │ │ ├── reader.dm
│ │ │ ├── space_management/
│ │ │ │ ├── multiz_helpers.dm
│ │ │ │ ├── space_level.dm
│ │ │ │ ├── space_reservation.dm
│ │ │ │ ├── traits.dm
│ │ │ │ └── zlevel_manager.dm
│ │ │ └── verify.dm
│ │ ├── mining/
│ │ │ ├── alloys.dm
│ │ │ ├── drill.dm
│ │ │ ├── machine_processing.dm
│ │ │ ├── machine_stacking.dm
│ │ │ ├── machine_unloading.dm
│ │ │ ├── money_bag.dm
│ │ │ ├── ore.dm
│ │ │ └── satchel_ore_boxdm.dm
│ │ ├── mob/
│ │ │ ├── camera/
│ │ │ │ ├── camera.dm
│ │ │ │ └── imaginary_friend.dm
│ │ │ ├── dead/
│ │ │ │ ├── dead.dm
│ │ │ │ └── observer/
│ │ │ │ ├── emote.dm
│ │ │ │ ├── login.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── observer.dm
│ │ │ │ ├── observer_movement.dm
│ │ │ │ ├── orbit.dm
│ │ │ │ └── say.dm
│ │ │ ├── death.dm
│ │ │ ├── emote.dm
│ │ │ ├── examine.dm
│ │ │ ├── illusion.dm
│ │ │ ├── inventory.dm
│ │ │ ├── living/
│ │ │ │ ├── blood.dm
│ │ │ │ ├── brain/
│ │ │ │ │ ├── MMI.dm
│ │ │ │ │ ├── brain.dm
│ │ │ │ │ ├── brain_item.dm
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── emote.dm
│ │ │ │ │ ├── life.dm
│ │ │ │ │ └── login.dm
│ │ │ │ ├── carbon/
│ │ │ │ │ ├── carbon.dm
│ │ │ │ │ ├── carbon_defense.dm
│ │ │ │ │ ├── carbon_defines.dm
│ │ │ │ │ ├── carbon_helpers.dm
│ │ │ │ │ ├── carbon_status_procs.dm
│ │ │ │ │ ├── carbon_stripping.dm
│ │ │ │ │ ├── give.dm
│ │ │ │ │ ├── human/
│ │ │ │ │ │ ├── _species.dm
│ │ │ │ │ │ ├── death.dm
│ │ │ │ │ │ ├── dummy.dm
│ │ │ │ │ │ ├── emote.dm
│ │ │ │ │ │ ├── examine.dm
│ │ │ │ │ │ ├── human.dm
│ │ │ │ │ │ ├── human_attackhand.dm
│ │ │ │ │ │ ├── human_damage.dm
│ │ │ │ │ │ ├── human_defense.dm
│ │ │ │ │ │ ├── human_defines.dm
│ │ │ │ │ │ ├── human_helpers.dm
│ │ │ │ │ │ ├── human_movement.dm
│ │ │ │ │ │ ├── human_species.dm
│ │ │ │ │ │ ├── human_status_procs.dm
│ │ │ │ │ │ ├── inventory.dm
│ │ │ │ │ │ ├── life/
│ │ │ │ │ │ │ ├── handle_disabilities.dm
│ │ │ │ │ │ │ ├── handle_environment.dm
│ │ │ │ │ │ │ ├── handle_fire.dm
│ │ │ │ │ │ │ ├── handle_organs.dm
│ │ │ │ │ │ │ ├── handle_pulse.dm
│ │ │ │ │ │ │ ├── handle_regular_hud_updates.dm
│ │ │ │ │ │ │ ├── handle_shock.dm
│ │ │ │ │ │ │ ├── handle_status_effects.dm
│ │ │ │ │ │ │ └── life_helpers.dm
│ │ │ │ │ │ ├── life.dm
│ │ │ │ │ │ ├── login.dm
│ │ │ │ │ │ ├── logout.dm
│ │ │ │ │ │ ├── say.dm
│ │ │ │ │ │ ├── species_types/
│ │ │ │ │ │ │ ├── combat_robots.dm
│ │ │ │ │ │ │ ├── humans.dm
│ │ │ │ │ │ │ ├── monkeys.dm
│ │ │ │ │ │ │ ├── mothmen.dm
│ │ │ │ │ │ │ ├── prototype_supersoldier.dm
│ │ │ │ │ │ │ ├── sectoids.dm
│ │ │ │ │ │ │ ├── skeletons.dm
│ │ │ │ │ │ │ ├── synthetics.dm
│ │ │ │ │ │ │ ├── vatborns.dm
│ │ │ │ │ │ │ └── zombies.dm
│ │ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ │ └── zombie.dm
│ │ │ │ │ ├── human_stripping.dm
│ │ │ │ │ ├── inventory.dm
│ │ │ │ │ ├── life.dm
│ │ │ │ │ ├── shock.dm
│ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ └── xenomorph/
│ │ │ │ │ ├── abilities.dm
│ │ │ │ │ ├── attack_alien.dm
│ │ │ │ │ ├── castes/
│ │ │ │ │ │ ├── baneling/
│ │ │ │ │ │ │ ├── abilities_baneling.dm
│ │ │ │ │ │ │ ├── baneling.dm
│ │ │ │ │ │ │ └── castedatum_baneling.dm
│ │ │ │ │ │ ├── beetle/
│ │ │ │ │ │ │ ├── abilities_beetle.dm
│ │ │ │ │ │ │ ├── beetle.dm
│ │ │ │ │ │ │ └── castedatum_beetle.dm
│ │ │ │ │ │ ├── behemoth/
│ │ │ │ │ │ │ ├── abilities_behemoth.dm
│ │ │ │ │ │ │ ├── behemoth.dm
│ │ │ │ │ │ │ ├── castedatum_behemoth.dm
│ │ │ │ │ │ │ └── mutations_behemoth.dm
│ │ │ │ │ │ ├── boiler/
│ │ │ │ │ │ │ ├── abilities_boiler.dm
│ │ │ │ │ │ │ ├── boiler.dm
│ │ │ │ │ │ │ ├── castedatum_boiler.dm
│ │ │ │ │ │ │ ├── mutations_boiler.dm
│ │ │ │ │ │ │ └── mutations_sizzler.dm
│ │ │ │ │ │ ├── bull/
│ │ │ │ │ │ │ ├── abilities_bull.dm
│ │ │ │ │ │ │ ├── bull.dm
│ │ │ │ │ │ │ ├── castedatum_bull.dm
│ │ │ │ │ │ │ └── mutations_bull.dm
│ │ │ │ │ │ ├── carrier/
│ │ │ │ │ │ │ ├── abilities_carrier.dm
│ │ │ │ │ │ │ ├── carrier.dm
│ │ │ │ │ │ │ ├── castedatum_carrier.dm
│ │ │ │ │ │ │ └── mutations_carrier.dm
│ │ │ │ │ │ ├── crusher/
│ │ │ │ │ │ │ ├── abilities_crusher.dm
│ │ │ │ │ │ │ ├── castedatum_crusher.dm
│ │ │ │ │ │ │ ├── crusher.dm
│ │ │ │ │ │ │ └── mutations_crusher.dm
│ │ │ │ │ │ ├── defender/
│ │ │ │ │ │ │ ├── abilities_defender.dm
│ │ │ │ │ │ │ ├── castedatum_defender.dm
│ │ │ │ │ │ │ ├── defender.dm
│ │ │ │ │ │ │ └── mutations_defender.dm
│ │ │ │ │ │ ├── defiler/
│ │ │ │ │ │ │ ├── abilities_defiler.dm
│ │ │ │ │ │ │ ├── castedatum_defiler.dm
│ │ │ │ │ │ │ ├── defiler.dm
│ │ │ │ │ │ │ └── mutations_defiler.dm
│ │ │ │ │ │ ├── dragon/
│ │ │ │ │ │ │ ├── abilities_dragon.dm
│ │ │ │ │ │ │ ├── castedatum_dragon.dm
│ │ │ │ │ │ │ ├── dragon.dm
│ │ │ │ │ │ │ └── mutations_dragon.dm
│ │ │ │ │ │ ├── drone/
│ │ │ │ │ │ │ ├── abilities_drone.dm
│ │ │ │ │ │ │ ├── castedatum_drone.dm
│ │ │ │ │ │ │ ├── drone.dm
│ │ │ │ │ │ │ └── mutations_drone.dm
│ │ │ │ │ │ ├── gorger/
│ │ │ │ │ │ │ ├── abilities_gorger.dm
│ │ │ │ │ │ │ ├── castedatum_gorger.dm
│ │ │ │ │ │ │ ├── gorger.dm
│ │ │ │ │ │ │ └── mutations_gorger.dm
│ │ │ │ │ │ ├── hivelord/
│ │ │ │ │ │ │ ├── abilities_hivelord.dm
│ │ │ │ │ │ │ ├── castedatum_hivelord.dm
│ │ │ │ │ │ │ ├── hivelord.dm
│ │ │ │ │ │ │ └── mutations_hivelord.dm
│ │ │ │ │ │ ├── hivemind/
│ │ │ │ │ │ │ ├── abilities_hivemind.dm
│ │ │ │ │ │ │ ├── castedatum_hivemind.dm
│ │ │ │ │ │ │ └── hivemind.dm
│ │ │ │ │ │ ├── hunter/
│ │ │ │ │ │ │ ├── abilities_hunter.dm
│ │ │ │ │ │ │ ├── castedatum_hunter.dm
│ │ │ │ │ │ │ ├── hunter.dm
│ │ │ │ │ │ │ └── mutations_hunter.dm
│ │ │ │ │ │ ├── king/
│ │ │ │ │ │ │ ├── abilities_conqueror.dm
│ │ │ │ │ │ │ ├── abilities_king.dm
│ │ │ │ │ │ │ ├── castedatum_king.dm
│ │ │ │ │ │ │ ├── king.dm
│ │ │ │ │ │ │ ├── mutations_conqueror.dm
│ │ │ │ │ │ │ └── mutations_king.dm
│ │ │ │ │ │ ├── larva/
│ │ │ │ │ │ │ ├── castedatum_larva.dm
│ │ │ │ │ │ │ └── larva.dm
│ │ │ │ │ │ ├── mantis/
│ │ │ │ │ │ │ ├── abilities_mantis.dm
│ │ │ │ │ │ │ ├── castedatum_mantis.dm
│ │ │ │ │ │ │ └── mantis.dm
│ │ │ │ │ │ ├── nymph/
│ │ │ │ │ │ │ ├── castedatum_nymph.dm
│ │ │ │ │ │ │ └── nymph.dm
│ │ │ │ │ │ ├── praetorian/
│ │ │ │ │ │ │ ├── abilities_praetorian.dm
│ │ │ │ │ │ │ ├── castedatum_praetorian.dm
│ │ │ │ │ │ │ ├── mutations_dancer.dm
│ │ │ │ │ │ │ ├── mutations_oppressor.dm
│ │ │ │ │ │ │ ├── mutations_praetorian.dm
│ │ │ │ │ │ │ └── praetorian.dm
│ │ │ │ │ │ ├── puppet/
│ │ │ │ │ │ │ ├── abilities_puppet.dm
│ │ │ │ │ │ │ ├── castedatum_puppet.dm
│ │ │ │ │ │ │ └── puppet.dm
│ │ │ │ │ │ ├── puppeteer/
│ │ │ │ │ │ │ ├── abilities_puppeteer.dm
│ │ │ │ │ │ │ ├── castedatum_puppeteer.dm
│ │ │ │ │ │ │ ├── mutations_puppeteer.dm
│ │ │ │ │ │ │ └── puppeteer.dm
│ │ │ │ │ │ ├── pyrogen/
│ │ │ │ │ │ │ ├── abilities_pyrogen.dm
│ │ │ │ │ │ │ ├── castedatum_pyrogen.dm
│ │ │ │ │ │ │ ├── mutations_pyrogen.dm
│ │ │ │ │ │ │ └── pyrogen.dm
│ │ │ │ │ │ ├── queen/
│ │ │ │ │ │ │ ├── abilities_queen.dm
│ │ │ │ │ │ │ ├── castedatum_queen.dm
│ │ │ │ │ │ │ ├── mutations_queen.dm
│ │ │ │ │ │ │ └── queen.dm
│ │ │ │ │ │ ├── ravager/
│ │ │ │ │ │ │ ├── abilities_ravager.dm
│ │ │ │ │ │ │ ├── castedatum_ravager.dm
│ │ │ │ │ │ │ ├── mutations_bloodthirster.dm
│ │ │ │ │ │ │ ├── mutations_ravager.dm
│ │ │ │ │ │ │ └── ravager.dm
│ │ │ │ │ │ ├── runner/
│ │ │ │ │ │ │ ├── abilities_runner.dm
│ │ │ │ │ │ │ ├── castedatum_runner.dm
│ │ │ │ │ │ │ ├── mutations_melter.dm
│ │ │ │ │ │ │ ├── mutations_runner.dm
│ │ │ │ │ │ │ └── runner.dm
│ │ │ │ │ │ ├── scorpion/
│ │ │ │ │ │ │ ├── castedatum_scorpion.dm
│ │ │ │ │ │ │ └── scorpion.dm
│ │ │ │ │ │ ├── sentinel/
│ │ │ │ │ │ │ ├── abilities_sentinel.dm
│ │ │ │ │ │ │ ├── castedatum_sentinel.dm
│ │ │ │ │ │ │ ├── mutations_retrograde.dm
│ │ │ │ │ │ │ ├── mutations_sentinel.dm
│ │ │ │ │ │ │ └── sentinel.dm
│ │ │ │ │ │ ├── shrike/
│ │ │ │ │ │ │ ├── abilities_shrike.dm
│ │ │ │ │ │ │ ├── castedatum_shrike.dm
│ │ │ │ │ │ │ ├── mutations_shrike.dm
│ │ │ │ │ │ │ └── shrike.dm
│ │ │ │ │ │ ├── spiderling/
│ │ │ │ │ │ │ ├── castedatum_spiderling.dm
│ │ │ │ │ │ │ └── spiderling.dm
│ │ │ │ │ │ ├── spitter/
│ │ │ │ │ │ │ ├── abilities_spitter.dm
│ │ │ │ │ │ │ ├── castedatum_spitter.dm
│ │ │ │ │ │ │ ├── mutations_globadier.dm
│ │ │ │ │ │ │ ├── mutations_spitter.dm
│ │ │ │ │ │ │ └── spitter.dm
│ │ │ │ │ │ ├── warlock/
│ │ │ │ │ │ │ ├── abilities_warlock.dm
│ │ │ │ │ │ │ ├── castedatum_warlock.dm
│ │ │ │ │ │ │ ├── mutations_warlock.dm
│ │ │ │ │ │ │ └── warlock.dm
│ │ │ │ │ │ ├── warrior/
│ │ │ │ │ │ │ ├── abilities_warrior.dm
│ │ │ │ │ │ │ ├── castedatum_warrior.dm
│ │ │ │ │ │ │ ├── mutations_warrior.dm
│ │ │ │ │ │ │ └── warrior.dm
│ │ │ │ │ │ ├── widow/
│ │ │ │ │ │ │ ├── abilities_widow.dm
│ │ │ │ │ │ │ ├── castedatum_widow.dm
│ │ │ │ │ │ │ ├── mutations_widow.dm
│ │ │ │ │ │ │ └── widow.dm
│ │ │ │ │ │ └── wraith/
│ │ │ │ │ │ ├── abilities_wraith.dm
│ │ │ │ │ │ ├── castedatum_wraith.dm
│ │ │ │ │ │ └── wraith.dm
│ │ │ │ │ ├── charge_crush.dm
│ │ │ │ │ ├── damage_procs.dm
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── egg.dm
│ │ │ │ │ ├── embryo.dm
│ │ │ │ │ ├── emote.dm
│ │ │ │ │ ├── evo_datum.dm
│ │ │ │ │ ├── evolution.dm
│ │ │ │ │ ├── facehuggers.dm
│ │ │ │ │ ├── hive_datum.dm
│ │ │ │ │ ├── hive_upgrades.dm
│ │ │ │ │ ├── life.dm
│ │ │ │ │ ├── login.dm
│ │ │ │ │ ├── mutation_datum.dm
│ │ │ │ │ ├── mutation_upgrade.dm
│ │ │ │ │ ├── patterns.dm
│ │ │ │ │ ├── saddles.dm
│ │ │ │ │ ├── say.dm
│ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ ├── xeno_defines.dm
│ │ │ │ │ ├── xeno_helpers.dm
│ │ │ │ │ ├── xenoattacks.dm
│ │ │ │ │ ├── xenomorph.dm
│ │ │ │ │ ├── xenomorph_defense.dm
│ │ │ │ │ ├── xenoprocs.dm
│ │ │ │ │ └── xenoupgrade.dm
│ │ │ │ ├── damage_procs.dm
│ │ │ │ ├── death.dm
│ │ │ │ ├── emote.dm
│ │ │ │ ├── init_signals.dm
│ │ │ │ ├── living.dm
│ │ │ │ ├── living_defense.dm
│ │ │ │ ├── living_defines.dm
│ │ │ │ ├── living_fov.dm
│ │ │ │ ├── living_health_procs.dm
│ │ │ │ ├── living_helpers.dm
│ │ │ │ ├── living_movement.dm
│ │ │ │ ├── living_powers.dm
│ │ │ │ ├── living_resist.dm
│ │ │ │ ├── living_verbs.dm
│ │ │ │ ├── login.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── say.dm
│ │ │ │ ├── silicon/
│ │ │ │ │ ├── ai/
│ │ │ │ │ │ ├── ai.dm
│ │ │ │ │ │ ├── ai_notifications.dm
│ │ │ │ │ │ ├── ai_verbs.dm
│ │ │ │ │ │ ├── death.dm
│ │ │ │ │ │ ├── examine.dm
│ │ │ │ │ │ ├── freelook/
│ │ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ │ ├── cameranet.dm
│ │ │ │ │ │ │ ├── chunk.dm
│ │ │ │ │ │ │ └── eye.dm
│ │ │ │ │ │ ├── life.dm
│ │ │ │ │ │ ├── login.dm
│ │ │ │ │ │ ├── logout.dm
│ │ │ │ │ │ ├── multicam.dm
│ │ │ │ │ │ ├── say.dm
│ │ │ │ │ │ └── vox_sounds.dm
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── say.dm
│ │ │ │ │ └── silicon.dm
│ │ │ │ ├── simple_animal/
│ │ │ │ │ ├── friendly/
│ │ │ │ │ │ ├── cat.dm
│ │ │ │ │ │ ├── catslug.dm
│ │ │ │ │ │ ├── corgi.dm
│ │ │ │ │ │ ├── crab.dm
│ │ │ │ │ │ ├── farm_animals.dm
│ │ │ │ │ │ ├── lizard.dm
│ │ │ │ │ │ ├── mouse.dm
│ │ │ │ │ │ └── parrot.dm
│ │ │ │ │ ├── hostile/
│ │ │ │ │ │ ├── bear.dm
│ │ │ │ │ │ ├── carp.dm
│ │ │ │ │ │ ├── hostile.dm
│ │ │ │ │ │ └── retaliate.dm
│ │ │ │ │ └── simple_animal.dm
│ │ │ │ └── status_procs.dm
│ │ │ ├── login.dm
│ │ │ ├── logout.dm
│ │ │ ├── mob.dm
│ │ │ ├── mob_defines.dm
│ │ │ ├── mob_grab.dm
│ │ │ ├── mob_helpers.dm
│ │ │ ├── mob_movement.dm
│ │ │ ├── mob_movespeed.dm
│ │ │ ├── mob_transformation_simple.dm
│ │ │ ├── mob_verbs.dm
│ │ │ ├── new_player/
│ │ │ │ ├── ethnicity.dm
│ │ │ │ ├── login.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── new_player.dm
│ │ │ │ ├── poll.dm
│ │ │ │ ├── preferences_setup.dm
│ │ │ │ └── sprite_accessories.dm
│ │ │ ├── say.dm
│ │ │ ├── taste.dm
│ │ │ └── update_icons.dm
│ │ ├── orbits/
│ │ │ └── spaceship.dm
│ │ ├── organs/
│ │ │ ├── limb_objects.dm
│ │ │ ├── limbs.dm
│ │ │ ├── organ_alien.dm
│ │ │ ├── organ_internal.dm
│ │ │ ├── organ_objects.dm
│ │ │ ├── pain.dm
│ │ │ └── wound.dm
│ │ ├── paperwork/
│ │ │ ├── beginner_tutorials.dm
│ │ │ ├── carbonpaper.dm
│ │ │ ├── clipboard.dm
│ │ │ ├── filingcabinet.dm
│ │ │ ├── folders.dm
│ │ │ ├── paper.dm
│ │ │ ├── paper_bundle.dm
│ │ │ ├── paperbin.dm
│ │ │ ├── photocopier.dm
│ │ │ └── photography.dm
│ │ ├── power/
│ │ │ ├── apc/
│ │ │ │ ├── apc.dm
│ │ │ │ ├── apc_appearance.dm
│ │ │ │ ├── apc_attack.dm
│ │ │ │ └── apc_tool_act.dm
│ │ │ ├── batteryrack.dm
│ │ │ ├── cable.dm
│ │ │ ├── fusion_engine.dm
│ │ │ ├── generator.dm
│ │ │ ├── generator_type2.dm
│ │ │ ├── gravitygenerator.dm
│ │ │ ├── groundmap_geothermal.dm
│ │ │ ├── light_bulbs.dm
│ │ │ ├── lighting.dm
│ │ │ ├── lighting_frame.dm
│ │ │ ├── multiz.dm
│ │ │ ├── pipecleaners.dm
│ │ │ ├── port_gen.dm
│ │ │ ├── power.dm
│ │ │ ├── power_monitor.dm
│ │ │ ├── powernet.dm
│ │ │ ├── singularity/
│ │ │ │ └── emitter.dm
│ │ │ ├── smes.dm
│ │ │ ├── smes_construction.dm
│ │ │ └── terminal.dm
│ │ ├── projectiles/
│ │ │ ├── ammo_boxes.dm
│ │ │ ├── ammo_datums.dm
│ │ │ ├── ammo_types/
│ │ │ │ ├── ags_ammo.dm
│ │ │ │ ├── energy_ammo.dm
│ │ │ │ ├── heavy_ammo.dm
│ │ │ │ ├── mech_ammo.dm
│ │ │ │ ├── microrail_ammo.dm
│ │ │ │ ├── miscellaneous_ammo.dm
│ │ │ │ ├── mortar_ammo.dm
│ │ │ │ ├── pistol_ammo.dm
│ │ │ │ ├── revolver_ammo.dm
│ │ │ │ ├── rifle_ammo.dm
│ │ │ │ ├── rocket_ammo.dm
│ │ │ │ ├── shotgun_ammo.dm
│ │ │ │ ├── smartgun_ammo.dm
│ │ │ │ ├── smg_ammo.dm
│ │ │ │ ├── sniper_ammo.dm
│ │ │ │ ├── turret_ammo.dm
│ │ │ │ ├── tx54_ammo.dm
│ │ │ │ ├── volkite_ammo.dm
│ │ │ │ ├── xenos/
│ │ │ │ │ ├── energy_xenoammo.dm
│ │ │ │ │ ├── gas_xenoammo.dm
│ │ │ │ │ ├── huggers_xenoammo.dm
│ │ │ │ │ ├── puppeteer_xenoammo.dm
│ │ │ │ │ ├── pyrogen_xenoammo.dm
│ │ │ │ │ ├── spits_xenoammo.dm
│ │ │ │ │ └── widow_xenoammo.dm
│ │ │ │ └── zombie_ammo.dm
│ │ │ ├── ammunition.dm
│ │ │ ├── gun_attachables/
│ │ │ │ ├── attachable.dm
│ │ │ │ ├── flamer.dm
│ │ │ │ ├── foldable.dm
│ │ │ │ ├── muzzle.dm
│ │ │ │ ├── rail.dm
│ │ │ │ ├── scope.dm
│ │ │ │ ├── stock.dm
│ │ │ │ └── underbarrel.dm
│ │ │ ├── gun_helpers.dm
│ │ │ ├── gun_system.dm
│ │ │ ├── guns/
│ │ │ │ ├── _shared_ammo_objects.dm
│ │ │ │ ├── energy.dm
│ │ │ │ ├── flamer.dm
│ │ │ │ ├── grenade_launchers.dm
│ │ │ │ ├── mounted.dm
│ │ │ │ ├── pistols.dm
│ │ │ │ ├── plasma.dm
│ │ │ │ ├── revolvers.dm
│ │ │ │ ├── rifles.dm
│ │ │ │ ├── sentries.dm
│ │ │ │ ├── shotguns.dm
│ │ │ │ ├── smgs.dm
│ │ │ │ └── specialist.dm
│ │ │ ├── magazines/
│ │ │ │ ├── energy.dm
│ │ │ │ ├── flamer.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── mounted.dm
│ │ │ │ ├── pistols.dm
│ │ │ │ ├── revolvers.dm
│ │ │ │ ├── rifles.dm
│ │ │ │ ├── sentries.dm
│ │ │ │ ├── shotguns.dm
│ │ │ │ ├── smgs.dm
│ │ │ │ ├── specialist.dm
│ │ │ │ └── unmanned_vehicle.dm
│ │ │ ├── mounted.dm
│ │ │ ├── projectile.dm
│ │ │ ├── sentries.dm
│ │ │ └── tracer.dm
│ │ ├── radial/
│ │ │ └── radial_body_select.dm
│ │ ├── reagents/
│ │ │ ├── chem_splash.dm
│ │ │ ├── chemistry/
│ │ │ │ ├── colors.dm
│ │ │ │ ├── holder/
│ │ │ │ │ └── holder.dm
│ │ │ │ ├── machinery/
│ │ │ │ │ ├── chem_dispenser.dm
│ │ │ │ │ ├── chem_master.dm
│ │ │ │ │ ├── pandemic.dm
│ │ │ │ │ └── reagentgrinder.dm
│ │ │ │ ├── reactions.dm
│ │ │ │ ├── readme.md
│ │ │ │ ├── reagents/
│ │ │ │ │ ├── cloning.dm
│ │ │ │ │ ├── drinks/
│ │ │ │ │ │ ├── alcohol_reagents.dm
│ │ │ │ │ │ ├── drink_reagents.dm
│ │ │ │ │ │ └── glass_styles/
│ │ │ │ │ │ ├── alcohol.dm
│ │ │ │ │ │ ├── coffee_tea.dm
│ │ │ │ │ │ ├── dairy.dm
│ │ │ │ │ │ ├── juices.dm
│ │ │ │ │ │ ├── mixed_alcohol.dm
│ │ │ │ │ │ ├── mixed_drinks.dm
│ │ │ │ │ │ ├── smoothies_shakes.dm
│ │ │ │ │ │ └── sodas.dm
│ │ │ │ │ ├── food.dm
│ │ │ │ │ ├── medical.dm
│ │ │ │ │ ├── other.dm
│ │ │ │ │ └── toxin.dm
│ │ │ │ ├── reagents.dm
│ │ │ │ └── recipes/
│ │ │ │ ├── food_drink.dm
│ │ │ │ ├── medical.dm
│ │ │ │ └── other.dm
│ │ │ ├── reagent_containers/
│ │ │ │ ├── autoinjectors.dm
│ │ │ │ ├── blood_pack.dm
│ │ │ │ ├── borghydro.dm
│ │ │ │ ├── cups/
│ │ │ │ │ ├── _cup.dm
│ │ │ │ │ ├── _glass_datum.dm
│ │ │ │ │ ├── bottle.dm
│ │ │ │ │ ├── drinkingglass.dm
│ │ │ │ │ ├── drinks.dm
│ │ │ │ │ ├── glassbottle.dm
│ │ │ │ │ └── soda.dm
│ │ │ │ ├── dropper.dm
│ │ │ │ ├── food/
│ │ │ │ │ ├── burgers.dm
│ │ │ │ │ ├── cans.dm
│ │ │ │ │ ├── condiment.dm
│ │ │ │ │ ├── donuts.dm
│ │ │ │ │ ├── drinks.dm
│ │ │ │ │ ├── frozen.dm
│ │ │ │ │ ├── mexican.dm
│ │ │ │ │ ├── piecake.dm
│ │ │ │ │ ├── pizzapasta.dm
│ │ │ │ │ ├── sandwich.dm
│ │ │ │ │ ├── snacks/
│ │ │ │ │ │ └── grown.dm
│ │ │ │ │ ├── snacks.dm
│ │ │ │ │ └── soupsalad.dm
│ │ │ │ ├── food.dm
│ │ │ │ ├── glass/
│ │ │ │ │ └── bottle.dm
│ │ │ │ ├── glass.dm
│ │ │ │ ├── hypospray.dm
│ │ │ │ ├── jerrycan.dm
│ │ │ │ ├── pill.dm
│ │ │ │ ├── spray.dm
│ │ │ │ └── syringes.dm
│ │ │ └── reagent_containers.dm
│ │ ├── recycling/
│ │ │ ├── conveyor2.dm
│ │ │ ├── disposal-construction.dm
│ │ │ ├── disposal.dm
│ │ │ ├── recycler.dm
│ │ │ └── sortingmachinery.dm
│ │ ├── remote_fob/
│ │ │ ├── actions_misc.dm
│ │ │ ├── computer.dm
│ │ │ └── drone.dm
│ │ ├── reqs/
│ │ │ ├── supply.dm
│ │ │ ├── supplypacks/
│ │ │ │ ├── armor_packs.dm
│ │ │ │ ├── clothing_packs.dm
│ │ │ │ ├── engineering_packs.dm
│ │ │ │ ├── explosives_packs.dm
│ │ │ │ ├── factory_packs.dm
│ │ │ │ ├── imports_packs.dm
│ │ │ │ ├── medical_packs.dm
│ │ │ │ ├── operations_packs.dm
│ │ │ │ ├── smartguns_packs.dm
│ │ │ │ ├── supplies_packs.dm
│ │ │ │ ├── vehicles_packs.dm
│ │ │ │ └── weapons_packs.dm
│ │ │ └── supplypacks.dm
│ │ ├── requisitions/
│ │ │ ├── fulton.dm
│ │ │ └── supply_export.dm
│ │ ├── screen_alert/
│ │ │ ├── _screen_alert.dm
│ │ │ ├── command_alert.dm
│ │ │ ├── hive_message.dm
│ │ │ └── misc_alert.dm
│ │ ├── security_levels/
│ │ │ ├── keycard_authentication.dm
│ │ │ └── security_level_datums.dm
│ │ ├── shuttle/
│ │ │ ├── computer.dm
│ │ │ ├── docking.dm
│ │ │ ├── ert.dm
│ │ │ ├── ert_big.dm
│ │ │ ├── escape_pod.dm
│ │ │ ├── gamemodes/
│ │ │ │ └── crash.dm
│ │ │ ├── marine_dropship.dm
│ │ │ ├── mini_dropship.dm
│ │ │ ├── navigation_computer.dm
│ │ │ ├── on_move.dm
│ │ │ ├── ripple.dm
│ │ │ ├── shuttle.dm
│ │ │ └── shuttle_rotate.dm
│ │ ├── spatial_grid/
│ │ │ └── cell_tracker.dm
│ │ ├── surgery/
│ │ │ ├── amputation.dm
│ │ │ ├── bones.dm
│ │ │ ├── brainrepair.dm
│ │ │ ├── encased.dm
│ │ │ ├── eye.dm
│ │ │ ├── face.dm
│ │ │ ├── generic.dm
│ │ │ ├── headreattach.dm
│ │ │ ├── implant.dm
│ │ │ ├── internal_bleeding.dm
│ │ │ ├── necrosis.dm
│ │ │ ├── organs_internal.dm
│ │ │ ├── robolimbs.dm
│ │ │ └── surgery.dm
│ │ ├── tgchat/
│ │ │ ├── README.md
│ │ │ ├── message.dm
│ │ │ └── to_chat.dm
│ │ ├── tgs/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── core/
│ │ │ │ ├── README.md
│ │ │ │ ├── _definitions.dm
│ │ │ │ ├── byond_world_export.dm
│ │ │ │ ├── core.dm
│ │ │ │ ├── datum.dm
│ │ │ │ └── tgs_version.dm
│ │ │ ├── includes.dm
│ │ │ ├── v3210/
│ │ │ │ ├── README.md
│ │ │ │ ├── api.dm
│ │ │ │ └── commands.dm
│ │ │ ├── v4/
│ │ │ │ ├── README.md
│ │ │ │ ├── api.dm
│ │ │ │ └── commands.dm
│ │ │ └── v5/
│ │ │ ├── README.md
│ │ │ ├── __interop_version.dm
│ │ │ ├── _defines.dm
│ │ │ ├── api.dm
│ │ │ ├── bridge.dm
│ │ │ ├── chunking.dm
│ │ │ ├── commands.dm
│ │ │ ├── serializers.dm
│ │ │ ├── topic.dm
│ │ │ └── undefs.dm
│ │ ├── tgui/
│ │ │ ├── external.dm
│ │ │ ├── states/
│ │ │ │ ├── access.dm
│ │ │ │ ├── admin.dm
│ │ │ │ ├── alamo.dm
│ │ │ │ ├── always.dm
│ │ │ │ ├── conscious.dm
│ │ │ │ ├── contained.dm
│ │ │ │ ├── debug.dm
│ │ │ │ ├── deep_inventory.dm
│ │ │ │ ├── default.dm
│ │ │ │ ├── dropship.dm
│ │ │ │ ├── fun.dm
│ │ │ │ ├── hands.dm
│ │ │ │ ├── human_adjacent.dm
│ │ │ │ ├── inventory.dm
│ │ │ │ ├── language_menu.dm
│ │ │ │ ├── never.dm
│ │ │ │ ├── new_player.dm
│ │ │ │ ├── not_incapacitated.dm
│ │ │ │ ├── notcontained.dm
│ │ │ │ ├── observer.dm
│ │ │ │ ├── physical.dm
│ │ │ │ ├── reverse_contained.dm
│ │ │ │ ├── self.dm
│ │ │ │ ├── xeno.dm
│ │ │ │ └── zlevel.dm
│ │ │ ├── states.dm
│ │ │ ├── status_composers.dm
│ │ │ ├── tgui.dm
│ │ │ └── tgui_window.dm
│ │ ├── tgui_input/
│ │ │ ├── alert.dm
│ │ │ ├── checkboxes.dm
│ │ │ ├── list.dm
│ │ │ ├── number.dm
│ │ │ ├── say_modal/
│ │ │ │ ├── modal.dm
│ │ │ │ ├── speech.dm
│ │ │ │ └── typing.dm
│ │ │ └── text.dm
│ │ ├── tgui_panel/
│ │ │ ├── audio.dm
│ │ │ ├── external.dm
│ │ │ ├── telemetry.dm
│ │ │ └── tgui_panel.dm
│ │ ├── tooltip/
│ │ │ ├── tooltip.dm
│ │ │ └── tooltip.html
│ │ ├── transport/
│ │ │ ├── _transport_machinery.dm
│ │ │ ├── admin.dm
│ │ │ ├── elevator/
│ │ │ │ ├── elev_controller.dm
│ │ │ │ ├── elev_doors.dm
│ │ │ │ ├── elev_indicator.dm
│ │ │ │ ├── elev_music_zone.dm
│ │ │ │ └── elev_panel.dm
│ │ │ ├── linear_controller.dm
│ │ │ ├── tram/
│ │ │ │ ├── tram_controller.dm
│ │ │ │ ├── tram_controls.dm
│ │ │ │ ├── tram_displays.dm
│ │ │ │ ├── tram_doors.dm
│ │ │ │ ├── tram_floors.dm
│ │ │ │ ├── tram_machinery.dm
│ │ │ │ ├── tram_power.dm
│ │ │ │ ├── tram_remote.dm
│ │ │ │ ├── tram_signals.dm
│ │ │ │ └── tram_structures.dm
│ │ │ ├── transport_module.dm
│ │ │ └── transport_navigation.dm
│ │ ├── tutorials/
│ │ │ ├── _tutorial.dm
│ │ │ ├── tutorial_instruction.dm
│ │ │ └── tutorials/
│ │ │ ├── drop.dm
│ │ │ └── switch_hands.dm
│ │ ├── unit_tests/
│ │ │ ├── README.md
│ │ │ ├── _unit_tests.dm
│ │ │ ├── apc_area_sanity.dm
│ │ │ ├── bespoke_id.dm
│ │ │ ├── binary_insert.dm
│ │ │ ├── chat_filter.dm
│ │ │ ├── component_tests.dm
│ │ │ ├── connect_loc.dm
│ │ │ ├── create_and_destroy.dm
│ │ │ ├── dcs_get_id_from_elements.dm
│ │ │ ├── drink_icons.dm
│ │ │ ├── find_reference_sanity.dm
│ │ │ ├── focus_only_tests.dm
│ │ │ ├── font_awesome_icons.dm
│ │ │ ├── implanting.dm
│ │ │ ├── item_variant_test.dm
│ │ │ ├── keybinding_init.dm
│ │ │ ├── map_templates.dm
│ │ │ ├── mapping.dm
│ │ │ ├── movement_order_sanity.dm
│ │ │ ├── plane_double_transform.dm
│ │ │ ├── security_levels.dm
│ │ │ ├── spawn_guns.dm
│ │ │ ├── spawn_humans.dm
│ │ │ ├── spawn_xenos.dm
│ │ │ ├── subsystem_init.dm
│ │ │ ├── tgui_create_message.dm
│ │ │ ├── timer_sanity.dm
│ │ │ ├── tutorial_sanity.dm
│ │ │ ├── unit_test.dm
│ │ │ ├── verify_emoji_names.dm
│ │ │ ├── weed_ability.dm
│ │ │ ├── weed_spread.dm
│ │ │ ├── xeno_logical_scaling.dm
│ │ │ └── xenoaccuracy.dm
│ │ ├── vehicles/
│ │ │ ├── __vehicle.dm
│ │ │ ├── _hitbox.dm
│ │ │ ├── armored/
│ │ │ │ ├── __armored.dm
│ │ │ │ ├── _multitile.dm
│ │ │ │ ├── ammo_magazine.dm
│ │ │ │ ├── apc.dm
│ │ │ │ ├── armored_actions.dm
│ │ │ │ ├── armored_modules.dm
│ │ │ │ ├── armored_weapons.dm
│ │ │ │ ├── armored_wreck.dm
│ │ │ │ ├── icc_armored_weapons.dm
│ │ │ │ ├── icc_recontank.dm
│ │ │ │ ├── interiors/
│ │ │ │ │ ├── ammo_rack.dm
│ │ │ │ │ ├── breech.dm
│ │ │ │ │ ├── chairs.dm
│ │ │ │ │ ├── periscope.dm
│ │ │ │ │ └── som_props.dm
│ │ │ │ ├── medium_apc.dm
│ │ │ │ ├── medium_tank.dm
│ │ │ │ ├── small_apc.dm
│ │ │ │ ├── som_armored_weapons.dm
│ │ │ │ ├── som_tank.dm
│ │ │ │ ├── tank_fabricator.dm
│ │ │ │ ├── truck.dm
│ │ │ │ └── vehicle_collision.dm
│ │ │ ├── atv.dm
│ │ │ ├── bicycle.dm
│ │ │ ├── big_bike.dm
│ │ │ ├── cargo_train.dm
│ │ │ ├── cars/
│ │ │ │ └── car.dm
│ │ │ ├── hover_bike.dm
│ │ │ ├── mecha/
│ │ │ │ ├── _mecha.dm
│ │ │ │ ├── combat/
│ │ │ │ │ ├── combat.dm
│ │ │ │ │ ├── greyscale/
│ │ │ │ │ │ ├── greyscale.dm
│ │ │ │ │ │ ├── greyscale_constructor.dm
│ │ │ │ │ │ ├── greyscale_core.dm
│ │ │ │ │ │ └── greyscale_limbs.dm
│ │ │ │ │ ├── gygax.dm
│ │ │ │ │ ├── marauder.dm
│ │ │ │ │ ├── phazon.dm
│ │ │ │ │ └── savannah_ivanov.dm
│ │ │ │ ├── equipment/
│ │ │ │ │ ├── mecha_equipment.dm
│ │ │ │ │ ├── tools/
│ │ │ │ │ │ ├── greyscale_tools.dm
│ │ │ │ │ │ ├── mining_tools.dm
│ │ │ │ │ │ ├── other_tools.dm
│ │ │ │ │ │ └── work_tools.dm
│ │ │ │ │ └── weapons/
│ │ │ │ │ ├── greyscale_weapons.dm
│ │ │ │ │ ├── mecha_ammo.dm
│ │ │ │ │ └── weapons.dm
│ │ │ │ ├── mech_bay.dm
│ │ │ │ ├── mech_melee_attack.dm
│ │ │ │ ├── mecha_actions.dm
│ │ │ │ ├── mecha_control_console.dm
│ │ │ │ ├── mecha_damage.dm
│ │ │ │ ├── mecha_defense.dm
│ │ │ │ ├── mecha_helpers.dm
│ │ │ │ ├── mecha_mob_interaction.dm
│ │ │ │ ├── mecha_movement.dm
│ │ │ │ ├── mecha_parts.dm
│ │ │ │ ├── mecha_ui.dm
│ │ │ │ ├── mecha_wreckage.dm
│ │ │ │ └── working/
│ │ │ │ ├── ripley.dm
│ │ │ │ └── working.dm
│ │ │ ├── motorbike.dm
│ │ │ ├── powerloader.dm
│ │ │ ├── ridden.dm
│ │ │ ├── sealed.dm
│ │ │ ├── train.dm
│ │ │ ├── unmanned/
│ │ │ │ ├── deployable_vehicles.dm
│ │ │ │ ├── unmanned_droid.dm
│ │ │ │ ├── unmanned_turrets.dm
│ │ │ │ ├── unmanned_vehicle.dm
│ │ │ │ └── unmanned_vehicle_remote.dm
│ │ │ ├── vehicle_actions.dm
│ │ │ ├── vehicle_attachments/
│ │ │ │ ├── storage_attachments.dm
│ │ │ │ ├── vehicle_modules.dm
│ │ │ │ └── weapon_attachments.dm
│ │ │ ├── vehicle_key.dm
│ │ │ └── wheelchair.dm
│ │ ├── visuals/
│ │ │ └── render_steps.dm
│ │ └── xenomorph/
│ │ ├── _xeno_structure.dm
│ │ ├── acid_pools.dm
│ │ ├── acidwell.dm
│ │ ├── jellypod.dm
│ │ ├── maw.dm
│ │ ├── mutations.dm
│ │ ├── pherotower.dm
│ │ ├── recovery_pylon.dm
│ │ ├── resin_gargoyle.dm
│ │ ├── silo.dm
│ │ ├── spawner.dm
│ │ ├── trap.dm
│ │ ├── tunnel.dm
│ │ ├── xeno_turret.dm
│ │ ├── xenoplant.dm
│ │ └── xenotowers.dm
│ └── world.dm
├── config/
│ ├── admin_ranks.txt
│ ├── admins.txt
│ ├── config.txt
│ ├── dbconfig.txt
│ ├── dev_overrides_readme.txt
│ ├── in_character_filter.txt
│ ├── lobby_themes/
│ │ └── DawsonChristian.ogg
│ ├── maps.txt
│ ├── modes.txt
│ ├── motd.txt
│ ├── policy.json
│ ├── reboot_themes/
│ │ ├── asses_kicked.ogg
│ │ ├── cut_the_salt.ogg
│ │ ├── game_over.ogg
│ │ ├── god_love_marines.ogg
│ │ ├── its_only_game.ogg
│ │ ├── outstanding_marines.ogg
│ │ ├── skill_issue.ogg
│ │ └── surrounded_by_assholes.ogg
│ ├── resources.txt
│ ├── shipmaps.txt
│ └── word_filter.toml
├── dependencies.sh
├── docs/
│ └── faction-design.md
├── html/
│ ├── IRV/
│ │ └── jquery-ui.custom-core-widgit-mouse-sortable-min.js
│ ├── admin/
│ │ └── view_variables.css
│ ├── browser/
│ │ ├── admin_panels.css
│ │ ├── admin_panels_css3.css
│ │ ├── banpanel.css
│ │ ├── common.css
│ │ ├── create_object.html
│ │ ├── latechoices.css
│ │ ├── panels.css
│ │ ├── roundend.css
│ │ ├── search.js
│ │ └── unbanpanel.css
│ ├── changelogs/
│ │ ├── __CHANGELOG_README.txt
│ │ ├── archive/
│ │ │ ├── 2019-01.yml
│ │ │ ├── 2019-02.yml
│ │ │ ├── 2019-03.yml
│ │ │ ├── 2019-04.yml
│ │ │ ├── 2019-05.yml
│ │ │ ├── 2019-06.yml
│ │ │ ├── 2019-07.yml
│ │ │ ├── 2019-08.yml
│ │ │ ├── 2019-09.yml
│ │ │ ├── 2019-10.yml
│ │ │ ├── 2019-11.yml
│ │ │ ├── 2019-12.yml
│ │ │ ├── 2020-01.yml
│ │ │ ├── 2020-03.yml
│ │ │ ├── 2020-04.yml
│ │ │ ├── 2020-05.yml
│ │ │ ├── 2020-06.yml
│ │ │ ├── 2020-07.yml
│ │ │ ├── 2020-08.yml
│ │ │ ├── 2020-09.yml
│ │ │ ├── 2020-10.yml
│ │ │ ├── 2020-11.yml
│ │ │ ├── 2020-12.yml
│ │ │ ├── 2021-01.yml
│ │ │ ├── 2021-02.yml
│ │ │ ├── 2021-03.yml
│ │ │ ├── 2021-04.yml
│ │ │ ├── 2021-05.yml
│ │ │ ├── 2021-06.yml
│ │ │ ├── 2021-07.yml
│ │ │ ├── 2021-08.yml
│ │ │ ├── 2021-09.yml
│ │ │ ├── 2021-10.yml
│ │ │ ├── 2021-11.yml
│ │ │ ├── 2021-12.yml
│ │ │ ├── 2022-01.yml
│ │ │ ├── 2022-02.yml
│ │ │ ├── 2022-03.yml
│ │ │ ├── 2022-04.yml
│ │ │ ├── 2022-05.yml
│ │ │ ├── 2022-06.yml
│ │ │ ├── 2022-07.yml
│ │ │ ├── 2022-08.yml
│ │ │ ├── 2022-09.yml
│ │ │ ├── 2022-10.yml
│ │ │ ├── 2022-12.yml
│ │ │ ├── 2023-01.yml
│ │ │ ├── 2023-02.yml
│ │ │ ├── 2023-03.yml
│ │ │ ├── 2023-04.yml
│ │ │ ├── 2023-05.yml
│ │ │ ├── 2023-06.yml
│ │ │ ├── 2023-07.yml
│ │ │ ├── 2023-08.yml
│ │ │ ├── 2023-09.yml
│ │ │ ├── 2023-10.yml
│ │ │ ├── 2023-11.yml
│ │ │ ├── 2023-12.yml
│ │ │ ├── 2024-01.yml
│ │ │ ├── 2024-02.yml
│ │ │ ├── 2024-03.yml
│ │ │ ├── 2024-04.yml
│ │ │ ├── 2024-05.yml
│ │ │ ├── 2024-06.yml
│ │ │ ├── 2024-07.yml
│ │ │ ├── 2024-08.yml
│ │ │ ├── 2024-09.yml
│ │ │ ├── 2024-10.yml
│ │ │ ├── 2024-11.yml
│ │ │ ├── 2024-12.yml
│ │ │ ├── 2025-01.yml
│ │ │ ├── 2025-02.yml
│ │ │ ├── 2025-03.yml
│ │ │ ├── 2025-04.yml
│ │ │ ├── 2025-05.yml
│ │ │ ├── 2025-06.yml
│ │ │ ├── 2025-07.yml
│ │ │ ├── 2025-08.yml
│ │ │ ├── 2025-09.yml
│ │ │ ├── 2025-10.yml
│ │ │ ├── 2025-11.yml
│ │ │ ├── 2025-12.yml
│ │ │ ├── 2026-01.yml
│ │ │ ├── 2026-02.yml
│ │ │ ├── 2026-03.yml
│ │ │ └── 2026-04.yml
│ │ ├── changelog2015.html
│ │ ├── changelog2016.html
│ │ ├── changelog2017.html
│ │ ├── changelog20181.html
│ │ └── changelog20182.html
│ ├── font-awesome/
│ │ └── README.MD
│ ├── statbrowser.css
│ ├── statbrowser.html
│ ├── statbrowser.js
│ └── typing_indicator.html
├── icons/
│ ├── UI_Icons/
│ │ ├── buyable_icons.dmi
│ │ ├── campaign/
│ │ │ ├── asset_icons.dmi
│ │ │ ├── loadout_item_icons.dmi
│ │ │ ├── mission_icons.dmi
│ │ │ └── perk_icons.dmi
│ │ ├── cas_crosshairs/
│ │ │ ├── banshee.dmi
│ │ │ ├── dandelion.dmi
│ │ │ ├── fatty.dmi
│ │ │ ├── gun.dmi
│ │ │ ├── gun_hv.dmi
│ │ │ ├── keeper.dmi
│ │ │ ├── laser.dmi
│ │ │ ├── mighty.dmi
│ │ │ ├── moab.dmi
│ │ │ ├── monarch.dmi
│ │ │ ├── napalm.dmi
│ │ │ ├── poppies.dmi
│ │ │ ├── rocket.dmi
│ │ │ ├── rocket_flare.dmi
│ │ │ ├── rocket_incend.dmi
│ │ │ ├── rocket_smoke.dmi
│ │ │ ├── rocket_tangle.dmi
│ │ │ ├── swansong.dmi
│ │ │ ├── tiny.dmi
│ │ │ └── widowmaker.dmi
│ │ ├── chat_icons.dmi
│ │ ├── gun_crosshairs/
│ │ │ ├── explosive.dmi
│ │ │ ├── rifle.dmi
│ │ │ ├── shotgun.dmi
│ │ │ └── sniper.dmi
│ │ ├── hive_status_icons.dmi
│ │ ├── lobby_button.dmi
│ │ ├── lobbytext.dmi
│ │ ├── map_blips.dmi
│ │ ├── map_blips_large.dmi
│ │ ├── mecha/
│ │ │ └── armor.dmi
│ │ ├── minimap.dmi
│ │ ├── minimap_buttons.dmi
│ │ ├── minimap_mouse/
│ │ │ ├── draw_blue.dmi
│ │ │ ├── draw_erase.dmi
│ │ │ ├── draw_purple.dmi
│ │ │ ├── draw_red.dmi
│ │ │ ├── draw_yellow.dmi
│ │ │ └── label.dmi
│ │ └── screen_alert_images.dmi
│ ├── Xeno/
│ │ ├── 1x1building.dmi
│ │ ├── 2x2building.dmi
│ │ ├── 300x300.dmi
│ │ ├── 32x64.dmi
│ │ ├── 3x3building.dmi
│ │ ├── 64x64.dmi
│ │ ├── 64x64_Xeno_overlays.dmi
│ │ ├── 96x144.dmi
│ │ ├── 96x96.dmi
│ │ ├── Effects.dmi
│ │ ├── acid_turret.dmi
│ │ ├── acid_well.dmi
│ │ ├── actions/
│ │ │ ├── baneling.dmi
│ │ │ ├── behemoth.dmi
│ │ │ ├── boiler.dmi
│ │ │ ├── bull.dmi
│ │ │ ├── carrier.dmi
│ │ │ ├── construction.dmi
│ │ │ ├── crusher.dmi
│ │ │ ├── defender.dmi
│ │ │ ├── defiler.dmi
│ │ │ ├── dragon.dmi
│ │ │ ├── drone.dmi
│ │ │ ├── general.dmi
│ │ │ ├── gorger.dmi
│ │ │ ├── hivelord.dmi
│ │ │ ├── hivemind.dmi
│ │ │ ├── hunter.dmi
│ │ │ ├── king.dmi
│ │ │ ├── leader.dmi
│ │ │ ├── praetorian.dmi
│ │ │ ├── puppeteer.dmi
│ │ │ ├── pyrogen.dmi
│ │ │ ├── queen.dmi
│ │ │ ├── ravager.dmi
│ │ │ ├── runner.dmi
│ │ │ ├── sentinel.dmi
│ │ │ ├── shrike.dmi
│ │ │ ├── spits.dmi
│ │ │ ├── spitter.dmi
│ │ │ ├── warlock.dmi
│ │ │ ├── warrior.dmi
│ │ │ ├── widow.dmi
│ │ │ └── wraith.dmi
│ │ ├── castes/
│ │ │ ├── baneling.dmi
│ │ │ ├── beetle.dmi
│ │ │ ├── behemoth.dmi
│ │ │ ├── boiler.dmi
│ │ │ ├── bull.dmi
│ │ │ ├── carrier.dmi
│ │ │ ├── crusher.dmi
│ │ │ ├── defender.dmi
│ │ │ ├── defiler.dmi
│ │ │ ├── dragon.dmi
│ │ │ ├── drone.dmi
│ │ │ ├── gorger.dmi
│ │ │ ├── hivelord.dmi
│ │ │ ├── hivemind.dmi
│ │ │ ├── hunter.dmi
│ │ │ ├── king/
│ │ │ │ ├── conqueror.dmi
│ │ │ │ └── king.dmi
│ │ │ ├── larva.dmi
│ │ │ ├── mantis.dmi
│ │ │ ├── nymph.dmi
│ │ │ ├── praetorian.dmi
│ │ │ ├── puppet.dmi
│ │ │ ├── puppeteer.dmi
│ │ │ ├── pyrogen.dmi
│ │ │ ├── queen.dmi
│ │ │ ├── ravager.dmi
│ │ │ ├── runner.dmi
│ │ │ ├── scorpion.dmi
│ │ │ ├── sentinel.dmi
│ │ │ ├── shrike.dmi
│ │ │ ├── spitter.dmi
│ │ │ ├── warlock.dmi
│ │ │ ├── warrior.dmi
│ │ │ ├── widow.dmi
│ │ │ └── wraith.dmi
│ │ ├── patterns.dmi
│ │ ├── plants.dmi
│ │ ├── pyrogen.dmi
│ │ ├── resin_pod.dmi
│ │ ├── resin_silo.dmi
│ │ ├── saddles/
│ │ │ ├── runnersaddle.dmi
│ │ │ └── saddles.dmi
│ │ ├── structures.dmi
│ │ ├── weeds.dmi
│ │ └── xeno_materials.dmi
│ ├── atmos/
│ │ ├── connector.dmi
│ │ ├── digital_tvalve.dmi
│ │ ├── digital_valve.dmi
│ │ ├── filter.dmi
│ │ ├── heat.dmi
│ │ ├── heat_exchanger.dmi
│ │ ├── injector.dmi
│ │ ├── junction.dmi
│ │ ├── mainspipe.dmi
│ │ ├── manifold.dmi
│ │ ├── mixer.dmi
│ │ ├── omni_devices.dmi
│ │ ├── outlet_injector.dmi
│ │ ├── oxygen_generator.dmi
│ │ ├── passive_gate.dmi
│ │ ├── pipe_underlays.dmi
│ │ ├── pipe_vent.dmi
│ │ ├── pipes.dmi
│ │ ├── pump.dmi
│ │ ├── red_pipe.dmi
│ │ ├── tank.dmi
│ │ ├── tvalve.dmi
│ │ ├── valve.dmi
│ │ ├── vent_pump.dmi
│ │ ├── vent_scrubber.dmi
│ │ └── volume_pump.dmi
│ ├── blanks/
│ │ ├── 32x32.dmi
│ │ └── 96x96.dmi
│ ├── effects/
│ │ ├── 128x128.dmi
│ │ ├── 160x160.dmi
│ │ ├── 200x200.dmi
│ │ ├── 32x64.dmi
│ │ ├── 64x64.dmi
│ │ ├── 64x64hybrisa_decals.dmi
│ │ ├── 96x157.dmi
│ │ ├── 96x96.dmi
│ │ ├── Targeted.dmi
│ │ ├── alphacolors.dmi
│ │ ├── beam.dmi
│ │ ├── blips.dmi
│ │ ├── blood.dmi
│ │ ├── bulletholes.dmi
│ │ ├── cameravis.dmi
│ │ ├── campaign_effects.dmi
│ │ ├── chemsmoke.dmi
│ │ ├── conqueror_domination.dmi
│ │ ├── crayondecal.dmi
│ │ ├── cut.dmi
│ │ ├── drip.dmi
│ │ ├── effects.dmi
│ │ ├── fire.dmi
│ │ ├── fluidtracks.dmi
│ │ ├── fov/
│ │ │ ├── field_of_view.dmi
│ │ │ └── fov_effects.dmi
│ │ ├── glow_weather.dmi
│ │ ├── heavyimpact.dmi
│ │ ├── landmarks_static.dmi
│ │ ├── lases.dmi
│ │ ├── light_overlays/
│ │ │ ├── light_128.dmi
│ │ │ ├── light_160.dmi
│ │ │ ├── light_192.dmi
│ │ │ ├── light_224.dmi
│ │ │ ├── light_256.dmi
│ │ │ ├── light_288.dmi
│ │ │ ├── light_32.dmi
│ │ │ ├── light_320.dmi
│ │ │ ├── light_352.dmi
│ │ │ ├── light_64.dmi
│ │ │ ├── light_96.dmi
│ │ │ └── shockwave.dmi
│ │ ├── lighting_object.dmi
│ │ ├── lighting_object_big.dmi
│ │ ├── mapping_helpers.dmi
│ │ ├── medical_decals.dmi
│ │ ├── new_acid.dmi
│ │ ├── orders.dmi
│ │ ├── overheat.dmi
│ │ ├── parallax.dmi
│ │ ├── particles/
│ │ │ ├── conqueror.dmi
│ │ │ ├── fire.dmi
│ │ │ ├── generic_particles.dmi
│ │ │ └── smoke.dmi
│ │ ├── perk_unlock.dmi
│ │ ├── progressbar.dmi
│ │ ├── progressicons.dmi
│ │ ├── random/
│ │ │ ├── 64x64.dmi
│ │ │ ├── clothing.dmi
│ │ │ ├── engineering.dmi
│ │ │ ├── food_or_drink.dmi
│ │ │ ├── machinery.dmi
│ │ │ ├── medical.dmi
│ │ │ ├── misc.dmi
│ │ │ └── weaponry.dmi
│ │ ├── spacevines.dmi
│ │ ├── station_explosion.dmi
│ │ ├── steam.dmi
│ │ ├── supplypod_down_target.dmi
│ │ ├── supplypod_target.dmi
│ │ ├── telegraph_96x96.dmi
│ │ ├── water.dmi
│ │ ├── weather_effects.dmi
│ │ ├── welding_effect.dmi
│ │ ├── welding_effect_multitile_door.dmi
│ │ └── xeno_target.dmi
│ ├── grey_template.dmi
│ ├── mecha/
│ │ ├── coop_mech.dmi
│ │ ├── durand_shield.dmi
│ │ ├── mech_assault.dmi
│ │ ├── mech_bay.dmi
│ │ ├── mech_construct.dmi
│ │ ├── mech_construction.dmi
│ │ ├── mech_core_overlays.dmi
│ │ ├── mech_core_weapons.dmi
│ │ ├── mech_gun_overlays.dmi
│ │ ├── mech_medium.dmi
│ │ ├── mech_recon.dmi
│ │ ├── mech_vanguard.dmi
│ │ ├── mecha.dmi
│ │ ├── mecha_ability_overlays.dmi
│ │ ├── mecha_ammo.dmi
│ │ ├── mecha_equipment.dmi
│ │ ├── mecha_equipment_64x32.dmi
│ │ ├── mecha_mouse-disable.dmi
│ │ └── mecha_mouse.dmi
│ ├── misc/
│ │ ├── 12x12.dmi
│ │ ├── beach.dmi
│ │ ├── beach2.dmi
│ │ ├── buildmode.dmi
│ │ ├── colortest.dmi
│ │ ├── emoji.dmi
│ │ ├── empty.dmi
│ │ ├── language.dmi
│ │ ├── lobby_art/
│ │ │ ├── absolutewowza.dmi
│ │ │ ├── areaclear.dmi
│ │ │ ├── artofthestun.dmi
│ │ │ ├── bloodytgmc.dmi
│ │ │ ├── burningflesh.dmi
│ │ │ ├── crt_logo.dmi
│ │ │ ├── delta.dmi
│ │ │ ├── dispensomatic.dmi
│ │ │ ├── droppod.dmi
│ │ │ ├── foundarouny.dmi
│ │ │ ├── loginscreen.dmi
│ │ │ ├── macxeno.dmi
│ │ │ ├── marineslosing.dmi
│ │ │ ├── marinesonlvriver.dmi
│ │ │ ├── mechvsqueen.dmi
│ │ │ ├── miner.dmi
│ │ │ ├── newcrayonflavor.dmi
│ │ │ ├── pfcjim.dmi
│ │ │ ├── raceyoutothealamo.dmi
│ │ │ ├── ravagerstare.dmi
│ │ │ ├── revolver_doorway.dmi
│ │ │ ├── robot_kick.dmi
│ │ │ ├── rounythedog.dmi
│ │ │ ├── shinji.dmi
│ │ │ ├── sl_kickingback.dmi
│ │ │ ├── som_doomguy.dmi
│ │ │ ├── sompropaganda.dmi
│ │ │ ├── somvstgmc.dmi
│ │ │ ├── tadpoledriving.dmi
│ │ │ ├── tankdriving.dmi
│ │ │ ├── tgmc_rpg.dmi
│ │ │ ├── tgmcattacking.dmi
│ │ │ ├── tgmclogo.dmi
│ │ │ ├── tgmcpropaganda.dmi
│ │ │ ├── tgmcrightback.dmi
│ │ │ ├── tgmcsoldier.dmi
│ │ │ ├── tgmcwarcrimes.dmi
│ │ │ ├── warriorboxing.dmi
│ │ │ ├── willyouvictory.dmi
│ │ │ └── zahabromance.dmi
│ │ ├── mark.dmi
│ │ ├── observer_emotes.dmi
│ │ └── pic_in_pic.dmi
│ ├── mob/
│ │ ├── AI.dmi
│ │ ├── OnFire.dmi
│ │ ├── actions/
│ │ │ ├── actions_mecha.dmi
│ │ │ └── actions_vehicle.dmi
│ │ ├── actions.dmi
│ │ ├── alien.dmi
│ │ ├── ammoHUD.dmi
│ │ ├── animal.dmi
│ │ ├── broadMobs.dmi
│ │ ├── cameramob.dmi
│ │ ├── clothing/
│ │ │ ├── back/
│ │ │ │ └── ammo.dmi
│ │ │ ├── back.dmi
│ │ │ ├── belt.dmi
│ │ │ ├── ears.dmi
│ │ │ ├── eyes.dmi
│ │ │ ├── feet.dmi
│ │ │ ├── hands.dmi
│ │ │ ├── headwear/
│ │ │ │ ├── ert_headwear.dmi
│ │ │ │ ├── head_0.dmi
│ │ │ │ ├── marine_hats.dmi
│ │ │ │ ├── marine_helmets.dmi
│ │ │ │ └── space_suit_helmets.dmi
│ │ │ ├── mask.dmi
│ │ │ ├── suits/
│ │ │ │ ├── ert_suits.dmi
│ │ │ │ ├── marine_armor.dmi
│ │ │ │ ├── marine_suits.dmi
│ │ │ │ ├── space_suits.dmi
│ │ │ │ └── suit_0.dmi
│ │ │ └── uniforms/
│ │ │ ├── ert_uniforms.dmi
│ │ │ ├── marine_uniforms.dmi
│ │ │ └── uniform_0.dmi
│ │ ├── dam_human.dmi
│ │ ├── dam_mask.dmi
│ │ ├── dam_mask_robot.dmi
│ │ ├── effects/
│ │ │ └── talk.dmi
│ │ ├── ghost.dmi
│ │ ├── hair_gradients.dmi
│ │ ├── hud/
│ │ │ ├── aura.dmi
│ │ │ ├── human.dmi
│ │ │ ├── human_health.dmi
│ │ │ ├── infected.dmi
│ │ │ ├── intoxicated.dmi
│ │ │ ├── job.dmi
│ │ │ ├── xeno.dmi
│ │ │ └── xeno_health.dmi
│ │ ├── human.dmi
│ │ ├── human_face.dmi
│ │ ├── human_gib.dmi
│ │ ├── human_races/
│ │ │ ├── r_farwa.dmi
│ │ │ ├── r_human.dmi
│ │ │ ├── r_husk.dmi
│ │ │ ├── r_machine.dmi
│ │ │ ├── r_monkey.dmi
│ │ │ ├── r_moth.dmi
│ │ │ ├── r_naera.dmi
│ │ │ ├── r_robot.dmi
│ │ │ ├── r_robot_alpharii.dmi
│ │ │ ├── r_robot_bravada.dmi
│ │ │ ├── r_robot_charlit.dmi
│ │ │ ├── r_robot_deltad.dmi
│ │ │ ├── r_sectoid.dmi
│ │ │ ├── r_skeleton.dmi
│ │ │ ├── r_stok.dmi
│ │ │ ├── r_synthetic.dmi
│ │ │ ├── r_vatborn.dmi
│ │ │ ├── r_vatgrown.dmi
│ │ │ ├── r_yiren.dmi
│ │ │ └── robotic.dmi
│ │ ├── inhands/
│ │ │ ├── clothing/
│ │ │ │ ├── ears_left.dmi
│ │ │ │ ├── ears_right.dmi
│ │ │ │ ├── glasses_left.dmi
│ │ │ │ ├── glasses_right.dmi
│ │ │ │ ├── gloves_left.dmi
│ │ │ │ ├── gloves_right.dmi
│ │ │ │ ├── hats_left.dmi
│ │ │ │ ├── hats_right.dmi
│ │ │ │ ├── masks_left.dmi
│ │ │ │ ├── masks_right.dmi
│ │ │ │ ├── shoes_left.dmi
│ │ │ │ ├── shoes_right.dmi
│ │ │ │ ├── suits_left.dmi
│ │ │ │ ├── suits_right.dmi
│ │ │ │ ├── uniforms_left.dmi
│ │ │ │ └── uniforms_right.dmi
│ │ │ ├── equipment/
│ │ │ │ ├── backpacks_left.dmi
│ │ │ │ ├── backpacks_right.dmi
│ │ │ │ ├── binoculars_left.dmi
│ │ │ │ ├── binoculars_right.dmi
│ │ │ │ ├── cells_left.dmi
│ │ │ │ ├── cells_right.dmi
│ │ │ │ ├── engineering_left.dmi
│ │ │ │ ├── engineering_right.dmi
│ │ │ │ ├── fishing_rod_lefthand.dmi
│ │ │ │ ├── fishing_rod_righthand.dmi
│ │ │ │ ├── id_left.dmi
│ │ │ │ ├── id_right.dmi
│ │ │ │ ├── kitchen_left.dmi
│ │ │ │ ├── kitchen_right.dmi
│ │ │ │ ├── lights_left.dmi
│ │ │ │ ├── lights_right.dmi
│ │ │ │ ├── medical_left.dmi
│ │ │ │ ├── medical_right.dmi
│ │ │ │ ├── medkits_left.dmi
│ │ │ │ ├── medkits_right.dmi
│ │ │ │ ├── security_left.dmi
│ │ │ │ ├── security_right.dmi
│ │ │ │ ├── shields_left.dmi
│ │ │ │ ├── shields_right.dmi
│ │ │ │ ├── smoking_left.dmi
│ │ │ │ ├── smoking_right.dmi
│ │ │ │ ├── surgery_left.dmi
│ │ │ │ ├── surgery_right.dmi
│ │ │ │ ├── tanks_left.dmi
│ │ │ │ ├── tanks_right.dmi
│ │ │ │ ├── toolboxes_left.dmi
│ │ │ │ ├── toolboxes_right.dmi
│ │ │ │ ├── tools_left.dmi
│ │ │ │ └── tools_right.dmi
│ │ │ ├── guns/
│ │ │ │ ├── energy_left_1.dmi
│ │ │ │ ├── energy_left_64.dmi
│ │ │ │ ├── energy_right_1.dmi
│ │ │ │ ├── energy_right_64.dmi
│ │ │ │ ├── machineguns_left_1.dmi
│ │ │ │ ├── machineguns_left_64.dmi
│ │ │ │ ├── machineguns_right_1.dmi
│ │ │ │ ├── machineguns_right_64.dmi
│ │ │ │ ├── marksman_left_1.dmi
│ │ │ │ ├── marksman_left_64.dmi
│ │ │ │ ├── marksman_right_1.dmi
│ │ │ │ ├── marksman_right_64.dmi
│ │ │ │ ├── misc_left_1.dmi
│ │ │ │ ├── misc_right_1.dmi
│ │ │ │ ├── pistols_left_1.dmi
│ │ │ │ ├── pistols_right_1.dmi
│ │ │ │ ├── plasma_left_1.dmi
│ │ │ │ ├── plasma_right_1.dmi
│ │ │ │ ├── rifles_left_1.dmi
│ │ │ │ ├── rifles_left_64.dmi
│ │ │ │ ├── rifles_right_1.dmi
│ │ │ │ ├── rifles_right_64.dmi
│ │ │ │ ├── shotguns_left_1.dmi
│ │ │ │ ├── shotguns_right_1.dmi
│ │ │ │ ├── special_left_1.dmi
│ │ │ │ ├── special_left_64.dmi
│ │ │ │ ├── special_right_1.dmi
│ │ │ │ ├── special_right_64.dmi
│ │ │ │ ├── submachineguns_left_1.dmi
│ │ │ │ ├── submachineguns_left_64.dmi
│ │ │ │ ├── submachineguns_right_1.dmi
│ │ │ │ └── submachineguns_right_64.dmi
│ │ │ ├── items/
│ │ │ │ ├── animals_left.dmi
│ │ │ │ ├── animals_right.dmi
│ │ │ │ ├── bodyparts_left.dmi
│ │ │ │ ├── bodyparts_right.dmi
│ │ │ │ ├── books_left.dmi
│ │ │ │ ├── books_right.dmi
│ │ │ │ ├── civilian_left.dmi
│ │ │ │ ├── civilian_right.dmi
│ │ │ │ ├── containers_left.dmi
│ │ │ │ ├── containers_right.dmi
│ │ │ │ ├── drinks_left.dmi
│ │ │ │ ├── drinks_lefthand.dmi
│ │ │ │ ├── drinks_right.dmi
│ │ │ │ ├── drinks_righthand.dmi
│ │ │ │ ├── food_left.dmi
│ │ │ │ ├── food_right.dmi
│ │ │ │ ├── instruments_left.dmi
│ │ │ │ ├── instruments_right.dmi
│ │ │ │ ├── items_left.dmi
│ │ │ │ ├── items_right.dmi
│ │ │ │ ├── janitor_left.dmi
│ │ │ │ ├── janitor_right.dmi
│ │ │ │ ├── large_flag_left.dmi
│ │ │ │ ├── large_flag_right.dmi
│ │ │ │ ├── spray_left.dmi
│ │ │ │ ├── spray_right.dmi
│ │ │ │ ├── stacks_left.dmi
│ │ │ │ ├── stacks_right.dmi
│ │ │ │ ├── toys_left.dmi
│ │ │ │ └── toys_right.dmi
│ │ │ └── weapons/
│ │ │ ├── ammo_left.dmi
│ │ │ ├── ammo_right.dmi
│ │ │ ├── explosives_left.dmi
│ │ │ ├── explosives_right.dmi
│ │ │ ├── grenades_left.dmi
│ │ │ ├── grenades_right.dmi
│ │ │ ├── melee_left.dmi
│ │ │ ├── melee_right.dmi
│ │ │ ├── twohanded_left.dmi
│ │ │ ├── twohanded_right.dmi
│ │ │ ├── vali_left.dmi
│ │ │ ├── vali_right.dmi
│ │ │ ├── weapon64_left.dmi
│ │ │ └── weapon64_right.dmi
│ │ ├── instruments_back.dmi
│ │ ├── items_back_64.dmi
│ │ ├── items_suit_slot_64.dmi
│ │ ├── landmarks.dmi
│ │ ├── limb_mask.dmi
│ │ ├── map_backgrounds.dmi
│ │ ├── mob.dmi
│ │ ├── modular/
│ │ │ ├── badge/
│ │ │ │ ├── V.dmi
│ │ │ │ ├── circle.dmi
│ │ │ │ ├── circle2.dmi
│ │ │ │ ├── lambda.dmi
│ │ │ │ ├── shield.dmi
│ │ │ │ ├── square.dmi
│ │ │ │ └── triangle.dmi
│ │ │ ├── capes.dmi
│ │ │ ├── capes_highlight.dmi
│ │ │ ├── marine_uniform.dmi
│ │ │ ├── mark_one/
│ │ │ │ ├── assault.dmi
│ │ │ │ ├── eod.dmi
│ │ │ │ ├── eva.dmi
│ │ │ │ ├── helljumper.dmi
│ │ │ │ ├── infantry.dmi
│ │ │ │ ├── mjolnir.dmi
│ │ │ │ ├── ranger.dmi
│ │ │ │ ├── scout.dmi
│ │ │ │ ├── skirmisher.dmi
│ │ │ │ └── trooper.dmi
│ │ │ ├── mark_two/
│ │ │ │ ├── assault.dmi
│ │ │ │ ├── eod.dmi
│ │ │ │ ├── eva.dmi
│ │ │ │ ├── gugnir.dmi
│ │ │ │ ├── helljumper.dmi
│ │ │ │ ├── infantry.dmi
│ │ │ │ ├── mjolnir_open.dmi
│ │ │ │ ├── ranger.dmi
│ │ │ │ ├── scout.dmi
│ │ │ │ ├── skirmisher.dmi
│ │ │ │ ├── traditional.dmi
│ │ │ │ └── trooper.dmi
│ │ │ ├── modular_armor.dmi
│ │ │ ├── modular_armor_modules.dmi
│ │ │ ├── modular_helmet_storage.dmi
│ │ │ ├── robot_armor.dmi
│ │ │ ├── shoulder_gun.dmi
│ │ │ ├── som_armor.dmi
│ │ │ ├── som_helmets.dmi
│ │ │ ├── style_mob.dmi
│ │ │ ├── syndicate_hardsuits.dmi
│ │ │ ├── tdf_armor.dmi
│ │ │ ├── tdf_helmets.dmi
│ │ │ ├── visors.dmi
│ │ │ ├── vsd_hardsuit.dmi
│ │ │ └── xenonauten.dmi
│ │ ├── monkey.dmi
│ │ ├── order_icons.dmi
│ │ ├── pets.dmi
│ │ ├── psionic_icons.dmi
│ │ ├── radial.dmi
│ │ ├── robots.dmi
│ │ ├── screen/
│ │ │ ├── alien.dmi
│ │ │ ├── arrows.dmi
│ │ │ ├── clockwork.dmi
│ │ │ ├── full/
│ │ │ │ ├── animated.dmi
│ │ │ │ ├── damage.dmi
│ │ │ │ ├── impaired.dmi
│ │ │ │ ├── machine.dmi
│ │ │ │ ├── misc.dmi
│ │ │ │ ├── pain.dmi
│ │ │ │ └── particle_flash.dmi
│ │ │ ├── generic.dmi
│ │ │ ├── glass.dmi
│ │ │ ├── health.dmi
│ │ │ ├── holo.dmi
│ │ │ ├── midnight.dmi
│ │ │ ├── minimalist.dmi
│ │ │ ├── operative.dmi
│ │ │ ├── plasmafire.dmi
│ │ │ ├── retro.dmi
│ │ │ ├── slimecore.dmi
│ │ │ ├── white.dmi
│ │ │ └── zone_sel.dmi
│ │ ├── screen_ai.dmi
│ │ ├── screen_alert.dmi
│ │ ├── screen_ghost.dmi
│ │ ├── species/
│ │ │ ├── moth/
│ │ │ │ └── wings.dmi
│ │ │ └── robot/
│ │ │ ├── backpack.dmi
│ │ │ ├── glasses.dmi
│ │ │ ├── glasses_alpharii.dmi
│ │ │ ├── glasses_bravada.dmi
│ │ │ ├── glasses_charlit.dmi
│ │ │ └── glasses_deltad.dmi
│ │ ├── suit_slot.dmi
│ │ ├── talk.dmi
│ │ ├── telegraphing/
│ │ │ ├── telegraph.dmi
│ │ │ ├── telegraph_96x96.dmi
│ │ │ └── telegraph_holographic.dmi
│ │ └── ties.dmi
│ ├── obj/
│ │ ├── aibots.dmi
│ │ ├── airlock_machines.dmi
│ │ ├── alien_autopsy.dmi
│ │ ├── armored/
│ │ │ ├── 1x1/
│ │ │ │ ├── tinytank.dmi
│ │ │ │ └── tinytank_gun.dmi
│ │ │ ├── 2x2/
│ │ │ │ ├── icc_lvrt.dmi
│ │ │ │ ├── icc_lvrt_damage.dmi
│ │ │ │ ├── icc_lvrt_gun.dmi
│ │ │ │ └── medium_vehicles.dmi
│ │ │ ├── 2x3/
│ │ │ │ ├── apc.dmi
│ │ │ │ ├── apc_damage_overlay.dmi
│ │ │ │ └── apc_interior.dmi
│ │ │ ├── 3x3/
│ │ │ │ ├── apc.dmi
│ │ │ │ ├── apc_damage_overlay.dmi
│ │ │ │ ├── apc_interior.dmi
│ │ │ │ ├── tank.dmi
│ │ │ │ ├── tank_damage.dmi
│ │ │ │ ├── tank_gun.dmi
│ │ │ │ └── tank_interior.dmi
│ │ │ ├── 3x4/
│ │ │ │ ├── som_ammo_rack.dmi
│ │ │ │ ├── som_breech.dmi
│ │ │ │ ├── som_interior_props.dmi
│ │ │ │ ├── som_interior_small_props.dmi
│ │ │ │ ├── som_tank.dmi
│ │ │ │ ├── som_tank_gun.dmi
│ │ │ │ ├── som_tank_interior.dmi
│ │ │ │ └── tank_damage.dmi
│ │ │ └── hardpoint_modules.dmi
│ │ ├── artefacts.dmi
│ │ ├── assemblies/
│ │ │ └── new_assemblies.dmi
│ │ ├── atmospherics/
│ │ │ ├── components/
│ │ │ │ ├── binary_devices.dmi
│ │ │ │ ├── trinary_devices.dmi
│ │ │ │ └── unary_devices.dmi
│ │ │ └── pipes/
│ │ │ ├── he-junction.dmi
│ │ │ ├── he-manifold.dmi
│ │ │ ├── he-simple.dmi
│ │ │ ├── manifold.dmi
│ │ │ ├── pipe_item.dmi
│ │ │ ├── pressure_tank.dmi
│ │ │ └── simple.dmi
│ │ ├── bodybag.dmi
│ │ ├── chairs_wide.dmi
│ │ ├── clothing/
│ │ │ ├── accessories.dmi
│ │ │ ├── belts.dmi
│ │ │ ├── boxing.dmi
│ │ │ ├── glasses.dmi
│ │ │ ├── gloves.dmi
│ │ │ ├── hats.dmi
│ │ │ ├── headwear/
│ │ │ │ ├── ert_headwear.dmi
│ │ │ │ ├── hats.dmi
│ │ │ │ ├── marine_hats.dmi
│ │ │ │ ├── marine_helmets.dmi
│ │ │ │ └── space_suit_helmets.dmi
│ │ │ ├── masks.dmi
│ │ │ ├── pouches.dmi
│ │ │ ├── shoes.dmi
│ │ │ ├── suits/
│ │ │ │ ├── ert_suits.dmi
│ │ │ │ ├── marine_armor.dmi
│ │ │ │ ├── marine_suits.dmi
│ │ │ │ ├── space_suits.dmi
│ │ │ │ └── suits.dmi
│ │ │ ├── ties.dmi
│ │ │ ├── ties_overlay.dmi
│ │ │ └── uniforms/
│ │ │ ├── ert_uniforms.dmi
│ │ │ ├── marine_uniforms.dmi
│ │ │ └── uniforms.dmi
│ │ ├── cocoon.dmi
│ │ ├── contraband.dmi
│ │ ├── cryobag.dmi
│ │ ├── decals.dmi
│ │ ├── decals_arrow.dmi
│ │ ├── det.dmi
│ │ ├── device.dmi
│ │ ├── doors/
│ │ │ ├── 1x2blast_hor.dmi
│ │ │ ├── 1x2blast_vert.dmi
│ │ │ ├── 1x4blast_hor.dmi
│ │ │ ├── 1x4blast_hor_secure.dmi
│ │ │ ├── 1x4blast_vert.dmi
│ │ │ ├── 1x4blast_vert_secure.dmi
│ │ │ ├── Door1.dmi
│ │ │ ├── Door2x1_secure.dmi
│ │ │ ├── Door2x1_secure2.dmi
│ │ │ ├── Door2x1_secure2_glass.dmi
│ │ │ ├── Door2x1command.dmi
│ │ │ ├── Door2x1engine.dmi
│ │ │ ├── Door2x1glass.dmi
│ │ │ ├── Door2x1medbay.dmi
│ │ │ ├── Door2x1research.dmi
│ │ │ ├── Door2x1security.dmi
│ │ │ ├── DoorHazard.dmi
│ │ │ ├── DoorHazard2x1.dmi
│ │ │ ├── Door_secure.dmi
│ │ │ ├── Dooratmo.dmi
│ │ │ ├── Dooratmoglass.dmi
│ │ │ ├── Doorcom.dmi
│ │ │ ├── Doorcomglass.dmi
│ │ │ ├── Doordiamond.dmi
│ │ │ ├── Doorele.dmi
│ │ │ ├── Dooreng.dmi
│ │ │ ├── Doorengglass.dmi
│ │ │ ├── Doorext.dmi
│ │ │ ├── Doorf.dmi
│ │ │ ├── Doorfire.dmi
│ │ │ ├── Doorfreezer.dmi
│ │ │ ├── Doorglass.dmi
│ │ │ ├── Doorgold.dmi
│ │ │ ├── Doorhatchele.dmi
│ │ │ ├── Doorhatchmaint2.dmi
│ │ │ ├── Doormaint.dmi
│ │ │ ├── Doormining.dmi
│ │ │ ├── Doorminingglass.dmi
│ │ │ ├── Doorphoron.dmi
│ │ │ ├── Doorsand.dmi
│ │ │ ├── Doorsec.dmi
│ │ │ ├── Doorsecglass.dmi
│ │ │ ├── Doorsilver.dmi
│ │ │ ├── Dooruranium.dmi
│ │ │ ├── door_assembly.dmi
│ │ │ ├── door_assembly2x1.dmi
│ │ │ ├── door_fire2.dmi
│ │ │ ├── door_marines.dmi
│ │ │ ├── doorint.dmi
│ │ │ ├── doormed.dmi
│ │ │ ├── doormedglass.dmi
│ │ │ ├── doormorgue.dmi
│ │ │ ├── doorresearch.dmi
│ │ │ ├── doorresearchglass.dmi
│ │ │ ├── doorsci.dmi
│ │ │ ├── doorsciglass.dmi
│ │ │ ├── edge_Doorfire.dmi
│ │ │ ├── hightechsecurity.dmi
│ │ │ ├── hybrisa/
│ │ │ │ ├── hybrisa_2x1generic.dmi
│ │ │ │ ├── hybrisa_2x1generic_solid.dmi
│ │ │ │ ├── hybrisa_2x1medidoor.dmi
│ │ │ │ ├── hybrisa_2x1medidoor_solid.dmi
│ │ │ │ ├── hybrisa_2x1personaldoor.dmi
│ │ │ │ ├── hybrisa_2x1personaldoor_glass.dmi
│ │ │ │ ├── hybrisa_2x1personaldoor_glass_white.dmi
│ │ │ │ ├── hybrisa_2x1personaldoor_white.dmi
│ │ │ │ ├── hybrisa_generic.dmi
│ │ │ │ ├── hybrisa_generic_glass.dmi
│ │ │ │ ├── hybrisa_medidoor.dmi
│ │ │ │ ├── hybrisa_medidoor_glass.dmi
│ │ │ │ ├── hybrisa_personaldoor.dmi
│ │ │ │ ├── hybrisa_personaldoor_glass.dmi
│ │ │ │ ├── hybrisa_personaldoor_glass_white.dmi
│ │ │ │ └── hybrisa_personaldoor_white.dmi
│ │ │ ├── icecolony.dmi
│ │ │ ├── liftdoor.dmi
│ │ │ ├── mainship/
│ │ │ │ ├── 2x1almayerdoor.dmi
│ │ │ │ ├── 2x1almayerdoor_glass.dmi
│ │ │ │ ├── 2x1comdoor.dmi
│ │ │ │ ├── 2x1engidoor.dmi
│ │ │ │ ├── 2x1engidoor_glass.dmi
│ │ │ │ ├── 2x1generic.dmi
│ │ │ │ ├── 2x1maintdoor.dmi
│ │ │ │ ├── 2x1medidoor.dmi
│ │ │ │ ├── 2x1personaldoor.dmi
│ │ │ │ ├── 2x1personaldoor_glass.dmi
│ │ │ │ ├── 2x1prepdoor.dmi
│ │ │ │ ├── 2x1prepdoor_alpha.dmi
│ │ │ │ ├── 2x1prepdoor_bravo.dmi
│ │ │ │ ├── 2x1prepdoor_charlie.dmi
│ │ │ │ ├── 2x1prepdoor_delta.dmi
│ │ │ │ ├── 2x1secdoor.dmi
│ │ │ │ ├── 2x1secdoor_glass.dmi
│ │ │ │ ├── blastdoors_shutters.dmi
│ │ │ │ ├── comdoor.dmi
│ │ │ │ ├── door1.dmi
│ │ │ │ ├── dropship1_cargo.dmi
│ │ │ │ ├── dropship1_pilot.dmi
│ │ │ │ ├── dropship1_side.dmi
│ │ │ │ ├── dropship2_cargo.dmi
│ │ │ │ ├── dropship2_pilot.dmi
│ │ │ │ ├── dropship2_side.dmi
│ │ │ │ ├── engidoor.dmi
│ │ │ │ ├── engidoor_glass.dmi
│ │ │ │ ├── maintdoor.dmi
│ │ │ │ ├── medidoor.dmi
│ │ │ │ ├── medidoor_glass.dmi
│ │ │ │ ├── personaldoor.dmi
│ │ │ │ ├── personaldoor_glass.dmi
│ │ │ │ ├── pod_doors.dmi
│ │ │ │ ├── prepdoor.dmi
│ │ │ │ ├── prepdoor_alpha.dmi
│ │ │ │ ├── prepdoor_bravo.dmi
│ │ │ │ ├── prepdoor_charlie.dmi
│ │ │ │ ├── prepdoor_delta.dmi
│ │ │ │ ├── purinadoor.dmi
│ │ │ │ ├── secdoor.dmi
│ │ │ │ ├── secdoor_glass.dmi
│ │ │ │ └── securedoor.dmi
│ │ │ ├── mineral_doors.dmi
│ │ │ ├── overlays.dmi
│ │ │ ├── prison/
│ │ │ │ ├── 4x1_elevator.dmi
│ │ │ │ ├── 4x1_elevator_access.dmi
│ │ │ │ └── celldoor.dmi
│ │ │ ├── railing.dmi
│ │ │ ├── rapid_pdoor.dmi
│ │ │ ├── vault.dmi
│ │ │ └── windoor.dmi
│ │ ├── drinks/
│ │ │ ├── bottles.dmi
│ │ │ ├── boxes.dmi
│ │ │ ├── coffee.dmi
│ │ │ ├── colo.dmi
│ │ │ ├── drink_effects.dmi
│ │ │ ├── drinks.dmi
│ │ │ ├── mixed_drinks.dmi
│ │ │ ├── shakes.dmi
│ │ │ ├── shot_glasses.dmi
│ │ │ └── soda.dmi
│ │ ├── elevator_strut.dmi
│ │ ├── factory/
│ │ │ ├── factory_machines.dmi
│ │ │ └── factoryparts.dmi
│ │ ├── flora/
│ │ │ ├── ausflora.dmi
│ │ │ ├── crystals.dmi
│ │ │ ├── dam.dmi
│ │ │ ├── deadtrees.dmi
│ │ │ ├── desert_flora.dmi
│ │ │ ├── joshuatree.dmi
│ │ │ ├── jungleflora.dmi
│ │ │ ├── jungletrees.dmi
│ │ │ ├── jungletreesmall.dmi
│ │ │ ├── largejungleflora.dmi
│ │ │ ├── pinetrees.dmi
│ │ │ ├── plants.dmi
│ │ │ ├── rock_large.dmi
│ │ │ ├── rocks.dmi
│ │ │ ├── rocks2.dmi
│ │ │ ├── smooth/
│ │ │ │ ├── grass_decal.dmi
│ │ │ │ └── tall_grass.dmi
│ │ │ ├── snowflora.dmi
│ │ │ ├── tall_trees.dmi
│ │ │ └── tallgrass.dmi
│ │ ├── food/
│ │ │ ├── burgerbread.dmi
│ │ │ ├── canned.dmi
│ │ │ ├── cartridges.dmi
│ │ │ ├── containers.dmi
│ │ │ ├── donuts.dmi
│ │ │ ├── egg.dmi
│ │ │ ├── food.dmi
│ │ │ ├── food_ingredients.dmi
│ │ │ ├── frozen_treats.dmi
│ │ │ ├── lizard.dmi
│ │ │ ├── lollipop.dmi
│ │ │ ├── martian.dmi
│ │ │ ├── meat.dmi
│ │ │ ├── mexican.dmi
│ │ │ ├── moth.dmi
│ │ │ ├── piecake.dmi
│ │ │ ├── pizza.dmi
│ │ │ ├── slimecookies.dmi
│ │ │ ├── soupsalad.dmi
│ │ │ └── spaghetti.dmi
│ │ ├── gateway.dmi
│ │ ├── gravity_generator.dmi
│ │ ├── inflatable.dmi
│ │ ├── items/
│ │ │ ├── ammo/
│ │ │ │ ├── artillery.dmi
│ │ │ │ ├── box.dmi
│ │ │ │ ├── energy.dmi
│ │ │ │ ├── flamer.dmi
│ │ │ │ ├── greyscale.dmi
│ │ │ │ ├── handful.dmi
│ │ │ │ ├── machinegun.dmi
│ │ │ │ ├── misc.dmi
│ │ │ │ ├── packet.dmi
│ │ │ │ ├── pistol.dmi
│ │ │ │ ├── powerpack.dmi
│ │ │ │ ├── revolver.dmi
│ │ │ │ ├── rifle.dmi
│ │ │ │ ├── rocket.dmi
│ │ │ │ ├── sentry.dmi
│ │ │ │ ├── shotgun.dmi
│ │ │ │ ├── sniper.dmi
│ │ │ │ ├── submachinegun.dmi
│ │ │ │ └── tank.dmi
│ │ │ ├── ashtray.dmi
│ │ │ ├── assemblies.dmi
│ │ │ ├── beacon.dmi
│ │ │ ├── bedsheets.dmi
│ │ │ ├── binoculars.dmi
│ │ │ ├── bloodpack.dmi
│ │ │ ├── books.dmi
│ │ │ ├── candle.dmi
│ │ │ ├── canned.dmi
│ │ │ ├── capsules.dmi
│ │ │ ├── card.dmi
│ │ │ ├── casings.dmi
│ │ │ ├── chemistry.dmi
│ │ │ ├── cigarettes.dmi
│ │ │ ├── circuitboards.dmi
│ │ │ ├── containers.dmi
│ │ │ ├── cosmetics.dmi
│ │ │ ├── crayons.dmi
│ │ │ ├── defibrillator.dmi
│ │ │ ├── dice.dmi
│ │ │ ├── disk.dmi
│ │ │ ├── drinks.dmi
│ │ │ ├── fishing.dmi
│ │ │ ├── flags/
│ │ │ │ ├── plantable_flag.dmi
│ │ │ │ └── plantable_flag_large.dmi
│ │ │ ├── food/
│ │ │ │ ├── bread.dmi
│ │ │ │ ├── burgers.dmi
│ │ │ │ ├── candy.dmi
│ │ │ │ ├── cheeseandfries.dmi
│ │ │ │ ├── condiment.dmi
│ │ │ │ ├── confectionary.dmi
│ │ │ │ ├── donuts.dmi
│ │ │ │ ├── food.dmi
│ │ │ │ ├── food_ingredients.dmi
│ │ │ │ ├── frozen_treats.dmi
│ │ │ │ ├── meat.dmi
│ │ │ │ ├── mexican.dmi
│ │ │ │ ├── mre.dmi
│ │ │ │ ├── packaged.dmi
│ │ │ │ ├── piecake.dmi
│ │ │ │ ├── pizzaspaghetti.dmi
│ │ │ │ └── soupsalad.dmi
│ │ │ ├── fuel_cell.dmi
│ │ │ ├── fulton.dmi
│ │ │ ├── fulton_balloon.dmi
│ │ │ ├── grenade.dmi
│ │ │ ├── guns/
│ │ │ │ ├── attachments/
│ │ │ │ │ ├── flamer.dmi
│ │ │ │ │ ├── gun.dmi
│ │ │ │ │ ├── muzzle.dmi
│ │ │ │ │ ├── rail.dmi
│ │ │ │ │ ├── scope.dmi
│ │ │ │ │ ├── scope_64.dmi
│ │ │ │ │ ├── stock.dmi
│ │ │ │ │ ├── stock_64.dmi
│ │ │ │ │ └── underbarrel.dmi
│ │ │ │ ├── energy.dmi
│ │ │ │ ├── energy64.dmi
│ │ │ │ ├── machineguns.dmi
│ │ │ │ ├── machineguns64.dmi
│ │ │ │ ├── marksman.dmi
│ │ │ │ ├── marksman64.dmi
│ │ │ │ ├── pistols.dmi
│ │ │ │ ├── pistols64.dmi
│ │ │ │ ├── plasma64.dmi
│ │ │ │ ├── rifles.dmi
│ │ │ │ ├── rifles64.dmi
│ │ │ │ ├── shotguns.dmi
│ │ │ │ ├── shotguns64.dmi
│ │ │ │ ├── special.dmi
│ │ │ │ ├── special64.dmi
│ │ │ │ ├── submachineguns.dmi
│ │ │ │ └── submachineguns64.dmi
│ │ │ ├── harvest.dmi
│ │ │ ├── implants.dmi
│ │ │ ├── items.dmi
│ │ │ ├── items_mini.dmi
│ │ │ ├── jetpack.dmi
│ │ │ ├── kitchen_tools.dmi
│ │ │ ├── kotahi_cards.dmi
│ │ │ ├── lollipop.dmi
│ │ │ ├── mines.dmi
│ │ │ ├── npc_beacon.dmi
│ │ │ ├── organs.dmi
│ │ │ ├── paper.dmi
│ │ │ ├── pda.dmi
│ │ │ ├── pinpointer.dmi
│ │ │ ├── pipe_item.dmi
│ │ │ ├── playing_cards.dmi
│ │ │ ├── projectiles.dmi
│ │ │ ├── quikdeploy_cade.dmi
│ │ │ ├── radio.dmi
│ │ │ ├── robot_parts.dmi
│ │ │ ├── seeds.dmi
│ │ │ ├── shards.dmi
│ │ │ ├── spray.dmi
│ │ │ ├── stock_parts.dmi
│ │ │ ├── storage/
│ │ │ │ ├── backholster.dmi
│ │ │ │ ├── backpack.dmi
│ │ │ │ ├── bag.dmi
│ │ │ │ ├── box.dmi
│ │ │ │ ├── briefcase.dmi
│ │ │ │ ├── duffelbag.dmi
│ │ │ │ ├── firstaid.dmi
│ │ │ │ ├── holster.dmi
│ │ │ │ ├── marine_box.dmi
│ │ │ │ ├── misc.dmi
│ │ │ │ ├── storage_48.dmi
│ │ │ │ ├── storage_boxes.dmi
│ │ │ │ ├── vialbox.dmi
│ │ │ │ └── wallet.dmi
│ │ │ ├── surgery_tools.dmi
│ │ │ ├── syringe.dmi
│ │ │ ├── tank.dmi
│ │ │ ├── tools.dmi
│ │ │ ├── toy.dmi
│ │ │ ├── trash.dmi
│ │ │ └── weapons/
│ │ │ ├── 64x64.dmi
│ │ │ ├── batons.dmi
│ │ │ ├── civilian.dmi
│ │ │ ├── energy.dmi
│ │ │ ├── knives.dmi
│ │ │ ├── misc.dmi
│ │ │ ├── shield.dmi
│ │ │ ├── swords.dmi
│ │ │ ├── throwing.dmi
│ │ │ ├── twohanded.dmi
│ │ │ └── vali.dmi
│ │ ├── iv_drip.dmi
│ │ ├── janitor.dmi
│ │ ├── kitchen.dmi
│ │ ├── landing_signs.dmi
│ │ ├── landinglights.dmi
│ │ ├── lighting.dmi
│ │ ├── machines/
│ │ │ ├── air_alarm.dmi
│ │ │ ├── airlock_machines.dmi
│ │ │ ├── apc.dmi
│ │ │ ├── artillery.dmi
│ │ │ ├── atmos.dmi
│ │ │ ├── bepis.dmi
│ │ │ ├── biogenerator.dmi
│ │ │ ├── bluespacedrive.dmi
│ │ │ ├── buttons.dmi
│ │ │ ├── chemical_machines.dmi
│ │ │ ├── cloning.dmi
│ │ │ ├── computer.dmi
│ │ │ ├── computer3.dmi
│ │ │ ├── cryogenics.dmi
│ │ │ ├── cryogenics2.dmi
│ │ │ ├── deployable/
│ │ │ │ ├── agls.dmi
│ │ │ │ ├── at36.dmi
│ │ │ │ ├── at45.dmi
│ │ │ │ ├── atr22.dmi
│ │ │ │ ├── clf_heavyrifle.dmi
│ │ │ │ ├── fk88.dmi
│ │ │ │ ├── heavy_laser.dmi
│ │ │ │ ├── heavy_smartgun.dmi
│ │ │ │ ├── howitzer.dmi
│ │ │ │ ├── mg08.dmi
│ │ │ │ ├── minigun.dmi
│ │ │ │ ├── mortar.dmi
│ │ │ │ ├── mounted_machinegun.dmi
│ │ │ │ └── sentry/
│ │ │ │ ├── build_a_sentry.dmi
│ │ │ │ ├── cope.dmi
│ │ │ │ ├── flamer.dmi
│ │ │ │ ├── laser.dmi
│ │ │ │ ├── mini.dmi
│ │ │ │ ├── sentry.dmi
│ │ │ │ ├── shotgun.dmi
│ │ │ │ ├── sniper.dmi
│ │ │ │ └── tesla.dmi
│ │ │ ├── drone_fab.dmi
│ │ │ ├── elevatorpanel.dmi
│ │ │ ├── field_generator.dmi
│ │ │ ├── fire_alarm.dmi
│ │ │ ├── floodlight.dmi
│ │ │ ├── fob.dmi
│ │ │ ├── fusion_engine.dmi
│ │ │ ├── holosign.dmi
│ │ │ ├── hydroponics.dmi
│ │ │ ├── implantchair.dmi
│ │ │ ├── kitchenmachines.dmi
│ │ │ ├── library.dmi
│ │ │ ├── lift_indicator.dmi
│ │ │ ├── mining_machines.dmi
│ │ │ ├── monitors.dmi
│ │ │ ├── radio.dmi
│ │ │ ├── research.dmi
│ │ │ ├── scoreboard.dmi
│ │ │ ├── self_destruct.dmi
│ │ │ ├── shielding.dmi
│ │ │ ├── suit_cycler.dmi
│ │ │ ├── suitstorage.dmi
│ │ │ ├── telecomms.dmi
│ │ │ ├── terminals.dmi
│ │ │ ├── vending.dmi
│ │ │ ├── virology.dmi
│ │ │ └── washing_machine.dmi
│ │ ├── magic.dmi
│ │ ├── meter.dmi
│ │ ├── metnal_objects.dmi
│ │ ├── mining.dmi
│ │ ├── mining_drill.dmi
│ │ ├── monitors.dmi
│ │ ├── motorbike_sidecar.dmi
│ │ ├── musician.dmi
│ │ ├── objects.dmi
│ │ ├── pipes/
│ │ │ └── disposal.dmi
│ │ ├── pipes.dmi
│ │ ├── podwindows.dmi
│ │ ├── policetape.dmi
│ │ ├── power.dmi
│ │ ├── power_cond/
│ │ │ ├── layer_cable.dmi
│ │ │ └── pipe_cleaner.dmi
│ │ ├── powerloader.dmi
│ │ ├── puzzle.dmi
│ │ ├── reagentfillings.dmi
│ │ ├── reagents/
│ │ │ └── reagent_fillings.dmi
│ │ ├── recycling.dmi
│ │ ├── robotics.dmi
│ │ ├── rollerbed.dmi
│ │ ├── rune.dmi
│ │ ├── safety_signs.dmi
│ │ ├── safety_signs_arrow.dmi
│ │ ├── singularity.dmi
│ │ ├── smooth_objects/
│ │ │ ├── acid-hole.dmi
│ │ │ ├── black_table.dmi
│ │ │ ├── brokenfence.dmi
│ │ │ ├── brokenfence_dark.dmi
│ │ │ ├── catwalk.dmi
│ │ │ ├── cell_rwindow.dmi
│ │ │ ├── chigusa_window.dmi
│ │ │ ├── chigusa_window_frame.dmi
│ │ │ ├── cmwindow.dmi
│ │ │ ├── cmwindowframe.dmi
│ │ │ ├── col_rwindow.dmi
│ │ │ ├── col_rwindow_frame.dmi
│ │ │ ├── col_window.dmi
│ │ │ ├── col_window_frame.dmi
│ │ │ ├── dark_fence.dmi
│ │ │ ├── fancy_table.dmi
│ │ │ ├── fence.dmi
│ │ │ ├── foamwall.dmi
│ │ │ ├── girder.dmi
│ │ │ ├── girder_broke.dmi
│ │ │ ├── gray_window_frame.dmi
│ │ │ ├── grille.dmi
│ │ │ ├── junk_window.dmi
│ │ │ ├── junk_window_frame.dmi
│ │ │ ├── kutjevo_window_blue.dmi
│ │ │ ├── kutjevo_window_blue_reinforced.dmi
│ │ │ ├── kutjevo_window_frame.dmi
│ │ │ ├── kutjevo_window_orange.dmi
│ │ │ ├── kutjevo_window_orange_reinforced.dmi
│ │ │ ├── lattice.dmi
│ │ │ ├── mainship_table.dmi
│ │ │ ├── pool_table.dmi
│ │ │ ├── prison_rwindow.dmi
│ │ │ ├── prison_rwindow_frame.dmi
│ │ │ ├── prison_table.dmi
│ │ │ ├── prison_window_frame.dmi
│ │ │ ├── regular_window_frame.dmi
│ │ │ ├── req_table.dmi
│ │ │ ├── resin-door.dmi
│ │ │ ├── resin-wall.dmi
│ │ │ ├── rustic_table.dmi
│ │ │ ├── ship_gray_window.dmi
│ │ │ ├── ship_window.dmi
│ │ │ ├── ship_window_frame.dmi
│ │ │ ├── table_fabric.dmi
│ │ │ ├── table_regular.dmi
│ │ │ ├── table_reinforced.dmi
│ │ │ ├── urban_table_black.dmi
│ │ │ ├── urban_table_brown.dmi
│ │ │ ├── urban_table_gambling.dmi
│ │ │ ├── urban_table_gambling_black.dmi
│ │ │ ├── urban_window.dmi
│ │ │ ├── urban_window_frame.dmi
│ │ │ ├── warning_stripes.dmi
│ │ │ ├── weedwall.dmi
│ │ │ ├── weedwallrest.dmi
│ │ │ ├── weedwallsticky.dmi
│ │ │ ├── white_window_frame.dmi
│ │ │ ├── wood_regular.dmi
│ │ │ ├── wood_reinforced.dmi
│ │ │ ├── wood_table_reinforced.dmi
│ │ │ ├── wood_window_frame.dmi
│ │ │ └── wwindow.dmi
│ │ ├── smoothlattice.dmi
│ │ ├── stack_objects.dmi
│ │ ├── stationobjs.dmi
│ │ ├── status_display.dmi
│ │ ├── stock_parts.dmi
│ │ ├── structures/
│ │ │ ├── 4x1_elevator.dmi
│ │ │ ├── 64x64.dmi
│ │ │ ├── barricades/
│ │ │ │ ├── barbedwire.dmi
│ │ │ │ ├── concrete.dmi
│ │ │ │ ├── folding.dmi
│ │ │ │ ├── metal.dmi
│ │ │ │ ├── misc.dmi
│ │ │ │ ├── plasteel.dmi
│ │ │ │ ├── sandbags.dmi
│ │ │ │ ├── snow.dmi
│ │ │ │ └── upgrades.dmi
│ │ │ ├── barsigns.dmi
│ │ │ ├── benchpress.dmi
│ │ │ ├── big_droppod.dmi
│ │ │ ├── boulder_largedark.dmi
│ │ │ ├── boulder_small.dmi
│ │ │ ├── boulder_widedark.dmi
│ │ │ ├── campaign/
│ │ │ │ ├── ASAT.dmi
│ │ │ │ ├── blockers.dmi
│ │ │ │ ├── campaign_64.dmi
│ │ │ │ ├── campaign_big.dmi
│ │ │ │ ├── campaign_bigger.dmi
│ │ │ │ └── tall_structures.dmi
│ │ │ ├── campaign_structures.dmi
│ │ │ ├── cas_cockpit.dmi
│ │ │ ├── cave_decor.dmi
│ │ │ ├── closet.dmi
│ │ │ ├── coagulation_arm.dmi
│ │ │ ├── contain.dmi
│ │ │ ├── containHorizont.dmi
│ │ │ ├── crates.dmi
│ │ │ ├── curtain.dmi
│ │ │ ├── droppod.dmi
│ │ │ ├── dropship_structures.dmi
│ │ │ ├── fence.dmi
│ │ │ ├── fence_ew.dmi
│ │ │ ├── fence_ns.dmi
│ │ │ ├── gorg_window_frames.dmi
│ │ │ ├── gorg_windows.dmi
│ │ │ ├── handrail.dmi
│ │ │ ├── jungle.dmi
│ │ │ ├── memorial.dmi
│ │ │ ├── misc.dmi
│ │ │ ├── pipe_multiple.dmi
│ │ │ ├── platforms.dmi
│ │ │ ├── prop/
│ │ │ │ ├── apc.dmi
│ │ │ │ ├── broken_apc.dmi
│ │ │ │ ├── concrete_planter.dmi
│ │ │ │ ├── dropship.dmi
│ │ │ │ ├── mainship.dmi
│ │ │ │ ├── mainship_64.dmi
│ │ │ │ ├── mainship_96.dmi
│ │ │ │ ├── mech.dmi
│ │ │ │ ├── somship.dmi
│ │ │ │ ├── tank_horizontal.dmi
│ │ │ │ ├── tank_vertical.dmi
│ │ │ │ ├── urban/
│ │ │ │ │ ├── 128x32_vehiclesexpanded.dmi
│ │ │ │ │ ├── 32x64_urbanbillboards.dmi
│ │ │ │ │ ├── 64x64_urbanrandomprops.dmi
│ │ │ │ │ ├── 64x96-urbanrandomprops.dmi
│ │ │ │ │ ├── containersextended.dmi
│ │ │ │ │ ├── crashedcars.dmi
│ │ │ │ │ ├── engineerjockey.dmi
│ │ │ │ │ ├── supermart.dmi
│ │ │ │ │ ├── urban64x64_signs.dmi
│ │ │ │ │ ├── urban_lattice.dmi
│ │ │ │ │ ├── urbanengineerpillarangled.dmi
│ │ │ │ │ ├── urbanrandomprops.dmi
│ │ │ │ │ ├── urbanshutters.dmi
│ │ │ │ │ ├── urbantables.dmi
│ │ │ │ │ ├── urbanxenocryogenics.dmi
│ │ │ │ │ ├── urbanxenocryogenics2.dmi
│ │ │ │ │ └── vehiclesexpanded.dmi
│ │ │ │ └── urban_vehicles/
│ │ │ │ ├── 64x64_hybrisa_vehicles_boxvans.dmi
│ │ │ │ ├── 64x64_hybrisa_vehicles_colonycrawlers.dmi
│ │ │ │ ├── 64x64_hybrisa_vehicles_smalltrucks.dmi
│ │ │ │ ├── box_van_bluegrey.dmi
│ │ │ │ ├── box_van_hyperdyne.dmi
│ │ │ │ ├── box_van_kellandmining.dmi
│ │ │ │ ├── box_van_maintenanceblue.dmi
│ │ │ │ ├── box_van_pizza.dmi
│ │ │ │ ├── box_van_white.dmi
│ │ │ │ ├── meridian_black.dmi
│ │ │ │ ├── meridian_blue.dmi
│ │ │ │ ├── meridian_brown.dmi
│ │ │ │ ├── meridian_cop.dmi
│ │ │ │ ├── meridian_desatblue.dmi
│ │ │ │ ├── meridian_green.dmi
│ │ │ │ ├── meridian_lightblue.dmi
│ │ │ │ ├── meridian_orange.dmi
│ │ │ │ ├── meridian_pink.dmi
│ │ │ │ ├── meridian_purple.dmi
│ │ │ │ ├── meridian_red.dmi
│ │ │ │ ├── meridian_taxi.dmi
│ │ │ │ ├── meridian_turquoise.dmi
│ │ │ │ └── meridian_wy.dmi
│ │ │ ├── sensor.dmi
│ │ │ ├── stairs.dmi
│ │ │ ├── structures.dmi
│ │ │ ├── tables.dmi
│ │ │ ├── teleporter.dmi
│ │ │ ├── toolboxtrophy.dmi
│ │ │ ├── train.dmi
│ │ │ ├── waste_pipe.dmi
│ │ │ ├── window_frames.dmi
│ │ │ └── windows.dmi
│ │ ├── supplypods.dmi
│ │ ├── surgery.dmi
│ │ ├── terminals.dmi
│ │ ├── tg_vending_props.dmi
│ │ ├── tram/
│ │ │ ├── crossing_signal.dmi
│ │ │ ├── tram_controllers.dmi
│ │ │ ├── tram_display.dmi
│ │ │ ├── tram_indicator.dmi
│ │ │ ├── tram_rails.dmi
│ │ │ ├── tram_sensor.dmi
│ │ │ └── tram_structure.dmi
│ │ ├── unmanned_vehicles.dmi
│ │ ├── vehicles/
│ │ │ ├── 4x4.dmi
│ │ │ ├── 64x64.dmi
│ │ │ ├── big_bike.dmi
│ │ │ ├── hover_bike.dmi
│ │ │ ├── large_truck.dmi
│ │ │ └── vehicle_weapons.dmi
│ │ ├── vehicles.dmi
│ │ ├── wallframes.dmi
│ │ ├── watercloset.dmi
│ │ └── wizard.dmi
│ ├── testing/
│ │ └── greyscale_error.dmi
│ └── turf/
│ ├── alpha_128.dmi
│ ├── alpha_64.dmi
│ ├── area_corsat.dmi
│ ├── area_kutjevo.dmi
│ ├── area_mainship.dmi
│ ├── area_prison_v3_fiorina.dmi
│ ├── areas.dmi
│ ├── areas_station.dmi
│ ├── asphalt.dmi
│ ├── auto_shaledesaturated.dmi
│ ├── bigred.dmi
│ ├── cas.dmi
│ ├── catwalks.dmi
│ ├── cave.dmi
│ ├── cave_drought.dmi
│ ├── chigusa.dmi
│ ├── concrete.dmi
│ ├── dam_areas.dmi
│ ├── decals.dmi
│ ├── desert.dmi
│ ├── desertdam_map.dmi
│ ├── dirt.dmi
│ ├── dropship.dmi
│ ├── dropship2.dmi
│ ├── dropship4.dmi
│ ├── elevator.dmi
│ ├── engineership.dmi
│ ├── ert_shuttle.dmi
│ ├── escapepods.dmi
│ ├── floors/
│ │ ├── asphalt-regular.dmi
│ │ ├── asphalt-sunbleached.dmi
│ │ ├── basalt-dirt.dmi
│ │ ├── carpet.dmi
│ │ ├── carpet_black.dmi
│ │ ├── carpet_blue.dmi
│ │ ├── carpet_cyan.dmi
│ │ ├── carpet_green.dmi
│ │ ├── carpet_orange.dmi
│ │ ├── carpet_purple.dmi
│ │ ├── carpet_red.dmi
│ │ ├── carpet_royalblack.dmi
│ │ ├── cave-basalt.dmi
│ │ ├── chasms.dmi
│ │ ├── glass.dmi
│ │ ├── hybrisa_concrete.dmi
│ │ ├── jungle-border.dmi
│ │ ├── jungle-dirt-border.dmi
│ │ ├── junglechasm.dmi
│ │ ├── lava.dmi
│ │ ├── plasma_glass.dmi
│ │ ├── red-dirt.dmi
│ │ ├── reinf_glass.dmi
│ │ ├── reinf_plasma_glass.dmi
│ │ ├── river.dmi
│ │ └── river_desert.dmi
│ ├── floors.dmi
│ ├── geothermal.dmi
│ ├── ground_map.dmi
│ ├── hybrisafloors.dmi
│ ├── hybrisareas.dmi
│ ├── ice.dmi
│ ├── icewall.dmi
│ ├── icewalllight.dmi
│ ├── industrial.dmi
│ ├── jungle.dmi
│ ├── kutjevo_floor.dmi
│ ├── lava.dmi
│ ├── mainship.dmi
│ ├── mainshipwalls.dmi
│ ├── overlays.dmi
│ ├── prison.dmi
│ ├── rockwall.dmi
│ ├── roofs/
│ │ ├── roof_asphalt.dmi
│ │ ├── roof_asphalt_noborder.dmi
│ │ ├── roof_metal.dmi
│ │ ├── roof_rusty.dmi
│ │ ├── roof_sheet.dmi
│ │ ├── roof_sheet_noborder.dmi
│ │ └── roof_wood.dmi
│ ├── shuttle.dmi
│ ├── snow.dmi
│ ├── snow2.dmi
│ ├── space.dmi
│ ├── tram.dmi
│ ├── walls/
│ │ ├── adobe.dmi
│ │ ├── adobe_1.dmi
│ │ ├── adobe_2.dmi
│ │ ├── adobe_3.dmi
│ │ ├── basaltwall.dmi
│ │ ├── black_stone_walls.dmi
│ │ ├── bluefrostwall.dmi
│ │ ├── brick.dmi
│ │ ├── cave.dmi
│ │ ├── chigusa.dmi
│ │ ├── cult.dmi
│ │ ├── dark_col_wall.dmi
│ │ ├── darkfrostwall.dmi
│ │ ├── elevator_wall.dmi
│ │ ├── engineer_walls.dmi
│ │ ├── engineer_walls_turf.dmi
│ │ ├── frostwall.dmi
│ │ ├── gorg_prison_rwall.dmi
│ │ ├── gorg_prison_rwall_two.dmi
│ │ ├── gorg_prison_wall.dmi
│ │ ├── gorg_prison_wall_two.dmi
│ │ ├── gwall.dmi
│ │ ├── hybrisa_colony_walls.dmi
│ │ ├── jungle.dmi
│ │ ├── junglewall.dmi
│ │ ├── junkwall.dmi
│ │ ├── kutjevo_rwall.dmi
│ │ ├── kutjevo_wall.dmi
│ │ ├── lava_wall.dmi
│ │ ├── lvwall-phoron.dmi
│ │ ├── lvwall.dmi
│ │ ├── prison.dmi
│ │ ├── redwall.dmi
│ │ ├── regular_wall.dmi
│ │ ├── resin_bone_wall.dmi
│ │ ├── rwall.dmi
│ │ ├── siding.dmi
│ │ ├── siding_1.dmi
│ │ ├── siding_2.dmi
│ │ ├── siding_3.dmi
│ │ ├── siding_red.dmi
│ │ ├── siding_red_1.dmi
│ │ ├── siding_red_2.dmi
│ │ ├── siding_red_3.dmi
│ │ ├── snowwall.dmi
│ │ ├── strata_ice_wall.dmi
│ │ ├── sulaco.dmi
│ │ ├── testwall.dmi
│ │ ├── urban_wall_regular.dmi
│ │ ├── white_research_wall.dmi
│ │ ├── woodrwall.dmi
│ │ ├── woodwall.dmi
│ │ └── wwall.dmi
│ ├── walls.dmi
│ ├── whiskeyoutpost.dmi
│ ├── wood.dmi
│ └── wood_floor.dmi
├── interface/
│ ├── fonts/
│ │ ├── easvhs.dm
│ │ ├── f25_bank.dm
│ │ ├── fonts_datum.dm
│ │ ├── grand_9k.dm
│ │ ├── license.txt
│ │ ├── pixellari.dm
│ │ ├── spess_font.dm
│ │ ├── tiny_unicode.dm
│ │ └── vcr_osd_mono.dm
│ ├── interface.dm
│ ├── menu.dm
│ ├── skin.dmf
│ └── stylesheet.dm
├── sound/
│ ├── AI/
│ │ ├── ARES_Self_Destruct_10m_FULL.ogg
│ │ ├── ARES_Self_Destruct_5m_CANCELED.ogg
│ │ ├── aireport.ogg
│ │ ├── ares_online.ogg
│ │ ├── bioscan.ogg
│ │ ├── code_blue_elevated.ogg
│ │ ├── code_blue_lowered.ogg
│ │ ├── code_green.ogg
│ │ ├── code_red_elevated.ogg
│ │ ├── code_red_lowered.ogg
│ │ ├── commandreport.ogg
│ │ ├── distressbeacon.ogg
│ │ ├── distressreceived.ogg
│ │ ├── dropship_emergency.ogg
│ │ ├── evacuate.ogg
│ │ ├── evacuate_cancelled.ogg
│ │ ├── evacuation_complete.ogg
│ │ ├── evacuation_confirmed.ogg
│ │ ├── hijack.ogg
│ │ ├── poweroff.ogg
│ │ ├── poweron.ogg
│ │ ├── selfdestruct.ogg
│ │ └── selfdestruct_deactivated.ogg
│ ├── ambience/
│ │ ├── alarm4.ogg
│ │ ├── ambi_snow.ogg
│ │ ├── ambiatm1.ogg
│ │ ├── ambiatmos.ogg
│ │ ├── ambiatmos2.ogg
│ │ ├── ambicave.ogg
│ │ ├── ambicave2.ogg
│ │ ├── ambicha1.ogg
│ │ ├── ambicha2.ogg
│ │ ├── ambicha3.ogg
│ │ ├── ambicha4.ogg
│ │ ├── ambienthum.ogg
│ │ ├── ambigen1.ogg
│ │ ├── ambigen10.ogg
│ │ ├── ambigen11.ogg
│ │ ├── ambigen12.ogg
│ │ ├── ambigen13.ogg
│ │ ├── ambigen14.ogg
│ │ ├── ambigen2.ogg
│ │ ├── ambigen3.ogg
│ │ ├── ambigen4.ogg
│ │ ├── ambigen5.ogg
│ │ ├── ambigen6.ogg
│ │ ├── ambigen7.ogg
│ │ ├── ambigen8.ogg
│ │ ├── ambigen9.ogg
│ │ ├── ambilava1.ogg
│ │ ├── ambilava2.ogg
│ │ ├── ambilava3.ogg
│ │ ├── ambimalf.ogg
│ │ ├── ambimine.ogg
│ │ ├── ambimo1.ogg
│ │ ├── ambimo2.ogg
│ │ ├── ambisin1.ogg
│ │ ├── ambisin2.ogg
│ │ ├── ambisin3.ogg
│ │ ├── ambisin4.ogg
│ │ ├── ambispace.ogg
│ │ ├── ambitech.ogg
│ │ ├── ambitech2.ogg
│ │ ├── drip1.ogg
│ │ ├── drip2.ogg
│ │ ├── drip3.ogg
│ │ ├── drip3.ogg.ogg
│ │ ├── drip4.ogg
│ │ ├── drip5.ogg
│ │ ├── jungle_amb1.ogg
│ │ ├── river/
│ │ │ ├── stream_1.ogg
│ │ │ ├── stream_2.ogg
│ │ │ └── stream_3.ogg
│ │ ├── seag1.ogg
│ │ ├── seag2.ogg
│ │ ├── seag3.ogg
│ │ ├── shipambience.ogg
│ │ ├── shore.ogg
│ │ ├── signal.ogg
│ │ ├── tank_driving.ogg
│ │ ├── tank_driving_joke.ogg
│ │ ├── votestart.ogg
│ │ └── windambient.ogg
│ ├── bullets/
│ │ ├── acid_impact1.ogg
│ │ ├── bullet_armor1.ogg
│ │ ├── bullet_armor2.ogg
│ │ ├── bullet_armor3.ogg
│ │ ├── bullet_armor4.ogg
│ │ ├── bullet_impact1.ogg
│ │ ├── bullet_impact2.ogg
│ │ ├── bullet_impact3.ogg
│ │ ├── bullet_impact4.ogg
│ │ ├── bullet_impact5.ogg
│ │ ├── bullet_impact6.ogg
│ │ ├── bullet_impact7.ogg
│ │ ├── bullet_miss1.ogg
│ │ ├── bullet_miss2.ogg
│ │ ├── bullet_miss3.ogg
│ │ ├── bullet_miss4.ogg
│ │ ├── bullet_ricochet1.ogg
│ │ ├── bullet_ricochet2.ogg
│ │ ├── bullet_ricochet3.ogg
│ │ ├── bullet_ricochet4.ogg
│ │ ├── bullet_ricochet5.ogg
│ │ ├── bullet_ricochet6.ogg
│ │ ├── bullet_ricochet7.ogg
│ │ ├── bullet_ricochet8.ogg
│ │ ├── bulletcasing_bounce1.ogg
│ │ ├── bulletcasing_fall1.ogg
│ │ ├── bulletcasing_fall2.ogg
│ │ ├── bulletcasing_shotgun_fall1.ogg
│ │ ├── energy_impact1.ogg
│ │ ├── energy_miss1.ogg
│ │ ├── energy_ricochet1.ogg
│ │ ├── rocket_ricochet1.ogg
│ │ ├── rocket_ricochet2.ogg
│ │ ├── rocket_ricochet3.ogg
│ │ ├── spear_armor1.ogg
│ │ ├── spear_impact1.ogg
│ │ ├── spear_ricochet1.ogg
│ │ └── spear_ricochet2.ogg
│ ├── creatures/
│ │ └── bee.ogg
│ ├── credits.md
│ ├── effects/
│ │ ├── CIC_order.ogg
│ │ ├── EMPulse.ogg
│ │ ├── Glasshit.ogg
│ │ ├── Glasshit_old.ogg
│ │ ├── Heart Beat.ogg
│ │ ├── OB_incoming.ogg
│ │ ├── OB_warning_announce.ogg
│ │ ├── OB_warning_announce_novoiceover.ogg
│ │ ├── adminhelp.ogg
│ │ ├── air_release.ogg
│ │ ├── airhiss.ogg
│ │ ├── alert.ogg
│ │ ├── alien/
│ │ │ ├── behemoth/
│ │ │ │ ├── earth_pillar_destroyed.ogg
│ │ │ │ ├── earth_pillar_eating.ogg
│ │ │ │ ├── earth_pillar_hit_1.ogg
│ │ │ │ ├── earth_pillar_hit_2.ogg
│ │ │ │ ├── earth_pillar_hit_3.ogg
│ │ │ │ ├── earth_pillar_hit_4.ogg
│ │ │ │ ├── earth_pillar_hit_5.ogg
│ │ │ │ ├── earth_pillar_hit_6.ogg
│ │ │ │ ├── earth_pillar_rising.ogg
│ │ │ │ ├── landslide_enhanced_charge.ogg
│ │ │ │ ├── landslide_hit_mob.ogg
│ │ │ │ ├── landslide_roar.ogg
│ │ │ │ ├── primal_wrath_roar.ogg
│ │ │ │ ├── roll.ogg
│ │ │ │ ├── rumble.ogg
│ │ │ │ ├── seismic_fracture_explosion.ogg
│ │ │ │ └── stomp.ogg
│ │ │ ├── conqueror/
│ │ │ │ ├── domination_explosion.ogg
│ │ │ │ ├── domination_reappearance.ogg
│ │ │ │ ├── obliteration_activation.ogg
│ │ │ │ ├── obliteration_roar.ogg
│ │ │ │ ├── will_extra_1.ogg
│ │ │ │ ├── will_extra_2.ogg
│ │ │ │ ├── will_extra_3.ogg
│ │ │ │ ├── will_hook_1.ogg
│ │ │ │ ├── will_hook_2.ogg
│ │ │ │ ├── will_hook_3.ogg
│ │ │ │ ├── will_jab.ogg
│ │ │ │ ├── will_kick.ogg
│ │ │ │ ├── will_punch.ogg
│ │ │ │ ├── will_uppercut.ogg
│ │ │ │ └── will_uppercut_landing.ogg
│ │ │ ├── dragon/
│ │ │ │ ├── backhand_hit.ogg
│ │ │ │ ├── crytogensis_impact.ogg
│ │ │ │ ├── dragonbreath_start.ogg
│ │ │ │ ├── flying_flight.ogg
│ │ │ │ ├── flying_landing.ogg
│ │ │ │ ├── flying_progress.ogg
│ │ │ │ ├── lightning_impact.ogg
│ │ │ │ ├── tailswipe_hit.ogg
│ │ │ │ └── void_explosion.ogg
│ │ │ ├── egg_burst.ogg
│ │ │ ├── egg_move.ogg
│ │ │ ├── evolve_ready.ogg
│ │ │ ├── fireball.ogg
│ │ │ ├── firebeam.ogg
│ │ │ ├── footstep_charge1.ogg
│ │ │ ├── footstep_charge2.ogg
│ │ │ ├── footstep_charge3.ogg
│ │ │ ├── footstep_large1.ogg
│ │ │ ├── footstep_large2.ogg
│ │ │ ├── footstep_large3.ogg
│ │ │ ├── footstep_medium1.ogg
│ │ │ ├── footstep_medium2.ogg
│ │ │ ├── footstep_medium3.ogg
│ │ │ ├── king_beam_active.ogg
│ │ │ ├── king_beam_charge.ogg
│ │ │ ├── new_larva.ogg
│ │ │ ├── prepare.ogg
│ │ │ ├── recycler.ogg
│ │ │ ├── resin_break1.ogg
│ │ │ ├── resin_break2.ogg
│ │ │ ├── resin_build1.ogg
│ │ │ ├── resin_build2.ogg
│ │ │ ├── resin_build3.ogg
│ │ │ ├── resin_move1.ogg
│ │ │ ├── resin_move2.ogg
│ │ │ ├── tail_swipe1.ogg
│ │ │ ├── tail_swipe2.ogg
│ │ │ ├── tail_swipe3.ogg
│ │ │ ├── turret_death.ogg
│ │ │ ├── ventcrawl1.ogg
│ │ │ ├── ventcrawl2.ogg
│ │ │ ├── ventpass1.ogg
│ │ │ └── ventpass2.ogg
│ │ ├── angry_beep.ogg
│ │ ├── attackblob.ogg
│ │ ├── bamf.ogg
│ │ ├── bang.ogg
│ │ ├── barbed_wire_movement.ogg
│ │ ├── binoctarget.ogg
│ │ ├── blobattack.ogg
│ │ ├── bomb_fall.ogg
│ │ ├── bone_break1.ogg
│ │ ├── bone_break2.ogg
│ │ ├── bone_break3.ogg
│ │ ├── bone_break4.ogg
│ │ ├── bone_break5.ogg
│ │ ├── bone_break6.ogg
│ │ ├── bone_break7.ogg
│ │ ├── bounce_1.ogg
│ │ ├── bounce_2.ogg
│ │ ├── bounce_3.ogg
│ │ ├── bounce_4.ogg
│ │ ├── bubbles.ogg
│ │ ├── bubbles2.ogg
│ │ ├── can_open1.ogg
│ │ ├── can_open2.ogg
│ │ ├── can_open3.ogg
│ │ ├── can_pop.ogg
│ │ ├── can_shake.ogg
│ │ ├── canopen.ogg
│ │ ├── car_crush.ogg
│ │ ├── casplane_flyby.ogg
│ │ ├── clang.ogg
│ │ ├── cloak_scout_off.ogg
│ │ ├── cloak_scout_on.ogg
│ │ ├── clothcurtain.ogg
│ │ ├── clownstep1.ogg
│ │ ├── clownstep2.ogg
│ │ ├── confirm_beep.ogg
│ │ ├── creak1.ogg
│ │ ├── creak2.ogg
│ │ ├── cutting_cocoon.ogg
│ │ ├── doorcreaky.ogg
│ │ ├── drill.ogg
│ │ ├── drip1.ogg
│ │ ├── drip2.ogg
│ │ ├── drip3.ogg
│ │ ├── drip3.ogg.ogg
│ │ ├── drip4.ogg
│ │ ├── drip5.ogg
│ │ ├── droppod_impact.ogg
│ │ ├── droppod_launch.ogg
│ │ ├── dropship_sonic_boom.ogg
│ │ ├── engamb1.ogg
│ │ ├── engamb2.ogg
│ │ ├── engamb3.ogg
│ │ ├── engamb4.ogg
│ │ ├── engamb5.ogg
│ │ ├── engamb6.ogg
│ │ ├── engamb7.ogg
│ │ ├── engine_cargoshuttle_landing.ogg
│ │ ├── engine_cargoshuttle_startup.ogg
│ │ ├── engine_landing.ogg
│ │ ├── engine_startup.ogg
│ │ ├── escape_pod_launch.ogg
│ │ ├── escape_pod_warmup.ogg
│ │ ├── explosion/
│ │ │ ├── creak1.ogg
│ │ │ ├── creak2.ogg
│ │ │ ├── far.ogg
│ │ │ ├── far1.ogg
│ │ │ ├── far2.ogg
│ │ │ ├── far3.ogg
│ │ │ ├── far4.ogg
│ │ │ ├── far5.ogg
│ │ │ ├── large1.ogg
│ │ │ ├── large2.ogg
│ │ │ ├── large3.ogg
│ │ │ ├── large4.ogg
│ │ │ ├── large5.ogg
│ │ │ ├── large6.ogg
│ │ │ ├── medium1.ogg
│ │ │ ├── medium2.ogg
│ │ │ ├── medium3.ogg
│ │ │ ├── medium4.ogg
│ │ │ ├── medium5.ogg
│ │ │ ├── medium6.ogg
│ │ │ ├── micro1.ogg
│ │ │ ├── micro2.ogg
│ │ │ ├── micro3.ogg
│ │ │ ├── small1.ogg
│ │ │ ├── small2.ogg
│ │ │ ├── small3.ogg
│ │ │ ├── small4.ogg
│ │ │ ├── small_far.ogg
│ │ │ ├── small_far1.ogg
│ │ │ ├── small_far2.ogg
│ │ │ ├── small_far3.ogg
│ │ │ └── small_far4.ogg
│ │ ├── extinguish.ogg
│ │ ├── fire_crackle.ogg
│ │ ├── flashbang_explode_1.ogg
│ │ ├── flashbang_explode_2.ogg
│ │ ├── footstep/
│ │ │ ├── alien_resin_move1.ogg
│ │ │ ├── alien_resin_move2.ogg
│ │ │ ├── asteroid1.ogg
│ │ │ ├── asteroid2.ogg
│ │ │ ├── asteroid3.ogg
│ │ │ ├── asteroid4.ogg
│ │ │ ├── asteroid5.ogg
│ │ │ ├── carpet1.ogg
│ │ │ ├── carpet2.ogg
│ │ │ ├── carpet3.ogg
│ │ │ ├── carpet4.ogg
│ │ │ ├── carpet5.ogg
│ │ │ ├── carpetbarefoot1.ogg
│ │ │ ├── carpetbarefoot2.ogg
│ │ │ ├── carpetbarefoot3.ogg
│ │ │ ├── carpetbarefoot4.ogg
│ │ │ ├── carpetbarefoot5.ogg
│ │ │ ├── catwalk1.ogg
│ │ │ ├── catwalk2.ogg
│ │ │ ├── catwalk3.ogg
│ │ │ ├── catwalk4.ogg
│ │ │ ├── catwalk5.ogg
│ │ │ ├── concrete1.ogg
│ │ │ ├── concrete2.ogg
│ │ │ ├── concrete3.ogg
│ │ │ ├── concrete4.ogg
│ │ │ ├── concrete5.ogg
│ │ │ ├── crawl1.ogg
│ │ │ ├── floor1.ogg
│ │ │ ├── floor2.ogg
│ │ │ ├── floor3.ogg
│ │ │ ├── floor4.ogg
│ │ │ ├── floor5.ogg
│ │ │ ├── grass1.ogg
│ │ │ ├── grass2.ogg
│ │ │ ├── grass3.ogg
│ │ │ ├── grass4.ogg
│ │ │ ├── gravel_1.ogg
│ │ │ ├── gravel_10.ogg
│ │ │ ├── gravel_11.ogg
│ │ │ ├── gravel_12.ogg
│ │ │ ├── gravel_13.ogg
│ │ │ ├── gravel_14.ogg
│ │ │ ├── gravel_15.ogg
│ │ │ ├── gravel_16.ogg
│ │ │ ├── gravel_17.ogg
│ │ │ ├── gravel_18.ogg
│ │ │ ├── gravel_2.ogg
│ │ │ ├── gravel_3.ogg
│ │ │ ├── gravel_4.ogg
│ │ │ ├── gravel_5.ogg
│ │ │ ├── gravel_6.ogg
│ │ │ ├── gravel_7.ogg
│ │ │ ├── gravel_8.ogg
│ │ │ ├── gravel_9.ogg
│ │ │ ├── hardbarefoot1.ogg
│ │ │ ├── hardbarefoot2.ogg
│ │ │ ├── hardbarefoot3.ogg
│ │ │ ├── hardbarefoot4.ogg
│ │ │ ├── hardbarefoot5.ogg
│ │ │ ├── hardclaw1.ogg
│ │ │ ├── hardclaw2.ogg
│ │ │ ├── hardclaw3.ogg
│ │ │ ├── hardclaw4.ogg
│ │ │ ├── heavy1.ogg
│ │ │ ├── heavy2.ogg
│ │ │ ├── heavy3.ogg
│ │ │ ├── hull1.ogg
│ │ │ ├── hull2.ogg
│ │ │ ├── hull3.ogg
│ │ │ ├── hull4.ogg
│ │ │ ├── hull5.ogg
│ │ │ ├── ice1.ogg
│ │ │ ├── ice2.ogg
│ │ │ ├── ice3.ogg
│ │ │ ├── ice4.ogg
│ │ │ ├── ice5.ogg
│ │ │ ├── plating1.ogg
│ │ │ ├── plating2.ogg
│ │ │ ├── plating3.ogg
│ │ │ ├── plating4.ogg
│ │ │ ├── plating5.ogg
│ │ │ ├── roof1.ogg
│ │ │ ├── roof2.ogg
│ │ │ ├── roof3.ogg
│ │ │ ├── roof4.ogg
│ │ │ ├── sand1.ogg
│ │ │ ├── sand2.ogg
│ │ │ ├── sand3.ogg
│ │ │ ├── sand4.ogg
│ │ │ ├── snow1.ogg
│ │ │ ├── snow2.ogg
│ │ │ ├── snow3.ogg
│ │ │ ├── snow4.ogg
│ │ │ ├── snow5.ogg
│ │ │ ├── swimming1.ogg
│ │ │ ├── swimming2.ogg
│ │ │ ├── swimming3.ogg
│ │ │ ├── water1.ogg
│ │ │ ├── water2.ogg
│ │ │ ├── water3.ogg
│ │ │ ├── water4.ogg
│ │ │ ├── waterstep1.ogg
│ │ │ ├── waterstep2.ogg
│ │ │ ├── waterstep3.ogg
│ │ │ ├── wood1.ogg
│ │ │ ├── wood2.ogg
│ │ │ ├── wood3.ogg
│ │ │ ├── wood4.ogg
│ │ │ ├── wood5.ogg
│ │ │ ├── woodbarefoot1.ogg
│ │ │ ├── woodbarefoot2.ogg
│ │ │ ├── woodbarefoot3.ogg
│ │ │ ├── woodbarefoot4.ogg
│ │ │ ├── woodbarefoot5.ogg
│ │ │ ├── woodclaw1.ogg
│ │ │ ├── woodclaw2.ogg
│ │ │ └── woodclaw3.ogg
│ │ ├── gasmaskbreath.ogg
│ │ ├── gasmaskbreath2.ogg
│ │ ├── geiger/
│ │ │ ├── ext1.ogg
│ │ │ ├── ext2.ogg
│ │ │ ├── ext3.ogg
│ │ │ ├── ext4.ogg
│ │ │ ├── high1.ogg
│ │ │ ├── high2.ogg
│ │ │ ├── high3.ogg
│ │ │ ├── high4.ogg
│ │ │ ├── low1.ogg
│ │ │ ├── low2.ogg
│ │ │ ├── low3.ogg
│ │ │ ├── low4.ogg
│ │ │ ├── med1.ogg
│ │ │ ├── med2.ogg
│ │ │ ├── med3.ogg
│ │ │ └── med4.ogg
│ │ ├── ghost.ogg
│ │ ├── ghost2.ogg
│ │ ├── gib.ogg
│ │ ├── gladosmarinerevive.ogg
│ │ ├── glass_step.ogg
│ │ ├── glassbr1.ogg
│ │ ├── glassbr2.ogg
│ │ ├── glassbr3.ogg
│ │ ├── glassknock.ogg
│ │ ├── glob.ogg
│ │ ├── grillehit.ogg
│ │ ├── hit_on_shattered_glass.ogg
│ │ ├── incendiary_explosion_1.ogg
│ │ ├── incendiary_explosion_2.ogg
│ │ ├── incendiary_explosion_3.ogg
│ │ ├── kaboom.ogg
│ │ ├── knockout.ogg
│ │ ├── lightbuzzloop6.ogg
│ │ ├── lightfizz.ogg
│ │ ├── lightfizz2.ogg
│ │ ├── lightfizz3.ogg
│ │ ├── lightfizz4.ogg
│ │ ├── lightfizz5.ogg
│ │ ├── lightfizz6.ogg
│ │ ├── lightningbolt.ogg
│ │ ├── magic.ogg
│ │ ├── medcurtain1.ogg
│ │ ├── medcurtain2.ogg
│ │ ├── mentorhelp.ogg
│ │ ├── menu_click.ogg
│ │ ├── menu_select.ogg
│ │ ├── metal_crash.ogg
│ │ ├── metal_creaking.ogg
│ │ ├── metalhit.ogg
│ │ ├── meteorimpact.ogg
│ │ ├── molotov_detonate_1.ogg
│ │ ├── molotov_detonate_2.ogg
│ │ ├── molotov_detonate_3.ogg
│ │ ├── mousesqueek.ogg
│ │ ├── natural/
│ │ │ ├── vegetation_hit.ogg
│ │ │ ├── vegetation_walk_0.ogg
│ │ │ ├── vegetation_walk_1.ogg
│ │ │ ├── vegetation_walk_2.ogg
│ │ │ ├── wave1.ogg
│ │ │ ├── wave2.ogg
│ │ │ ├── wave3.ogg
│ │ │ └── woodhit.ogg
│ │ ├── nightvision.ogg
│ │ ├── obalarm.ogg
│ │ ├── obfire.ogg
│ │ ├── off_guard_ability.ogg
│ │ ├── pageturn1.ogg
│ │ ├── pageturn2.ogg
│ │ ├── pageturn3.ogg
│ │ ├── perk_unlock.ogg
│ │ ├── petrify_activate.ogg
│ │ ├── petrify_charge.ogg
│ │ ├── phasein.ogg
│ │ ├── pop.ogg
│ │ ├── portal.ogg
│ │ ├── portal_opening.ogg
│ │ ├── powerloss.ogg
│ │ ├── pred_cloakoff.ogg
│ │ ├── pred_cloakon.ogg
│ │ ├── pred_countdown.ogg
│ │ ├── pred_vision.ogg
│ │ ├── radio_chatter/
│ │ │ ├── radio1.ogg
│ │ │ ├── radio2.ogg
│ │ │ ├── radio3.ogg
│ │ │ ├── radio4.ogg
│ │ │ ├── radio5.ogg
│ │ │ ├── radio6.ogg
│ │ │ ├── radio7.ogg
│ │ │ └── radio8.ogg
│ │ ├── radiostatic.ogg
│ │ ├── rappel.ogg
│ │ ├── refill.ogg
│ │ ├── robotrepair.ogg
│ │ ├── robotrepair2.ogg
│ │ ├── rocksfalling1.ogg
│ │ ├── rocksfalling2.ogg
│ │ ├── roll.ogg
│ │ ├── rustle1.ogg
│ │ ├── rustle2.ogg
│ │ ├── rustle3.ogg
│ │ ├── rustle4.ogg
│ │ ├── rustle5.ogg
│ │ ├── screech.ogg
│ │ ├── screech2.ogg
│ │ ├── seedling_chargeup.ogg
│ │ ├── shard1.ogg
│ │ ├── shard2.ogg
│ │ ├── shard3.ogg
│ │ ├── shard4.ogg
│ │ ├── shard5.ogg
│ │ ├── shieldbash.ogg
│ │ ├── shutters_alarm.ogg
│ │ ├── singlebeat.ogg
│ │ ├── sink.ogg
│ │ ├── sink_long.ogg
│ │ ├── siren.ogg
│ │ ├── slam1.ogg
│ │ ├── slam2.ogg
│ │ ├── slam3.ogg
│ │ ├── slosh.ogg
│ │ ├── smoke.ogg
│ │ ├── smoke_bomb.ogg
│ │ ├── smoke_extinguish.ogg
│ │ ├── snap.ogg
│ │ ├── sos-morse-code.ogg
│ │ ├── sparks1.ogg
│ │ ├── sparks2.ogg
│ │ ├── sparks3.ogg
│ │ ├── sparks4.ogg
│ │ ├── spin.ogg
│ │ ├── spinal_implant_off.ogg
│ │ ├── spinal_implant_on.ogg
│ │ ├── splat.ogg
│ │ ├── spray.ogg
│ │ ├── spray2.ogg
│ │ ├── spray3.ogg
│ │ ├── squelch1.ogg
│ │ ├── stealthoff.ogg
│ │ ├── stonedoor_openclose.ogg
│ │ ├── supermatter.ogg
│ │ ├── swap.ogg
│ │ ├── tadpolehovering.ogg
│ │ ├── thoomp.ogg
│ │ ├── throw.ogg
│ │ ├── thud.ogg
│ │ ├── toolbox.ogg
│ │ ├── urban/
│ │ │ ├── indoors/
│ │ │ │ ├── derelict1.ogg
│ │ │ │ ├── derelict2.ogg
│ │ │ │ ├── derelict3.ogg
│ │ │ │ ├── derelict4.ogg
│ │ │ │ ├── derelict5.ogg
│ │ │ │ ├── derelict6.ogg
│ │ │ │ ├── derelict7.ogg
│ │ │ │ ├── derelict8.ogg
│ │ │ │ ├── derelict_ambience.ogg
│ │ │ │ ├── distant_sounds_1.ogg
│ │ │ │ ├── distant_sounds_10.ogg
│ │ │ │ ├── distant_sounds_2.ogg
│ │ │ │ ├── distant_sounds_3.ogg
│ │ │ │ ├── distant_sounds_4.ogg
│ │ │ │ ├── distant_sounds_5.ogg
│ │ │ │ ├── distant_sounds_6.ogg
│ │ │ │ ├── distant_sounds_7.ogg
│ │ │ │ ├── distant_sounds_8.ogg
│ │ │ │ ├── distant_sounds_9.ogg
│ │ │ │ ├── indoor_wind.ogg
│ │ │ │ ├── indoor_wind2.ogg
│ │ │ │ ├── lab_ambience.ogg
│ │ │ │ ├── lab_ambience_2.ogg
│ │ │ │ ├── lab_ambience_hallway.ogg
│ │ │ │ ├── urban_interior.ogg
│ │ │ │ ├── vent_1.ogg
│ │ │ │ ├── vent_2.ogg
│ │ │ │ ├── vent_3.ogg
│ │ │ │ ├── vent_4.ogg
│ │ │ │ ├── vent_5.ogg
│ │ │ │ ├── vent_6.ogg
│ │ │ │ ├── vent_7.ogg
│ │ │ │ ├── vent_8.ogg
│ │ │ │ ├── vent_9.ogg
│ │ │ │ ├── weymart1.ogg
│ │ │ │ ├── weymart2.ogg
│ │ │ │ ├── weymart3.ogg
│ │ │ │ └── weymart4.ogg
│ │ │ └── outdoors/
│ │ │ ├── deepcave1.ogg
│ │ │ ├── deepcave2.ogg
│ │ │ ├── derelict_plateau_1.ogg
│ │ │ ├── derelict_plateau_2.ogg
│ │ │ ├── subliminal1.ogg
│ │ │ ├── subliminal2.ogg
│ │ │ ├── subliminal3.ogg
│ │ │ ├── wind10.ogg
│ │ │ ├── wind11.ogg
│ │ │ ├── wind12.ogg
│ │ │ ├── wind13.ogg
│ │ │ ├── wind14.ogg
│ │ │ ├── wind15.ogg
│ │ │ ├── wind16.ogg
│ │ │ ├── wind17.ogg
│ │ │ ├── wind18.ogg
│ │ │ ├── wind19.ogg
│ │ │ ├── wind20.ogg
│ │ │ ├── wind21.ogg
│ │ │ ├── wind22.ogg
│ │ │ ├── wind23.ogg
│ │ │ ├── wind24.ogg
│ │ │ ├── wind25.ogg
│ │ │ ├── wind26.ogg
│ │ │ ├── wind27.ogg
│ │ │ ├── wind28.ogg
│ │ │ ├── wind4.ogg
│ │ │ ├── wind5.ogg
│ │ │ ├── wind6.ogg
│ │ │ ├── wind7.ogg
│ │ │ ├── wind8.ogg
│ │ │ ├── wind9.ogg
│ │ │ ├── windy_caverns_1.ogg
│ │ │ ├── windy_caverns_2.ogg
│ │ │ └── windy_caverns_3.ogg
│ │ ├── wind/
│ │ │ ├── wind_2_1.ogg
│ │ │ ├── wind_2_2.ogg
│ │ │ ├── wind_3_1.ogg
│ │ │ ├── wind_4_1.ogg
│ │ │ ├── wind_4_2.ogg
│ │ │ └── wind_5_1.ogg
│ │ ├── wind.ogg
│ │ ├── woosh_swoosh.ogg
│ │ ├── xadarblast.ogg
│ │ ├── xylophone1.ogg
│ │ ├── xylophone2.ogg
│ │ ├── xylophone3.ogg
│ │ └── zzzt.ogg
│ ├── hallucinations/
│ │ ├── behind_you1.ogg
│ │ ├── behind_you2.ogg
│ │ ├── far_noise.ogg
│ │ ├── growl1.ogg
│ │ ├── growl2.ogg
│ │ ├── growl3.ogg
│ │ ├── i_see_you1.ogg
│ │ ├── i_see_you2.ogg
│ │ ├── im_here1.ogg
│ │ ├── im_here2.ogg
│ │ ├── look_up1.ogg
│ │ ├── look_up2.ogg
│ │ ├── over_here1.ogg
│ │ ├── over_here2.ogg
│ │ ├── over_here3.ogg
│ │ ├── turn_around1.ogg
│ │ ├── turn_around2.ogg
│ │ ├── veryfar_noise.ogg
│ │ └── wail.ogg
│ ├── items/
│ │ ├── armorlock.ogg
│ │ ├── bikehorn.ogg
│ │ ├── binoculars.ogg
│ │ ├── blink_empty.ogg
│ │ ├── blink_recharge.ogg
│ │ ├── bubblewrap.ogg
│ │ ├── champagne_pop.ogg
│ │ ├── cig_light.ogg
│ │ ├── cig_snuff.ogg
│ │ ├── countdown.ogg
│ │ ├── crowbar.ogg
│ │ ├── deconstruct.ogg
│ │ ├── defib_SafetyOn.ogg
│ │ ├── defib_charge.ogg
│ │ ├── defib_failed.ogg
│ │ ├── defib_release.ogg
│ │ ├── defib_safetyOff.ogg
│ │ ├── defib_success.ogg
│ │ ├── detector.ogg
│ │ ├── dollsqueak.ogg
│ │ ├── drink.ogg
│ │ ├── eatfood.ogg
│ │ ├── eshield_down.ogg
│ │ ├── eshield_recharge.ogg
│ │ ├── flare.ogg
│ │ ├── flashlight.ogg
│ │ ├── fultext_deploy.ogg
│ │ ├── fultext_launch.ogg
│ │ ├── gnome.ogg
│ │ ├── googles_off.ogg
│ │ ├── googles_on.ogg
│ │ ├── healthanalyzer.ogg
│ │ ├── hypospray.ogg
│ │ ├── jetpack_sound.ogg
│ │ ├── lighter_off.ogg
│ │ ├── lighter_on.ogg
│ │ ├── matchstick_hit.ogg
│ │ ├── matchstick_lit.ogg
│ │ ├── megaphone.ogg
│ │ ├── pillbottle.ogg
│ │ ├── pills.ogg
│ │ ├── plantable_flag/
│ │ │ └── flag_raised.ogg
│ │ ├── polaroid1.ogg
│ │ ├── polaroid2.ogg
│ │ ├── poster_being_created.ogg
│ │ ├── poster_ripped.ogg
│ │ ├── ratchet.ogg
│ │ ├── rped.ogg
│ │ ├── screwdriver.ogg
│ │ ├── screwdriver2.ogg
│ │ ├── splint_break.ogg
│ │ ├── stamp.ogg
│ │ ├── syringeproj.ogg
│ │ ├── tick.ogg
│ │ ├── timer.ogg
│ │ ├── trayhit1.ogg
│ │ ├── trayhit2.ogg
│ │ ├── wee.ogg
│ │ ├── welder.ogg
│ │ ├── welder2.ogg
│ │ ├── weldingtool_off.ogg
│ │ ├── weldingtool_on.ogg
│ │ ├── weldingtool_weld.ogg
│ │ ├── whistle.ogg
│ │ ├── wirecutter.ogg
│ │ ├── write1.ogg
│ │ ├── write2.ogg
│ │ ├── zip.ogg
│ │ ├── zippo_off.ogg
│ │ └── zippo_on.ogg
│ ├── machines/
│ │ ├── airalarm.ogg
│ │ ├── airlock.ogg
│ │ ├── alarm.ogg
│ │ ├── beep.ogg
│ │ ├── beepalert.ogg
│ │ ├── beepconfused.ogg
│ │ ├── beepsad.ogg
│ │ ├── blastdoor.ogg
│ │ ├── blender.ogg
│ │ ├── boltsdown.ogg
│ │ ├── boltsup.ogg
│ │ ├── buzz-sigh.ogg
│ │ ├── buzz-two.ogg
│ │ ├── chime.ogg
│ │ ├── click.ogg
│ │ ├── closet/
│ │ │ ├── attribution.txt
│ │ │ ├── closet_close.ogg
│ │ │ ├── closet_lock.ogg
│ │ │ ├── closet_open.ogg
│ │ │ ├── closet_unlock.ogg
│ │ │ ├── wooden_closet_close.ogg
│ │ │ └── wooden_closet_open.ogg
│ │ ├── computer_typing1.ogg
│ │ ├── computer_typing2.ogg
│ │ ├── computer_typing3.ogg
│ │ ├── creak.ogg
│ │ ├── ding.ogg
│ │ ├── dispenser/
│ │ │ ├── dispenser_deploy.ogg
│ │ │ ├── dispenser_heal.ogg
│ │ │ └── dispenser_undeploy.ogg
│ │ ├── disposalflush.ogg
│ │ ├── door_close.ogg
│ │ ├── door_locked.ogg
│ │ ├── door_open.ogg
│ │ ├── dotprinter.ogg
│ │ ├── drone/
│ │ │ ├── droneoff.ogg
│ │ │ └── weapons_engaged.ogg
│ │ ├── dropship_fabricator.ogg
│ │ ├── elevator_move.ogg
│ │ ├── elevator_openclose.ogg
│ │ ├── emergency_shutter.ogg
│ │ ├── fax.ogg
│ │ ├── generator/
│ │ │ ├── generator_end.ogg
│ │ │ ├── generator_mid1.ogg
│ │ │ ├── generator_mid2.ogg
│ │ │ ├── generator_mid3.ogg
│ │ │ └── generator_start.ogg
│ │ ├── grill/
│ │ │ ├── frying.ogg
│ │ │ └── grillsizzle.ogg
│ │ ├── hiss.ogg
│ │ ├── hydraulic.ogg
│ │ ├── hydraulics_1.ogg
│ │ ├── hydraulics_2.ogg
│ │ ├── juicer.ogg
│ │ ├── lockenable.ogg
│ │ ├── lockreset.ogg
│ │ ├── locktoggle.ogg
│ │ ├── medevac_extend.ogg
│ │ ├── ping.ogg
│ │ ├── reagent_dispense.ogg
│ │ ├── shutter.ogg
│ │ ├── shuttle_still_flight.ogg
│ │ ├── signal.ogg
│ │ ├── sound_machines_FireAlarm1.ogg
│ │ ├── sound_machines_FireAlarm2.ogg
│ │ ├── sound_machines_FireAlarm3.ogg
│ │ ├── sound_machines_FireAlarm4.ogg
│ │ ├── switch.ogg
│ │ ├── synth/
│ │ │ ├── synth_no.ogg
│ │ │ └── synth_yes.ogg
│ │ ├── terminal_button01.ogg
│ │ ├── terminal_button02.ogg
│ │ ├── terminal_button03.ogg
│ │ ├── terminal_button04.ogg
│ │ ├── terminal_button05.ogg
│ │ ├── terminal_button06.ogg
│ │ ├── terminal_button07.ogg
│ │ ├── terminal_button08.ogg
│ │ ├── terminal_insert_disc.ogg
│ │ ├── terminal_off.ogg
│ │ ├── terminal_on.ogg
│ │ ├── terminal_prompt.ogg
│ │ ├── terminal_prompt_confirm.ogg
│ │ ├── terminal_prompt_deny.ogg
│ │ ├── triple_beep.ogg
│ │ ├── two_tones_beep.ogg
│ │ ├── twobeep.ogg
│ │ ├── vending_cans.ogg
│ │ ├── vending_coffee.ogg
│ │ ├── vending_drop.ogg
│ │ ├── warning-buzzer.ogg
│ │ └── windowdoor.ogg
│ ├── magic/
│ │ ├── castsummon.ogg
│ │ ├── end_of_psy_drain.ogg
│ │ ├── invoke_general.ogg
│ │ ├── lightning_chargeup.ogg
│ │ ├── lightningbolt.ogg
│ │ ├── lightningshock.ogg
│ │ ├── nightfall.ogg
│ │ └── timeparadox2.ogg
│ ├── mecha/
│ │ ├── brass_skewer.ogg
│ │ ├── critdestr.ogg
│ │ ├── heavylightswitch.ogg
│ │ ├── hydraulic.ogg
│ │ ├── imag_enh.ogg
│ │ ├── internaldmgalarm.ogg
│ │ ├── lowpower.ogg
│ │ ├── mag_bullet_insert.ogg
│ │ ├── mechambience.ogg
│ │ ├── mechanical_toggle.ogg
│ │ ├── mechmove01.ogg
│ │ ├── mechmove03.ogg
│ │ ├── mechmove04.ogg
│ │ ├── mechstep.ogg
│ │ ├── mechturn.ogg
│ │ ├── nominal.ogg
│ │ ├── overboost_chargeup.ogg
│ │ ├── overload_loop.ogg
│ │ ├── overload_start.ogg
│ │ ├── overload_stop.ogg
│ │ ├── powerloader_attack.ogg
│ │ ├── powerloader_buckle.ogg
│ │ ├── powerloader_step.ogg
│ │ ├── powerloader_step2.ogg
│ │ ├── powerloader_turn.ogg
│ │ ├── powerloader_turn2.ogg
│ │ ├── powerloader_unbuckle.ogg
│ │ ├── powerup.ogg
│ │ ├── skyfall_power_up.ogg
│ │ ├── weapdestr.ogg
│ │ └── weapons/
│ │ ├── laser_sword.ogg
│ │ ├── mech_flamer.ogg
│ │ ├── mech_heavy_cannon.ogg
│ │ ├── mech_laser_heavy.ogg
│ │ ├── mech_laser_light.ogg
│ │ ├── mech_light_cannon.ogg
│ │ ├── mech_lmg.ogg
│ │ ├── mech_minigun.ogg
│ │ ├── mech_minigun_start.ogg
│ │ ├── mech_pistol.ogg
│ │ ├── mech_rifle.ogg
│ │ ├── mech_rpg.ogg
│ │ ├── mech_shotgun.ogg
│ │ ├── mech_smg.ogg
│ │ └── mech_sniper.ogg
│ ├── misc/
│ │ ├── Game_Over_Man.ogg
│ │ ├── Rerun.ogg
│ │ ├── adm_announce.ogg
│ │ ├── airraid.ogg
│ │ ├── apcdestroyed.ogg
│ │ ├── asses_kicked.ogg
│ │ ├── attribution.txt
│ │ ├── bangindonk.ogg
│ │ ├── bloop.ogg
│ │ ├── burp_long.ogg
│ │ ├── burp_short.ogg
│ │ ├── clap.ogg
│ │ ├── distressbeacon_Sunshine.ogg
│ │ ├── ds_signalled_alarm.ogg
│ │ ├── eventhorizon_shiplog.ogg
│ │ ├── fart_long.ogg
│ │ ├── fart_short.ogg
│ │ ├── fingersnap.ogg
│ │ ├── golfclap.ogg
│ │ ├── gone_to_plaid.ogg
│ │ ├── good_is_dumb.ogg
│ │ ├── hardon.ogg
│ │ ├── hell_march.ogg
│ │ ├── interference.ogg
│ │ ├── notice1.ogg
│ │ ├── notice2.ogg
│ │ ├── notice3.ogg
│ │ ├── null.ogg
│ │ ├── nymphchirp.ogg
│ │ ├── outstanding_marines.ogg
│ │ ├── queen_alarm.ogg
│ │ ├── robotic scream.ogg
│ │ ├── sadtrombone.ogg
│ │ ├── salute.ogg
│ │ ├── slip.ogg
│ │ └── surrounded_by_assholes.ogg
│ ├── music/
│ │ └── elevator/
│ │ └── robocop-short.ogg
│ ├── runtime/
│ │ ├── README.md
│ │ ├── drone/
│ │ │ ├── drone1.ogg
│ │ │ ├── drone10.ogg
│ │ │ ├── drone11.ogg
│ │ │ ├── drone12.ogg
│ │ │ ├── drone2.ogg
│ │ │ ├── drone3.ogg
│ │ │ ├── drone4.ogg
│ │ │ ├── drone5.ogg
│ │ │ ├── drone6.ogg
│ │ │ ├── drone7.ogg
│ │ │ ├── drone8.ogg
│ │ │ └── drone9.ogg
│ │ └── instruments/
│ │ ├── accordion/
│ │ │ ├── Ab2.mid
│ │ │ ├── Ab3.mid
│ │ │ ├── Ab4.mid
│ │ │ ├── Ab5.mid
│ │ │ ├── Ab6.mid
│ │ │ ├── An2.mid
│ │ │ ├── An3.mid
│ │ │ ├── An4.mid
│ │ │ ├── An5.mid
│ │ │ ├── An6.mid
│ │ │ ├── Bb2.mid
│ │ │ ├── Bb3.mid
│ │ │ ├── Bb4.mid
│ │ │ ├── Bb5.mid
│ │ │ ├── Bb6.mid
│ │ │ ├── Bn2.mid
│ │ │ ├── Bn3.mid
│ │ │ ├── Bn4.mid
│ │ │ ├── Bn5.mid
│ │ │ ├── Bn6.mid
│ │ │ ├── Cn2.mid
│ │ │ ├── Cn3.mid
│ │ │ ├── Cn4.mid
│ │ │ ├── Cn5.mid
│ │ │ ├── Cn6.mid
│ │ │ ├── Db2.mid
│ │ │ ├── Db3.mid
│ │ │ ├── Db4.mid
│ │ │ ├── Db5.mid
│ │ │ ├── Db6.mid
│ │ │ ├── Dn2.mid
│ │ │ ├── Dn3.mid
│ │ │ ├── Dn4.mid
│ │ │ ├── Dn5.mid
│ │ │ ├── Dn6.mid
│ │ │ ├── Eb2.mid
│ │ │ ├── Eb3.mid
│ │ │ ├── Eb4.mid
│ │ │ ├── Eb5.mid
│ │ │ ├── Eb6.mid
│ │ │ ├── En2.mid
│ │ │ ├── En3.mid
│ │ │ ├── En4.mid
│ │ │ ├── En5.mid
│ │ │ ├── En6.mid
│ │ │ ├── Fn2.mid
│ │ │ ├── Fn3.mid
│ │ │ ├── Fn4.mid
│ │ │ ├── Fn5.mid
│ │ │ ├── Fn6.mid
│ │ │ ├── Gb2.mid
│ │ │ ├── Gb3.mid
│ │ │ ├── Gb4.mid
│ │ │ ├── Gb5.mid
│ │ │ ├── Gb6.mid
│ │ │ ├── Gn2.mid
│ │ │ ├── Gn3.mid
│ │ │ ├── Gn4.mid
│ │ │ ├── Gn5.mid
│ │ │ └── Gn6.mid
│ │ ├── banjo/
│ │ │ ├── Ab3.ogg
│ │ │ ├── Ab4.ogg
│ │ │ ├── Ab5.ogg
│ │ │ ├── An3.ogg
│ │ │ ├── An4.ogg
│ │ │ ├── An5.ogg
│ │ │ ├── Bb3.ogg
│ │ │ ├── Bb4.ogg
│ │ │ ├── Bb5.ogg
│ │ │ ├── Bn2.ogg
│ │ │ ├── Bn3.ogg
│ │ │ ├── Bn4.ogg
│ │ │ ├── Bn5.ogg
│ │ │ ├── Cn3.ogg
│ │ │ ├── Cn4.ogg
│ │ │ ├── Cn5.ogg
│ │ │ ├── Cn6.ogg
│ │ │ ├── Db3.ogg
│ │ │ ├── Db4.ogg
│ │ │ ├── Db5.ogg
│ │ │ ├── Db6.ogg
│ │ │ ├── Dn3.ogg
│ │ │ ├── Dn4.ogg
│ │ │ ├── Dn5.ogg
│ │ │ ├── Dn6.ogg
│ │ │ ├── Eb3.ogg
│ │ │ ├── Eb4.ogg
│ │ │ ├── Eb5.ogg
│ │ │ ├── En3.ogg
│ │ │ ├── En4.ogg
│ │ │ ├── En5.ogg
│ │ │ ├── Fn3.ogg
│ │ │ ├── Fn4.ogg
│ │ │ ├── Fn5.ogg
│ │ │ ├── Gb3.ogg
│ │ │ ├── Gb4.ogg
│ │ │ ├── Gb5.ogg
│ │ │ ├── Gn3.ogg
│ │ │ ├── Gn4.ogg
│ │ │ └── Gn5.ogg
│ │ ├── bikehorn/
│ │ │ ├── Ab2.ogg
│ │ │ ├── Ab3.ogg
│ │ │ ├── Ab4.ogg
│ │ │ ├── An2.ogg
│ │ │ ├── An3.ogg
│ │ │ ├── An4.ogg
│ │ │ ├── Bb2.ogg
│ │ │ ├── Bb3.ogg
│ │ │ ├── Bb4.ogg
│ │ │ ├── Bn2.ogg
│ │ │ ├── Bn3.ogg
│ │ │ ├── Bn4.ogg
│ │ │ ├── Cn3.ogg
│ │ │ ├── Cn4.ogg
│ │ │ ├── Cn5.ogg
│ │ │ ├── Db3.ogg
│ │ │ ├── Db4.ogg
│ │ │ ├── Db5.ogg
│ │ │ ├── Dn3.ogg
│ │ │ ├── Dn4.ogg
│ │ │ ├── Dn5.ogg
│ │ │ ├── Eb3.ogg
│ │ │ ├── Eb4.ogg
│ │ │ ├── Eb5.ogg
│ │ │ ├── En2.ogg
│ │ │ ├── En3.ogg
│ │ │ ├── En4.ogg
│ │ │ ├── Fn2.ogg
│ │ │ ├── Fn3.ogg
│ │ │ ├── Fn4.ogg
│ │ │ ├── Gb2.ogg
│ │ │ ├── Gb3.ogg
│ │ │ ├── Gb4.ogg
│ │ │ ├── Gn2.ogg
│ │ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.dockerignore
.editorconfig
GPLv3.txt
LICENSE
README.md
.github
.gitignore
.gitattributes
.git/hooks
.git/info
.git/modules
.git/objects
.git/refs
.vs*
cfg
data
SQL
tgui/node_modules
tgmc.dmb
tgmc.int
tgmc.rsc
tgmc.lk
tgmc.dyn.rsc
libmariadb.dll
rust_g.dll
appveyor.yml
Dockerfile
================================================
FILE: .editorconfig
================================================
# Editorconfig.org
root = true
[*]
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
indent_size = 4
[*.yml]
indent_style = space
indent_size = 2
================================================
FILE: .gitattributes
================================================
# force line endings
* text eol=lf
# text
*.bat text eol=lf
*.cjs text eol=lf
*.dm text eol=lf
*.dme text eol=lf
*.dmf text eol=lf
*.js text eol=lf
*.json text eol=lf
*.md text eol=lf
*.ps1 text eol=lf
*.py text eol=lf
*.scss text eol=lf
*.sh text eol=lf
*.toml text eol=lf
*.txt text eol=lf
*.yml text eol=lf
# binary
*.dll binary
*.eot binary
*.exe binary
*.jpeg binary
*.jpg binary
*.ogg binary
*.pdb binary
*.png binary
*.ttf binary
*.wav binary
*.woff binary
*.woff2 binary
# merger hooks, run tools/hooks/install.bat or install.sh to set up
*.dmm text eol=lf merge=dmm
*.dmi binary merge=dmi
================================================
FILE: .github/ATOMIZATION.md
================================================
# Atomization (AKA, splitting up pull requests)
Maintainers are volunteers and have limited time to review pull requests. Large pull requests can be hard to review. You can help us help you by splitting your PR up into more manageable chunks.
## Keep it on topic
A pull request for changing the color of airlocks should not also change the damage for guns.
In general, keep balance PRs separate from fix/refactor PRs, unless there is a reasonable explanation for having them in the same pull request. For example, if in your PR for changing airlock colors, you clean up the code to improve variable names in airlock code, that is completely fine to keep in the same pull request. Fixes are something we can merge if the code looks right. Balance changes/new features are something we can only merge once we evaluate design concerns, which is much slower.
## Split it up if it's big
Sometimes a refactor might end up being a lot larger than you expect, and suddenly it is very hard for us to review, even though it's all on topic.
We encourage contributors to, when reasonable, split up huge refactors into several chunks, or to split them off from your features entirely. It is even okay to make a small pull request to add an easy to review API even if the code is unused, just be up front about the changes you are planning to make. These pull requests will be tagged with the "Atomic" label. Every so often, maintainers might look at past PRs with this label and remove the code if it is still unused, or if you have let us know you don't plan on finishing it (though in this case, please remove it yourself). When you should do this isn't written in stone; if adding a consumer of the API is just a matter of a few lines, then you should just do that. On the other hand, if adding this API requires touching a lot of existing code, and would be hard to remove if you don't finish, you may be asked to put it in the PR that adds the consumers.
This does not necessarily apply to features/balance changes. We don't want half of a feature implemented because it leaves you and us uncertain to if the followup pull requests are going to be merged. For example, do not add a new item to the game that goes completely unused until a separate pull request which decides where it's going to go.
================================================
FILE: .github/AUTODOC.md
================================================
# dmdoc
[DOCUMENTATION]: http://codedocs.tgstation13.org
[BYOND]: https://secure.byond.com/
[DMDOC]: https://github.com/SpaceManiac/SpacemanDMM/tree/master/crates/dmdoc
[DMDOC] is a documentation generator for DreamMaker, the scripting language
of the [BYOND] game engine. It produces simple static HTML files based on
documented files, macros, types, procs, and vars.
We use **dmdoc** to generate [DOCUMENTATION] for our code, and that documentation
is automatically generated and built on every new commit to the master branch
This gives new developers a clickable reference [DOCUMENTATION] they can browse to better help
gain understanding of the TGMC codebase structure and api reference.
## Documenting code on TGMC
We use block comments to document procs and classes, and we use `///` line comments
when documenting individual variables.
It is required that all new code be covered with DMdoc code, according to the [Requirements](#Required)
We also require that when you touch older code, you must document the functions that you
have touched in the process of updating that code
### Required
A class *must* always be autodocumented, and all public functions *must* be documented
All class level defined variables *must* be documented
Internal functions *should* be documented, but may not be
A public function is any function that a developer might reasonably call while using
or interacting with your object. Internal functions are helper functions that your
public functions rely on to implement logic
### Documenting a proc
When documenting a proc, we give a short one line description (as this is shown
next to the proc definition in the list of all procs for a type or global
namespace), then a longer paragraph which will be shown when the user clicks on
the proc to jump to its definition
```
/**
* Short description of the proc
*
* Longer detailed paragraph about the proc
* including any relevant detail
* Arguments:
* * arg1 - Relevance of this argument
* * arg2 - Relevance of this argument
*/
```
### Documenting a class
We first give the name of the class as a header, this can be omitted if the name is
just going to be the typepath of the class, as dmdoc uses that by default
Then we give a short oneline description of the class
Finally we give a longer multi paragraph description of the class and its details
```
/**
* # Classname (Can be omitted if it's just going to be the typepath)
*
* The short overview
*
* A longer
* paragraph of functionality about the class
* including any assumptions/special cases
*
*/
```
### Documenting a variable/define
Give a short explanation of what the variable, in the context of the class, or define is.
```
/// Type path of item to go in suit slot
var/suit = null
```
## Module level description of code
Modules are the best way to describe the structure/intent of a package of code
where you don't want to be tied to the formal layout of the class structure.
On /tg/station we do this by adding markdown files inside the `code` directory
that will also be rendered and added to the modules tree. The structure for
these is deliberately not defined, so you can be as freeform and as wheeling as
you would like.
[Here is a representative example of what you might write](http://codedocs.tgstation13.org/code/modules/keybindings/readme.html)
## Special variables
You can use certain special template variables in DM DOC comments and they will be expanded
```
[DEFINE_NAME] - Expands to a link to the define definition if documented
[/mob] - Expands to a link to the docs for the /mob class
[/mob/proc/adjust_drunk_effect] - Expands to a link that will take you to the /mob class and anchor you to the adjust_drunk_effect proc docs
[/mob/var/stat] - Expands to a link that will take you to the /mob class and anchor you to the stat var docs
```
You can customise the link name by using `[link name][link shorthand].`
eg. `[see more about adjust drunk effect here] [/mob/proc/adjust_drunk_effect]`
This is very useful to quickly link to other parts of the autodoc code to expand
upon a comment made, or reasoning about code
================================================
FILE: .github/CODEOWNERS
================================================
# This list auto requests reviews from the specified org members
# when a PR that modifies the file in question is opened
# This list is alphabetized by User -> Filename KEEP IT THAT WAY
# In the event that multiple org members are to be informed of changes
# to the same file or dir, add them to the end under Multiple Owners
# spookydonut
/code/datums/supplypacks.dm @spookydonut
/code/modules/shuttle/ @spookydonut
/code/controllers/subsystem/points.dm @spookydonut
================================================
FILE: .github/EZDB.md
================================================
# Quickly setting up a development database with ezdb
While you do not need a database to code for tgstation, it is a prerequisite to many important features, especially on the admin side. Thus, if you are working in any code that benefits from it, it can be helpful to have one handy.
**ezdb** is a tool for quickly setting up an isolated development database. It will manage downloading MariaDB, creating the database, setting it up, and updating it when the code evolves. It is not recommended for use in production servers, but is perfect for quick development.
To run ezdb, go to `tools/ezdb`, and double-click on ezdb.bat. This will set up the database on port 1338, but you can configure this with `--port`. When it is done, you should be able to launch tgstation as normal and have database access. This runs on the same Python bootstrapper as things like the map merge tool, which can sometimes be flaky.
If you wish to delete the ezdb database, delete the `db` folder as well as `config/ezdb.txt`.
To update ezdb, run the script again. This will both look for any updates in the database changelog, as well as update your schema revision.
Contact Mothblocks if you face any issues in this process.
================================================
FILE: .github/HARDDELETES.md
================================================
# Hard Deletes
> Garbage collection is pretty gothic when you think about it.
>
>An object in code is like a ghost, clinging to its former life, and especially to the people it knew. It can only pass on and truly die when it has dealt with its unfinished business. And only when its been forgotten by everyone who ever knew it. If even one other object remembers it, it has a connection to the living world that lets it keep hanging on
>
>There is a kind of sombre tone to fixing GC errors too, its almost shamanistic, making sure all these little objects clear up their final affairs in life before they die, to ensure they don't become ghosts
>
> -- <cite>Nanako</cite>
### Table of contents
1. [What is hard deletion](#What-is-hard-deletion)
2. [Causes of hard deletes](#causes-of-hard-deletes)
3. [Detecting hard deletes](#detecting-hard-deletes)
4. [Techniques for fixing hard deletes](#techniques-for-fixing-hard-deletes)
5. [Help my code is erroring how fix](#help-my-code-is-erroring-how-fix)
## What is Hard Deletion
Hard deletion is a very expensive operation that basically clears all references to some "thing" from memory. Objects that undergo this process are referred to as hard deletes, or simply harddels
What follows is a discussion of the theory behind this, why we would ever do it, and the what we do to avoid doing it as often as possible
I'm gonna be using words like references and garbage collection, but don't worry, it's not complex, just a bit hard to pierce
### Why do we need to Hard Delete?
Ok so let's say you're some guy called Jerry, and you're writing a programming language
You want your coders to be able to pass around objects without doing a full copy. So you'll store the pack of data somewhere in memory
```dm
/someobject
var/id = 42
var/name = "some shit"
```
Then you want them to be able to pass that object into say a proc, without doing a full copy. So you let them pass in the object's location in memory instead
This is called passing something by reference
```dm
someshit(someobject) //This isn't making a copy of someobject, it's passing in a reference to it
```
This of course means they can store that location in memory in another object's vars, or in a list, or whatever
```dm
/datum
var/reference
/proc/someshit(mem_location)
var/datum/some_obj = new()
some_obj.reference = mem_location
```
But what happens when you get rid of the object we're passing around references to? If we just cleared it out from memory, everything that holds a reference to it would suddenly be pointing to nowhere, or worse, something totally different!
So then, you've gotta do something to clean up these references when you want to delete an object
We could hold a list of references to everything that references us, but god, that'd get really expensive wouldn't it
Why not keep count of how many times we're referenced then? If an object's ref count is ever 0, nothing whatsoever cares about it, so we can freely get rid of it
But if something's holding onto a reference to us, we're not gonna have any idea where or what it is
So I guess you should scan all of memory for that reference?
```dm
del(someobject) //We now need to scan memory until we find the thing holding a ref to us, and clear it
```
This pattern is about how BYOND handles this problem of hanging references, or Garbage Collection
It's not a broken system, but as you can imagine scanning all of memory gets expensive fast
What can we do to help that?
### How we can avoid hard deletes
If hard deletion is so slow, we're gonna need to clean up all our references ourselves
In our codebase we do this with `/datum/proc/Destroy()`, a proc called by `qdel()`, whose purpose I will explain later
This procs only job is cleaning up references to the object it's called on. Nothing more, nothing else. Don't let me catch you giving it side effects
There's a long long list of things this does, since we use it a TON. So I can't really give you a short description. It will always move the object to nullspace though
## Causes Of Hard Deletes
Now that you know the theory, let's go over what can actually cause hard deletes. Some of this is obvious, some of it's much less so.
The BYOND reference has a list [Here](https://secure.byond.com/docs/ref/#/DM/garbage), but it's not a complete one
* Stored in a var
* An item in a list, or associated with a list item
* Has a tag
* Is on the map (always true for turfs)
* Inside another atom's contents
* Inside an atom's vis_contents
* A temporary value in a still-running proc
* Is a mob with a key
* Is an image object attached to an atom
Let's briefly go over the more painful ones yeah?
### Sleeping procs
Any proc that calls `sleep()`, `spawn()`, or anything that creates a separate "thread" (not technically a thread, but it's the same in these terms. Not gonna cause any race conditions tho) will hang references to any var inside it. This includes the usr it started from, the src it was called on, and any vars created as a part of processing
### Static vars
`/static` and `/global` vars count for this too, they'll hang references just as well as anything. Be wary of this, these suckers can be a pain to solve
### Range() and View() like procs
Some internal BYOND procs will hold references to objects passed into them for a time after the proc is finished doing work, because they cache the returned info to make some code faster. You should never run into this issue, since we wait for what should be long enough to avoid this issue as a part of garbage collection
This is what `qdel()` does by the by, it literally just means queue deletion. A reference to the object gets put into a queue, and if it still exists after 5 minutes or so, we hard delete it
### Walk() procs
Calling `walk()` on something will put it in an internal queue, which it'll remain in until `walk(thing, 0)` is called on it, which removes it from the queue
This sort is very cheap to harddel, since BYOND prioritizes checking this queue first when it's clearing refs, but it should be avoided since it causes false positives
You can read more about how BYOND prioritizes these things [Here](https://www.patreon.com/posts/diving-for-35855766)
## Detecting Hard Deletes
For very simple hard deletes, simple inspection should be enough to find them. Look at what the object does during `Initialize()`, and see if it's doing anything it doesn't undo later.
If that fails, search the object's typepath, and look and see if anything is holding a reference to it without regard for the object deleting
BYOND currently doesn't have the capability to give us information about where a hard delete is. Fortunately we can search for most all of then ourselves.
The procs to perform this search are hidden behind compile time defines, since they'd be way too risky to expose to admin button pressing
If you're having issues solving a harddel and want to perform this check yourself, go to `_compile_options.dm` and uncomment `REFERENCE_TRACKING_STANDARD`.
You can read more about what each of these do in that file, but the long and short of it is if something would hard delete our code will search for the reference (This will look like your game crashing, just hold out) and print information about anything it finds to [log_dir]/harddels.log, which you can find inside the round folder inside `/data/logs/year/month/day`
It'll tell you what object is holding the ref if it's in an object, or what pattern of list transversal was required to find the ref if it's hiding in a list of some sort, alongside the references remaining.
## Techniques For Fixing Hard Deletes
Once you've found the issue, it becomes a matter of making sure the ref is cleared as a part of Destroy(). I'm gonna walk you through a few patterns and discuss how you might go about fixing them
### Our Tools
First and simplest we have `Destroy()`. Use this to clean up after yourself for simple cases
```dm
/someobject/Initialize(mapload)
. = ..()
GLOB.somethings += src //We add ourselves to some global list
/someobject/Destroy()
GLOB.somethings -= src //So when we Destroy() clean yourself from the list
return ..()
```
Next, and slightly more complex, pairs of objects that reference each other
This is helpful when for cases where both objects "own" each other
```dm
/someobject
var/someotherobject/buddy
/someotherobject
var/someobject/friend
/someobject/Initialize(mapload)
if(!buddy)
buddy = new()
buddy.friend = src
/someotherobject/Initialize(mapload)
if(!friend)
friend = new()
friend.buddy = src
/someobject/Destroy()
if(buddy)
buddy.friend = null //Make sure to clear their ref to you
buddy = null //We clear our ref to them to make sure nothing goes wrong
/someotherobject/Destroy()
if(friend)
friend.buddy = null //Make sure to clear their ref to you
friend = null //We clear our ref to them to make sure nothing goes wrong
```
Something similar can be accomplished with `QDELETED()`, a define that checks to see if something has started being `Destroy()`'d yet, and `QDEL_NULL()`, a define that `qdel()`'s a var and then sets it to null
Now let's discuss something a bit more complex, weakrefs
You'll need a bit of context, so let's do that now
BYOND has an internal bit of behavior that looks like this
`var/string = "\ref[someobject]"`
This essentially gets that object's position in memory directly. Unlike normal references, this doesn't count for hard deletes. You can retrieve the object in question by using `locate()`
`var/someobject/someobj = locate(string)`
This has some flaws however, since the bit of memory we're pointing to might change, which would cause issues. Fortunately we've developed a datum to handle worrying about this for you, `/datum/weakref`
You can create one using the `WEAKREF()` proc, and use weakref.resolve() to retrieve the actual object
This should be used for things that your object doesn't "own", but still cares about
For instance, a paper bin would own the paper inside it, but the paper inside it would just hold a weakref to the bin
There's no need to clean these up, just make sure you account for it being null, since it'll return that if the object doesn't exist or has been queued for deletion
```dm
/someobject
var/datum/weakref/our_coin
/someobject/proc/set_coin(/obj/item/coin/new_coin)
our_coin = WEAKREF(new_coin)
/someobject/proc/get_value()
if(!our_coin)
return 0
var/obj/item/coin/potential_coin = our_coin.resolve()
if(!potential_coin)
our_coin = null //Remember to clear the weakref if we get nothing
return 0
return potential_coin.value
```
Now, for the worst case scenario
Let's say you've got a var that's used too often to be weakref'd without making the code too expensive
You can't hold a paired reference to it because it's not like it would ever care about you outside of just clearing the ref
So then, we want to temporarily remember to clear a reference when it's deleted
This is where I might lose you, but we're gonna use signals
`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_QDELETING`
We can listen for that signal, and if we hear it clear whatever reference we may have
Here's an example
```dm
/somemob
var/mob/target
/somemob/proc/set_target(new_target)
if(target)
UnregisterSignal(target, COMSIG_QDELETING) //We need to make sure any old signals are cleared
target = new_target
if(target)
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(clear_target)) //Call clear_target if target is ever qdel()'d
/somemob/proc/clear_target(datum/source)
SIGNAL_HANDLER
set_target(null)
```
This really should be your last resort, since signals have some limitations. If some subtype of somemob also registered for parent_qdeleting on the same target you'd get a runtime, since signals don't support it
But if you can't do anything else for reasons of conversion ease, or hot code, this will work
## Help My Code Is Erroring How Fix
First, do a quick check.
Are you doing anything to the object in `Initialize()` that you don't undo in `Destroy()`? I don't mean like, setting its name, but are you adding it to any lists, stuff like that
If this fails, you're just gonna have to read over this doc. You can skip the theory if you'd like, but it's all pretty important for having an understanding of this problem
## Misc facts
> i like rust and all, buuut it removes garbage collecctor, and i pretend garbage collector is a cute girl checking my code
>
> -- <cite>Armhulenn</cite>
- The reference tracker, while powerful, is incredibly easy to break<br>
If it weren't for those unit tests we'd still be missing list["a"] = list(ref)
- Everyone but me sucks, because everyone but me keeps adding new hard deletes
- Garbage collection is a spook, best practice is to use a random reference in place of null, it scares the compiler demons
================================================
FILE: .github/HARDDEL_GUIDE.md
================================================
# Hard Deletes
1. [What is hard deletion](#What-is-hard-deletion)
2. [Causes of hard deletes](#causes-of-hard-deletes)
3. [Detecting hard deletes](#detecting-hard-deletes)
4. [Techniques for fixing hard deletes](#techniques-for-fixing-hard-deletes)
5. [Help my code is erroring how fix](#help-my-code-is-erroring-how-fix)
## What is Hard Deletion
Hard deletion is a very expensive operation that basically clears all references to some "thing" from memory. Objects that undergo this process are referred to as hard deletes, or simply harddels
What follows is a discussion of the theory behind this, why we would ever do it, and the what we do to avoid doing it as often as possible
I'm gonna be using words like references and garbage collection, but don't worry, it's not complex, just a bit hard to pierce
### Why do we need to Hard Delete?
Ok so let's say you're some guy called Jerry, and you're writing a programming language
You want your coders to be able to pass around objects without doing a full copy. So you'll store the pack of data somewhere in memory
```dm
/someobject
var/id = 42
var/name = "some shit"
```
Then you them to be able to pass that object into say a proc, without doing a full copy. So you let them pass in the object's location in memory instead
This is called passing something by reference
```dm
someshit(someobject) //This isn't making a copy of someobject, it's passing in a reference to it
```
This of course means they can store that location in memory in another object's vars, or in a list, or whatever
```dm
/datum
var/reference
/proc/someshit(mem_location)
var/datum/some_obj = new()
some_obj.reference = mem_location
```
But what happens when you get rid of the object we're passing around references to? If we just cleared it out from memory, everything that holds a reference to it would suddenly be pointing to nowhere, or worse, something totally different!
So then, you've gotta do something to clean up these references when you want to delete an object
We could hold a list of references to everything that references us, but god, that'd get really expensive wouldn't it
Why not keep count of how many times we're referenced then? If an object's ref count is ever 0, nothing whatsoever cares about it, so we can freely get rid of it
But if something's holding onto a reference to us, we're not gonna have any idea where or what it is
So I guess you should scan all of memory for that reference?
```dm
del(someobject) //We now need to scan memory until we find the thing holding a ref to us, and clear it
```
This pattern is about how BYOND handles this problem of hanging references, or Garbage Collection
It's not a broken system, but as you can imagine scanning all of memory gets expensive fast
What can we do to help that?
### How we can avoid hard deletes
If hard deletion is so slow, we're gonna need to clean up all our references ourselves
In our codebase we do this with `/datum/proc/Destroy()`, a proc called by `qdel()`, whose purpose I will explain later
This procs only job is cleaning up references to the object it's called on. Nothing more, nothing else. Don't let me catch you giving it side effects
There's a long long list of things this does, since we use it a TON. So I can't really give you a short description. It will always move the object to nullspace though
## Causes Of Hard Deletes
Now that you know the theory, let's go over what can actually cause hard deletes. Some of this is obvious, some of it's much less so.
The BYOND reference has a list [Here](https://secure.byond.com/docs/ref/#/DM/garbage), but it's not a complete one
* Stored in a var
* An item in a list, or associated with a list item
* Has a tag
* Is on the map (always true for turfs)
* Inside another atom's contents
* Inside an atom's vis_contents
* A temporary value in a still-running proc
* Is a mob with a key
* Is an image object attached to an atom
Let's briefly go over the more painful ones yeah?
### Sleeping procs
Any proc that calls `sleep()`, `spawn()`, or some wrapper around that like `walk()` will hang references to any var inside it. This includes the usr it started from, the src it was called on, and any vars created as a part of processing
### Static vars
`/static` and `/global` vars count for this too, they'll hang references just as well as anything. Be wary of this, these suckers can be a pain to solve
### Range() and View() like procs
Some internal BYOND procs will hold references to objects passed into them for a time after the proc is finished doing work, because they cache the returned info to make some code faster. You should never run into this issue, since we wait for what should be long enough to avoid this issue as a part of garbage collection
This is what `qdel()` does by the by, it literally just means queue deletion. A reference to the object gets put into a queue, and if it still exists after 2 minutes or so, we hard delete it
### Walk() procs
Calling `walk()` on something will put it in an internal queue, which it'll remain in until `walk(thing, 0)` is called on it, which removes it from the queue
This sort is very cheap to harddel, since BYOND prioritizes checking this queue first when it's clearing refs, but it should be avoided since it causes false positives
You can read more about how BYOND prioritizes these things [Here](https://www.patreon.com/posts/diving-for-35855766)
## Detecting Hard Deletes
For very simple hard deletes, simple inspection should be enough to find them. Look at what the object does during `Initialize()`, and see if it's doing anything it doesn't undo later.
If that fails, search the object's typepath, and look and see if anything is holding a reference to it without regard for the object deleting
BYOND currently doesn't have the capability to give us information about where a hard delete is. Fortunately we can search for most all of then ourselves.
The procs to perform this search are hidden behind compile time defines, since they'd be way too risky to expose to admin button pressing
If you're having issues solving a harddel and want to perform this check yourself, go to `_compile_options.dm` and uncomment `TESTING`, `REFERENCE_TRACKING`, and `GC_FAILURE_HARD_LOOKUP`
You can read more about what each of these do in that file, but the long and short of it is if something would hard delete our code will search for the reference (This will look like your game crashing, just hold out) and print information about anything it finds to the runtime log, which you can find inside the round folder inside `/data/logs/year/month/day`
It'll tell you what object is holding the ref if it's in an object, or what pattern of list transversal was required to find the ref if it's hiding in a list of some sort
## Techniques For Fixing Hard Deletes
Once you've found the issue, it becomes a matter of making sure the ref is cleared as a part of Destroy(). I'm gonna walk you through a few patterns and discuss how you might go about fixing them
### Our Tools
First and simplest we have `Destroy()`. Use this to clean up after yourself for simple cases
```dm
/someobject/Initialize()
. = ..()
GLOB.somethings += src //We add ourselves to some global list
/someobject/Destroy()
GLOB.somethings -= src //So when we Destroy() clean yourself from the list
return ..()
```
Next, and slightly more complex, pairs of objects that reference each other
This is helpful when for cases where both objects "own" each other
```dm
/someobject
var/someotherobject/buddy
/someotherobject
var/someobject/friend
/someobject/Initialize()
if(!buddy)
buddy = new()
buddy.friend = src
/someotherobject/Initialize()
if(!friend)
friend = new()
friend.buddy = src
/someobject/Destroy()
if(buddy)
buddy.friend = null //Make sure to clear their ref to you
buddy = null //We clear our ref to them to make sure nothing goes wrong
/someotherobject/Destroy()
if(friend)
friend.buddy = null //Make sure to clear their ref to you
friend = null //We clear our ref to them to make sure nothing goes wrong
```
Something similar can be accomplished with `QDELETED()`, a define that checks to see if something has started being `Destroy()`'d yet, and `QDEL_NULL()`, a define that `qdel()`'s a var and then sets it to null
Now let's discuss something a bit more complex, weakrefs
You'll need a bit of context, so let's do that now
BYOND has an internal bit of behavior that looks like this
`var/string = "\ref[someobject]"`
This essentially gets that object's position in memory directly. Unlike normal references, this doesn't count for hard deletes. You can retrieve the object in question by using `locate()`
`var/someobject/someobj = locate(string)`
This has some flaws however, since the bit of memory we're pointing to might change, which would cause issues. Fortunately we've developed a datum to handle worrying about this for you, `/datum/weakref`
You can create one using the `WEAKREF()` proc, and use weakref.resolve() to retrieve the actual object
This should be used for things that your object doesn't "own", but still cares about
For instance, a paper bin would own the paper inside it, but the paper inside it would just hold a weakref to the bin
There's no need to clean these up, just make sure you account for it being null, since it'll return that if the object doesn't exist or has been queued for deletion
```dm
/someobject
var/datum/weakref/our_coin
/someobject/proc/set_coin(/obj/item/coin/new_coin)
our_coin = WEAKREF(new_coin)
/someobject/proc/get_value()
if(!our_coin)
return 0
var/obj/item/coin/potential_coin = our_coin.resolve()
if(!potential_coin)
our_coin = null //Remember to clear the weakref if we get nothing
return 0
return potential_coin.value
```
Now, for the worst case scenario
Let's say you've got a var that's used too often to be weakref'd without making the code too expensive
You can't hold a paired reference to it because it's not like it would ever care about you outside of just clearing the ref
So then, we want to temporarily remember to clear a reference when it's deleted
This is where I might lose you, but we're gonna use signals
`qdel()`, the proc that sets off this whole deletion business, sends a signal called `COMSIG_QDELETING`
We can listen for that signal, and if we hear it clear whatever reference we may have
Here's an example
```dm
/somemob
var/mob/target
/somemob/proc/set_target(new_target)
if(target)
UnregisterSignal(target, COMSIG_QDELETING) //We need to make sure any old signals are cleared
target = new_target
if(target)
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(clear_target)) //Call clear_target if target is ever qdel()'d
/somemob/proc/clear_target(datum/source)
SIGNAL_HANDLER
set_target(null)
```
This really should be your last resort, since signals have some limitations. If some subtype of somemob also registered for parent_qdeleting on the same target you'd get a runtime, since signals don't support it
But if you can't do anything else for reasons of conversion ease, or hot code, this will work
## Help My Code Is Erroring How Fix
First, do a quick check.
Are you doing anything to the object in `Initialize()` that you don't undo in `Destroy()`? I don't mean like, setting its name, but are you adding it to any lists, stuff like that
If this fails, you're just gonna have to read over this doc. You can skip the theory if you'd like, but it's all pretty important for having an understanding of this problem
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "Bug Report"
description: Create a report to help reproduce and fix the issue
labels: 'Bug'
body:
- type: markdown
attributes:
value: |
Please [search for existing issues](https://github.com/tgstation/TerraGov-Marine-Corps/issues) before creating a new one.
- type: textarea
attributes:
label: Description
description: What did you expect to happen and what happened instead?
validations:
required: true
- type: textarea
attributes:
label: Test Merges
description: What Pull Requests were being tested in the round the bug occured?
placeholder: |
1. Within the server
2. Goto the OOC Tab
3. Click Show server revision
4. Copy text here
validations:
required: true
- type: textarea
attributes:
label: Reproduction Steps
description: Please list out the steps to reproduce your bug.
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
attributes:
label: Screenshots
description: If applicable, add screenshots to help explain your problem.
placeholder: Click here to attach your screenshots via the editor button in the top right.
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Need help?
url: https://discord.gg/2dFpfNE
about: Join discord and post your question there.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
---
Feature requests are not handled in the repository. The best place to discuss these ideas would be on the #dev-general of the TGCM discord, or
this thread on /tg/station 13 forums: https://tgstation13.org/phpBB/viewtopic.php?f=65&t=20995
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull request process. -->
## About The Pull Request
<!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! -->
## Why It's Good For The Game
<!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to manipulate the system all you want, but it's best to shoot for clear communication right off the bat. -->
<!--Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: if you want to overwrite your GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents, don't be too verbose. -->
:cl:
add: Added new mechanics or gameplay changes
add: Added more things
del: Removed old things
qol: made something easier to use
balance: rebalanced something
fix: fixed a few things
soundadd: added a new sound thingy
sounddel: removed an old sound thingy
imageadd: added some icons and images
imagedel: deleted some icons and images
spellcheck: fixed a few typos
code: changed some code
refactor: refactored some code
config: changed some config setting
admin: messed with admin stuff
server: something server ops should know
/:cl:
================================================
FILE: .github/TICK_ORDER.md
================================================
The byond tick proceeds as follows:
1. procs sleeping via walk() are resumed (i dont know why these are first)
2. normal sleeping procs are resumed, in the order they went to sleep in the first place, this is where the MC wakes up and processes subsystems. a consequence of this is that the MC almost never resumes before other sleeping procs, because it only goes to sleep for 1 tick 99% of the time, and 99% of procs either go to sleep for less time than the MC (which guarantees that they entered the sleep queue earlier when its time to wake up) and/or were called synchronously from the MC's execution, almost all of the time the MC is the last sleeping proc to resume in any given tick. This is good because it means the MC can account for the cost of previous resuming procs in the tick, and minimizes overtime.
3. control is passed to byond after all of our code's procs stop execution for this tick
4. a few small things happen in byond internals
5. SendMaps is called for this tick, which processes the game state for all clients connected to the game and handles sending them changes
in appearances within their view range. This is expensive and takes up a significant portion of our tick, about 0.45% per connected player
as of 3/20/2022. meaning that with 50 players, 22.5% of our tick is being used up by just SendMaps, after all of our code has stopped executing. Thats only the average across all rounds, for most highpop rounds it can look like 0.6% of the tick per player, which is 30% for 50 players.
6. After SendMaps ends, client verbs sent to the server are executed, and its the last major step before the next tick begins.
During the course of the tick, a client can send a command to the server saying that they have executed any verb. The actual code defined
for that /verb/name() proc isnt executed until this point, and the way the MC is designed makes this especially likely to make verbs
"overrun" the bounds of the tick they executed in, stopping the other tick from starting and thus delaying the MC firing in that tick.
The master controller can derive how much of the tick was used in: procs executing before it woke up (because of world.tick_usage), and SendMaps (because of world.map_cpu, since this is a running average you cant derive the tick spent on maptick on any particular tick). It cannot derive how much of the tick was used for sleeping procs resuming after the MC ran, or for verbs executing after SendMaps.
It is for these reasons why you should heavily limit processing done in verbs, while procs resuming after the MC are rare, verbs are not, and are much more likely to cause overtime since theyre literally at the end of the tick. If you make a verb, try to offload any expensive work to the beginning of the next tick via a verb management subsystem.
================================================
FILE: .github/VISUALS.md
================================================
# Visuals in TGMC 13
Welcome to a breakdown of visuals and visual effects in our codebase, and in BYOND.
I will be describing all of the existing systems we use, alongside explaining and providing references to BYOND's ref for each tool.
Note, I will not be covering things that are trivial to understand, and which we don't mess with much.
For a complete list of byond ref stuff relevant to this topic, see [here](https://www.byond.com/docs/ref/#/atom/var/appearance).
This is to some extent a collation of the BYOND ref, alongside a description of how we actually use these tools.
My hope is after reading this you'll be able to understand and implement different visual effects in our codebase.
Also please see the ref entry on the [renderer](https://www.byond.com/docs/ref/#/{notes}/renderer).
We do a LOT, so this document might run on for a bit. Forgive me.
You'll find links to the relevant reference entries at the heading of each entry, alongside a hook back to the head of this document.
### Table of Contents
- [Appearances](#appearances-in-byond)
- [Overlays](#overlays)
- [Visual contents](#visual-contents)
- [Images](#images)
- [Client images](#client-images)
- [View](#view)
- [Eye](#eye)
- [Client screen](#client-screen)
- [Blend mode](#client-screen)
- [Appearance flags](#appearance-flags)
- [Gliding](#gliding)
- [Sight](#sight)
- [BYOND lighting](#byond-lighting)
- [Luminosity](#luminosity)
- [See in dark](#see-in-dark)
- [Infrared](#infrared)
- [Invisibility](#invisibility)
- [Layers](#layers)
- [Planes](#planes)
- [Render target/source](#render-targetsource)
- [Multiz](#multiz)
- [Mouse opacity](#mouse-opacity)
- [Filters](#filters)
- [Particles](#particles)
- [Pixel offsets](#pixel-offsets)
- [Map formats](#map-formats)
- [Color](#color)
- [Transform](#transform)
- [Lighting](#lighting)
- [Animate()](#animate())
- [GAGS](#gags)
## Appearances in BYOND
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance)
Everything that is displayed on the map has an appearance variable that describes exactly how it should be rendered.
To be clear, it doesn't contain EVERYTHING, [plane masters](#planes) exist separately and so do many other factors.
But it sets out a sort of recipe of everything that could effect rendering.
Appearances have a few quirks that can be helpful or frustrating depending on what you're trying to do.
To start off with, appearances are static. You can't directly edit an appearance "datum", it will throw a runtime or just yell at you.
The way to edit them most of the time is to just modify the corresponding variable on the thing the appearance represents.
This doesn't mean it's impossible to modify them directly however. While appearances are static,
their cousins mutable appearances [(Ref Entry)](https://www.byond.com/docs/ref/info.html#/mutable_appearance) **are**.
What we can do is create a new mutable appearance, set its appearance to be a copy of the static one (remember all appearance variables are static),
edit it, and then set the desired thing's appearance var to the appearance var of the mutable.
Somewhat like this
```byond
// NOTE: we do not actually have access to a raw appearance type, so we will often
// Lie to the compiler, and pretend we are using a mutable appearance
// This lets us access vars as expected. Be careful with it tho
/proc/mutate_icon_state(mutable_appearance/thing)
var/mutable_appearance/temporary_lad = new()
temporary_lad.appearance = thing
temporary_lad.icon_state += "haha_owned"
return temporary_lad.appearance
```
> **Note:** More then being static, appearances are unique. Only one copy of each set of appearance vars exists, and when you modify any of those vars, the corrosponding appearance variable changes its value to whatever matches the new hash. That's why appearance vars can induce inconsistent cost on modification.
> **Warning:** BYOND has been observed to have issues with appearance corruption, it's something to be weary of when "realizing" appearances in this manner.
## Overlays
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/overlays) (Also see [rendering](https://www.byond.com/docs/ref/#/{notes}/renderer))
Overlays are a list of static [appearances](#appearances-in-byond) that we render on top of ourselves.
Said appearances can be edited via the realizing method mentioned above.
Their rendering order is determined by [layer](#layers) and [plane](#planes), but conflicts are resolved based off order of appearance inside the list.
While overlays are stored as static appearances they can be created using icon states to draw from the overlay'd thing icon, or using `/icon` objects.
Also of note: overlays have a cost on addition, which is why as we will discuss we cache modifications to the list.
It's not significant, but it is there, and something to be aware of.
### Our Implementation
We use overlays as our primary method of overlaying visuals.
However, since overlays are COPIES of a thing's appearance, ensuring that they can be cleared is semi troublesome.
To solve this problem, we manage most overlays using `update_overlays()`.
This proc is called whenever an atom's appearance is updated with `update_appearance()`
(essentially just a way to tell an object to rerender anything static about it, like icon state or name),
which will often call `update_icon()`.
`update_icon()` handles querying the object for its desired icon, and also manages its overlays, by calling `update_overlays()`.
Said proc returns a list of things to turn into static appearances, which are then passed into `add_overlay()`,
which makes them static with `build_appearance_list()` before queuing an overlay compile.
This list of static appearances is then queued inside a list called `managed_overlays` on `/atom`.
This is so we can clear old overlays out before running an update.
We actually compile queued overlay builds once every tick using a dedicated subsystem.
This is done to avoid adding/removing/adding again to the overlays list in cases like humans where it's mutated a lot.
You can bypass this managed overlays system if you'd like, using `add_overlay()` and `cut_overlay()`,
but this is semi dangerous because you don't by default have a way to "clear" the overlay.
Be careful of this.
## Visual Contents
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/vis_contents)
The `vis_contents` list allows you to essentially say "Hey, render this thing ON me".
The definition of "ON" varies significantly with the `vis_flags` value of the *thing* being relayed.
See the ref [here](https://www.byond.com/docs/ref/#/atom/var/vis_flags).
Some flags of interest:
- `VIS_INHERIT_ID`: This allows you to link the object DIRECTLY to the thing it's drawn on,
so clicking on the `vis_contents`'d object is just like clicking on the thing
- `VIS_INHERIT_PLANE`: We will discuss [planes](#planes) more in future, but we use them to both effect rendering order and apply effects as a group.
This flag changes the plane of any `vis_contents`'d object (while displayed on the source object) to the source's.
This is occasionally useful, but should be used with care as it breaks any effects that rely on plane.
Anything inside a `vis_contents` list will have its loc stored in its `vis_locs` variable.
We very rarely use this, primarily just for clearing references from `vis_contents`.
`vis_contents`, unlike `overlays` is a reference, not a copy. So you can update a `vis_contents`'d thing and have it mirror properly.
This is how we do multiz by the by, with uh, some more hell discussed under [multiz](#multiz).
To pay for this additional behavior however, vis_contents has additional cost in maptick.
Because it's not a copy, we need to constantly check if it's changed at all, which leads to cost scaling with player count.
Careful how much you use it.
## Images
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/image)
Images are technically parents of [mutable appearances](#appearances-in-byond).
We don't often use them, mostly because we can accomplish their behavior with just MAs.
Images exist both to be used in overlays, and to display things to only select clients on the map.
See [/client/var/images](#client-images)
> Note: the inheritance between the two is essentially for engine convenience. Don't rely on it.
## Client Images
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/images)
`/client/var/images` is a list of image objects to display to JUST that particular client.
The image objects are displayed at their loc variable, and can be shown to more then one user at once.
### Our Implementation
We use client images in a few ways. Often they will be used just as intended, to modify the view of just one user.
Think tray scanner or technically ai static.
However, we often want to show a set of images to the same GROUP of people, but in a limited manner.
For this, we use the `/datum/atom_hud` (hereafter hud) system.
This is different from `/datum/hud`, which I will discuss later.
HUDs are datums that represent categories of images to display to users.
They are most often global, but can be created on an atom to atom bases in rare cases.
They store a list of images to display (sorted by source z level to reduce lag) and a list of clients to display to.
We then mirror this group of images into/out of the client's images list, based on what HUDs they're able to see.
This is the pattern we use for things like the medihud, or robot trails.
## View
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/view)
`/client/var/view` is actually a pretty simple topic,
but I'm gonna take this chance to discuss the other things we do to manage pixel sizing and such since there isn't a better place for it,
and they're handled in the same place by us.
Alright then, view. This is pretty simple, but it basically just lets us define the tile bound we want to show to our client.
This can either be a number for an X by X square, or a string in the form "XxY" for more control.
We use `/datum/view_data` to manage and track view changes, so zoom effects can work without canceling or being canceled by anything else.
### Client Rendering Modes
- [Zoom Ref](https://www.byond.com/docs/ref/#/{skin}/param/zoom) / [Zoom Mode Ref](https://www.byond.com/docs/ref/#/{skin}/param/zoom-mode)
Clients get some choice in literally how they want the game to be rendered to them.
The two I'm gonna discuss here are `zoom`, and `zoom-mode` mode, both of which are skin params (basically just variables that live on the client)
`zoom` decides how the client wants to display the turfs shown to it.
It can have two types of values.
If it's equal to 0 it will stretch the tiles sent to the client to fix the size of the map-window.
Otherwise, any other numbers will lead to pixels being scaled by some multiple.
This effect can only really result in nice clean edges if you pass in whole numbers which is why most of the constant scaling we give players are whole numbers.
`zoom-mode` controls how a pixel will be up-scaled, if it needs to be.
See the ref for more details, but `normal` is gonna have the sharpest output, `distort` uses nearest neighbor,
which causes some blur, and `blur` uses bilinear sampling, which causes a LOT of blur.
## Eye
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/client/var/eye)
`/client/var/eye` is the atom or mob at which our view should be centered.
Any screen objects we display will show "off" this, as will our actual well eye position.
It is by default `/client/var/mob` but it can be modified.
This is how we accomplish ai eyes and ventcrawling, alongside most other effects that involve a player getting "into" something.
## Client Screen
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/HUD)
Similar to client images but not *quite* the same, we can also insert objects onto our client's literal screen
This is done by giving it an appropriate `screen_loc` value, and inserting it into the client's `screen` list.
Note: we use screen for other things too, I'll get to that eventually.
`screen` is actually rather uninteresting, but `screen_loc` has a LOT more nuance.
To start with, the format.
The classic `screen_loc` format looks something like this (keeping in mind it counts from the top left):
`x:px,y:py`
The pixel offsets can be discarded as optional, but crucially the x and y values do not NEED to be absolute.
We can use cardinal keywords like `NORTH` to anchor screen objects to the view size of the client (a topic that will be discussed soon).
You can also use directional keywords like `TOP` to anchor to the actual visible map-window, which prevents any accidental out of bounds.
Oh yeah you can use absolute offsets to position screen objects out of the view range, which will cause the map-window to forcefully expand,
exposing the parts of the map byond uses to ahead of time render border things so moving is smooth.
### Secondary Maps
While we're here, this is a bit of a side topic but you can have more then one map-window on a client's screen at once.
This gets into dmf fuckery but you can use [window ids](https://www.byond.com/docs/ref/#/{skin}/param/id) to tell a screen object to render to a secondary map.
Useful for creating popup windows and such.
## Blend Mode
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/blend_mode)
`/atom/var/blend_mode` defines how an atom well, renders onto the map.
There's a whole bunch of options but really the only one you need to know offhand is `BLEND_MULTIPLY`, which multiplies the thing being drawn "on" by us.
This is how we do lighting effects, since the lighting [plane](#planes) can be used to multiply just normal coloring. If it's all black, the full screen goes black.
## Appearance Flags
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/appearance_flags)
`/atom/var/appearance_flags` is a catch all for toggles that apply to visual elements of an atom.
I won't go over all of them, but I will discuss a few.
Flags of interest:
- `LONG_GLIDE`: without this, diagonal movements will automatically take sqrt(2) more time, to account for the greater distance. We do this calculus automatically, and so want this flipped to disable the behavior.
- `KEEP_TOGETHER`: this allows us to force overlays to render in the same manner as the thing they're overlaid on. Most useful for humans to make alpha changes effect all overlays.
- `PLANE_MASTER`: I will get into this later, but this allows us to use the [plane](#planes) var to relay renders onto screen objects, so we can apply visual effects and masks and such.
- `TILE_BOUND`: By default if something is part in one tile and part in another it will display if either is visible. With this set it'll go off its loc value only.
## Gliding
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/gliding)
You may have noticed that moving between tiles is smooth, or at least as close as we can get it.
Moving at 0.2 or 10 tiles per second will be smooth. This is because we have control over the speed at which atoms animate between moves.
This is done using two patterns. One is how we handle input, the other is BYOND's gliding.
We can edit `/atom/movable/var/glide_size` to set the amount of pixels our mob should move per SERVER tick (Our server tick rate is 20 times a second, or 0.5 deciseconds).
This is done using `/atom/movable/proc/set_glide_size`, which will inform anything we are "carrying" to match our rate.
Glide size is often set in the context of some rate of movement. Either the movement delay of a mob, set in `/client/Move()`, or the delay of a movement subsystem.
We use defines to turn delays into pixels per tick.
Client moves will be limited by `DELAY_TO_GLIDE_SIZE` which will allow at most 32 pixels a tick.
Subsystems and other niche uses use `MOVEMENT_ADJUSTED_GLIDE_SIZE`.
We will also occasionally use glide size as a way to force a transition between different movement types, like space-drift into normal walking.
There's extra cruft here.
> Something you should know: Our gliding system attempts to account for time dilation when setting move rates.
This is done in a very simplistic way however, so a spike in td will lead to jumping around as glide rate is outpaced by mob movement rate.
On that note, it is VERY important that glide rate is the same or near the same as actual move rate.
Otherwise you will get strange jumping and jitter.
This can also lead to stupid shit where people somehow manage to intentionally shorten a movement delay to jump around. Dumb.
Related to the above, we are not always able to maintain sync between glide rate and mob move rate.
This is because mob move rate is a function of the initial move delay and a bunch of slowdown/speedup modifiers.
In order to maintain sync we would need to issue a move command the MOMENT a delay is up, and if delays are not cleanly divisible by our tick rate (0.5 deciseconds) this is impossible.
This is why you'll sometime see a stutter in your step when slowed
Just so you know, client movement works off `/client/var/move_delay` which sets the next time an input will be accepted. It's typically glide rate, but is in some cases just 1 tick.
## Sight
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/sight)
`/mob/var/sight` is a set of bitflags that *mostly* set what HAS to render on your screen. Be that mobs, turfs, etc.
That said, there is some nuance here so I'ma get into that.
- `SEE_INFRA`: I'll get into this later, but infrared is essentially a copy of BYOND darkness, it's not something we currently use.
- `SEE_BLACKNESS`: This relates heavily to [planes](#planes), essentially typically the "blackness" (that darkness that masks things that you can't see)
is rendered separately, out of our control as "users".
However, if the `SEE_BLACKNESS` flag is set, it will instead render on plane 0, the default BYOND plane.
This allows us to capture it, and say, blur it, or redraw it elsewhere. This is in theory very powerful, but not possible with the 'side_map' [map format](https://www.byond.com/docs/ref/#/world/var/map_format)
## BYOND Lighting
- [Table of Contents](#table-of-contents)
Alongside OUR lighting implementation, which is discussed in with color matrixes, BYOND has its own lighting system.
It's very basic. Essentially, a tile is either "lit" or it's not.
If a tile is not lit, and it matches some other preconditions, it and all its contents will be hidden from the user,
sort of like if there was a wall between them. This hiding uses BYOND darkness, and is thus controllable.
I'll use this section to discuss all the little bits that contribute to this behavior
### Luminosity
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/luminosity)
`/atom/var/luminosity` is a variable that lets us inject light into BYOND's lighting system.
It's real simple, just a range of tiles that will be lit, respecting sight-lines and such of course.
> This "light" is how `/proc/view()` knows if something is in view or not. Oh by the by `view()` respects lighting.
You can actually force it to use a particular mob's sight to avoid aspects of this, this is what `dview()` is
### See in Dark
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_in_dark)
`/mob/var/see_in_dark` sets the radius of a square around the mob that cuts out BYOND darkness.
This is why when you stand in darkness you can see yourself, and why you can see a line of objects appear when you use mesons (horrible effect btw).
It's quite simple, but worth describing.
### Infrared
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/mob/var/see_infrared)
Infrared vision can be thought of as a hidden copy of standard BYOND darkness.
It's not something we actually use, but I think you should know about it, because the whole thing is real confusing without context.
## Invisibility
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/invisibility)
`/atom/var/invisibility` is a rudimentary way of hiding things from select groups of users. Think of it like [planes](#planes), or [client images](#client-images) but more limited.
We use this to hide ghosts, ghost visible things, and in the past we used it to hide/show backdrops for the lighting plane, which is semi redundant now.
It's also used to hide some more then ghost invisible things, like some timers and countdowns. It scales from 0 to 101.
`/mob/var/see_invisible` is the catcher of invisibility. If a mob's see_invisible is higher then a target/s invisibility, it'll be shown. Really basic stuff.
## Layers
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/layer)
`/atom/var/layer` is the first bit of logic that decides the order in which things on the map render.
Rendering order depends a LOT on the [map format](https://www.byond.com/docs/ref/#/world/var/map_format),
which I will not get into in this document because it is not yet relevant.
All you really need to know is for our current format,
the objects that appear first in something's contents will draw first, and render lowest.
Think of it like stacking little paper cutouts.
Layer has a bit more nuance then just being lowest to highest, tho it's not a lot.
There are a few snowflake layers that can be used to accomplish niche goals, alongside floating layers, which are essentially just any layer that is negative.
Floating layers will float "up" the chain of things they're being drawn onto, until they find a real layer. They'll then offset off of that.
Adding `TOPDOWN_LAYER` (actual value `10000`) to another layer forces the appearance into topdown rendering, locally disabling [side map](#side_map-check-the-main-page-too).
We can think of this as applying to planes, since we don't want it interlaying with other non topdown objects.
This allows us to keep relative layer differences while not needing to make all sources static. Often very useful.
## Planes
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/plane)
Allllright `/atom/var/plane`s. Let's talk about em.
They serve two purposes. The first is really simple, and basically just a copy of [layers](#layers).
Higher planes will (**normally**) render over lower ones. Very clearcut.
Similarly to [layers](#layers), planes also support "floating" with `FLOAT_PLANE`. See above for an explanation of that.
However, they can be used for more complex and... fun things too!
If a client has an atom with the `PLANE_MASTER` [appearance flag](#appearance-flags) in their [screen](#client-screen),
then rather then being all rendered normally, anything in the client's view is instead first rendered onto the plane master.
This is VERY powerful, because it lets us [hide](https://www.byond.com/docs/ref/#/atom/var/alpha), [color](#color),
and [distort](#filters) whole classes of objects, among other things.
I cannot emphasize enough how useful this is. It does have some downsides however.
Because planes are tied to both grouping and rendering order, there are some effects that require splitting a plane into bits.
It's also possible for some effects, especially things relating to [map format](https://www.byond.com/docs/ref/#/world/var/map_format),
to just be straight up impossible, or conflict with each other.
It's dumb, but it's what we've got brother so we're gonna use it like it's a free ticket to the bahamas.
We have a system that allows for arbitrary grouping of plane masters for the purposes of [filter effects](#filters)
called `/atom/movable/plane_master_controller`.
This is somewhat outmoded by our use of [render relays](#render-targetsource), but it's still valid and occasionally useful.
> Something you should know: Plane masters effect ONLY the map their screen_loc is on.
For this reason, we are forced to generate whole copies of the set of plane masters with the proper screen_loc to make subviews look right
> Warning: Planes have some restrictions on valid values. They NEED to be whole integers, and they NEED to have an absolute value of `10000`.
This is to support `FLOAT_PLANE`, which lives out at the very edge of the 32 bit int range.
## Render Target/Source
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/render_target)
Render targets are a way of rendering one thing onto another. Not like vis_contents but in a literal sense ONTO.
The target object is given a `/atom/var/render_target` value, and anything that wishes to "take" it sets its `/atom/var/render_source` var to match.
When I say render onto, I mean it literally. It is like adding a second step in the rendering process.
You can even prepend * to the render target value to disable the initial render, and JUST render via the render source.
### Our Implementation
We use render targets to create "render relays" which can be used to link [plane masters](#planes) together and accomplish more advanced effects.
See [the renderer documentation](../../code/_onclick/hud/rendering/_render_readme.md) for visualizations for this.
> Of note: this linking behavior is accomplished by adding a screen object to link onto with a plane value of the desired PM we want to relay onto.
Layer is VERY important here, and will be set based off the layer of the last plane master.
This means plane order is not always the absolute order in which different plane masters render. Be careful of this.
> To edit and display planes and plane connections in game, run the `Edit/Debug Planes` command.
It will open a ui that allows you to view relay connections, plane master descriptions, and edit their values and effects.
## Multiz
- [Table of Contents](#table-of-contents)
- Reference: Hell of our own creation
I'm gonna explain how our multiz system works. But first I need to explain how it used to work.
What we used to do was take an openspace turf above, insert the turf below into its [vis_contents](#visual-contents), and call it a day.
This worked because everything on the map had the `VIS_INHERIT_PLANE` flag, and openspace had a plane master below most everything.
This meant the turf below looked as if it was offset, and everything was good.
Except not, for 2 reasons. One more annoying then the other.
- 1: It looked like dog doo-doo. This pattern destroyed the old planes of everything vis_contents'd, so effects/lighting/dropshadows broke bad.
- 2: I alluded to this earlier, but it totally breaks the `side_map` [map format](https://www.byond.com/docs/ref/#/world/var/map_format)
which I need for a massive resprite I'm helping with. This is because `side_map` changes how rendering order works,
going off "distance" from the front of the frame.
The issue here is it of course needs a way to group things that are even allowed to overlap, so it uses plane.
So when you squish everything down onto one plane, this of course breaks horribly and fucks you.
Ok then, old way's not workable. What will we do instead?
There's two problems here. The first is that all our plane masters come pre-ordered. We need a way to have lower and upper plane masters.
This is well... not trivial but not hard either. We essentially duplicate all our plane masters out like a tree, and link the head of the master rendering plate
to the openspace plane master one level up. More then doable.
SECOND problem. How do we get everything below to "land" on the right plane?
The answer to this is depressing but still true. We manually offset every single object on the map's plane based off its "z layer".
This includes any `overlays` or `vis_contents` with a unique plane value.
Mostly we require anything that sets the plane var to pass in a source of context, like a turf or something that can be used to derive a turf.
There are a few edge cases where we need to work in explicitly offsets, but those are much rarer.
This is stupid, but it's makable, and what we do.
## Mouse Opacity
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/mouse_opacity)
`/atom/var/mouse_opacity` tells clients how to treat mousing over the atom in question.
A value of 0 means it is completely ignored, no matter what.
A value of 1 means it is transparent/opaque based off the alpha of the icon at any particular part.
A value of 2 means it will count as opaque across ALL of the icon-state. All 32x32 (or whatever) of it.
We will on occasion use mouse opacity to expand hitboxes, but more often this is done with [vis_contents](#visual-contents),
or just low alpha pixels on the sprite.
> Note: Mouse opacity will only matter if the atom is being rendered on its own. [Overlays](#overlays)(and [images](#images))
will NOT work as expected with this.
However, you can still have totally transparent overlays. If you render them onto a [plane master](#planes) with the desired mouse opacity value
it will work as expected. This is because as a step of the rendering pipeline the overlay is rendered ONTO the plane master, and then the plane
master's effects are applied.
## Filters
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/filters)
Filters are a general purpose system for applying a limited set of shaders to a render.
These shaders run on the client's machine. This has upsides and downsides.
Upside: Very cheap for the server. Downside: Potentially quite laggy for the client.
Take care with these
Like I said, they're quite general purpose. There's a LOT of different effects, and many things you can do with them.
There's two things I want you to know about them, partly to put across their usefulness, and partially so you know their limitations.
On Usefulness. There are filters for alpha masking. They accept render sources as params, which means we can use say, one plane master
to mask out another. This + some fucking bullshit is how emissive lighting works.
Similarly there are filters for distortions. This is how we accomplish the grav anomaly effect, as it too accepts a render source as a param.
On limitations: Filters, like many things in BYOND, are stored in a snowflake list on `/atom`. This means if we want to manage them,
we will need our own management system. This is why we, unlike byond, use a wrapper around filters to set priorities and manage addition/removal.
This system has the potential to break animations and other such things. Take care.
> We have a debug tool for filters, called filterrific. You can access it in-game by vving an atom, going to the dropdown, and hitting `Edit Filters`
It'll let you add and tweak *most* of the filters in BYOND.
## Particles
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/{notes}/particles)
Particles are a system that allows you to attach "generators" to atoms on the world, and have them spit out little visual effects.
This is done by creating a subtype of the `/particles` type, and giving it the values you want.
At base BYOND only allows you to attach one particle emitter to any one `/atom`. We get around this using an atom inserted into the loc of some parent atom to follow.
The type is `/obj/effect/abstract/particle_holder`. Interacting with it's real simple, you just pass in the location to mirror, and the type to use.
It'll do the rest.
> We have a debug tool for particles. You can access it in-game by vving an atom, going to the dropdown, and hitting `Edit Particles`
It'll let you add and tweak the particles attached to that atom.
## Pixel Offsets
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/pixel_x)
This is a real simple idea and I normally wouldn't mention it, but I have something else I wanna discuss related to it, so I'ma take this chance.
`/atom/var/pixel_x/y/w/z` are variables that allow us to offset the DISPLAY position of an atom. This doesn't effect its position on the map mind,
just where it APPEARS to be. This is useful for many little effects, and some larger ones.
Anyway, onto why I'm mentioning this.
There are two "types" of each direction offset. There's the "real" offset (x/y) and the "fake" offset (w,z).
Real offsets will change both the visual position (IE: where it renders) and also the positional position (IE: where the renderer thinks they are).
Fake offsets only effect visual position.
This doesn't really matter for our current map format, but for anything that takes position into account when layering, like `side_map` or `isometric_map`
it matters a whole ton. It's kinda a hard idea to get across, but I hope you have at least some idea.
## Map Formats
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/world/var/map_format)
`/world/var/map_format` tells byond how to render things well, in the world.
You can get away with thinking of it as rendering rules really.
There are 4 types currently. Only 2 that are interesting to us, and one that's neat for historical purposes.
Most of them involve changing how layering works, from the standard [layers](#layers) and [planes](#planes) method.
There's a bit more detail here, not gonna go into it, stuff like [underlays](https://www.byond.com/docs/ref/#/atom/var/underlays) drawing under things. See [Understanding The Renderer](https://www.byond.com/docs/ref/#/{notes}/renderer)
> There is very technically more nuance here.
> In default rendering modes, byond will conflict break by using the thing that is highest in the contents list of its location. Or lowest. Don't remember.
### [`TOPDOWN_MAP`](https://www.byond.com/docs/ref/#/{notes}/topdown)
This is the default rendering format. What we used to use. It tells byond to render going off [plane](#planes) first, then [layer](#layers). There's a few edgecases involving big icons, but it's small peanuts.
### [`SIDE_MAP`](https://www.byond.com/docs/ref/#/{notes}/side) (Check [the main page](https://www.byond.com/docs/ref/#/world/var/map_format) too!)
Our current rendering format, used in preparation for moving more things to 3/4ths.
This is essentially [isometric mode](#isometric_map), but it only works up and down.
This does mean we get some very nice upsides, like being able to be both in front and behind an object without needing to do cursed splitting or modifying layers.
It does come with some downsides, Mostly the flickering and debugging issues described above.
The idea is the closer to the front of the screen something is, the higher its layering precedence is.
`pixel_y` + `y` tell the engine where something "is".
`/atom/var/bound_width`, `/atom/var/bound_height` and `/atom/var/bound_x/y` describe how big it is, which lets us in theory control what it tries to layer "against".
I'm not bothering with reference links because they are entirely unrelated.
An issue that will crop up with this map format is needing to manage the "visual" (how/where it renders) and physical (where it is in game) aspects of position and size.
Physical position tells the renderer how to layer things. Visual position and a combination of physical bounds (manually set) and visual bounds (inferred from other aspects of it. Sprite width/height, physical bounds, transforms, filters, etc) tell it what the sprite might be rendering OVER.
Here's where things get really annoying for us. We cannot change physical bound outside of increments of 32.
That's because we use [`LEGACY_MOVEMENT_MODE`](https://www.byond.com/docs/ref/#/world/var/movement_mode).
This means we're almost always doomed to getting weird layering, cascading out from the source of the issue in a way that is quite hard to debug.
Oh right I forgot to mention. Sorta touched on it with [Pixel offsets](#pixel-offsets).
- `pixel_x/y` change something's position in physical space. So if you shoot this real high it'll layer as if it is where it appears to be,
- `pixel_w/z` change something's VISUAL position. So you can LAYER as if you're at the bottom of the screen, but actually sit at the top.
You can use the two of these in combination to shift something physically, but not visually. Often useful for making things layer right.
Any change in position (`pixel_x/y`) will only come into effect after crossing `/world/var/icon_size` / 2 and will round to the nearest tile.
What follows is a description, from lummox, of how physical conflicts are handled.
From [this post](https://www.byond.com/forum/post/2656961#comment26050050)
For the physical position, Y increases upward relative to the screen; view position has Y going downward. The topological order between two icons goes like this, in order:
- 1) If the icons don't visually overlap, they don't care which goes first.
- 2) If the icons do not overlap on the physical Y axis, whichever one is further back is drawn first.
- 3) If one has a lower layer, it's drawn first.
- 4) If one's "near" edge (physical Y) is closer to the top of the screen than the other, it gets drawn first.
- 5) If one's center is left of the other, it's drawn first.
- 6) If the two physical bounds are identical, whichever icon came first in the original array order is drawn first.
- 7) All tiebreakers failed so the icons give up and don't care which goes first.
It is worth stating clearly. Things will only "visually overlap" if they sit on the same [plane](#planes).
This is NOT counting [relays](#render-targetsource)/[plane masters](#planes) (when a plane master is relayed onto something else, you can think of it like drawing the WHOLE PLANE MASTER)
It's not like drawing everything on the plane master with effects applied. It's like drawing to a sheet, and then drawing with that sheet again.
This also leads to issues, and means there are some effects that are entirely impossible to accomplish while using sidemap, without using horrible [image](#images) tricks.
This is frustrating.
One more thing. Big icons are fucked
From the byond reference
>If you use an icon wider than one tile, the "footprint" of the isometric icon (the actual map tiles it takes up) will always be a square. That is, if your normal tile size is 64 and you want to show a 128x128 icon, the icon is two tiles wide and so it will take up a 2×2-tile area on the map. The height of a big icon is irrelevant--any excess height beyond width/2 is used to show vertical features. To draw this icon properly, other tiles on that same ground will be moved behind it in the drawing order.
> One important warning about using big icons in isometric mode is that you should only do this with dense atoms. If part of a big mob icon covers the same tile as a tall building for instance, the tall building is moved back and it could be partially covered by other turfs that are actually behind it. A mob walking onto a very large non-dense turf icon would experience similar irregularities.
These can cause very annoying flickering. In fact, MUCH of how rendering works causes flickering. This is because we don't decide on a pixel by pixel case, the engine groups sprites up into a sort of rendering stack, unable to split them up.
This combined with us being unable to modify bounds means that if one bit of the view is conflicting.
If A wants to be above B and below C, but B wants to be below A and above C, we'll be unable to resolve the rendering properly, leading to flickering depending on other aspects of the layering.
This can just sort of spread. Very hard to debug.
### [`ISOMETRIC_MAP`](https://www.byond.com/docs/ref/#/{notes}/isometric)
Isometric mode, renders everything well, isometrically, biased to the north east. This gives the possibility for fake 3d, assuming you get things drawn properly.
It will render things in the foreground "last", after things in the background. This is the right way of thinking about it, it's not rendering things above or below, but in a layering order.
This is interesting mostly in the context of understanding [side map](#side_map-check-the-main-page-too), but we did actually run an isometric station for april fools once.
It was really cursed and flickered like crazy (which causes client lag). Fun as hell though.
The mode essentially overrides the layer/plane layering discussed before, and inserts new rules.
I wish I knew what those rules EXACTLY are, but I'm betting they're similar to [side map's](#side_map-check-the-main-page-too), and lummy's actually told me those.
Yes this is all rather poorly documented.
Similar to sidemap, we take physical position into account when deciding layering. In addition to its height positioning, we also account for width.
So both `pixel_y` and `pixel_x` can effect layering. `pixel_z` handles strictly visual y, and `pixel_w` handles x.
This has similar big icon problems to [sidemap](#side_map-check-the-main-page-too).
### [`TILED_ICON_MAP`](https://www.byond.com/docs/ref/#/{notes}/tiled-icons)
Legacy support for how byond rendering used to work. It essentially locked icon sizes to `/world/var/icon_size`, so if you tried to add an icon state larger then that,
it would be automatically broken down into smaller icon states, which you would need to manually display. Not something we need to care about
## Color
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/color)
`/atom/var/color` is another one like [pixel offsets](#pixel-offsets) where its most common use is really uninteresting, but it has an interesting
edge case I think is fun to discuss/important to know.
So let's get the base case out of the way shall we?
At base, you can set an atom's color to some `rrggbbaa` string (see [here](https://www.byond.com/docs/ref/#/{{appendix}}/html-colors)). This will shade every pixel on that atom to said color, and override its [`/atom/var/alpha`](https://www.byond.com/docs/ref/#/atom/var/alpha) value.
See [appearance flags](#appearance-flags) for how this effect can carry into overlays and such.
That's the boring stuff, now the fun shit.
> Before we get into this. `rr` is read as "red to red". `ag` is read as "alpha to green", etc. `c` is read as constant, and always has a value of 255
You can use the color variable to not just shade, but shift the colors of the atom.
It accepts a list (functionally a matrix if you know those) in the format `list(rr,br,gr,ar, rb,bb,gb,ab, rg,bg,gg,ag, ra,ba,ga,aa, cr,cb,cg,ca)`
This allows us to essentially multiply the color of each pixel by some other other. The values inserted in each multiple are not really bounded.
You can accomplish some really fun effects with this trick, it gives you a LOT of control over the color of a sprite or say, a [plane master](#planes)
and leads to some fun vfx.
> We have a debug tool for color matrixes. Just VV an atom, go to the VV dropdown and look for the `Edit Color as Matrix` entry.
It'll help visualize this process quite well. Play around with it, it's fun.
## Transform
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/atom/var/transform)
`/atom/var/transform` allows you to shift, contort, rotate and scale atoms visually.
This is done using a matrix, similarly to color matrixes. You will likely never need to use it manually however, since there are
helper procs for pretty much everything it can do.
> Note: the transform var is COPIED whenever you read it. So if you want to modify it, you will need to reset the atom var back to your changes.
It's not totally without explanation, and I figured you might wanna know about it. Not a whole lot more to say tho. Neat tool.
## Lighting
- [Table of Contents](#table-of-contents)
- Reference: Hell of our own creation
I wanted to take this chance to briefly explain the essentials of how our lighting system works.
Essentially, each tile has a lighting [overlay](#overlays) (technically an [underlay](https://www.byond.com/docs/ref/#/atom/var/underlays)
which is just overlays but drawn under).
Anyway, each underlay is a color gradient, with red green and blue and alpha in each corner.
Every "corner" (we call them lighting corners) on the map impacts the 4 colors that touch it.
This is done with color matrixes. This allows us to apply color and lighting in a smooth way, while only needing 1 overlay per tile.
There's a lot of nuance here, like how color is calculated and stored, and our overlay lighting system which is a whole other beast.
But it covers the core idea, the rest should be derivable, and you're more qualified to do so then me, assuming some bastard will come along to change it
and forget to update this file.
## Animate()
- [Table of Contents](#table-of-contents)
- [Reference Entry](https://www.byond.com/docs/ref/#/proc/animate)
The animate proc allows us to VISUALLY transition between different values on an appearance on clients, while in actuality
setting the values instantly on the servers.
This is quite powerful, and lets us do many things, like slow fades, shakes, hell even parallax using matrixes.
It doesn't support everything, and it can be quite temperamental especially if you use things like the flag that makes it work in
parallel. It's got a lot of nuance to it, but it's real useful. Works on filters and their variables too, which is AGGRESSIVELY useful.
Lets you give radiation glow a warm pulse, that sort of thing.
## GAGS
- [Table of Contents](#table-of-contents)
- Reference: Hell of our own creation
GAGS is a system of our own design built to support runtime creation of icons from split components.
This means recoloring is trivial, and bits of sprites can be combined and split easily. Very useful.
I won't go into much detail here, check out the [starter guide](https://hackmd.io/@tgstation/GAGS-Walkthrough) for more info if you're interested.
See also the hyperscale system for TGMC specific improvements
================================================
FILE: .github/actions/restore_or_install_byond/action.yml
================================================
# This action attempts to restore BYOND from a cache, or to install it otherwise.
name: Restore or Install BYOND
description: Attempts to restore a specified BYOND version from cache; if it can't, it installs it.
inputs:
major:
description: "The major BYOND version to install. Defaults to the BYOND_MAJOR specified in `dependencies.sh`."
required: false
type: string
minor:
description: "The minor BYOND version to install. Defaults to the BYOND_MINOR specified in `dependencies.sh`."
required: false
type: string
runs:
using: composite
steps:
- name: Configure BYOND version from inputs
if: ${{ inputs.major }}
shell: bash
run: |
echo "BYOND_MAJOR=${{ inputs.major }}" >> $GITHUB_ENV
echo "BYOND_MINOR=${{ inputs.minor }}" >> $GITHUB_ENV
- name: Configure BYOND version from dependencies.sh
if: ${{ !inputs.major }}
shell: bash
run: |
source dependencies.sh
echo "BYOND_MAJOR=$BYOND_MAJOR" >> $GITHUB_ENV
echo "BYOND_MINOR=$BYOND_MINOR" >> $GITHUB_ENV
# The use of `actions/cache/restore` and `actions/cache/save` here is deliberate, as we want to
# save the BYOND install to a cache as early as possible. If we used just `actions/cache`, it
# would only attempt to save the cache at the end of a job. This ensures that if a workflow run
# is cancelled, we already have a cache to restore from.
- name: Restore BYOND cache
id: restore_byond_cache
uses: actions/cache/restore@v4
with:
path: ~/BYOND
key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }}
- name: Install BYOND
if: ${{ !steps.restore_byond_cache.outputs.cache-hit }}
shell: bash
run: bash tools/ci/install_byond.sh
- name: Save BYOND cache
if: ${{ !steps.restore_byond_cache.outputs.cache-hit }}
uses: actions/cache/save@v4
with:
path: ~/BYOND
key: ${{ steps.restore_byond_cache.outputs.cache-primary-key }}
================================================
FILE: .github/actions/setup_node/action.yml
================================================
# This action is a wrapper around `actions/setup-node`, to use the version specified in
# `dependencies.sh`.
name: Setup Node
description: Install Node using the version specified in `dependencies.sh`; additionally, restores the Yarn cache if one exists
inputs:
restore-yarn-cache:
description: 'If `true`, restores the Yarn cache alongside installing node.'
required: false
type: boolean
default: false
runs:
using: composite
steps:
- name: Configure Node version
shell: bash
run: |
source dependencies.sh
echo "NODE_VERSION_REQUIRED=$NODE_VERSION_LTS" >> $GITHUB_ENV
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION_REQUIRED }}
cache: ${{ fromJSON(inputs.restore-yarn-cache) && 'yarn' || '' }}
cache-dependency-path: ${{ fromJSON(inputs.restore-yarn-cache) && 'tgui/yarn.lock' || '' }}
================================================
FILE: .github/alternate_byond_versions.txt
================================================
# This file contains extra tests to run for specific BYOND versions.
# This is useful for making sure we maintain compatibility with both older and newer versions,
# while still having our main tests run on a guaranteed pinned version.
# Format is version: map
# Example:
# 500.1337: runtimestation
================================================
FILE: .github/guides/EZDB.md
================================================
# Quickly setting up a development database with ezdb
While you do not need a database to code for tgmc, it is a prerequisite to many important features, especially on the admin side. Thus, if you are working in any code that benefits from it, it can be helpful to have one handy.
**ezdb** is a tool for quickly setting up an isolated development database. It will manage downloading MariaDB, creating the database, setting it up, and updating it when the code evolves. It is not recommended for use in production servers, but is perfect for quick development.
To run ezdb, go to `tools/ezdb`, and double-click on ezdb.bat. This will set up the database on port 1338, but you can configure this with `--port`. When it is done, you should be able to launch tgstation as normal and have database access. This runs on the same Python bootstrapper as things like the map merge tool, which can sometimes be flaky.
If you wish to delete the ezdb database, delete the `db` folder as well as `config/ezdb.txt`.
To update ezdb, run the script again. This will both look for any updates in the database changelog, as well as update your schema revision.
Contact Mothblocks if you face any issues in this process.
================================================
FILE: .github/max_required_byond_client.txt
================================================
# Highest byond client version allowed to be required by the byond world. Set to 9999 to disable the check flat out.
# If the compiled world requires clients use a version higher than this, ci will fail.
# for instance: if this is set to 514, and a pr uses a 515 client feature, an alert will trigger
# If you have to update this number for your pr, you should make it VERY CLEAR in the pr body that you did so.
# (Requiring clients update to connect to the game server is not something we like to spring on them with no notice,
# especially for beta builds where the pager/updater won't let them update without additional configuration.)
516
================================================
FILE: .github/workflows/auto_changelog.yml
================================================
# Creates an entry in html/changelogs automatically, to eventually be compiled by compile_changelogs
name: Auto Changelog
on:
pull_request_target:
types:
- closed
branches:
- master
permissions:
contents: write
jobs:
auto_changelog:
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Run auto changelog
uses: actions/github-script@v6
with:
script: |
const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js')
await processAutoChangelog({ github, context })
github-token: ${{secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/ci_suite.yml
================================================
name: CI Suite
on:
pull_request:
branches:
- master
- 'project/**'
merge_group:
branches:
- master
jobs:
run_linters:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Run Linters
runs-on: ubuntu-22.04
concurrency:
group: run_linters-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Restore SpacemanDMM cache
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }}
restore-keys: |
${{ runner.os }}-spacemandmm-
- name: Setup Node
uses: ./.github/actions/setup_node
with:
restore-yarn-cache: true
- name: Restore Bootstrap cache
uses: actions/cache@v4
with:
path: tools/bootstrap/.cache
key: ${{ runner.os }}-bootstrap-${{ hashFiles('tools/requirements.txt') }}
restore-keys: |
${{ runner.os }}-bootstrap-
- name: Restore Rust cache
uses: actions/cache@v4
with:
path: ~/.cargo
key: ${{ runner.os }}-rust-${{ hashFiles('tools/ci/ci_dependencies.sh')}}
restore-keys: |
${{ runner.os }}-rust-
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4.2.0
with:
dotnet-version: 9.x
- name: Install OpenDream
uses: robinraju/release-downloader@v1.9
with:
repository: "OpenDreamProject/OpenDream"
tag: "latest"
fileName: "DMCompiler_linux-x64.tar.gz"
extract: true
- name: Install Tools
run: |
pip3 install setuptools
bash tools/ci/install_spaceman_dmm.sh dreamchecker
bash tools/ci/install_ripgrep.sh
tools/bootstrap/python -c ''
- name: Give Linters A Go
id: linter-setup
run: ':'
- name: Run Grep Checks
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_grep.sh
- name: Ticked File Enforcement
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/tgmc_dme.json
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/unit_tests.json
- name: Run DreamChecker
if: steps.linter-setup.conclusion == 'success' && !cancelled()
shell: bash
run: ~/dreamchecker 2>&1 | bash tools/ci/annotate_dm.sh
- name: Run OpenDream
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: ./DMCompiler_linux-x64/DMCompiler tgmc.dme --suppress-unimplemented --define=CIBUILDING | bash tools/ci/annotate_od.sh
- name: Run Map Checks
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
tools/bootstrap/python -m mapmerge2.dmm_test
tools/bootstrap/python -m tools.maplint.source
- name: Run DMI Tests
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m dmi.test
- name: Check File Directories
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_filedirs.sh tgmc.dme
- name: Check Changelogs
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_changelogs.sh
- name: Check Miscellaneous Files
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: bash tools/ci/check_misc.sh
- name: Run TGUI Checks
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/build/build --ci lint tgui-test
compile_all_maps:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Compile Maps
needs: [collect_data]
runs-on: ubuntu-22.04
concurrency:
group: compile_all_maps-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: ./.github/actions/setup_node
- name: Restore BYOND from Cache
uses: ./.github/actions/restore_or_install_byond
- name: Compile All Maps
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS
- name: Check client Compatibility
uses: tgstation/byond-client-compatibility-check@v3
with:
dmb-location: tgmc.dmb
max-required-client-version: ${{needs.collect_data.outputs.max_required_byond_client}}
collect_data:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Collect data and setup caches for other tasks
runs-on: ubuntu-22.04
outputs:
maps: ${{ steps.map_finder.outputs.maps }}
alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }}
max_required_byond_client: ${{ steps.max_required_byond_client.outputs.max_required_byond_client }}
concurrency:
group: find_all_maps-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Find Maps
id: map_finder
run: |
echo "$(ls -mw0 _maps/*.json)" > maps_output.txt
sed -i -e s+_maps/+\"+g -e s+.json+\"+g maps_output.txt
echo "Maps: $(cat maps_output.txt)"
echo "maps={\"paths\":[$(cat maps_output.txt)]}" >> $GITHUB_OUTPUT
- name: Find Alternate Tests
id: alternate_test_finder
run: |
ALTERNATE_TESTS_JSON=$(jq -nRc '[inputs | capture("^(?<major>[0-9]+)\\.(?<minor>[0-9]+): (?<map>[^;]+);?(?<max_client_version>[0-9]+)?$")]' .github/alternate_byond_versions.txt)
- name: Collect byond client version configuration
id: max_required_byond_client
#the regex here does not filter out non-numbers because error messages about no input are less helpful then error messages about bad input (which includes the bad input)
run: |
echo "max_required_byond_client=$(grep -Ev '^[[:blank:]]{0,}#{1,}|^[[:blank:]]{0,}$' .github/max_required_byond_client.txt | tail -n1)" >> $GITHUB_OUTPUT
- name: Set up BYOND cache
uses: ./.github/actions/restore_or_install_byond
run_all_tests:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Integration Tests
needs: [collect_data]
strategy:
fail-fast: false
matrix:
map: ${{ fromJSON(needs.collect_data.outputs.maps).paths }}
concurrency:
group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }}
cancel-in-progress: true
uses: ./.github/workflows/run_integration_tests.yml
with:
map: ${{ matrix.map }}
max_required_byond_client: ${{ matrix.setup.max_client_version || needs.collect_data.outputs.max_required_byond_client }}
run_alternate_tests:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.collect_data.outputs.alternate_tests != '[]' )
name: Alternate Tests
needs: [collect_data]
strategy:
fail-fast: false
matrix:
setup: ${{ fromJSON(needs.collect_data.outputs.alternate_tests) }}
concurrency:
group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.setup.major }}.${{ matrix.setup.minor }}-${{ matrix.setup.map }}
cancel-in-progress: true
uses: ./.github/workflows/run_integration_tests.yml
with:
map: ${{ matrix.setup.map }}
major: ${{ matrix.setup.major }}
minor: ${{ matrix.setup.minor }}
max_required_byond_client: ${{needs.collect_data.outputs.max_required_byond_client}}
check_alternate_tests:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.collect_data.outputs.alternate_tests != '[]' )
name: Check Alternate Tests
needs: [run_alternate_tests]
runs-on: ubuntu-22.04
steps:
- run: echo Alternate tests passed.
================================================
FILE: .github/workflows/compile_changelogs.yml
================================================
name: Compile changelogs
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
compile:
name: "Compile changelogs"
runs-on: ubuntu-22.04
permissions:
contents: write
steps:
- name: "Check for ACTION_ENABLER secret and pass true to output if it exists to be checked by later steps"
id: value_holder
env:
ENABLER_SECRET: ${{ secrets.ACTION_ENABLER }}
run: |
unset SECRET_EXISTS
if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi
echo "ACTIONS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT
- name: "Setup python"
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: "Install deps"
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python -m pip install --upgrade pip
python -m pip install pyyaml
sudo apt-get install dos2unix
- name: "Checkout"
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/checkout@v4
with:
fetch-depth: 25
persist-credentials: false
- name: "Compile"
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python tools/ss13_genchangelog.py html/changelogs
- name: Commit
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
git config --local user.email "action@github.com"
git config --local user.name "Changelogs"
git pull origin master
git add html/changelogs
git commit -m "Automatic changelog compile [ci skip]" -a || true
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v2
if: env.APP_PRIVATE_KEY != '' && env.APP_ID != ''
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
env:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
APP_ID: ${{ secrets.APP_ID }}
- name: "Push"
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: ad-m/github-push-action@master
with:
github_token: ${{ steps.app-token-generation.outputs.token || secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/discord_pr_announce.yml
================================================
name: 'New PR Notification'
on:
pull_request_target:
types: [opened, reopened, closed]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: "Check for DISCORD_WEBHOOK"
id: secrets_set
env:
ENABLER_SECRET: ${{ secrets.DISCORD_WEBHOOK }}
run: |
unset SECRET_EXISTS
if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi
echo "SECRETS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT
- name: Send Discord notification
uses: tgstation/discord-notify@v3
if: >
steps.secrets_set.outputs.SECRETS_ENABLED &&
github.event.pull_request.author_association != 'FIRST_TIMER' &&
github.event.pull_request.author_association != 'FIRST_TIME_CONTRIBUTOR'
with:
webhook_url: ${{ secrets.DISCORD_WEBHOOK }}
title: ${{ github.event.pull_request.user.login }} - ${{ github.event.pull_request.title }}
message: "GET_ACTION"
include_image: false
show_author: false
avatar_url: https://raw.githubusercontent.com/tgstation/TerraGov-Marine-Corps/refs/heads/master/icons/tgmc_64.png
username: GitHub
title_url: "${{ github.event.pull_request.html_url }}"
================================================
FILE: .github/workflows/gbp.yml
================================================
name: Label and GBP
on:
pull_request_target:
types: [closed, opened, synchronize]
jobs:
# labeler must run before gbp because gbp calculates itself based on labels
labeler:
runs-on: ubuntu-latest
if: github.event.action == 'opened' || github.event.action == 'synchronize'
permissions:
pull-requests: write # to apply labels
issues: write # to apply labels
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run Auto Labeler
uses: actions/github-script@v7
with:
script: |
const { get_updated_label_set } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoLabel.js');
const new_labels = await get_updated_label_set({ github, context });
github.rest.issues.setLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: new_labels,
});
console.log(`Labels updated: ${new_labels}`);
================================================
FILE: .github/workflows/generate_documentation.yml
================================================
name: Generate documentation
on:
push:
branches:
- master
permissions:
contents: read
jobs:
generate_documentation:
permissions:
contents: write # for JamesIves/github-pages-deploy-action to push changes in repo
if: "!contains(github.event.head_commit.message, '[ci skip]')"
runs-on: ubuntu-20.04
concurrency: gen-docs
steps:
- uses: actions/checkout@v3
- name: Setup cache
uses: actions/cache@v3
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ secrets.CACHE_PURGE_KEY }}
- name: Install SpacemanDMM
run: bash tools/ci/install_spaceman_dmm.sh dmdoc
- name: Generate documentation
run: |
~/dmdoc
touch dmdoc/.nojekyll
- name: Deploy
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
BRANCH: gh-pages
CLEAN: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SINGLE_COMMIT: true
FOLDER: dmdoc
================================================
FILE: .github/workflows/remove_guide_comments.yml
================================================
# Removes guide comments from PRs when opened, so that when we merge them
# and reuse the pull request description, the clutter is not left behind
name: Remove guide comments
on:
pull_request_target:
types: [opened]
jobs:
remove_guide_comments:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Remove guide comments
uses: actions/github-script@v6
with:
script: |
const { removeGuideComments } = await import('${{ github.workspace }}/tools/pull_request_hooks/removeGuideComments.js')
await removeGuideComments({ github, context })
================================================
FILE: .github/workflows/round_id_linker.yml
================================================
name: "Round ID Linker"
on:
issues:
types: [opened]
jobs:
link_rounds:
runs-on: ubuntu-20.04
steps:
- uses: tgstation/round_linker@master
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/run_approval.yml
================================================
name: Automatic Approve Workflows
on:
schedule:
- cron: "*/10 * * * *"
jobs:
automatic-approve:
name: Automatic Approve Workflows
runs-on: ubuntu-20.04
steps:
- name: Automatic Approve
uses: mheap/automatic-approve-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
workflows: "ci_suite.yml"
dangerous_files: "build.bat"
================================================
FILE: .github/workflows/run_integration_tests.yml
================================================
# This is a reusable workflow to run integration tests on a single map.
# This is run for every single map in ci_suite.yml. You might want to edit that instead.
name: Run Integration Tests
on:
workflow_call:
inputs:
map:
required: true
type: string
major:
required: false
type: string
minor:
required: false
type: string
max_required_byond_client:
required: true
type: string
jobs:
run_integration_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup database
run: |
sudo systemctl start mysql
mysql -u root -proot -e 'CREATE DATABASE tg_ci;'
mysql -u root -proot tg_ci < SQL/tgmc-schema.sql
- name: Setup Node
uses: ./.github/actions/setup_node
- name: Install rust-g
run: |
bash tools/ci/install_rust_g.sh
- name: Restore BYOND from Cache
uses: ./.github/actions/restore_or_install_byond
with:
major: ${{ inputs.major }}
minor: ${{ inputs.minor }}
- name: Compile Tests
id: compile_tests
run: |
bash tools/ci/install_byond.sh
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -WError -NWTG0001
- name: Run Tests
run: |
source $HOME/BYOND/byond/bin/byondsetup
bash tools/ci/run_server.sh ${{ inputs.map }}
- name: Upload screenshot tests
if: always()
uses: actions/upload-artifact@v4
with:
name: test_artifacts_${{ inputs.map }}_${{ inputs.major }}_${{ inputs.minor }}
path: data/screenshots_new/
retention-days: 1
- name: Check client Compatibility
if: always() && steps.compile_tests.outcome == 'success'
uses: tgstation/byond-client-compatibility-check@v3
with:
dmb-location: tgmc.dmb
max-required-client-version: ${{inputs.max_required_byond_client}}
================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests
on:
schedule:
- cron: "0 0 * * *"
jobs:
stale:
runs-on: ubuntu-20.04
steps:
- uses: actions/stale@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-pr-message: "This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 3 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself"
days-before-stale: 7
days-before-close: 3
stale-pr-label: 'Stale'
exempt-pr-label: 'RED LABEL'
================================================
FILE: .github/workflows/update_tgs_dmapi.yml
================================================
name: Update TGS DMAPI
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
update-dmapi:
runs-on: ubuntu-24.04
name: Update the TGS DMAPI
permissions:
contents: write
pull-requests: write
steps:
- name: Clone
uses: actions/checkout@v6
- name: Branch
run: |
git branch -f tgs-dmapi-update
git checkout tgs-dmapi-update
git reset --hard master
- name: Apply DMAPI update
uses: tgstation/tgs-dmapi-updater@v2
id: dmapi-update
with:
header-path: "code/__DEFINES/tgs.dm"
library-path: "code/modules/tgs"
- name: Commit and Push
continue-on-error: true
run: |
git config user.name "tgstation-server"
git config user.email "tgstation-server@users.noreply.github.com"
git add .
git commit -m 'Update TGS DMAPI'
git push -f -u origin tgs-dmapi-update
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v2
if: env.APP_PRIVATE_KEY != '' && env.APP_ID != ''
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
env:
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
APP_ID: ${{ secrets.APP_ID }}
- name: Create Pull Request
uses: repo-sync/pull-request@v2
if: ${{ success() }}
with:
source_branch: "tgs-dmapi-update"
destination_branch: "master"
pr_title: "Automatic TGS DMAPI Update"
pr_body: "This pull request updates the TGS DMAPI to the latest version. Please note any changes that may be breaking or unimplemented in your codebase by checking what changes are in the definitions file: code/__DEFINES/tgs.dm before merging.\n\n${{ steps.dmapi-update.outputs.release-notes }}"
pr_label: "Tools"
pr_allow_empty: false
github_token: ${{ steps.app-token-generation.outputs.token || secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
#ignore misc BYOND files
Thumbs.db
*.log
*.int
*.rsc
*.mdme
*.mdme.*
*.m.dme
*.test.dme
*.dmb
*.lk
*.backup
*.dmm.before
*.cache
*.pyc
data/
cfg/
tmp/
/cache/**/*
tools/Runtime Condenser/Input.txt
tools/Runtime Condenser/Output.txt
tools/MapDaemon/logs/*.txt
#Visual studio stuff
/.vs/**/*
*.vscode/*
!/.vscode/extensions.json
!/.vscode/launch.json
!/.vscode/tasks.json
tools/BalanceTool/raw.json
# Ignore compiled linux libs in the root folder, e.g. librust_g.so
/*.so
# byond-tracy, we intentionally do not ship this and do not want to maintain it
prof.dll
libprof.so
#extra map stuff
/_maps/**/backup/
/_maps/templates.dm
# DM Doc ignores
dmdoc/*
tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug/.NETFramework,Version=v4.0,Profile=Client.AssemblyAttributes.cs
tools/hyperscale_converter/output/*
# JavaScript tools
**/node_modules
# named byond versions config
/tools/build/dm_versions.json
# From /tools/define_sanity/check.py - potential output file that we load onto the user's machine that we don't want to have committed.
define_sanity_output.txt
# ezdb
/db/
/config/ezdb.txt
# Local overrides - you can use this to change the config for your dev environment without worrying about committing it
/config/dev_overrides.txt
# Running OpenDream locally
tgmc.json
rust_g64.dll
================================================
FILE: .prettierignore
================================================
# We don't want prettier to run on anything outside of the TGUI folder, so we have to do this.
/*
# We want it to run into the TGUI folder, however.
!/tgui
================================================
FILE: .tgs4.yml
================================================
static_files:
- name: config
populate: true
- name: data
linux_scripts:
PreCompile.sh: tools/tgs4_scripts/PreCompile.sh
windows_scripts:
PreCompile.bat: tools/tgs4_scripts/PreCompile.bat
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"arcanis.vscode-zipfs",
"dbaeumer.vscode-eslint",
"donkie.vscode-tgstation-test-adapter",
"stylemistake.auto-comment-blocks",
"oderwat.indent-rainbow",
"platymuus.dm-langclient",
"editorconfig.editorconfig",
"eamodio.gitlens",
"anturk.dmi-editor",
"sukumo28.wav-preview",
"esbenp.prettier-vscode"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker",
"preLaunchTask": "Build All",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon",
"preLaunchTask": "Build All",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"name": "Debug External Libraries",
"type": "cppvsdbg",
"request": "launch",
"program": "${command:dreammaker.returnDreamDaemonPath}",
"cwd": "${workspaceRoot}",
"args": [
"${command:dreammaker.getFilenameDmb}",
"-trusted"
],
"preLaunchTask": "Build All"
},
{
"type": "opendream",
"request": "launch",
"name": "Launch OpenDream (requires extension, 64 bit rustg, and an SS14 account)",
"preLaunchTask": "OpenDream: compile ${command:CurrentDME}",
"json_path": "${workspaceFolder}/${command:CurrentJson}"
}
]
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"type": "process",
"command": "tools/build/build",
"windows": {
"command": ".\\tools\\build\\build.bat"
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All"
},
{
"type": "process",
"command": "tools/build/build",
"args": ["-DLOWMEMORYMODE"],
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DLOWMEMORYMODE"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build"
},
"dependsOn": "dm: reparse",
"label": "Build All (low memory mode)"
},
{
"type": "dreammaker",
"dme": "tgmc.dme",
"problemMatcher": [
"$dreammaker"
],
"group": "build",
"label": "dm: build - tgmc.dme"
},
{
"command": "${command:dreammaker.reparse}",
"group": "build",
"label": "dm: reparse"
},
{
"type": "shell",
"command": "bin/tgui-build",
"windows": {
"command": ".\\bin\\tgui-build.cmd"
},
"problemMatcher": [
"$tsc",
"$eslint-stylish"
],
"group": "build",
"label": "tgui: build"
},
{
"type": "shell",
"command": "bin/tgui-dev",
"windows": {
"command": ".\\bin\\tgui-dev.cmd"
},
"problemMatcher": [
"$tsc",
"$eslint-stylish"
],
"group": "build",
"label": "tgui: dev server"
},
{
"type": "shell",
"command": "bin/tgui-bench",
"windows": {
"command": ".\\bin\\tgui-bench.cmd"
},
"problemMatcher": [
"$tsc",
"$eslint-stylish"
],
"group": "build",
"label": "tgui: bench"
},
{
"type": "shell",
"command": "bin/tgui-sonar",
"windows": {
"command": ".\\bin\\tgui-sonar.cmd"
},
"problemMatcher": [
"$tsc",
"$eslint-stylish"
],
"group": "build",
"label": "tgui: sonar"
},
{
"type": "shell",
"command": "bin/tgfont",
"windows": {
"command": ".\\bin\\tgfont.cmd"
},
"problemMatcher": [
"$tsc",
"$eslint-stylish"
],
"group": "build",
"label": "tgui: rebuild tgfont"
}
]
}
================================================
FILE: BUILD.cmd
================================================
@echo off
call "%~dp0\tools\build\build.bat" --wait-on-error build %*
================================================
FILE: CONTRIBUTING.md
================================================
# CONTRIBUTING
1. [Reporting Issues](#reporting-issues)
2. [Introduction](#introduction)
3. [Getting Started](#getting-started)
4. [Meet the Team](#meet-the-team)
1. [Headcoder](#headcoder)
2. [Art Director](#art-director)
3. [Maintainers](#maintainers)
4. [Map Maintainers](#map-maintainers)
5. [Walance Maintainers](#walance-maintainer)
5. [Specifications](#specifications)
1. [Code specifications](#code-specifications)
2. [Map specifications](#map-specifications)
6. [Pull Request Process](#pull-request-process)
7. [Porting features/sprites/sounds/tools from other codebases](#porting-featuresspritessoundstools-from-other-codebases)
8. [Banned content](#banned-content)
9. [Content that requires prior approval](#content-that-requires-prior-approval)
10. [Rust in TGMC](#rust)
11. [A word on Git](#a-word-on-git)
#### Misc
- [Quickly setting up a development database with ezdb](./guides/EZDB.md)
## Reporting Issues
See [this page](https://github.com/tgstation/TerraGov-Marine-Corps/issues/new?template=bug_report.md) for a guide and format to issue reports.
## Introduction
Hello and welcome to the TGMC contributing page. You are here because you are curious or interested in contributing - thank you! Everyone is free to contribute to this project as long as they follow the simple guidelines and specifications below. We strive to maintain long-term code stability and maintainability, and to do that, we need all pull requests to hold up to those specifications. It's in everyone's best interests - including yours! - if the same bug doesn't have to be fixed twice because of duplicated code.
First things first, we want to make it clear how you can contribute (if you've never contributed before), as well as what the structure of the team and the processes are, to avoid any unpleasant surprises if your pull request is closed for a reason you didn't foresee.
## Getting Started
We don't have a strict list of goals and features to add; we instead allow freedom for contributors to suggest and create their ideas for the game. That doesn't mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful starting guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure.
If you want to contribute the first thing you'll need to do is set up Git and clone the repository. Check out [this](https://tgstation13.org/wiki/TGMC:Guide_to_contributing) helpful guide.
We have a [list of guides on the wiki](http://www.tgstation13.org/wiki/index.php/Guides#Development_and_Contribution_Guides) that will help you get started contributing to this codebase with Git and Dream Maker. For beginners, it is recommended you work on small projects like bugfixes at first. If you need help learning to program in BYOND, check out this [repository of resources](http://www.byond.com/developer/articles/resources).
You can of course, as always, ask for help at #coding channel on our [Discord](https://discord.gg/2dFpfNE). We're just here to have fun and help out, so please don't expect professional support. If you're eager to learn we'll gladly hold your hand during the first steps.
## Meet the Team
### Headcoder
The Headcoder is responsible for overall quality of the code and has the veto power here. In addition they are also able to appoint maintainers.
### Art Director
The Art Director controls sprites and aesthetic that get into the game. While sprites for brand-new additions are generally accepted without harsh standards, modified current art assets fall to the Art Director, who can decide whether or not a sprite tweak is both merited and a suitable replacement.
They also control the general "perspective" of the game - how sprites should generally look, especially the angle from which they're viewed. An example of this is the [3/4 perspective](http://static.tvtropes.org/pmwiki/pub/images/kakarikovillage.gif), which is a bird's eye view from above the object being viewed.
### Maintainers
Maintainers are the code quality control. If a proposed pull request doesn't meet [code specifications](#code-specifications), they can request a change, and if a proper reason is not provided or the request becomes stale, they may close it. Maintainers are required to give a reason for closing pull requests.
Maintainers can revert changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
They also control the design and balance directions, and may reject pull requests whose effects are deemed detrimental to the quality of the game.
#### Map Maintainers
Map maintainers verify that all changes meet the [map specifications](#map-specifications). They also make sure that maps are readily maintainable and maintain a coherent visual style that's easily understandable by new mappers.
### Walance Maintainers
They work with the maintainers to help advise them on concepts and ideas. They review balance and feature PRs
## Specifications
### Code specifications
As mentioned before, you are expected to follow these specifications in order to make everyone's lives easier. It'll save both your time and ours, by making sure you don't have to make any changes and we don't have to ask you to.
#### Object Oriented Code
As BYOND's Dream Maker (henceforth "DM") is an object-oriented language, code must be object-oriented when possible in order to be more flexible when adding content to it. If you don't know what "object-oriented" means, we highly recommend you do some light research to grasp the basics.
#### All BYOND paths must contain the full path
(i.e. absolute pathing)
DM will allow you nest almost any type keyword into a block, such as:
```DM
datum
datum1
var
varname1 = 1
varname2
static
varname3
varname4
proc
proc1()
code
proc2()
code
datum2
varname1 = 0
proc
proc3()
code
proc2()
..()
code
```
The use of this is not allowed in this project as it makes finding definitions via full text searching next to impossible. The only exception is the variables of an object may be nested to the object, but must not nest further.
The previous code made compliant:
```DM
/datum/datum1
var/varname1
var/varname2
var/static/varname3
var/static/varname4
/datum/datum1/proc/proc1()
code
/datum/datum1/proc/proc2()
code
/datum/datum1/datum2
varname1 = 0
/datum/datum1/datum2/proc/proc3()
code
/datum/datum1/datum2/proc2()
. = ..()
code
```
#### Preserve return values
```
/datum/proc/proc1()
code
return something
/datum/datum1/proc1()
..()
```
This wouldn't preserve the return value of the parent proc, instead, you should do this.
```
/datum/proc/proc1()
code
return something
/datum/datum1/proc1()
. = ..()
```
`.` is the current return value of the current proc.
If you have the parent call at the end of the proc, use `return ..()` instead, it's slightly faster and more readable.
#### No overriding type safety checks
The use of the : operator to override type safety checks is not allowed. You must cast the variable to the proper type.
#### Type paths must begin with a /
eg: `/datum/thing`, not `datum/thing`
#### Type paths must be snake case
eg: `/datum/blue_bird`, not `/datum/BLUEBIRD` or `/datum/BlueBird` or `/datum/Bluebird` or `/datum/blueBird`
#### Datum type paths must began with "datum"
In DM, this is optional, but omitting it makes finding definitions harder.
#### Do not use text/string based type paths
It is rarely allowed to put type paths in a text format, as there are no compile errors if the type path no longer exists. Here is an example:
```DM
//Good
var/path_type = /obj/item/baseball_bat
//Bad
var/path_type = "/obj/item/baseball_bat"
```
#### Use var/name format when declaring variables
While DM allows other ways of declaring variables, this one should be used for consistency.
#### Tabs, not spaces
You must use tabs to indent your code, NOT SPACES.
(You may use spaces to align something, but you should tab to the block level first, then add the remaining spaces)
#### Argument naming
Do not use the `var/` prefix in arguments, it is already implied. Also if the argument will always be of a certain type, make the path reflect it. `mob/user` or `list/L` for example.
#### The use of src
`src.` is implied and the only place where using it makes sense is if you have an argument of the same name as one of the variables, for example:
```
/datum/datum1
var/something
/datum/datum1/New(something)
src.something = something
```
#### No hacky code
Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is **_no_** other option. "I couldn't immediately think of a proper way so thus there must be no other option" is likely not gonna cut it. If you can't think of anything else, say that outright and admit that you need help with it. Maintainers and helpful contributors exist for exactly that reason.
You can avoid hacky code by using object-oriented methodologies, such as overriding a function (called "procs" in DM) or sectioning code into functions and then overriding them as required.
#### No duplicated code
Copying code from one place to another may be suitable for small, short-time projects, but this is a long-term project and highly discourages this.
Instead you can use object orientation, or simply placing repeated code in a function, to obey this specification easily.
#### Startup/Runtime tradeoffs with lists and the "hidden" init proc
First, read the comments in [this BYOND thread](http://www.byond.com/forum/?post=2086980&page=2#comment19776775), starting where the link takes you.
There are two key points here:
1. Defining a list in the variable's definition calls a hidden proc - init. If you have to define a list at startup, do so in New() (or preferably Initialize()) and avoid the overhead of a second call (Init() and then New())
2. It also consumes more memory to the point where the list is actually required, even if the object in question may never use it!
Remember: Although this tradeoff makes sense in many cases, it doesn't cover them all. Think carefully about your addition before deciding if you need to use it.
#### Prefer `Initialize()` over `New()` for atoms
Our game controller is pretty good at handling long operations and lag, but it can't control what happens when the map is loaded, which calls `New` for all atoms on the map. If you're creating a new atom, use the `Initialize` proc to do what you would normally do in `New`. This cuts down on the number of proc calls needed when the world is loaded.
While we normally encourage (and in some cases, even require) bringing out of date code up to date when you make unrelated changes near the out of date code, that is not the case for `New` -> `Initialize` conversions. These systems are generally more dependant on parent and children procs so unrelated random conversions of existing things can cause bugs that take months to figure out.
##### `Initialize()` must be used properly
`Initialize()` must always call the parent proc `..()` to ensure the atom initializes and must return a valid value either by using `. = ..()` or `return ..()` or `return INITIALIZE_HINT_*`
This ensures atoms initialize correctly and there are not false positives of failures.
You also must not use `qdel(src)` inside `Initialize()`, use `return INITIALIZE_HINT_QDEL` instead.
#### Type checks vs Overrides
It is preferable to override a proc instead of using `istype()` checks for special behaviour for subtypes.
eg;
```DM
/mob/proc/do_a_thing()
if(istype(src, /mob/subtype))
do something different
else
do something
```
Instead of this you should;
```DM
/mob/proc/do_a_thing()
do something
/mob/subtype/do_a_thing()
do something different
```
#### Proc arguments
Keep typed arguments consistent across redefinitions, based on what minimal type the proc is called with rather than the actual type of the passed argument.
```DM
/atom/proc/do_a_thing(mob/user)
do something
/atom/movable/do_a_thing(mob/living/carbon/human/user)
do something
```
Instead of this you should do it like this:
```DM
/atom/proc/do_a_thing(mob/user)
do something
/atom/movable/do_a_thing(mob/user)
if !(istype(user, /mob/living/carbon/human))
return
var/mob/living/carbon/human/H = user
do something
```
#### No magic numbers or strings
This means stuff like having a "mode" variable for an object set to "1" or "2" with no clear indicator of what that means. Make these #defines with a name that more clearly states what it's for. For instance:
```DM
/datum/proc/do_the_thing(thing_to_do)
switch(thing_to_do)
if(1)
(...)
if(2)
(...)
```
There's no indication of what "1" and "2" mean! Instead, you'd do something like this:
```DM
#define DO_THE_THING_REALLY_HARD 1
#define DO_THE_THING_EFFICIENTLY 2
/datum/proc/do_the_thing(thing_to_do)
switch(thing_to_do)
if(DO_THE_THING_REALLY_HARD)
(...)
if(DO_THE_THING_EFFICIENTLY)
(...)
```
This is clearer and enhances readability of your code! Get used to doing it!
#### Control statements
(if, while, for, etc)
- All control statements must not contain code on the same line as the statement (`if (blah) return`)
- All control statements comparing a variable to a number should use the formula of `thing` `operator` `number`, not the reverse (eg: `if (count <= 10)` not `if (10 >= count)`)
#### Use early return
Do not enclose a proc in an if-block when returning on a condition is more feasible
This is bad:
```DM
/datum/datum1/proc/proc1()
if(thing1)
if(!thing2)
if(thing3 == 30)
do stuff
```
This is good:
```DM
/datum/datum1/proc/proc1()
if(!thing1)
return
if(thing2)
return
if(thing3 != 30)
return
do stuff
```
This prevents nesting levels from getting deeper then they need to be.
#### Use our time defines
The codebase contains some defines which will automatically multiply a number by the correct amount to get a number in deciseconds. Using these is preffered over using a literal amount in deciseconds.
The defines are as follows:
- SECONDS
- MINUTES
- HOURS
This is bad:
```DM
/datum/datum1/proc/proc1()
if(do_after(mob, 15))
mob.dothing()
```
This is good:
```DM
/datum/datum1/proc/proc1()
if(do_after(mob, 1.5 SECONDS))
mob.dothing()
```
#### Getters and setters
- Avoid getter procs. They are useful tools in languages with that properly enforce variable privacy and encapsulation, but DM is not one of them. The upfront cost in proc overhead is met with no benefits, and it may tempt to develop worse code.
This is bad:
```DM
/datum/datum1/proc/simple_getter()
return gotten_variable
```
Prefer to either access the variable directly or use a macro/define.
- Make usage of variables or traits, set up through condition setters, for a more maintainable alternative to compex and redefined getters.
These are bad:
```DM
/datum/datum1/proc/complex_getter()
return condition ? VALUE_A : VALUE_B
/datum/datum1/child_datum/complex_getter()
return condition ? VALUE_C : VALUE_D
```
This is good:
```DM
/datum/datum1
var/getter_turned_into_variable
/datum/datum1/proc/set_condition(new_value)
if(condition == new_value)
return
condition = new_value
on_condition_change()
/datum/datum1/proc/on_condition_change()
getter_turned_into_variable = condition ? VALUE_A : VALUE_B
/datum/datum1/child_datum/on_condition_change()
getter_turned_into_variable = condition ? VALUE_C : VALUE_D
```
#### Avoid unnecessary type checks and obscuring nulls in lists
Typecasting in `for` loops carries an implied `istype()` check that filters non-matching types, nulls included. The `AS` macro can be used to skip the check, it uses `as()` on byond versions that the proper `as anything` was broken.
If we know the list is supposed to only contain the desired type then we want to skip the check not only for the small optimization it offers, but also to catch any null entries that may creep into the list.
Nulls in lists tend to point to improperly-handled references, making hard deletes hard to debug. Generating a runtime in those cases is more often than not positive.
This is bad:
```DM
var/list/bag_of_atoms = list(new /obj, new /mob, new /atom, new /atom/movable, new /atom/movable)
var/highest_alpha = 0
for(var/atom/thing in bag_of_atoms)
if(thing.alpha <= highest_alpha)
continue
highest_alpha = thing.alpha
```
This is good:
```DM
var/list/bag_of_atoms = list(new /obj, new /mob, new /atom, new /atom/movable, new /atom/movable)
var/highest_alpha = 0
for(var/atom/thing AS in bag_of_atoms)
if(thing.alpha <= highest_alpha)
continue
highest_alpha = thing.alpha
```
For more information on istypeless `for` loops check [this other section.](#istypeless-for-loops)
#### Develop Secure Code
- Player input must always be escaped safely, we recommend you use stripped_input in all cases where you would use input. Essentially, just always treat input from players as inherently malicious and design with that use case in mind
- Calls to the database must be escaped properly - use sanitizeSQL to escape text based database entries from players or admins, and isnum() for number based database entries from players or admins.
- All calls to topics must be checked for correctness. Topic href calls can be easily faked by clients, so you should ensure that the call is valid for the state the item is in. Do not rely on the UI code to provide only valid topic calls, because it won't.
- Information that players could use to metagame (that is, to identify round information and/or antagonist type via information that would not be available to them in character) should be kept as administrator only.
- It is recommended as well you do not expose information about the players - even something as simple as the number of people who have readied up at the start of the round can and has been used to try to identify the round type.
- Where you have code that can cause large-scale modification and _FUN_, make sure you start it out locked behind one of the proper admin permissions - ask if you're not sure.
#### Files
- Because runtime errors do not give the full path, try to avoid having files with the same name across folders.
- File names and directory names should not contain upper case letters, spaces or any character that would require escaping in a URI.
- Files and path accessed and referenced by code above simply being #included should be strictly lowercase to avoid issues on filesystems where case matters.
#### SQL
- Do not use the shorthand SQL insert format (where no column names are specified) because it unnecessarily breaks all queries on minor column changes and prevents using these tables for tracking outside related info such as in a connected site/forum.
- All changes to the database's layout(schema) must be specified in the database changelog in SQL, as well as reflected in the schema files
- Any time the schema is changed the `schema_revision` table and `DB_MAJOR_VERSION` or `DB_MINOR_VERSION` defines must be incremented.
- Queries must never specify the database, be it in code, or in text files in the repo.
- Primary keys are inherently immutable and you must never do anything to change the primary key of a row or entity. This includes preserving auto increment numbers of rows when copying data to a table in a conversion script. No amount of bitching about gaps in ids or out of order ids will save you from this policy.
- The ttl for data from the database is 10 seconds. You must have a compelling reason to store and reuse data for longer then this.
- Do not write stored and transformed data to the database, instead, apply the transformation to the data in the database directly.
- ie: SELECTing a number from the database, doubling it, then updating the database with the doubled number. If the data in the database changed between step 1 and 3, you'll get an incorrect result. Instead, directly double it in the update query. `UPDATE table SET num = num*2` instead of `UPDATE table SET num = [num]`.
- if the transformation is user provided (such as allowing a user to edit a string), you should confirm the value being updated did not change in the database in the intervening time before writing the new user provided data by checking the old value with the current value in the database, and if it has changed, allow the user to decide what to do next.
#### User Interfaces
- All new player-facing user interfaces must use TGUI.
- Raw HTML is permitted for admin and debug UIs.
- Documentation for TGUI can be found at:
- [tgui/README.md](../tgui/README.md)
- [tgui/tutorial-and-examples.md](../tgui/docs/tutorial-and-examples.md)
#### Signal Handlers
All procs that are registered to listen for signals using `RegisterSignal()` must contain at the start of the proc `SIGNAL_HANDLER` eg;
```
/type/path/proc/signal_callback()
SIGNAL_HANDLER
// rest of the code
```
This is to ensure that it is clear the proc handles signals and turns on a lint to ensure it does not sleep.
Any sleeping behaviour that you need to perform inside a `SIGNAL_HANDLER` proc must be called asynchronously (e.g. with `INVOKE_ASYNC()`) or be redone to work asynchronously.
#### Enforcing parent calling
When adding new signals to root level procs, eg;
```
/atom/proc/setDir(newdir)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
```
The `SHOULD_CALL_PARENT(TRUE)` lint should be added to ensure that overrides/child procs call the parent chain and ensure the signal is sent.
#### Use descriptive and obvious names
Optimize for readability, not writability. While it is certainly easier to write `M` than `victim`, it will cause issues down the line for other developers to figure out what exactly your code is doing, even if you think the variable's purpose is obvious.
##### Don't use abbreviations
Avoid variables like C, M, and H. Prefer names like "user", "victim", "weapon", etc.
```dm
// What is M? The user? The target?
// What is A? The target? The item?
/proc/use_item(mob/M, atom/A)
// Much better!
/proc/use_item(mob/user, atom/target)
```
Unless it is otherwise obvious, try to avoid just extending variables like "C" to "carbon"--this is slightly more helpful, but does not describe the _context_ of the use of the variable.
##### Naming things when typecasting
When typecasting, keep your names descriptive:
```dm
var/mob/living/living_target = target
var/mob/living/carbon/carbon_target = living_target
```
Of course, if you have a variable name that better describes the situation when typecasting, feel free to use it.
Note that it's okay, semantically, to use the same variable name as the type, e.g.:
```dm
var/atom/atom
var/client/client
var/mob/mob
```
Your editor may highlight the variable names, but BYOND, and we, accept these as variable names:
```dm
// This functions properly!
var/client/client = CLIENT_FROM_VAR(usr)
// vvv this may be highlighted, but it's fine!
client << browse(...)
```
##### Name things as directly as possible
`was_called` is better than `has_been_called`. `notify` is better than `do_notification`.
##### Avoid negative variable names
`is_flying` is better than `is_not_flying`. `late` is better than `not_on_time`.
This prevents double-negatives (such as `if (!is_not_flying)` which can make complex checks more difficult to parse.
##### Exceptions to variable names
Exceptions can be made in the case of inheriting existing procs, as it makes it so you can use named parameters, but _new_ variable names must follow these standards. It is also welcome, and encouraged, to refactor existing procs to use clearer variable names.
Naming numeral iterator variables `i` is also allowed, but do remember to [Avoid unnecessary type checks and obscuring nulls in lists](#avoid-unnecessary-type-checks-and-obscuring-nulls-in-lists), and making more descriptive variables is always encouraged.
```dm
// Bad
for (var/datum/reagent/R AS in reagents)
// Good
for (var/datum/reagent/deadly_reagent AS in reagents)
// Allowed, but still has the potential to not be clear. What does `i` refer to?
for (var/i in 1 to 12)
// Better
for (var/month in 1 to 12)
// Bad, only use `i` for numeral loops
for (var/i in reagents)
```
#### Icons are for image manipulation and defining an obj's `.icon` var, appearances are for everything else.
BYOND will allow you to use a raw icon file or even an icon datum for underlays, overlays, and what not (you can even use strings to refer to an icon state on the current icon). The issue is these get converted by BYOND to appearances on every overlay insert or removal involving them, and this process requires inserting the new appearance into the global list of appearances, and informing clients about them.
Converting them yourself to appearances and storing this converted value will ensure this process only has to happen once for the lifetime of the round. Helper functions exist to do most of the work for you.
Bad:
```dm
/obj/machine/update_overlays(blah)
if (stat & broken)
add_overlay(icon(broken_icon)) //this icon gets created, passed to byond, converted to an appearance, then deleted.
return
if (is_on)
add_overlay("on") //also bad, the converstion to an appearance still has to happen
else
add_overlay(iconstate2appearance(icon, "off")) //this might seem alright, but not storing the value just moves the repeated appearance generation to this proc rather then the core overlay management. It would only be acceptable (and to some degree perferred) if this overlay is only ever added once (like in init code)
```
Good:
```dm
/obj/machine/update_overlays(var/blah)
var/static/on_overlay
var/static/off_overlay
var/static/broken_overlay
if(isnull(on_overlay)) //static vars initialize with global variables, meaning src is null and this won't pass integration tests unless you check.
on_overlay = iconstate2appearance(icon, "on")
off_overlay = iconstate2appearance(icon, "off")
broken_overlay = icon2appearance(broken_icon)
if (stat & broken)
add_overlay(broken_overlay)
return
if (is_on)
add_overlay(on_overlay)
else
add_overlay(off_overlay)
...
```
Note: images are appearances with extra steps, and don't incur the overhead in conversion.
#### Do not abuse associated lists.
Associated lists that could instead be variables or statically defined number indexed lists will use more memory, as associated lists have a 24 bytes per item overhead (vs 8 for lists and most vars), and are slower to search compared to static/global variables and lists with known indexes.
Bad:
```dm
/obj/machine/update_overlays(var/blah)
var/static/our_overlays
if(isnull(our_overlays)
our_overlays = list("on" = iconstate2appearance(overlay_icon, "on"), "off" = iconstate2appearance(overlay_icon, "off"), "broken" = iconstate2appearance(overlay_icon, "broken"))
if (stat & broken)
add_overlay(our_overlays["broken"])
return
...
```
Good:
```dm
#define OUR_ON_OVERLAY 1
#define OUR_OFF_OVERLAY 2
#define OUR_BROKEN_OVERLAY 3
/obj/machine/update_overlays(var/blah
var/static/our_overlays
if(isnull(our_overlays)
our_overlays = list(iconstate2appearance(overlay_icon, "on"), iconstate2appearance(overlay_icon, "off"), iconstate2appearance(overlay_icon, "broken"))
if (stat & broken)
add_overlay(our_overlays[OUR_BROKEN_OVERLAY])
return
...
#undef OUR_ON_OVERLAY
#undef OUR_OFF_OVERLAY
#undef OUR_BROKEN_OVERLAY
```
Storing these in a flat (non-associated) list saves on memory, and using defines to reference locations in the list saves CPU time searching the list.
Also good:
```dm
/obj/machine/update_overlays(var/blah)
var/static/on_overlay
var/static/off_overlay
var/static/broken_overlay
if(isnull(on_overlay))
on_overlay = iconstate2appearance(overlay_icon, "on")
off_overlay = iconstate2appearance(overlay_icon, "off")
broken_overlay = iconstate2appearance(overlay_icon, "broken")
if (stat & broken)
add_overlay(broken_overlay)
return
...
```
Proc variables, static variables, and global variables are resolved at compile time, so the above is equivalent to the second example, but is easier to read, and avoids the need to store a list.
Note: While there has historically been a strong impulse to use associated lists for caching of computed values, this is the easy way out and leaves a lot of hidden overhead. Please keep this in mind when designing core/root systems that are intended for use by other code/coders. It's normally better for consumers of such systems to handle their own caching using vars and number indexed lists, than for you to do it using associated lists.
#### Don't create code that hangs references
This is part of the larger issue of hard deletes, read this file for more info: [Guide to Harddels](https://github.com/tgstation/TerraGov-Marine-Corps/blob/master/.github/HARDDEL_GUIDE.md))
#### Other Notes
- Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the "tools.dm" file)
- Bloated code may be necessary to add a certain feature, which means there has to be a judgement over whether the feature is worth having. You can help make this decision easier by making sure your code is modular.
- You are expected to help maintain the code that you add, meaning that if there is a problem then you are likely to be approached in order to fix any issues, runtimes, or bugs.
- Do not divide when you can easily convert it to multiplication. (ie `4 / 2` should be done as `4 * 0.5`)
- If you used regex to replace code during development of your code, post the regex in your PR for the benefit of future developers and downstream users.
- Changes to the `/config` tree must be made in a way that allows for updating server deployments while preserving previous behaviour. This is due to the fact that the config tree is to be considered owned by the user and not necessarily updated alongside the remainder of the code. The code to preserve previous behaviour may be removed at some point in the future given the OK by maintainers.
##### Enforced not enforced
The following coding styles are not only not enforced at all, but are generally frowned upon to change for little to no reason:
- English/British spelling on var/proc names
- Color/Colour - both are fine, but keep in mind that BYOND uses `color` as a base variable
- Spaces after control statements
- `if()` and `if ()` - nobody cares!
#### Operators
##### Spacing
(this is not strictly enforced, but more a guideline for readability's sake)
- Operators that should be separated by spaces
- Boolean and logic operators like &&, || <, >, ==, etc (but not !)
- Bitwise AND &
- Argument separator operators like , (and ; when used in a forloop)
- Assignment operators like = or += or the like
- Operators that should not be separated by spaces
- Bitwise OR |
- Access operators like . and :
- Parentheses ()
- logical not !
Math operators like +, -, /, \*, etc are up in the air, just choose which version looks more readable.
##### Use
- Bitwise AND - '&'
- Should be written as `bitfield & bitflag` NEVER `bitflag & bitfield`, both are valid, but the latter is confusing and nonstandard.
- Feel free to use one of the helpful bitflag operation macros instead (CHECK_BITFIELD and similar).
- Associated lists declarations must have their key value quoted if it's a string
- WRONG: list(a = "b")
- RIGHT: list("a" = "b")
#### Dream Maker Quirks/Tricks
Like all languages, Dream Maker has its quirks, some of them are beneficial to us, like these
##### In-To for-loops
`for(var/i = 1, i <= some_value, i++)` is a fairly standard way to write an incremental for loop in most languages (especially those in the C family), but DM's `for(var/i in 1 to some_value)` syntax is oddly faster than its implementation of the former syntax; where possible, it's advised to use DM's syntax. (Note, the `to` keyword is inclusive, so it automatically defaults to replacing `<=`; if you want `<` then you should write it as `1 to some_value-1`).
HOWEVER, if either `some_value` or `i` changes within the body of the for (underneath the `for(...)` header) or if you are looping over a list AND changing the length of the list then you can NOT use this type of for-loop!
##### for(var/A in list) VS for(var/i in 1 to list.len)
The former is faster than the latter, as shown by the following profile results:
https://file.house/zy7H.png
Code used for the test in a readable format:
https://pastebin.com/w50uERkG
##### Istypeless for loops
A name for a differing syntax for writing for-each style loops in DM. It's NOT DM's standard syntax, hence why this is considered a quirk. Take a look at this:
```DM
var/list/bag_of_items = list(sword, apple, coinpouch, sword, sword)
var/obj/item/sword/best_sword
for(var/obj/item/sword/S in bag_of_items)
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
The above is a simple proc for checking all swords in a container and returning the one with the highest damage, and it uses DM's standard syntax for a for-loop by specifying a type in the variable of the for's header that DM interprets as a type to filter by. It performs this filter using `istype()` (or some internal-magic similar to `istype()` - this is BYOND, after all). This is fine in its current state for `bag_of_items`, but if `bag_of_items` contained ONLY swords, or only SUBTYPES of swords, then the above is inefficient. For example:
```DM
var/list/bag_of_swords = list(sword, sword, sword, sword)
var/obj/item/sword/best_sword
for(var/obj/item/sword/S in bag_of_swords)
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
specifies a type for DM to filter by.
With the previous example that's perfectly fine, we only want swords, but here the bag only contains swords? Is DM still going to try to filter because we gave it a type to filter by? YES, and here comes the inefficiency. Wherever a list (or other container, such as an atom (in which case you're technically accessing their special contents list, but that's irrelevant)) contains datums of the same datatype or subtypes of the datatype you require for your loop's body,
you can circumvent DM's filtering and automatic `istype()` checks by writing the loop as such:
```DM
var/list/bag_of_swords = list(sword, sword, sword, sword)
var/obj/item/sword/best_sword
for(var/s in bag_of_swords)
var/obj/item/sword/S = s
if(!best_sword || S.damage > best_sword.damage)
best_sword = S
```
Of course, if the list contains data of a mixed type then the above optimisation is DANGEROUS, as it will blindly typecast all data in the list as the specified type, even if it isn't really that type, causing runtime errors.
##### Dot variable
Like other languages in the C family, DM has a `.` or "Dot" operator, used for accessing variables/members/functions of an object instance.
eg:
```DM
var/mob/living/carbon/human/H = YOU_THE_READER
H.gib()
```
However, DM also has a dot variable, accessed just as `.` on its own, defaulting to a value of null. Now, what's special about the dot operator is that it is automatically returned (as in the `return` statement) at the end of a proc, provided the proc does not already manually return (`return count` for example.) Why is this special?
With `.` being everpresent in every proc, can we use it as a temporary variable? Of course we can! However, the `.` operator cannot replace a typecasted variable - it can hold data any other var in DM can, it just can't be accessed as one, although the `.` operator is compatible with a few operators that look weird but work perfectly fine, such as: `.++` for incrementing `.'s` value, or `.[1]` for accessing the first element of `.`, provided that it's a list.
##### Globals versus static
DM has a var keyword, called global. This var keyword is for vars inside of types. For instance:
```DM
/mob
var/global/thing = TRUE
```
This does NOT mean that you can access it everywhere like a global var. Instead, it means that that var will only exist once for all instances of its type, in this case that var will only exist once for all mobs - it's shared across everything in its type. (Much more like the keyword `static` in other languages like PHP/C++/C#/Java)
Isn't that confusing?
There is also an undocumented keyword called `static` that has the same behaviour as global but more correctly describes BYOND's behaviour. Therefore, we always use static instead of global where we need it, as it reduces suprise when reading BYOND code.
#### Documentation
TGMC has self-documenting code, and as such all new procs and variables should be documented using the following format:
Single line comments
```DM
///This proc, variable or define does something
var/myvariable
```
Multi line comments
```DM
/**
* This is a proc with arguments
*
* it does things
* Arguments:
* * bar: this argument does things
*/
/proc/foo(bar)
```
File comments
```DM
/*!
* This file has things in it
*/
```
### Map specifications
Any new map or map change must comply to these specifications.
#### TGM Format & Map Merge
New maps should be converted into the .tgm format before making a pull request. All edits to existing maps should be correctly map merged. This is done using the [Map Merge](https://tgstation13.org/wiki/Map_Merger) utility included in the repo to convert the file to TGM format.
It is HIGHLY recommend to use third party mapping programs such as StrongDMM to make map changes easier.
#### Variable Editing (Var-edits)
While var-editing an item within the editor is perfectly fine, it is preferred that when you are changing the base behavior of an item (how it functions) that you make a new subtype of that item within the code, especially if you plan to use the item in multiple locations on the same map, or across multiple maps. This makes it easier to make corrections as needed to all instances of the item at one time as opposed to having to find each instance of it and change them all individually.
Please attempt to clean out any dirty variables that may be contained within items you alter through var-editing. For example, due to how DM functions, changing the `pixel_x` variable from 23 to 0 will leave a dirty record in the map's code of `pixel_x = 0`. Likewise this can happen when changing an item's icon to something else and then back. This can lead to some issues where an item's icon has changed within the code, but becomes broken on the map due to it still attempting to use the old entry.
Areas should not be var-edited on a map to change it's name or attributes. All areas of a single type and it's altered instances are considered the same area within the code, and editing their variables on a map can lead to issues with powernets and event subsystems which are difficult to debug.
#### Map size
All maps should be 255x255 at most because of known issues with how BYOND behaves with maps bigger than this.
#### Working AI nodes network for ship maps and ground maps
AIs should be able to go everywhere on the map and it should all be a single network if possible (two levels maps get a pass). Nodes can be placed up to 15 tiles apart, including diagonally. Any walls or lava between two nodes will block the link between them. Remember that AIs are stupid, and that some obstacles are impossible to cross for them, so make their paths simple.
#### Limited marine supplies in shipside maps
Marine players are given limited supplies for preparation and deployment to enhance their gameplay while not sacrificing xenomorph players' fun. This line of thought follows the philosophy that all shipside maps are not chosen over another in consideration of supplies. For example: if marines choose Pillar of Spring over all other maps due to Pillar of Spring having more round start sentries and mortars, then mappers or contributors are obligated to eliminate the bias. While not an exhausive list, all shipside maps follow the same number of supplies:
Chem lab:
3 bluespace beakers
CAS armament:
6 30mm ammo crates
2 banshees
2 keepers
2 widowmakers
4 mini rockets
2 GAU-21 30 mm cannons
2 rocket pods
2 minirocket pods
This doesn't mean that mappers can't put extra supplies in planetside maps, though the extra supplies should be far away from landing zones to prevent marine players from favoring one map over another when considering supplies.
#### Anti fob area system implemented
Xenos should not be able to build near the fob before shutters are down. As such, wide enough areas around FOB must be placed. An area is set as non-buildable if it contains a shutter.
#### Working electrical system
Every area must have an APC. A ground map must have roughly 10 generators, with working SMES nearby. A shipmap must be fully wired and its electrical system fully working at the start of the game.
#### Connected pipenet
Every ship should have a believable and complete pipe system (ventilation, scrubbers). All pipes must belong to the same network. No pipes leading to nowhere. Pipes groundside are not mandatory, but they add to the atmosphere and are useful to xenos.
#### Xeno related items (walls, weeds, silos, etc.)
Everything related to xenos must be placed on map via a landmark, and not be directly added. This allows the map to be clean in HvH modes.
Silos must be placed around the map for the Crash gamemode. The entirety of the map must have weed coverage, with no exceptions. You may add resin walls and doors around the map as well, however do not go overboard. You should also add some corpse spawner landmarks, although they are not mandatory.
#### Fog around silos
Any silo placed on map must be protected by fog on all sides. Fog only appears in the Crash gamemode and is there to protect the xenos' spawn points.
#### Intel and nuke disk computers
There should be a reasonnable amount of intel computers placed in areas with APCs. 3 nuke disk computers must be placed around the map, these typically come in sets, which are predetermined locations of 3 disk computers. You may only have one disk set if you so desire. A nuke landmark has to be present as well, typically in an area that is relatively hostile to marines.
#### Miners
Miners must be placed around the map. Platinium miners must be in locations easily defendable by xenos, typically caves. Phoron miners must not be placed too close to LZ, it should be somewhat challenging to secure and hold a miner, phoron or platinum.
#### LZ requirements
LZs must be marked (lz1, lz2). The appropriate shuttle console landmark should be placed inside the FOB. It must be surrounded by shutters. It has to have an APC to power the area, and a button to open the shutters.
## Pull Request Process
There is no strict process when it comes to merging pull requests. Pull requests will sometimes take a while before they are looked at by a maintainer; the bigger the change, the more time it will take before they are accepted into the code. Every team member is a volunteer who is giving up their own time to help maintain and contribute, so please be courteous and respectful. Here are some helpful ways to make it easier for you and for the maintainers when making a pull request.
Anyone can review pull requests, and while only maintainers have write permissions, any help is appreciated.
- Make sure your pull request complies to the requirements outlined in [this guide](http://tgstation13.org/wiki/Getting_Your_Pull_Accepted)
- You are expected to have tested your pull requests if it is anything that would warrant testing. Spellchecks and similar small, non consequential changes can be afforded minimal testing. Any other change should warrant a good bit of testing, nobody is comfortable in a situation where minimal testing could've prevented the need for a follow-up PR. This means, by extension, web edits are disallowed for larger changes.
- You are going to be expected to describe your changes in the pull request description. Failing to do so could mean delaying it as we may have to question why you made the change. On the other hand, you can speed up the process by making the pull request readable and easy to understand, with diagrams or before/after data. For performance changes, you are expected to do some profiling. Ask around if you don't know how, especially if the changes require a full server of players.
- Use the changelog for large player-facing changes, it prevents our players from being caught unaware by changes - you can find more information about this [on this wiki page](http://tgstation13.org/wiki/Guide_to_Changelogs).
- If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable. This is called atomizing.
- If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to support or object to any changes being made, which will likely hold more weight, as you're the one who added the feature. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble.
- Please explain why you are submitting the pull request, and how you think your change will be beneficial to the game. Failure to do so will be grounds for rejecting the PR.
- If your pull request is not finished, you may open it as a draft for potential review. If you open it as a full-fledged PR make sure it is at least testable in a live environment. Pull requests that do not at least meet this requirement will be closed. You may request a maintainer reopen the pull request when you're ready, or make a new one.
- While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality _before_ you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes.
- After leaving reviews on an open pull request, maintainers may convert it to a draft. Once you have addressed all their comments to the best of your ability, feel free to mark the pull as `Ready for Review` again.
## Porting features/sprites/sounds/tools from other codebases
If you are porting features/tools from other codebases, you must give them credit where it's due. Typically, crediting them in your pull request, the changelog or co-authoring the original author in the pull request's commit history is the recommended way of doing it. Take note of what license they use though, porting stuff from AGPLv3 and GPLv3 codebases are allowed.
Regarding sprites & sounds, you must credit the artist and possibly the codebase. All of our assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. However if you are porting assets from GoonStation or usually any assets under the [Creative Commons 3.0 BY-NC-SA license](https://creativecommons.org/licenses/by-nc-sa/3.0/) are to go into the 'goon' folder of the codebase.
## Banned content
Do not add any of the following in a pull request or it will get closed:
- National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references
- Code which violates GitHub's [terms of service](https://github.com/site/terms).
- Anything that would be against our rules.
Just because something isn't on this list doesn't mean that it's acceptable. Use common sense above all else.
## Content that requires prior approval
The following content requires prior approval from Maintainers or Head Coders before making a Pull Request:
- Changes to Rank names, rank times or job ranks
## Rust in TGMC
Dream maker offers a FFI (foreign function interface) feature; it allows developers to code some features in language other than DM.
TGMC takes advantage of that thanks to the rustg library (https://github.com/tgstation/rust-g), which has its name suggest is written in rust.
If you want to compile (and enventually host) TGMC on Windows, you do not have to care about it as a the library is precompiled.
However, if you want to host on Linux, you will need to compile rustg yourself, and add the .so in the root folder. Instructions on how to compile it can be found in the rust-g readme. Please mind that TGMC is using an optional feature, so you need to build with the pathfinder feature:
```
cargo build --release --target i686-unknown-linux-gnu --features pathfinder
```
## A word on Git
This repository uses `LF` line endings for all code as specified in the **.gitattributes** and **.editorconfig** files.
Unless overridden or a non standard git binary is used the line ending settings should be applied to your clone automatically.
Note: VSC requires an [extension](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) to take advantage of editorconfig.
Github actions that require additional configuration are disabled on the repository until ACTION_ENABLER secret is created with non-empty value.
================================================
FILE: Dockerfile
================================================
FROM tgstation/byond:513.1526 as base
FROM base as build_base
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
git \
ca-certificates
FROM build_base as rust_g
WORKDIR /rust_g
RUN apt-get install -y --no-install-recommends \
libssl-dev \
pkg-config \
curl \
gcc-multilib \
&& curl https://sh.rustup.rs -sSf | sh -s -- -y --default-host i686-unknown-linux-gnu \
&& git init \
&& git remote add origin https://github.com/tgstation/rust-g
COPY dependencies.sh .
RUN /bin/bash -c "source dependencies.sh \
&& git fetch --depth 1 origin \$RUST_G_VERSION" \
&& git checkout FETCH_HEAD \
&& ~/.cargo/bin/cargo build --release
COPY dependencies.sh .
ENV CC=gcc-7 CXX=g++-7
RUN ln -s /usr/include/mariadb /usr/include/mysql \
&& ln -s /usr/lib/i386-linux-gnu /root/MariaDB \
&& cmake .. \
&& make
FROM base as dm_base
WORKDIR /tgstation
FROM dm_base as build
COPY . .
RUN DreamMaker -max_errors 0 tgmc.dme && tools/deploy.sh /deploy
FROM dm_base
EXPOSE 1337
RUN apt-get update \
&& apt-get install -y --no-install-recommends software-properties-common \
&& add-apt-repository ppa:ubuntu-toolchain-r/test \
&& apt-get update \
&& apt-get upgrade -y \
&& apt-get dist-upgrade -y \
&& apt-get install -y --no-install-recommends \
libmariadb2 \
mariadb-client \
libssl1.0.0 \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /root/.byond/bin
VOLUME [ "/tgmc/config", "/tgmc/data" ]
ENTRYPOINT [ "DreamDaemon", "tgmc.dmb", "-port", "1337", "-trusted", "-close", "-verbose" ]
================================================
FILE: LICENSE
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software.
A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.
The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version.
An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based on the Program.
To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modi
Showing preview only (430K chars total). Download the full file or copy to clipboard to get everything.
gitextract_w7npq9da/ ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ATOMIZATION.md │ ├── AUTODOC.md │ ├── CODEOWNERS │ ├── EZDB.md │ ├── HARDDELETES.md │ ├── HARDDEL_GUIDE.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── TICK_ORDER.md │ ├── VISUALS.md │ ├── actions/ │ │ ├── restore_or_install_byond/ │ │ │ └── action.yml │ │ └── setup_node/ │ │ └── action.yml │ ├── alternate_byond_versions.txt │ ├── guides/ │ │ └── EZDB.md │ ├── max_required_byond_client.txt │ └── workflows/ │ ├── auto_changelog.yml │ ├── ci_suite.yml │ ├── compile_changelogs.yml │ ├── discord_pr_announce.yml │ ├── gbp.yml │ ├── generate_documentation.yml │ ├── remove_guide_comments.yml │ ├── round_id_linker.yml │ ├── run_approval.yml │ ├── run_integration_tests.yml │ ├── stale.yml │ └── update_tgs_dmapi.yml ├── .gitignore ├── .prettierignore ├── .tgs4.yml ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ └── tasks.json ├── BUILD.cmd ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── LICENSE-CC-BY-NC-3.0 ├── LICENSE-CC-BY-NC-SA-3.0 ├── README.md ├── SQL/ │ ├── database_changelog.md │ └── tgmc-schema.sql ├── SpacemanDMM.toml ├── __odlint.dm ├── _maps/ │ ├── _basemap.dm │ ├── arachne.json │ ├── bigred_v2.json │ ├── bluemoon.json │ ├── bluesummers.json │ ├── combat_patrol_base.json │ ├── corsat.json │ ├── daedalusprison.json │ ├── debugdalus.json │ ├── deltastation.json │ ├── desertdam.json │ ├── desparity.json │ ├── fiorina.json │ ├── fort_phobos.json │ ├── gelida_iv.json │ ├── ice_colony_v2.json │ ├── icy_caves.json │ ├── interiors/ │ │ ├── apc_cloner.dmm │ │ ├── apc_medical.dmm │ │ ├── apc_transport.dmm │ │ ├── icc_recontank.dmm │ │ ├── mrap.dmm │ │ ├── som_tank.dmm │ │ └── tank.dmm │ ├── iteron.json │ ├── kutjevo.json │ ├── lavaoutpost.json │ ├── lawanka.json │ ├── lv624.json │ ├── lv759.json │ ├── magmoor_digsite_iv.json │ ├── map_files/ │ │ ├── Arachne/ │ │ │ └── TGS_Arachne.dmm │ │ ├── BigRed_v2/ │ │ │ └── BigRed_v2.dmm │ │ ├── Blue_Moon/ │ │ │ └── bluemoon.dmm │ │ ├── Bluesummers/ │ │ │ └── bluesummers.dmm │ │ ├── Campaign maps/ │ │ │ ├── jungle_outpost/ │ │ │ │ └── jungle_outpost.dmm │ │ │ ├── nt_base/ │ │ │ │ └── nt_base.dmm │ │ │ ├── orion_2/ │ │ │ │ └── orionoutpost_2.dmm │ │ │ ├── patricks_rest/ │ │ │ │ └── patricks_rest.dmm │ │ │ ├── som_base/ │ │ │ │ └── sombase.dmm │ │ │ ├── som_raid_base/ │ │ │ │ └── som_raiding_base.dmm │ │ │ ├── tgmc_airfield/ │ │ │ │ └── tgmc_airfield.dmm │ │ │ └── tgmc_raid_base/ │ │ │ └── tgmc_raiding_base.dmm │ │ ├── DaedalusPrison/ │ │ │ └── DaedalusPrison.dmm │ │ ├── Fort_Phobos/ │ │ │ └── Fort_Phobos.dmm │ │ ├── Ice_Colony_v2/ │ │ │ └── Ice_Colony_v2.dmm │ │ ├── Iteron/ │ │ │ └── Iteron.dmm │ │ ├── LV624/ │ │ │ └── LV624.dmm │ │ ├── LV759/ │ │ │ └── LV759.dmm │ │ ├── Lawanka_Outpost/ │ │ │ └── LawankaOutpost.dmm │ │ ├── Magmoor_Digsite_IV/ │ │ │ └── Magmoor_Digsite_IV.dmm │ │ ├── Metnal_Operation/ │ │ │ └── Metnal_Operation.dmm │ │ ├── Orion_Military_Outpost/ │ │ │ └── orionoutpost.dmm │ │ ├── Pillar_of_Spring/ │ │ │ └── TGS_Pillar_of_Spring.dmm │ │ ├── Prison_Station_FOP/ │ │ │ └── Prison_Station_FOP.dmm │ │ ├── Research_Outpost/ │ │ │ └── Research_Outpost.dmm │ │ ├── Sulaco/ │ │ │ └── TGS_Sulaco.dmm │ │ ├── Theseus/ │ │ │ └── TGS_Theseus.dmm │ │ ├── Vapor_Processing/ │ │ │ └── Vapor_Processing.dmm │ │ ├── Whiskey_Outpost/ │ │ │ └── Whiskey_Outpost_v2.dmm │ │ ├── combat_patrol_base/ │ │ │ └── combat_patrol_base.dmm │ │ ├── corsat/ │ │ │ └── corsat.dmm │ │ ├── debugdalus/ │ │ │ └── tgs_debugdalus.dmm │ │ ├── deltastation/ │ │ │ └── deltastation.dmm │ │ ├── desertdam/ │ │ │ └── desertdam.dmm │ │ ├── desparity/ │ │ │ └── desparity.dmm │ │ ├── fiorina/ │ │ │ └── fiorina.dmm │ │ ├── gelida_iv/ │ │ │ └── gelida_iv.dmm │ │ ├── generic/ │ │ │ └── Admin_Level.dmm │ │ ├── icy_caves/ │ │ │ └── icy_caves.dmm │ │ ├── kutjevo/ │ │ │ └── kutjevo.dmm │ │ ├── lavaoutpost/ │ │ │ └── LavaOutpost.dmm │ │ ├── multiz_debug/ │ │ │ └── multiz_debug.dmm │ │ ├── oscar_outpost/ │ │ │ └── oscar_outpost.dmm │ │ ├── riptide/ │ │ │ └── riptide.dmm │ │ └── slumbridge/ │ │ └── slumbridge.dmm │ ├── metnal.json │ ├── modularmaps/ │ │ ├── EORG/ │ │ │ ├── basketball.dmm │ │ │ ├── cs_mansion.dmm │ │ │ ├── cs_militia.dmm │ │ │ ├── cs_office.dmm │ │ │ ├── de_dust2.dmm │ │ │ ├── de_inferno.dmm │ │ │ ├── de_nuke.dmm │ │ │ ├── old.dmm │ │ │ └── original.dmm │ │ ├── big_red/ │ │ │ ├── barracks.dmm │ │ │ ├── bigredatmosvar1.dmm │ │ │ ├── bigredatmosvar2.dmm │ │ │ ├── bigredatmosvar3.dmm │ │ │ ├── bigredatmosvar4.dmm │ │ │ ├── bigredatmosvar5.dmm │ │ │ ├── bigredatmosvar6.dmm │ │ │ ├── bigredcargoareavar1.dmm │ │ │ ├── bigredcargoareavar2.dmm │ │ │ ├── bigredcargoareavar3.dmm │ │ │ ├── bigredcargoareavar4.dmm │ │ │ ├── bigredcargoareavar5.dmm │ │ │ ├── bigredcargoareavar6.dmm │ │ │ ├── bigredcargoareavar7.dmm │ │ │ ├── bigredcargoareavar8.dmm │ │ │ ├── bigredcargoentryvar1.dmm │ │ │ ├── bigredcargoentryvar2.dmm │ │ │ ├── bigredcargoentryvar3.dmm │ │ │ ├── bigredcargovar1.dmm │ │ │ ├── bigredcargovar2.dmm │ │ │ ├── bigredcaveswvar1.dmm │ │ │ ├── bigredcaveswvar2.dmm │ │ │ ├── bigredcaveswvar3.dmm │ │ │ ├── bigredcaveswvar4.dmm │ │ │ ├── bigredcaveswvar5.dmm │ │ │ ├── bigredcavevar1.dmm │ │ │ ├── bigredcavevar2.dmm │ │ │ ├── bigredcavevar3.dmm │ │ │ ├── bigredcavevar4.dmm │ │ │ ├── bigredcavevar5.dmm │ │ │ ├── bigredchapelvar1.dmm │ │ │ ├── bigredchapelvar2.dmm │ │ │ ├── bigredcheckpointsouthvar1.dmm │ │ │ ├── bigredcheckpointsouthvar2.dmm │ │ │ ├── bigredcheckpointsouthvar3.dmm │ │ │ ├── bigredcheckpointvar1.dmm │ │ │ ├── bigredcheckpointvar2.dmm │ │ │ ├── bigreddoor1.dmm │ │ │ ├── bigreddoor2.dmm │ │ │ ├── bigreddoor3.dmm │ │ │ ├── bigreddoor4.dmm │ │ │ ├── bigreddormvar1.dmm │ │ │ ├── bigreddormvar2.dmm │ │ │ ├── bigredengineeringvar1.dmm │ │ │ ├── bigredengineeringvar2.dmm │ │ │ ├── bigredengineeringvar3.dmm │ │ │ ├── bigredengineeringvar4.dmm │ │ │ ├── bigredetavar1.dmm │ │ │ ├── bigredetavar2.dmm │ │ │ ├── bigredetavar3.dmm │ │ │ ├── bigredetavar4.dmm │ │ │ ├── bigredetavar5.dmm │ │ │ ├── bigredgeneralstorevar1.dmm │ │ │ ├── bigredgeneralstorevar2.dmm │ │ │ ├── bigredlambdacave1.dmm │ │ │ ├── bigredlambdacave2.dmm │ │ │ ├── bigredlambdatunnelsouthvar1.dmm │ │ │ ├── bigredlambdatunnelsouthvar2.dmm │ │ │ ├── bigredlambdatunnelsouthvar3.dmm │ │ │ ├── bigredlambdatunnelsouthvar4.dmm │ │ │ ├── bigredlambdatunnelvar1.dmm │ │ │ ├── bigredlambdatunnelvar2.dmm │ │ │ ├── bigredlibraryvar1.dmm │ │ │ ├── bigredlibraryvar2.dmm │ │ │ ├── bigredlibraryvar3.dmm │ │ │ ├── bigredmedbaypassagevar1.dmm │ │ │ ├── bigredmedbaypassagevar2.dmm │ │ │ ├── bigredmedbayvar1.dmm │ │ │ ├── bigredmedbayvar2.dmm │ │ │ ├── bigredmedbayvar3.dmm │ │ │ ├── bigredmedbayvar4.dmm │ │ │ ├── bigredmedbayvar5.dmm │ │ │ ├── bigredmedbayvar6.dmm │ │ │ ├── bigredmedbayvar7.dmm │ │ │ ├── bigrednorthlambdavar1.dmm │ │ │ ├── bigrednorthlambdavar2.dmm │ │ │ ├── bigrednorthlambdavar3.dmm │ │ │ ├── bigrednorthlambdavar4.dmm │ │ │ ├── bigrednorthlambdavar5.dmm │ │ │ ├── bigrednorthlambdavar6.dmm │ │ │ ├── bigredofficevar1.dmm │ │ │ ├── bigredofficevar2.dmm │ │ │ ├── bigredofficevar3.dmm │ │ │ ├── bigredsecornervar1.dmm │ │ │ ├── bigredsecornervar2.dmm │ │ │ ├── bigredsecornervar3.dmm │ │ │ ├── bigredsecornervar4.dmm │ │ │ ├── bigredsecornervar5.dmm │ │ │ ├── bigredsecornervar6.dmm │ │ │ ├── bigredsecornervar7.dmm │ │ │ ├── bigredsouthetavar1.dmm │ │ │ ├── bigredsouthetavar2.dmm │ │ │ ├── bigredsouthetavar3.dmm │ │ │ ├── bigredsouthetavar4.dmm │ │ │ ├── bigredsouthetavar5.dmm │ │ │ ├── bigredsouthwestetavar1.dmm │ │ │ ├── bigredsouthwestetavar2.dmm │ │ │ ├── bigredsouthwestetavar3.dmm │ │ │ ├── bigredsouthwestetavar4.dmm │ │ │ ├── bigredsouthwestetavar5.dmm │ │ │ ├── bigredsweastcornervar1.dmm │ │ │ ├── bigredsweastcornervar2.dmm │ │ │ ├── bigredsweastcornervar3.dmm │ │ │ ├── bigredsweastcornervar4.dmm │ │ │ ├── bigredsweastcornervar5.dmm │ │ │ ├── bigredtoolshedvar1.dmm │ │ │ ├── bigredtoolshedvar2.dmm │ │ │ ├── bigredtoolshedvar3.dmm │ │ │ ├── bigredtoolshedvar4.dmm │ │ │ ├── bigredtoolshedvar5.dmm │ │ │ └── operation.dmm │ │ ├── corsatdome/ │ │ │ ├── corsatdomebigred.dmm │ │ │ ├── corsatdomeicecolony.dmm │ │ │ └── corsatdomelv.dmm │ │ ├── fiorina/ │ │ │ ├── engiofficevar1.dmm │ │ │ ├── engiofficevar2.dmm │ │ │ ├── gearvar1.dmm │ │ │ ├── gearvar2.dmm │ │ │ ├── medicalvar1.dmm │ │ │ ├── medicalvar2.dmm │ │ │ ├── meetingroomsvar1.dmm │ │ │ ├── meetingroomsvar2.dmm │ │ │ ├── panelsvarone.dmm │ │ │ ├── panelsvartwo.dmm │ │ │ ├── pizzavar1.dmm │ │ │ ├── pizzavar2.dmm │ │ │ ├── researchvar1.dmm │ │ │ ├── researchvar2.dmm │ │ │ ├── ringvar1.dmm │ │ │ ├── ringvar2.dmm │ │ │ ├── scavshipvar1.dmm │ │ │ ├── scavshipvar2.dmm │ │ │ ├── wardenofficevar1.dmm │ │ │ └── wardenofficevar2.dmm │ │ ├── jungle_outpost/ │ │ │ ├── joutpostengi1.dmm │ │ │ ├── joutpostengi2.dmm │ │ │ ├── joutpostengi3.dmm │ │ │ ├── joutposthydro1.dmm │ │ │ ├── joutposthydro2.dmm │ │ │ ├── joutposthydro3.dmm │ │ │ ├── joutpostmedbay1.dmm │ │ │ ├── joutpostmedbay2.dmm │ │ │ ├── joutpostmedbay3.dmm │ │ │ ├── joutpostscrates1.dmm │ │ │ ├── joutpostscrates2.dmm │ │ │ ├── joutpostscrates3.dmm │ │ │ ├── joutpostscrates4.dmm │ │ │ ├── joutpostwtower1.dmm │ │ │ ├── joutpostwtower2.dmm │ │ │ ├── joutpostwtower3.dmm │ │ │ └── joutpostwtower4.dmm │ │ ├── lv624/ │ │ │ ├── atmospherics.dmm │ │ │ ├── auxbotany.dmm │ │ │ ├── cargo_bay.dmm │ │ │ ├── cargo_bay2.dmm │ │ │ ├── hydro_jungle.dmm │ │ │ ├── hydro_path.dmm │ │ │ ├── internal_affairs.dmm │ │ │ ├── lakebase.dmm │ │ │ ├── lvhydrobridge1.dmm │ │ │ ├── lvhydrobridge2.dmm │ │ │ ├── lvhydrobridge3.dmm │ │ │ ├── lvhydrobridge4.dmm │ │ │ ├── medbayone.dmm │ │ │ ├── medbaytwo.dmm │ │ │ ├── newcavevar1.dmm │ │ │ ├── newcavevar10.dmm │ │ │ ├── newcavevar11.dmm │ │ │ ├── newcavevar12.dmm │ │ │ ├── newcavevar2.dmm │ │ │ ├── newcavevar3.dmm │ │ │ ├── newcavevar4.dmm │ │ │ ├── newcavevar5.dmm │ │ │ ├── newcavevar6.dmm │ │ │ ├── newcavevar7.dmm │ │ │ ├── newcavevar8.dmm │ │ │ ├── newcavevar9.dmm │ │ │ ├── robotics.dmm │ │ │ ├── southsandtemple1.dmm │ │ │ ├── southsandtemple2.dmm │ │ │ ├── southsandtemple3.dmm │ │ │ ├── southsandtemple4.dmm │ │ │ └── telecomms.dmm │ │ ├── oscaroutpost/ │ │ │ ├── oscarnorthvar1.dmm │ │ │ ├── oscarnorthvar2.dmm │ │ │ ├── oscarnorthvar3.dmm │ │ │ ├── oscarnorthvar4.dmm │ │ │ ├── oscarsouthvar1.dmm │ │ │ ├── oscarsouthvar2.dmm │ │ │ ├── oscarsouthvar3.dmm │ │ │ ├── oscarsouthvar4.dmm │ │ │ ├── oscarsouthvar5.dmm │ │ │ ├── oscarsouthvar6.dmm │ │ │ └── oscarsouthvar7.dmm │ │ └── prison/ │ │ ├── civresbeach.dmm │ │ └── civresgym.dmm │ ├── multiz_debug.json │ ├── orion_outpost.json │ ├── oscar_outpost.json │ ├── pillar_of_spring.json │ ├── prison_station_fop.json │ ├── research_outpost.json │ ├── riptide.json │ ├── shuttles/ │ │ ├── alamo.dmm │ │ ├── big_ert.dmm │ │ ├── casplane.dmm │ │ ├── distress.dmm │ │ ├── distress_pmc.dmm │ │ ├── distress_ufo.dmm │ │ ├── distress_upp.dmm │ │ ├── escape_pod.dmm │ │ ├── escape_shuttle.dmm │ │ ├── minidropship_big.dmm │ │ ├── minidropship_factorio.dmm │ │ ├── minidropship_food.dmm │ │ ├── minidropship_mobile_bar.dmm │ │ ├── minidropship_outrider.dmm │ │ ├── minidropship_panopticon.dmm │ │ ├── minidropship_standard.dmm │ │ ├── minidropship_umbilical.dmm │ │ ├── minidropship_urbantower.dmm │ │ ├── normandy.dmm │ │ ├── supply.dmm │ │ ├── tgs_bigbury.dmm │ │ ├── tgs_canterbury.dmm │ │ └── vehicle_supply.dmm │ ├── slumbridge.json │ ├── sulaco.json │ ├── templates/ │ │ ├── capsule_1.dmm │ │ └── unit_tests.dmm │ ├── theseus.json │ ├── vapor_processing.json │ └── whiskey_outpost_v2.json ├── bin/ │ ├── build.cmd │ ├── clean.cmd │ ├── server.cmd │ ├── test.cmd │ ├── tgfont.cmd │ ├── tgui-bench.cmd │ ├── tgui-build.cmd │ ├── tgui-dev.cmd │ └── tgui-sonar.cmd ├── code/ │ ├── __DEFINES/ │ │ ├── DNA.dm │ │ ├── MC.dm │ │ ├── __game.dm │ │ ├── _click.dm │ │ ├── _globals.dm │ │ ├── _helpers.dm │ │ ├── _math.dm │ │ ├── _protect.dm │ │ ├── _radio.dm │ │ ├── _subsystems.dm │ │ ├── _tick.dm │ │ ├── access.dm │ │ ├── action.dm │ │ ├── actions.dm │ │ ├── admin.dm │ │ ├── admin_verb.dm │ │ ├── ai.dm │ │ ├── alerts.dm │ │ ├── announce.dm │ │ ├── apc_defines.dm │ │ ├── area.dm │ │ ├── artillery.dm │ │ ├── assert.dm │ │ ├── atmospherics.dm │ │ ├── atom.dm │ │ ├── atom_hud.dm │ │ ├── atom_movable.dm │ │ ├── attachments.dm │ │ ├── autofire.dm │ │ ├── bitfields.dm │ │ ├── blend_modes.dm │ │ ├── buckling.dm │ │ ├── calibers.dm │ │ ├── callbacks.dm │ │ ├── campaign.dm │ │ ├── cas.dm │ │ ├── chat.dm │ │ ├── chat_filter.dm │ │ ├── client.dm │ │ ├── colors.dm │ │ ├── combat.dm │ │ ├── configuration.dm │ │ ├── conflict.dm │ │ ├── construction.dm │ │ ├── cooldowns.dm │ │ ├── coordinates.dm │ │ ├── crafting.dm │ │ ├── dcs/ │ │ │ ├── flags.dm │ │ │ ├── helpers.dm │ │ │ └── signals/ │ │ │ ├── mapping.dm │ │ │ ├── signals.dm │ │ │ ├── signals_atom/ │ │ │ │ ├── signals_atom_mouse.dm │ │ │ │ └── signals_atom_x_act.dm │ │ │ ├── signals_client.dm │ │ │ ├── signals_datum.dm │ │ │ ├── signals_food.dm │ │ │ ├── signals_hud.dm │ │ │ ├── signals_keybindings.dm │ │ │ ├── signals_ladder.dm │ │ │ ├── signals_lazy_templates.dm │ │ │ ├── signals_lift.dm │ │ │ ├── signals_mind.dm │ │ │ ├── signals_plane_master_group.dm │ │ │ ├── signals_reagent.dm │ │ │ ├── signals_subsystem.dm │ │ │ ├── signals_tgui.dm │ │ │ └── signals_transport.dm │ │ ├── defibrillator.dm │ │ ├── directional.dm │ │ ├── do_afters.dm │ │ ├── dropship_equipment.dm │ │ ├── emote.dm │ │ ├── equipment.dm │ │ ├── events.dm │ │ ├── factions.dm │ │ ├── factory.dm │ │ ├── fire_support.dm │ │ ├── flags.dm │ │ ├── flags_turf.dm │ │ ├── foam.dm │ │ ├── font_awesome_icons.dm │ │ ├── fonts.dm │ │ ├── food.dm │ │ ├── footsteps.dm │ │ ├── fov.dm │ │ ├── generators.dm │ │ ├── greyscale.dm │ │ ├── health_scan.dm │ │ ├── html_assistant.dm │ │ ├── hud.dm │ │ ├── icon_smoothing.dm │ │ ├── implants.dm │ │ ├── instruments.dm │ │ ├── interaction.dm │ │ ├── is_helpers.dm │ │ ├── items.dm │ │ ├── jobs.dm │ │ ├── keybind.dm │ │ ├── language.dm │ │ ├── layers.dm │ │ ├── lazy_templates.dm │ │ ├── legacy_modular_armor.dm │ │ ├── lighting.dm │ │ ├── loadout.dm │ │ ├── loadout_variants.dm │ │ ├── logging.dm │ │ ├── machines.dm │ │ ├── map_switch.dm │ │ ├── mapping.dm │ │ ├── maps.dm │ │ ├── maths.dm │ │ ├── matrices.dm │ │ ├── mecha.dm │ │ ├── minimap.dm │ │ ├── misc.dm │ │ ├── mobs.dm │ │ ├── mode.dm │ │ ├── modular_armor.dm │ │ ├── monitor.dm │ │ ├── move_force.dm │ │ ├── movement.dm │ │ ├── movement_info.dm │ │ ├── movespeed_modification.dm │ │ ├── multiz.dm │ │ ├── mutations.dm │ │ ├── obj_flags.dm │ │ ├── objects.dm │ │ ├── overlays.dm │ │ ├── overwatch.dm │ │ ├── particles.dm │ │ ├── pipe_construction.dm │ │ ├── power.dm │ │ ├── preferences.dm │ │ ├── procpath.dm │ │ ├── progress_display.dm │ │ ├── qdel.dm │ │ ├── reagents.dm │ │ ├── rust_g.dm │ │ ├── rust_g_overrides.dm │ │ ├── say.dm │ │ ├── security_level.dm │ │ ├── shuttles.dm │ │ ├── sight.dm │ │ ├── skills.dm │ │ ├── smoothing.dm │ │ ├── sound.dm │ │ ├── spaceman_dmm.dm │ │ ├── span.dm │ │ ├── spatial_gridmap.dm │ │ ├── species.dm │ │ ├── speech_channels.dm │ │ ├── speech_controller.dm │ │ ├── stat_tracking.dm │ │ ├── status_effects.dm │ │ ├── stripping.dm │ │ ├── structures.dm │ │ ├── supply.dm │ │ ├── synthetic.dm │ │ ├── text.dm │ │ ├── tgs.config.dm │ │ ├── tgs.dm │ │ ├── tgui.dm │ │ ├── time.dm │ │ ├── tools.dm │ │ ├── traits.dm │ │ ├── transport.dm │ │ ├── tts.dm │ │ ├── turfs.dm │ │ ├── typeids.dm │ │ ├── unit_tests.dm │ │ ├── vehicles.dm │ │ ├── vv.dm │ │ ├── wires.dm │ │ ├── xeno.dm │ │ └── zombie.dm │ ├── __HELPERS/ │ │ ├── _lists.dm │ │ ├── _planes.dm │ │ ├── _string_lists.dm │ │ ├── admin.dm │ │ ├── ai.dm │ │ ├── announce.dm │ │ ├── bitflag_lists.dm │ │ ├── chat.dm │ │ ├── chat_filter.dm │ │ ├── cmp.dm │ │ ├── colors.dm │ │ ├── config.dm │ │ ├── datums.dm │ │ ├── duplicating.dm │ │ ├── files.dm │ │ ├── filters.dm │ │ ├── game.dm │ │ ├── generators.dm │ │ ├── global_lists.dm │ │ ├── heap.dm │ │ ├── icon_smoothing.dm │ │ ├── icons.dm │ │ ├── jatum.dm │ │ ├── lazy_templates.dm │ │ ├── level_traits.dm │ │ ├── lighting.dm │ │ ├── logging/ │ │ │ ├── _logging.dm │ │ │ ├── admin.dm │ │ │ ├── attack.dm │ │ │ ├── debug.dm │ │ │ ├── game.dm │ │ │ ├── manifest.dm │ │ │ ├── mecha.dm │ │ │ ├── mob.dm │ │ │ ├── paper.dm │ │ │ ├── talk.dm │ │ │ ├── tool.dm │ │ │ ├── transport.dm │ │ │ └── ui.dm │ │ ├── math.dm │ │ ├── matrices.dm │ │ ├── mech.dm │ │ ├── mobs.dm │ │ ├── names.dm │ │ ├── ooc_announcement.dm │ │ ├── patterns.dm │ │ ├── pencode.dm │ │ ├── pronouns.dm │ │ ├── qdel.dm │ │ ├── sanitize_values.dm │ │ ├── screen_objs.dm │ │ ├── shell.dm │ │ ├── sorts/ │ │ │ ├── InsertSort.dm │ │ │ ├── MergeSort.dm │ │ │ ├── TimSort.dm │ │ │ └── __main.dm │ │ ├── spatial_info.dm │ │ ├── stat_tracking.dm │ │ ├── string_lists.dm │ │ ├── text.dm │ │ ├── time.dm │ │ ├── traits.dm │ │ ├── tts.dm │ │ ├── turfs.dm │ │ ├── type2type.dm │ │ ├── type_processing.dm │ │ ├── unsorted.dm │ │ ├── verbs.dm │ │ ├── view.dm │ │ └── visual_effects.dm │ ├── __byond_version_compat.dm │ ├── _compile_options.dm │ ├── _globalvars/ │ │ ├── admin.dm │ │ ├── bitfields.dm │ │ ├── colorvars.dm │ │ ├── configuration.dm │ │ ├── game_modes.dm │ │ ├── lists/ │ │ │ ├── admin.dm │ │ │ ├── client.dm │ │ │ ├── crafting.dm │ │ │ ├── flavor_misc.dm │ │ │ ├── game_modes.dm │ │ │ ├── hud.dm │ │ │ ├── icons.dm │ │ │ ├── keybinding.dm │ │ │ ├── mapping.dm │ │ │ ├── mobs.dm │ │ │ ├── objects.dm │ │ │ ├── typechache.dm │ │ │ └── vending.dm │ │ ├── logging.dm │ │ ├── misc.dm │ │ ├── regexes.dm │ │ └── tgui.dm │ ├── _onclick/ │ │ ├── adjacent.dm │ │ ├── ai.dm │ │ ├── click.dm │ │ ├── double_click.dm │ │ ├── drag_drop.dm │ │ ├── hud/ │ │ │ ├── ai.dm │ │ │ ├── alerts.dm │ │ │ ├── fullscreen.dm │ │ │ ├── ghost.dm │ │ │ ├── hud.dm │ │ │ ├── human.dm │ │ │ ├── interactive_emotes.dm │ │ │ ├── map_popups.dm │ │ │ ├── map_view.dm │ │ │ ├── movable_screen_objects.dm │ │ │ ├── new_player.dm │ │ │ ├── parallax/ │ │ │ │ ├── parallax.dm │ │ │ │ └── random_layer.dm │ │ │ ├── picture_in_picture.dm │ │ │ ├── radial.dm │ │ │ ├── radial_persistent.dm │ │ │ ├── rendering/ │ │ │ │ ├── _render_readme.md │ │ │ │ ├── plane_master_controller.dm │ │ │ │ ├── plane_master_group.dm │ │ │ │ ├── plane_masters/ │ │ │ │ │ ├── _plane_master.dm │ │ │ │ │ └── plane_master_subtypes.dm │ │ │ │ └── render_plate.dm │ │ │ ├── screen_objects/ │ │ │ │ ├── menu_text_objects.dm │ │ │ │ ├── screen_objects.dm │ │ │ │ └── text_objects.dm │ │ │ └── xeno/ │ │ │ ├── hivemind.dm │ │ │ ├── larva.dm │ │ │ └── xeno.dm │ │ ├── human.dm │ │ ├── item_attack.dm │ │ ├── living.dm │ │ ├── observer.dm │ │ ├── other_mobs.dm │ │ ├── telekinesis.dm │ │ ├── ventcrawl.dm │ │ └── xeno.dm │ ├── controllers/ │ │ ├── admin.dm │ │ ├── configuration/ │ │ │ ├── config_entry.dm │ │ │ ├── configuration.dm │ │ │ └── entries/ │ │ │ ├── comms.dm │ │ │ ├── dbconfig.dm │ │ │ ├── game_options.dm │ │ │ ├── general.dm │ │ │ └── resources.dm │ │ ├── controller.dm │ │ ├── failsafe.dm │ │ ├── globals.dm │ │ ├── master.dm │ │ ├── subsystem/ │ │ │ ├── admin_verbs.dm │ │ │ ├── advanced_pathfinding.dm │ │ │ ├── air.dm │ │ │ ├── ambience.dm │ │ │ ├── area_contents.dm │ │ │ ├── asset_loading.dm │ │ │ ├── assets.dm │ │ │ ├── atoms.dm │ │ │ ├── aura.dm │ │ │ ├── autofire.dm │ │ │ ├── blackbox.dm │ │ │ ├── chat.dm │ │ │ ├── codex.dm │ │ │ ├── dbcore.dm │ │ │ ├── dcs.dm │ │ │ ├── direction.dm │ │ │ ├── discord.dm │ │ │ ├── early_asset.dm │ │ │ ├── egrill.dm │ │ │ ├── evacuation.dm │ │ │ ├── events.dm │ │ │ ├── excavation.dm │ │ │ ├── explosions.dm │ │ │ ├── garbage.dm │ │ │ ├── greyscale.dm │ │ │ ├── icon_smooth.dm │ │ │ ├── idlenpcpool.dm │ │ │ ├── input.dm │ │ │ ├── job.dm │ │ │ ├── lighting.dm │ │ │ ├── loopingsound.dm │ │ │ ├── machines.dm │ │ │ ├── mapping.dm │ │ │ ├── minimap/ │ │ │ │ ├── minimap_action_subtypes.dm │ │ │ │ └── minimaps.dm │ │ │ ├── mobs.dm │ │ │ ├── modularmapping.dm │ │ │ ├── monitor.dm │ │ │ ├── mouse_entered.dm │ │ │ ├── npcpool.dm │ │ │ ├── overlays.dm │ │ │ ├── parallax.dm │ │ │ ├── pathfinder.dm │ │ │ ├── persistence/ │ │ │ │ ├── _persistence.dm │ │ │ │ └── counter_tram_hits.dm │ │ │ ├── ping.dm │ │ │ ├── points.dm │ │ │ ├── processing/ │ │ │ │ ├── fastprocess.dm │ │ │ │ ├── instruments.dm │ │ │ │ ├── obj.dm │ │ │ │ ├── obj_tab_items.dm │ │ │ │ ├── processing.dm │ │ │ │ ├── projectiles.dm │ │ │ │ ├── resinshaping.dm │ │ │ │ └── slowprocess.dm │ │ │ ├── radio.dm │ │ │ ├── runechat.dm │ │ │ ├── security_level.dm │ │ │ ├── server_maint.dm │ │ │ ├── shuttle.dm │ │ │ ├── silo.dm │ │ │ ├── sounds.dm │ │ │ ├── spatial_gridmap.dm │ │ │ ├── spawning.dm │ │ │ ├── speech_controller.dm │ │ │ ├── statpanel.dm │ │ │ ├── stickyban.dm │ │ │ ├── strings.dm │ │ │ ├── tgui.dm │ │ │ ├── ticker.dm │ │ │ ├── time_track.dm │ │ │ ├── timer.dm │ │ │ ├── transport.dm │ │ │ ├── tts.dm │ │ │ ├── tutorials.dm │ │ │ ├── vis_overlays.dm │ │ │ ├── vote.dm │ │ │ ├── weather.dm │ │ │ ├── weeds.dm │ │ │ └── weeds_decay.dm │ │ └── subsystem.dm │ ├── datums/ │ │ ├── actions/ │ │ │ ├── ability_actions.dm │ │ │ ├── action.dm │ │ │ ├── innate.dm │ │ │ ├── item_action.dm │ │ │ ├── item_toggles.dm │ │ │ ├── observer_action.dm │ │ │ ├── order_action.dm │ │ │ ├── order_designation/ │ │ │ │ ├── base.dm │ │ │ │ ├── build_mode.dm │ │ │ │ └── interactions.dm │ │ │ ├── orders.dm │ │ │ ├── skill.dm │ │ │ ├── species_actions/ │ │ │ │ ├── prototype_supersoldier_action.dm │ │ │ │ ├── sectoid_action.dm │ │ │ │ └── zombie_actions.dm │ │ │ ├── weapon_actions.dm │ │ │ └── xeno_action.dm │ │ ├── antag.dm │ │ ├── armor.dm │ │ ├── atom_hud.dm │ │ ├── balance.dm │ │ ├── beam.dm │ │ ├── browser.dm │ │ ├── callback.dm │ │ ├── changelog/ │ │ │ └── changelog.dm │ │ ├── chat_payload.dm │ │ ├── chatmessage.dm │ │ ├── cinematic.dm │ │ ├── components/ │ │ │ ├── _component.dm │ │ │ ├── admin_popup.dm │ │ │ ├── after_image.dm │ │ │ ├── ai.dm │ │ │ ├── anti_juggling.dm │ │ │ ├── attachment_handler.dm │ │ │ ├── autobalance_monitor.dm │ │ │ ├── autofire.dm │ │ │ ├── beacon.dm │ │ │ ├── blur_protection.dm │ │ │ ├── bump_attack.dm │ │ │ ├── chem_booster.dm │ │ │ ├── climbable.dm │ │ │ ├── clothing_fov_visor.dm │ │ │ ├── clothing_tint.dm │ │ │ ├── companion.dm │ │ │ ├── connect_containers.dm │ │ │ ├── connect_loc_behalf.dm │ │ │ ├── connect_mob_behalf.dm │ │ │ ├── connect_range.dm │ │ │ ├── crafting/ │ │ │ │ ├── _recipes.dm │ │ │ │ └── crafting.dm │ │ │ ├── deployable_item.dm │ │ │ ├── dripping.dm │ │ │ ├── fov_handler.dm │ │ │ ├── fuel_component.dm │ │ │ ├── grillable.dm │ │ │ ├── harvester.dm │ │ │ ├── hide_highest_offset.dm │ │ │ ├── hide_weather_planes.dm │ │ │ ├── jump.dm │ │ │ ├── largeobjecttransparency.dm │ │ │ ├── larva_queue.dm │ │ │ ├── mobile_power.dm │ │ │ ├── mounted_gun.dm │ │ │ ├── npc_controller.dm │ │ │ ├── orbiter.dm │ │ │ ├── overlay_lighting.dm │ │ │ ├── reequip.dm │ │ │ ├── remote_control.dm │ │ │ ├── riding/ │ │ │ │ ├── riding.dm │ │ │ │ ├── riding_mob.dm │ │ │ │ └── riding_vehicle.dm │ │ │ ├── rotation.dm │ │ │ ├── seethrough_mob.dm │ │ │ ├── shield.dm │ │ │ ├── sizzle.dm │ │ │ ├── slippery.dm │ │ │ ├── squeak.dm │ │ │ ├── stamina_behavior.dm │ │ │ ├── sticky_item.dm │ │ │ ├── stun_mitigation.dm │ │ │ ├── submerge_mod.dm │ │ │ ├── suit_autodoc.dm │ │ │ ├── tac_reload_storage.dm │ │ │ ├── takes_reagent_appearance.dm │ │ │ ├── throw_parry.dm │ │ │ ├── udder.dm │ │ │ └── xeno_iff.dm │ │ ├── custom_emotes.dm │ │ ├── datacore.dm │ │ ├── datum.dm │ │ ├── elements/ │ │ │ ├── _element.dm │ │ │ ├── attachment.dm │ │ │ ├── connect_loc.dm │ │ │ ├── debris.dm │ │ │ ├── directional_attack.dm │ │ │ ├── egrill_element.dm │ │ │ ├── footstep.dm │ │ │ ├── gestures.dm │ │ │ ├── keybinding_update.dm │ │ │ ├── light_blocking.dm │ │ │ ├── limb_support.dm │ │ │ ├── plasma_on_attack.dm │ │ │ ├── plasma_on_attacked.dm │ │ │ ├── riding.dm │ │ │ ├── scalping.dm │ │ │ ├── shrapnel_removal.dm │ │ │ ├── special_clothing_overlay.dm │ │ │ ├── strappable.dm │ │ │ ├── strippable.dm │ │ │ ├── submerge.dm │ │ │ ├── turf_transparency.dm │ │ │ ├── undertile.dm │ │ │ ├── wall_speedup.dm │ │ │ ├── window_smash.dm │ │ │ └── windowshutter.dm │ │ ├── embedding_behavior.dm │ │ ├── emergency_calls/ │ │ │ ├── clf.dm │ │ │ ├── colonists.dm │ │ │ ├── deathsquad.dm │ │ │ ├── emergency_call.dm │ │ │ ├── erp.dm │ │ │ ├── freelancers.dm │ │ │ ├── icc.dm │ │ │ ├── imperium.dm │ │ │ ├── pizza.dm │ │ │ ├── pmc.dm │ │ │ ├── retired.dm │ │ │ ├── sectoid.dm │ │ │ ├── skeleton.dm │ │ │ ├── sons_of_mars_breachers.dm │ │ │ ├── sonsofmars.dm │ │ │ ├── special_forces.dm │ │ │ ├── supplies.dm │ │ │ ├── upp.dm │ │ │ ├── upp_commando.dm │ │ │ ├── vsd.dm │ │ │ ├── xeno.dm │ │ │ ├── xenoalpha.dm │ │ │ ├── xenobeta.dm │ │ │ ├── xenocorrupted.dm │ │ │ └── xenozeta.dm │ │ ├── emotes.dm │ │ ├── fire_support/ │ │ │ ├── drop_pod.dm │ │ │ ├── fire_support.dm │ │ │ ├── gun_run.dm │ │ │ ├── missile.dm │ │ │ ├── mortar.dm │ │ │ ├── rockets.dm │ │ │ └── teleport.dm │ │ ├── fluff_emails.dm │ │ ├── gamemodes/ │ │ │ ├── _game_mode.dm │ │ │ ├── campaign/ │ │ │ │ ├── campaign_assets.dm │ │ │ │ ├── campaign_mission.dm │ │ │ │ ├── faction_stats.dm │ │ │ │ ├── individual_stats.dm │ │ │ │ ├── loadout_items/ │ │ │ │ │ ├── SOM/ │ │ │ │ │ │ ├── back_slot.dm │ │ │ │ │ │ ├── belt.dm │ │ │ │ │ │ ├── ears.dm │ │ │ │ │ │ ├── feet.dm │ │ │ │ │ │ ├── gloves.dm │ │ │ │ │ │ ├── head.dm │ │ │ │ │ │ ├── pockets.dm │ │ │ │ │ │ ├── secondaries.dm │ │ │ │ │ │ ├── suit.dm │ │ │ │ │ │ ├── suit_storage/ │ │ │ │ │ │ │ ├── engineer.dm │ │ │ │ │ │ │ ├── field_commander.dm │ │ │ │ │ │ │ ├── medic.dm │ │ │ │ │ │ │ ├── squad_leader.dm │ │ │ │ │ │ │ ├── standard.dm │ │ │ │ │ │ │ └── veteran.dm │ │ │ │ │ │ └── uniform.dm │ │ │ │ │ ├── _TGMC/ │ │ │ │ │ │ ├── back_slot.dm │ │ │ │ │ │ ├── belt.dm │ │ │ │ │ │ ├── ears.dm │ │ │ │ │ │ ├── eyes.dm │ │ │ │ │ │ ├── feet.dm │ │ │ │ │ │ ├── gloves.dm │ │ │ │ │ │ ├── head.dm │ │ │ │ │ │ ├── mask.dm │ │ │ │ │ │ ├── pockets.dm │ │ │ │ │ │ ├── secondaries.dm │ │ │ │ │ │ ├── suit.dm │ │ │ │ │ │ ├── suit_storage/ │ │ │ │ │ │ │ ├── corpsman.dm │ │ │ │ │ │ │ ├── engineer.dm │ │ │ │ │ │ │ ├── field_commander.dm │ │ │ │ │ │ │ ├── marine.dm │ │ │ │ │ │ │ ├── smartgunner.dm │ │ │ │ │ │ │ └── squad_leader.dm │ │ │ │ │ │ ├── suit_storage.dm │ │ │ │ │ │ └── uniform.dm │ │ │ │ │ ├── generic_secondaries/ │ │ │ │ │ │ ├── corpsman.dm │ │ │ │ │ │ └── engineer.dm │ │ │ │ │ ├── secondary.dm │ │ │ │ │ └── secondary_types.dm │ │ │ │ ├── loadout_items.dm │ │ │ │ ├── missions/ │ │ │ │ │ ├── airbase_raid.dm │ │ │ │ │ ├── asat_capture.dm │ │ │ │ │ ├── base_rescue.dm │ │ │ │ │ ├── capture_mission.dm │ │ │ │ │ ├── comm_uplink.dm │ │ │ │ │ ├── destroy_mission.dm │ │ │ │ │ ├── final_mission.dm │ │ │ │ │ ├── fire_support_raid.dm │ │ │ │ │ ├── mech_wars.dm │ │ │ │ │ ├── patrol_mission.dm │ │ │ │ │ ├── phoron_capture.dm │ │ │ │ │ ├── raiding_base.dm │ │ │ │ │ ├── spearhead_assault.dm │ │ │ │ │ ├── supply_raid.dm │ │ │ │ │ └── teleporter_raid.dm │ │ │ │ ├── outfit_holder.dm │ │ │ │ ├── perks.dm │ │ │ │ └── rewards/ │ │ │ │ ├── allies.dm │ │ │ │ ├── attrition_mods.dm │ │ │ │ ├── campaign_asset_jobs.dm │ │ │ │ ├── disablers.dm │ │ │ │ ├── drop_pods.dm │ │ │ │ ├── equipment.dm │ │ │ │ ├── fire_support.dm │ │ │ │ ├── mechs.dm │ │ │ │ ├── reserves.dm │ │ │ │ └── teleporter.dm │ │ │ ├── campaign.dm │ │ │ ├── combat_patrol.dm │ │ │ ├── crash.dm │ │ │ ├── extended.dm │ │ │ ├── hvh.dm │ │ │ ├── infestation.dm │ │ │ ├── nuclear_war.dm │ │ │ ├── objective.dm │ │ │ ├── objective_items.dm │ │ │ ├── sensor_capture.dm │ │ │ ├── sovl_war.dm │ │ │ └── zombie_crash.dm │ │ ├── greyscale/ │ │ │ ├── README.md │ │ │ ├── _greyscale_config.dm │ │ │ ├── config_types/ │ │ │ │ └── new_mech.dm │ │ │ ├── greyscale_configs.dm │ │ │ ├── json_configs/ │ │ │ │ ├── ammo.json │ │ │ │ ├── armor_mk1.json │ │ │ │ ├── armor_mk2.json │ │ │ │ ├── badge.json │ │ │ │ ├── bench_corner.json │ │ │ │ ├── bench_left.json │ │ │ │ ├── bench_middle.json │ │ │ │ ├── bench_right.json │ │ │ │ ├── bench_solo.json │ │ │ │ ├── broken_man.json │ │ │ │ ├── cape.json │ │ │ │ ├── cape_highlight.json │ │ │ │ ├── duster.json │ │ │ │ ├── exoskeleton.json │ │ │ │ ├── greyscale_visor.json │ │ │ │ ├── hardsuit_variant.json │ │ │ │ ├── leather_jacket.json │ │ │ │ ├── marine_uniform.json │ │ │ │ ├── mech_arm.json │ │ │ │ ├── mech_head.json │ │ │ │ ├── mech_legs.json │ │ │ │ ├── mech_torso.json │ │ │ │ ├── mech_visor.json │ │ │ │ ├── new_mech_arm.json │ │ │ │ ├── new_mech_head.json │ │ │ │ ├── new_mech_legs.json │ │ │ │ ├── new_mech_torso.json │ │ │ │ ├── new_mech_visor.json │ │ │ │ ├── pillbottle.json │ │ │ │ ├── pillbottlebox.json │ │ │ │ ├── pillbottlebubble.json │ │ │ │ ├── pillbottlecrate.json │ │ │ │ ├── pillbottleround.json │ │ │ │ ├── pillbottlespire.json │ │ │ │ ├── projectiles.json │ │ │ │ ├── protein.json │ │ │ │ ├── robot_armor.json │ │ │ │ ├── screwdriver.json │ │ │ │ ├── screwdriver_inhand_left.json │ │ │ │ ├── screwdriver_inhand_right.json │ │ │ │ ├── stylehats.json │ │ │ │ ├── stylehats_greyscale.json │ │ │ │ ├── visor_glyphs.json │ │ │ │ ├── visors.json │ │ │ │ ├── vsd_hardsuit.json │ │ │ │ ├── xenogrenade.json │ │ │ │ ├── xenonaut.json │ │ │ │ └── xenonaut_helm.json │ │ │ └── layer.dm │ │ ├── health_scan/ │ │ │ ├── _advice.dm │ │ │ ├── advice/ │ │ │ │ ├── chem_mix_warnings.dm │ │ │ │ ├── crit_condition.dm │ │ │ │ ├── damage_types.dm │ │ │ │ ├── implanted_embryo.dm │ │ │ │ ├── limb_warnings.dm │ │ │ │ ├── revival_tips.dm │ │ │ │ ├── special_max_health.dm │ │ │ │ ├── species_notes.dm │ │ │ │ └── traumatic_shock.dm │ │ │ ├── health_scan.dm │ │ │ └── historic_scans.dm │ │ ├── helper_datums/ │ │ │ ├── getrev.dm │ │ │ └── stack_end_detector.dm │ │ ├── holocall.dm │ │ ├── http.dm │ │ ├── interior/ │ │ │ ├── _interior.dm │ │ │ ├── interior_apc.dm │ │ │ ├── interior_icc_recontank.dm │ │ │ ├── interior_tank.dm │ │ │ ├── link_interior.dm │ │ │ └── map_templates.dm │ │ ├── jobs/ │ │ │ ├── access.dm │ │ │ ├── job/ │ │ │ │ ├── clf.dm │ │ │ │ ├── deathsquad.dm │ │ │ │ ├── erp.dm │ │ │ │ ├── fallen.dm │ │ │ │ ├── freelancers.dm │ │ │ │ ├── icc.dm │ │ │ │ ├── imperium.dm │ │ │ │ ├── job.dm │ │ │ │ ├── job_exp.dm │ │ │ │ ├── marines.dm │ │ │ │ ├── mercenaries.dm │ │ │ │ ├── other.dm │ │ │ │ ├── pmc.dm │ │ │ │ ├── retired.dm │ │ │ │ ├── sectoid.dm │ │ │ │ ├── shipside.dm │ │ │ │ ├── skeleton.dm │ │ │ │ ├── sons_of_mars_ert.dm │ │ │ │ ├── sons_of_mars_shipside.dm │ │ │ │ ├── sonsofmars.dm │ │ │ │ ├── special_forces.dm │ │ │ │ ├── survivor.dm │ │ │ │ ├── terragov.dm │ │ │ │ ├── upp.dm │ │ │ │ ├── upp_commando.dm │ │ │ │ ├── vsd.dm │ │ │ │ └── xenomorph.dm │ │ │ └── squads.dm │ │ ├── keybinding/ │ │ │ ├── _keybindings.dm │ │ │ ├── admin.dm │ │ │ ├── carbon.dm │ │ │ ├── client.dm │ │ │ ├── communication.dm │ │ │ ├── custom_emote.dm │ │ │ ├── cyberware.dm │ │ │ ├── emote.dm │ │ │ ├── human.dm │ │ │ ├── item_toggles.dm │ │ │ ├── living.dm │ │ │ ├── mecha.dm │ │ │ ├── mob.dm │ │ │ ├── movement.dm │ │ │ ├── sectoid.dm │ │ │ ├── vehicle_keybinds.dm │ │ │ ├── weapons.dm │ │ │ └── xeno.dm │ │ ├── lazy_template.dm │ │ ├── loadout/ │ │ │ ├── item_representation/ │ │ │ │ ├── _item_representation.dm │ │ │ │ ├── armor_representation.dm │ │ │ │ ├── gun_representation.dm │ │ │ │ ├── helmet_representation.dm │ │ │ │ └── uniform_representation.dm │ │ │ ├── loadout.dm │ │ │ ├── loadout_helper.dm │ │ │ ├── loadout_manager.dm │ │ │ ├── loadout_seller.dm │ │ │ └── old_typepaths.dm │ │ ├── looping_sounds/ │ │ │ ├── _looping_sound.dm │ │ │ ├── machinery_sounds.dm │ │ │ ├── music.dm │ │ │ ├── tank.dm │ │ │ ├── vehicle.dm │ │ │ ├── weather_sounds.dm │ │ │ └── xeno_sounds.dm │ │ ├── managed_inventory.dm │ │ ├── map_config.dm │ │ ├── medal_awards.dm │ │ ├── mind.dm │ │ ├── movement_detector.dm │ │ ├── mutable_appearance.dm │ │ ├── namepool.dm │ │ ├── outfits/ │ │ │ ├── _outfit.dm │ │ │ ├── campaign_asset.dm │ │ │ ├── clf.dm │ │ │ ├── deathsquad.dm │ │ │ ├── erp.dm │ │ │ ├── freelancers.dm │ │ │ ├── icc.dm │ │ │ ├── imperium.dm │ │ │ ├── job.dm │ │ │ ├── marines.dm │ │ │ ├── mercenaries.dm │ │ │ ├── misc.dm │ │ │ ├── npc_marines.dm │ │ │ ├── pmc.dm │ │ │ ├── quick_load_beginners.dm │ │ │ ├── quick_load_civil_war.dm │ │ │ ├── quick_load_outfits.dm │ │ │ ├── quick_load_robots.dm │ │ │ ├── retired.dm │ │ │ ├── sectoid.dm │ │ │ ├── shipside.dm │ │ │ ├── skeleton.dm │ │ │ ├── som.dm │ │ │ ├── som_ert.dm │ │ │ ├── som_shipside.dm │ │ │ ├── special_forces.dm │ │ │ ├── survivor.dm │ │ │ ├── upp.dm │ │ │ ├── upp_commando.dm │ │ │ ├── vsd.dm │ │ │ └── vv_outfit.dm │ │ ├── personal_statistics.dm │ │ ├── progressbar.dm │ │ ├── proximity_monitor/ │ │ │ ├── field.dm │ │ │ └── proximity_monitor.dm │ │ ├── recipe.dm │ │ ├── round_statistics.dm │ │ ├── saymode.dm │ │ ├── shuttles.dm │ │ ├── signals.dm │ │ ├── skills.dm │ │ ├── status_effects/ │ │ │ ├── debuffs.dm │ │ │ ├── gun_skill.dm │ │ │ ├── sectoid.dm │ │ │ ├── speech_debuffs.dm │ │ │ ├── status_effect.dm │ │ │ └── xeno_buffs.dm │ │ ├── storage/ │ │ │ ├── storage.dm │ │ │ └── subtypes/ │ │ │ ├── backpack.dm │ │ │ ├── bag.dm │ │ │ ├── belt.dm │ │ │ ├── bible.dm │ │ │ ├── box.dm │ │ │ ├── briefcase.dm │ │ │ ├── holster.dm │ │ │ ├── internal.dm │ │ │ ├── kitchen_tray.dm │ │ │ ├── lockbox.dm │ │ │ ├── pill_bottle.dm │ │ │ ├── pouch.dm │ │ │ ├── reagent_tank.dm │ │ │ ├── surgical_tray.dm │ │ │ ├── tank.dm │ │ │ └── wallet.dm │ │ ├── tgs_event_handler.dm │ │ ├── verbs.dm │ │ ├── view.dm │ │ ├── visual_data.dm │ │ ├── weakrefs.dm │ │ ├── weather/ │ │ │ ├── weather.dm │ │ │ └── weather_types/ │ │ │ ├── acid_rain.dm │ │ │ ├── ash_storm.dm │ │ │ ├── sand_storm.dm │ │ │ └── snow_storm.dm │ │ ├── wires/ │ │ │ ├── _wires.dm │ │ │ ├── airlock.dm │ │ │ ├── apc.dm │ │ │ ├── radio.dm │ │ │ ├── spaceship.dm │ │ │ └── vending.dm │ │ └── world_topic.dm │ ├── game/ │ │ ├── alternate_appearance.dm │ │ ├── area/ │ │ │ ├── LV759_Hybrisa_Prospera.dm │ │ │ ├── ai_monitored.dm │ │ │ ├── area.dm │ │ │ ├── areas/ │ │ │ │ └── shuttles.dm │ │ │ ├── bigred.dm │ │ │ ├── bluemoon.dm │ │ │ ├── bluesummers.dm │ │ │ ├── campaign_maps/ │ │ │ │ ├── jungle_outpost.dm │ │ │ │ ├── som_base.dm │ │ │ │ ├── som_raiding_base.dm │ │ │ │ ├── tgmc_airfield.dm │ │ │ │ └── tgmc_raiding_base.dm │ │ │ ├── centcom.dm │ │ │ ├── corsat.dm │ │ │ ├── daedalusprison.dm │ │ │ ├── deltastation.dm │ │ │ ├── desertdam.dm │ │ │ ├── gelida_iv.dm │ │ │ ├── general.dm │ │ │ ├── icecolony.dm │ │ │ ├── icy_caves.dm │ │ │ ├── kutjevo.dm │ │ │ ├── lava_outpost.dm │ │ │ ├── lawankaoutpost.dm │ │ │ ├── lv624.dm │ │ │ ├── magmoor_digsite.dm │ │ │ ├── mainship.dm │ │ │ ├── metnal.dm │ │ │ ├── orion_outpost.dm │ │ │ ├── oscaroutpost.dm │ │ │ ├── patricks_rest.dm │ │ │ ├── port_hamburg.dm │ │ │ ├── prison.dm │ │ │ ├── prison_v3_fiorina.dm │ │ │ ├── research_outpost.dm │ │ │ ├── riptide.dm │ │ │ ├── slumbridge.dm │ │ │ ├── sulaco.dm │ │ │ ├── valhallastation.dm │ │ │ ├── vaporprocessing.dm │ │ │ └── whiskeyoutpost.dm │ │ ├── atoms/ │ │ │ ├── _atom.dm │ │ │ ├── atom_appearance.dm │ │ │ ├── atom_examine.dm │ │ │ ├── atom_movable/ │ │ │ │ └── pass_flags.dm │ │ │ ├── atom_movable.dm │ │ │ └── mouse_entered.dm │ │ ├── blood.dm │ │ ├── buckling.dm │ │ ├── communications.dm │ │ ├── data_huds.dm │ │ ├── movable_luminosity.dm │ │ ├── objects/ │ │ │ ├── effects/ │ │ │ │ ├── acid_hole.dm │ │ │ │ ├── aliens.dm │ │ │ │ ├── countdown.dm │ │ │ │ ├── decals/ │ │ │ │ │ ├── Cleanable/ │ │ │ │ │ │ ├── aliens.dm │ │ │ │ │ │ ├── fuel.dm │ │ │ │ │ │ ├── humans.dm │ │ │ │ │ │ ├── misc.dm │ │ │ │ │ │ ├── robots.dm │ │ │ │ │ │ └── tracks.dm │ │ │ │ │ ├── cleanable.dm │ │ │ │ │ ├── contraband.dm │ │ │ │ │ ├── crayon.dm │ │ │ │ │ ├── decal.dm │ │ │ │ │ ├── hybrisa_decals.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── posters/ │ │ │ │ │ │ └── bs12.dm │ │ │ │ │ ├── remains.dm │ │ │ │ │ ├── rune.dm │ │ │ │ │ └── turfdecals/ │ │ │ │ │ ├── environmental.dm │ │ │ │ │ ├── markings.dm │ │ │ │ │ ├── medical_decals.dm │ │ │ │ │ ├── tilecoloring.dm │ │ │ │ │ ├── tracks.dm │ │ │ │ │ └── warning_stripes.dm │ │ │ │ ├── effect.dm │ │ │ │ ├── effect_system/ │ │ │ │ │ ├── effect_system.dm │ │ │ │ │ ├── effects_other.dm │ │ │ │ │ ├── foam.dm │ │ │ │ │ ├── particle_effects.dm │ │ │ │ │ └── smoke.dm │ │ │ │ ├── elevator.dm │ │ │ │ ├── glowshroom.dm │ │ │ │ ├── landmarks/ │ │ │ │ │ ├── corpsespawner.dm │ │ │ │ │ ├── excavation_site_spawner.dm │ │ │ │ │ ├── gamemode/ │ │ │ │ │ │ ├── campaign_reward_spawns.dm │ │ │ │ │ │ ├── campaign_vehicle_spawners.dm │ │ │ │ │ │ ├── crash_spawns.dm │ │ │ │ │ │ └── hvh_deploy_points.dm │ │ │ │ │ ├── itemspawner.dm │ │ │ │ │ ├── landmarks.dm │ │ │ │ │ ├── marine_spawns.dm │ │ │ │ │ ├── mob_spawner.dm │ │ │ │ │ └── mode.dm │ │ │ │ ├── manifest.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── overlays.dm │ │ │ │ ├── particle_holder.dm │ │ │ │ ├── portals.dm │ │ │ │ ├── spawners/ │ │ │ │ │ ├── bombspawner.dm │ │ │ │ │ ├── gibspawner.dm │ │ │ │ │ ├── modularmappingspawner.dm │ │ │ │ │ ├── random/ │ │ │ │ │ │ ├── clothing.dm │ │ │ │ │ │ ├── engineering.dm │ │ │ │ │ │ ├── food_or_drink.dm │ │ │ │ │ │ ├── machinery.dm │ │ │ │ │ │ ├── medical.dm │ │ │ │ │ │ ├── misc_item.dm │ │ │ │ │ │ ├── misc_structure.dm │ │ │ │ │ │ ├── random.dm │ │ │ │ │ │ ├── random_set.dm │ │ │ │ │ │ └── weaponry.dm │ │ │ │ │ ├── spawner.dm │ │ │ │ │ └── vaultspawner.dm │ │ │ │ ├── step_triggers.dm │ │ │ │ ├── tele_blocker.dm │ │ │ │ ├── temporary_visuals/ │ │ │ │ │ ├── explosions.dm │ │ │ │ │ ├── miscellaneous.dm │ │ │ │ │ ├── telegraph_effects.dm │ │ │ │ │ └── temporary_visual.dm │ │ │ │ ├── turf_overunderlays.dm │ │ │ │ └── weeds.dm │ │ │ ├── empulse.dm │ │ │ ├── items/ │ │ │ │ ├── ashtray.dm │ │ │ │ ├── autopsy_scanner.dm │ │ │ │ ├── binoculars.dm │ │ │ │ ├── blink_drive.dm │ │ │ │ ├── blueprints.dm │ │ │ │ ├── bodybag.dm │ │ │ │ ├── books/ │ │ │ │ │ ├── book.dm │ │ │ │ │ └── manuals.dm │ │ │ │ ├── capsule_deployables/ │ │ │ │ │ ├── capsule_deployable.dm │ │ │ │ │ └── templates.dm │ │ │ │ ├── cards_ids.dm │ │ │ │ ├── circuitboards/ │ │ │ │ │ ├── circuitboard.dm │ │ │ │ │ ├── computer.dm │ │ │ │ │ └── machine.dm │ │ │ │ ├── cloaking.dm │ │ │ │ ├── cocoon.dm │ │ │ │ ├── coins.dm │ │ │ │ ├── cosmetics.dm │ │ │ │ ├── debugger.dm │ │ │ │ ├── defibrillator.dm │ │ │ │ ├── devices/ │ │ │ │ │ ├── minimap_tablet.dm │ │ │ │ │ ├── mirage.dm │ │ │ │ │ ├── paper_map.dm │ │ │ │ │ ├── spyglasses.dm │ │ │ │ │ ├── squad_transfer_tablet.dm │ │ │ │ │ ├── tablets.dm │ │ │ │ │ └── tweezers.dm │ │ │ │ ├── disks.dm │ │ │ │ ├── embedding.dm │ │ │ │ ├── explosives/ │ │ │ │ │ ├── bombvest.dm │ │ │ │ │ ├── explosive.dm │ │ │ │ │ ├── genghis_charge.dm │ │ │ │ │ ├── grenades/ │ │ │ │ │ │ ├── bullet_grenade.dm │ │ │ │ │ │ ├── chem_grenade.dm │ │ │ │ │ │ ├── emgrenade.dm │ │ │ │ │ │ ├── explosive_grenades.dm │ │ │ │ │ │ ├── flares.dm │ │ │ │ │ │ ├── flashbang.dm │ │ │ │ │ │ ├── grenade.dm │ │ │ │ │ │ ├── incendiary_grenades.dm │ │ │ │ │ │ ├── phosphorus_grenades.dm │ │ │ │ │ │ ├── rad_grenade.dm │ │ │ │ │ │ ├── smoke_grenades.dm │ │ │ │ │ │ ├── spawnergrenade.dm │ │ │ │ │ │ ├── sticky_grenades.dm │ │ │ │ │ │ ├── training_grenade.dm │ │ │ │ │ │ └── xeno_grenade.dm │ │ │ │ │ ├── mine.dm │ │ │ │ │ └── plastique.dm │ │ │ │ ├── firesupport_binoculars.dm │ │ │ │ ├── fishing.dm │ │ │ │ ├── flash.dm │ │ │ │ ├── flashlight.dm │ │ │ │ ├── floor_painter.dm │ │ │ │ ├── frames/ │ │ │ │ │ ├── alarms.dm │ │ │ │ │ ├── frame.dm │ │ │ │ │ ├── light_fixtures.dm │ │ │ │ │ └── table_rack.dm │ │ │ │ ├── gift_wrappaper.dm │ │ │ │ ├── handcuffs.dm │ │ │ │ ├── implants/ │ │ │ │ │ ├── implant.dm │ │ │ │ │ ├── implant_chem.dm │ │ │ │ │ ├── implant_cloak.dm │ │ │ │ │ ├── implant_items.dm │ │ │ │ │ ├── implant_neurostim.dm │ │ │ │ │ ├── implant_suicidedust.dm │ │ │ │ │ ├── implantcase.dm │ │ │ │ │ ├── implantchair.dm │ │ │ │ │ ├── implanter.dm │ │ │ │ │ ├── implantpad.dm │ │ │ │ │ ├── jump_mod.dm │ │ │ │ │ └── sandevistan.dm │ │ │ │ ├── jetpack.dm │ │ │ │ ├── lightreplacer.dm │ │ │ │ ├── lightstick.dm │ │ │ │ ├── loot_box.dm │ │ │ │ ├── marine_gear.dm │ │ │ │ ├── megaphone.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── motion_detector.dm │ │ │ │ ├── multitool.dm │ │ │ │ ├── npc_beacon.dm │ │ │ │ ├── pamphlets.dm │ │ │ │ ├── pda.dm │ │ │ │ ├── pinpointer.dm │ │ │ │ ├── pipe_painter.dm │ │ │ │ ├── plantable_flags.dm │ │ │ │ ├── portable_vendor.dm │ │ │ │ ├── power_cells.dm │ │ │ │ ├── quickdeploy_cade.dm │ │ │ │ ├── radio/ │ │ │ │ │ ├── beacon.dm │ │ │ │ │ ├── detpack.dm │ │ │ │ │ ├── electropack.dm │ │ │ │ │ ├── encryptionkey.dm │ │ │ │ │ ├── headset.dm │ │ │ │ │ ├── intercom.dm │ │ │ │ │ └── radio.dm │ │ │ │ ├── rcd.dm │ │ │ │ ├── restraints.dm │ │ │ │ ├── robot/ │ │ │ │ │ └── robot_parts.dm │ │ │ │ ├── rpd.dm │ │ │ │ ├── rsf.dm │ │ │ │ ├── rsp.dm │ │ │ │ ├── scanners/ │ │ │ │ │ ├── gas_analyzer.dm │ │ │ │ │ ├── health_analyzer.dm │ │ │ │ │ ├── mass_spectrometer.dm │ │ │ │ │ ├── reagent_scanner.dm │ │ │ │ │ └── terahertz_scanner.dm │ │ │ │ ├── shards.dm │ │ │ │ ├── shooting_range.dm │ │ │ │ ├── stacks/ │ │ │ │ │ ├── barbed_wire.dm │ │ │ │ │ ├── catwalk.dm │ │ │ │ │ ├── flags.dm │ │ │ │ │ ├── medical.dm │ │ │ │ │ ├── nanopaste.dm │ │ │ │ │ ├── rods.dm │ │ │ │ │ ├── sandbags.dm │ │ │ │ │ ├── sheets/ │ │ │ │ │ │ ├── glass.dm │ │ │ │ │ │ ├── leather.dm │ │ │ │ │ │ ├── light.dm │ │ │ │ │ │ ├── mineral.dm │ │ │ │ │ │ ├── sheet_types.dm │ │ │ │ │ │ └── sheets.dm │ │ │ │ │ ├── snow.dm │ │ │ │ │ ├── stack.dm │ │ │ │ │ ├── stack_recipe.dm │ │ │ │ │ └── tiles/ │ │ │ │ │ └── tile_types.dm │ │ │ │ ├── stock_parts.dm │ │ │ │ ├── storage/ │ │ │ │ │ ├── backpack.dm │ │ │ │ │ ├── bags.dm │ │ │ │ │ ├── belt.dm │ │ │ │ │ ├── bible.dm │ │ │ │ │ ├── boxes.dm │ │ │ │ │ ├── briefcase.dm │ │ │ │ │ ├── dispenser.dm │ │ │ │ │ ├── fancy.dm │ │ │ │ │ ├── firstaid.dm │ │ │ │ │ ├── holsters.dm │ │ │ │ │ ├── kitchen_tray.dm │ │ │ │ │ ├── lockbox.dm │ │ │ │ │ ├── marine_boxes.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── pill_packets.dm │ │ │ │ │ ├── pouch.dm │ │ │ │ │ ├── reagent_pouch.dm │ │ │ │ │ ├── secure.dm │ │ │ │ │ ├── storage.dm │ │ │ │ │ ├── surgical_tray.dm │ │ │ │ │ ├── toolbox.dm │ │ │ │ │ └── wallets.dm │ │ │ │ ├── suit_cooling.dm │ │ │ │ ├── tanks/ │ │ │ │ │ ├── jetpack.dm │ │ │ │ │ ├── tank_types.dm │ │ │ │ │ └── tanks.dm │ │ │ │ ├── taperecorder.dm │ │ │ │ ├── tools/ │ │ │ │ │ ├── cleaning_tools.dm │ │ │ │ │ ├── extinguisher.dm │ │ │ │ │ ├── flame_tools.dm │ │ │ │ │ ├── hydro_tools.dm │ │ │ │ │ ├── kitchen_tools.dm │ │ │ │ │ ├── maintenance_tools.dm │ │ │ │ │ ├── mining_tools.dm │ │ │ │ │ ├── misc_tools.dm │ │ │ │ │ ├── policetape.dm │ │ │ │ │ ├── research_tools.dm │ │ │ │ │ ├── shovel_tools.dm │ │ │ │ │ ├── surgery_tools.dm │ │ │ │ │ └── tool.dm │ │ │ │ ├── toys/ │ │ │ │ │ ├── cards.dm │ │ │ │ │ ├── crayons.dm │ │ │ │ │ ├── toy_weapons.dm │ │ │ │ │ └── toys.dm │ │ │ │ ├── transfer_valve.dm │ │ │ │ ├── trash.dm │ │ │ │ ├── weapons/ │ │ │ │ │ ├── batons.dm │ │ │ │ │ ├── blades.dm │ │ │ │ │ ├── civilian.dm │ │ │ │ │ ├── energy.dm │ │ │ │ │ ├── harvester.dm │ │ │ │ │ ├── holo_weapons.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── shields.dm │ │ │ │ │ ├── shivs.dm │ │ │ │ │ ├── stunbaton.dm │ │ │ │ │ ├── swords.dm │ │ │ │ │ ├── two_handed/ │ │ │ │ │ │ ├── basic.dm │ │ │ │ │ │ ├── boarding_axe.dm │ │ │ │ │ │ ├── chainsaws.dm │ │ │ │ │ │ ├── industrial_saw.dm │ │ │ │ │ │ ├── rocket_sledge.dm │ │ │ │ │ │ ├── spears.dm │ │ │ │ │ │ └── twohanded.dm │ │ │ │ │ ├── weapon.dm │ │ │ │ │ └── weaponry.dm │ │ │ │ ├── whistle.dm │ │ │ │ └── xeno_iff_tags.dm │ │ │ ├── items.dm │ │ │ ├── machinery/ │ │ │ │ ├── OpTable.dm │ │ │ │ ├── adv_med.dm │ │ │ │ ├── air_alarm.dm │ │ │ │ ├── artillery/ │ │ │ │ │ ├── boxes.dm │ │ │ │ │ ├── howitzer.dm │ │ │ │ │ ├── mlrs.dm │ │ │ │ │ ├── mortar.dm │ │ │ │ │ └── shells.dm │ │ │ │ ├── autodoc.dm │ │ │ │ ├── bees_apiary.dm │ │ │ │ ├── bioprinter.dm │ │ │ │ ├── bots/ │ │ │ │ │ ├── bots.dm │ │ │ │ │ ├── cleanbot.dm │ │ │ │ │ └── roomba.dm │ │ │ │ ├── buttons.dm │ │ │ │ ├── camera/ │ │ │ │ │ ├── camera.dm │ │ │ │ │ ├── camera_assembly.dm │ │ │ │ │ ├── deployable_camera.dm │ │ │ │ │ └── tracking.dm │ │ │ │ ├── cell_charger.dm │ │ │ │ ├── cic_maptable.dm │ │ │ │ ├── cloning/ │ │ │ │ │ └── cloning.dm │ │ │ │ ├── computer/ │ │ │ │ │ ├── HolodeckControl.dm │ │ │ │ │ ├── Operating.dm │ │ │ │ │ ├── aifixer.dm │ │ │ │ │ ├── arcade.dm │ │ │ │ │ ├── area_air_control.dm │ │ │ │ │ ├── atmos_alert.dm │ │ │ │ │ ├── buildandrepair.dm │ │ │ │ │ ├── camera.dm │ │ │ │ │ ├── camera_advanced.dm │ │ │ │ │ ├── camera_console.dm │ │ │ │ │ ├── code_generator.dm │ │ │ │ │ ├── communications.dm │ │ │ │ │ ├── computer.dm │ │ │ │ │ ├── crew.dm │ │ │ │ │ ├── droppod_control.dm │ │ │ │ │ ├── dropship_picker.dm │ │ │ │ │ ├── dropship_weapons.dm │ │ │ │ │ ├── emails.dm │ │ │ │ │ ├── general_air_control.dm │ │ │ │ │ ├── guestpass.dm │ │ │ │ │ ├── intel_computer.dm │ │ │ │ │ ├── marines_consoles.dm │ │ │ │ │ ├── medical.dm │ │ │ │ │ ├── nt_access.dm │ │ │ │ │ ├── nuke_disk_generator.dm │ │ │ │ │ ├── pod.dm │ │ │ │ │ ├── prisoner.dm │ │ │ │ │ ├── robot.dm │ │ │ │ │ ├── security.dm │ │ │ │ │ ├── skills.dm │ │ │ │ │ ├── som_computer.dm │ │ │ │ │ └── station_alert.dm │ │ │ │ ├── constructable_frame.dm │ │ │ │ ├── cryopod.dm │ │ │ │ ├── data_disks.dm │ │ │ │ ├── deployable.dm │ │ │ │ ├── door_control.dm │ │ │ │ ├── door_display/ │ │ │ │ │ └── door_display.dm │ │ │ │ ├── doors/ │ │ │ │ │ ├── airlock.dm │ │ │ │ │ ├── airlock_control.dm │ │ │ │ │ ├── airlock_types.dm │ │ │ │ │ ├── checkForMultipleDoors.dm │ │ │ │ │ ├── door.dm │ │ │ │ │ ├── firedoor.dm │ │ │ │ │ ├── multi_tile.dm │ │ │ │ │ ├── poddoor.dm │ │ │ │ │ ├── railing.dm │ │ │ │ │ ├── shutters.dm │ │ │ │ │ ├── unpowered.dm │ │ │ │ │ └── windowdoor.dm │ │ │ │ ├── dropship_part_fabricator.dm │ │ │ │ ├── fax.dm │ │ │ │ ├── fire_alarm.dm │ │ │ │ ├── flasher.dm │ │ │ │ ├── floodlight.dm │ │ │ │ ├── fuelcell_recycler.dm │ │ │ │ ├── gear.dm │ │ │ │ ├── hologram.dm │ │ │ │ ├── holosign.dm │ │ │ │ ├── igniter.dm │ │ │ │ ├── iv_drip.dm │ │ │ │ ├── kitchen/ │ │ │ │ │ ├── gibber.dm │ │ │ │ │ ├── microwave.dm │ │ │ │ │ ├── processor.dm │ │ │ │ │ └── smartfridge.dm │ │ │ │ ├── lightswitch.dm │ │ │ │ ├── line_nexter.dm │ │ │ │ ├── minelayer.dm │ │ │ │ ├── miner.dm │ │ │ │ ├── navbeacon.dm │ │ │ │ ├── newscaster.dm │ │ │ │ ├── nuclearbomb.dm │ │ │ │ ├── overwatch/ │ │ │ │ │ ├── _overwatch.dm │ │ │ │ │ ├── military.dm │ │ │ │ │ └── types.dm │ │ │ │ ├── pipe/ │ │ │ │ │ ├── construction.dm │ │ │ │ │ └── pipe_dispenser.dm │ │ │ │ ├── portable_reagent_tank.dm │ │ │ │ ├── practice/ │ │ │ │ │ └── medical.dm │ │ │ │ ├── recharger.dm │ │ │ │ ├── rechargestation.dm │ │ │ │ ├── research.dm │ │ │ │ ├── robot_fabricator.dm │ │ │ │ ├── robotic_cradle.dm │ │ │ │ ├── science.dm │ │ │ │ ├── scoreboard.dm │ │ │ │ ├── seed_extractor.dm │ │ │ │ ├── self_destruct.dm │ │ │ │ ├── sellingpad.dm │ │ │ │ ├── shield_gen.dm │ │ │ │ ├── sleeper.dm │ │ │ │ ├── spaceheater.dm │ │ │ │ ├── squad_manager.dm │ │ │ │ ├── squad_selector.dm │ │ │ │ ├── squad_supply/ │ │ │ │ │ ├── supply_beacon.dm │ │ │ │ │ ├── supply_console.dm │ │ │ │ │ ├── supply_packer.dm │ │ │ │ │ └── supply_pads.dm │ │ │ │ ├── status_display.dm │ │ │ │ ├── street_lamps.dm │ │ │ │ ├── suit_storage_unit.dm │ │ │ │ ├── telecomms/ │ │ │ │ │ ├── broadcasting.dm │ │ │ │ │ ├── computers/ │ │ │ │ │ │ ├── logbrowser.dm │ │ │ │ │ │ └── telemonitor.dm │ │ │ │ │ ├── machines/ │ │ │ │ │ │ ├── allinone.dm │ │ │ │ │ │ ├── broadcaster.dm │ │ │ │ │ │ ├── bus.dm │ │ │ │ │ │ ├── hub.dm │ │ │ │ │ │ ├── processor.dm │ │ │ │ │ │ ├── receiver.dm │ │ │ │ │ │ ├── relay.dm │ │ │ │ │ │ └── server.dm │ │ │ │ │ └── telecomunications.dm │ │ │ │ ├── teleporter.dm │ │ │ │ ├── tesla_turret.dm │ │ │ │ ├── vending/ │ │ │ │ │ ├── beginner_vendor.dm │ │ │ │ │ ├── civil_war_vendor.dm │ │ │ │ │ ├── loadout_vendor.dm │ │ │ │ │ ├── marine_vending.dm │ │ │ │ │ ├── new_marine_vendors.dm │ │ │ │ │ ├── quick_vendor.dm │ │ │ │ │ ├── vending.dm │ │ │ │ │ ├── vending_types.dm │ │ │ │ │ └── zombie_crash_vendor.dm │ │ │ │ └── washing_machine.dm │ │ │ ├── machinery.dm │ │ │ ├── metnal_objects.dm │ │ │ ├── obj_defense.dm │ │ │ ├── objs.dm │ │ │ ├── structures/ │ │ │ │ ├── barricade.dm │ │ │ │ ├── barsign.dm │ │ │ │ ├── bedsheet_bin.dm │ │ │ │ ├── benchpress.dm │ │ │ │ ├── bookcase.dm │ │ │ │ ├── campaign_props.dm │ │ │ │ ├── campaign_structures/ │ │ │ │ │ ├── campaign_structure.dm │ │ │ │ │ ├── capture_objectives.dm │ │ │ │ │ ├── deploy_blockers.dm │ │ │ │ │ ├── destroy_objectives.dm │ │ │ │ │ ├── misc_structures.dm │ │ │ │ │ └── orbital_beacons.dm │ │ │ │ ├── cargo_container.dm │ │ │ │ ├── cas_plane_parts.dm │ │ │ │ ├── coathanger.dm │ │ │ │ ├── concrete_planter.dm │ │ │ │ ├── crates_lockers/ │ │ │ │ │ ├── closets/ │ │ │ │ │ │ ├── coffin.dm │ │ │ │ │ │ ├── crittercrate.dm │ │ │ │ │ │ ├── fireaxe.dm │ │ │ │ │ │ ├── fitness.dm │ │ │ │ │ │ ├── gimmick.dm │ │ │ │ │ │ ├── job_closets.dm │ │ │ │ │ │ ├── l3closet.dm │ │ │ │ │ │ ├── malfunction.dm │ │ │ │ │ │ ├── secure/ │ │ │ │ │ │ │ ├── bar.dm │ │ │ │ │ │ │ ├── cargo.dm │ │ │ │ │ │ │ ├── cm_closets.dm │ │ │ │ │ │ │ ├── engineering.dm │ │ │ │ │ │ │ ├── freezer.dm │ │ │ │ │ │ │ ├── guncabinet.dm │ │ │ │ │ │ │ ├── hydroponics.dm │ │ │ │ │ │ │ ├── medical.dm │ │ │ │ │ │ │ ├── personal.dm │ │ │ │ │ │ │ ├── scientist.dm │ │ │ │ │ │ │ ├── secure_closets.dm │ │ │ │ │ │ │ └── security.dm │ │ │ │ │ │ ├── utility_closets.dm │ │ │ │ │ │ └── wardrobe.dm │ │ │ │ │ ├── closets.dm │ │ │ │ │ ├── crates.dm │ │ │ │ │ ├── largecrate.dm │ │ │ │ │ ├── largecrate_supplies.dm │ │ │ │ │ ├── secure_crates.dm │ │ │ │ │ └── walllocker.dm │ │ │ │ ├── curtains.dm │ │ │ │ ├── desertdam.dm │ │ │ │ ├── displaycase.dm │ │ │ │ ├── door_assembly.dm │ │ │ │ ├── droppod.dm │ │ │ │ ├── dropship_ammo.dm │ │ │ │ ├── dropship_equipment.dm │ │ │ │ ├── dummy_mapping_objects.dm │ │ │ │ ├── electricchair.dm │ │ │ │ ├── extinguisher.dm │ │ │ │ ├── fence.dm │ │ │ │ ├── flora.dm │ │ │ │ ├── girders.dm │ │ │ │ ├── grille.dm │ │ │ │ ├── handrail.dm │ │ │ │ ├── hybrisa_props.dm │ │ │ │ ├── inflatable.dm │ │ │ │ ├── janicart.dm │ │ │ │ ├── kitchen_spike.dm │ │ │ │ ├── ladders.dm │ │ │ │ ├── lamarr_cage.dm │ │ │ │ ├── landing_signs.dm │ │ │ │ ├── large_vehicle_props.dm │ │ │ │ ├── lattice.dm │ │ │ │ ├── memorial.dm │ │ │ │ ├── mine_structures.dm │ │ │ │ ├── mineral_doors.dm │ │ │ │ ├── mirror.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── morgue.dm │ │ │ │ ├── musician.dm │ │ │ │ ├── noticeboard.dm │ │ │ │ ├── orbital_cannon.dm │ │ │ │ ├── patrol_points.dm │ │ │ │ ├── platforms.dm │ │ │ │ ├── prop.dm │ │ │ │ ├── rappel_system.dm │ │ │ │ ├── razorwire.dm │ │ │ │ ├── reagent_dispensers.dm │ │ │ │ ├── rocks.dm │ │ │ │ ├── safe.dm │ │ │ │ ├── sensor_tower.dm │ │ │ │ ├── signs.dm │ │ │ │ ├── som_cas_parts.dm │ │ │ │ ├── stairs.dm │ │ │ │ ├── stool_bed_chair_nest/ │ │ │ │ │ ├── bed.dm │ │ │ │ │ ├── chairs.dm │ │ │ │ │ ├── janicart.dm │ │ │ │ │ ├── stools.dm │ │ │ │ │ └── xeno_nest.dm │ │ │ │ ├── supplypod.dm │ │ │ │ ├── supports.dm │ │ │ │ ├── tables_racks.dm │ │ │ │ ├── tank_dispenser.dm │ │ │ │ ├── teleporter.dm │ │ │ │ ├── teleporter_array.dm │ │ │ │ ├── toolboxtrophy.dm │ │ │ │ ├── tram_rail.dm │ │ │ │ ├── vehicle_props.dm │ │ │ │ ├── watercloset.dm │ │ │ │ ├── windoor_assembly.dm │ │ │ │ ├── window.dm │ │ │ │ ├── window_frame.dm │ │ │ │ └── xeno.dm │ │ │ └── structures.dm │ │ ├── say.dm │ │ ├── shuttle_engines.dm │ │ ├── smoothwall.dm │ │ ├── sound.dm │ │ ├── turfs/ │ │ │ ├── baseturf_skipover.dm │ │ │ ├── closed.dm │ │ │ ├── floor.dm │ │ │ ├── floor_ground.dm │ │ │ ├── floor_types.dm │ │ │ ├── iron_floor.dm │ │ │ ├── liquid_turfs.dm │ │ │ ├── markings.dm │ │ │ ├── open/ │ │ │ │ └── openspace.dm │ │ │ ├── open.dm │ │ │ ├── open_ground.dm │ │ │ ├── plating.dm │ │ │ ├── roof_types.dm │ │ │ ├── snow.dm │ │ │ ├── space/ │ │ │ │ └── transit.dm │ │ │ ├── space.dm │ │ │ ├── turf.dm │ │ │ └── walls/ │ │ │ ├── r_wall.dm │ │ │ ├── resin.dm │ │ │ ├── wall_types.dm │ │ │ └── walls.dm │ │ ├── verbs/ │ │ │ ├── ooc.dm │ │ │ ├── suicide.dm │ │ │ ├── typing.dm │ │ │ └── who.dm │ │ ├── visual_objects.dm │ │ └── world.dm │ ├── genesis_call.dme │ ├── modules/ │ │ ├── admin/ │ │ │ ├── IsBanned.dm │ │ │ ├── admin_ranks.dm │ │ │ ├── admin_verbs.dm │ │ │ ├── callproc.dm │ │ │ ├── debug_verbs.dm │ │ │ ├── fun_verbs.dm │ │ │ ├── holder.dm │ │ │ ├── outfit_editor.dm │ │ │ ├── outfit_manager.dm │ │ │ ├── outfits.dm │ │ │ ├── panels/ │ │ │ │ ├── Campaign_panel.dm │ │ │ │ ├── antag_panel.dm │ │ │ │ ├── ban_panel.dm │ │ │ │ ├── game_panel.dm │ │ │ │ ├── mode_panel.dm │ │ │ │ ├── note_panel.dm │ │ │ │ ├── permission_panel.dm │ │ │ │ ├── player_panel.dm │ │ │ │ ├── poll_panel.dm │ │ │ │ └── secrets_panel.dm │ │ │ ├── preferences_verbs.dm │ │ │ ├── server_verbs.dm │ │ │ ├── smites/ │ │ │ │ ├── ai_replacement.dm │ │ │ │ ├── bloodless.dm │ │ │ │ ├── boneless.dm │ │ │ │ ├── brain_damage.dm │ │ │ │ ├── bread.dm │ │ │ │ ├── bsa.dm │ │ │ │ ├── fake_bwoink.dm │ │ │ │ ├── fat.dm │ │ │ │ ├── gib.dm │ │ │ │ ├── knot_shoes.dm │ │ │ │ ├── lightning.dm │ │ │ │ ├── nugget.dm │ │ │ │ ├── puzzle.dm │ │ │ │ └── smite.dm │ │ │ ├── special_verbs.dm │ │ │ ├── stickyban.dm │ │ │ ├── tag.dm │ │ │ ├── topic.dm │ │ │ ├── verb_datums/ │ │ │ │ └── _admin_verb_datum.dm │ │ │ ├── verbs/ │ │ │ │ ├── SDQL2/ │ │ │ │ │ ├── SDQL_2.dm │ │ │ │ │ ├── SDQL_2_parser.dm │ │ │ │ │ └── SDQL_2_wrappers.dm │ │ │ │ ├── adminhelp.dm │ │ │ │ ├── centcom_podlauncher.dm │ │ │ │ ├── chat_commands.dm │ │ │ │ ├── datumvars.dm │ │ │ │ ├── faxes.dm │ │ │ │ ├── map_template.dm │ │ │ │ ├── plane_debugger.dm │ │ │ │ ├── poll_managment.dm │ │ │ │ ├── pray.dm │ │ │ │ ├── request_internet_sound.dm │ │ │ │ ├── selectequipment.dm │ │ │ │ ├── shuttlepanel.dm │ │ │ │ └── whitelist.dm │ │ │ └── view_variables/ │ │ │ ├── admin_delete.dm │ │ │ ├── color_matrix_editor.dm │ │ │ ├── debug_variable_appearance.dm │ │ │ ├── debug_variables.dm │ │ │ ├── filterrific.dm │ │ │ ├── get_variables.dm │ │ │ ├── greyscale_modify_menu.dm │ │ │ ├── mark_datum.dm │ │ │ ├── mass_edit_variables.dm │ │ │ ├── modify_variables.dm │ │ │ ├── nobody_wants_to_learn_matrix_math.dm │ │ │ ├── particle_editor.dm │ │ │ ├── reference_tracking.dm │ │ │ ├── tag_datum.dm │ │ │ ├── topic.dm │ │ │ ├── topic_basic.dm │ │ │ ├── topic_list.dm │ │ │ └── view_variables.dm │ │ ├── ai/ │ │ │ ├── ai_behaviors/ │ │ │ │ ├── ai_behavior.dm │ │ │ │ ├── human_mobs/ │ │ │ │ │ ├── atom_interaction.dm │ │ │ │ │ ├── engineering.dm │ │ │ │ │ ├── grenades.dm │ │ │ │ │ ├── hazard_avoidance.dm │ │ │ │ │ ├── heal_procs.dm │ │ │ │ │ ├── healing.dm │ │ │ │ │ ├── helper_procs.dm │ │ │ │ │ ├── human_mob.dm │ │ │ │ │ └── weapon_module.dm │ │ │ │ └── xeno/ │ │ │ │ ├── puppet.dm │ │ │ │ ├── xeno.dm │ │ │ │ ├── xeno_illusion.dm │ │ │ │ └── zombie.dm │ │ │ ├── ai_node.dm │ │ │ ├── presets/ │ │ │ │ ├── basic_ai.dm │ │ │ │ ├── xeno_presets.dm │ │ │ │ └── zombie_presets.dm │ │ │ └── spawners/ │ │ │ ├── human.dm │ │ │ ├── spawner.dm │ │ │ ├── xeno.dm │ │ │ └── zombie.dm │ │ ├── animations/ │ │ │ └── animation_library.dm │ │ ├── antagonists/ │ │ │ └── _common/ │ │ │ └── antag_datum.dm │ │ ├── assembly/ │ │ │ ├── assembly.dm │ │ │ ├── doorcontrol.dm │ │ │ ├── helpers.dm │ │ │ ├── holder.dm │ │ │ ├── igniter.dm │ │ │ ├── infrared.dm │ │ │ ├── mousetrap.dm │ │ │ ├── proximity.dm │ │ │ ├── signaler.dm │ │ │ ├── timer.dm │ │ │ └── voice.dm │ │ ├── asset_cache/ │ │ │ ├── asset_cache_client.dm │ │ │ ├── asset_cache_item.dm │ │ │ ├── asset_list.dm │ │ │ ├── asset_list_items.dm │ │ │ ├── assets/ │ │ │ │ ├── cargo.dm │ │ │ │ ├── crafting.dm │ │ │ │ ├── plane_debug.dm │ │ │ │ ├── tgui.dm │ │ │ │ └── vv.dm │ │ │ ├── readme.md │ │ │ ├── transports/ │ │ │ │ ├── asset_transport.dm │ │ │ │ └── webroot_transport.dm │ │ │ └── validate_assets.html │ │ ├── atmospherics/ │ │ │ └── machinery/ │ │ │ ├── atmosmachinery.dm │ │ │ ├── components/ │ │ │ │ ├── binary_devices/ │ │ │ │ │ ├── binary_devices.dm │ │ │ │ │ ├── circulator.dm │ │ │ │ │ ├── dp_vent_pump.dm │ │ │ │ │ ├── passive_gate.dm │ │ │ │ │ ├── pump.dm │ │ │ │ │ ├── valve.dm │ │ │ │ │ └── volume_pump.dm │ │ │ │ ├── components_base.dm │ │ │ │ ├── trinary_devices/ │ │ │ │ │ ├── filter.dm │ │ │ │ │ ├── mixer.dm │ │ │ │ │ └── trinary_devices.dm │ │ │ │ └── unary_devices/ │ │ │ │ ├── cryo.dm │ │ │ │ ├── heat_exchanger.dm │ │ │ │ ├── outlet_injector.dm │ │ │ │ ├── portables_connector.dm │ │ │ │ ├── tank.dm │ │ │ │ ├── thermomachine.dm │ │ │ │ ├── unary_devices.dm │ │ │ │ ├── vent_pump.dm │ │ │ │ └── vent_scrubber.dm │ │ │ ├── datum_pipeline.dm │ │ │ ├── other/ │ │ │ │ └── meter.dm │ │ │ ├── pipes/ │ │ │ │ ├── heat_exchange/ │ │ │ │ │ ├── he_pipes.dm │ │ │ │ │ ├── junction.dm │ │ │ │ │ ├── manifold.dm │ │ │ │ │ ├── manifold4w.dm │ │ │ │ │ └── simple.dm │ │ │ │ ├── layermanifold.dm │ │ │ │ ├── manifold.dm │ │ │ │ ├── manifold4w.dm │ │ │ │ ├── mapping.dm │ │ │ │ ├── pipes.dm │ │ │ │ └── simple.dm │ │ │ └── portable/ │ │ │ ├── canister.dm │ │ │ ├── portable_atmospherics.dm │ │ │ ├── pump.dm │ │ │ └── scrubber.dm │ │ ├── balloon_alert/ │ │ │ └── balloon_alert.dm │ │ ├── buildmode/ │ │ │ ├── BUILDMODE.md │ │ │ ├── bm_mode.dm │ │ │ ├── buildmode.dm │ │ │ ├── buttons.dm │ │ │ └── submodes/ │ │ │ ├── advanced.dm │ │ │ ├── area_edit.dm │ │ │ ├── basic.dm │ │ │ ├── boom.dm │ │ │ ├── copy.dm │ │ │ ├── delete.dm │ │ │ ├── fill.dm │ │ │ ├── loadout.dm │ │ │ ├── proccall.dm │ │ │ ├── smite.dm │ │ │ ├── throwing.dm │ │ │ └── variable_edit.dm │ │ ├── client/ │ │ │ ├── client_defines.dm │ │ │ ├── client_procs.dm │ │ │ ├── message.dm │ │ │ ├── player_details.dm │ │ │ ├── preferences.dm │ │ │ ├── preferences_gear.dm │ │ │ ├── preferences_savefile.dm │ │ │ ├── preferences_toggles.dm │ │ │ └── preferences_ui.dm │ │ ├── clothing/ │ │ │ ├── clothing.dm │ │ │ ├── glasses/ │ │ │ │ ├── glasses.dm │ │ │ │ ├── hud.dm │ │ │ │ ├── meson.dm │ │ │ │ ├── night.dm │ │ │ │ └── thermal.dm │ │ │ ├── gloves/ │ │ │ │ ├── analyzer_gloves.dm │ │ │ │ ├── color.dm │ │ │ │ ├── defibrillator_gloves.dm │ │ │ │ ├── marine_gloves.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── head/ │ │ │ │ ├── collectable.dm │ │ │ │ ├── hardhat.dm │ │ │ │ ├── head.dm │ │ │ │ ├── helmet.dm │ │ │ │ ├── jobs.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── misc_special.dm │ │ │ │ └── soft_caps.dm │ │ │ ├── masks/ │ │ │ │ ├── breath.dm │ │ │ │ ├── gasmask.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── modular_armor/ │ │ │ │ ├── attachments/ │ │ │ │ │ ├── arm_plates.dm │ │ │ │ │ ├── badges.dm │ │ │ │ │ ├── cape.dm │ │ │ │ │ ├── chest_plates.dm │ │ │ │ │ ├── leg_plates.dm │ │ │ │ │ ├── modules.dm │ │ │ │ │ ├── secondary_color.dm │ │ │ │ │ ├── storage.dm │ │ │ │ │ ├── uniform.dm │ │ │ │ │ └── visors.dm │ │ │ │ ├── attachments.dm │ │ │ │ ├── combat_robot.dm │ │ │ │ ├── jaeger.dm │ │ │ │ ├── mark_one.dm │ │ │ │ ├── modular.dm │ │ │ │ ├── som.dm │ │ │ │ ├── style_line.dm │ │ │ │ ├── tdf.dm │ │ │ │ └── xenonauten.dm │ │ │ ├── shoes/ │ │ │ │ ├── colour.dm │ │ │ │ ├── magboots.dm │ │ │ │ ├── marine_shoes.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── spacesuits/ │ │ │ │ ├── rig.dm │ │ │ │ ├── spacesuits.dm │ │ │ │ ├── standard_space_suits.dm │ │ │ │ └── syndi.dm │ │ │ ├── suits/ │ │ │ │ ├── armor.dm │ │ │ │ ├── bio.dm │ │ │ │ ├── jobs.dm │ │ │ │ ├── labcoat.dm │ │ │ │ ├── marine_armor.dm │ │ │ │ ├── miscellaneous.dm │ │ │ │ ├── storage.dm │ │ │ │ ├── utility.dm │ │ │ │ └── wiz_robe.dm │ │ │ └── under/ │ │ │ ├── color.dm │ │ │ ├── gimmick.dm │ │ │ ├── jobs/ │ │ │ │ ├── civilian.dm │ │ │ │ ├── engineering.dm │ │ │ │ ├── medsci.dm │ │ │ │ └── security.dm │ │ │ ├── marine_uniform.dm │ │ │ ├── miscellaneous.dm │ │ │ ├── shorts.dm │ │ │ ├── syndicate.dm │ │ │ ├── ties.dm │ │ │ └── under.dm │ │ ├── codex/ │ │ │ ├── categories/ │ │ │ │ ├── _category.dm │ │ │ │ └── category_reagents.dm │ │ │ ├── codex_atom.dm │ │ │ ├── codex_client.dm │ │ │ ├── codex_mob.dm │ │ │ └── entries/ │ │ │ ├── _codex_entry.dm │ │ │ ├── ammunition_codex.dm │ │ │ ├── atmospherics_codex.dm │ │ │ ├── clothing_codex.dm │ │ │ ├── engineering_codex.dm │ │ │ ├── faction_codex.dm │ │ │ ├── guns_codex.dm │ │ │ ├── machinery_codex.dm │ │ │ ├── magazine_codex.dm │ │ │ ├── medical_codex.dm │ │ │ ├── misc_codex.dm │ │ │ ├── mobs_codex.dm │ │ │ ├── paperwork_codex.dm │ │ │ ├── stacks_codex.dm │ │ │ ├── structures_codex.dm │ │ │ ├── tools_codex.dm │ │ │ ├── turfs_codex.dm │ │ │ └── weapons_codex.dm │ │ ├── condor/ │ │ │ ├── cas_actions.dm │ │ │ ├── cas_chair.dm │ │ │ └── cas_shuttle.dm │ │ ├── detectivework/ │ │ │ ├── evidence.dm │ │ │ ├── footprints_and_rag.dm │ │ │ ├── forensics.dm │ │ │ ├── scanner.dm │ │ │ └── scanning_console.dm │ │ ├── discord/ │ │ │ ├── accountlink.dm │ │ │ ├── discord_embed.dm │ │ │ ├── discord_link_record.dm │ │ │ ├── tgs_commands.dm │ │ │ └── toggle_notify.dm │ │ ├── economy/ │ │ │ ├── ATM.dm │ │ │ ├── Accounts.dm │ │ │ ├── EFTPOS.dm │ │ │ └── cash.dm │ │ ├── emoji/ │ │ │ └── emoji_parse.dm │ │ ├── error_handler/ │ │ │ ├── error_handler.dm │ │ │ └── error_viewer.dm │ │ ├── events/ │ │ │ ├── _events.dm │ │ │ ├── hive_threat.dm │ │ │ ├── intel_computer.dm │ │ │ ├── stock_uptick.dm │ │ │ └── supply_drop.dm │ │ ├── factory/ │ │ │ ├── howtopaper.dm │ │ │ ├── machines.dm │ │ │ ├── parts.dm │ │ │ └── unboxer.dm │ │ ├── flufftext/ │ │ │ ├── Dreaming.dm │ │ │ └── Hallucination.dm │ │ ├── food/ │ │ │ └── recipes_microwave.dm │ │ ├── food_and_drinks/ │ │ │ ├── kitchen_machinery/ │ │ │ │ ├── griddle.dm │ │ │ │ └── grill.dm │ │ │ └── recipes/ │ │ │ ├── drinks/ │ │ │ │ ├── drinks_alcoholic.dm │ │ │ │ ├── drinks_lizard.dm │ │ │ │ ├── drinks_moth.dm │ │ │ │ └── drinks_non-alcoholic.dm │ │ │ └── recipes_drink.dm │ │ ├── hydroponics/ │ │ │ ├── biogenerator.dm │ │ │ ├── grown_inedible.dm │ │ │ ├── hydro_tools.dm │ │ │ ├── hydro_tray.dm │ │ │ ├── seed_datums.dm │ │ │ ├── seed_machines.dm │ │ │ ├── seeds.dm │ │ │ └── vines.dm │ │ ├── instruments/ │ │ │ ├── instrument_data/ │ │ │ │ ├── _instrument_data.dm │ │ │ │ ├── _instrument_key.dm │ │ │ │ ├── brass.dm │ │ │ │ ├── chromatic_percussion.dm │ │ │ │ ├── fun.dm │ │ │ │ ├── guitar.dm │ │ │ │ ├── hardcoded.dm │ │ │ │ ├── organ.dm │ │ │ │ ├── piano.dm │ │ │ │ └── synth_tones.dm │ │ │ ├── items.dm │ │ │ ├── songs/ │ │ │ │ ├── _song.dm │ │ │ │ ├── editor.dm │ │ │ │ ├── play_legacy.dm │ │ │ │ └── play_synthesized.dm │ │ │ └── stationary.dm │ │ ├── keybindings/ │ │ │ ├── bindings_atom.dm │ │ │ ├── bindings_client.dm │ │ │ ├── focus.dm │ │ │ ├── readme.md │ │ │ └── setup.dm │ │ ├── language/ │ │ │ ├── aphasia.dm │ │ │ ├── beachbum.dm │ │ │ ├── common.dm │ │ │ ├── felinid.dm │ │ │ ├── imperial.dm │ │ │ ├── language.dm │ │ │ ├── language_holder.dm │ │ │ ├── machine.dm │ │ │ ├── monkey.dm │ │ │ ├── moth.dm │ │ │ ├── mushroom.dm │ │ │ ├── narsian.dm │ │ │ ├── piratespeak.dm │ │ │ ├── russian.dm │ │ │ ├── sectoid.dm │ │ │ ├── slime.dm │ │ │ ├── trader.dm │ │ │ ├── xenocommon.dm │ │ │ └── zombie.dm │ │ ├── lighting/ │ │ │ ├── _LIGHTING_README.MD │ │ │ ├── lighting_area.dm │ │ │ ├── lighting_atom.dm │ │ │ ├── lighting_mask/ │ │ │ │ ├── dynamic_lighting_source.dm │ │ │ │ ├── lighting_mask.dm │ │ │ │ ├── lighting_mask_holder.dm │ │ │ │ └── shadow_calculator.dm │ │ │ ├── lighting_static/ │ │ │ │ ├── static_lighting_area.dm │ │ │ │ ├── static_lighting_atom.dm │ │ │ │ ├── static_lighting_corner.dm │ │ │ │ ├── static_lighting_object.dm │ │ │ │ ├── static_lighting_setup.dm │ │ │ │ ├── static_lighting_source.dm │ │ │ │ └── static_lighting_turf.dm │ │ │ └── lighting_turf.dm │ │ ├── logging/ │ │ │ ├── categories/ │ │ │ │ ├── log_category_admin.dm │ │ │ │ ├── log_category_attack.dm │ │ │ │ ├── log_category_compats.dm │ │ │ │ ├── log_category_debug.dm │ │ │ │ ├── log_category_game.dm │ │ │ │ ├── log_category_href.dm │ │ │ │ └── log_category_misc.dm │ │ │ ├── log_category.dm │ │ │ ├── log_entry.dm │ │ │ └── log_holder.dm │ │ ├── mapping/ │ │ │ ├── README.txt │ │ │ ├── cordon.dm │ │ │ ├── map_template.dm │ │ │ ├── mapping_helpers.dm │ │ │ ├── merge_conflicts.dm │ │ │ ├── modular_mapping.dm │ │ │ ├── preloader.dm │ │ │ ├── reader.dm │ │ │ ├── space_management/ │ │ │ │ ├── multiz_helpers.dm │ │ │ │ ├── space_level.dm │ │ │ │ ├── space_reservation.dm │ │ │ │ ├── traits.dm │ │ │ │ └── zlevel_manager.dm │ │ │ └── verify.dm │ │ ├── mining/ │ │ │ ├── alloys.dm │ │ │ ├── drill.dm │ │ │ ├── machine_processing.dm │ │ │ ├── machine_stacking.dm │ │ │ ├── machine_unloading.dm │ │ │ ├── money_bag.dm │ │ │ ├── ore.dm │ │ │ └── satchel_ore_boxdm.dm │ │ ├── mob/ │ │ │ ├── camera/ │ │ │ │ ├── camera.dm │ │ │ │ └── imaginary_friend.dm │ │ │ ├── dead/ │ │ │ │ ├── dead.dm │ │ │ │ └── observer/ │ │ │ │ ├── emote.dm │ │ │ │ ├── login.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── observer.dm │ │ │ │ ├── observer_movement.dm │ │ │ │ ├── orbit.dm │ │ │ │ └── say.dm │ │ │ ├── death.dm │ │ │ ├── emote.dm │ │ │ ├── examine.dm │ │ │ ├── illusion.dm │ │ │ ├── inventory.dm │ │ │ ├── living/ │ │ │ │ ├── blood.dm │ │ │ │ ├── brain/ │ │ │ │ │ ├── MMI.dm │ │ │ │ │ ├── brain.dm │ │ │ │ │ ├── brain_item.dm │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── emote.dm │ │ │ │ │ ├── life.dm │ │ │ │ │ └── login.dm │ │ │ │ ├── carbon/ │ │ │ │ │ ├── carbon.dm │ │ │ │ │ ├── carbon_defense.dm │ │ │ │ │ ├── carbon_defines.dm │ │ │ │ │ ├── carbon_helpers.dm │ │ │ │ │ ├── carbon_status_procs.dm │ │ │ │ │ ├── carbon_stripping.dm │ │ │ │ │ ├── give.dm │ │ │ │ │ ├── human/ │ │ │ │ │ │ ├── _species.dm │ │ │ │ │ │ ├── death.dm │ │ │ │ │ │ ├── dummy.dm │ │ │ │ │ │ ├── emote.dm │ │ │ │ │ │ ├── examine.dm │ │ │ │ │ │ ├── human.dm │ │ │ │ │ │ ├── human_attackhand.dm │ │ │ │ │ │ ├── human_damage.dm │ │ │ │ │ │ ├── human_defense.dm │ │ │ │ │ │ ├── human_defines.dm │ │ │ │ │ │ ├── human_helpers.dm │ │ │ │ │ │ ├── human_movement.dm │ │ │ │ │ │ ├── human_species.dm │ │ │ │ │ │ ├── human_status_procs.dm │ │ │ │ │ │ ├── inventory.dm │ │ │ │ │ │ ├── life/ │ │ │ │ │ │ │ ├── handle_disabilities.dm │ │ │ │ │ │ │ ├── handle_environment.dm │ │ │ │ │ │ │ ├── handle_fire.dm │ │ │ │ │ │ │ ├── handle_organs.dm │ │ │ │ │ │ │ ├── handle_pulse.dm │ │ │ │ │ │ │ ├── handle_regular_hud_updates.dm │ │ │ │ │ │ │ ├── handle_shock.dm │ │ │ │ │ │ │ ├── handle_status_effects.dm │ │ │ │ │ │ │ └── life_helpers.dm │ │ │ │ │ │ ├── life.dm │ │ │ │ │ │ ├── login.dm │ │ │ │ │ │ ├── logout.dm │ │ │ │ │ │ ├── say.dm │ │ │ │ │ │ ├── species_types/ │ │ │ │ │ │ │ ├── combat_robots.dm │ │ │ │ │ │ │ ├── humans.dm │ │ │ │ │ │ │ ├── monkeys.dm │ │ │ │ │ │ │ ├── mothmen.dm │ │ │ │ │ │ │ ├── prototype_supersoldier.dm │ │ │ │ │ │ │ ├── sectoids.dm │ │ │ │ │ │ │ ├── skeletons.dm │ │ │ │ │ │ │ ├── synthetics.dm │ │ │ │ │ │ │ ├── vatborns.dm │ │ │ │ │ │ │ └── zombies.dm │ │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ │ └── zombie.dm │ │ │ │ │ ├── human_stripping.dm │ │ │ │ │ ├── inventory.dm │ │ │ │ │ ├── life.dm │ │ │ │ │ ├── shock.dm │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ └── xenomorph/ │ │ │ │ │ ├── abilities.dm │ │ │ │ │ ├── attack_alien.dm │ │ │ │ │ ├── castes/ │ │ │ │ │ │ ├── baneling/ │ │ │ │ │ │ │ ├── abilities_baneling.dm │ │ │ │ │ │ │ ├── baneling.dm │ │ │ │ │ │ │ └── castedatum_baneling.dm │ │ │ │ │ │ ├── beetle/ │ │ │ │ │ │ │ ├── abilities_beetle.dm │ │ │ │ │ │ │ ├── beetle.dm │ │ │ │ │ │ │ └── castedatum_beetle.dm │ │ │ │ │ │ ├── behemoth/ │ │ │ │ │ │ │ ├── abilities_behemoth.dm │ │ │ │ │ │ │ ├── behemoth.dm │ │ │ │ │ │ │ ├── castedatum_behemoth.dm │ │ │ │ │ │ │ └── mutations_behemoth.dm │ │ │ │ │ │ ├── boiler/ │ │ │ │ │ │ │ ├── abilities_boiler.dm │ │ │ │ │ │ │ ├── boiler.dm │ │ │ │ │ │ │ ├── castedatum_boiler.dm │ │ │ │ │ │ │ ├── mutations_boiler.dm │ │ │ │ │ │ │ └── mutations_sizzler.dm │ │ │ │ │ │ ├── bull/ │ │ │ │ │ │ │ ├── abilities_bull.dm │ │ │ │ │ │ │ ├── bull.dm │ │ │ │ │ │ │ ├── castedatum_bull.dm │ │ │ │ │ │ │ └── mutations_bull.dm │ │ │ │ │ │ ├── carrier/ │ │ │ │ │ │ │ ├── abilities_carrier.dm │ │ │ │ │ │ │ ├── carrier.dm │ │ │ │ │ │ │ ├── castedatum_carrier.dm │ │ │ │ │ │ │ └── mutations_carrier.dm │ │ │ │ │ │ ├── crusher/ │ │ │ │ │ │ │ ├── abilities_crusher.dm │ │ │ │ │ │ │ ├── castedatum_crusher.dm │ │ │ │ │ │ │ ├── crusher.dm │ │ │ │ │ │ │ └── mutations_crusher.dm │ │ │ │ │ │ ├── defender/ │ │ │ │ │ │ │ ├── abilities_defender.dm │ │ │ │ │ │ │ ├── castedatum_defender.dm │ │ │ │ │ │ │ ├── defender.dm │ │ │ │ │ │ │ └── mutations_defender.dm │ │ │ │ │ │ ├── defiler/ │ │ │ │ │ │ │ ├── abilities_defiler.dm │ │ │ │ │ │ │ ├── castedatum_defiler.dm │ │ │ │ │ │ │ ├── defiler.dm │ │ │ │ │ │ │ └── mutations_defiler.dm │ │ │ │ │ │ ├── dragon/ │ │ │ │ │ │ │ ├── abilities_dragon.dm │ │ │ │ │ │ │ ├── castedatum_dragon.dm │ │ │ │ │ │ │ ├── dragon.dm │ │ │ │ │ │ │ └── mutations_dragon.dm │ │ │ │ │ │ ├── drone/ │ │ │ │ │ │ │ ├── abilities_drone.dm │ │ │ │ │ │ │ ├── castedatum_drone.dm │ │ │ │ │ │ │ ├── drone.dm │ │ │ │ │ │ │ └── mutations_drone.dm │ │ │ │ │ │ ├── gorger/ │ │ │ │ │ │ │ ├── abilities_gorger.dm │ │ │ │ │ │ │ ├── castedatum_gorger.dm │ │ │ │ │ │ │ ├── gorger.dm │ │ │ │ │ │ │ └── mutations_gorger.dm │ │ │ │ │ │ ├── hivelord/ │ │ │ │ │ │ │ ├── abilities_hivelord.dm │ │ │ │ │ │ │ ├── castedatum_hivelord.dm │ │ │ │ │ │ │ ├── hivelord.dm │ │ │ │ │ │ │ └── mutations_hivelord.dm │ │ │ │ │ │ ├── hivemind/ │ │ │ │ │ │ │ ├── abilities_hivemind.dm │ │ │ │ │ │ │ ├── castedatum_hivemind.dm │ │ │ │ │ │ │ └── hivemind.dm │ │ │ │ │ │ ├── hunter/ │ │ │ │ │ │ │ ├── abilities_hunter.dm │ │ │ │ │ │ │ ├── castedatum_hunter.dm │ │ │ │ │ │ │ ├── hunter.dm │ │ │ │ │ │ │ └── mutations_hunter.dm │ │ │ │ │ │ ├── king/ │ │ │ │ │ │ │ ├── abilities_conqueror.dm │ │ │ │ │ │ │ ├── abilities_king.dm │ │ │ │ │ │ │ ├── castedatum_king.dm │ │ │ │ │ │ │ ├── king.dm │ │ │ │ │ │ │ ├── mutations_conqueror.dm │ │ │ │ │ │ │ └── mutations_king.dm │ │ │ │ │ │ ├── larva/ │ │ │ │ │ │ │ ├── castedatum_larva.dm │ │ │ │ │ │ │ └── larva.dm │ │ │ │ │ │ ├── mantis/ │ │ │ │ │ │ │ ├── abilities_mantis.dm │ │ │ │ │ │ │ ├── castedatum_mantis.dm │ │ │ │ │ │ │ └── mantis.dm │ │ │ │ │ │ ├── nymph/ │ │ │ │ │ │ │ ├── castedatum_nymph.dm │ │ │ │ │ │ │ └── nymph.dm │ │ │ │ │ │ ├── praetorian/ │ │ │ │ │ │ │ ├── abilities_praetorian.dm │ │ │ │ │ │ │ ├── castedatum_praetorian.dm │ │ │ │ │ │ │ ├── mutations_dancer.dm │ │ │ │ │ │ │ ├── mutations_oppressor.dm │ │ │ │ │ │ │ ├── mutations_praetorian.dm │ │ │ │ │ │ │ └── praetorian.dm │ │ │ │ │ │ ├── puppet/ │ │ │ │ │ │ │ ├── abilities_puppet.dm │ │ │ │ │ │ │ ├── castedatum_puppet.dm │ │ │ │ │ │ │ └── puppet.dm │ │ │ │ │ │ ├── puppeteer/ │ │ │ │ │ │ │ ├── abilities_puppeteer.dm │ │ │ │ │ │ │ ├── castedatum_puppeteer.dm │ │ │ │ │ │ │ ├── mutations_puppeteer.dm │ │ │ │ │ │ │ └── puppeteer.dm │ │ │ │ │ │ ├── pyrogen/ │ │ │ │ │ │ │ ├── abilities_pyrogen.dm │ │ │ │ │ │ │ ├── castedatum_pyrogen.dm │ │ │ │ │ │ │ ├── mutations_pyrogen.dm │ │ │ │ │ │ │ └── pyrogen.dm │ │ │ │ │ │ ├── queen/ │ │ │ │ │ │ │ ├── abilities_queen.dm │ │ │ │ │ │ │ ├── castedatum_queen.dm │ │ │ │ │ │ │ ├── mutations_queen.dm │ │ │ │ │ │ │ └── queen.dm │ │ │ │ │ │ ├── ravager/ │ │ │ │ │ │ │ ├── abilities_ravager.dm │ │ │ │ │ │ │ ├── castedatum_ravager.dm │ │ │ │ │ │ │ ├── mutations_bloodthirster.dm │ │ │ │ │ │ │ ├── mutations_ravager.dm │ │ │ │ │ │ │ └── ravager.dm │ │ │ │ │ │ ├── runner/ │ │ │ │ │ │ │ ├── abilities_runner.dm │ │ │ │ │ │ │ ├── castedatum_runner.dm │ │ │ │ │ │ │ ├── mutations_melter.dm │ │ │ │ │ │ │ ├── mutations_runner.dm │ │ │ │ │ │ │ └── runner.dm │ │ │ │ │ │ ├── scorpion/ │ │ │ │ │ │ │ ├── castedatum_scorpion.dm │ │ │ │ │ │ │ └── scorpion.dm │ │ │ │ │ │ ├── sentinel/ │ │ │ │ │ │ │ ├── abilities_sentinel.dm │ │ │ │ │ │ │ ├── castedatum_sentinel.dm │ │ │ │ │ │ │ ├── mutations_retrograde.dm │ │ │ │ │ │ │ ├── mutations_sentinel.dm │ │ │ │ │ │ │ └── sentinel.dm │ │ │ │ │ │ ├── shrike/ │ │ │ │ │ │ │ ├── abilities_shrike.dm │ │ │ │ │ │ │ ├── castedatum_shrike.dm │ │ │ │ │ │ │ ├── mutations_shrike.dm │ │ │ │ │ │ │ └── shrike.dm │ │ │ │ │ │ ├── spiderling/ │ │ │ │ │ │ │ ├── castedatum_spiderling.dm │ │ │ │ │ │ │ └── spiderling.dm │ │ │ │ │ │ ├── spitter/ │ │ │ │ │ │ │ ├── abilities_spitter.dm │ │ │ │ │ │ │ ├── castedatum_spitter.dm │ │ │ │ │ │ │ ├── mutations_globadier.dm │ │ │ │ │ │ │ ├── mutations_spitter.dm │ │ │ │ │ │ │ └── spitter.dm │ │ │ │ │ │ ├── warlock/ │ │ │ │ │ │ │ ├── abilities_warlock.dm │ │ │ │ │ │ │ ├── castedatum_warlock.dm │ │ │ │ │ │ │ ├── mutations_warlock.dm │ │ │ │ │ │ │ └── warlock.dm │ │ │ │ │ │ ├── warrior/ │ │ │ │ │ │ │ ├── abilities_warrior.dm │ │ │ │ │ │ │ ├── castedatum_warrior.dm │ │ │ │ │ │ │ ├── mutations_warrior.dm │ │ │ │ │ │ │ └── warrior.dm │ │ │ │ │ │ ├── widow/ │ │ │ │ │ │ │ ├── abilities_widow.dm │ │ │ │ │ │ │ ├── castedatum_widow.dm │ │ │ │ │ │ │ ├── mutations_widow.dm │ │ │ │ │ │ │ └── widow.dm │ │ │ │ │ │ └── wraith/ │ │ │ │ │ │ ├── abilities_wraith.dm │ │ │ │ │ │ ├── castedatum_wraith.dm │ │ │ │ │ │ └── wraith.dm │ │ │ │ │ ├── charge_crush.dm │ │ │ │ │ ├── damage_procs.dm │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── egg.dm │ │ │ │ │ ├── embryo.dm │ │ │ │ │ ├── emote.dm │ │ │ │ │ ├── evo_datum.dm │ │ │ │ │ ├── evolution.dm │ │ │ │ │ ├── facehuggers.dm │ │ │ │ │ ├── hive_datum.dm │ │ │ │ │ ├── hive_upgrades.dm │ │ │ │ │ ├── life.dm │ │ │ │ │ ├── login.dm │ │ │ │ │ ├── mutation_datum.dm │ │ │ │ │ ├── mutation_upgrade.dm │ │ │ │ │ ├── patterns.dm │ │ │ │ │ ├── saddles.dm │ │ │ │ │ ├── say.dm │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ ├── xeno_defines.dm │ │ │ │ │ ├── xeno_helpers.dm │ │ │ │ │ ├── xenoattacks.dm │ │ │ │ │ ├── xenomorph.dm │ │ │ │ │ ├── xenomorph_defense.dm │ │ │ │ │ ├── xenoprocs.dm │ │ │ │ │ └── xenoupgrade.dm │ │ │ │ ├── damage_procs.dm │ │ │ │ ├── death.dm │ │ │ │ ├── emote.dm │ │ │ │ ├── init_signals.dm │ │ │ │ ├── living.dm │ │ │ │ ├── living_defense.dm │ │ │ │ ├── living_defines.dm │ │ │ │ ├── living_fov.dm │ │ │ │ ├── living_health_procs.dm │ │ │ │ ├── living_helpers.dm │ │ │ │ ├── living_movement.dm │ │ │ │ ├── living_powers.dm │ │ │ │ ├── living_resist.dm │ │ │ │ ├── living_verbs.dm │ │ │ │ ├── login.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── say.dm │ │ │ │ ├── silicon/ │ │ │ │ │ ├── ai/ │ │ │ │ │ │ ├── ai.dm │ │ │ │ │ │ ├── ai_notifications.dm │ │ │ │ │ │ ├── ai_verbs.dm │ │ │ │ │ │ ├── death.dm │ │ │ │ │ │ ├── examine.dm │ │ │ │ │ │ ├── freelook/ │ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ │ ├── cameranet.dm │ │ │ │ │ │ │ ├── chunk.dm │ │ │ │ │ │ │ └── eye.dm │ │ │ │ │ │ ├── life.dm │ │ │ │ │ │ ├── login.dm │ │ │ │ │ │ ├── logout.dm │ │ │ │ │ │ ├── multicam.dm │ │ │ │ │ │ ├── say.dm │ │ │ │ │ │ └── vox_sounds.dm │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── say.dm │ │ │ │ │ └── silicon.dm │ │ │ │ ├── simple_animal/ │ │ │ │ │ ├── friendly/ │ │ │ │ │ │ ├── cat.dm │ │ │ │ │ │ ├── catslug.dm │ │ │ │ │ │ ├── corgi.dm │ │ │ │ │ │ ├── crab.dm │ │ │ │ │ │ ├── farm_animals.dm │ │ │ │ │ │ ├── lizard.dm │ │ │ │ │ │ ├── mouse.dm │ │ │ │ │ │ └── parrot.dm │ │ │ │ │ ├── hostile/ │ │ │ │ │ │ ├── bear.dm │ │ │ │ │ │ ├── carp.dm │ │ │ │ │ │ ├── hostile.dm │ │ │ │ │ │ └── retaliate.dm │ │ │ │ │ └── simple_animal.dm │ │ │ │ └── status_procs.dm │ │ │ ├── login.dm │ │ │ ├── logout.dm │ │ │ ├── mob.dm │ │ │ ├── mob_defines.dm │ │ │ ├── mob_grab.dm │ │ │ ├── mob_helpers.dm │ │ │ ├── mob_movement.dm │ │ │ ├── mob_movespeed.dm │ │ │ ├── mob_transformation_simple.dm │ │ │ ├── mob_verbs.dm │ │ │ ├── new_player/ │ │ │ │ ├── ethnicity.dm │ │ │ │ ├── login.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── new_player.dm │ │ │ │ ├── poll.dm │ │ │ │ ├── preferences_setup.dm │ │ │ │ └── sprite_accessories.dm │ │ │ ├── say.dm │ │ │ ├── taste.dm │ │ │ └── update_icons.dm │ │ ├── orbits/ │ │ │ └── spaceship.dm │ │ ├── organs/ │ │ │ ├── limb_objects.dm │ │ │ ├── limbs.dm │ │ │ ├── organ_alien.dm │ │ │ ├── organ_internal.dm │ │ │ ├── organ_objects.dm │ │ │ ├── pain.dm │ │ │ └── wound.dm │ │ ├── paperwork/ │ │ │ ├── beginner_tutorials.dm │ │ │ ├── carbonpaper.dm │ │ │ ├── clipboard.dm │ │ │ ├── filingcabinet.dm │ │ │ ├── folders.dm │ │ │ ├── paper.dm │ │ │ ├── paper_bundle.dm │ │ │ ├── paperbin.dm │ │ │ ├── photocopier.dm │ │ │ └── photography.dm │ │ ├── power/ │ │ │ ├── apc/ │ │ │ │ ├── apc.dm │ │ │ │ ├── apc_appearance.dm │ │ │ │ ├── apc_attack.dm │ │ │ │ └── apc_tool_act.dm │ │ │ ├── batteryrack.dm │ │ │ ├── cable.dm │ │ │ ├── fusion_engine.dm │ │ │ ├── generator.dm │ │ │ ├── generator_type2.dm │ │ │ ├── gravitygenerator.dm │ │ │ ├── groundmap_geothermal.dm │ │ │ ├── light_bulbs.dm │ │ │ ├── lighting.dm │ │ │ ├── lighting_frame.dm │ │ │ ├── multiz.dm │ │ │ ├── pipecleaners.dm │ │ │ ├── port_gen.dm │ │ │ ├── power.dm │ │ │ ├── power_monitor.dm │ │ │ ├── powernet.dm │ │ │ ├── singularity/ │ │ │ │ └── emitter.dm │ │ │ ├── smes.dm │ │ │ ├── smes_construction.dm │ │ │ └── terminal.dm │ │ ├── projectiles/ │ │ │ ├── ammo_boxes.dm │ │ │ ├── ammo_datums.dm │ │ │ ├── ammo_types/ │ │ │ │ ├── ags_ammo.dm │ │ │ │ ├── energy_ammo.dm │ │ │ │ ├── heavy_ammo.dm │ │ │ │ ├── mech_ammo.dm │ │ │ │ ├── microrail_ammo.dm │ │ │ │ ├── miscellaneous_ammo.dm │ │ │ │ ├── mortar_ammo.dm │ │ │ │ ├── pistol_ammo.dm │ │ │ │ ├── revolver_ammo.dm │ │ │ │ ├── rifle_ammo.dm │ │ │ │ ├── rocket_ammo.dm │ │ │ │ ├── shotgun_ammo.dm │ │ │ │ ├── smartgun_ammo.dm │ │ │ │ ├── smg_ammo.dm │ │ │ │ ├── sniper_ammo.dm │ │ │ │ ├── turret_ammo.dm │ │ │ │ ├── tx54_ammo.dm │ │ │ │ ├── volkite_ammo.dm │ │ │ │ ├── xenos/ │ │ │ │ │ ├── energy_xenoammo.dm │ │ │ │ │ ├── gas_xenoammo.dm │ │ │ │ │ ├── huggers_xenoammo.dm │ │ │ │ │ ├── puppeteer_xenoammo.dm │ │ │ │ │ ├── pyrogen_xenoammo.dm │ │ │ │ │ ├── spits_xenoammo.dm │ │ │ │ │ └── widow_xenoammo.dm │ │ │ │ └── zombie_ammo.dm │ │ │ ├── ammunition.dm │ │ │ ├── gun_attachables/ │ │ │ │ ├── attachable.dm │ │ │ │ ├── flamer.dm │ │ │ │ ├── foldable.dm │ │ │ │ ├── muzzle.dm │ │ │ │ ├── rail.dm │ │ │ │ ├── scope.dm │ │ │ │ ├── stock.dm │ │ │ │ └── underbarrel.dm │ │ │ ├── gun_helpers.dm │ │ │ ├── gun_system.dm │ │ │ ├── guns/ │ │ │ │ ├── _shared_ammo_objects.dm │ │ │ │ ├── energy.dm │ │ │ │ ├── flamer.dm │ │ │ │ ├── grenade_launchers.dm │ │ │ │ ├── mounted.dm │ │ │ │ ├── pistols.dm │ │ │ │ ├── plasma.dm │ │ │ │ ├── revolvers.dm │ │ │ │ ├── rifles.dm │ │ │ │ ├── sentries.dm │ │ │ │ ├── shotguns.dm │ │ │ │ ├── smgs.dm │ │ │ │ └── specialist.dm │ │ │ ├── magazines/ │ │ │ │ ├── energy.dm │ │ │ │ ├── flamer.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── mounted.dm │ │ │ │ ├── pistols.dm │ │ │ │ ├── revolvers.dm │ │ │ │ ├── rifles.dm │ │ │ │ ├── sentries.dm │ │ │ │ ├── shotguns.dm │ │ │ │ ├── smgs.dm │ │ │ │ ├── specialist.dm │ │ │ │ └── unmanned_vehicle.dm │ │ │ ├── mounted.dm │ │ │ ├── projectile.dm │ │ │ ├── sentries.dm │ │ │ └── tracer.dm │ │ ├── radial/ │ │ │ └── radial_body_select.dm │ │ ├── reagents/ │ │ │ ├── chem_splash.dm │ │ │ ├── chemistry/ │ │ │ │ ├── colors.dm │ │ │ │ ├── holder/ │ │ │ │ │ └── holder.dm │ │ │ │ ├── machinery/ │ │ │ │ │ ├── chem_dispenser.dm │ │ │ │ │ ├── chem_master.dm │ │ │ │ │ ├── pandemic.dm │ │ │ │ │ └── reagentgrinder.dm │ │ │ │ ├── reactions.dm │ │ │ │ ├── readme.md │ │ │ │ ├── reagents/ │ │ │ │ │ ├── cloning.dm │ │ │ │ │ ├── drinks/ │ │ │ │ │ │ ├── alcohol_reagents.dm │ │ │ │ │ │ ├── drink_reagents.dm │ │ │ │ │ │ └── glass_styles/ │ │ │ │ │ │ ├── alcohol.dm │ │ │ │ │ │ ├── coffee_tea.dm │ │ │ │ │ │ ├── dairy.dm │ │ │ │ │ │ ├── juices.dm │ │ │ │ │ │ ├── mixed_alcohol.dm │ │ │ │ │ │ ├── mixed_drinks.dm │ │ │ │ │ │ ├── smoothies_shakes.dm │ │ │ │ │ │ └── sodas.dm │ │ │ │ │ ├── food.dm │ │ │ │ │ ├── medical.dm │ │ │ │ │ ├── other.dm │ │ │ │ │ └── toxin.dm │ │ │ │ ├── reagents.dm │ │ │ │ └── recipes/ │ │ │ │ ├── food_drink.dm │ │ │ │ ├── medical.dm │ │ │ │ └── other.dm │ │ │ ├── reagent_containers/ │ │ │ │ ├── autoinjectors.dm │ │ │ │ ├── blood_pack.dm │ │ │ │ ├── borghydro.dm │ │ │ │ ├── cups/ │ │ │ │ │ ├── _cup.dm │ │ │ │ │ ├── _glass_datum.dm │ │ │ │ │ ├── bottle.dm │ │ │ │ │ ├── drinkingglass.dm │ │ │ │ │ ├── drinks.dm │ │ │ │ │ ├── glassbottle.dm │ │ │ │ │ └── soda.dm │ │ │ │ ├── dropper.dm │ │ │ │ ├── food/ │ │ │ │ │ ├── burgers.dm │ │ │ │ │ ├── cans.dm │ │ │ │ │ ├── condiment.dm │ │ │ │ │ ├── donuts.dm │ │ │ │ │ ├── drinks.dm │ │ │ │ │ ├── frozen.dm │ │ │ │ │ ├── mexican.dm │ │ │ │ │ ├── piecake.dm │ │ │ │ │ ├── pizzapasta.dm │ │ │ │ │ ├── sandwich.dm │ │ │ │ │ ├── snacks/ │ │ │ │ │ │ └── grown.dm │ │ │ │ │ ├── snacks.dm │ │ │ │ │ └── soupsalad.dm │ │ │ │ ├── food.dm │ │ │ │ ├── glass/ │ │ │ │ │ └── bottle.dm │ │ │ │ ├── glass.dm │ │ │ │ ├── hypospray.dm │ │ │ │ ├── jerrycan.dm │ │ │ │ ├── pill.dm │ │ │ │ ├── spray.dm │ │ │ │ └── syringes.dm │ │ │ └── reagent_containers.dm │ │ ├── recycling/ │ │ │ ├── conveyor2.dm │ │ │ ├── disposal-construction.dm │ │ │ ├── disposal.dm │ │ │ ├── recycler.dm │ │ │ └── sortingmachinery.dm │ │ ├── remote_fob/ │ │ │ ├── actions_misc.dm │ │ │ ├── computer.dm │ │ │ └── drone.dm │ │ ├── reqs/ │ │ │ ├── supply.dm │ │ │ ├── supplypacks/ │ │ │ │ ├── armor_packs.dm │ │ │ │ ├── clothing_packs.dm │ │ │ │ ├── engineering_packs.dm │ │ │ │ ├── explosives_packs.dm │ │ │ │ ├── factory_packs.dm │ │ │ │ ├── imports_packs.dm │ │ │ │ ├── medical_packs.dm │ │ │ │ ├── operations_packs.dm │ │ │ │ ├── smartguns_packs.dm │ │ │ │ ├── supplies_packs.dm │ │ │ │ ├── vehicles_packs.dm │ │ │ │ └── weapons_packs.dm │ │ │ └── supplypacks.dm │ │ ├── requisitions/ │ │ │ ├── fulton.dm │ │ │ └── supply_export.dm │ │ ├── screen_alert/ │ │ │ ├── _screen_alert.dm │ │ │ ├── command_alert.dm │ │ │ ├── hive_message.dm │ │ │ └── misc_alert.dm │ │ ├── security_levels/ │ │ │ ├── keycard_authentication.dm │ │ │ └── security_level_datums.dm │ │ ├── shuttle/ │ │ │ ├── computer.dm │ │ │ ├── docking.dm │ │ │ ├── ert.dm │ │ │ ├── ert_big.dm │ │ │ ├── escape_pod.dm │ │ │ ├── gamemodes/ │ │ │ │ └── crash.dm │ │ │ ├── marine_dropship.dm │ │ │ ├── mini_dropship.dm │ │ │ ├── navigation_computer.dm │ │ │ ├── on_move.dm │ │ │ ├── ripple.dm │ │ │ ├── shuttle.dm │ │ │ └── shuttle_rotate.dm │ │ ├── spatial_grid/ │ │ │ └── cell_tracker.dm │ │ ├── surgery/ │ │ │ ├── amputation.dm │ │ │ ├── bones.dm │ │ │ ├── brainrepair.dm │ │ │ ├── encased.dm │ │ │ ├── eye.dm │ │ │ ├── face.dm │ │ │ ├── generic.dm │ │ │ ├── headreattach.dm │ │ │ ├── implant.dm │ │ │ ├── internal_bleeding.dm │ │ │ ├── necrosis.dm │ │ │ ├── organs_internal.dm │ │ │ ├── robolimbs.dm │ │ │ └── surgery.dm │ │ ├── tgchat/ │ │ │ ├── README.md │ │ │ ├── message.dm │ │ │ └── to_chat.dm │ │ ├── tgs/ │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── core/ │ │ │ │ ├── README.md │ │ │ │ ├── _definitions.dm │ │ │ │ ├── byond_world_export.dm │ │ │ │ ├── core.dm │ │ │ │ ├── datum.dm │ │ │ │ └── tgs_version.dm │ │ │ ├── includes.dm │ │ │ ├── v3210/ │ │ │ │ ├── README.md │ │ │ │ ├── api.dm │ │ │ │ └── commands.dm │ │ │ ├── v4/ │ │ │ │ ├── README.md │ │ │ │ ├── api.dm │ │ │ │ └── commands.dm │ │ │ └── v5/ │ │ │ ├── README.md │ │ │ ├── __interop_version.dm │ │ │ ├── _defines.dm │ │ │ ├── api.dm │ │ │ ├── bridge.dm │ │ │ ├── chunking.dm │ │ │ ├── commands.dm │ │ │ ├── serializers.dm │ │ │ ├── topic.dm │ │ │ └── undefs.dm │ │ ├── tgui/ │ │ │ ├── external.dm │ │ │ ├── states/ │ │ │ │ ├── access.dm │ │ │ │ ├── admin.dm │ │ │ │ ├── alamo.dm │ │ │ │ ├── always.dm │ │ │ │ ├── conscious.dm │ │ │ │ ├── contained.dm │ │ │ │ ├── debug.dm │ │ │ │ ├── deep_inventory.dm │ │ │ │ ├── default.dm │ │ │ │ ├── dropship.dm │ │ │ │ ├── fun.dm │ │ │ │ ├── hands.dm │ │ │ │ ├── human_adjacent.dm │ │ │ │ ├── inventory.dm │ │ │ │ ├── language_menu.dm │ │ │ │ ├── never.dm │ │ │ │ ├── new_player.dm │ │ │ │ ├── not_incapacitated.dm │ │ │ │ ├── notcontained.dm │ │ │ │ ├── observer.dm │ │ │ │ ├── physical.dm │ │ │ │ ├── reverse_contained.dm │ │ │ │ ├── self.dm │ │ │ │ ├── xeno.dm │ │ │ │ └── zlevel.dm │ │ │ ├── states.dm │ │ │ ├── status_composers.dm │ │ │ ├── tgui.dm │ │ │ └── tgui_window.dm │ │ ├── tgui_input/ │ │ │ ├── alert.dm │ │ │ ├── checkboxes.dm │ │ │ ├── list.dm │ │ │ ├── number.dm │ │ │ ├── say_modal/ │ │ │ │ ├── modal.dm │ │ │ │ ├── speech.dm │ │ │ │ └── typing.dm │ │ │ └── text.dm │ │ ├── tgui_panel/ │ │ │ ├── audio.dm │ │ │ ├── external.dm │ │ │ ├── telemetry.dm │ │ │ └── tgui_panel.dm │ │ ├── tooltip/ │ │ │ ├── tooltip.dm │ │ │ └── tooltip.html │ │ ├── transport/ │ │ │ ├── _transport_machinery.dm │ │ │ ├── admin.dm │ │ │ ├── elevator/ │ │ │ │ ├── elev_controller.dm │ │ │ │ ├── elev_doors.dm │ │ │ │ ├── elev_indicator.dm │ │ │ │ ├── elev_music_zone.dm │ │ │ │ └── elev_panel.dm │ │ │ ├── linear_controller.dm │ │ │ ├── tram/ │ │ │ │ ├── tram_controller.dm │ │ │ │ ├── tram_controls.dm │ │ │ │ ├── tram_displays.dm │ │ │ │ ├── tram_doors.dm │ │ │ │ ├── tram_floors.dm │ │ │ │ ├── tram_machinery.dm │ │ │ │ ├── tram_power.dm │ │ │ │ ├── tram_remote.dm │ │ │ │ ├── tram_signals.dm │ │ │ │ └── tram_structures.dm │ │ │ ├── transport_module.dm │ │ │ └── transport_navigation.dm │ │ ├── tutorials/ │ │ │ ├── _tutorial.dm │ │ │ ├── tutorial_instruction.dm │ │ │ └── tutorials/ │ │ │ ├── drop.dm │ │ │ └── switch_hands.dm │ │ ├── unit_tests/ │ │ │ ├── README.md │ │ │ ├── _unit_tests.dm │ │ │ ├── apc_area_sanity.dm │ │ │ ├── bespoke_id.dm │ │ │ ├── binary_insert.dm │ │ │ ├── chat_filter.dm │ │ │ ├── component_tests.dm │ │ │ ├── connect_loc.dm │ │ │ ├── create_and_destroy.dm │ │ │ ├── dcs_get_id_from_elements.dm │ │ │ ├── drink_icons.dm │ │ │ ├── find_reference_sanity.dm │ │ │ ├── focus_only_tests.dm │ │ │ ├── font_awesome_icons.dm │ │ │ ├── implanting.dm │ │ │ ├── item_variant_test.dm │ │ │ ├── keybinding_init.dm │ │ │ ├── map_templates.dm │ │ │ ├── mapping.dm │ │ │ ├── movement_order_sanity.dm │ │ │ ├── plane_double_transform.dm │ │ │ ├── security_levels.dm │ │ │ ├── spawn_guns.dm │ │ │ ├── spawn_humans.dm │ │ │ ├── spawn_xenos.dm │ │ │ ├── subsystem_init.dm │ │ │ ├── tgui_create_message.dm │ │ │ ├── timer_sanity.dm │ │ │ ├── tutorial_sanity.dm │ │ │ ├── unit_test.dm │ │ │ ├── verify_emoji_names.dm │ │ │ ├── weed_ability.dm │ │ │ ├── weed_spread.dm │ │ │ ├── xeno_logical_scaling.dm │ │ │ └── xenoaccuracy.dm │ │ ├── vehicles/ │ │ │ ├── __vehicle.dm │ │ │ ├── _hitbox.dm │ │ │ ├── armored/ │ │ │ │ ├── __armored.dm │ │ │ │ ├── _multitile.dm │ │ │ │ ├── ammo_magazine.dm │ │ │ │ ├── apc.dm │ │ │ │ ├── armored_actions.dm │ │ │ │ ├── armored_modules.dm │ │ │ │ ├── armored_weapons.dm │ │ │ │ ├── armored_wreck.dm │ │ │ │ ├── icc_armored_weapons.dm │ │ │ │ ├── icc_recontank.dm │ │ │ │ ├── interiors/ │ │ │ │ │ ├── ammo_rack.dm │ │ │ │ │ ├── breech.dm │ │ │ │ │ ├── chairs.dm │ │ │ │ │ ├── periscope.dm │ │ │ │ │ └── som_props.dm │ │ │ │ ├── medium_apc.dm │ │ │ │ ├── medium_tank.dm │ │ │ │ ├── small_apc.dm │ │ │ │ ├── som_armored_weapons.dm │ │ │ │ ├── som_tank.dm │ │ │ │ ├── tank_fabricator.dm │ │ │ │ ├── truck.dm │ │ │ │ └── vehicle_collision.dm │ │ │ ├── atv.dm │ │ │ ├── bicycle.dm │ │ │ ├── big_bike.dm │ │ │ ├── cargo_train.dm │ │ │ ├── cars/ │ │ │ │ └── car.dm │ │ │ ├── hover_bike.dm │ │ │ ├── mecha/ │ │ │ │ ├── _mecha.dm │ │ │ │ ├── combat/ │ │ │ │ │ ├── combat.dm │ │ │ │ │ ├── greyscale/ │ │ │ │ │ │ ├── greyscale.dm │ │ │ │ │ │ ├── greyscale_constructor.dm │ │ │ │ │ │ ├── greyscale_core.dm │ │ │ │ │ │ └── greyscale_limbs.dm │ │ │ │ │ ├── gygax.dm │ │ │ │ │ ├── marauder.dm │ │ │ │ │ ├── phazon.dm │ │ │ │ │ └── savannah_ivanov.dm │ │ │ │ ├── equipment/ │ │ │ │ │ ├── mecha_equipment.dm │ │ │ │ │ ├── tools/ │ │ │ │ │ │ ├── greyscale_tools.dm │ │ │ │ │ │ ├── mining_tools.dm │ │ │ │ │ │ ├── other_tools.dm │ │ │ │ │ │ └── work_tools.dm │ │ │ │ │ └── weapons/ │ │ │ │ │ ├── greyscale_weapons.dm │ │ │ │ │ ├── mecha_ammo.dm │ │ │ │ │ └── weapons.dm │ │ │ │ ├── mech_bay.dm │ │ │ │ ├── mech_melee_attack.dm │ │ │ │ ├── mecha_actions.dm │ │ │ │ ├── mecha_control_console.dm │ │ │ │ ├── mecha_damage.dm │ │ │ │ ├── mecha_defense.dm │ │ │ │ ├── mecha_helpers.dm │ │ │ │ ├── mecha_mob_interaction.dm │ │ │ │ ├── mecha_movement.dm │ │ │ │ ├── mecha_parts.dm │ │ │ │ ├── mecha_ui.dm │ │ │ │ ├── mecha_wreckage.dm │ │ │ │ └── working/ │ │ │ │ ├── ripley.dm │ │ │ │ └── working.dm │ │ │ ├── motorbike.dm │ │ │ ├── powerloader.dm │ │ │ ├── ridden.dm │ │ │ ├── sealed.dm │ │ │ ├── train.dm │ │ │ ├── unmanned/ │ │ │ │ ├── deployable_vehicles.dm │ │ │ │ ├── unmanned_droid.dm │ │ │ │ ├── unmanned_turrets.dm │ │ │ │ ├── unmanned_vehicle.dm │ │ │ │ └── unmanned_vehicle_remote.dm │ │ │ ├── vehicle_actions.dm │ │ │ ├── vehicle_attachments/ │ │ │ │ ├── storage_attachments.dm │ │ │ │ ├── vehicle_modules.dm │ │ │ │ └── weapon_attachments.dm │ │ │ ├── vehicle_key.dm │ │ │ └── wheelchair.dm │ │ ├── visuals/ │ │ │ └── render_steps.dm │ │ └── xenomorph/ │ │ ├── _xeno_structure.dm │ │ ├── acid_pools.dm │ │ ├── acidwell.dm │ │ ├── jellypod.dm │ │ ├── maw.dm │ │ ├── mutations.dm │ │ ├── pherotower.dm │ │ ├── recovery_pylon.dm │ │ ├── resin_gargoyle.dm │ │ ├── silo.dm │ │ ├── spawner.dm │ │ ├── trap.dm │ │ ├── tunnel.dm │ │ ├── xeno_turret.dm │ │ ├── xenoplant.dm │ │ └── xenotowers.dm │ └── world.dm ├── config/ │ ├── admin_ranks.txt │ ├── admins.txt │ ├── config.txt │ ├── dbconfig.txt │ ├── dev_overrides_readme.txt │ ├── in_character_filter.txt │ ├── lobby_themes/ │ │ └── DawsonChristian.ogg │ ├── maps.txt │ ├── modes.txt │ ├── motd.txt │ ├── policy.json │ ├── reboot_themes/ │ │ ├── asses_kicked.ogg │ │ ├── cut_the_salt.ogg │ │ ├── game_over.ogg │ │ ├── god_love_marines.ogg │ │ ├── its_only_game.ogg │ │ ├── outstanding_marines.ogg │ │ ├── skill_issue.ogg │ │ └── surrounded_by_assholes.ogg │ ├── resources.txt │ ├── shipmaps.txt │ └── word_filter.toml ├── dependencies.sh ├── docs/ │ └── faction-design.md ├── html/ │ ├── IRV/ │ │ └── jquery-ui.custom-core-widgit-mouse-sortable-min.js │ ├── admin/ │ │ └── view_variables.css │ ├── browser/ │ │ ├── admin_panels.css │ │ ├── admin_panels_css3.css │ │ ├── banpanel.css │ │ ├── common.css │ │ ├── create_object.html │ │ ├── latechoices.css │ │ ├── panels.css │ │ ├── roundend.css │ │ ├── search.js │ │ └── unbanpanel.css │ ├── changelogs/ │ │ ├── __CHANGELOG_README.txt │ │ ├── archive/ │ │ │ ├── 2019-01.yml │ │ │ ├── 2019-02.yml │ │ │ ├── 2019-03.yml │ │ │ ├── 2019-04.yml │ │ │ ├── 2019-05.yml │ │ │ ├── 2019-06.yml │ │ │ ├── 2019-07.yml │ │ │ ├── 2019-08.yml │ │ │ ├── 2019-09.yml │ │ │ ├── 2019-10.yml │ │ │ ├── 2019-11.yml │ │ │ ├── 2019-12.yml │ │ │ ├── 2020-01.yml │ │ │ ├── 2020-03.yml │ │ │ ├── 2020-04.yml │ │ │ ├── 2020-05.yml │ │ │ ├── 2020-06.yml │ │ │ ├── 2020-07.yml │ │ │ ├── 2020-08.yml │ │ │ ├── 2020-09.yml │ │ │ ├── 2020-10.yml │ │ │ ├── 2020-11.yml │ │ │ ├── 2020-12.yml │ │ │ ├── 2021-01.yml │ │ │ ├── 2021-02.yml │ │ │ ├── 2021-03.yml │ │ │ ├── 2021-04.yml │ │ │ ├── 2021-05.yml │ │ │ ├── 2021-06.yml │ │ │ ├── 2021-07.yml │ │ │ ├── 2021-08.yml │ │ │ ├── 2021-09.yml │ │ │ ├── 2021-10.yml │ │ │ ├── 2021-11.yml │ │ │ ├── 2021-12.yml │ │ │ ├── 2022-01.yml │ │ │ ├── 2022-02.yml │ │ │ ├── 2022-03.yml │ │ │ ├── 2022-04.yml │ │ │ ├── 2022-05.yml │ │ │ ├── 2022-06.yml │ │ │ ├── 2022-07.yml │ │ │ ├── 2022-08.yml │ │ │ ├── 2022-09.yml │ │ │ ├── 2022-10.yml │ │ │ ├── 2022-12.yml │ │ │ ├── 2023-01.yml │ │ │ ├── 2023-02.yml │ │ │ ├── 2023-03.yml │ │ │ ├── 2023-04.yml │ │ │ ├── 2023-05.yml │ │ │ ├── 2023-06.yml │ │ │ ├── 2023-07.yml │ │ │ ├── 2023-08.yml │ │ │ ├── 2023-09.yml │ │ │ ├── 2023-10.yml │ │ │ ├── 2023-11.yml │ │ │ ├── 2023-12.yml │ │ │ ├── 2024-01.yml │ │ │ ├── 2024-02.yml │ │ │ ├── 2024-03.yml │ │ │ ├── 2024-04.yml │ │ │ ├── 2024-05.yml │ │ │ ├── 2024-06.yml │ │ │ ├── 2024-07.yml │ │ │ ├── 2024-08.yml │ │ │ ├── 2024-09.yml │ │ │ ├── 2024-10.yml │ │ │ ├── 2024-11.yml │ │ │ ├── 2024-12.yml │ │ │ ├── 2025-01.yml │ │ │ ├── 2025-02.yml │ │ │ ├── 2025-03.yml │ │ │ ├── 2025-04.yml │ │ │ ├── 2025-05.yml │ │ │ ├── 2025-06.yml │ │ │ ├── 2025-07.yml │ │ │ ├── 2025-08.yml │ │ │ ├── 2025-09.yml │ │ │ ├── 2025-10.yml │ │ │ ├── 2025-11.yml │ │ │ ├── 2025-12.yml │ │ │ ├── 2026-01.yml │ │ │ ├── 2026-02.yml │ │ │ ├── 2026-03.yml │ │ │ └── 2026-04.yml │ │ ├── changelog2015.html │ │ ├── changelog2016.html │ │ ├── changelog2017.html │ │ ├── changelog20181.html │ │ └── changelog20182.html │ ├── font-awesome/ │ │ └── README.MD │ ├── statbrowser.css │ ├── statbrowser.html │ ├── statbrowser.js │ └── typing_indicator.html ├── icons/ │ ├── UI_Icons/ │ │ ├── buyable_icons.dmi │ │ ├── campaign/ │ │ │ ├── asset_icons.dmi │ │ │ ├── loadout_item_icons.dmi │ │ │ ├── mission_icons.dmi │ │ │ └── perk_icons.dmi │ │ ├── cas_crosshairs/ │ │ │ ├── banshee.dmi │ │ │ ├── dandelion.dmi │ │ │ ├── fatty.dmi │ │ │ ├── gun.dmi │ │ │ ├── gun_hv.dmi │ │ │ ├── keeper.dmi │ │ │ ├── laser.dmi │ │ │ ├── mighty.dmi │ │ │ ├── moab.dmi │ │ │ ├── monarch.dmi │ │ │ ├── napalm.dmi │ │ │ ├── poppies.dmi │ │ │ ├── rocket.dmi │ │ │ ├── rocket_flare.dmi │ │ │ ├── rocket_incend.dmi │ │ │ ├── rocket_smoke.dmi │ │ │ ├── rocket_tangle.dmi │ │ │ ├── swansong.dmi │ │ │ ├── tiny.dmi │ │ │ └── widowmaker.dmi │ │ ├── chat_icons.dmi │ │ ├── gun_crosshairs/ │ │ │ ├── explosive.dmi │ │ │ ├── rifle.dmi │ │ │ ├── shotgun.dmi │ │ │ └── sniper.dmi │ │ ├── hive_status_icons.dmi │ │ ├── lobby_button.dmi │ │ ├── lobbytext.dmi │ │ ├── map_blips.dmi │ │ ├── map_blips_large.dmi │ │ ├── mecha/ │ │ │ └── armor.dmi │ │ ├── minimap.dmi │ │ ├── minimap_buttons.dmi │ │ ├── minimap_mouse/ │ │ │ ├── draw_blue.dmi │ │ │ ├── draw_erase.dmi │ │ │ ├── draw_purple.dmi │ │ │ ├── draw_red.dmi │ │ │ ├── draw_yellow.dmi │ │ │ └── label.dmi │ │ └── screen_alert_images.dmi │ ├── Xeno/ │ │ ├── 1x1building.dmi │ │ ├── 2x2building.dmi │ │ ├── 300x300.dmi │ │ ├── 32x64.dmi │ │ ├── 3x3building.dmi │ │ ├── 64x64.dmi │ │ ├── 64x64_Xeno_overlays.dmi │ │ ├── 96x144.dmi │ │ ├── 96x96.dmi │ │ ├── Effects.dmi │ │ ├── acid_turret.dmi │ │ ├── acid_well.dmi │ │ ├── actions/ │ │ │ ├── baneling.dmi │ │ │ ├── behemoth.dmi │ │ │ ├── boiler.dmi │ │ │ ├── bull.dmi │ │ │ ├── carrier.dmi │ │ │ ├── construction.dmi │ │ │ ├── crusher.dmi │ │ │ ├── defender.dmi │ │ │ ├── defiler.dmi │ │ │ ├── dragon.dmi │ │ │ ├── drone.dmi │ │ │ ├── general.dmi │ │ │ ├── gorger.dmi │ │ │ ├── hivelord.dmi │ │ │ ├── hivemind.dmi │ │ │ ├── hunter.dmi │ │ │ ├── king.dmi │ │ │ ├── leader.dmi │ │ │ ├── praetorian.dmi │ │ │ ├── puppeteer.dmi │ │ │ ├── pyrogen.dmi │ │ │ ├── queen.dmi │ │ │ ├── ravager.dmi │ │ │ ├── runner.dmi │ │ │ ├── sentinel.dmi │ │ │ ├── shrike.dmi │ │ │ ├── spits.dmi │ │ │ ├── spitter.dmi │ │ │ ├── warlock.dmi │ │ │ ├── warrior.dmi │ │ │ ├── widow.dmi │ │ │ └── wraith.dmi │ │ ├── castes/ │ │ │ ├── baneling.dmi │ │ │ ├── beetle.dmi │ │ │ ├── behemoth.dmi │ │ │ ├── boiler.dmi │ │ │ ├── bull.dmi │ │ │ ├── carrier.dmi │ │ │ ├── crusher.dmi │ │ │ ├── defender.dmi │ │ │ ├── defiler.dmi │ │ │ ├── dragon.dmi │ │ │ ├── drone.dmi │ │ │ ├── gorger.dmi │ │ │ ├── hivelord.dmi │ │ │ ├── hivemind.dmi │ │ │ ├── hunter.dmi │ │ │ ├── king/ │ │ │ │ ├── conqueror.dmi │ │ │ │ └── king.dmi │ │ │ ├── larva.dmi │ │ │ ├── mantis.dmi │ │ │ ├── nymph.dmi │ │ │ ├── praetorian.dmi │ │ │ ├── puppet.dmi │ │ │ ├── puppeteer.dmi │ │ │ ├── pyrogen.dmi │ │ │ ├── queen.dmi │ │ │ ├── ravager.dmi │ │ │ ├── runner.dmi │ │ │ ├── scorpion.dmi │ │ │ ├── sentinel.dmi │ │ │ ├── shrike.dmi │ │ │ ├── spitter.dmi │ │ │ ├── warlock.dmi │ │ │ ├── warrior.dmi │ │ │ ├── widow.dmi │ │ │ └── wraith.dmi │ │ ├── patterns.dmi │ │ ├── plants.dmi │ │ ├── pyrogen.dmi │ │ ├── resin_pod.dmi │ │ ├── resin_silo.dmi │ │ ├── saddles/ │ │ │ ├── runnersaddle.dmi │ │ │ └── saddles.dmi │ │ ├── structures.dmi │ │ ├── weeds.dmi │ │ └── xeno_materials.dmi │ ├── atmos/ │ │ ├── connector.dmi │ │ ├── digital_tvalve.dmi │ │ ├── digital_valve.dmi │ │ ├── filter.dmi │ │ ├── heat.dmi │ │ ├── heat_exchanger.dmi │ │ ├── injector.dmi │ │ ├── junction.dmi │ │ ├── mainspipe.dmi │ │ ├── manifold.dmi │ │ ├── mixer.dmi │ │ ├── omni_devices.dmi │ │ ├── outlet_injector.dmi │ │ ├── oxygen_generator.dmi │ │ ├── passive_gate.dmi │ │ ├── pipe_underlays.dmi │ │ ├── pipe_vent.dmi │ │ ├── pipes.dmi │ │ ├── pump.dmi │ │ ├── red_pipe.dmi │ │ ├── tank.dmi │ │ ├── tvalve.dmi │ │ ├── valve.dmi │ │ ├── vent_pump.dmi │ │ ├── vent_scrubber.dmi │ │ └── volume_pump.dmi │ ├── blanks/ │ │ ├── 32x32.dmi │ │ └── 96x96.dmi │ ├── effects/ │ │ ├── 128x128.dmi │ │ ├── 160x160.dmi │ │ ├── 200x200.dmi │ │ ├── 32x64.dmi │ │ ├── 64x64.dmi │ │ ├── 64x64hybrisa_decals.dmi │ │ ├── 96x157.dmi │ │ ├── 96x96.dmi │ │ ├── Targeted.dmi │ │ ├── alphacolors.dmi │ │ ├── beam.dmi │ │ ├── blips.dmi │ │ ├── blood.dmi │ │ ├── bulletholes.dmi │ │ ├── cameravis.dmi │ │ ├── campaign_effects.dmi │ │ ├── chemsmoke.dmi │ │ ├── conqueror_domination.dmi │ │ ├── crayondecal.dmi │ │ ├── cut.dmi │ │ ├── drip.dmi │ │ ├── effects.dmi │ │ ├── fire.dmi │ │ ├── fluidtracks.dmi │ │ ├── fov/ │ │ │ ├── field_of_view.dmi │ │ │ └── fov_effects.dmi │ │ ├── glow_weather.dmi │ │ ├── heavyimpact.dmi │ │ ├── landmarks_static.dmi │ │ ├── lases.dmi │ │ ├── light_overlays/ │ │ │ ├── light_128.dmi │ │ │ ├── light_160.dmi │ │ │ ├── light_192.dmi │ │ │ ├── light_224.dmi │ │ │ ├── light_256.dmi │ │ │ ├── light_288.dmi │ │ │ ├── light_32.dmi │ │ │ ├── light_320.dmi │ │ │ ├── light_352.dmi │ │ │ ├── light_64.dmi │ │ │ ├── light_96.dmi │ │ │ └── shockwave.dmi │ │ ├── lighting_object.dmi │ │ ├── lighting_object_big.dmi │ │ ├── mapping_helpers.dmi │ │ ├── medical_decals.dmi │ │ ├── new_acid.dmi │ │ ├── orders.dmi │ │ ├── overheat.dmi │ │ ├── parallax.dmi │ │ ├── particles/ │ │ │ ├── conqueror.dmi │ │ │ ├── fire.dmi │ │ │ ├── generic_particles.dmi │ │ │ └── smoke.dmi │ │ ├── perk_unlock.dmi │ │ ├── progressbar.dmi │ │ ├── progressicons.dmi │ │ ├── random/ │ │ │ ├── 64x64.dmi │ │ │ ├── clothing.dmi │ │ │ ├── engineering.dmi │ │ │ ├── food_or_drink.dmi │ │ │ ├── machinery.dmi │ │ │ ├── medical.dmi │ │ │ ├── misc.dmi │ │ │ └── weaponry.dmi │ │ ├── spacevines.dmi │ │ ├── station_explosion.dmi │ │ ├── steam.dmi │ │ ├── supplypod_down_target.dmi │ │ ├── supplypod_target.dmi │ │ ├── telegraph_96x96.dmi │ │ ├── water.dmi │ │ ├── weather_effects.dmi │ │ ├── welding_effect.dmi │ │ ├── welding_effect_multitile_door.dmi │ │ └── xeno_target.dmi │ ├── grey_template.dmi │ ├── mecha/ │ │ ├── coop_mech.dmi │ │ ├── durand_shield.dmi │ │ ├── mech_assault.dmi │ │ ├── mech_bay.dmi │ │ ├── mech_construct.dmi │ │ ├── mech_construction.dmi │ │ ├── mech_core_overlays.dmi │ │ ├── mech_core_weapons.dmi │ │ ├── mech_gun_overlays.dmi │ │ ├── mech_medium.dmi │ │ ├── mech_recon.dmi │ │ ├── mech_vanguard.dmi │ │ ├── mecha.dmi │ │ ├── mecha_ability_overlays.dmi │ │ ├── mecha_ammo.dmi │ │ ├── mecha_equipment.dmi │ │ ├── mecha_equipment_64x32.dmi │ │ ├── mecha_mouse-disable.dmi │ │ └── mecha_mouse.dmi │ ├── misc/ │ │ ├── 12x12.dmi │ │ ├── beach.dmi │ │ ├── beach2.dmi │ │ ├── buildmode.dmi │ │ ├── colortest.dmi │ │ ├── emoji.dmi │ │ ├── empty.dmi │ │ ├── language.dmi │ │ ├── lobby_art/ │ │ │ ├── absolutewowza.dmi │ │ │ ├── areaclear.dmi │ │ │ ├── artofthestun.dmi │ │ │ ├── bloodytgmc.dmi │ │ │ ├── burningflesh.dmi │ │ │ ├── crt_logo.dmi │ │ │ ├── delta.dmi │ │ │ ├── dispensomatic.dmi │ │ │ ├── droppod.dmi │ │ │ ├── foundarouny.dmi │ │ │ ├── loginscreen.dmi │ │ │ ├── macxeno.dmi │ │ │ ├── marineslosing.dmi │ │ │ ├── marinesonlvriver.dmi │ │ │ ├── mechvsqueen.dmi │ │ │ ├── miner.dmi │ │ │ ├── newcrayonflavor.dmi │ │ │ ├── pfcjim.dmi │ │ │ ├── raceyoutothealamo.dmi │ │ │ ├── ravagerstare.dmi │ │ │ ├── revolver_doorway.dmi │ │ │ ├── robot_kick.dmi │ │ │ ├── rounythedog.dmi │ │ │ ├── shinji.dmi │ │ │ ├── sl_kickingback.dmi │ │ │ ├── som_doomguy.dmi │ │ │ ├── sompropaganda.dmi │ │ │ ├── somvstgmc.dmi │ │ │ ├── tadpoledriving.dmi │ │ │ ├── tankdriving.dmi │ │ │ ├── tgmc_rpg.dmi │ │ │ ├── tgmcattacking.dmi │ │ │ ├── tgmclogo.dmi │ │ │ ├── tgmcpropaganda.dmi │ │ │ ├── tgmcrightback.dmi │ │ │ ├── tgmcsoldier.dmi │ │ │ ├── tgmcwarcrimes.dmi │ │ │ ├── warriorboxing.dmi │ │ │ ├── willyouvictory.dmi │ │ │ └── zahabromance.dmi │ │ ├── mark.dmi │ │ ├── observer_emotes.dmi │ │ └── pic_in_pic.dmi │ ├── mob/ │ │ ├── AI.dmi │ │ ├── OnFire.dmi │ │ ├── actions/ │ │ │ ├── actions_mecha.dmi │ │ │ └── actions_vehicle.dmi │ │ ├── actions.dmi │ │ ├── alien.dmi │ │ ├── ammoHUD.dmi │ │ ├── animal.dmi │ │ ├── broadMobs.dmi │ │ ├── cameramob.dmi │ │ ├── clothing/ │ │ │ ├── back/ │ │ │ │ └── ammo.dmi │ │ │ ├── back.dmi │ │ │ ├── belt.dmi │ │ │ ├── ears.dmi │ │ │ ├── eyes.dmi │ │ │ ├── feet.dmi │ │ │ ├── hands.dmi │ │ │ ├── headwear/ │ │ │ │ ├── ert_headwear.dmi │ │ │ │ ├── head_0.dmi │ │ │ │ ├── marine_hats.dmi │ │ │ │ ├── marine_helmets.dmi │ │ │ │ └── space_suit_helmets.dmi │ │ │ ├── mask.dmi │ │ │ ├── suits/ │ │ │ │ ├── ert_suits.dmi │ │ │ │ ├── marine_armor.dmi │ │ │ │ ├── marine_suits.dmi │ │ │ │ ├── space_suits.dmi │ │ │ │ └── suit_0.dmi │ │ │ └── uniforms/ │ │ │ ├── ert_uniforms.dmi │ │ │ ├── marine_uniforms.dmi │ │ │ └── uniform_0.dmi │ │ ├── dam_human.dmi │ │ ├── dam_mask.dmi │ │ ├── dam_mask_robot.dmi │ │ ├── effects/ │ │ │ └── talk.dmi │ │ ├── ghost.dmi │ │ ├── hair_gradients.dmi │ │ ├── hud/ │ │ │ ├── aura.dmi │ │ │ ├── human.dmi │ │ │ ├── human_health.dmi │ │ │ ├── infected.dmi │ │ │ ├── intoxicated.dmi │ │ │ ├── job.dmi │ │ │ ├── xeno.dmi │ │ │ └── xeno_health.dmi │ │ ├── human.dmi │ │ ├── human_face.dmi │ │ ├── human_gib.dmi │ │ ├── human_races/ │ │ │ ├── r_farwa.dmi │ │ │ ├── r_human.dmi │ │ │ ├── r_husk.dmi │ │ │ ├── r_machine.dmi │ │ │ ├── r_monkey.dmi │ │ │ ├── r_moth.dmi │ │ │ ├── r_naera.dmi │ │ │ ├── r_robot.dmi │ │ │ ├── r_robot_alpharii.dmi │ │ │ ├── r_robot_bravada.dmi │ │ │ ├── r_robot_charlit.dmi │ │ │ ├── r_robot_deltad.dmi │ │ │ ├── r_sectoid.dmi │ │ │ ├── r_skeleton.dmi │ │ │ ├── r_stok.dmi │ │ │ ├── r_synthetic.dmi │ │ │ ├── r_vatborn.dmi │ │ │ ├── r_vatgrown.dmi │ │ │ ├── r_yiren.dmi │ │ │ └── robotic.dmi │ │ ├── inhands/ │ │ │ ├── clothing/ │ │ │ │ ├── ears_left.dmi │ │ │ │ ├── ears_right.dmi │ │ │ │ ├── glasses_left.dmi │ │ │ │ ├── glasses_right.dmi │ │ │ │ ├── gloves_left.dmi │ │ │ │ ├── gloves_right.dmi │ │ │ │ ├── hats_left.dmi │ │ │ │ ├── hats_right.dmi │ │ │ │ ├── masks_left.dmi │ │ │ │ ├── masks_right.dmi │ │ │ │ ├── shoes_left.dmi │ │ │ │ ├── shoes_right.dmi │ │ │ │ ├── suits_left.dmi │ │ │ │ ├── suits_right.dmi │ │ │ │ ├── uniforms_left.dmi │ │ │ │ └── uniforms_right.dmi │ │ │ ├── equipment/ │ │ │ │ ├── backpacks_left.dmi │ │ │ │ ├── backpacks_right.dmi │ │ │ │ ├── binoculars_left.dmi │ │ │ │ ├── binoculars_right.dmi │ │ │ │ ├── cells_left.dmi │ │ │ │ ├── cells_right.dmi │ │ │ │ ├── engineering_left.dmi │ │ │ │ ├── engineering_right.dmi │ │ │ │ ├── fishing_rod_lefthand.dmi │ │ │ │ ├── fishing_rod_righthand.dmi │ │ │ │ ├── id_left.dmi │ │ │ │ ├── id_right.dmi │ │ │ │ ├── kitchen_left.dmi │ │ │ │ ├── kitchen_right.dmi │ │ │ │ ├── lights_left.dmi │ │ │ │ ├── lights_right.dmi │ │ │ │ ├── medical_left.dmi │ │ │ │ ├── medical_right.dmi │ │ │ │ ├── medkits_left.dmi │ │ │ │ ├── medkits_right.dmi │ │ │ │ ├── security_left.dmi │ │ │ │ ├── security_right.dmi │ │ │ │ ├── shields_left.dmi │ │ │ │ ├── shields_right.dmi │ │ │ │ ├── smoking_left.dmi │ │ │ │ ├── smoking_right.dmi │ │ │ │ ├── surgery_left.dmi │ │ │ │ ├── surgery_right.dmi │ │ │ │ ├── tanks_left.dmi │ │ │ │ ├── tanks_right.dmi │ │ │ │ ├── toolboxes_left.dmi │ │ │ │ ├── toolboxes_right.dmi │ │ │ │ ├── tools_left.dmi │ │ │ │ └── tools_right.dmi │ │ │ ├── guns/ │ │ │ │ ├── energy_left_1.dmi │ │ │ │ ├── energy_left_64.dmi │ │ │ │ ├── energy_right_1.dmi │ │ │ │ ├── energy_right_64.dmi │ │ │ │ ├── machineguns_left_1.dmi │ │ │ │ ├── machineguns_left_64.dmi │ │ │ │ ├── machineguns_right_1.dmi │ │ │ │ ├── machineguns_right_64.dmi │ │ │ │ ├── marksman_left_1.dmi │ │ │ │ ├── marksman_left_64.dmi │ │ │ │ ├── marksman_right_1.dmi │ │ │ │ ├── marksman_right_64.dmi │ │ │ │ ├── misc_left_1.dmi │ │ │ │ ├── misc_right_1.dmi │ │ │ │ ├── pistols_left_1.dmi │ │ │ │ ├── pistols_right_1.dmi │ │ │ │ ├── plasma_left_1.dmi │ │ │ │ ├── plasma_right_1.dmi │ │ │ │ ├── rifles_left_1.dmi │ │ │ │ ├── rifles_left_64.dmi │ │ │ │ ├── rifles_right_1.dmi │ │ │ │ ├── rifles_right_64.dmi │ │ │ │ ├── shotguns_left_1.dmi │ │ │ │ ├── shotguns_right_1.dmi │ │ │ │ ├── special_left_1.dmi │ │ │ │ ├── special_left_64.dmi │ │ │ │ ├── special_right_1.dmi │ │ │ │ ├── special_right_64.dmi │ │ │ │ ├── submachineguns_left_1.dmi │ │ │ │ ├── submachineguns_left_64.dmi │ │ │ │ ├── submachineguns_right_1.dmi │ │ │ │ └── submachineguns_right_64.dmi │ │ │ ├── items/ │ │ │ │ ├── animals_left.dmi │ │ │ │ ├── animals_right.dmi │ │ │ │ ├── bodyparts_left.dmi │ │ │ │ ├── bodyparts_right.dmi │ │ │ │ ├── books_left.dmi │ │ │ │ ├── books_right.dmi │ │ │ │ ├── civilian_left.dmi │ │ │ │ ├── civilian_right.dmi │ │ │ │ ├── containers_left.dmi │ │ │ │ ├── containers_right.dmi │ │ │ │ ├── drinks_left.dmi │ │ │ │ ├── drinks_lefthand.dmi │ │ │ │ ├── drinks_right.dmi │ │ │ │ ├── drinks_righthand.dmi │ │ │ │ ├── food_left.dmi │ │ │ │ ├── food_right.dmi │ │ │ │ ├── instruments_left.dmi │ │ │ │ ├── instruments_right.dmi │ │ │ │ ├── items_left.dmi │ │ │ │ ├── items_right.dmi │ │ │ │ ├── janitor_left.dmi │ │ │ │ ├── janitor_right.dmi │ │ │ │ ├── large_flag_left.dmi │ │ │ │ ├── large_flag_right.dmi │ │ │ │ ├── spray_left.dmi │ │ │ │ ├── spray_right.dmi │ │ │ │ ├── stacks_left.dmi │ │ │ │ ├── stacks_right.dmi │ │ │ │ ├── toys_left.dmi │ │ │ │ └── toys_right.dmi │ │ │ └── weapons/ │ │ │ ├── ammo_left.dmi │ │ │ ├── ammo_right.dmi │ │ │ ├── explosives_left.dmi │ │ │ ├── explosives_right.dmi │ │ │ ├── grenades_left.dmi │ │ │ ├── grenades_right.dmi │ │ │ ├── melee_left.dmi │ │ │ ├── melee_right.dmi │ │ │ ├── twohanded_left.dmi │ │ │ ├── twohanded_right.dmi │ │ │ ├── vali_left.dmi │ │ │ ├── vali_right.dmi │ │ │ ├── weapon64_left.dmi │ │ │ └── weapon64_right.dmi │ │ ├── instruments_back.dmi │ │ ├── items_back_64.dmi │ │ ├── items_suit_slot_64.dmi │ │ ├── landmarks.dmi │ │ ├── limb_mask.dmi │ │ ├── map_backgrounds.dmi │ │ ├── mob.dmi │ │ ├── modular/ │ │ │ ├── badge/ │ │ │ │ ├── V.dmi │ │ │ │ ├── circle.dmi │ │ │ │ ├── circle2.dmi │ │ │ │ ├── lambda.dmi │ │ │ │ ├── shield.dmi │ │ │ │ ├── square.dmi │ │ │ │ └── triangle.dmi │ │ │ ├── capes.dmi │ │ │ ├── capes_highlight.dmi │ │ │ ├── marine_uniform.dmi │ │ │ ├── mark_one/ │ │ │ │ ├── assault.dmi │ │ │ │ ├── eod.dmi │ │ │ │ ├── eva.dmi │ │ │ │ ├── helljumper.dmi │ │ │ │ ├── infantry.dmi │ │ │ │ ├── mjolnir.dmi │ │ │ │ ├── ranger.dmi │ │ │ │ ├── scout.dmi │ │ │ │ ├── skirmisher.dmi │ │ │ │ └── trooper.dmi │ │ │ ├── mark_two/ │ │ │ │ ├── assault.dmi │ │ │ │ ├── eod.dmi │ │ │ │ ├── eva.dmi │ │ │ │ ├── gugnir.dmi │ │ │ │ ├── helljumper.dmi │ │ │ │ ├── infantry.dmi │ │ │ │ ├── mjolnir_open.dmi │ │ │ │ ├── ranger.dmi │ │ │ │ ├── scout.dmi │ │ │ │ ├── skirmisher.dmi │ │ │ │ ├── traditional.dmi │ │ │ │ └── trooper.dmi │ │ │ ├── modular_armor.dmi │ │ │ ├── modular_armor_modules.dmi │ │ │ ├── modular_helmet_storage.dmi │ │ │ ├── robot_armor.dmi │ │ │ ├── shoulder_gun.dmi │ │ │ ├── som_armor.dmi │ │ │ ├── som_helmets.dmi │ │ │ ├── style_mob.dmi │ │ │ ├── syndicate_hardsuits.dmi │ │ │ ├── tdf_armor.dmi │ │ │ ├── tdf_helmets.dmi │ │ │ ├── visors.dmi │ │ │ ├── vsd_hardsuit.dmi │ │ │ └── xenonauten.dmi │ │ ├── monkey.dmi │ │ ├── order_icons.dmi │ │ ├── pets.dmi │ │ ├── psionic_icons.dmi │ │ ├── radial.dmi │ │ ├── robots.dmi │ │ ├── screen/ │ │ │ ├── alien.dmi │ │ │ ├── arrows.dmi │ │ │ ├── clockwork.dmi │ │ │ ├── full/ │ │ │ │ ├── animated.dmi │ │ │ │ ├── damage.dmi │ │ │ │ ├── impaired.dmi │ │ │ │ ├── machine.dmi │ │ │ │ ├── misc.dmi │ │ │ │ ├── pain.dmi │ │ │ │ └── particle_flash.dmi │ │ │ ├── generic.dmi │ │ │ ├── glass.dmi │ │ │ ├── health.dmi │ │ │ ├── holo.dmi │ │ │ ├── midnight.dmi │ │ │ ├── minimalist.dmi │ │ │ ├── operative.dmi │ │ │ ├── plasmafire.dmi │ │ │ ├── retro.dmi │ │ │ ├── slimecore.dmi │ │ │ ├── white.dmi │ │ │ └── zone_sel.dmi │ │ ├── screen_ai.dmi │ │ ├── screen_alert.dmi │ │ ├── screen_ghost.dmi │ │ ├── species/ │ │ │ ├── moth/ │ │ │ │ └── wings.dmi │ │ │ └── robot/ │ │ │ ├── backpack.dmi │ │ │ ├── glasses.dmi │ │ │ ├── glasses_alpharii.dmi │ │ │ ├── glasses_bravada.dmi │ │ │ ├── glasses_charlit.dmi │ │ │ └── glasses_deltad.dmi │ │ ├── suit_slot.dmi │ │ ├── talk.dmi │ │ ├── telegraphing/ │ │ │ ├── telegraph.dmi │ │ │ ├── telegraph_96x96.dmi │ │ │ └── telegraph_holographic.dmi │ │ └── ties.dmi │ ├── obj/ │ │ ├── aibots.dmi │ │ ├── airlock_machines.dmi │ │ ├── alien_autopsy.dmi │ │ ├── armored/ │ │ │ ├── 1x1/ │ │ │ │ ├── tinytank.dmi │ │ │ │ └── tinytank_gun.dmi │ │ │ ├── 2x2/ │ │ │ │ ├── icc_lvrt.dmi │ │ │ │ ├── icc_lvrt_damage.dmi │ │ │ │ ├── icc_lvrt_gun.dmi │ │ │ │ └── medium_vehicles.dmi │ │ │ ├── 2x3/ │ │ │ │ ├── apc.dmi │ │ │ │ ├── apc_damage_overlay.dmi │ │ │ │ └── apc_interior.dmi │ │ │ ├── 3x3/ │ │ │ │ ├── apc.dmi │ │ │ │ ├── apc_damage_overlay.dmi │ │ │ │ ├── apc_interior.dmi │ │ │ │ ├── tank.dmi │ │ │ │ ├── tank_damage.dmi │ │ │ │ ├── tank_gun.dmi │ │ │ │ └── tank_interior.dmi │ │ │ ├── 3x4/ │ │ │ │ ├── som_ammo_rack.dmi │ │ │ │ ├── som_breech.dmi │ │ │ │ ├── som_interior_props.dmi │ │ │ │ ├── som_interior_small_props.dmi │ │ │ │ ├── som_tank.dmi │ │ │ │ ├── som_tank_gun.dmi │ │ │ │ ├── som_tank_interior.dmi │ │ │ │ └── tank_damage.dmi │ │ │ └── hardpoint_modules.dmi │ │ ├── artefacts.dmi │ │ ├── assemblies/ │ │ │ └── new_assemblies.dmi │ │ ├── atmospherics/ │ │ │ ├── components/ │ │ │ │ ├── binary_devices.dmi │ │ │ │ ├── trinary_devices.dmi │ │ │ │ └── unary_devices.dmi │ │ │ └── pipes/ │ │ │ ├── he-junction.dmi │ │ │ ├── he-manifold.dmi │ │ │ ├── he-simple.dmi │ │ │ ├── manifold.dmi │ │ │ ├── pipe_item.dmi │ │ │ ├── pressure_tank.dmi │ │ │ └── simple.dmi │ │ ├── bodybag.dmi │ │ ├── chairs_wide.dmi │ │ ├── clothing/ │ │ │ ├── accessories.dmi │ │ │ ├── belts.dmi │ │ │ ├── boxing.dmi │ │ │ ├── glasses.dmi │ │ │ ├── gloves.dmi │ │ │ ├── hats.dmi │ │ │ ├── headwear/ │ │ │ │ ├── ert_headwear.dmi │ │ │ │ ├── hats.dmi │ │ │ │ ├── marine_hats.dmi │ │ │ │ ├── marine_helmets.dmi │ │ │ │ └── space_suit_helmets.dmi │ │ │ ├── masks.dmi │ │ │ ├── pouches.dmi │ │ │ ├── shoes.dmi │ │ │ ├── suits/ │ │ │ │ ├── ert_suits.dmi │ │ │ │ ├── marine_armor.dmi │ │ │ │ ├── marine_suits.dmi │ │ │ │ ├── space_suits.dmi │ │ │ │ └── suits.dmi │ │ │ ├── ties.dmi │ │ │ ├── ties_overlay.dmi │ │ │ └── uniforms/ │ │ │ ├── ert_uniforms.dmi │ │ │ ├── marine_uniforms.dmi │ │ │ └── uniforms.dmi │ │ ├── cocoon.dmi │ │ ├── contraband.dmi │ │ ├── cryobag.dmi │ │ ├── decals.dmi │ │ ├── decals_arrow.dmi │ │ ├── det.dmi │ │ ├── device.dmi │ │ ├── doors/ │ │ │ ├── 1x2blast_hor.dmi │ │ │ ├── 1x2blast_vert.dmi │ │ │ ├── 1x4blast_hor.dmi │ │ │ ├── 1x4blast_hor_secure.dmi │ │ │ ├── 1x4blast_vert.dmi │ │ │ ├── 1x4blast_vert_secure.dmi │ │ │ ├── Door1.dmi │ │ │ ├── Door2x1_secure.dmi │ │ │ ├── Door2x1_secure2.dmi │ │ │ ├── Door2x1_secure2_glass.dmi │ │ │ ├── Door2x1command.dmi │ │ │ ├── Door2x1engine.dmi │ │ │ ├── Door2x1glass.dmi │ │ │ ├── Door2x1medbay.dmi │ │ │ ├── Door2x1research.dmi │ │ │ ├── Door2x1security.dmi │ │ │ ├── DoorHazard.dmi │ │ │ ├── DoorHazard2x1.dmi │ │ │ ├── Door_secure.dmi │ │ │ ├── Dooratmo.dmi │ │ │ ├── Dooratmoglass.dmi │ │ │ ├── Doorcom.dmi │ │ │ ├── Doorcomglass.dmi │ │ │ ├── Doordiamond.dmi │ │ │ ├── Doorele.dmi │ │ │ ├── Dooreng.dmi │ │ │ ├── Doorengglass.dmi │ │ │ ├── Doorext.dmi │ │ │ ├── Doorf.dmi │ │ │ ├── Doorfire.dmi │ │ │ ├── Doorfreezer.dmi │ │ │ ├── Doorglass.dmi │ │ │ ├── Doorgold.dmi │ │ │ ├── Doorhatchele.dmi │ │ │ ├── Doorhatchmaint2.dmi │ │ │ ├── Doormaint.dmi │ │ │ ├── Doormining.dmi │ │ │ ├── Doorminingglass.dmi │ │ │ ├── Doorphoron.dmi │ │ │ ├── Doorsand.dmi │ │ │ ├── Doorsec.dmi │ │ │ ├── Doorsecglass.dmi │ │ │ ├── Doorsilver.dmi │ │ │ ├── Dooruranium.dmi │ │ │ ├── door_assembly.dmi │ │ │ ├── door_assembly2x1.dmi │ │ │ ├── door_fire2.dmi │ │ │ ├── door_marines.dmi │ │ │ ├── doorint.dmi │ │ │ ├── doormed.dmi │ │ │ ├── doormedglass.dmi │ │ │ ├── doormorgue.dmi │ │ │ ├── doorresearch.dmi │ │ │ ├── doorresearchglass.dmi │ │ │ ├── doorsci.dmi │ │ │ ├── doorsciglass.dmi │ │ │ ├── edge_Doorfire.dmi │ │ │ ├── hightechsecurity.dmi │ │ │ ├── hybrisa/ │ │ │ │ ├── hybrisa_2x1generic.dmi │ │ │ │ ├── hybrisa_2x1generic_solid.dmi │ │ │ │ ├── hybrisa_2x1medidoor.dmi │ │ │ │ ├── hybrisa_2x1medidoor_solid.dmi │ │ │ │ ├── hybrisa_2x1personaldoor.dmi │ │ │ │ ├── hybrisa_2x1personaldoor_glass.dmi │ │ │ │ ├── hybrisa_2x1personaldoor_glass_white.dmi │ │ │ │ ├── hybrisa_2x1personaldoor_white.dmi │ │ │ │ ├── hybrisa_generic.dmi │ │ │ │ ├── hybrisa_generic_glass.dmi │ │ │ │ ├── hybrisa_medidoor.dmi │ │ │ │ ├── hybrisa_medidoor_glass.dmi │ │ │ │ ├── hybrisa_personaldoor.dmi │ │ │ │ ├── hybrisa_personaldoor_glass.dmi │ │ │ │ ├── hybrisa_personaldoor_glass_white.dmi │ │ │ │ └── hybrisa_personaldoor_white.dmi │ │ │ ├── icecolony.dmi │ │ │ ├── liftdoor.dmi │ │ │ ├── mainship/ │ │ │ │ ├── 2x1almayerdoor.dmi │ │ │ │ ├── 2x1almayerdoor_glass.dmi │ │ │ │ ├── 2x1comdoor.dmi │ │ │ │ ├── 2x1engidoor.dmi │ │ │ │ ├── 2x1engidoor_glass.dmi │ │ │ │ ├── 2x1generic.dmi │ │ │ │ ├── 2x1maintdoor.dmi │ │ │ │ ├── 2x1medidoor.dmi │ │ │ │ ├── 2x1personaldoor.dmi │ │ │ │ ├── 2x1personaldoor_glass.dmi │ │ │ │ ├── 2x1prepdoor.dmi │ │ │ │ ├── 2x1prepdoor_alpha.dmi │ │ │ │ ├── 2x1prepdoor_bravo.dmi │ │ │ │ ├── 2x1prepdoor_charlie.dmi │ │ │ │ ├── 2x1prepdoor_delta.dmi │ │ │ │ ├── 2x1secdoor.dmi │ │ │ │ ├── 2x1secdoor_glass.dmi │ │ │ │ ├── blastdoors_shutters.dmi │ │ │ │ ├── comdoor.dmi │ │ │ │ ├── door1.dmi │ │ │ │ ├── dropship1_cargo.dmi │ │ │ │ ├── dropship1_pilot.dmi │ │ │ │ ├── dropship1_side.dmi │ │ │ │ ├── dropship2_cargo.dmi │ │ │ │ ├── dropship2_pilot.dmi │ │ │ │ ├── dropship2_side.dmi │ │ │ │ ├── engidoor.dmi │ │ │ │ ├── engidoor_glass.dmi │ │ │ │ ├── maintdoor.dmi │ │ │ │ ├── medidoor.dmi │ │ │ │ ├── medidoor_glass.dmi │ │ │ │ ├── personaldoor.dmi │ │ │ │ ├── personaldoor_glass.dmi │ │ │ │ ├── pod_doors.dmi │ │ │ │ ├── prepdoor.dmi │ │ │ │ ├── prepdoor_alpha.dmi │ │ │ │ ├── prepdoor_bravo.dmi │ │ │ │ ├── prepdoor_charlie.dmi │ │ │ │ ├── prepdoor_delta.dmi │ │ │ │ ├── purinadoor.dmi │ │ │ │ ├── secdoor.dmi │ │ │ │ ├── secdoor_glass.dmi │ │ │ │ └── securedoor.dmi │ │ │ ├── mineral_doors.dmi │ │ │ ├── overlays.dmi │ │ │ ├── prison/ │ │ │ │ ├── 4x1_elevator.dmi │ │ │ │ ├── 4x1_elevator_access.dmi │ │ │ │ └── celldoor.dmi │ │ │ ├── railing.dmi │ │ │ ├── rapid_pdoor.dmi │ │ │ ├── vault.dmi │ │ │ └── windoor.dmi │ │ ├── drinks/ │ │ │ ├── bottles.dmi │ │ │ ├── boxes.dmi │ │ │ ├── coffee.dmi │ │ │ ├── colo.dmi │ │ │ ├── drink_effects.dmi │ │ │ ├── drinks.dmi │ │ │ ├── mixed_drinks.dmi │ │ │ ├── shakes.dmi │ │ │ ├── shot_glasses.dmi │ │ │ └── soda.dmi │ │ ├── elevator_strut.dmi │ │ ├── factory/ │ │ │ ├── factory_machines.dmi │ │ │ └── factoryparts.dmi │ │ ├── flora/ │ │ │ ├── ausflora.dmi │ │ │ ├── crystals.dmi │ │ │ ├── dam.dmi │ │ │ ├── deadtrees.dmi │ │ │ ├── desert_flora.dmi │ │ │ ├── joshuatree.dmi │ │ │ ├── jungleflora.dmi │ │ │ ├── jungletrees.dmi │ │ │ ├── jungletreesmall.dmi │ │ │ ├── largejungleflora.dmi │ │ │ ├── pinetrees.dmi │ │ │ ├── plants.dmi │ │ │ ├── rock_large.dmi │ │ │ ├── rocks.dmi │ │ │ ├── rocks2.dmi │ │ │ ├── smooth/ │ │ │ │ ├── grass_decal.dmi │ │ │ │ └── tall_grass.dmi │ │ │ ├── snowflora.dmi │ │ │ ├── tall_trees.dmi │ │ │ └── tallgrass.dmi │ │ ├── food/ │ │ │ ├── burgerbread.dmi │ │ │ ├── canned.dmi │ │ │ ├── cartridges.dmi │ │ │ ├── containers.dmi │ │ │ ├── donuts.dmi │ │ │ ├── egg.dmi │ │ │ ├── food.dmi │ │ │ ├── food_ingredients.dmi │ │ │ ├── frozen_treats.dmi │ │ │ ├── lizard.dmi │ │ │ ├── lollipop.dmi │ │ │ ├── martian.dmi │ │ │ ├── meat.dmi │ │ │ ├── mexican.dmi │ │ │ ├── moth.dmi │ │ │ ├── piecake.dmi │ │ │ ├── pizza.dmi │ │ │ ├── slimecookies.dmi │ │ │ ├── soupsalad.dmi │ │ │ └── spaghetti.dmi │ │ ├── gateway.dmi │ │ ├── gravity_generator.dmi │ │ ├── inflatable.dmi │ │ ├── items/ │ │ │ ├── ammo/ │ │ │ │ ├── artillery.dmi │ │ │ │ ├── box.dmi │ │ │ │ ├── energy.dmi │ │ │ │ ├── flamer.dmi │ │ │ │ ├── greyscale.dmi │ │ │ │ ├── handful.dmi │ │ │ │ ├── machinegun.dmi │ │ │ │ ├── misc.dmi │ │ │ │ ├── packet.dmi │ │ │ │ ├── pistol.dmi │ │ │ │ ├── powerpack.dmi │ │ │ │ ├── revolver.dmi │ │ │ │ ├── rifle.dmi │ │ │ │ ├── rocket.dmi │ │ │ │ ├── sentry.dmi │ │ │ │ ├── shotgun.dmi │ │ │ │ ├── sniper.dmi │ │ │ │ ├── submachinegun.dmi │ │ │ │ └── tank.dmi │ │ │ ├── ashtray.dmi │ │ │ ├── assemblies.dmi │ │ │ ├── beacon.dmi │ │ │ ├── bedsheets.dmi │ │ │ ├── binoculars.dmi │ │ │ ├── bloodpack.dmi │ │ │ ├── books.dmi │ │ │ ├── candle.dmi │ │ │ ├── canned.dmi │ │ │ ├── capsules.dmi │ │ │ ├── card.dmi │ │ │ ├── casings.dmi │ │ │ ├── chemistry.dmi │ │ │ ├── cigarettes.dmi │ │ │ ├── circuitboards.dmi │ │ │ ├── containers.dmi │ │ │ ├── cosmetics.dmi │ │ │ ├── crayons.dmi │ │ │ ├── defibrillator.dmi │ │ │ ├── dice.dmi │ │ │ ├── disk.dmi │ │ │ ├── drinks.dmi │ │ │ ├── fishing.dmi │ │ │ ├── flags/ │ │ │ │ ├── plantable_flag.dmi │ │ │ │ └── plantable_flag_large.dmi │ │ │ ├── food/ │ │ │ │ ├── bread.dmi │ │ │ │ ├── burgers.dmi │ │ │ │ ├── candy.dmi │ │ │ │ ├── cheeseandfries.dmi │ │ │ │ ├── condiment.dmi │ │ │ │ ├── confectionary.dmi │ │ │ │ ├── donuts.dmi │ │ │ │ ├── food.dmi │ │ │ │ ├── food_ingredients.dmi │ │ │ │ ├── frozen_treats.dmi │ │ │ │ ├── meat.dmi │ │ │ │ ├── mexican.dmi │ │ │ │ ├── mre.dmi │ │ │ │ ├── packaged.dmi │ │ │ │ ├── piecake.dmi │ │ │ │ ├── pizzaspaghetti.dmi │ │ │ │ └── soupsalad.dmi │ │ │ ├── fuel_cell.dmi │ │ │ ├── fulton.dmi │ │ │ ├── fulton_balloon.dmi │ │ │ ├── grenade.dmi │ │ │ ├── guns/ │ │ │ │ ├── attachments/ │ │ │ │ │ ├── flamer.dmi │ │ │ │ │ ├── gun.dmi │ │ │ │ │ ├── muzzle.dmi │ │ │ │ │ ├── rail.dmi │ │ │ │ │ ├── scope.dmi │ │ │ │ │ ├── scope_64.dmi │ │ │ │ │ ├── stock.dmi │ │ │ │ │ ├── stock_64.dmi │ │ │ │ │ └── underbarrel.dmi │ │ │ │ ├── energy.dmi │ │ │ │ ├── energy64.dmi │ │ │ │ ├── machineguns.dmi │ │ │ │ ├── machineguns64.dmi │ │ │ │ ├── marksman.dmi │ │ │ │ ├── marksman64.dmi │ │ │ │ ├── pistols.dmi │ │ │ │ ├── pistols64.dmi │ │ │ │ ├── plasma64.dmi │ │ │ │ ├── rifles.dmi │ │ │ │ ├── rifles64.dmi │ │ │ │ ├── shotguns.dmi │ │ │ │ ├── shotguns64.dmi │ │ │ │ ├── special.dmi │ │ │ │ ├── special64.dmi │ │ │ │ ├── submachineguns.dmi │ │ │ │ └── submachineguns64.dmi │ │ │ ├── harvest.dmi │ │ │ ├── implants.dmi │ │ │ ├── items.dmi │ │ │ ├── items_mini.dmi │ │ │ ├── jetpack.dmi │ │ │ ├── kitchen_tools.dmi │ │ │ ├── kotahi_cards.dmi │ │ │ ├── lollipop.dmi │ │ │ ├── mines.dmi │ │ │ ├── npc_beacon.dmi │ │ │ ├── organs.dmi │ │ │ ├── paper.dmi │ │ │ ├── pda.dmi │ │ │ ├── pinpointer.dmi │ │ │ ├── pipe_item.dmi │ │ │ ├── playing_cards.dmi │ │ │ ├── projectiles.dmi │ │ │ ├── quikdeploy_cade.dmi │ │ │ ├── radio.dmi │ │ │ ├── robot_parts.dmi │ │ │ ├── seeds.dmi │ │ │ ├── shards.dmi │ │ │ ├── spray.dmi │ │ │ ├── stock_parts.dmi │ │ │ ├── storage/ │ │ │ │ ├── backholster.dmi │ │ │ │ ├── backpack.dmi │ │ │ │ ├── bag.dmi │ │ │ │ ├── box.dmi │ │ │ │ ├── briefcase.dmi │ │ │ │ ├── duffelbag.dmi │ │ │ │ ├── firstaid.dmi │ │ │ │ ├── holster.dmi │ │ │ │ ├── marine_box.dmi │ │ │ │ ├── misc.dmi │ │ │ │ ├── storage_48.dmi │ │ │ │ ├── storage_boxes.dmi │ │ │ │ ├── vialbox.dmi │ │ │ │ └── wallet.dmi │ │ │ ├── surgery_tools.dmi │ │ │ ├── syringe.dmi │ │ │ ├── tank.dmi │ │ │ ├── tools.dmi │ │ │ ├── toy.dmi │ │ │ ├── trash.dmi │ │ │ └── weapons/ │ │ │ ├── 64x64.dmi │ │ │ ├── batons.dmi │ │ │ ├── civilian.dmi │ │ │ ├── energy.dmi │ │ │ ├── knives.dmi │ │ │ ├── misc.dmi │ │ │ ├── shield.dmi │ │ │ ├── swords.dmi │ │ │ ├── throwing.dmi │ │ │ ├── twohanded.dmi │ │ │ └── vali.dmi │ │ ├── iv_drip.dmi │ │ ├── janitor.dmi │ │ ├── kitchen.dmi │ │ ├── landing_signs.dmi │ │ ├── landinglights.dmi │ │ ├── lighting.dmi │ │ ├── machines/ │ │ │ ├── air_alarm.dmi │ │ │ ├── airlock_machines.dmi │ │ │ ├── apc.dmi │ │ │ ├── artillery.dmi │ │ │ ├── atmos.dmi │ │ │ ├── bepis.dmi │ │ │ ├── biogenerator.dmi │ │ │ ├── bluespacedrive.dmi │ │ │ ├── buttons.dmi │ │ │ ├── chemical_machines.dmi │ │ │ ├── cloning.dmi │ │ │ ├── computer.dmi │ │ │ ├── computer3.dmi │ │ │ ├── cryogenics.dmi │ │ │ ├── cryogenics2.dmi │ │ │ ├── deployable/ │ │ │ │ ├── agls.dmi │ │ │ │ ├── at36.dmi │ │ │ │ ├── at45.dmi │ │ │ │ ├── atr22.dmi │ │ │ │ ├── clf_heavyrifle.dmi │ │ │ │ ├── fk88.dmi │ │ │ │ ├── heavy_laser.dmi │ │ │ │ ├── heavy_smartgun.dmi │ │ │ │ ├── howitzer.dmi │ │ │ │ ├── mg08.dmi │ │ │ │ ├── minigun.dmi │ │ │ │ ├── mortar.dmi │ │ │ │ ├── mounted_machinegun.dmi │ │ │ │ └── sentry/ │ │ │ │ ├── build_a_sentry.dmi │ │ │ │ ├── cope.dmi │ │ │ │ ├── flamer.dmi │ │ │ │ ├── laser.dmi │ │ │ │ ├── mini.dmi │ │ │ │ ├── sentry.dmi │ │ │ │ ├── shotgun.dmi │ │ │ │ ├── sniper.dmi │ │ │ │ └── tesla.dmi │ │ │ ├── drone_fab.dmi │ │ │ ├── elevatorpanel.dmi │ │ │ ├── field_generator.dmi │ │ │ ├── fire_alarm.dmi │ │ │ ├── floodlight.dmi │ │ │ ├── fob.dmi │ │ │ ├── fusion_engine.dmi │ │ │ ├── holosign.dmi │ │ │ ├── hydroponics.dmi │ │ │ ├── implantchair.dmi │ │ │ ├── kitchenmachines.dmi │ │ │ ├── library.dmi │ │ │ ├── lift_indicator.dmi │ │ │ ├── mining_machines.dmi │ │ │ ├── monitors.dmi │ │ │ ├── radio.dmi │ │ │ ├── research.dmi │ │ │ ├── scoreboard.dmi │ │ │ ├── self_destruct.dmi │ │ │ ├── shielding.dmi │ │ │ ├── suit_cycler.dmi │ │ │ ├── suitstorage.dmi │ │ │ ├── telecomms.dmi │ │ │ ├── terminals.dmi │ │ │ ├── vending.dmi │ │ │ ├── virology.dmi │ │ │ └── washing_machine.dmi │ │ ├── magic.dmi │ │ ├── meter.dmi │ │ ├── metnal_objects.dmi │ │ ├── mining.dmi │ │ ├── mining_drill.dmi │ │ ├── monitors.dmi │ │ ├── motorbike_sidecar.dmi │ │ ├── musician.dmi │ │ ├── objects.dmi │ │ ├── pipes/ │ │ │ └── disposal.dmi │ │ ├── pipes.dmi │ │ ├── podwindows.dmi │ │ ├── policetape.dmi │ │ ├── power.dmi │ │ ├── power_cond/ │ │ │ ├── layer_cable.dmi │ │ │ └── pipe_cleaner.dmi │ │ ├── powerloader.dmi │ │ ├── puzzle.dmi │ │ ├── reagentfillings.dmi │ │ ├── reagents/ │ │ │ └── reagent_fillings.dmi │ │ ├── recycling.dmi │ │ ├── robotics.dmi │ │ ├── rollerbed.dmi │ │ ├── rune.dmi │ │ ├── safety_signs.dmi │ │ ├── safety_signs_arrow.dmi │ │ ├── singularity.dmi │ │ ├── smooth_objects/ │ │ │ ├── acid-hole.dmi │ │ │ ├── black_table.dmi │ │ │ ├── brokenfence.dmi │ │ │ ├── brokenfence_dark.dmi │ │ │ ├── catwalk.dmi │ │ │ ├── cell_rwindow.dmi │ │ │ ├── chigusa_window.dmi │ │ │ ├── chigusa_window_frame.dmi │ │ │ ├── cmwindow.dmi │ │ │ ├── cmwindowframe.dmi │ │ │ ├── col_rwindow.dmi │ │ │ ├── col_rwindow_frame.dmi │ │ │ ├── col_window.dmi │ │ │ ├── col_window_frame.dmi │ │ │ ├── dark_fence.dmi │ │ │ ├── fancy_table.dmi │ │ │ ├── fence.dmi │ │ │ ├── foamwall.dmi │ │ │ ├── girder.dmi │ │ │ ├── girder_broke.dmi │ │ │ ├── gray_window_frame.dmi │ │ │ ├── grille.dmi │ │ │ ├── junk_window.dmi │ │ │ ├── junk_window_frame.dmi │ │ │ ├── kutjevo_window_blue.dmi │ │ │ ├── kutjevo_window_blue_reinforced.dmi │ │ │ ├── kutjevo_window_frame.dmi │ │ │ ├── kutjevo_window_orange.dmi │ │ │ ├── kutjevo_window_orange_reinforced.dmi │ │ │ ├── lattice.dmi │ │ │ ├── mainship_table.dmi │ │ │ ├── pool_table.dmi │ │ │ ├── prison_rwindow.dmi │ │ │ ├── prison_rwindow_frame.dmi │ │ │ ├── prison_table.dmi │ │ │ ├── prison_window_frame.dmi │ │ │ ├── regular_window_frame.dmi │ │ │ ├── req_table.dmi │ │ │ ├── resin-door.dmi │ │ │ ├── resin-wall.dmi │ │ │ ├── rustic_table.dmi │ │ │ ├── ship_gray_window.dmi │ │ │ ├── ship_window.dmi │ │ │ ├── ship_window_frame.dmi │ │ │ ├── table_fabric.dmi │ │ │ ├── table_regular.dmi │ │ │ ├── table_reinforced.dmi │ │ │ ├── urban_table_black.dmi │ │ │ ├── urban_table_brown.dmi │ │ │ ├── urban_table_gambling.dmi │ │ │ ├── urban_table_gambling_black.dmi │ │ │ ├── urban_window.dmi │ │ │ ├── urban_window_frame.dmi │ │ │ ├── warning_stripes.dmi │ │ │ ├── weedwall.dmi │ │ │ ├── weedwallrest.dmi │ │ │ ├── weedwallsticky.dmi │ │ │ ├── white_window_frame.dmi │ │ │ ├── wood_regular.dmi │ │ │ ├── wood_reinforced.dmi │ │ │ ├── wood_table_reinforced.dmi │ │ │ ├── wood_window_frame.dmi │ │ │ └── wwindow.dmi │ │ ├── smoothlattice.dmi │ │ ├── stack_objects.dmi │ │ ├── stationobjs.dmi │ │ ├── status_display.dmi │ │ ├── stock_parts.dmi │ │ ├── structures/ │ │ │ ├── 4x1_elevator.dmi │ │ │ ├── 64x64.dmi │ │ │ ├── barricades/ │ │ │ │ ├── barbedwire.dmi │ │ │ │ ├── concrete.dmi │ │ │ │ ├── folding.dmi │ │ │ │ ├── metal.dmi │ │ │ │ ├── misc.dmi │ │ │ │ ├── plasteel.dmi │ │ │ │ ├── sandbags.dmi │ │ │ │ ├── snow.dmi │ │ │ │ └── upgrades.dmi │ │ │ ├── barsigns.dmi │ │ │ ├── benchpress.dmi │ │ │ ├── big_droppod.dmi │ │ │ ├── boulder_largedark.dmi │ │ │ ├── boulder_small.dmi │ │ │ ├── boulder_widedark.dmi │ │ │ ├── campaign/ │ │ │ │ ├── ASAT.dmi │ │ │ │ ├── blockers.dmi │ │ │ │ ├── campaign_64.dmi │ │ │ │ ├── campaign_big.dmi │ │ │ │ ├── campaign_bigger.dmi │ │ │ │ └── tall_structures.dmi │ │ │ ├── campaign_structures.dmi │ │ │ ├── cas_cockpit.dmi │ │ │ ├── cave_decor.dmi │ │ │ ├── closet.dmi │ │ │ ├── coagulation_arm.dmi │ │ │ ├── contain.dmi │ │ │ ├── containHorizont.dmi │ │ │ ├── crates.dmi │ │ │ ├── curtain.dmi │ │ │ ├── droppod.dmi │ │ │ ├── dropship_structures.dmi │ │ │ ├── fence.dmi │ │ │ ├── fence_ew.dmi │ │ │ ├── fence_ns.dmi │ │ │ ├── gorg_window_frames.dmi │ │ │ ├── gorg_windows.dmi │ │ │ ├── handrail.dmi │ │ │ ├── jungle.dmi │ │ │ ├── memorial.dmi │ │ │ ├── misc.dmi │ │ │ ├── pipe_multiple.dmi │ │ │ ├── platforms.dmi │ │ │ ├── prop/ │ │ │ │ ├── apc.dmi │ │ │ │ ├── broken_apc.dmi │ │ │ │ ├── concrete_planter.dmi │ │ │ │ ├── dropship.dmi │ │ │ │ ├── mainship.dmi │ │ │ │ ├── mainship_64.dmi │ │ │ │ ├── mainship_96.dmi │ │ │ │ ├── mech.dmi │ │ │ │ ├── somship.dmi │ │ │ │ ├── tank_horizontal.dmi │ │ │ │ ├── tank_vertical.dmi │ │ │ │ ├── urban/ │ │ │ │ │ ├── 128x32_vehiclesexpanded.dmi │ │ │ │ │ ├── 32x64_urbanbillboards.dmi │ │ │ │ │ ├── 64x64_urbanrandomprops.dmi │ │ │ │ │ ├── 64x96-urbanrandomprops.dmi │ │ │ │ │ ├── containersextended.dmi │ │ │ │ │ ├── crashedcars.dmi │ │ │ │ │ ├── engineerjockey.dmi │ │ │ │ │ ├── supermart.dmi │ │ │ │ │ ├── urban64x64_signs.dmi │ │ │ │ │ ├── urban_lattice.dmi │ │ │ │ │ ├── urbanengineerpillarangled.dmi │ │ │ │ │ ├── urbanrandomprops.dmi │ │ │ │ │ ├── urbanshutters.dmi │ │ │ │ │ ├── urbantables.dmi │ │ │ │ │ ├── urbanxenocryogenics.dmi │ │ │ │ │ ├── urbanxenocryogenics2.dmi │ │ │ │ │ └── vehiclesexpanded.dmi │ │ │ │ └── urban_vehicles/ │ │ │ │ ├── 64x64_hybrisa_vehicles_boxvans.dmi │ │ │ │ ├── 64x64_hybrisa_vehicles_colonycrawlers.dmi │ │ │ │ ├── 64x64_hybrisa_vehicles_smalltrucks.dmi │ │ │ │ ├── box_van_bluegrey.dmi │ │ │ │ ├── box_van_hyperdyne.dmi │ │ │ │ ├── box_van_kellandmining.dmi │ │ │ │ ├── box_van_maintenanceblue.dmi │ │ │ │ ├── box_van_pizza.dmi │ │ │ │ ├── box_van_white.dmi │ │ │ │ ├── meridian_black.dmi │ │ │ │ ├── meridian_blue.dmi │ │ │ │ ├── meridian_brown.dmi │ │ │ │ ├── meridian_cop.dmi │ │ │ │ ├── meridian_desatblue.dmi │ │ │ │ ├── meridian_green.dmi │ │ │ │ ├── meridian_lightblue.dmi │ │ │ │ ├── meridian_orange.dmi │ │ │ │ ├── meridian_pink.dmi │ │ │ │ ├── meridian_purple.dmi │ │ │ │ ├── meridian_red.dmi │ │ │ │ ├── meridian_taxi.dmi │ │ │ │ ├── meridian_turquoise.dmi │ │ │ │ └── meridian_wy.dmi │ │ │ ├── sensor.dmi │ │ │ ├── stairs.dmi │ │ │ ├── structures.dmi │ │ │ ├── tables.dmi │ │ │ ├── teleporter.dmi │ │ │ ├── toolboxtrophy.dmi │ │ │ ├── train.dmi │ │ │ ├── waste_pipe.dmi │ │ │ ├── window_frames.dmi │ │ │ └── windows.dmi │ │ ├── supplypods.dmi │ │ ├── surgery.dmi │ │ ├── terminals.dmi │ │ ├── tg_vending_props.dmi │ │ ├── tram/ │ │ │ ├── crossing_signal.dmi │ │ │ ├── tram_controllers.dmi │ │ │ ├── tram_display.dmi │ │ │ ├── tram_indicator.dmi │ │ │ ├── tram_rails.dmi │ │ │ ├── tram_sensor.dmi │ │ │ └── tram_structure.dmi │ │ ├── unmanned_vehicles.dmi │ │ ├── vehicles/ │ │ │ ├── 4x4.dmi │ │ │ ├── 64x64.dmi │ │ │ ├── big_bike.dmi │ │ │ ├── hover_bike.dmi │ │ │ ├── large_truck.dmi │ │ │ └── vehicle_weapons.dmi │ │ ├── vehicles.dmi │ │ ├── wallframes.dmi │ │ ├── watercloset.dmi │ │ └── wizard.dmi │ ├── testing/ │ │ └── greyscale_error.dmi │ └── turf/ │ ├── alpha_128.dmi │ ├── alpha_64.dmi │ ├── area_corsat.dmi │ ├── area_kutjevo.dmi │ ├── area_mainship.dmi │ ├── area_prison_v3_fiorina.dmi │ ├── areas.dmi │ ├── areas_station.dmi │ ├── asphalt.dmi │ ├── auto_shaledesaturated.dmi │ ├── bigred.dmi │ ├── cas.dmi │ ├── catwalks.dmi │ ├── cave.dmi │ ├── cave_drought.dmi │ ├── chigusa.dmi │ ├── concrete.dmi │ ├── dam_areas.dmi │ ├── decals.dmi │ ├── desert.dmi │ ├── desertdam_map.dmi │ ├── dirt.dmi │ ├── dropship.dmi │ ├── dropship2.dmi │ ├── dropship4.dmi │ ├── elevator.dmi │ ├── engineership.dmi │ ├── ert_shuttle.dmi │ ├── escapepods.dmi │ ├── floors/ │ │ ├── asphalt-regular.dmi │ │ ├── asphalt-sunbleached.dmi │ │ ├── basalt-dirt.dmi │ │ ├── carpet.dmi │ │ ├── carpet_black.dmi │ │ ├── carpet_blue.dmi │ │ ├── carpet_cyan.dmi │ │ ├── carpet_green.dmi │ │ ├── carpet_orange.dmi │ │ ├── carpet_purple.dmi │ │ ├── carpet_red.dmi │ │ ├── carpet_royalblack.dmi │ │ ├── cave-basalt.dmi │ │ ├── chasms.dmi │ │ ├── glass.dmi │ │ ├── hybrisa_concrete.dmi │ │ ├── jungle-border.dmi │ │ ├── jungle-dirt-border.dmi │ │ ├── junglechasm.dmi │ │ ├── lava.dmi │ │ ├── plasma_glass.dmi │ │ ├── red-dirt.dmi │ │ ├── reinf_glass.dmi │ │ ├── reinf_plasma_glass.dmi │ │ ├── river.dmi │ │ └── river_desert.dmi │ ├── floors.dmi │ ├── geothermal.dmi │ ├── ground_map.dmi │ ├── hybrisafloors.dmi │ ├── hybrisareas.dmi │ ├── ice.dmi │ ├── icewall.dmi │ ├── icewalllight.dmi │ ├── industrial.dmi │ ├── jungle.dmi │ ├── kutjevo_floor.dmi │ ├── lava.dmi │ ├── mainship.dmi │ ├── mainshipwalls.dmi │ ├── overlays.dmi │ ├── prison.dmi │ ├── rockwall.dmi │ ├── roofs/ │ │ ├── roof_asphalt.dmi │ │ ├── roof_asphalt_noborder.dmi │ │ ├── roof_metal.dmi │ │ ├── roof_rusty.dmi │ │ ├── roof_sheet.dmi │ │ ├── roof_sheet_noborder.dmi │ │ └── roof_wood.dmi │ ├── shuttle.dmi │ ├── snow.dmi │ ├── snow2.dmi │ ├── space.dmi │ ├── tram.dmi │ ├── walls/ │ │ ├── adobe.dmi │ │ ├── adobe_1.dmi │ │ ├── adobe_2.dmi │ │ ├── adobe_3.dmi │ │ ├── basaltwall.dmi │ │ ├── black_stone_walls.dmi │ │ ├── bluefrostwall.dmi │ │ ├── brick.dmi │ │ ├── cave.dmi │ │ ├── chigusa.dmi │ │ ├── cult.dmi │ │ ├── dark_col_wall.dmi │ │ ├── darkfrostwall.dmi │ │ ├── elevator_wall.dmi │ │ ├── engineer_walls.dmi │ │ ├── engineer_walls_turf.dmi │ │ ├── frostwall.dmi │ │ ├── gorg_prison_rwall.dmi │ │ ├── gorg_prison_rwall_two.dmi │ │ ├── gorg_prison_wall.dmi │ │ ├── gorg_prison_wall_two.dmi │ │ ├── gwall.dmi │ │ ├── hybrisa_colony_walls.dmi │ │ ├── jungle.dmi │ │ ├── junglewall.dmi │ │ ├── junkwall.dmi │ │ ├── kutjevo_rwall.dmi │ │ ├── kutjevo_wall.dmi │ │ ├── lava_wall.dmi │ │ ├── lvwall-phoron.dmi │ │ ├── lvwall.dmi │ │ ├── prison.dmi │ │ ├── redwall.dmi │ │ ├── regular_wall.dmi │ │ ├── resin_bone_wall.dmi │ │ ├── rwall.dmi │ │ ├── siding.dmi │ │ ├── siding_1.dmi │ │ ├── siding_2.dmi │ │ ├── siding_3.dmi │ │ ├── siding_red.dmi │ │ ├── siding_red_1.dmi │ │ ├── siding_red_2.dmi │ │ ├── siding_red_3.dmi │ │ ├── snowwall.dmi │ │ ├── strata_ice_wall.dmi │ │ ├── sulaco.dmi │ │ ├── testwall.dmi │ │ ├── urban_wall_regular.dmi │ │ ├── white_research_wall.dmi │ │ ├── woodrwall.dmi │ │ ├── woodwall.dmi │ │ └── wwall.dmi │ ├── walls.dmi │ ├── whiskeyoutpost.dmi │ ├── wood.dmi │ └── wood_floor.dmi ├── interface/ │ ├── fonts/ │ │ ├── easvhs.dm │ │ ├── f25_bank.dm │ │ ├── fonts_datum.dm │ │ ├── grand_9k.dm │ │ ├── license.txt │ │ ├── pixellari.dm │ │ ├── spess_font.dm │ │ ├── tiny_unicode.dm │ │ └── vcr_osd_mono.dm │ ├── interface.dm │ ├── menu.dm │ ├── skin.dmf │ └── stylesheet.dm ├── sound/ │ ├── AI/ │ │ ├── ARES_Self_Destruct_10m_FULL.ogg │ │ ├── ARES_Self_Destruct_5m_CANCELED.ogg │ │ ├── aireport.ogg │ │ ├── ares_online.ogg │ │ ├── bioscan.ogg │ │ ├── code_blue_elevated.ogg │ │ ├── code_blue_lowered.ogg │ │ ├── code_green.ogg │ │ ├── code_red_elevated.ogg │ │ ├── code_red_lowered.ogg │ │ ├── commandreport.ogg │ │ ├── distressbeacon.ogg │ │ ├── distressreceived.ogg │ │ ├── dropship_emergency.ogg │ │ ├── evacuate.ogg │ │ ├── evacuate_cancelled.ogg │ │ ├── evacuation_complete.ogg │ │ ├── evacuation_confirmed.ogg │ │ ├── hijack.ogg │ │ ├── poweroff.ogg │ │ ├── poweron.ogg │ │ ├── selfdestruct.ogg │ │ └── selfdestruct_deactivated.ogg │ ├── ambience/ │ │ ├── alarm4.ogg │ │ ├── ambi_snow.ogg │ │ ├── ambiatm1.ogg │ │ ├── ambiatmos.ogg │ │ ├── ambiatmos2.ogg │ │ ├── ambicave.ogg │ │ ├── ambicave2.ogg │ │ ├── ambicha1.ogg │ │ ├── ambicha2.ogg │ │ ├── ambicha3.ogg │ │ ├── ambicha4.ogg │ │ ├── ambienthum.ogg │ │ ├── ambigen1.ogg │ │ ├── ambigen10.ogg │ │ ├── ambigen11.ogg │ │ ├── ambigen12.ogg │ │ ├── ambigen13.ogg │ │ ├── ambigen14.ogg │ │ ├── ambigen2.ogg │ │ ├── ambigen3.ogg │ │ ├── ambigen4.ogg │ │ ├── ambigen5.ogg │ │ ├── ambigen6.ogg │ │ ├── ambigen7.ogg │ │ ├── ambigen8.ogg │ │ ├── ambigen9.ogg │ │ ├── ambilava1.ogg │ │ ├── ambilava2.ogg │ │ ├── ambilava3.ogg │ │ ├── ambimalf.ogg │ │ ├── ambimine.ogg │ │ ├── ambimo1.ogg │ │ ├── ambimo2.ogg │ │ ├── ambisin1.ogg │ │ ├── ambisin2.ogg │ │ ├── ambisin3.ogg │ │ ├── ambisin4.ogg │ │ ├── ambispace.ogg │ │ ├── ambitech.ogg │ │ ├── ambitech2.ogg │ │ ├── drip1.ogg │ │ ├── drip2.ogg │ │ ├── drip3.ogg │ │ ├── drip3.ogg.ogg │ │ ├── drip4.ogg │ │ ├── drip5.ogg │ │ ├── jungle_amb1.ogg │ │ ├── river/ │ │ │ ├── stream_1.ogg │ │ │ ├── stream_2.ogg │ │ │ └── stream_3.ogg │ │ ├── seag1.ogg │ │ ├── seag2.ogg │ │ ├── seag3.ogg │ │ ├── shipambience.ogg │ │ ├── shore.ogg │ │ ├── signal.ogg │ │ ├── tank_driving.ogg │ │ ├── tank_driving_joke.ogg │ │ ├── votestart.ogg │ │ └── windambient.ogg │ ├── bullets/ │ │ ├── acid_impact1.ogg │ │ ├── bullet_armor1.ogg │ │ ├── bullet_armor2.ogg │ │ ├── bullet_armor3.ogg │ │ ├── bullet_armor4.ogg │ │ ├── bullet_impact1.ogg │ │ ├── bullet_impact2.ogg │ │ ├── bullet_impact3.ogg │ │ ├── bullet_impact4.ogg │ │ ├── bullet_impact5.ogg │ │ ├── bullet_impact6.ogg │ │ ├── bullet_impact7.ogg │ │ ├── bullet_miss1.ogg │ │ ├── bullet_miss2.ogg │ │ ├── bullet_miss3.ogg │ │ ├── bullet_miss4.ogg │ │ ├── bullet_ricochet1.ogg │ │ ├── bullet_ricochet2.ogg │ │ ├── bullet_ricochet3.ogg │ │ ├── bullet_ricochet4.ogg │ │ ├── bullet_ricochet5.ogg │ │ ├── bullet_ricochet6.ogg │ │ ├── bullet_ricochet7.ogg │ │ ├── bullet_ricochet8.ogg │ │ ├── bulletcasing_bounce1.ogg │ │ ├── bulletcasing_fall1.ogg │ │ ├── bulletcasing_fall2.ogg │ │ ├── bulletcasing_shotgun_fall1.ogg │ │ ├── energy_impact1.ogg │ │ ├── energy_miss1.ogg │ │ ├── energy_ricochet1.ogg │ │ ├── rocket_ricochet1.ogg │ │ ├── rocket_ricochet2.ogg │ │ ├── rocket_ricochet3.ogg │ │ ├── spear_armor1.ogg │ │ ├── spear_impact1.ogg │ │ ├── spear_ricochet1.ogg │ │ └── spear_ricochet2.ogg │ ├── creatures/ │ │ └── bee.ogg │ ├── credits.md │ ├── effects/ │ │ ├── CIC_order.ogg │ │ ├── EMPulse.ogg │ │ ├── Glasshit.ogg │ │ ├── Glasshit_old.ogg │ │ ├── Heart Beat.ogg │ │ ├── OB_incoming.ogg │ │ ├── OB_warning_announce.ogg │ │ ├── OB_warning_announce_novoiceover.ogg │ │ ├── adminhelp.ogg │ │ ├── air_release.ogg │ │ ├── airhiss.ogg │ │ ├── alert.ogg │ │ ├── alien/ │ │ │ ├── behemoth/ │ │ │ │ ├── earth_pillar_destroyed.ogg │ │ │ │ ├── earth_pillar_eating.ogg │ │ │ │ ├── earth_pillar_hit_1.ogg │ │ │ │ ├── earth_pillar_hit_2.ogg │ │ │ │ ├── earth_pillar_hit_3.ogg │ │ │ │ ├── earth_pillar_hit_4.ogg │ │ │ │ ├── earth_pillar_hit_5.ogg │ │ │ │ ├── earth_pillar_hit_6.ogg │ │ │ │ ├── earth_pillar_rising.ogg │ │ │ │ ├── landslide_enhanced_charge.ogg │ │ │ │ ├── landslide_hit_mob.ogg │ │ │ │ ├── landslide_roar.ogg │ │ │ │ ├── primal_wrath_roar.ogg │ │ │ │ ├── roll.ogg │ │ │ │ ├── rumble.ogg │ │ │ │ ├── seismic_fracture_explosion.ogg │ │ │ │ └── stomp.ogg │ │ │ ├── conqueror/ │ │ │ │ ├── domination_explosion.ogg │ │ │ │ ├── domination_reappearance.ogg │ │ │ │ ├── obliteration_activation.ogg │ │ │ │ ├── obliteration_roar.ogg │ │ │ │ ├── will_extra_1.ogg │ │ │ │ ├── will_extra_2.ogg │ │ │ │ ├── will_extra_3.ogg │ │ │ │ ├── will_hook_1.ogg │ │ │ │ ├── will_hook_2.ogg │ │ │ │ ├── will_hook_3.ogg │ │ │ │ ├── will_jab.ogg │ │ │ │ ├── will_kick.ogg │ │ │ │ ├── will_punch.ogg │ │ │ │ ├── will_uppercut.ogg │ │ │ │ └── will_uppercut_landing.ogg │ │ │ ├── dragon/ │ │ │ │ ├── backhand_hit.ogg │ │ │ │ ├── crytogensis_impact.ogg │ │ │ │ ├── dragonbreath_start.ogg │ │ │ │ ├── flying_flight.ogg │ │ │ │ ├── flying_landing.ogg │ │ │ │ ├── flying_progress.ogg │ │ │ │ ├── lightning_impact.ogg │ │ │ │ ├── tailswipe_hit.ogg │ │ │ │ └── void_explosion.ogg │ │ │ ├── egg_burst.ogg │ │ │ ├── egg_move.ogg │ │ │ ├── evolve_ready.ogg │ │ │ ├── fireball.ogg │ │ │ ├── firebeam.ogg │ │ │ ├── footstep_charge1.ogg │ │ │ ├── footstep_charge2.ogg │ │ │ ├── footstep_charge3.ogg │ │ │ ├── footstep_large1.ogg │ │ │ ├── footstep_large2.ogg │ │ │ ├── footstep_large3.ogg │ │ │ ├── footstep_medium1.ogg │ │ │ ├── footstep_medium2.ogg │ │ │ ├── footstep_medium3.ogg │ │ │ ├── king_beam_active.ogg │ │ │ ├── king_beam_charge.ogg │ │ │ ├── new_larva.ogg │ │ │ ├── prepare.ogg │ │ │ ├── recycler.ogg │ │ │ ├── resin_break1.ogg │ │ │ ├── resin_break2.ogg │ │ │ ├── resin_build1.ogg │ │ │ ├── resin_build2.ogg │ │ │ ├── resin_build3.ogg │ │ │ ├── resin_move1.ogg │ │ │ ├── resin_move2.ogg │ │ │ ├── tail_swipe1.ogg │ │ │ ├── tail_swipe2.ogg │ │ │ ├── tail_swipe3.ogg │ │ │ ├── turret_death.ogg │ │ │ ├── ventcrawl1.ogg │ │ │ ├── ventcrawl2.ogg │ │ │ ├── ventpass1.ogg │ │ │ └── ventpass2.ogg │ │ ├── angry_beep.ogg │ │ ├── attackblob.ogg │ │ ├── bamf.ogg │ │ ├── bang.ogg │ │ ├── barbed_wire_movement.ogg │ │ ├── binoctarget.ogg │ │ ├── blobattack.ogg │ │ ├── bomb_fall.ogg │ │ ├── bone_break1.ogg │ │ ├── bone_break2.ogg │ │ ├── bone_break3.ogg │ │ ├── bone_break4.ogg │ │ ├── bone_break5.ogg │ │ ├── bone_break6.ogg │ │ ├── bone_break7.ogg │ │ ├── bounce_1.ogg │ │ ├── bounce_2.ogg │ │ ├── bounce_3.ogg │ │ ├── bounce_4.ogg │ │ ├── bubbles.ogg │ │ ├── bubbles2.ogg │ │ ├── can_open1.ogg │ │ ├── can_open2.ogg │ │ ├── can_open3.ogg │ │ ├── can_pop.ogg │ │ ├── can_shake.ogg │ │ ├── canopen.ogg │ │ ├── car_crush.ogg │ │ ├── casplane_flyby.ogg │ │ ├── clang.ogg │ │ ├── cloak_scout_off.ogg │ │ ├── cloak_scout_on.ogg │ │ ├── clothcurtain.ogg │ │ ├── clownstep1.ogg │ │ ├── clownstep2.ogg │ │ ├── confirm_beep.ogg │ │ ├── creak1.ogg │ │ ├── creak2.ogg │ │ ├── cutting_cocoon.ogg │ │ ├── doorcreaky.ogg │ │ ├── drill.ogg │ │ ├── drip1.ogg │ │ ├── drip2.ogg │ │ ├── drip3.ogg │ │ ├── drip3.ogg.ogg │ │ ├── drip4.ogg │ │ ├── drip5.ogg │ │ ├── droppod_impact.ogg │ │ ├── droppod_launch.ogg │ │ ├── dropship_sonic_boom.ogg │ │ ├── engamb1.ogg │ │ ├── engamb2.ogg │ │ ├── engamb3.ogg │ │ ├── engamb4.ogg │ │ ├── engamb5.ogg │ │ ├── engamb6.ogg │ │ ├── engamb7.ogg │ │ ├── engine_cargoshuttle_landing.ogg │ │ ├── engine_cargoshuttle_startup.ogg │ │ ├── engine_landing.ogg │ │ ├── engine_startup.ogg │ │ ├── escape_pod_launch.ogg │ │ ├── escape_pod_warmup.ogg │ │ ├── explosion/ │ │ │ ├── creak1.ogg │ │ │ ├── creak2.ogg │ │ │ ├── far.ogg │ │ │ ├── far1.ogg │ │ │ ├── far2.ogg │ │ │ ├── far3.ogg │ │ │ ├── far4.ogg │ │ │ ├── far5.ogg │ │ │ ├── large1.ogg │ │ │ ├── large2.ogg │ │ │ ├── large3.ogg │ │ │ ├── large4.ogg │ │ │ ├── large5.ogg │ │ │ ├── large6.ogg │ │ │ ├── medium1.ogg │ │ │ ├── medium2.ogg │ │ │ ├── medium3.ogg │ │ │ ├── medium4.ogg │ │ │ ├── medium5.ogg │ │ │ ├── medium6.ogg │ │ │ ├── micro1.ogg │ │ │ ├── micro2.ogg │ │ │ ├── micro3.ogg │ │ │ ├── small1.ogg │ │ │ ├── small2.ogg │ │ │ ├── small3.ogg │ │ │ ├── small4.ogg │ │ │ ├── small_far.ogg │ │ │ ├── small_far1.ogg │ │ │ ├── small_far2.ogg │ │ │ ├── small_far3.ogg │ │ │ └── small_far4.ogg │ │ ├── extinguish.ogg │ │ ├── fire_crackle.ogg │ │ ├── flashbang_explode_1.ogg │ │ ├── flashbang_explode_2.ogg │ │ ├── footstep/ │ │ │ ├── alien_resin_move1.ogg │ │ │ ├── alien_resin_move2.ogg │ │ │ ├── asteroid1.ogg │ │ │ ├── asteroid2.ogg │ │ │ ├── asteroid3.ogg │ │ │ ├── asteroid4.ogg │ │ │ ├── asteroid5.ogg │ │ │ ├── carpet1.ogg │ │ │ ├── carpet2.ogg │ │ │ ├── carpet3.ogg │ │ │ ├── carpet4.ogg │ │ │ ├── carpet5.ogg │ │ │ ├── carpetbarefoot1.ogg │ │ │ ├── carpetbarefoot2.ogg │ │ │ ├── carpetbarefoot3.ogg │ │ │ ├── carpetbarefoot4.ogg │ │ │ ├── carpetbarefoot5.ogg │ │ │ ├── catwalk1.ogg │ │ │ ├── catwalk2.ogg │ │ │ ├── catwalk3.ogg │ │ │ ├── catwalk4.ogg │ │ │ ├── catwalk5.ogg │ │ │ ├── concrete1.ogg │ │ │ ├── concrete2.ogg │ │ │ ├── concrete3.ogg │ │ │ ├── concrete4.ogg │ │ │ ├── concrete5.ogg │ │ │ ├── crawl1.ogg │ │ │ ├── floor1.ogg │ │ │ ├── floor2.ogg │ │ │ ├── floor3.ogg │ │ │ ├── floor4.ogg │ │ │ ├── floor5.ogg │ │ │ ├── grass1.ogg │ │ │ ├── grass2.ogg │ │ │ ├── grass3.ogg │ │ │ ├── grass4.ogg │ │ │ ├── gravel_1.ogg │ │ │ ├── gravel_10.ogg │ │ │ ├── gravel_11.ogg │ │ │ ├── gravel_12.ogg │ │ │ ├── gravel_13.ogg │ │ │ ├── gravel_14.ogg │ │ │ ├── gravel_15.ogg │ │ │ ├── gravel_16.ogg │ │ │ ├── gravel_17.ogg │ │ │ ├── gravel_18.ogg │ │ │ ├── gravel_2.ogg │ │ │ ├── gravel_3.ogg │ │ │ ├── gravel_4.ogg │ │ │ ├── gravel_5.ogg │ │ │ ├── gravel_6.ogg │ │ │ ├── gravel_7.ogg │ │ │ ├── gravel_8.ogg │ │ │ ├── gravel_9.ogg │ │ │ ├── hardbarefoot1.ogg │ │ │ ├── hardbarefoot2.ogg │ │ │ ├── hardbarefoot3.ogg │ │ │ ├── hardbarefoot4.ogg │ │ │ ├── hardbarefoot5.ogg │ │ │ ├── hardclaw1.ogg │ │ │ ├── hardclaw2.ogg │ │ │ ├── hardclaw3.ogg │ │ │ ├── hardclaw4.ogg │ │ │ ├── heavy1.ogg │ │ │ ├── heavy2.ogg │ │ │ ├── heavy3.ogg │ │ │ ├── hull1.ogg │ │ │ ├── hull2.ogg │ │ │ ├── hull3.ogg │ │ │ ├── hull4.ogg │ │ │ ├── hull5.ogg │ │ │ ├── ice1.ogg │ │ │ ├── ice2.ogg │ │ │ ├── ice3.ogg │ │ │ ├── ice4.ogg │ │ │ ├── ice5.ogg │ │ │ ├── plating1.ogg │ │ │ ├── plating2.ogg │ │ │ ├── plating3.ogg │ │ │ ├── plating4.ogg │ │ │ ├── plating5.ogg │ │ │ ├── roof1.ogg │ │ │ ├── roof2.ogg │ │ │ ├── roof3.ogg │ │ │ ├── roof4.ogg │ │ │ ├── sand1.ogg │ │ │ ├── sand2.ogg │ │ │ ├── sand3.ogg │ │ │ ├── sand4.ogg │ │ │ ├── snow1.ogg │ │ │ ├── snow2.ogg │ │ │ ├── snow3.ogg │ │ │ ├── snow4.ogg │ │ │ ├── snow5.ogg │ │ │ ├── swimming1.ogg │ │ │ ├── swimming2.ogg │ │ │ ├── swimming3.ogg │ │ │ ├── water1.ogg │ │ │ ├── water2.ogg │ │ │ ├── water3.ogg │ │ │ ├── water4.ogg │ │ │ ├── waterstep1.ogg │ │ │ ├── waterstep2.ogg │ │ │ ├── waterstep3.ogg │ │ │ ├── wood1.ogg │ │ │ ├── wood2.ogg │ │ │ ├── wood3.ogg │ │ │ ├── wood4.ogg │ │ │ ├── wood5.ogg │ │ │ ├── woodbarefoot1.ogg │ │ │ ├── woodbarefoot2.ogg │ │ │ ├── woodbarefoot3.ogg │ │ │ ├── woodbarefoot4.ogg │ │ │ ├── woodbarefoot5.ogg │ │ │ ├── woodclaw1.ogg │ │ │ ├── woodclaw2.ogg │ │ │ └── woodclaw3.ogg │ │ ├── gasmaskbreath.ogg │ │ ├── gasmaskbreath2.ogg │ │ ├── geiger/ │ │ │ ├── ext1.ogg │ │ │ ├── ext2.ogg │ │ │ ├── ext3.ogg │ │ │ ├── ext4.ogg │ │ │ ├── high1.ogg │ │ │ ├── high2.ogg │ │ │ ├── high3.ogg │ │ │ ├── high4.ogg │ │ │ ├── low1.ogg │ │ │ ├── low2.ogg │ │ │ ├── low3.ogg │ │ │ ├── low4.ogg │ │ │ ├── med1.ogg │ │ │ ├── med2.ogg │ │ │ ├── med3.ogg │ │ │ └── med4.ogg │ │ ├── ghost.ogg │ │ ├── ghost2.ogg │ │ ├── gib.ogg │ │ ├── gladosmarinerevive.ogg │ │ ├── glass_step.ogg │ │ ├── glassbr1.ogg │ │ ├── glassbr2.ogg │ │ ├── glassbr3.ogg │ │ ├── glassknock.ogg │ │ ├── glob.ogg │ │ ├── grillehit.ogg │ │ ├── hit_on_shattered_glass.ogg │ │ ├── incendiary_explosion_1.ogg │ │ ├── incendiary_explosion_2.ogg │ │ ├── incendiary_explosion_3.ogg │ │ ├── kaboom.ogg │ │ ├── knockout.ogg │ │ ├── lightbuzzloop6.ogg │ │ ├── lightfizz.ogg │ │ ├── lightfizz2.ogg │ │ ├── lightfizz3.ogg │ │ ├── lightfizz4.ogg │ │ ├── lightfizz5.ogg │ │ ├── lightfizz6.ogg │ │ ├── lightningbolt.ogg │ │ ├── magic.ogg │ │ ├── medcurtain1.ogg │ │ ├── medcurtain2.ogg │ │ ├── mentorhelp.ogg │ │ ├── menu_click.ogg │ │ ├── menu_select.ogg │ │ ├── metal_crash.ogg │ │ ├── metal_creaking.ogg │ │ ├── metalhit.ogg │ │ ├── meteorimpact.ogg │ │ ├── molotov_detonate_1.ogg │ │ ├── molotov_detonate_2.ogg │ │ ├── molotov_detonate_3.ogg │ │ ├── mousesqueek.ogg │ │ ├── natural/ │ │ │ ├── vegetation_hit.ogg │ │ │ ├── vegetation_walk_0.ogg │ │ │ ├── vegetation_walk_1.ogg │ │ │ ├── vegetation_walk_2.ogg │ │ │ ├── wave1.ogg │ │ │ ├── wave2.ogg │ │ │ ├── wave3.ogg │ │ │ └── woodhit.ogg │ │ ├── nightvision.ogg │ │ ├── obalarm.ogg │ │ ├── obfire.ogg │ │ ├── off_guard_ability.ogg │ │ ├── pageturn1.ogg │ │ ├── pageturn2.ogg │ │ ├── pageturn3.ogg │ │ ├── perk_unlock.ogg │ │ ├── petrify_activate.ogg │ │ ├── petrify_charge.ogg │ │ ├── phasein.ogg │ │ ├── pop.ogg │ │ ├── portal.ogg │ │ ├── portal_opening.ogg │ │ ├── powerloss.ogg │ │ ├── pred_cloakoff.ogg │ │ ├── pred_cloakon.ogg │ │ ├── pred_countdown.ogg │ │ ├── pred_vision.ogg │ │ ├── radio_chatter/ │ │ │ ├── radio1.ogg │ │ │ ├── radio2.ogg │ │ │ ├── radio3.ogg │ │ │ ├── radio4.ogg │ │ │ ├── radio5.ogg │ │ │ ├── radio6.ogg │ │ │ ├── radio7.ogg │ │ │ └── radio8.ogg │ │ ├── radiostatic.ogg │ │ ├── rappel.ogg │ │ ├── refill.ogg │ │ ├── robotrepair.ogg │ │ ├── robotrepair2.ogg │ │ ├── rocksfalling1.ogg │ │ ├── rocksfalling2.ogg │ │ ├── roll.ogg │ │ ├── rustle1.ogg │ │ ├── rustle2.ogg │ │ ├── rustle3.ogg │ │ ├── rustle4.ogg │ │ ├── rustle5.ogg │ │ ├── screech.ogg │ │ ├── screech2.ogg │ │ ├── seedling_chargeup.ogg │ │ ├── shard1.ogg │ │ ├── shard2.ogg │ │ ├── shard3.ogg │ │ ├── shard4.ogg │ │ ├── shard5.ogg │ │ ├── shieldbash.ogg │ │ ├── shutters_alarm.ogg │ │ ├── singlebeat.ogg │ │ ├── sink.ogg │ │ ├── sink_long.ogg │ │ ├── siren.ogg │ │ ├── slam1.ogg │ │ ├── slam2.ogg │ │ ├── slam3.ogg │ │ ├── slosh.ogg │ │ ├── smoke.ogg │ │ ├── smoke_bomb.ogg │ │ ├── smoke_extinguish.ogg │ │ ├── snap.ogg │ │ ├── sos-morse-code.ogg │ │ ├── sparks1.ogg │ │ ├── sparks2.ogg │ │ ├── sparks3.ogg │ │ ├── sparks4.ogg │ │ ├── spin.ogg │ │ ├── spinal_implant_off.ogg │ │ ├── spinal_implant_on.ogg │ │ ├── splat.ogg │ │ ├── spray.ogg │ │ ├── spray2.ogg │ │ ├── spray3.ogg │ │ ├── squelch1.ogg │ │ ├── stealthoff.ogg │ │ ├── stonedoor_openclose.ogg │ │ ├── supermatter.ogg │ │ ├── swap.ogg │ │ ├── tadpolehovering.ogg │ │ ├── thoomp.ogg │ │ ├── throw.ogg │ │ ├── thud.ogg │ │ ├── toolbox.ogg │ │ ├── urban/ │ │ │ ├── indoors/ │ │ │ │ ├── derelict1.ogg │ │ │ │ ├── derelict2.ogg │ │ │ │ ├── derelict3.ogg │ │ │ │ ├── derelict4.ogg │ │ │ │ ├── derelict5.ogg │ │ │ │ ├── derelict6.ogg │ │ │ │ ├── derelict7.ogg │ │ │ │ ├── derelict8.ogg │ │ │ │ ├── derelict_ambience.ogg │ │ │ │ ├── distant_sounds_1.ogg │ │ │ │ ├── distant_sounds_10.ogg │ │ │ │ ├── distant_sounds_2.ogg │ │ │ │ ├── distant_sounds_3.ogg │ │ │ │ ├── distant_sounds_4.ogg │ │ │ │ ├── distant_sounds_5.ogg │ │ │ │ ├── distant_sounds_6.ogg │ │ │ │ ├── distant_sounds_7.ogg │ │ │ │ ├── distant_sounds_8.ogg │ │ │ │ ├── distant_sounds_9.ogg │ │ │ │ ├── indoor_wind.ogg │ │ │ │ ├── indoor_wind2.ogg │ │ │ │ ├── lab_ambience.ogg │ │ │ │ ├── lab_ambience_2.ogg │ │ │ │ ├── lab_ambience_hallway.ogg │ │ │ │ ├── urban_interior.ogg │ │ │ │ ├── vent_1.ogg │ │ │ │ ├── vent_2.ogg │ │ │ │ ├── vent_3.ogg │ │ │ │ ├── vent_4.ogg │ │ │ │ ├── vent_5.ogg │ │ │ │ ├── vent_6.ogg │ │ │ │ ├── vent_7.ogg │ │ │ │ ├── vent_8.ogg │ │ │ │ ├── vent_9.ogg │ │ │ │ ├── weymart1.ogg │ │ │ │ ├── weymart2.ogg │ │ │ │ ├── weymart3.ogg │ │ │ │ └── weymart4.ogg │ │ │ └── outdoors/ │ │ │ ├── deepcave1.ogg │ │ │ ├── deepcave2.ogg │ │ │ ├── derelict_plateau_1.ogg │ │ │ ├── derelict_plateau_2.ogg │ │ │ ├── subliminal1.ogg │ │ │ ├── subliminal2.ogg │ │ │ ├── subliminal3.ogg │ │ │ ├── wind10.ogg │ │ │ ├── wind11.ogg │ │ │ ├── wind12.ogg │ │ │ ├── wind13.ogg │ │ │ ├── wind14.ogg │ │ │ ├── wind15.ogg │ │ │ ├── wind16.ogg │ │ │ ├── wind17.ogg │ │ │ ├── wind18.ogg │ │ │ ├── wind19.ogg │ │ │ ├── wind20.ogg │ │ │ ├── wind21.ogg │ │ │ ├── wind22.ogg │ │ │ ├── wind23.ogg │ │ │ ├── wind24.ogg │ │ │ ├── wind25.ogg │ │ │ ├── wind26.ogg │ │ │ ├── wind27.ogg │ │ │ ├── wind28.ogg │ │ │ ├── wind4.ogg │ │ │ ├── wind5.ogg │ │ │ ├── wind6.ogg │ │ │ ├── wind7.ogg │ │ │ ├── wind8.ogg │ │ │ ├── wind9.ogg │ │ │ ├── windy_caverns_1.ogg │ │ │ ├── windy_caverns_2.ogg │ │ │ └── windy_caverns_3.ogg │ │ ├── wind/ │ │ │ ├── wind_2_1.ogg │ │ │ ├── wind_2_2.ogg │ │ │ ├── wind_3_1.ogg │ │ │ ├── wind_4_1.ogg │ │ │ ├── wind_4_2.ogg │ │ │ └── wind_5_1.ogg │ │ ├── wind.ogg │ │ ├── woosh_swoosh.ogg │ │ ├── xadarblast.ogg │ │ ├── xylophone1.ogg │ │ ├── xylophone2.ogg │ │ ├── xylophone3.ogg │ │ └── zzzt.ogg │ ├── hallucinations/ │ │ ├── behind_you1.ogg │ │ ├── behind_you2.ogg │ │ ├── far_noise.ogg │ │ ├── growl1.ogg │ │ ├── growl2.ogg │ │ ├── growl3.ogg │ │ ├── i_see_you1.ogg │ │ ├── i_see_you2.ogg │ │ ├── im_here1.ogg │ │ ├── im_here2.ogg │ │ ├── look_up1.ogg │ │ ├── look_up2.ogg │ │ ├── over_here1.ogg │ │ ├── over_here2.ogg │ │ ├── over_here3.ogg │ │ ├── turn_around1.ogg │ │ ├── turn_around2.ogg │ │ ├── veryfar_noise.ogg │ │ └── wail.ogg │ ├── items/ │ │ ├── armorlock.ogg │ │ ├── bikehorn.ogg │ │ ├── binoculars.ogg │ │ ├── blink_empty.ogg │ │ ├── blink_recharge.ogg │ │ ├── bubblewrap.ogg │ │ ├── champagne_pop.ogg │ │ ├── cig_light.ogg │ │ ├── cig_snuff.ogg │ │ ├── countdown.ogg │ │ ├── crowbar.ogg │ │ ├── deconstruct.ogg │ │ ├── defib_SafetyOn.ogg │ │ ├── defib_charge.ogg │ │ ├── defib_failed.ogg │ │ ├── defib_release.ogg │ │ ├── defib_safetyOff.ogg │ │ ├── defib_success.ogg │ │ ├── detector.ogg │ │ ├── dollsqueak.ogg │ │ ├── drink.ogg │ │ ├── eatfood.ogg │ │ ├── eshield_down.ogg │ │ ├── eshield_recharge.ogg │ │ ├── flare.ogg │ │ ├── flashlight.ogg │ │ ├── fultext_deploy.ogg │ │ ├── fultext_launch.ogg │ │ ├── gnome.ogg │ │ ├── googles_off.ogg │ │ ├── googles_on.ogg │ │ ├── healthanalyzer.ogg │ │ ├── hypospray.ogg │ │ ├── jetpack_sound.ogg │ │ ├── lighter_off.ogg │ │ ├── lighter_on.ogg │ │ ├── matchstick_hit.ogg │ │ ├── matchstick_lit.ogg │ │ ├── megaphone.ogg │ │ ├── pillbottle.ogg │ │ ├── pills.ogg │ │ ├── plantable_flag/ │ │ │ └── flag_raised.ogg │ │ ├── polaroid1.ogg │ │ ├── polaroid2.ogg │ │ ├── poster_being_created.ogg │ │ ├── poster_ripped.ogg │ │ ├── ratchet.ogg │ │ ├── rped.ogg │ │ ├── screwdriver.ogg │ │ ├── screwdriver2.ogg │ │ ├── splint_break.ogg │ │ ├── stamp.ogg │ │ ├── syringeproj.ogg │ │ ├── tick.ogg │ │ ├── timer.ogg │ │ ├── trayhit1.ogg │ │ ├── trayhit2.ogg │ │ ├── wee.ogg │ │ ├── welder.ogg │ │ ├── welder2.ogg │ │ ├── weldingtool_off.ogg │ │ ├── weldingtool_on.ogg │ │ ├── weldingtool_weld.ogg │ │ ├── whistle.ogg │ │ ├── wirecutter.ogg │ │ ├── write1.ogg │ │ ├── write2.ogg │ │ ├── zip.ogg │ │ ├── zippo_off.ogg │ │ └── zippo_on.ogg │ ├── machines/ │ │ ├── airalarm.ogg │ │ ├── airlock.ogg │ │ ├── alarm.ogg │ │ ├── beep.ogg │ │ ├── beepalert.ogg │ │ ├── beepconfused.ogg │ │ ├── beepsad.ogg │ │ ├── blastdoor.ogg │ │ ├── blender.ogg │ │ ├── boltsdown.ogg │ │ ├── boltsup.ogg │ │ ├── buzz-sigh.ogg │ │ ├── buzz-two.ogg │ │ ├── chime.ogg │ │ ├── click.ogg │ │ ├── closet/ │ │ │ ├── attribution.txt │ │ │ ├── closet_close.ogg │ │ │ ├── closet_lock.ogg │ │ │ ├── closet_open.ogg │ │ │ ├── closet_unlock.ogg │ │ │ ├── wooden_closet_close.ogg │ │ │ └── wooden_closet_open.ogg │ │ ├── computer_typing1.ogg │ │ ├── computer_typing2.ogg │ │ ├── computer_typing3.ogg │ │ ├── creak.ogg │ │ ├── ding.ogg │ │ ├── dispenser/ │ │ │ ├── dispenser_deploy.ogg │ │ │ ├── dispenser_heal.ogg │ │ │ └── dispenser_undeploy.ogg │ │ ├── disposalflush.ogg │ │ ├── door_close.ogg │ │ ├── door_locked.ogg │ │ ├── door_open.ogg │ │ ├── dotprinter.ogg │ │ ├── drone/ │ │ │ ├── droneoff.ogg │ │ │ └── weapons_engaged.ogg │ │ ├── dropship_fabricator.ogg │ │ ├── elevator_move.ogg │ │ ├── elevator_openclose.ogg │ │ ├── emergency_shutter.ogg │ │ ├── fax.ogg │ │ ├── generator/ │ │ │ ├── generator_end.ogg │ │ │ ├── generator_mid1.ogg │ │ │ ├── generator_mid2.ogg │ │ │ ├── generator_mid3.ogg │ │ │ └── generator_start.ogg │ │ ├── grill/ │ │ │ ├── frying.ogg │ │ │ └── grillsizzle.ogg │ │ ├── hiss.ogg │ │ ├── hydraulic.ogg │ │ ├── hydraulics_1.ogg │ │ ├── hydraulics_2.ogg │ │ ├── juicer.ogg │ │ ├── lockenable.ogg │ │ ├── lockreset.ogg │ │ ├── locktoggle.ogg │ │ ├── medevac_extend.ogg │ │ ├── ping.ogg │ │ ├── reagent_dispense.ogg │ │ ├── shutter.ogg │ │ ├── shuttle_still_flight.ogg │ │ ├── signal.ogg │ │ ├── sound_machines_FireAlarm1.ogg │ │ ├── sound_machines_FireAlarm2.ogg │ │ ├── sound_machines_FireAlarm3.ogg │ │ ├── sound_machines_FireAlarm4.ogg │ │ ├── switch.ogg │ │ ├── synth/ │ │ │ ├── synth_no.ogg │ │ │ └── synth_yes.ogg │ │ ├── terminal_button01.ogg │ │ ├── terminal_button02.ogg │ │ ├── terminal_button03.ogg │ │ ├── terminal_button04.ogg │ │ ├── terminal_button05.ogg │ │ ├── terminal_button06.ogg │ │ ├── terminal_button07.ogg │ │ ├── terminal_button08.ogg │ │ ├── terminal_insert_disc.ogg │ │ ├── terminal_off.ogg │ │ ├── terminal_on.ogg │ │ ├── terminal_prompt.ogg │ │ ├── terminal_prompt_confirm.ogg │ │ ├── terminal_prompt_deny.ogg │ │ ├── triple_beep.ogg │ │ ├── two_tones_beep.ogg │ │ ├── twobeep.ogg │ │ ├── vending_cans.ogg │ │ ├── vending_coffee.ogg │ │ ├── vending_drop.ogg │ │ ├── warning-buzzer.ogg │ │ └── windowdoor.ogg │ ├── magic/ │ │ ├── castsummon.ogg │ │ ├── end_of_psy_drain.ogg │ │ ├── invoke_general.ogg │ │ ├── lightning_chargeup.ogg │ │ ├── lightningbolt.ogg │ │ ├── lightningshock.ogg │ │ ├── nightfall.ogg │ │ └── timeparadox2.ogg │ ├── mecha/ │ │ ├── brass_skewer.ogg │ │ ├── critdestr.ogg │ │ ├── heavylightswitch.ogg │ │ ├── hydraulic.ogg │ │ ├── imag_enh.ogg │ │ ├── internaldmgalarm.ogg │ │ ├── lowpower.ogg │ │ ├── mag_bullet_insert.ogg │ │ ├── mechambience.ogg │ │ ├── mechanical_toggle.ogg │ │ ├── mechmove01.ogg │ │ ├── mechmove03.ogg │ │ ├── mechmove04.ogg │ │ ├── mechstep.ogg │ │ ├── mechturn.ogg │ │ ├── nominal.ogg │ │ ├── overboost_chargeup.ogg │ │ ├── overload_loop.ogg │ │ ├── overload_start.ogg │ │ ├── overload_stop.ogg │ │ ├── powerloader_attack.ogg │ │ ├── powerloader_buckle.ogg │ │ ├── powerloader_step.ogg │ │ ├── powerloader_step2.ogg │ │ ├── powerloader_turn.ogg │ │ ├── powerloader_turn2.ogg │ │ ├── powerloader_unbuckle.ogg │ │ ├── powerup.ogg │ │ ├── skyfall_power_up.ogg │ │ ├── weapdestr.ogg │ │ └── weapons/ │ │ ├── laser_sword.ogg │ │ ├── mech_flamer.ogg │ │ ├── mech_heavy_cannon.ogg │ │ ├── mech_laser_heavy.ogg │ │ ├── mech_laser_light.ogg │ │ ├── mech_light_cannon.ogg │ │ ├── mech_lmg.ogg │ │ ├── mech_minigun.ogg │ │ ├── mech_minigun_start.ogg │ │ ├── mech_pistol.ogg │ │ ├── mech_rifle.ogg │ │ ├── mech_rpg.ogg │ │ ├── mech_shotgun.ogg │ │ ├── mech_smg.ogg │ │ └── mech_sniper.ogg │ ├── misc/ │ │ ├── Game_Over_Man.ogg │ │ ├── Rerun.ogg │ │ ├── adm_announce.ogg │ │ ├── airraid.ogg │ │ ├── apcdestroyed.ogg │ │ ├── asses_kicked.ogg │ │ ├── attribution.txt │ │ ├── bangindonk.ogg │ │ ├── bloop.ogg │ │ ├── burp_long.ogg │ │ ├── burp_short.ogg │ │ ├── clap.ogg │ │ ├── distressbeacon_Sunshine.ogg │ │ ├── ds_signalled_alarm.ogg │ │ ├── eventhorizon_shiplog.ogg │ │ ├── fart_long.ogg │ │ ├── fart_short.ogg │ │ ├── fingersnap.ogg │ │ ├── golfclap.ogg │ │ ├── gone_to_plaid.ogg │ │ ├── good_is_dumb.ogg │ │ ├── hardon.ogg │ │ ├── hell_march.ogg │ │ ├── interference.ogg │ │ ├── notice1.ogg │ │ ├── notice2.ogg │ │ ├── notice3.ogg │ │ ├── null.ogg │ │ ├── nymphchirp.ogg │ │ ├── outstanding_marines.ogg │ │ ├── queen_alarm.ogg │ │ ├── robotic scream.ogg │ │ ├── sadtrombone.ogg │ │ ├── salute.ogg │ │ ├── slip.ogg │ │ └── surrounded_by_assholes.ogg │ ├── music/ │ │ └── elevator/ │ │ └── robocop-short.ogg │ ├── runtime/ │ │ ├── README.md │ │ ├── drone/ │ │ │ ├── drone1.ogg │ │ │ ├── drone10.ogg │ │ │ ├── drone11.ogg │ │ │ ├── drone12.ogg │ │ │ ├── drone2.ogg │ │ │ ├── drone3.ogg │ │ │ ├── drone4.ogg │ │ │ ├── drone5.ogg │ │ │ ├── drone6.ogg │ │ │ ├── drone7.ogg │ │ │ ├── drone8.ogg │ │ │ └── drone9.ogg │ │ └── instruments/ │ │ ├── accordion/ │ │ │ ├── Ab2.mid │ │ │ ├── Ab3.mid │ │ │ ├── Ab4.mid │ │ │ ├── Ab5.mid │ │ │ ├── Ab6.mid │ │ │ ├── An2.mid │ │ │ ├── An3.mid │ │ │ ├── An4.mid │ │ │ ├── An5.mid │ │ │ ├── An6.mid │ │ │ ├── Bb2.mid │ │ │ ├── Bb3.mid │ │ │ ├── Bb4.mid │ │ │ ├── Bb5.mid │ │ │ ├── Bb6.mid │ │ │ ├── Bn2.mid │ │ │ ├── Bn3.mid │ │ │ ├── Bn4.mid │ │ │ ├── Bn5.mid │ │ │ ├── Bn6.mid │ │ │ ├── Cn2.mid │ │ │ ├── Cn3.mid │ │ │ ├── Cn4.mid │ │ │ ├── Cn5.mid │ │ │ ├── Cn6.mid │ │ │ ├── Db2.mid │ │ │ ├── Db3.mid │ │ │ ├── Db4.mid │ │ │ ├── Db5.mid │ │ │ ├── Db6.mid │ │ │ ├── Dn2.mid │ │ │ ├── Dn3.mid │ │ │ ├── Dn4.mid │ │ │ ├── Dn5.mid │ │ │ ├── Dn6.mid │ │ │ ├── Eb2.mid │ │ │ ├── Eb3.mid │ │ │ ├── Eb4.mid │ │ │ ├── Eb5.mid │ │ │ ├── Eb6.mid │ │ │ ├── En2.mid │ │ │ ├── En3.mid │ │ │ ├── En4.mid │ │ │ ├── En5.mid │ │ │ ├── En6.mid │ │ │ ├── Fn2.mid │ │ │ ├── Fn3.mid │ │ │ ├── Fn4.mid │ │ │ ├── Fn5.mid │ │ │ ├── Fn6.mid │ │ │ ├── Gb2.mid │ │ │ ├── Gb3.mid │ │ │ ├── Gb4.mid │ │ │ ├── Gb5.mid │ │ │ ├── Gb6.mid │ │ │ ├── Gn2.mid │ │ │ ├── Gn3.mid │ │ │ ├── Gn4.mid │ │ │ ├── Gn5.mid │ │ │ └── Gn6.mid │ │ ├── banjo/ │ │ │ ├── Ab3.ogg │ │ │ ├── Ab4.ogg │ │ │ ├── Ab5.ogg │ │ │ ├── An3.ogg │ │ │ ├── An4.ogg │ │ │ ├── An5.ogg │ │ │ ├── Bb3.ogg │ │ │ ├── Bb4.ogg │ │ │ ├── Bb5.ogg │ │ │ ├── Bn2.ogg │ │ │ ├── Bn3.ogg │ │ │ ├── Bn4.ogg │ │ │ ├── Bn5.ogg │ │ │ ├── Cn3.ogg │ │ │ ├── Cn4.ogg │ │ │ ├── Cn5.ogg │ │ │ ├── Cn6.ogg │ │ │ ├── Db3.ogg │ │ │ ├── Db4.ogg │ │ │ ├── Db5.ogg │ │ │ ├── Db6.ogg │ │ │ ├── Dn3.ogg │ │ │ ├── Dn4.ogg │ │ │ ├── Dn5.ogg │ │ │ ├── Dn6.ogg │ │ │ ├── Eb3.ogg │ │ │ ├── Eb4.ogg │ │ │ ├── Eb5.ogg │ │ │ ├── En3.ogg │ │ │ ├── En4.ogg │ │ │ ├── En5.ogg │ │ │ ├── Fn3.ogg │ │ │ ├── Fn4.ogg │ │ │ ├── Fn5.ogg │ │ │ ├── Gb3.ogg │ │ │ ├── Gb4.ogg │ │ │ ├── Gb5.ogg │ │ │ ├── Gn3.ogg │ │ │ ├── Gn4.ogg │ │ │ └── Gn5.ogg │ │ ├── bikehorn/ │ │ │ ├── Ab2.ogg │ │ │ ├── Ab3.ogg │ │ │ ├── Ab4.ogg │ │ │ ├── An2.ogg │ │ │ ├── An3.ogg │ │ │ ├── An4.ogg │ │ │ ├── Bb2.ogg │ │ │ ├── Bb3.ogg │ │ │ ├── Bb4.ogg │ │ │ ├── Bn2.ogg │ │ │ ├── Bn3.ogg │ │ │ ├── Bn4.ogg │ │ │ ├── Cn3.ogg │ │ │ ├── Cn4.ogg │ │ │ ├── Cn5.ogg │ │ │ ├── Db3.ogg │ │ │ ├── Db4.ogg │ │ │ ├── Db5.ogg │ │ │ ├── Dn3.ogg │ │ │ ├── Dn4.ogg │ │ │ ├── Dn5.ogg │ │ │ ├── Eb3.ogg │ │ │ ├── Eb4.ogg │ │ │ ├── Eb5.ogg │ │ │ ├── En2.ogg │ │ │ ├── En3.ogg │ │ │ ├── En4.ogg │ │ │ ├── Fn2.ogg │ │ │ ├── Fn3.ogg │ │ │ ├── Fn4.ogg │ │ │ ├── Gb2.ogg │ │ │ ├── Gb3.ogg │ │ │ ├── Gb4.ogg │ │ │ ├── Gn2.ogg │ │ │ ├── Gn3.ogg │ │ │ └── Gn4.ogg │ │ ├── eguitar/ │ │ │ ├── ab4.ogg │ │ │ ├── ab5.ogg │ │
Showing preview only (738K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7928 symbols across 263 files)
FILE: SQL/tgmc-schema.sql
type `admin` (line 15) | CREATE TABLE IF NOT EXISTS `admin` (
type `admin_log` (line 23) | CREATE TABLE IF NOT EXISTS `admin_log` (
type `admin_ranks` (line 37) | CREATE TABLE IF NOT EXISTS `admin_ranks` (
type `ban` (line 47) | CREATE TABLE IF NOT EXISTS `ban` (
type `connection_log` (line 79) | CREATE TABLE IF NOT EXISTS `connection_log` (
type `death` (line 93) | CREATE TABLE IF NOT EXISTS `death` (
type `feedback` (line 124) | CREATE TABLE IF NOT EXISTS `feedback` (
type `messages` (line 137) | CREATE TABLE IF NOT EXISTS `messages` (
type `player` (line 164) | CREATE TABLE IF NOT EXISTS `player` (
type `poll_option` (line 183) | CREATE TABLE IF NOT EXISTS `poll_option` (
type `poll_question` (line 200) | CREATE TABLE IF NOT EXISTS `poll_question` (
type `poll_textreply` (line 223) | CREATE TABLE IF NOT EXISTS `poll_textreply` (
type `poll_vote` (line 238) | CREATE TABLE IF NOT EXISTS `poll_vote` (
type `role_time` (line 255) | CREATE TABLE IF NOT EXISTS `role_time` (
type `role_time_log` (line 264) | CREATE TABLE IF NOT EXISTS `role_time_log` (
type `round` (line 278) | CREATE TABLE IF NOT EXISTS `round` (
type `schema_revision` (line 296) | CREATE TABLE IF NOT EXISTS `schema_revision` (
type `stickyban` (line 305) | CREATE TABLE IF NOT EXISTS `stickyban` (
type `stickyban_matched_ckey` (line 317) | CREATE TABLE `stickyban_matched_ckey` (
type `stickyban_matched_ip` (line 330) | CREATE TABLE `stickyban_matched_ip` (
type `stickyban_matched_cid` (line 342) | CREATE TABLE `stickyban_matched_cid` (
type `discord_links` (line 377) | CREATE TABLE `discord_links` (
type `tutorial_completions` (line 388) | CREATE TABLE `tutorial_completions` (
FILE: html/IRV/jquery-ui.custom-core-widgit-mouse-sortable-min.js
function t (line 6) | function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n...
function i (line 6) | function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack(...
function s (line 6) | function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"pa...
function r (line 6) | function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-st...
function i (line 6) | function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}
function i (line 6) | function i(){r.push(this)}
function i (line 7) | function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}
FILE: html/browser/search.js
function selectTextField (line 1) | function selectTextField(){
function updateSearch (line 6) | function updateSearch(){
FILE: html/statbrowser.js
function run_after_focus (line 42) | function run_after_focus(callback) {
function createStatusTab (line 46) | function createStatusTab(name) {
function removeStatusTab (line 76) | function removeStatusTab(name) {
function sortVerbs (line 89) | function sortVerbs() {
function addPermanentTab (line 102) | function addPermanentTab(name) {
function removePermanentTab (line 109) | function removePermanentTab(name) {
function checkStatusTab (line 118) | function checkStatusTab() {
function remove_verb (line 126) | function remove_verb(v) {
function check_verbs (line 136) | function check_verbs() {
function verbs_cat_check (line 142) | function verbs_cat_check(cat) {
function findVerbindex (line 182) | function findVerbindex(name, verblist) {
function wipe_verbs (line 189) | function wipe_verbs() {
function update_verbs (line 195) | function update_verbs() {
function SendTabsToByond (line 200) | function SendTabsToByond() {
function SendTabToByond (line 208) | function SendTabToByond(tab) {
function TakeTabFromByond (line 213) | function TakeTabFromByond(tab) {
function spell_cat_check (line 217) | function spell_cat_check(cat) {
function tab_change (line 232) | function tab_change(tab) {
function set_byond_tab (line 267) | function set_byond_tab(tab) {
function draw_debug (line 271) | function draw_debug() {
function draw_status (line 343) | function draw_status() {
function draw_mc (line 364) | function draw_mc() {
function remove_tickets (line 388) | function remove_tickets() {
function remove_sdql2 (line 398) | function remove_sdql2() {
function remove_interviews (line 408) | function remove_interviews() {
function iconError (line 415) | function iconError(e) {
function draw_listedturf (line 433) | function draw_listedturf() {
function remove_listedturf (line 493) | function remove_listedturf() {
function remove_mc (line 501) | function remove_mc() {
function draw_sdql2 (line 508) | function draw_sdql2() {
function draw_tickets (line 532) | function draw_tickets() {
function draw_interviews (line 564) | function draw_interviews() {
function draw_spells (line 614) | function draw_spells(cat) {
function make_verb_onclick (line 639) | function make_verb_onclick(command) {
function draw_verbs (line 647) | function draw_verbs(cat) {
function set_theme (line 705) | function set_theme(which) {
function set_font_size (line 717) | function set_font_size(size) {
function set_tabs_style (line 721) | function set_tabs_style(style) {
function set_style_sheet (line 734) | function set_style_sheet(sheet) {
function restoreFocus (line 749) | function restoreFocus() {
function getCookie (line 757) | function getCookie(cname) {
function add_verb_list (line 770) | function add_verb_list(payload) {
function init_spells (line 800) | function init_spells() {
FILE: tgui/.yarn/releases/yarn-4.9.1.cjs
function wc (line 4) | function wc(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}
function d7e (line 4) | function d7e(t){return wc("EBUSY",t)}
function m7e (line 4) | function m7e(t,e){return wc("ENOSYS",`${t}, ${e}`)}
function y7e (line 4) | function y7e(t){return wc("EINVAL",`invalid argument, ${t}`)}
function Uo (line 4) | function Uo(t){return wc("EBADF",`bad file descriptor, ${t}`)}
function E7e (line 4) | function E7e(t){return wc("ENOENT",`no such file or directory, ${t}`)}
function I7e (line 4) | function I7e(t){return wc("ENOTDIR",`not a directory, ${t}`)}
function C7e (line 4) | function C7e(t){return wc("EISDIR",`illegal operation on a directory, ${...
function w7e (line 4) | function w7e(t){return wc("EEXIST",`file already exists, ${t}`)}
function B7e (line 4) | function B7e(t){return wc("EROFS",`read-only filesystem, ${t}`)}
function v7e (line 4) | function v7e(t){return wc("ENOTEMPTY",`directory not empty, ${t}`)}
function S7e (line 4) | function S7e(t){return wc("EOPNOTSUPP",`operation not supported, ${t}`)}
function b_ (line 4) | function b_(){return wc("ERR_DIR_CLOSED","Directory handle was closed")}
function k$ (line 4) | function k$(){return new nE}
function D7e (line 4) | function D7e(){return fx(k$())}
function fx (line 4) | function fx(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r...
function b7e (line 4) | function b7e(t){let e=new iE;for(let r in t)if(Object.hasOwn(t,r)){let s...
function Q_ (line 4) | function Q_(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs...
method constructor (line 4) | constructor(){this.name="";this.path="";this.mode=0}
method isBlockDevice (line 4) | isBlockDevice(){return!1}
method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
method isDirectory (line 4) | isDirectory(){return(this.mode&61440)===16384}
method isFIFO (line 4) | isFIFO(){return!1}
method isFile (line 4) | isFile(){return(this.mode&61440)===32768}
method isSocket (line 4) | isSocket(){return!1}
method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&61440)===40960}
method constructor (line 4) | constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atim...
method isBlockDevice (line 4) | isBlockDevice(){return!1}
method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
method isDirectory (line 4) | isDirectory(){return(this.mode&61440)===16384}
method isFIFO (line 4) | isFIFO(){return!1}
method isFile (line 4) | isFile(){return(this.mode&61440)===32768}
method isSocket (line 4) | isSocket(){return!1}
method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&61440)===40960}
method constructor (line 4) | constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);...
method isBlockDevice (line 4) | isBlockDevice(){return!1}
method isCharacterDevice (line 4) | isCharacterDevice(){return!1}
method isDirectory (line 4) | isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}
method isFIFO (line 4) | isFIFO(){return!1}
method isFile (line 4) | isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}
method isSocket (line 4) | isSocket(){return!1}
method isSymbolicLink (line 4) | isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}
function T7e (line 4) | function T7e(t){let e,r;if(e=t.match(k7e))t=e[1];else if(r=t.match(Q7e))...
function R7e (line 4) | function R7e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(P7e))?t=...
function Ax (line 4) | function Ax(t,e){return t===ue?T$(e):R_(e)}
function px (line 4) | async function px(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.i...
function R$ (line 4) | async function R$(t,e,r,s,a){let n=t.pathUtils.normalize(e),c=r.pathUtil...
function F_ (line 4) | async function F_(t,e,r,s,a,n,c){let f=c.didParentExist?await F$(r,s):nu...
function F$ (line 4) | async function F$(t,e){try{return await t.lstatPromise(e)}catch{return n...
function N7e (line 4) | async function N7e(t,e,r,s,a,n,c,f,p){if(a!==null&&!a.isDirectory())if(p...
function O7e (line 4) | async function O7e(t,e,r,s,a,n,c,f,p,h){let E=await n.checksumFilePromis...
function L7e (line 4) | async function L7e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(...
function M7e (line 4) | async function M7e(t,e,r,s,a,n,c,f,p){return p.linkStrategy?.type==="Har...
function _7e (line 4) | async function _7e(t,e,r,s,a,n,c,f,p){if(a!==null)if(p.overwrite)t.push(...
function hx (line 4) | function hx(t,e,r,s){let a=()=>{let n=r.shift();if(typeof n>"u")return n...
method constructor (line 4) | constructor(e,r,s={}){this.path=e;this.nextDirent=r;this.opts=s;this.clo...
method throwIfClosed (line 4) | throwIfClosed(){if(this.closed)throw b_()}
method [Symbol.asyncIterator] (line 4) | async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==nu...
method read (line 4) | read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.reso...
method readSync (line 4) | readSync(){return this.throwIfClosed(),this.nextDirent()}
method close (line 4) | close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}
method closeSync (line 4) | closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}
function O$ (line 4) | function O$(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: e...
method constructor (line 4) | constructor(r,s,{bigint:a=!1}={}){super();this.status="ready";this.chang...
method create (line 4) | static create(r,s,a){let n=new t(r,s,a);return n.start(),n}
method start (line 4) | start(){O$(this.status,"ready"),this.status="running",this.startTimeout=...
method stop (line 4) | stop(){O$(this.status,"running"),this.status="stopped",this.startTimeout...
method stat (line 4) | stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}c...
method makeInterval (line 4) | makeInterval(r){let s=setInterval(()=>{let a=this.stat(),n=this.lastStat...
method registerChangeListener (line 4) | registerChangeListener(r,s){this.addListener("change",r),this.changeList...
method unregisterChangeListener (line 4) | unregisterChangeListener(r){this.removeListener("change",r);let s=this.c...
method unregisterAllChangeListeners (line 4) | unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())...
method hasChangeListeners (line 4) | hasChangeListeners(){return this.changeListeners.size>0}
method ref (line 4) | ref(){for(let r of this.changeListeners.values())r.ref();return this}
method unref (line 4) | unref(){for(let r of this.changeListeners.values())r.unref();return this}
function sE (line 4) | function sE(t,e,r,s){let a,n,c,f;switch(typeof r){case"function":a=!1,n=...
function yd (line 4) | function yd(t,e,r){let s=dx.get(t);if(typeof s>"u")return;let a=s.get(e)...
function Ed (line 4) | function Ed(t){let e=dx.get(t);if(!(typeof e>"u"))for(let r of e.keys())...
function U7e (line 4) | function U7e(t){let e=t.match(/\r?\n/g);if(e===null)return U$.EOL;let r=...
function Id (line 7) | function Id(t,e){return e.replace(/\r?\n/g,U7e(t))}
method constructor (line 7) | constructor(e){this.pathUtils=e}
method genTraversePromise (line 7) | async*genTraversePromise(e,{stableSort:r=!1}={}){let s=[e];for(;s.length...
method checksumFilePromise (line 7) | async checksumFilePromise(e,{algorithm:r="sha512"}={}){let s=await this....
method removePromise (line 7) | async removePromise(e,{recursive:r=!0,maxRetries:s=5}={}){let a;try{a=aw...
method removeSync (line 7) | removeSync(e,{recursive:r=!0}={}){let s;try{s=this.lstatSync(e)}catch(a)...
method mkdirpPromise (line 7) | async mkdirpPromise(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===th...
method mkdirpSync (line 7) | mkdirpSync(e,{chmod:r,utimes:s}={}){if(e=this.resolve(e),e===this.pathUt...
method copyPromise (line 7) | async copyPromise(e,r,{baseFs:s=this,overwrite:a=!0,stableSort:n=!1,stab...
method copySync (line 7) | copySync(e,r,{baseFs:s=this,overwrite:a=!0}={}){let n=s.lstatSync(r),c=t...
method changeFilePromise (line 7) | async changeFilePromise(e,r,s={}){return Buffer.isBuffer(r)?this.changeF...
method changeFileBufferPromise (line 7) | async changeFileBufferPromise(e,r,{mode:s}={}){let a=Buffer.alloc(0);try...
method changeFileTextPromise (line 7) | async changeFileTextPromise(e,r,{automaticNewlines:s,mode:a}={}){let n="...
method changeFileSync (line 7) | changeFileSync(e,r,s={}){return Buffer.isBuffer(r)?this.changeFileBuffer...
method changeFileBufferSync (line 7) | changeFileBufferSync(e,r,{mode:s}={}){let a=Buffer.alloc(0);try{a=this.r...
method changeFileTextSync (line 7) | changeFileTextSync(e,r,{automaticNewlines:s=!1,mode:a}={}){let n="";try{...
method movePromise (line 7) | async movePromise(e,r){try{await this.renamePromise(e,r)}catch(s){if(s.c...
method moveSync (line 7) | moveSync(e,r){try{this.renameSync(e,r)}catch(s){if(s.code==="EXDEV")this...
method lockPromise (line 7) | async lockPromise(e,r){let s=`${e}.flock`,a=1e3/60,n=Date.now(),c=null,f...
method readJsonPromise (line 7) | async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{...
method readJsonSync (line 7) | readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(...
method writeJsonPromise (line 7) | async writeJsonPromise(e,r,{compact:s=!1}={}){let a=s?0:2;return await t...
method writeJsonSync (line 8) | writeJsonSync(e,r,{compact:s=!1}={}){let a=s?0:2;return this.writeFileSy...
method preserveTimePromise (line 9) | async preserveTimePromise(e,r){let s=await this.lstatPromise(e),a=await ...
method preserveTimeSync (line 9) | async preserveTimeSync(e,r){let s=this.lstatSync(e),a=r();typeof a<"u"&&...
method constructor (line 9) | constructor(){super(K)}
method getExtractHint (line 9) | getExtractHint(e){return this.baseFs.getExtractHint(e)}
method resolve (line 9) | resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}
method getRealPath (line 9) | getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}
method openPromise (line 9) | async openPromise(e,r,s){return this.baseFs.openPromise(this.mapToBase(e...
method openSync (line 9) | openSync(e,r,s){return this.baseFs.openSync(this.mapToBase(e),r,s)}
method opendirPromise (line 9) | async opendirPromise(e,r){return Object.assign(await this.baseFs.opendir...
method opendirSync (line 9) | opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapTo...
method readPromise (line 9) | async readPromise(e,r,s,a,n){return await this.baseFs.readPromise(e,r,s,...
method readSync (line 9) | readSync(e,r,s,a,n){return this.baseFs.readSync(e,r,s,a,n)}
method writePromise (line 9) | async writePromise(e,r,s,a,n){return typeof r=="string"?await this.baseF...
method writeSync (line 9) | writeSync(e,r,s,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r...
method closePromise (line 9) | async closePromise(e){return this.baseFs.closePromise(e)}
method closeSync (line 9) | closeSync(e){this.baseFs.closeSync(e)}
method createReadStream (line 9) | createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this....
method createWriteStream (line 9) | createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?thi...
method realpathPromise (line 9) | async realpathPromise(e){return this.mapFromBase(await this.baseFs.realp...
method realpathSync (line 9) | realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.ma...
method existsPromise (line 9) | async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}
method existsSync (line 9) | existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}
method accessSync (line 9) | accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}
method accessPromise (line 9) | async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase...
method statPromise (line 9) | async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}
method statSync (line 9) | statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}
method fstatPromise (line 9) | async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}
method fstatSync (line 9) | fstatSync(e,r){return this.baseFs.fstatSync(e,r)}
method lstatPromise (line 9) | lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}
method lstatSync (line 9) | lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}
method fchmodPromise (line 9) | async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}
method fchmodSync (line 9) | fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}
method chmodPromise (line 9) | async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e...
method chmodSync (line 9) | chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}
method fchownPromise (line 9) | async fchownPromise(e,r,s){return this.baseFs.fchownPromise(e,r,s)}
method fchownSync (line 9) | fchownSync(e,r,s){return this.baseFs.fchownSync(e,r,s)}
method chownPromise (line 9) | async chownPromise(e,r,s){return this.baseFs.chownPromise(this.mapToBase...
method chownSync (line 9) | chownSync(e,r,s){return this.baseFs.chownSync(this.mapToBase(e),r,s)}
method renamePromise (line 9) | async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase...
method renameSync (line 9) | renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.map...
method copyFilePromise (line 9) | async copyFilePromise(e,r,s=0){return this.baseFs.copyFilePromise(this.m...
method copyFileSync (line 9) | copyFileSync(e,r,s=0){return this.baseFs.copyFileSync(this.mapToBase(e),...
method appendFilePromise (line 9) | async appendFilePromise(e,r,s){return this.baseFs.appendFilePromise(this...
method appendFileSync (line 9) | appendFileSync(e,r,s){return this.baseFs.appendFileSync(this.fsMapToBase...
method writeFilePromise (line 9) | async writeFilePromise(e,r,s){return this.baseFs.writeFilePromise(this.f...
method writeFileSync (line 9) | writeFileSync(e,r,s){return this.baseFs.writeFileSync(this.fsMapToBase(e...
method unlinkPromise (line 9) | async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}
method unlinkSync (line 9) | unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}
method utimesPromise (line 9) | async utimesPromise(e,r,s){return this.baseFs.utimesPromise(this.mapToBa...
method utimesSync (line 9) | utimesSync(e,r,s){return this.baseFs.utimesSync(this.mapToBase(e),r,s)}
method lutimesPromise (line 9) | async lutimesPromise(e,r,s){return this.baseFs.lutimesPromise(this.mapTo...
method lutimesSync (line 9) | lutimesSync(e,r,s){return this.baseFs.lutimesSync(this.mapToBase(e),r,s)}
method mkdirPromise (line 9) | async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e...
method mkdirSync (line 9) | mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}
method rmdirPromise (line 9) | async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e...
method rmdirSync (line 9) | rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}
method rmPromise (line 9) | async rmPromise(e,r){return this.baseFs.rmPromise(this.mapToBase(e),r)}
method rmSync (line 9) | rmSync(e,r){return this.baseFs.rmSync(this.mapToBase(e),r)}
method linkPromise (line 9) | async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),...
method linkSync (line 9) | linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBa...
method symlinkPromise (line 9) | async symlinkPromise(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.is...
method symlinkSync (line 9) | symlinkSync(e,r,s){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(...
method readFilePromise (line 9) | async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMap...
method readFileSync (line 9) | readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}
method readdirPromise (line 9) | readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}
method readdirSync (line 9) | readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}
method readlinkPromise (line 9) | async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readl...
method readlinkSync (line 9) | readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.ma...
method truncatePromise (line 9) | async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapTo...
method truncateSync (line 9) | truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}
method ftruncatePromise (line 9) | async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}
method ftruncateSync (line 9) | ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}
method watch (line 9) | watch(e,r,s){return this.baseFs.watch(this.mapToBase(e),r,s)}
method watchFile (line 9) | watchFile(e,r,s){return this.baseFs.watchFile(this.mapToBase(e),r,s)}
method unwatchFile (line 9) | unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}
method fsMapToBase (line 9) | fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}
method constructor (line 9) | constructor(e,{baseFs:r,pathUtils:s}){super(s),this.target=e,this.baseFs=r}
method getRealPath (line 9) | getRealPath(){return this.target}
method getBaseFs (line 9) | getBaseFs(){return this.baseFs}
method mapFromBase (line 9) | mapFromBase(e){return e}
method mapToBase (line 9) | mapToBase(e){return e}
function j$ (line 9) | function j$(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPort...
method constructor (line 9) | constructor(e=q$.default){super(),this.realFs=e}
method getExtractHint (line 9) | getExtractHint(){return!1}
method getRealPath (line 9) | getRealPath(){return vt.root}
method resolve (line 9) | resolve(e){return K.resolve(e)}
method openPromise (line 9) | async openPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.op...
method openSync (line 9) | openSync(e,r,s){return this.realFs.openSync(ue.fromPortablePath(e),r,s)}
method opendirPromise (line 9) | async opendirPromise(e,r){return await new Promise((s,a)=>{typeof r<"u"?...
method opendirSync (line 9) | opendirSync(e,r){let a=typeof r<"u"?this.realFs.opendirSync(ue.fromPorta...
method readPromise (line 9) | async readPromise(e,r,s=0,a=0,n=-1){return await new Promise((c,f)=>{thi...
method readSync (line 9) | readSync(e,r,s,a,n){return this.realFs.readSync(e,r,s,a,n)}
method writePromise (line 9) | async writePromise(e,r,s,a,n){return await new Promise((c,f)=>typeof r==...
method writeSync (line 9) | writeSync(e,r,s,a,n){return typeof r=="string"?this.realFs.writeSync(e,r...
method closePromise (line 9) | async closePromise(e){await new Promise((r,s)=>{this.realFs.close(e,this...
method closeSync (line 9) | closeSync(e){this.realFs.closeSync(e)}
method createReadStream (line 9) | createReadStream(e,r){let s=e!==null?ue.fromPortablePath(e):e;return thi...
method createWriteStream (line 9) | createWriteStream(e,r){let s=e!==null?ue.fromPortablePath(e):e;return th...
method realpathPromise (line 9) | async realpathPromise(e){return await new Promise((r,s)=>{this.realFs.re...
method realpathSync (line 9) | realpathSync(e){return ue.toPortablePath(this.realFs.realpathSync(ue.fro...
method existsPromise (line 9) | async existsPromise(e){return await new Promise(r=>{this.realFs.exists(u...
method accessSync (line 9) | accessSync(e,r){return this.realFs.accessSync(ue.fromPortablePath(e),r)}
method accessPromise (line 9) | async accessPromise(e,r){return await new Promise((s,a)=>{this.realFs.ac...
method existsSync (line 9) | existsSync(e){return this.realFs.existsSync(ue.fromPortablePath(e))}
method statPromise (line 9) | async statPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.st...
method statSync (line 9) | statSync(e,r){return r?this.realFs.statSync(ue.fromPortablePath(e),r):th...
method fstatPromise (line 9) | async fstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.f...
method fstatSync (line 9) | fstatSync(e,r){return r?this.realFs.fstatSync(e,r):this.realFs.fstatSync...
method lstatPromise (line 9) | async lstatPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.l...
method lstatSync (line 9) | lstatSync(e,r){return r?this.realFs.lstatSync(ue.fromPortablePath(e),r):...
method fchmodPromise (line 9) | async fchmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.fc...
method fchmodSync (line 9) | fchmodSync(e,r){return this.realFs.fchmodSync(e,r)}
method chmodPromise (line 9) | async chmodPromise(e,r){return await new Promise((s,a)=>{this.realFs.chm...
method chmodSync (line 9) | chmodSync(e,r){return this.realFs.chmodSync(ue.fromPortablePath(e),r)}
method fchownPromise (line 9) | async fchownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs....
method fchownSync (line 9) | fchownSync(e,r,s){return this.realFs.fchownSync(e,r,s)}
method chownPromise (line 9) | async chownPromise(e,r,s){return await new Promise((a,n)=>{this.realFs.c...
method chownSync (line 9) | chownSync(e,r,s){return this.realFs.chownSync(ue.fromPortablePath(e),r,s)}
method renamePromise (line 9) | async renamePromise(e,r){return await new Promise((s,a)=>{this.realFs.re...
method renameSync (line 9) | renameSync(e,r){return this.realFs.renameSync(ue.fromPortablePath(e),ue....
method copyFilePromise (line 9) | async copyFilePromise(e,r,s=0){return await new Promise((a,n)=>{this.rea...
method copyFileSync (line 9) | copyFileSync(e,r,s=0){return this.realFs.copyFileSync(ue.fromPortablePat...
method appendFilePromise (line 9) | async appendFilePromise(e,r,s){return await new Promise((a,n)=>{let c=ty...
method appendFileSync (line 9) | appendFileSync(e,r,s){let a=typeof e=="string"?ue.fromPortablePath(e):e;...
method writeFilePromise (line 9) | async writeFilePromise(e,r,s){return await new Promise((a,n)=>{let c=typ...
method writeFileSync (line 9) | writeFileSync(e,r,s){let a=typeof e=="string"?ue.fromPortablePath(e):e;s...
method unlinkPromise (line 9) | async unlinkPromise(e){return await new Promise((r,s)=>{this.realFs.unli...
method unlinkSync (line 9) | unlinkSync(e){return this.realFs.unlinkSync(ue.fromPortablePath(e))}
method utimesPromise (line 9) | async utimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs....
method utimesSync (line 9) | utimesSync(e,r,s){this.realFs.utimesSync(ue.fromPortablePath(e),r,s)}
method lutimesPromise (line 9) | async lutimesPromise(e,r,s){return await new Promise((a,n)=>{this.realFs...
method lutimesSync (line 9) | lutimesSync(e,r,s){this.realFs.lutimesSync(ue.fromPortablePath(e),r,s)}
method mkdirPromise (line 9) | async mkdirPromise(e,r){return await new Promise((s,a)=>{this.realFs.mkd...
method mkdirSync (line 9) | mkdirSync(e,r){return this.realFs.mkdirSync(ue.fromPortablePath(e),r)}
method rmdirPromise (line 9) | async rmdirPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.r...
method rmdirSync (line 9) | rmdirSync(e,r){return this.realFs.rmdirSync(ue.fromPortablePath(e),r)}
method rmPromise (line 9) | async rmPromise(e,r){return await new Promise((s,a)=>{r?this.realFs.rm(u...
method rmSync (line 9) | rmSync(e,r){return this.realFs.rmSync(ue.fromPortablePath(e),r)}
method linkPromise (line 9) | async linkPromise(e,r){return await new Promise((s,a)=>{this.realFs.link...
method linkSync (line 9) | linkSync(e,r){return this.realFs.linkSync(ue.fromPortablePath(e),ue.from...
method symlinkPromise (line 9) | async symlinkPromise(e,r,s){return await new Promise((a,n)=>{this.realFs...
method symlinkSync (line 9) | symlinkSync(e,r,s){return this.realFs.symlinkSync(ue.fromPortablePath(e....
method readFilePromise (line 9) | async readFilePromise(e,r){return await new Promise((s,a)=>{let n=typeof...
method readFileSync (line 9) | readFileSync(e,r){let s=typeof e=="string"?ue.fromPortablePath(e):e;retu...
method readdirPromise (line 9) | async readdirPromise(e,r){return await new Promise((s,a)=>{r?r.recursive...
method readdirSync (line 9) | readdirSync(e,r){return r?r.recursive&&process.platform==="win32"?r.with...
method readlinkPromise (line 9) | async readlinkPromise(e){return await new Promise((r,s)=>{this.realFs.re...
method readlinkSync (line 9) | readlinkSync(e){return ue.toPortablePath(this.realFs.readlinkSync(ue.fro...
method truncatePromise (line 9) | async truncatePromise(e,r){return await new Promise((s,a)=>{this.realFs....
method truncateSync (line 9) | truncateSync(e,r){return this.realFs.truncateSync(ue.fromPortablePath(e)...
method ftruncatePromise (line 9) | async ftruncatePromise(e,r){return await new Promise((s,a)=>{this.realFs...
method ftruncateSync (line 9) | ftruncateSync(e,r){return this.realFs.ftruncateSync(e,r)}
method watch (line 9) | watch(e,r,s){return this.realFs.watch(ue.fromPortablePath(e),r,s)}
method watchFile (line 9) | watchFile(e,r,s){return this.realFs.watchFile(ue.fromPortablePath(e),r,s)}
method unwatchFile (line 9) | unwatchFile(e,r){return this.realFs.unwatchFile(ue.fromPortablePath(e),r)}
method makeCallback (line 9) | makeCallback(e,r){return(s,a)=>{s?r(s):e(a)}}
method constructor (line 9) | constructor(e,{baseFs:r=new Yn}={}){super(K),this.target=this.pathUtils....
method getRealPath (line 9) | getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),th...
method resolve (line 9) | resolve(e){return this.pathUtils.isAbsolute(e)?K.normalize(e):this.baseF...
method mapFromBase (line 9) | mapFromBase(e){return e}
method mapToBase (line 9) | mapToBase(e){return this.pathUtils.isAbsolute(e)?e:this.pathUtils.join(t...
method constructor (line 9) | constructor(e,{baseFs:r=new Yn}={}){super(K),this.target=this.pathUtils....
method getRealPath (line 9) | getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),th...
method getTarget (line 9) | getTarget(){return this.target}
method getBaseFs (line 9) | getBaseFs(){return this.baseFs}
method mapToBase (line 9) | mapToBase(e){let r=this.pathUtils.normalize(e);if(this.pathUtils.isAbsol...
method mapFromBase (line 9) | mapFromBase(e){return this.pathUtils.resolve(W$,this.pathUtils.relative(...
method constructor (line 9) | constructor(r,s){super(s);this.instance=null;this.factory=r}
method baseFs (line 9) | get baseFs(){return this.instance||(this.instance=this.factory()),this.i...
method baseFs (line 9) | set baseFs(r){this.instance=r}
method mapFromBase (line 9) | mapFromBase(r){return r}
method mapToBase (line 9) | mapToBase(r){return r}
method constructor (line 9) | constructor({baseFs:r=new Yn,filter:s=null,magicByte:a=42,maxOpenFiles:n...
method getExtractHint (line 9) | getExtractHint(r){return this.baseFs.getExtractHint(r)}
method getRealPath (line 9) | getRealPath(){return this.baseFs.getRealPath()}
method saveAndClose (line 9) | saveAndClose(){if(Ed(this),this.mountInstances)for(let[r,{childFs:s}]of ...
method discardAndClose (line 9) | discardAndClose(){if(Ed(this),this.mountInstances)for(let[r,{childFs:s}]...
method resolve (line 9) | resolve(r){return this.baseFs.resolve(r)}
method remapFd (line 9) | remapFd(r,s){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,s...
method openPromise (line 9) | async openPromise(r,s,a){return await this.makeCallPromise(r,async()=>aw...
method openSync (line 9) | openSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,s,...
method opendirPromise (line 9) | async opendirPromise(r,s){return await this.makeCallPromise(r,async()=>a...
method opendirSync (line 9) | opendirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.opendirSync(...
method readPromise (line 9) | async readPromise(r,s,a,n,c){if((r&rl)!==this.magic)return await this.ba...
method readSync (line 9) | readSync(r,s,a,n,c){if((r&rl)!==this.magic)return this.baseFs.readSync(r...
method writePromise (line 9) | async writePromise(r,s,a,n,c){if((r&rl)!==this.magic)return typeof s=="s...
method writeSync (line 9) | writeSync(r,s,a,n,c){if((r&rl)!==this.magic)return typeof s=="string"?th...
method closePromise (line 9) | async closePromise(r){if((r&rl)!==this.magic)return await this.baseFs.cl...
method closeSync (line 9) | closeSync(r){if((r&rl)!==this.magic)return this.baseFs.closeSync(r);let ...
method createReadStream (line 9) | createReadStream(r,s){return r===null?this.baseFs.createReadStream(r,s):...
method createWriteStream (line 9) | createWriteStream(r,s){return r===null?this.baseFs.createWriteStream(r,s...
method realpathPromise (line 9) | async realpathPromise(r){return await this.makeCallPromise(r,async()=>aw...
method realpathSync (line 9) | realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(...
method existsPromise (line 9) | async existsPromise(r){return await this.makeCallPromise(r,async()=>awai...
method existsSync (line 9) | existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(...
method accessPromise (line 9) | async accessPromise(r,s){return await this.makeCallPromise(r,async()=>aw...
method accessSync (line 9) | accessSync(r,s){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,...
method statPromise (line 9) | async statPromise(r,s){return await this.makeCallPromise(r,async()=>awai...
method statSync (line 9) | statSync(r,s){return this.makeCallSync(r,()=>this.baseFs.statSync(r,s),(...
method fstatPromise (line 9) | async fstatPromise(r,s){if((r&rl)!==this.magic)return this.baseFs.fstatP...
method fstatSync (line 9) | fstatSync(r,s){if((r&rl)!==this.magic)return this.baseFs.fstatSync(r,s);...
method lstatPromise (line 9) | async lstatPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
method lstatSync (line 9) | lstatSync(r,s){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,s)...
method fchmodPromise (line 9) | async fchmodPromise(r,s){if((r&rl)!==this.magic)return this.baseFs.fchmo...
method fchmodSync (line 9) | fchmodSync(r,s){if((r&rl)!==this.magic)return this.baseFs.fchmodSync(r,s...
method chmodPromise (line 9) | async chmodPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
method chmodSync (line 9) | chmodSync(r,s){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,s)...
method fchownPromise (line 9) | async fchownPromise(r,s,a){if((r&rl)!==this.magic)return this.baseFs.fch...
method fchownSync (line 9) | fchownSync(r,s,a){if((r&rl)!==this.magic)return this.baseFs.fchownSync(r...
method chownPromise (line 9) | async chownPromise(r,s,a){return await this.makeCallPromise(r,async()=>a...
method chownSync (line 9) | chownSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,...
method renamePromise (line 9) | async renamePromise(r,s){return await this.makeCallPromise(r,async()=>aw...
method renameSync (line 9) | renameSync(r,s){return this.makeCallSync(r,()=>this.makeCallSync(s,()=>t...
method copyFilePromise (line 9) | async copyFilePromise(r,s,a=0){let n=async(c,f,p,h)=>{if(a&Bd.constants....
method copyFileSync (line 9) | copyFileSync(r,s,a=0){let n=(c,f,p,h)=>{if(a&Bd.constants.COPYFILE_FICLO...
method appendFilePromise (line 9) | async appendFilePromise(r,s,a){return await this.makeCallPromise(r,async...
method appendFileSync (line 9) | appendFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.appendF...
method writeFilePromise (line 9) | async writeFilePromise(r,s,a){return await this.makeCallPromise(r,async(...
method writeFileSync (line 9) | writeFileSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.writeFil...
method unlinkPromise (line 9) | async unlinkPromise(r){return await this.makeCallPromise(r,async()=>awai...
method unlinkSync (line 9) | unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(...
method utimesPromise (line 9) | async utimesPromise(r,s,a){return await this.makeCallPromise(r,async()=>...
method utimesSync (line 9) | utimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(...
method lutimesPromise (line 9) | async lutimesPromise(r,s,a){return await this.makeCallPromise(r,async()=...
method lutimesSync (line 9) | lutimesSync(r,s,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSyn...
method mkdirPromise (line 9) | async mkdirPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
method mkdirSync (line 9) | mkdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,s)...
method rmdirPromise (line 9) | async rmdirPromise(r,s){return await this.makeCallPromise(r,async()=>awa...
method rmdirSync (line 9) | rmdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,s)...
method rmPromise (line 9) | async rmPromise(r,s){return await this.makeCallPromise(r,async()=>await ...
method rmSync (line 9) | rmSync(r,s){return this.makeCallSync(r,()=>this.baseFs.rmSync(r,s),(a,{s...
method linkPromise (line 9) | async linkPromise(r,s){return await this.makeCallPromise(s,async()=>awai...
method linkSync (line 9) | linkSync(r,s){return this.makeCallSync(s,()=>this.baseFs.linkSync(r,s),(...
method symlinkPromise (line 9) | async symlinkPromise(r,s,a){return await this.makeCallPromise(s,async()=...
method symlinkSync (line 9) | symlinkSync(r,s,a){return this.makeCallSync(s,()=>this.baseFs.symlinkSyn...
method readFilePromise (line 9) | async readFilePromise(r,s){return this.makeCallPromise(r,async()=>await ...
method readFileSync (line 9) | readFileSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readFileSyn...
method readdirPromise (line 9) | async readdirPromise(r,s){return await this.makeCallPromise(r,async()=>a...
method readdirSync (line 9) | readdirSync(r,s){return this.makeCallSync(r,()=>this.baseFs.readdirSync(...
method readlinkPromise (line 9) | async readlinkPromise(r){return await this.makeCallPromise(r,async()=>aw...
method readlinkSync (line 9) | readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(...
method truncatePromise (line 9) | async truncatePromise(r,s){return await this.makeCallPromise(r,async()=>...
method truncateSync (line 9) | truncateSync(r,s){return this.makeCallSync(r,()=>this.baseFs.truncateSyn...
method ftruncatePromise (line 9) | async ftruncatePromise(r,s){if((r&rl)!==this.magic)return this.baseFs.ft...
method ftruncateSync (line 9) | ftruncateSync(r,s){if((r&rl)!==this.magic)return this.baseFs.ftruncateSy...
method watch (line 9) | watch(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,s,a),(n,...
method watchFile (line 9) | watchFile(r,s,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,...
method unwatchFile (line 9) | unwatchFile(r,s){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(...
method makeCallPromise (line 9) | async makeCallPromise(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="stri...
method makeCallSync (line 9) | makeCallSync(r,s,a,{requireSubpath:n=!0}={}){if(typeof r!="string")retur...
method findMount (line 9) | findMount(r){if(this.filter&&!this.filter.test(r))return null;let s="";f...
method limitOpenFiles (line 9) | limitOpenFiles(r){if(this.mountInstances===null)return;let s=Date.now(),...
method getMountPromise (line 9) | async getMountPromise(r,s){if(this.mountInstances){let a=this.mountInsta...
method getMountSync (line 9) | getMountSync(r,s){if(this.mountInstances){let a=this.mountInstances.get(...
method constructor (line 9) | constructor(){super(K)}
method getExtractHint (line 9) | getExtractHint(){throw er()}
method getRealPath (line 9) | getRealPath(){throw er()}
method resolve (line 9) | resolve(){throw er()}
method openPromise (line 9) | async openPromise(){throw er()}
method openSync (line 9) | openSync(){throw er()}
method opendirPromise (line 9) | async opendirPromise(){throw er()}
method opendirSync (line 9) | opendirSync(){throw er()}
method readPromise (line 9) | async readPromise(){throw er()}
method readSync (line 9) | readSync(){throw er()}
method writePromise (line 9) | async writePromise(){throw er()}
method writeSync (line 9) | writeSync(){throw er()}
method closePromise (line 9) | async closePromise(){throw er()}
method closeSync (line 9) | closeSync(){throw er()}
method createWriteStream (line 9) | createWriteStream(){throw er()}
method createReadStream (line 9) | createReadStream(){throw er()}
method realpathPromise (line 9) | async realpathPromise(){throw er()}
method realpathSync (line 9) | realpathSync(){throw er()}
method readdirPromise (line 9) | async readdirPromise(){throw er()}
method readdirSync (line 9) | readdirSync(){throw er()}
method existsPromise (line 9) | async existsPromise(e){throw er()}
method existsSync (line 9) | existsSync(e){throw er()}
method accessPromise (line 9) | async accessPromise(){throw er()}
method accessSync (line 9) | accessSync(){throw er()}
method statPromise (line 9) | async statPromise(){throw er()}
method statSync (line 9) | statSync(){throw er()}
method fstatPromise (line 9) | async fstatPromise(e){throw er()}
method fstatSync (line 9) | fstatSync(e){throw er()}
method lstatPromise (line 9) | async lstatPromise(e){throw er()}
method lstatSync (line 9) | lstatSync(e){throw er()}
method fchmodPromise (line 9) | async fchmodPromise(){throw er()}
method fchmodSync (line 9) | fchmodSync(){throw er()}
method chmodPromise (line 9) | async chmodPromise(){throw er()}
method chmodSync (line 9) | chmodSync(){throw er()}
method fchownPromise (line 9) | async fchownPromise(){throw er()}
method fchownSync (line 9) | fchownSync(){throw er()}
method chownPromise (line 9) | async chownPromise(){throw er()}
method chownSync (line 9) | chownSync(){throw er()}
method mkdirPromise (line 9) | async mkdirPromise(){throw er()}
method mkdirSync (line 9) | mkdirSync(){throw er()}
method rmdirPromise (line 9) | async rmdirPromise(){throw er()}
method rmdirSync (line 9) | rmdirSync(){throw er()}
method rmPromise (line 9) | async rmPromise(){throw er()}
method rmSync (line 9) | rmSync(){throw er()}
method linkPromise (line 9) | async linkPromise(){throw er()}
method linkSync (line 9) | linkSync(){throw er()}
method symlinkPromise (line 9) | async symlinkPromise(){throw er()}
method symlinkSync (line 9) | symlinkSync(){throw er()}
method renamePromise (line 9) | async renamePromise(){throw er()}
method renameSync (line 9) | renameSync(){throw er()}
method copyFilePromise (line 9) | async copyFilePromise(){throw er()}
method copyFileSync (line 9) | copyFileSync(){throw er()}
method appendFilePromise (line 9) | async appendFilePromise(){throw er()}
method appendFileSync (line 9) | appendFileSync(){throw er()}
method writeFilePromise (line 9) | async writeFilePromise(){throw er()}
method writeFileSync (line 9) | writeFileSync(){throw er()}
method unlinkPromise (line 9) | async unlinkPromise(){throw er()}
method unlinkSync (line 9) | unlinkSync(){throw er()}
method utimesPromise (line 9) | async utimesPromise(){throw er()}
method utimesSync (line 9) | utimesSync(){throw er()}
method lutimesPromise (line 9) | async lutimesPromise(){throw er()}
method lutimesSync (line 9) | lutimesSync(){throw er()}
method readFilePromise (line 9) | async readFilePromise(){throw er()}
method readFileSync (line 9) | readFileSync(){throw er()}
method readlinkPromise (line 9) | async readlinkPromise(){throw er()}
method readlinkSync (line 9) | readlinkSync(){throw er()}
method truncatePromise (line 9) | async truncatePromise(){throw er()}
method truncateSync (line 9) | truncateSync(){throw er()}
method ftruncatePromise (line 9) | async ftruncatePromise(e,r){throw er()}
method ftruncateSync (line 9) | ftruncateSync(e,r){throw er()}
method watch (line 9) | watch(){throw er()}
method watchFile (line 9) | watchFile(){throw er()}
method unwatchFile (line 9) | unwatchFile(){throw er()}
method constructor (line 9) | constructor(e){super(ue),this.baseFs=e}
method mapFromBase (line 9) | mapFromBase(e){return ue.fromPortablePath(e)}
method mapToBase (line 9) | mapToBase(e){return ue.toPortablePath(e)}
method makeVirtualPath (line 9) | static makeVirtualPath(e,r,s){if(K.basename(e)!=="__virtual__")throw new...
method resolveVirtual (line 9) | static resolveVirtual(e){let r=e.match(L_);if(!r||!r[3]&&r[5])return e;l...
method constructor (line 9) | constructor({baseFs:e=new Yn}={}){super(K),this.baseFs=e}
method getExtractHint (line 9) | getExtractHint(e){return this.baseFs.getExtractHint(e)}
method getRealPath (line 9) | getRealPath(){return this.baseFs.getRealPath()}
method realpathSync (line 9) | realpathSync(e){let r=e.match(L_);if(!r)return this.baseFs.realpathSync(...
method realpathPromise (line 9) | async realpathPromise(e){let r=e.match(L_);if(!r)return await this.baseF...
method mapToBase (line 9) | mapToBase(e){if(e==="")return e;if(this.pathUtils.isAbsolute(e))return t...
method mapFromBase (line 9) | mapFromBase(e){return e}
function q7e (line 9) | function q7e(t,e){return typeof M_.default.isUtf8<"u"?M_.default.isUtf8(...
method constructor (line 9) | constructor(e){super(ue),this.baseFs=e}
method mapFromBase (line 9) | mapFromBase(e){return e}
method mapToBase (line 9) | mapToBase(e){if(typeof e=="string")return e;if(e instanceof URL)return(0...
method constructor (line 9) | constructor(e,r){this[iee]=1;this[nee]=void 0;this[ree]=void 0;this[tee]...
method fd (line 9) | get fd(){return this[Cp]}
method appendFile (line 9) | async appendFile(e,r){try{this[Nu](this.appendFile);let s=(typeof r=="st...
method chown (line 9) | async chown(e,r){try{return this[Nu](this.chown),await this[Ho].fchownPr...
method chmod (line 9) | async chmod(e){try{return this[Nu](this.chmod),await this[Ho].fchmodProm...
method createReadStream (line 9) | createReadStream(e){return this[Ho].createReadStream(null,{...e,fd:this....
method createWriteStream (line 9) | createWriteStream(e){return this[Ho].createWriteStream(null,{...e,fd:thi...
method datasync (line 9) | datasync(){throw new Error("Method not implemented.")}
method sync (line 9) | sync(){throw new Error("Method not implemented.")}
method read (line 9) | async read(e,r,s,a){try{this[Nu](this.read);let n;return Buffer.isBuffer...
method readFile (line 9) | async readFile(e){try{this[Nu](this.readFile);let r=(typeof e=="string"?...
method readLines (line 9) | readLines(e){return(0,see.createInterface)({input:this.createReadStream(...
method stat (line 9) | async stat(e){try{return this[Nu](this.stat),await this[Ho].fstatPromise...
method truncate (line 9) | async truncate(e){try{return this[Nu](this.truncate),await this[Ho].ftru...
method utimes (line 9) | utimes(e,r){throw new Error("Method not implemented.")}
method writeFile (line 9) | async writeFile(e,r){try{this[Nu](this.writeFile);let s=(typeof r=="stri...
method write (line 9) | async write(...e){try{if(this[Nu](this.write),ArrayBuffer.isView(e[0])){...
method writev (line 9) | async writev(e,r){try{this[Nu](this.writev);let s=0;if(typeof r<"u")for(...
method readv (line 9) | readv(e,r){throw new Error("Method not implemented.")}
method close (line 9) | close(){if(this[Cp]===-1)return Promise.resolve();if(this[s0])return thi...
method [(Ho,Cp,iee=aE,nee=s0,ree=Ex,tee=Ix,Nu)] (line 9) | [(Ho,Cp,iee=aE,nee=s0,ree=Ex,tee=Ix,Nu)](e){if(this[Cp]===-1){let r=new ...
method [Ou] (line 9) | [Ou](){if(this[aE]--,this[aE]===0){let e=this[Cp];this[Cp]=-1,this[Ho].c...
function j2 (line 9) | function j2(t,e){e=new yx(e);let r=(s,a,n)=>{let c=s[a];s[a]=n,typeof c?...
function Cx (line 9) | function Cx(t,e){let r=Object.create(t);return j2(r,e),r}
function cee (line 9) | function cee(t){let e=Math.ceil(Math.random()*4294967296).toString(16).p...
function uee (line 9) | function uee(){if(__)return __;let t=ue.toPortablePath(fee.default.tmpdi...
method detachTemp (line 9) | detachTemp(t){Lu.delete(t)}
method mktempSync (line 9) | mktempSync(t){let{tmpdir:e,realTmpdir:r}=uee();for(;;){let s=cee("xfs-")...
method mktempPromise (line 9) | async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=uee();for(;;){let s=ce...
method rmtempPromise (line 9) | async rmtempPromise(){await Promise.all(Array.from(Lu.values()).map(asyn...
method rmtempSync (line 9) | rmtempSync(){for(let t of Lu)try{le.removeSync(t),Lu.delete(t)}catch{}}
function W7e (line 9) | function W7e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT...
function hee (line 9) | function hee(t,e,r){return!t.isSymbolicLink()&&!t.isFile()?!1:W7e(e,r)}
function gee (line 9) | function gee(t,e,r){pee.stat(t,function(s,a){r(s,s?!1:hee(a,t,e))})}
function Y7e (line 9) | function Y7e(t,e){return hee(pee.statSync(t),t,e)}
function Eee (line 9) | function Eee(t,e,r){yee.stat(t,function(s,a){r(s,s?!1:Iee(a,e))})}
function V7e (line 9) | function V7e(t,e){return Iee(yee.statSync(t),e)}
function Iee (line 9) | function Iee(t,e){return t.isFile()&&K7e(t,e)}
function K7e (line 9) | function K7e(t,e){var r=t.mode,s=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:pr...
function U_ (line 9) | function U_(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Pro...
function J7e (line 9) | function J7e(t,e){try{return wx.sync(t,e||{})}catch(r){if(e&&e.ignoreErr...
function Nee (line 9) | function Nee(t,e){let r=t.options.env||process.env,s=process.cwd(),a=t.o...
function eKe (line 9) | function eKe(t){return Nee(t)||Nee(t,!0)}
function tKe (line 9) | function tKe(t){return t=t.replace(j_,"^$1"),t}
function rKe (line 9) | function rKe(t,e){return t=`${t}`,t=t.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"...
function sKe (line 9) | function sKe(t){let r=Buffer.alloc(150),s;try{s=G_.openSync(t,"r"),G_.re...
function fKe (line 9) | function fKe(t){t.file=Wee(t);let e=t.file&&aKe(t.file);return e?(t.args...
function AKe (line 9) | function AKe(t){if(!lKe)return t;let e=fKe(t),r=!cKe.test(e);if(t.option...
function pKe (line 9) | function pKe(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[]...
function Y_ (line 9) | function Y_(t,e){return Object.assign(new Error(`${e} ${t.command} ENOEN...
function hKe (line 9) | function hKe(t,e){if(!W_)return;let r=t.emit;t.emit=function(s,a){if(s==...
function Jee (line 9) | function Jee(t,e){return W_&&t===1&&!e.file?Y_(e.original,"spawn"):null}
function gKe (line 9) | function gKe(t,e){return W_&&t===1&&!e.file?Y_(e.original,"spawnSync"):n...
function $ee (line 9) | function $ee(t,e,r){let s=V_(t,e,r),a=Xee.spawn(s.command,s.args,s.optio...
function dKe (line 9) | function dKe(t,e,r){let s=V_(t,e,r),a=Xee.spawnSync(s.command,s.args,s.o...
function mKe (line 9) | function mKe(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
function vd (line 9) | function vd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
function s (line 9) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
function a (line 9) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
function n (line 9) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
function c (line 9) | function c(h){return r[h.type](h)}
function f (line 9) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
function p (line 9) | function p(h){return h?'"'+a(h)+'"':"end of input"}
function yKe (line 9) | function yKe(t,e){e=e!==void 0?e:{};var r={},s={Start:Ya},a=Ya,n=functio...
function vx (line 12) | function vx(t,e={isGlobPattern:()=>!1}){try{return(0,rte.parse)(t,e)}cat...
function fE (line 12) | function fE(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:s},a...
function Sx (line 12) | function Sx(t){return`${AE(t.chain)}${t.then?` ${z_(t.then)}`:""}`}
function z_ (line 12) | function z_(t){return`${t.type} ${Sx(t.line)}`}
function AE (line 12) | function AE(t){return`${X_(t)}${t.then?` ${Z_(t.then)}`:""}`}
function Z_ (line 12) | function Z_(t){return`${t.type} ${AE(t.chain)}`}
function X_ (line 12) | function X_(t){switch(t.type){case"command":return`${t.envs.length>0?`${...
function Bx (line 12) | function Bx(t){return`${t.name}=${t.args[0]?Sd(t.args[0]):""}`}
function $_ (line 12) | function $_(t){switch(t.type){case"redirection":return G2(t);case"argume...
function G2 (line 12) | function G2(t){return`${t.subtype} ${t.args.map(e=>Sd(e)).join(" ")}`}
function Sd (line 12) | function Sd(t){return t.segments.map(e=>eU(e)).join("")}
function eU (line 12) | function eU(t){let e=(s,a)=>a?`"${s}"`:s,r=s=>s===""?"''":s.match(/[()}<...
function Dx (line 12) | function Dx(t){let e=a=>{switch(a){case"addition":return"+";case"subtrac...
function CKe (line 13) | function CKe(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
function Dd (line 13) | function Dd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
function s (line 13) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
function a (line 13) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
function n (line 13) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
function c (line 13) | function c(h){return r[h.type](h)}
function f (line 13) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
function p (line 13) | function p(h){return h?'"'+a(h)+'"':"end of input"}
function wKe (line 13) | function wKe(t,e){e=e!==void 0?e:{};var r={},s={resolution:Ne},a=Ne,n="/...
function bx (line 13) | function bx(t){let e=t.match(/^\*{1,2}\/(.*)/);if(e)throw new Error(`The...
function Px (line 13) | function Px(t){let e="";return t.from&&(e+=t.from.fullName,t.from.descri...
function ute (line 13) | function ute(t){return typeof t>"u"||t===null}
function BKe (line 13) | function BKe(t){return typeof t=="object"&&t!==null}
function vKe (line 13) | function vKe(t){return Array.isArray(t)?t:ute(t)?[]:[t]}
function SKe (line 13) | function SKe(t,e){var r,s,a,n;if(e)for(n=Object.keys(e),r=0,s=n.length;r...
function DKe (line 13) | function DKe(t,e){var r="",s;for(s=0;s<e;s+=1)r+=t;return r}
function bKe (line 13) | function bKe(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}
function W2 (line 13) | function W2(t,e){Error.call(this),this.name="YAMLException",this.reason=...
function tU (line 13) | function tU(t,e,r,s,a){this.name=t,this.buffer=e,this.position=r,this.li...
function kKe (line 17) | function kKe(t){var e={};return t!==null&&Object.keys(t).forEach(functio...
function QKe (line 17) | function QKe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(PKe.i...
function rU (line 17) | function rU(t,e,r){var s=[];return t.include.forEach(function(a){r=rU(a,...
function RKe (line 17) | function RKe(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;...
function hE (line 17) | function hE(t){this.include=t.include||[],this.implicit=t.implicit||[],t...
function _Ke (line 17) | function _Ke(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~...
function UKe (line 17) | function UKe(){return null}
function HKe (line 17) | function HKe(t){return t===null}
function qKe (line 17) | function qKe(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="...
function GKe (line 17) | function GKe(t){return t==="true"||t==="True"||t==="TRUE"}
function WKe (line 17) | function WKe(t){return Object.prototype.toString.call(t)==="[object Bool...
function KKe (line 17) | function KKe(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}
function JKe (line 17) | function JKe(t){return 48<=t&&t<=55}
function zKe (line 17) | function zKe(t){return 48<=t&&t<=57}
function ZKe (line 17) | function ZKe(t){if(t===null)return!1;var e=t.length,r=0,s=!1,a;if(!e)ret...
function XKe (line 17) | function XKe(t){var e=t,r=1,s,a,n=[];return e.indexOf("_")!==-1&&(e=e.re...
function $Ke (line 17) | function $Ke(t){return Object.prototype.toString.call(t)==="[object Numb...
function rJe (line 17) | function rJe(t){return!(t===null||!tJe.test(t)||t[t.length-1]==="_")}
function nJe (line 17) | function nJe(t){var e,r,s,a;return e=t.replace(/_/g,"").toLowerCase(),r=...
function sJe (line 17) | function sJe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".na...
function oJe (line 17) | function oJe(t){return Object.prototype.toString.call(t)==="[object Numb...
function uJe (line 17) | function uJe(t){return t===null?!1:Lte.exec(t)!==null||Mte.exec(t)!==null}
function fJe (line 17) | function fJe(t){var e,r,s,a,n,c,f,p=0,h=null,E,C,S;if(e=Lte.exec(t),e===...
function AJe (line 17) | function AJe(t){return t.toISOString()}
function hJe (line 17) | function hJe(t){return t==="<<"||t===null}
function dJe (line 18) | function dJe(t){if(t===null)return!1;var e,r,s=0,a=t.length,n=sU;for(r=0...
function mJe (line 18) | function mJe(t){var e,r,s=t.replace(/[\r\n=]/g,""),a=s.length,n=sU,c=0,f...
function yJe (line 18) | function yJe(t){var e="",r=0,s,a,n=t.length,c=sU;for(s=0;s<n;s++)s%3===0...
function EJe (line 18) | function EJe(t){return kd&&kd.isBuffer(t)}
function BJe (line 18) | function BJe(t){if(t===null)return!0;var e=[],r,s,a,n,c,f=t;for(r=0,s=f....
function vJe (line 18) | function vJe(t){return t!==null?t:[]}
function bJe (line 18) | function bJe(t){if(t===null)return!0;var e,r,s,a,n,c=t;for(n=new Array(c...
function PJe (line 18) | function PJe(t){if(t===null)return[];var e,r,s,a,n,c=t;for(n=new Array(c...
function QJe (line 18) | function QJe(t){if(t===null)return!0;var e,r=t;for(e in r)if(kJe.call(r,...
function TJe (line 18) | function TJe(t){return t!==null?t:{}}
function NJe (line 18) | function NJe(){return!0}
function OJe (line 18) | function OJe(){}
function LJe (line 18) | function LJe(){return""}
function MJe (line 18) | function MJe(t){return typeof t>"u"}
function UJe (line 18) | function UJe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)...
function HJe (line 18) | function HJe(t){var e=t,r=/\/([gim]*)$/.exec(t),s="";return e[0]==="/"&&...
function jJe (line 18) | function jJe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multi...
function qJe (line 18) | function qJe(t){return Object.prototype.toString.call(t)==="[object RegE...
function WJe (line 18) | function WJe(t){if(t===null)return!1;try{var e="("+t+")",r=Qx.parse(e,{r...
function YJe (line 18) | function YJe(t){var e="("+t+")",r=Qx.parse(e,{range:!0}),s=[],a;if(r.typ...
function VJe (line 18) | function VJe(t){return t.toString()}
function KJe (line 18) | function KJe(t){return Object.prototype.toString.call(t)==="[object Func...
function cre (line 18) | function cre(t){return Object.prototype.toString.call(t)}
function qf (line 18) | function qf(t){return t===10||t===13}
function Td (line 18) | function Td(t){return t===9||t===32}
function nl (line 18) | function nl(t){return t===9||t===32||t===10||t===13}
function dE (line 18) | function dE(t){return t===44||t===91||t===93||t===123||t===125}
function tze (line 18) | function tze(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-9...
function rze (line 18) | function rze(t){return t===120?2:t===117?4:t===85?8:0}
function nze (line 18) | function nze(t){return 48<=t&&t<=57?t-48:-1}
function ure (line 18) | function ure(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t=...
function ize (line 19) | function ize(t){return t<=65535?String.fromCharCode(t):String.fromCharCo...
function sze (line 19) | function sze(t,e){this.input=t,this.filename=e.filename||null,this.schem...
function wre (line 19) | function wre(t,e){return new hre(e,new JJe(t.filename,t.input,t.position...
function Rr (line 19) | function Rr(t,e){throw wre(t,e)}
function Fx (line 19) | function Fx(t,e){t.onWarning&&t.onWarning.call(null,wre(t,e))}
function o0 (line 19) | function o0(t,e,r,s){var a,n,c,f;if(e<r){if(f=t.input.slice(e,r),s)for(a...
function Are (line 19) | function Are(t,e,r,s){var a,n,c,f;for(wp.isObject(r)||Rr(t,"cannot merge...
function mE (line 19) | function mE(t,e,r,s,a,n,c,f){var p,h;if(Array.isArray(a))for(a=Array.pro...
function aU (line 19) | function aU(t){var e;e=t.input.charCodeAt(t.position),e===10?t.position+...
function as (line 19) | function as(t,e,r){for(var s=0,a=t.input.charCodeAt(t.position);a!==0;){...
function Nx (line 19) | function Nx(t){var e=t.position,r;return r=t.input.charCodeAt(e),!!((r==...
function lU (line 19) | function lU(t,e){e===1?t.result+=" ":e>1&&(t.result+=wp.repeat(`
function oze (line 20) | function oze(t,e,r){var s,a,n,c,f,p,h,E,C=t.kind,S=t.result,P;if(P=t.inp...
function aze (line 20) | function aze(t,e){var r,s,a;if(r=t.input.charCodeAt(t.position),r!==39)r...
function lze (line 20) | function lze(t,e){var r,s,a,n,c,f;if(f=t.input.charCodeAt(t.position),f!...
function cze (line 20) | function cze(t,e){var r=!0,s,a=t.tag,n,c=t.anchor,f,p,h,E,C,S={},P,I,R,N...
function uze (line 20) | function uze(t,e){var r,s,a=oU,n=!1,c=!1,f=e,p=0,h=!1,E,C;if(C=t.input.c...
function pre (line 26) | function pre(t,e){var r,s=t.tag,a=t.anchor,n=[],c,f=!1,p;for(t.anchor!==...
function fze (line 26) | function fze(t,e,r){var s,a,n,c,f=t.tag,p=t.anchor,h={},E={},C=null,S=nu...
function Aze (line 26) | function Aze(t){var e,r=!1,s=!1,a,n,c;if(c=t.input.charCodeAt(t.position...
function pze (line 26) | function pze(t){var e,r;if(r=t.input.charCodeAt(t.position),r!==38)retur...
function hze (line 26) | function hze(t){var e,r,s;if(s=t.input.charCodeAt(t.position),s!==42)ret...
function yE (line 26) | function yE(t,e,r,s,a){var n,c,f,p=1,h=!1,E=!1,C,S,P,I,R;if(t.listener!=...
function gze (line 26) | function gze(t){var e=t.position,r,s,a,n=!1,c;for(t.version=null,t.check...
function Bre (line 26) | function Bre(t,e){t=String(t),e=e||{},t.length!==0&&(t.charCodeAt(t.leng...
function vre (line 27) | function vre(t,e,r){e!==null&&typeof e=="object"&&typeof r>"u"&&(r=e,e=n...
function Sre (line 27) | function Sre(t,e){var r=Bre(t,e);if(r.length!==0){if(r.length===1)return...
function dze (line 27) | function dze(t,e,r){return typeof e=="object"&&e!==null&&typeof r>"u"&&(...
function mze (line 27) | function mze(t,e){return Sre(t,wp.extend({schema:gre},e))}
function Lze (line 27) | function Lze(t,e){var r,s,a,n,c,f,p;if(e===null)return{};for(r={},s=Obje...
function bre (line 27) | function bre(t){var e,r,s;if(e=t.toString(16).toUpperCase(),t<=255)r="x"...
function Mze (line 27) | function Mze(t){this.schema=t.schema||yze,this.indent=Math.max(1,t.inden...
function Pre (line 27) | function Pre(t,e){for(var r=J2.repeat(" ",e),s=0,a=-1,n="",c,f=t.length;...
function cU (line 29) | function cU(t,e){return`
function _ze (line 30) | function _ze(t,e){var r,s,a;for(r=0,s=t.implicitTypes.length;r<s;r+=1)if...
function fU (line 30) | function fU(t){return t===wze||t===Ize}
function EE (line 30) | function EE(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==823...
function Uze (line 30) | function Uze(t){return EE(t)&&!fU(t)&&t!==65279&&t!==Cze&&t!==K2}
function xre (line 30) | function xre(t,e){return EE(t)&&t!==65279&&t!==Lre&&t!==_re&&t!==Ure&&t!...
function Hze (line 30) | function Hze(t){return EE(t)&&t!==65279&&!fU(t)&&t!==xze&&t!==Tze&&t!==M...
function qre (line 30) | function qre(t){var e=/^\n* /;return e.test(t)}
function jze (line 30) | function jze(t,e,r,s,a){var n,c,f,p=!1,h=!1,E=s!==-1,C=-1,S=Hze(t.charCo...
function qze (line 30) | function qze(t,e,r,s){t.dump=function(){if(e.length===0)return"''";if(!t...
function kre (line 30) | function kre(t,e){var r=qre(t)?String(e):"",s=t[t.length-1]===`
function Qre (line 34) | function Qre(t){return t[t.length-1]===`
function Gze (line 35) | function Gze(t,e){for(var r=/(\n+)([^\n]*)/g,s=function(){var h=t.indexOf(`
function Tre (line 38) | function Tre(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,s,a=...
function Wze (line 41) | function Wze(t){for(var e="",r,s,a,n=0;n<t.length;n++){if(r=t.charCodeAt...
function Yze (line 41) | function Yze(t,e,r){var s="",a=t.tag,n,c;for(n=0,c=r.length;n<c;n+=1)Rd(...
function Vze (line 41) | function Vze(t,e,r,s){var a="",n=t.tag,c,f;for(c=0,f=r.length;c<f;c+=1)R...
function Kze (line 41) | function Kze(t,e,r){var s="",a=t.tag,n=Object.keys(r),c,f,p,h,E;for(c=0,...
function Jze (line 41) | function Jze(t,e,r,s){var a="",n=t.tag,c=Object.keys(r),f,p,h,E,C,S;if(t...
function Rre (line 41) | function Rre(t,e,r){var s,a,n,c,f,p;for(a=r?t.explicitTypes:t.implicitTy...
function Rd (line 41) | function Rd(t,e,r,s,a,n){t.tag=null,t.dump=r,Rre(t,r,!1)||Rre(t,r,!0);va...
function zze (line 41) | function zze(t,e){var r=[],s=[],a,n;for(uU(t,r,s),a=0,n=s.length;a<n;a+=...
function uU (line 41) | function uU(t,e,r){var s,a,n;if(t!==null&&typeof t=="object")if(a=e.inde...
function Kre (line 41) | function Kre(t,e){e=e||{};var r=new Mze(e);return r.noRefs||zze(t,r),Rd(...
function Zze (line 42) | function Zze(t,e){return Kre(t,J2.extend({schema:Eze},e))}
function Mx (line 42) | function Mx(t){return function(){throw new Error("Function "+t+" is depr...
function $ze (line 42) | function $ze(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
function Fd (line 42) | function Fd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
function s (line 42) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
function a (line 42) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
function n (line 42) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
function c (line 42) | function c(h){return r[h.type](h)}
function f (line 42) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
function p (line 42) | function p(h){return h?'"'+a(h)+'"':"end of input"}
function eZe (line 42) | function eZe(t,e){e=e!==void 0?e:{};var r={},s={Start:cc},a=cc,n=functio...
function nne (line 51) | function nne(t){return t.match(tZe)?t:JSON.stringify(t)}
function sne (line 51) | function sne(t){return typeof t>"u"?!0:typeof t=="object"&&t!==null&&!Ar...
function pU (line 51) | function pU(t,e,r){if(t===null)return`null
function il (line 61) | function il(t){try{let e=pU(t,0,!1);return e!==`
function rZe (line 62) | function rZe(t){return t.endsWith(`
function iZe (line 64) | function iZe(t){if(nZe.test(t))return rZe(t);let e=(0,Ux.safeLoad)(t,{sc...
function ls (line 64) | function ls(t){return iZe(t)}
method constructor (line 64) | constructor(e){this.data=e}
function une (line 64) | function une(t){return typeof t=="string"?!!bs[t]:"env"in t?bs[t.env]&&b...
method constructor (line 64) | constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageEr...
method constructor (line 64) | constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanio...
method constructor (line 75) | constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type...
function aZe (line 80) | function aZe(t){let e=t.split(`
function qo (line 82) | function qo(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,`
function Ea (line 90) | function Ea(t){return{...t,[X2]:!0}}
function Gf (line 90) | function Gf(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&...
function Wx (line 90) | function Wx(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(...
function $2 (line 90) | function $2(t,e){return e.length===1?new nt(`${t}${Wx(e[0],{mergeName:!0...
function Ld (line 92) | function Ld(t,e,r){if(typeof r>"u")return e;let s=[],a=[],n=f=>{let p=e;...
function ti (line 92) | function ti(t){return t===null?"null":t===void 0?"undefined":t===""?"an ...
function CE (line 92) | function CE(t,e){if(t.length===0)return"nothing";if(t.length===1)return ...
function l0 (line 92) | function l0(t,e){var r,s,a;return typeof e=="number"?`${(r=t?.p)!==null&...
function CU (line 92) | function CU(t,e,r){return t===1?e:r}
function mr (line 92) | function mr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}
function pZe (line 92) | function pZe(t,e){return r=>{t[e]=r}}
function Yf (line 92) | function Yf(t,e){return r=>{let s=t[e];return t[e]=r,Yf(t,e).bind(null,s)}}
function eB (line 92) | function eB(t,e,r){let s=()=>(t(r()),a),a=()=>(t(e),s);return s}
function wU (line 92) | function wU(){return Wr({test:(t,e)=>!0})}
function dne (line 92) | function dne(t){return Wr({test:(e,r)=>e!==t?mr(r,`Expected ${ti(t)} (go...
function wE (line 92) | function wE(){return Wr({test:(t,e)=>typeof t!="string"?mr(e,`Expected a...
function Ao (line 92) | function Ao(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>ty...
function gZe (line 92) | function gZe(){return Wr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(...
function BU (line 92) | function BU(){return Wr({test:(t,e)=>{var r;if(typeof t!="number"){if(ty...
function dZe (line 92) | function dZe(t){return Wr({test:(e,r)=>{var s;if(typeof r?.coercions>"u"...
function mZe (line 92) | function mZe(){return Wr({test:(t,e)=>{var r;if(!(t instanceof Date)){if...
function Yx (line 92) | function Yx(t,{delimiter:e}={}){return Wr({test:(r,s)=>{var a;let n=r;if...
function yZe (line 92) | function yZe(t,{delimiter:e}={}){let r=Yx(t,{delimiter:e});return Wr({te...
function EZe (line 92) | function EZe(t,e){let r=Yx(Vx([t,e])),s=Kx(e,{keys:t});return Wr({test:(...
function Vx (line 92) | function Vx(t,{delimiter:e}={}){let r=Ene(t.length);return Wr({test:(s,a...
function Kx (line 92) | function Kx(t,{keys:e=null}={}){let r=Yx(Vx([e??wE(),t]));return Wr({tes...
function IZe (line 92) | function IZe(t,e={}){return Kx(t,e)}
function mne (line 92) | function mne(t,{extra:e=null}={}){let r=Object.keys(t),s=Wr({test:(a,n)=...
function CZe (line 92) | function CZe(t){return mne(t,{extra:Kx(wU())})}
function yne (line 92) | function yne(t){return()=>t}
function Wr (line 92) | function Wr({test:t}){return yne(t)()}
function BZe (line 92) | function BZe(t,e){if(!e(t))throw new c0}
function vZe (line 92) | function vZe(t,e){let r=[];if(!e(t,{errors:r}))throw new c0({errors:r})}
function SZe (line 92) | function SZe(t,e){}
function DZe (line 92) | function DZe(t,e,{coerce:r=!1,errors:s,throw:a}={}){let n=s?[]:void 0;if...
function bZe (line 92) | function bZe(t,e){let r=Vx(t);return(...s)=>{if(!r(s))throw new c0;retur...
function PZe (line 92) | function PZe(t){return Wr({test:(e,r)=>e.length>=t?!0:mr(r,`Expected to ...
function xZe (line 92) | function xZe(t){return Wr({test:(e,r)=>e.length<=t?!0:mr(r,`Expected to ...
function Ene (line 92) | function Ene(t){return Wr({test:(e,r)=>e.length!==t?mr(r,`Expected to ha...
function kZe (line 92) | function kZe({map:t}={}){return Wr({test:(e,r)=>{let s=new Set,a=new Set...
function QZe (line 92) | function QZe(){return Wr({test:(t,e)=>t<=0?!0:mr(e,`Expected to be negat...
function TZe (line 92) | function TZe(){return Wr({test:(t,e)=>t>=0?!0:mr(e,`Expected to be posit...
function SU (line 92) | function SU(t){return Wr({test:(e,r)=>e>=t?!0:mr(r,`Expected to be at le...
function RZe (line 92) | function RZe(t){return Wr({test:(e,r)=>e<=t?!0:mr(r,`Expected to be at m...
function FZe (line 92) | function FZe(t,e){return Wr({test:(r,s)=>r>=t&&r<=e?!0:mr(s,`Expected to...
function NZe (line 92) | function NZe(t,e){return Wr({test:(r,s)=>r>=t&&r<e?!0:mr(s,`Expected to ...
function DU (line 92) | function DU({unsafe:t=!1}={}){return Wr({test:(e,r)=>e!==Math.round(e)?m...
function tB (line 92) | function tB(t){return Wr({test:(e,r)=>t.test(e)?!0:mr(r,`Expected to mat...
function OZe (line 92) | function OZe(){return Wr({test:(t,e)=>t!==t.toLowerCase()?mr(e,`Expected...
function LZe (line 92) | function LZe(){return Wr({test:(t,e)=>t!==t.toUpperCase()?mr(e,`Expected...
function MZe (line 92) | function MZe(){return Wr({test:(t,e)=>AZe.test(t)?!0:mr(e,`Expected to b...
function _Ze (line 92) | function _Ze(){return Wr({test:(t,e)=>gne.test(t)?!0:mr(e,`Expected to b...
function UZe (line 92) | function UZe({alpha:t=!1}){return Wr({test:(e,r)=>(t?cZe.test(e):uZe.tes...
function HZe (line 92) | function HZe(){return Wr({test:(t,e)=>fZe.test(t)?!0:mr(e,`Expected to b...
function jZe (line 92) | function jZe(t=wU()){return Wr({test:(e,r)=>{let s;try{s=JSON.parse(e)}c...
function Jx (line 92) | function Jx(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Wr({test:(s,...
function rB (line 92) | function rB(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Jx(t,r)}
function qZe (line 92) | function qZe(t){return Wr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}
function GZe (line 92) | function GZe(t){return Wr({test:(e,r)=>e===null?!0:t(e,r)})}
function WZe (line 92) | function WZe(t,e){var r;let s=new Set(t),a=nB[(r=e?.missingIf)!==null&&r...
function bU (line 92) | function bU(t,e){var r;let s=new Set(t),a=nB[(r=e?.missingIf)!==null&&r!...
function YZe (line 92) | function YZe(t,e){var r;let s=new Set(t),a=nB[(r=e?.missingIf)!==null&&r...
function VZe (line 92) | function VZe(t,e){var r;let s=new Set(t),a=nB[(r=e?.missingIf)!==null&&r...
function iB (line 92) | function iB(t,e,r,s){var a,n;let c=new Set((a=s?.ignore)!==null&&a!==voi...
method constructor (line 92) | constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=`
method constructor (line 94) | constructor(){this.help=!1}
method Usage (line 94) | static Usage(e){return e}
method catch (line 94) | async catch(e){throw e}
method validateAndExecute (line 94) | async validateAndExecute(){let r=this.constructor.schema;if(Array.isArra...
function sl (line 94) | function sl(t){mU&&console.log(t)}
function Cne (line 94) | function Cne(){let t={nodes:[]};for(let e=0;e<En.CustomNode;++e)t.nodes....
function JZe (line 94) | function JZe(t){let e=Cne(),r=[],s=e.nodes.length;for(let a of t){r.push...
function Mu (line 94) | function Mu(t,e){return t.nodes.push(e),t.nodes.length-1}
function zZe (line 94) | function zZe(t){let e=new Set,r=s=>{if(e.has(s))return;e.add(s);let a=t....
function ZZe (line 94) | function ZZe(t,{prefix:e=""}={}){if(mU){sl(`${e}Nodes are:`);for(let r=0...
function XZe (line 94) | function XZe(t,e,r=!1){sl(`Running a vm on ${JSON.stringify(e)}`);let s=...
function $Ze (line 94) | function $Ze(t,e,{endToken:r=ei.EndOfInput}={}){let s=XZe(t,[...e,r]);re...
function eXe (line 94) | function eXe(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path....
function tXe (line 94) | function tXe(t,e){let r=e.filter(S=>S.selectedIndex!==null),s=r.filter(S...
function rXe (line 94) | function rXe(t){let e=[],r=[];for(let s of t)s.selectedIndex===Od?r.push...
function wne (line 94) | function wne(t,e,...r){return e===void 0?Array.from(t):wne(t.filter((s,a...
function Hl (line 94) | function Hl(){return{dynamics:[],shortcuts:[],statics:{}}}
function Bne (line 94) | function Bne(t){return t===En.SuccessNode||t===En.ErrorNode}
function PU (line 94) | function PU(t,e=0){return{to:Bne(t.to)?t.to:t.to>=En.CustomNode?t.to+e-E...
function nXe (line 94) | function nXe(t,e=0){let r=Hl();for(let[s,a]of t.dynamics)r.dynamics.push...
function js (line 94) | function js(t,e,r,s,a){t.nodes[e].dynamics.push([r,{to:s,reducer:a}])}
function BE (line 94) | function BE(t,e,r,s){t.nodes[e].shortcuts.push({to:r,reducer:s})}
function Ca (line 94) | function Ca(t,e,r,s,a){(Object.prototype.hasOwnProperty.call(t.nodes[e]....
function zx (line 94) | function zx(t,e,r,s,a){if(Array.isArray(e)){let[n,...c]=e;return t[n](r,...
method constructor (line 94) | constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trai...
method addPath (line 94) | addPath(e){this.paths.push(e)}
method setArity (line 94) | setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,ex...
method addPositional (line 94) | addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra==...
method addRest (line 94) | addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===jl)throw n...
method addProxy (line 94) | addProxy({required:e=0}={}){this.addRest({required:e}),this.arity.proxy=!0}
method addOption (line 94) | addOption({names:e,description:r,arity:s=0,hidden:a=!1,required:n=!1,all...
method setContext (line 94) | setContext(e){this.context=e}
method usage (line 94) | usage({detailed:e=!0,inlineOptions:r=!0}={}){let s=[this.cliOpts.binaryN...
method compile (line 94) | compile(){if(typeof this.context>"u")throw new Error("Assertion failed: ...
method registerOptions (line 94) | registerOptions(e,r){js(e,r,["isOption","--"],r,"inhibateOptions"),js(e,...
method constructor (line 94) | constructor({binaryName:e="..."}={}){this.builders=[],this.opts={binaryN...
method build (line 94) | static build(e,r={}){return new t(r).commands(e).compile()}
method getBuilderByIndex (line 94) | getBuilderByIndex(e){if(!(e>=0&&e<this.builders.length))throw new Error(...
method commands (line 94) | commands(e){for(let r of e)r(this.command());return this}
method command (line 94) | command(){let e=new kU(this.builders.length,this.opts);return this.build...
method compile (line 94) | compile(){let e=[],r=[];for(let a of this.builders){let{machine:n,contex...
function Sne (line 94) | function Sne(){return $x.default&&"getColorDepth"in $x.default.WriteStre...
function Dne (line 94) | function Dne(t){let e=vne;if(typeof e>"u"){if(t.stdout===process.stdout&...
method constructor (line 94) | constructor(e){super(),this.contexts=e,this.commands=[]}
method from (line 94) | static from(e,r){let s=new t(r);s.path=e.path;for(let a of e.options)swi...
method execute (line 94) | async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index...
function Qne (line 98) | async function Qne(...t){let{resolvedOptions:e,resolvedCommandClasses:r,...
function Tne (line 98) | async function Tne(...t){let{resolvedOptions:e,resolvedCommandClasses:r,...
function Rne (line 98) | function Rne(t){let e,r,s,a;switch(typeof process<"u"&&typeof process.ar...
function kne (line 98) | function kne(t){return t()}
method constructor (line 98) | constructor({binaryLabel:e,binaryName:r="...",binaryVersion:s,enableCapt...
method from (line 98) | static from(e,r={}){let s=new t(r),a=Array.isArray(e)?e:[e];for(let n of...
method register (line 98) | register(e){var r;let s=new Map,a=new e;for(let p in a){let h=a[p];typeo...
method process (line 98) | process(e,r){let{input:s,context:a,partial:n}=typeof e=="object"&&Array....
method run (line 98) | async run(e,r){var s,a;let n,c={...t.defaultContext,...r},f=(s=this.enab...
method runExit (line 98) | async runExit(e,r){process.exitCode=await this.run(e,r)}
method definition (line 98) | definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:s}=thi...
method definitions (line 98) | definitions({colored:e=!1}={}){let r=[];for(let s of this.registrations....
method usage (line 98) | usage(e=null,{colored:r,detailed:s=!1,prefix:a="$ "}={}){var n;if(e===nu...
method error (line 124) | error(e,r){var s,{colored:a,command:n=(s=e[xne])!==null&&s!==void 0?s:nu...
method format (line 127) | format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:t.d...
method getUsageByRegistration (line 127) | getUsageByRegistration(e,r){let s=this.registrations.get(e);if(typeof s>...
method getUsageByIndex (line 127) | getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}
method execute (line 127) | async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.def...
method execute (line 128) | async execute(){this.context.stdout.write(this.cli.usage())}
function tk (line 128) | function tk(t={}){return Ea({definition(e,r){var s;e.addProxy({name:(s=t...
method constructor (line 128) | constructor(){super(...arguments),this.args=tk()}
method execute (line 128) | async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.pro...
method execute (line 129) | async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVer...
function Une (line 130) | function Une(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=...
function jne (line 130) | function jne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);ret...
function Gne (line 130) | function Gne(t,e,r){let[s,a]=Gf(e,r??{}),n=t.split(","),c=new Set(n);ret...
function Yne (line 130) | function Yne(t={}){return Ea({definition(e,r){var s;e.addRest({name:(s=t...
function sXe (line 130) | function sXe(t,e,r){let[s,a]=Gf(e,r??{}),{arity:n=1}=a,c=t.split(","),f=...
function oXe (line 130) | function oXe(t={}){let{required:e=!0}=t;return Ea({definition(r,s){var a...
function Kne (line 130) | function Kne(t,...e){return typeof t=="string"?sXe(t,...e):oXe(t)}
function AXe (line 130) | function AXe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,`
function pXe (line 132) | function pXe(t){let e=eie(t),r=qs.configDotenv({path:e});if(!r.parsed)th...
function hXe (line 132) | function hXe(t){console.log(`[dotenv@${NU}][INFO] ${t}`)}
function gXe (line 132) | function gXe(t){console.log(`[dotenv@${NU}][WARN] ${t}`)}
function RU (line 132) | function RU(t){console.log(`[dotenv@${NU}][DEBUG] ${t}`)}
function $ne (line 132) | function $ne(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_K...
function dXe (line 132) | function dXe(t,e){let r;try{r=new URL(e)}catch(f){throw f.code==="ERR_IN...
function eie (line 132) | function eie(t){let e=FU.resolve(process.cwd(),".env");return t&&t.path&...
function mXe (line 132) | function mXe(t){return t[0]==="~"?FU.join(lXe.homedir(),t.slice(1)):t}
function yXe (line 132) | function yXe(t){hXe("Loading env from encrypted .env.vault");let e=qs._p...
function EXe (line 132) | function EXe(t){let e=FU.resolve(process.cwd(),".env"),r="utf8",s=!!(t&&...
function IXe (line 132) | function IXe(t){let e=eie(t);return $ne(t).length===0?qs.configDotenv(t)...
function CXe (line 132) | function CXe(t,e){let r=Buffer.from(e.slice(-64),"hex"),s=Buffer.from(t,...
function wXe (line 132) | function wXe(t,e,r={}){let s=!!(r&&r.debug),a=!!(r&&r.override);if(typeo...
function Vf (line 132) | function Vf(t){return`YN${t.toString(10).padStart(4,"0")}`}
function rk (line 132) | function rk(t){let e=Number(t.slice(2));if(typeof Dr[e]>"u")throw new Er...
method constructor (line 132) | constructor(e,r){if(r=jXe(r),e instanceof t){if(e.loose===!!r.loose&&e.i...
method format (line 132) | format(){return this.version=`${this.major}.${this.minor}.${this.patch}`...
method toString (line 132) | toString(){return this.version}
method compare (line 132) | compare(e){if(sk("SemVer.compare",this.version,this.options,e),!(e insta...
method compareMain (line 132) | compareMain(e){return e instanceof t||(e=new t(e,this.options)),SE(this....
method comparePre (line 132) | comparePre(e){if(e instanceof t||(e=new t(e,this.options)),this.prerelea...
method compareBuild (line 132) | compareBuild(e){e instanceof t||(e=new t(e,this.options));let r=0;do{let...
method inc (line 132) | inc(e,r,s){switch(e){case"premajor":this.prerelease.length=0,this.patch=...
function Fn (line 132) | function Fn(t){var e=this;if(e instanceof Fn||(e=new Fn),e.tail=null,e.h...
function O$e (line 132) | function O$e(t,e,r){var s=e===t.head?new Ud(r,null,e,t):new Ud(r,e,e.nex...
function L$e (line 132) | function L$e(t,e){t.tail=new Ud(e,t.tail,null,t),t.head||(t.head=t.tail)...
function M$e (line 132) | function M$e(t,e){t.head=new Ud(e,null,t.head,t),t.tail||(t.tail=t.head)...
function Ud (line 132) | function Ud(t,e,r,s){if(!(this instanceof Ud))return new Ud(t,e,r,s);thi...
method constructor (line 132) | constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(type...
method max (line 132) | set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a...
method max (line 132) | get max(){return this[Hd]}
method allowStale (line 132) | set allowStale(e){this[hB]=!!e}
method allowStale (line 132) | get allowStale(){return this[hB]}
method maxAge (line 132) | set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be ...
method maxAge (line 132) | get maxAge(){return this[jd]}
method lengthCalculator (line 132) | set lengthCalculator(e){typeof e!="function"&&(e=GU),e!==this[DE]&&(this...
method lengthCalculator (line 132) | get lengthCalculator(){return this[DE]}
method length (line 132) | get length(){return this[bp]}
method itemCount (line 132) | get itemCount(){return this[Gs].length}
method rforEach (line 132) | rforEach(e,r){r=r||this;for(let s=this[Gs].tail;s!==null;){let a=s.prev;...
method forEach (line 132) | forEach(e,r){r=r||this;for(let s=this[Gs].head;s!==null;){let a=s.next;a...
method keys (line 132) | keys(){return this[Gs].toArray().map(e=>e.key)}
method values (line 132) | values(){return this[Gs].toArray().map(e=>e.value)}
method reset (line 132) | reset(){this[Dp]&&this[Gs]&&this[Gs].length&&this[Gs].forEach(e=>this[Dp...
method dump (line 132) | dump(){return this[Gs].map(e=>hk(this,e)?!1:{k:e.key,v:e.value,e:e.now+(...
method dumpLru (line 132) | dumpLru(){return this[Gs]}
method set (line 132) | set(e,r,s){if(s=s||this[jd],s&&typeof s!="number")throw new TypeError("m...
method has (line 132) | has(e){if(!this[_u].has(e))return!1;let r=this[_u].get(e).value;return!h...
method get (line 132) | get(e){return WU(this,e,!0)}
method peek (line 132) | peek(e){return WU(this,e,!1)}
method pop (line 132) | pop(){let e=this[Gs].tail;return e?(bE(this,e),e.value):null}
method del (line 132) | del(e){bE(this,this[_u].get(e))}
method load (line 132) | load(e){this.reset();let r=Date.now();for(let s=e.length-1;s>=0;s--){let...
method prune (line 132) | prune(){this[_u].forEach((e,r)=>WU(this,r,!1))}
method constructor (line 132) | constructor(e,r,s,a,n){this.key=e,this.value=r,this.length=s,this.now=a,...
method constructor (line 132) | constructor(e,r){if(r=H$e(r),e instanceof t)return e.loose===!!r.loose&&...
method format (line 132) | format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||"...
method toString (line 132) | toString(){return this.range}
method parseRange (line 132) | parseRange(e){let s=((this.options.includePrerelease&&Y$e)|(this.options...
method intersects (line 132) | intersects(e,r){if(!(e instanceof t))throw new TypeError("a Range is req...
method test (line 132) | test(e){if(!e)return!1;if(typeof e=="string")try{e=new j$e(e,this.option...
method ANY (line 132) | static get ANY(){return dB}
method constructor (line 132) | constructor(e,r){if(r=gse(r),e instanceof t){if(e.loose===!!r.loose)retu...
method parse (line 132) | parse(e){let r=this.options.loose?dse[mse.COMPARATORLOOSE]:dse[mse.COMPA...
method toString (line 132) | toString(){return this.value}
method test (line 132) | test(e){if(ZU("Comparator.test",e,this.options.loose),this.semver===dB||...
method intersects (line 132) | intersects(e,r){if(!(e instanceof t))throw new TypeError("a Comparator i...
function Btt (line 132) | function Btt(t,e){function r(){this.constructor=t}r.prototype=e.prototyp...
function qd (line 132) | function qd(t,e,r,s){this.message=t,this.expected=e,this.found=r,this.lo...
function s (line 132) | function s(h){return h.charCodeAt(0).toString(16).toUpperCase()}
function a (line 132) | function a(h){return h.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace...
function n (line 132) | function n(h){return h.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replac...
function c (line 132) | function c(h){return r[h.type](h)}
function f (line 132) | function f(h){var E=new Array(h.length),C,S;for(C=0;C<h.length;C++)E[C]=...
function p (line 132) | function p(h){return h?'"'+a(h)+'"':"end of input"}
function vtt (line 132) | function vtt(t,e){e=e!==void 0?e:{};var r={},s={Expression:y},a=y,n="|",...
function Dtt (line 134) | function Dtt(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}
function btt (line 134) | function btt(){let t={},e=Object.keys(mk);for(let r=e.length,s=0;s<r;s++...
function Ptt (line 134) | function Ptt(t){let e=btt(),r=[t];for(e[t].distance=0;r.length;){let s=r...
function xtt (line 134) | function xtt(t,e){return function(r){return e(t(r))}}
function ktt (line 134) | function ktt(t,e){let r=[e[t].parent,t],s=mk[e[t].parent][t],a=e[t].pare...
function Rtt (line 134) | function Rtt(t){let e=function(...r){let s=r[0];return s==null?s:(s.leng...
function Ftt (line 134) | function Ftt(t){let e=function(...r){let s=r[0];if(s==null)return s;s.le...
function Ntt (line 134) | function Ntt(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2...
function a4 (line 134) | function a4(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t...
function l4 (line 134) | function l4(t,e){if(f0===0)return 0;if(Dc("color=16m")||Dc("color=full")...
function Ltt (line 134) | function Ltt(t){let e=l4(t,t&&t.isTTY);return a4(e)}
function Soe (line 138) | function Soe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5...
function Gtt (line 138) | function Gtt(t,e){let r=[],s=e.trim().split(/\s*,\s*/g),a;for(let n of s...
function Wtt (line 138) | function Wtt(t){Boe.lastIndex=0;let e=[],r;for(;(r=Boe.exec(t))!==null;)...
function voe (line 138) | function voe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=...
method constructor (line 138) | constructor(e){return xoe(e)}
function Ek (line 138) | function Ek(t){return xoe(t)}
method get (line 138) | get(){let r=Ik(this,h4(e.open,e.close,this._styler),this._isEmpty);retur...
method get (line 138) | get(){let t=Ik(this,this._styler,!0);return Object.defineProperty(this,"...
method get (line 138) | get(){let{level:e}=this;return function(...r){let s=h4(CB.color[Poe[e]][...
method get (line 138) | get(){let{level:r}=this;return function(...s){let a=h4(CB.bgColor[Poe[r]...
method get (line 138) | get(){return this._generator.level}
method set (line 138) | set(t){this._generator.level=t}
function Xtt (line 139) | function Xtt(t,e,r){let s=d4(t,e,"-",!1,r)||[],a=d4(e,t,"",!1,r)||[],n=d...
function $tt (line 139) | function $tt(t,e){let r=1,s=1,a=_oe(t,r),n=new Set([e]);for(;t<=a&&a<=e;...
function ert (line 139) | function ert(t,e,r){if(t===e)return{pattern:t,count:[],digits:0};let s=t...
function Loe (line 139) | function Loe(t,e,r,s){let a=$tt(t,e),n=[],c=t,f;for(let p=0;p<a.length;p...
function d4 (line 139) | function d4(t,e,r,s,a){let n=[];for(let c of t){let{string:f}=c;!s&&!Moe...
function trt (line 139) | function trt(t,e){let r=[];for(let s=0;s<t.length;s++)r.push([t[s],e[s]]...
function rrt (line 139) | function rrt(t,e){return t>e?1:e>t?-1:0}
function Moe (line 139) | function Moe(t,e,r){return t.some(s=>s[e]===r)}
function _oe (line 139) | function _oe(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}
function Uoe (line 139) | function Uoe(t,e){return t-t%Math.pow(10,e)}
function Hoe (line 139) | function Hoe(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}
function nrt (line 139) | function nrt(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}
function joe (line 139) | function joe(t){return/^-?(0+)\d/.test(t)}
function irt (line 139) | function irt(t,e,r){if(!e.isPadded)return t;let s=Math.abs(e.maxLen-Stri...
method extglobChars (line 140) | extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t....
method globChars (line 140) | globChars(t){return t===!0?qrt:yae}
function pnt (line 140) | function pnt(){this.__data__=[],this.size=0}
function hnt (line 140) | function hnt(t,e){return t===e||t!==t&&e!==e}
function dnt (line 140) | function dnt(t,e){for(var r=t.length;r--;)if(gnt(t[r][0],e))return r;ret...
function Int (line 140) | function Int(t){var e=this.__data__,r=mnt(e,t);if(r<0)return!1;var s=e.l...
function wnt (line 140) | function wnt(t){var e=this.__data__,r=Cnt(e,t);return r<0?void 0:e[r][1]}
function vnt (line 140) | function vnt(t){return Bnt(this.__data__,t)>-1}
function Dnt (line 140) | function Dnt(t,e){var r=this.__data__,s=Snt(r,t);return s<0?(++this.size...
function NE (line 140) | function NE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){va...
function Rnt (line 140) | function Rnt(){this.__data__=new Tnt,this.size=0}
function Fnt (line 140) | function Fnt(t){var e=this.__data__,r=e.delete(t);return this.size=e.siz...
function Nnt (line 140) | function Nnt(t){return this.__data__.get(t)}
function Ont (line 140) | function Ont(t){return this.__data__.has(t)}
function Wnt (line 140) | function Wnt(t){var e=qnt.call(t,xB),r=t[xB];try{t[xB]=void 0;var s=!0}c...
function Knt (line 140) | function Knt(t){return Vnt.call(t)}
function $nt (line 140) | function $nt(t){return t==null?t===void 0?Xnt:Znt:Ele&&Ele in Object(t)?...
function eit (line 140) | function eit(t){var e=typeof t;return t!=null&&(e=="object"||e=="functio...
function ait (line 140) | function ait(t){if(!rit(t))return!1;var e=tit(t);return e==iit||e==sit||...
function uit (line 140) | function uit(t){return!!Sle&&Sle in t}
function pit (line 140) | function pit(t){if(t!=null){try{return Ait.call(t)}catch{}try{return t+"...
function Sit (line 140) | function Sit(t){if(!dit(t)||git(t))return!1;var e=hit(t)?vit:Eit;return ...
function Dit (line 140) | function Dit(t,e){return t?.[e]}
function xit (line 140) | function xit(t,e){var r=Pit(t,e);return bit(r)?r:void 0}
function Nit (line 140) | function Nit(){this.__data__=Ole?Ole(null):{},this.size=0}
function Oit (line 140) | function Oit(t){var e=this.has(t)&&delete this.__data__[t];return this.s...
function Hit (line 140) | function Hit(t){var e=this.__data__;if(Lit){var r=e[t];return r===Mit?vo...
function Wit (line 140) | function Wit(t){var e=this.__data__;return jit?e[t]!==void 0:Git.call(e,t)}
function Kit (line 140) | function Kit(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,...
function OE (line 140) | function OE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){va...
function rst (line 140) | function rst(){this.size=0,this.__data__={hash:new Jle,map:new(tst||est)...
function nst (line 140) | function nst(t){var e=typeof t;return e=="string"||e=="number"||e=="symb...
function sst (line 140) | function sst(t,e){var r=t.__data__;return ist(e)?r[typeof e=="string"?"s...
function ast (line 140) | function ast(t){var e=ost(this,t).delete(t);return this.size-=e?1:0,e}
function cst (line 140) | function cst(t){return lst(this,t).get(t)}
function fst (line 140) | function fst(t){return ust(this,t).has(t)}
function pst (line 140) | function pst(t,e){var r=Ast(this,t),s=r.size;return r.set(t,e),this.size...
function LE (line 140) | function LE(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){va...
function Bst (line 140) | function Bst(t,e){var r=this.__data__;if(r instanceof Est){var s=r.__dat...
function ME (line 140) | function ME(t){var e=this.__data__=new vst(t);this.size=e.size}
function Qst (line 140) | function Qst(t){return this.__data__.set(t,kst),this}
function Tst (line 140) | function Tst(t){return this.__data__.has(t)}
function Tk (line 140) | function Tk(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Rst;+...
function Ost (line 140) | function Ost(t,e){for(var r=-1,s=t==null?0:t.length;++r<s;)if(e(t[r],r,t...
function Lst (line 140) | function Lst(t,e){return t.has(e)}
function qst (line 140) | function qst(t,e,r,s,a,n){var c=r&Hst,f=t.length,p=e.length;if(f!=p&&!(c...
function Yst (line 140) | function Yst(t){var e=-1,r=Array(t.size);return t.forEach(function(s,a){...
function Vst (line 140) | function Vst(t){var e=-1,r=Array(t.size);return t.forEach(function(s){r[...
function fot (line 140) | function fot(t,e,r,s,a,n,c){switch(r){case uot:if(t.byteLength!=e.byteLe...
function Aot (line 140) | function Aot(t,e){for(var r=-1,s=e.length,a=t.length;++r<s;)t[a+r]=e[r];...
function dot (line 140) | function dot(t,e,r){var s=e(t);return got(t)?s:hot(s,r(t))}
function mot (line 140) | function mot(t,e){for(var r=-1,s=t==null?0:t.length,a=0,n=[];++r<s;){var...
function yot (line 140) | function yot(){return[]}
function vot (line 140) | function vot(t,e){for(var r=-1,s=Array(t);++r<t;)s[r]=e(r);return s}
function Sot (line 140) | function Sot(t){return t!=null&&typeof t=="object"}
function xot (line 140) | function xot(t){return bot(t)&&Dot(t)==Pot}
function Fot (line 140) | function Fot(){return!1}
function jot (line 140) | function jot(t,e){var r=typeof t;return e=e??Uot,!!e&&(r=="number"||r!="...
function Got (line 140) | function Got(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=qot}
function yat (line 140) | function yat(t){return Vot(t)&&Yot(t.length)&&!!Si[Wot(t)]}
function Eat (line 140) | function Eat(t){return function(e){return t(e)}}
function Fat (line 140) | function Fat(t,e){var r=Pat(t),s=!r&&bat(t),a=!r&&!s&&xat(t),n=!r&&!s&&!...
function Oat (line 140) | function Oat(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototy...
function Lat (line 140) | function Lat(t,e){return function(r){return t(e(r))}}
function Gat (line 140) | function Gat(t){if(!Uat(t))return Hat(t);var e=[];for(var r in Object(t)...
function Vat (line 140) | function Vat(t){return t!=null&&Yat(t.length)&&!Wat(t)}
function Zat (line 140) | function Zat(t){return zat(t)?Kat(t):Jat(t)}
function tlt (line 140) | function tlt(t){return Xat(t,elt,$at)}
function slt (line 140) | function slt(t,e,r,s,a,n){var c=r&rlt,f=Iue(t),p=f.length,h=Iue(e),E=h.l...
function klt (line 140) | function klt(t,e,r,s,a,n){var c=_ue(t),f=_ue(e),p=c?jue:Mue(t),h=f?jue:M...
function Vue (line 140) | function Vue(t,e,r,s,a){return t===e?!0:t==null||e==null||!Yue(t)&&!Yue(...
function Rlt (line 140) | function Rlt(t,e){return Tlt(t,e)}
function Olt (line 140) | function Olt(t,e,r){e=="__proto__"&&$ue?$ue(t,e,{configurable:!0,enumera...
function _lt (line 140) | function _lt(t,e,r){(r!==void 0&&!Mlt(t[e],r)||r===void 0&&!(e in t))&&L...
function Ult (line 140) | function Ult(t){return function(e,r,s){for(var a=-1,n=Object(e),c=s(e),f...
function Wlt (line 140) | function Wlt(t,e){if(e)return t.slice();var r=t.length,s=lfe?lfe(r):new ...
function Ylt (line 140) | function Ylt(t){var e=new t.constructor(t.byteLength);return new ufe(e)....
function Klt (line 140) | function Klt(t,e){var r=e?Vlt(t.buffer):t.buffer;return new t.constructo...
function Jlt (line 140) | function Jlt(t,e){var r=-1,s=t.length;for(e||(e=Array(s));++r<s;)e[r]=t[...
function t (line 140) | function t(){}
function nct (line 140) | function nct(t){return typeof t.constructor=="function"&&!rct(t)?ect(tct...
function oct (line 140) | function oct(t){return sct(t)&&ict(t)}
function gct (line 140) | function gct(t){if(!cct(t)||act(t)!=uct)return!1;var e=lct(t);if(e===nul...
function dct (line 140) | function dct(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="...
function Cct (line 140) | function Cct(t,e,r){var s=t[e];(!(Ict.call(t,e)&&yct(s,r))||r===void 0&&...
function vct (line 140) | function vct(t,e,r,s){var a=!r;r||(r={});for(var n=-1,c=e.length;++n<c;)...
function Sct (line 140) | function Sct(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);ret...
function Qct (line 140) | function Qct(t){if(!Dct(t))return Pct(t);var e=bct(t),r=[];for(var s in ...
function Nct (line 140) | function Nct(t){return Fct(t)?Tct(t,!0):Rct(t)}
function Mct (line 140) | function Mct(t){return Oct(t,Lct(t))}
function zct (line 140) | function zct(t,e,r,s,a,n,c){var f=Ofe(t,r),p=Ofe(e,r),h=c.get(p);if(h){R...
function _fe (line 140) | function _fe(t,e,r,s,a){t!==e&&$ct(e,function(n,c){if(a||(a=new Zct),tut...
function iut (line 140) | function iut(t){return t}
function sut (line 140) | function sut(t,e,r){switch(r.length){case 0:return t.call(e);case 1:retu...
function aut (line 140) | function aut(t,e,r){return e=Wfe(e===void 0?t.length-1:e,0),function(){f...
function lut (line 140) | function lut(t){return function(){return t}}
function gut (line 140) | function gut(t){var e=0,r=0;return function(){var s=hut(),a=put-(s-r);if...
function wut (line 140) | function wut(t,e){return Cut(Iut(t,e,Eut),t+"")}
function but (line 140) | function but(t,e,r){if(!Dut(r))return!1;var s=typeof e;return(s=="number...
function kut (line 140) | function kut(t){return Put(function(e,r){var s=-1,a=r.length,n=a>1?r[a-1...
function Fut (line 140) | function Fut(t){return!!(hAe.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9...
function Vk (line 140) | function Vk(t,{one:e,more:r,zero:s=r}){return t===0?s:t===1?e:r}
function Nut (line 140) | function Nut(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}
function Out (line 140) | function Out(t){}
function f3 (line 140) | function f3(t){throw new Error(`Assertion failed: Unexpected object '${t...
function Lut (line 140) | function Lut(t,e){let r=Object.values(t);if(!r.includes(e))throw new nt(...
function Yl (line 140) | function Yl(t,e){let r=[];for(let s of t){let a=e(s);a!==gAe&&r.push(a)}...
function p0 (line 140) | function p0(t,e){for(let r of t){let s=e(r);if(s!==dAe)return s}}
function o3 (line 140) | function o3(t){return typeof t=="object"&&t!==null}
function Uu (line 140) | async function Uu(t){let e=await Promise.allSettled(t),r=[];for(let s of...
function Kk (line 140) | function Kk(t){if(t instanceof Map&&(t=Object.fromEntries(t)),o3(t))for(...
function Vl (line 140) | function Vl(t,e,r){let s=t.get(e);return typeof s>"u"&&t.set(e,s=r()),s}
function jB (line 140) | function jB(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}
function xp (line 140) | function xp(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}
function A3 (line 140) | function A3(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}
function Mut (line 140) | async function Mut(t,e){if(e==null)return await t();try{return await t()...
function GE (line 140) | async function GE(t,e){try{return await t()}catch(r){throw r.message=e(r...
function p3 (line 140) | function p3(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}
function WE (line 140) | async function WE(t){return await new Promise((e,r)=>{let s=[];t.on("err...
function mAe (line 140) | function mAe(){let t,e;return{promise:new Promise((s,a)=>{t=s,e=a}),reso...
function yAe (line 140) | function yAe(t){return HB(ue.fromPortablePath(t))}
function EAe (line 140) | function EAe(path){let physicalPath=ue.fromPortablePath(path),currentCac...
function _ut (line 140) | function _ut(t){let e=cAe.get(t),r=le.statSync(t);if(e?.mtime===r.mtimeM...
function kp (line 140) | function kp(t,{cachingStrategy:e=2}={}){switch(e){case 0:return EAe(t);c...
function Ws (line 140) | function Ws(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let s=[];...
function Uut (line 140) | function Uut(t){return t.length===0?null:t.map(e=>`(${AAe.default.makeRe...
function Jk (line 140) | function Jk(t,{env:e}){let r=/\${(?<variableName>[\d\w_]+)(?<colon>:)?(?...
function qB (line 140) | function qB(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"...
function CAe (line 140) | function CAe(t){return typeof t>"u"?t:qB(t)}
function h3 (line 140) | function h3(t){try{return CAe(t)}catch{return null}}
function Hut (line 140) | function Hut(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}
function wAe (line 140) | function wAe(t,...e){let r=c=>({value:c}),s=r(t),a=e.map(c=>r(c)),{value...
function jut (line 140) | function jut(...t){return wAe({},...t)}
function qut (line 140) | function qut(t,e){let r=Object.create(null);for(let s of t){let a=s[e];r...
function YE (line 140) | function YE(t){return typeof t=="string"?Number.parseInt(t,10):t}
method constructor (line 140) | constructor(){super(...arguments);this.chunks=[]}
method _transform (line 140) | _transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("...
method _flush (line 140) | _flush(r){r(null,Buffer.concat(this.chunks))}
method constructor (line 140) | constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0...
method set (line 140) | set(e,r){let s=this.deferred.get(e);typeof s>"u"&&this.deferred.set(e,s=...
method reduce (line 140) | reduce(e,r){let s=this.promises.get(e)??Promise.resolve();this.set(e,()=...
method wait (line 140) | async wait(){await Promise.all(this.promises.values())}
method constructor (line 140) | constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}
method _transform (line 140) | _transform(r,s,a){if(s!=="buffer"||!Buffer.isBuffer(r))throw new Error("...
method _flush (line 140) | _flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}
function vAe (line 140) | function vAe(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1...
function Hu (line 140) | function Hu(t,e){return[e,t]}
function zd (line 140) | function zd(t,e,r){return t.get("enableColors")&&r&2&&(e=WB.default.bold...
function po (line 140) | function po(t,e,r){if(!t.get("enableColors"))return e;let s=Gut.get(r);i...
function JE (line 140) | function JE(t,e,r){return t.get("enableHyperlinks")?Wut?`\x1B]8;;${r}\x1...
function Ut (line 140) | function Ut(t,e,r){if(e===null)return po(t,"null",Ct.NULL);if(Object.has...
function I3 (line 140) | function I3(t,e,r,{separator:s=", "}={}){return[...e].map(a=>Ut(t,a,r))....
function Zd (line 140) | function Zd(t,e){if(t===null)return null;if(Object.hasOwn(zk,e))return z...
function Yut (line 140) | function Yut(t,e,[r,s]){return t?Zd(r,s):Ut(e,r,s)}
function C3 (line 140) | function C3(t){return{Check:po(t,"\u2713","green"),Cross:po(t,"\u2718","...
function Zf (line 140) | function Zf(t,{label:e,value:[r,s]}){return`${Ut(t,e,Ct.CODE)}: ${Ut(t,r...
function $k (line 140) | function $k(t,e,r){let s=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=...
function YB (line 140) | function YB(t,{configuration:e}){let r=e.get("logFilters"),s=new Map,a=n...
function Vut (line 140) | function Vut(t){return t.reduce((e,r)=>[].concat(e,r),[])}
function Kut (line 140) | function Kut(t,e){let r=[[]],s=0;for(let a of t)e(a)?(s++,r[s]=[]):r[s]....
function Jut (line 140) | function Jut(t){return t.code==="ENOENT"}
method constructor (line 140) | constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),...
function zut (line 140) | function zut(t,e){return new v3(t,e)}
function ift (line 140) | function ift(t){return t.replace(/\\/g,"/")}
function sft (line 140) | function sft(t,e){return Xut.resolve(t,e)}
function oft (line 140) | function oft(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e===...
function S3 (line 140) | function S3(t){return t.replace(tft,"\\$2")}
function D3 (line 140) | function D3(t){return t.replace(eft,"\\$2")}
function QAe (line 140) | function QAe(t){return S3(t).replace(rft,"//$1").replace(nft,"/")}
function TAe (line 140) | function TAe(t){return D3(t)}
function jAe (line 140) | function jAe(t,e={}){return!qAe(t,e)}
function qAe (line 140) | function qAe(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.in...
function Dft (line 140) | function Dft(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf(...
function bft (line 140) | function bft(t){return nQ(t)?t.slice(1):t}
function Pft (line 140) | function Pft(t){return"!"+t}
function nQ (line 140) | function nQ(t){return t.startsWith("!")&&t[1]!=="("}
function GAe (line 140) | function GAe(t){return!nQ(t)}
function xft (line 140) | function xft(t){return t.filter(nQ)}
function kft (line 140) | function kft(t){return t.filter(GAe)}
function Qft (line 140) | function Qft(t){return t.filter(e=>!x3(e))}
function Tft (line 140) | function Tft(t){return t.filter(x3)}
function x3 (line 140) | function x3(t){return t.startsWith("..")||t.startsWith("./..")}
function Rft (line 140) | function Rft(t){return yft(t,{flipBackslashes:!1})}
function Fft (line 140) | function Fft(t){return t.includes(HAe)}
function WAe (line 140) | function WAe(t){return t.endsWith("/"+HAe)}
function Nft (line 140) | function Nft(t){let e=mft.basename(t);return WAe(t)||jAe(e)}
function Oft (line 140) | function Oft(t){return t.reduce((e,r)=>e.concat(YAe(r)),[])}
function YAe (line 140) | function YAe(t){let e=P3.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0}...
function Lft (line 140) | function Lft(t,e){let{parts:r}=P3.scan(t,Object.assign(Object.assign({},...
function VAe (line 140) | function VAe(t,e){return P3.makeRe(t,e)}
function Mft (line 140) | function Mft(t,e){return t.map(r=>VAe(r,e))}
function _ft (line 140) | function _ft(t,e){return e.some(r=>r.test(t))}
function Uft (line 140) | function Uft(t){return t.replace(Sft,"/")}
function qft (line 140) | function qft(){let t=[],e=jft.call(arguments),r=!1,s=e[e.length-1];s&&!A...
function zAe (line 140) | function zAe(t,e){if(Array.isArray(t))for(let r=0,s=t.length;r<s;r++)t[r...
function Wft (line 140) | function Wft(t){let e=Gft(t);return t.forEach(r=>{r.once("error",s=>e.em...
function $Ae (line 140) | function $Ae(t){t.forEach(e=>e.emit("close"))}
function Yft (line 140) | function Yft(t){return typeof t=="string"}
function Vft (line 140) | function Vft(t){return t===""}
function tAt (line 140) | function tAt(t,e){let r=rpe(t,e),s=rpe(e.ignore,e),a=npe(r),n=ipe(r,s),c...
function rpe (line 140) | function rpe(t,e){let r=t;return e.braceExpansion&&(r=ju.pattern.expandP...
function k3 (line 140) | function k3(t,e,r){let s=[],a=ju.pattern.getPatternsOutsideCurrentDirect...
function npe (line 140) | function npe(t){return ju.pattern.getPositivePatterns(t)}
function ipe (line 140) | function ipe(t,e){return ju.pattern.getNegativePatterns(t).concat(e).map...
function Q3 (line 140) | function Q3(t){let e={};return t.reduce((r,s)=>{let a=ju.pattern.getBase...
function T3 (line 140) | function T3(t,e,r){return Object.keys(t).map(s=>R3(s,t[s],e,r))}
function R3 (line 140) | function R3(t,e,r,s){return{dynamic:s,positive:e,negative:r,base:t,patte...
function rAt (line 140) | function rAt(t,e,r){e.fs.lstat(t,(s,a)=>{if(s!==null){ope(r,s);return}if...
function ope (line 140) | function ope(t,e){t(e)}
function F3 (line 140) | function F3(t,e){t(null,e)}
function nAt (line 140) | function nAt(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.fol...
function iAt (line 140) | function iAt(t){return t===void 0?h0.FILE_SYSTEM_ADAPTER:Object.assign(O...
method constructor (line 140) | constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue...
method _getValue (line 140) | _getValue(e,r){return e??r}
function aAt (line 140) | function aAt(t,e,r){if(typeof e=="function"){fpe.read(t,M3(),e);return}f...
function lAt (line 140) | function lAt(t,e){let r=M3(e);return oAt.read(t,r)}
function M3 (line 140) | function M3(t={}){return t instanceof L3.default?t:new L3.default(t)}
function uAt (line 140) | function uAt(t,e){let r,s,a,n=!0;Array.isArray(t)?(r=[],s=t.length):(a=O...
method constructor (line 140) | constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),...
function gAt (line 140) | function gAt(t,e){return new U3(t,e)}
function mAt (line 140) | function mAt(t,e,r){return t.endsWith(r)?t+e:t+r+e}
function IAt (line 140) | function IAt(t,e,r){if(!e.stats&&EAt.IS_SUPPORT_READDIR_WITH_FILE_TYPES)...
function Bpe (line 140) | function Bpe(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(s,a)=>{if(s!==nul...
function CAt (line 140) | function CAt(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);re...
function vpe (line 140) | function vpe(t,e,r){e.fs.readdir(t,(s,a)=>{if(s!==null){pQ(r,s);return}l...
function pQ (line 140) | function pQ(t,e){t(e)}
function q3 (line 140) | function q3(t,e){t(null,e)}
function vAt (line 140) | function vAt(t,e){return!e.stats&&BAt.IS_SUPPORT_READDIR_WITH_FILE_TYPES...
function Ppe (line 140) | function Ppe(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(s=>{...
function xpe (line 140) | function xpe(t,e){return e.fs.readdirSync(t).map(s=>{let a=bpe.joinPathS...
function SAt (line 140) | function SAt(t){return t===void 0?y0.FILE_SYSTEM_ADAPTER:Object.assign(O...
method constructor (line 140) | constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValu...
method _getValue (line 140) | _getValue(e,r){return e??r}
function kAt (line 140) | function kAt(t,e,r){if(typeof e=="function"){Rpe.read(t,V3(),e);return}R...
function QAt (line 140) | function QAt(t,e){let r=V3(e);return xAt.read(t,r)}
function V3 (line 140) | function V3(t={}){return t instanceof Y3.default?t:new Y3.default(t)}
function TAt (line 140) | function TAt(t){var e=new t,r=e;function s(){var n=e;return n.next?e=n.n...
function Ope (line 140) | function Ope(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),!(r>=1))th...
function Tc (line 140) | function Tc(){}
function FAt (line 140) | function FAt(){this.value=null,this.callback=Tc,this.next=null,this.rele...
function NAt (line 140) | function NAt(t,e,r){typeof t=="function"&&(r=e,e=t,t=null);function s(E,...
function OAt (line 140) | function OAt(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}
function LAt (line 140) | function LAt(t,e){return t===null||t(e)}
function MAt (line 140) | function MAt(t,e){return t.split(/[/\\]/).join(e)}
function _At (line 140) | function _At(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}
method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._root=UAt.replacePat...
method constructor (line 140) | constructor(e,r){super(e,r),this._settings=r,this._scandir=jAt.scandir,t...
method read (line 140) | read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()...
method isDestroyed (line 140) | get isDestroyed(){return this._isDestroyed}
method destroy (line 140) | destroy(){if(this._isDestroyed)throw new Error("The reader is already de...
method onEntry (line 140) | onEntry(e){this._emitter.on("entry",e)}
method onError (line 140) | onError(e){this._emitter.once("error",e)}
method onEnd (line 140) | onEnd(e){this._emitter.once("end",e)}
method _pushToQueue (line 140) | _pushToQueue(e,r){let s={directory:e,base:r};this._queue.push(s,a=>{a!==...
method _worker (line 140) | _worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,...
method _handleError (line 140) | _handleError(e){this._isDestroyed||!dQ.isFatalError(this._settings,e)||(...
method _handleEntry (line 140) | _handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let s=...
method _emitEntry (line 140) | _emitEntry(e){this._emitter.emit("entry",e)}
method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new WAt.defa...
method read (line 140) | read(e){this._reader.onError(r=>{YAt(e,r)}),this._reader.onEntry(r=>{thi...
function YAt (line 140) | function YAt(t,e){t(e)}
function VAt (line 140) | function VAt(t,e){t(null,e)}
method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new JAt.defa...
method read (line 140) | read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),th...
method constructor (line 140) | constructor(){super(...arguments),this._scandir=zAt.scandirSync,this._st...
method read (line 140) | read(){return this._pushToQueue(this._root,this._settings.basePath),this...
method _pushToQueue (line 140) | _pushToQueue(e,r){this._queue.add({directory:e,base:r})}
method _handleQueue (line 140) | _handleQueue(){for(let e of this._queue.values())this._handleDirectory(e...
method _handleDirectory (line 140) | _handleDirectory(e,r){try{let s=this._scandir(e,this._settings.fsScandir...
method _handleError (line 140) | _handleError(e){if(mQ.isFatalError(this._settings,e))throw e}
method _handleEntry (line 140) | _handleEntry(e,r){let s=e.path;r!==void 0&&(e.path=mQ.joinPathSegments(r...
method _pushToStorage (line 140) | _pushToStorage(e){this._storage.push(e)}
method constructor (line 140) | constructor(e,r){this._root=e,this._settings=r,this._reader=new XAt.defa...
method read (line 140) | read(){return this._reader.read()}
method constructor (line 140) | constructor(e={}){this._options=e,this.basePath=this._getValue(this._opt...
method _getValue (line 140) | _getValue(e,r){return e??r}
function npt (line 140) | function npt(t,e,r){if(typeof e=="function"){new qpe.default(t,yQ()).rea...
function ipt (line 140) | function ipt(t,e){let r=yQ(e);return new rpt.default(t,r).read()}
function spt (line 140) | function spt(t,e){let r=yQ(e);return new tpt.default(t,r).read()}
function yQ (line 140) | function yQ(t={}){return t instanceof f8.default?t:new f8.default(t)}
method constructor (line 140) | constructor(e){this._settings=e,this._fsStatSettings=new apt.Settings({f...
method _getFullEntryPath (line 140) | _getFullEntryPath(e){return opt.resolve(this._settings.cwd,e)}
method _makeEntry (line 140) | _makeEntry(e,r){let s={name:r,path:r,dirent:Gpe.fs.createDirentFromStats...
method _isFatalError (line 140) | _isFatalError(e){return!Gpe.errno.isEnoentCodeError(e)&&!this._settings....
method constructor (line 140) | constructor(){super(...arguments),this._walkStream=upt.walkStream,this._...
method dynamic (line 140) | dynamic(e,r){return this._walkStream(e,r)}
method static (line 140) | static(e,r){let s=e.map(this._getFullEntryPath,this),a=new lpt.PassThrou...
method _getEntry (line 140) | _getEntry(e,r,s){return this._getStat(e).then(a=>this._makeEntry(a,r)).c...
method _getStat (line 140) | _getStat(e){return new Promise((r,s)=>{this._stat(e,this._fsStatSettings...
method constructor (line 140) | constructor(){super(...arguments),this._walkAsync=Apt.walk,this._readerS...
method dynamic (line 140) | dynamic(e,r){return new Promise((s,a)=>{this._walkAsync(e,r,(n,c)=>{n===...
method static (line 140) | async static(e,r){let s=[],a=this._readerStream.static(e,r);return new P...
method constructor (line 140) | constructor(e,r,s){this._patterns=e,this._settings=r,this._micromatchOpt...
method _fillStorage (line 140) | _fillStorage(){for(let e of this._patterns){let r=this._getPatternSegmen...
method _getPatternSegments (line 140) | _getPatternSegments(e){return KB.pattern.getPatternParts(e,this._microma...
method _splitSegmentsIntoSections (line 140) | _splitSegmentsIntoSections(e){return KB.array.splitWhen(e,r=>r.dynamic&&...
method match (line 140) | match(e){let r=e.split("/"),s=r.length,a=this._storage.filter(n=>!n.comp...
method constructor (line 140) | constructor(e,r){this._settings=e,this._micromatchOptions=r}
method getFilter (line 140) | getFilter(e,r,s){let a=this._getMatcher(r),n=this._getNegativePatternsRe...
method _getMatcher (line 140) | _getMatcher(e){return new dpt.default(e,this._settings,this._micromatchO...
method _getNegativePatternsRe (line 140) | _getNegativePatternsRe(e){let r=e.filter(CQ.pattern.isAffectDepthOfReadi...
method _filter (line 140) | _filter(e,r,s,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymb...
method _isSkippedByDeep (line 140) | _isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntry...
method _getEntryLevel (line 140) | _getEntryLevel(e,r){let s=r.split("/").length;if(e==="")return s;let a=e...
method _isSkippedSymbolicLink (line 140) | _isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.d...
method _isSkippedByPositivePatterns (line 140) | _isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!...
method _isSkippedByNegativePatterns (line 140) | _isSkippedByNegativePatterns(e,r){return!CQ.pattern.matchAny(e,r)}
method constructor (line 140) | constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=n...
method getFilter (line 140) | getFilter(e,r){let s=$d.pattern.convertPatternsToRe(e,this._micromatchOp...
method _filter (line 140) | _filter(e,r,s){let a=$d.path.removeLeadingDotSegment(e.path);if(this._se...
method _isDuplicateEntry (line 140) | _isDuplicateEntry(e){return this.index.has(e)}
method _createIndexRecord (line 140) | _createIndexRecord(e){this.index.set(e,void 0)}
method _onlyFileFilter (line 140) | _onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}
method _onlyDirectoryFilter (line 140) | _onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent...
method _isSkippedByAbsoluteNegativePatterns (line 140) | _isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)re...
method _isMatchToPatterns (line 140) | _isMatchToPatterns(e,r,s){let a=$d.pattern.matchAny(e,r);return!a&&s?$d....
method constructor (line 140) | constructor(e){this._settings=e}
method getFilter (line 140) | getFilter(){return e=>this._isNonFatalError(e)}
method _isNonFatalError (line 140) | _isNonFatalError(e){return mpt.errno.isEnoentCodeError(e)||this._setting...
method constructor (line 140) | constructor(e){this._settings=e}
method getTransformer (line 140) | getTransformer(){return e=>this._transform(e)}
method _transform (line 140) | _transform(e){let r=e.path;return this._settings.absolute&&(r=Zpe.path.m...
method constructor (line 140) | constructor(e){this._settings=e,this.errorFilter=new Cpt.default(this._s...
method _getRootDirectory (line 140) | _getRootDirectory(e){return ypt.resolve(this._settings.cwd,e.base)}
method _getReaderOptions (line 140) | _getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,path...
method _getMicromatchOptions (line 140) | _getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._se...
method constructor (line 140) | constructor(){super(...arguments),this._reader=new Bpt.default(this._set...
method read (line 140) | async read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e...
method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
method constructor (line 140) | constructor(){super(...arguments),this._reader=new Dpt.default(this._set...
method read (line 140) | read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e),a=th...
method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
method constructor (line 140) | constructor(){super(...arguments),this._walkSync=xpt.walkSync,this._stat...
method dynamic (line 140) | dynamic(e,r){return this._walkSync(e,r)}
method static (line 140) | static(e,r){let s=[];for(let a of e){let n=this._getFullEntryPath(a),c=t...
method _getEntry (line 140) | _getEntry(e,r,s){try{let a=this._getStat(e);return this._makeEntry(a,r)}...
method _getStat (line 140) | _getStat(e){return this._statSync(e,this._fsStatSettings)}
method constructor (line 140) | constructor(){super(...arguments),this._reader=new Qpt.default(this._set...
method read (line 140) | read(e){let r=this._getRootDirectory(e),s=this._getReaderOptions(e);retu...
method api (line 140) | api(e,r,s){return r.dynamic?this._reader.dynamic(e,s):this._reader.stati...
method constructor (line 140) | constructor(e={}){this._options=e,this.absolute=this._getValue(this._opt...
method _getValue (line 140) | _getValue(e,r){return e===void 0?r:e}
method _getFileSystemMethods (line 140) | _getFileSystemMethods(e={}){return Object.assign(Object.assign({},eI.DEF...
function q8 (line 140) | async function q8(t,e){qu(t);let r=G8(t,Npt.default,e),s=await Promise.a...
function e (line 140) | function e(h,E){qu(h);let C=G8(h,Lpt.default,E);return Rc.array.flatten(C)}
method constructor (line 227) | constructor(s){super(s)}
method submit (line 227) | async submit(){this.value=await t.call(this,this.values,this.state),su...
method create (line 227) | static create(s){return Jwe(s)}
function r (line 140) | function r(h,E){qu(h);let C=G8(h,Opt.default,E);return Rc.stream.merge(C)}
method constructor (line 227) | constructor(a){super({...a,choices:e})}
method create (line 227) | static create(a){return Zwe(a)}
function s (line 140) | function s(h,E){qu(h);let C=[].concat(h),S=new j8.default(E);return ihe....
function a (line 140) | function a(h,E){qu(h);let C=new j8.default(E);return Rc.pattern.isDynami...
function n (line 140) | function n(h){return qu(h),Rc.path.escape(h)}
function c (line 140) | function c(h){return qu(h),Rc.path.convertPathToPattern(h)}
function E (line 140) | function E(S){return qu(S),Rc.path.escapePosixPath(S)}
function C (line 140) | function C(S){return qu(S),Rc.path.convertPosixPathToPattern(S)}
function E (line 140) | function E(S){return qu(S),Rc.path.escapeWindowsPath(S)}
function C (line 140) | function C(S){return qu(S),Rc.path.convertWindowsPathToPattern(S)}
function G8 (line 140) | function G8(t,e,r){let s=[].concat(t),a=new j8.default(r),n=ihe.generate...
function qu (line 140) | function qu(t){if(![].concat(t).every(s=>Rc.string.isString(s)&&!Rc.stri...
function us (line 140) | function us(...t){let e=(0,vQ.createHash)("sha512"),r="";for(let s of t)...
function SQ (line 140) | async function SQ(t,{baseFs:e,algorithm:r}={baseFs:le,algorithm:"sha512"...
function DQ (line 140) | async function DQ(t,{cwd:e}){let s=(await(0,W8.default)(t,{cwd:ue.fromPo...
function ba (line 140) | function ba(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: d...
function On (line 140) | function On(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,...
function Ys (line 140) | function Ys(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,...
function Upt (line 140) | function Upt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}
function bQ (line 140) | function bQ(t){return{identHash:t.identHash,scope:t.scope,name:t.name,lo...
function V8 (line 140) | function V8(t){return{identHash:t.identHash,scope:t.scope,name:t.name,de...
function Hpt (line 140) | function Hpt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,l...
function K8 (line 140) | function K8(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,...
function zB (line 140) | function zB(t){return K8(t,t)}
function J8 (line 140) | function J8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");r...
function z8 (line 140) | function z8(t,e){if(e.includes("#"))throw new Error("Invalid entropy");r...
function Tp (line 140) | function Tp(t){return t.range.startsWith(JB)}
function Gu (line 140) | function Gu(t){return t.reference.startsWith(JB)}
function ZB (line 140) | function ZB(t){if(!Tp(t))throw new Error("Not a virtual descriptor");ret...
function rI (line 140) | function rI(t){if(!Gu(t))throw new Error("Not a virtual descriptor");ret...
function jpt (line 140) | function jpt(t){return Tp(t)?On(t,t.range.replace(PQ,"")):t}
function qpt (line 140) | function qpt(t){return Gu(t)?Ys(t,t.reference.replace(PQ,"")):t}
function Gpt (line 140) | function Gpt(t,e){return t.range.includes("::")?t:On(t,`${t.range}::${tI...
function Wpt (line 140) | function Wpt(t,e){return t.reference.includes("::")?t:Ys(t,`${t.referenc...
function XB (line 140) | function XB(t,e){return t.identHash===e.identHash}
function uhe (line 140) | function uhe(t,e){return t.descriptorHash===e.descriptorHash}
function $B (line 140) | function $B(t,e){return t.locatorHash===e.locatorHash}
function Ypt (line 140) | function Ypt(t,e){if(!Gu(t))throw new Error("Invalid package type");if(!...
function Da (line 140) | function Da(t){let e=fhe(t);if(!e)throw new Error(`Invalid ident (${t})`...
function fhe (line 140) | function fhe(t){let e=t.match(Vpt);if(!e)return null;let[,r,s]=e;return ...
function C0 (line 140) | function C0(t,e=!1){let r=ev(t,e);if(!r)throw new Error(`Invalid descrip...
function ev (line 140) | function ev(t,e=!1){let r=e?t.match(Kpt):t.match(Jpt);if(!r)return null;...
function Rp (line 140) | function Rp(t,e=!1){let r=xQ(t,e);if(!r)throw new Error(`Invalid locator...
function xQ (line 140) | function xQ(t,e=!1){let r=e?t.match(zpt):t.match(Zpt);if(!r)return null;...
function em (line 140) | function em(t,e){let r=t.match(Xpt);if(r===null)throw new Error(`Invalid...
function $pt (line 140) | function $pt(t,e){try{return em(t,e)}catch{return null}}
function eht (line 140) | function eht(t,{protocol:e}){let{selector:r,params:s}=em(t,{requireProto...
function ohe (line 140) | function ohe(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A...
function tht (line 140) | function tht(t){return t===null?!1:Object.entries(t).length>0}
function kQ (line 140) | function kQ({protocol:t,source:e,selector:r,params:s}){let a="";return t...
function rht (line 140) | function rht(t){let{params:e,protocol:r,source:s,selector:a}=em(t);for(l...
function cn (line 140) | function cn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}
function nht (line 140) | function nht(t,e){return t.scope?ba(e,`${t.scope}__${t.name}`):ba(e,t.na...
function iht (line 140) | function iht(t,e){if(t.scope!==e)return t;let r=t.name.indexOf("__");if(...
function ll (line 140) | function ll(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.na...
function cl (line 140) | function cl(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${...
function Y8 (line 140) | function Y8(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}
function nI (line 140) | function nI(t){let{protocol:e,selector:r}=em(t.reference),s=e!==null?e.r...
function $i (line 140) | function $i(t,e){return e.scope?`${Ut(t,`@${e.scope}/`,Ct.SCOPE)}${Ut(t,...
function QQ (line 140) | function QQ(t){if(t.startsWith(JB)){let e=QQ(t.substring(t.indexOf("#")+...
function iI (line 140) | function iI(t,e){return`${Ut(t,QQ(e),Ct.RANGE)}`}
function ri (line 140) | function ri(t,e){return`${$i(t,e)}${Ut(t,"@",Ct.RANGE)}${iI(t,e.range)}`}
function tv (line 140) | function tv(t,e){return`${Ut(t,QQ(e),Ct.REFERENCE)}`}
function Yr (line 140) | function Yr(t,e){return`${$i(t,e)}${Ut(t,"@",Ct.REFERENCE)}${tv(t,e.refe...
function w3 (line 140) | function w3(t){return`${cn(t)}@${QQ(t.reference)}`}
function sI (line 140) | function sI(t){return Ws(t,[e=>cn(e),e=>e.range])}
function rv (line 140) | function rv(t,e){return $i(t,e.anchoredLocator)}
function VB (line 140) | function VB(t,e,r){let s=Tp(e)?ZB(e):e;return r===null?`${ri(t,s)} \u219...
function B3 (line 140) | function B3(t,e,r){return r===null?`${Yr(t,e)}`:`${Yr(t,e)} (via ${iI(t,...
function Z8 (line 140) | function Z8(t){return`node_modules/${cn(t)}`}
function TQ (line 140) | function TQ(t,e){return t.conditions?_pt(t.conditions,r=>{let[,s,a]=r.ma...
function nv (line 140) | function nv(t){let e=new Set;if("children"in t)e.add(t);else for(let r o...
method supportsDescriptor (line 140) | supportsDescriptor(e,r){return!!(e.range.startsWith(t.protocol)||r.proje...
method supportsLocator (line 140) | supportsLocator(e,r){return!!e.reference.startsWith(t.protocol)}
method shouldPersistResolution (line 140) | shouldPersistResolution(e,r){return!1}
method bindDescriptor (line 140) | bindDescriptor(e,r,s){return e}
method getResolutionDependencies (line 140) | getResolutionDependencies(e,r){return{}}
method getCandidates (line 140) | async getCandidates(e,r,s){return[s.project.getWorkspaceByDescriptor(e)....
method getSatisfying (line 140) | async getSatisfying(e,r,s,a){let[n]=await this.getCandidates(e,r,a);retu...
method resolve (line 140) | async resolve(e,r){let s=r.project.getWorkspaceByCwd(e.reference.slice(t...
function eA (line 140) | function eA(t,e,r=!1){if(!t)return!1;let s=`${e}${r}`,a=hhe.get(s);if(ty...
function ul (line 140) | function ul(t){if(t.indexOf(":")!==-1)return null;let e=ghe.get(t);if(ty...
function lht (line 140) | function lht(t){let e=aht.exec(t);return e?e[1]:null}
function dhe (line 140) | function dhe(t){if(t.semver===Fp.default.Comparator.ANY)return{gt:null,l...
function X8 (line 140) | function X8(t){if(t.length===0)return null;let e=null,r=null;for(let s o...
function mhe (line 140) | function mhe(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1...
function $8 (line 140) | function $8(t){let e=t.map(cht).map(s=>ul(s).set.map(a=>a.map(n=>dhe(n))...
function cht (line 140) | function cht(t){let e=t.split("||");if(e.length>1){let r=new Set;for(let...
function Ehe (line 140) | function Ehe(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}
function Ihe (line 140) | function Ihe(t){return t.charCodeAt(0)===65279?t.slice(1):t}
function Pa (line 140) | function Pa(t){return t.replace(/\\/g,"/")}
function RQ (line 140) | function RQ(t,{yamlCompatibilityMode:e}){return e?h3(t):typeof t>"u"||ty...
function Che (line 140) | function Che(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let s...
function eH (line 140) | function eH(t,e){return e.length===1?Che(t,e[0]):`(${e.map(r=>Che(t,r))....
method constructor (line 140) | constructor(){this.indent=" ";this.name=null;this.version=null;this.os=...
method tryFind (line 140) | static async tryFind(e,{baseFs:r=new Yn}={}){let s=K.join(e,"package.jso...
method find (line 140) | static async find(e,{baseFs:r}={}){let s=await t.tryFind(e,{baseFs:r});i...
method fromFile (line 140) | static async fromFile(e,{baseFs:r=new Yn}={}){let s=new t;return await s...
method fromText (line 140) | static fromText(e){let r=new t;return r.loadFromText(e),r}
method loadFromText (line 140) | loadFromText(e){let r;try{r=JSON.parse(Ihe(e)||"{}")}catch(s){throw s.me...
method loadFile (line 140) | async loadFile(e,{baseFs:r=new Yn}){let s=await r.readFilePromise(e,"utf...
method load (line 140) | load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)...
method getForScope (line 140) | getForScope(e){switch(e){case"dependencies":return this.dependencies;cas...
method hasConsumerDependency (line 140) | hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||th...
method hasHardDependency (line 140) | hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.d...
method hasSoftDependency (line 140) | hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}
method hasDependency (line 140) | hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDepende...
method getConditions (line 140) | getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(eH("os...
method ensureDependencyMeta (line 140) | ensureDependencyMeta(e){if(e.range!=="unknown"&&!whe.default.valid(e.ran...
method ensurePeerDependencyMeta (line 140) | ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Inva...
method setRawField (line 140) | setRawField(e,r,{after:s=[]}={}){let a=new Set(s.filter(n=>Object.hasOwn...
method exportTo (line 140) | exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),thi...
function pht (line 140) | function pht(t){for(var e=t.length;e--&&Aht.test(t.charAt(e)););return e}
function dht (line 140) | function dht(t){return t&&t.slice(0,hht(t)+1).replace(ght,"")}
function Iht (line 140) | function Iht(t){return typeof t=="symbol"||yht(t)&&mht(t)==Eht}
function bht (line 140) | function bht(t){if(typeof t=="number")return t;if(wht(t))return Qhe;if(k...
function Tht (line 140) | function Tht(t,e,r){var s,a,n,c,f,p,h=0,E=!1,C=!1,S=!0;if(typeof t!="fun...
function Oht (line 140) | function Oht(t,e,r){var s=!0,a=!0;if(typeof t!="function")throw new Type...
function Mht (line 140) | function Mht(t){return typeof t.reportCode<"u"}
method constructor (line 140) | constructor(r,s,a){super(s);this.reportExtra=a;this.reportCode=r}
method constructor (line 140) | constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.repor...
method getRecommendedLength (line 140) | getRecommendedLength(){return 180}
method reportCacheHit (line 140) | reportCacheHit(e){this.cacheHits.add(e.locatorHash)}
method reportCacheMiss (line 140) | reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}
method progressViaCounter (line 140) | static progressViaCounter(e){let r=0,s,a=new Promise(p=>{s=p}),n=p=>{let...
method progressViaTitle (line 140) | static progressViaTitle(){let e,r,s=new Promise(c=>{r=c}),a=(0,Mhe.defau...
method startProgressPromise (line 140) | async startProgressPromise(e,r){let s=this.reportProgress(e);try{return ...
method startProgressSync (line 140) | startProgressSync(e,r){let s=this.reportProgress(e);try{return r(e)}fina...
method reportInfoOnce (line 140) | reportInfoOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedInfos.has(a)||...
method reportWarningOnce (line 140) | reportWarningOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedWarnings.ha...
method reportErrorOnce (line 140) | reportErrorOnce(e,r,s){let a=s&&s.key?s.key:r;this.reportedErrors.has(a)...
method reportExceptionOnce (line 140) | reportExceptionOnce(e){Mht(e)?this.reportErrorOnce(e.reportCode,e.messag...
method createStreamReporter (line 140) | createStreamReporter(e=null){let r=new _he.PassThrough,s=new Uhe.StringD...
method constructor (line 141) | constructor(e){this.fetchers=e}
method supports (line 141) | supports(e,r){return!!this.tryFetcher(e,r)}
method getLocalPath (line 141) | getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}
method fetch (line 141) | async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}
method tryFetcher (line 141) | tryFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));return s||n...
method getFetcher (line 141) | getFetcher(e,r){let s=this.fetchers.find(a=>a.supports(e,r));if(!s)throw...
method constructor (line 141) | constructor(e){this.resolvers=e.filter(r=>r)}
method supportsDescriptor (line 141) | supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}
method supportsLocator (line 141) | supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}
method shouldPersistResolution (line 141) | shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shoul...
method bindDescriptor (line 141) | bindDescriptor(e,r,s){return this.getResolverByDescriptor(e,s).bindDescr...
method getResolutionDependencies (line 141) | getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r)....
method getCandidates (line 141) | async getCandidates(e,r,s){return await this.getResolverByDescriptor(e,s...
method getSatisfying (line 141) | async getSatisfying(e,r,s,a){return this.getResolverByDescriptor(e,a).ge...
method resolve (line 141) | async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e...
method tryResolverByDescriptor (line 141) | tryResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDesc...
method getResolverByDescriptor (line 141) | getResolverByDescriptor(e,r){let s=this.resolvers.find(a=>a.supportsDesc...
method tryResolverByLocator (line 141) | tryResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator...
method getResolverByLocator (line 141) | getResolverByLocator(e,r){let s=this.resolvers.find(a=>a.supportsLocator...
method supports (line 141) | supports(e){return!!e.reference.startsWith("virtual:")}
method getLocalPath (line 141) | getLocalPath(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Err...
method fetch (line 141) | async fetch(e,r){let s=e.reference.indexOf("#");if(s===-1)throw new Erro...
method getLocatorFilename (line 141) | getLocatorFilename(e){return nI(e)}
method ensureVirtualLink (line 141) | async ensureVirtualLink(e,r,s){let a=r.packageFs.getRealPath(),n=s.proje...
method isVirtualDescriptor (line 141) | static isVirtualDescriptor(e){return!!e.range.startsWith(t.protocol)}
method isVirtualLocator (line 141) | static isVirtualLocator(e){return!!e.reference.startsWith(t.protocol)}
method supportsDescriptor (line 141) | supportsDescriptor(e,r){return t.isVirtualDescriptor(e)}
method supportsLocator (line 141) | supportsLocator(e,r){return t.isVirtualLocator(e)}
method shouldPersistResolution (line 141) | shouldPersistResolution(e,r){return!1}
method bindDescriptor (line 141) | bindDescriptor(e,r,s){throw new Error('Assertion failed: calling "bindDe...
method getResolutionDependencies (line 141) | getResolutionDependencies(e,r){throw new Error('Assertion failed: callin...
method getCandidates (line 141) | async getCandidates(e,r,s){throw new Error('Assertion failed: calling "g...
method getSatisfying (line 141) | async getSatisfying(e,r,s,a){throw new Error('Assertion failed: calling ...
method resolve (line 141) | async resolve(e,r){throw new Error('Assertion failed: calling "resolve" ...
method supports (line 141) | supports(e){return!!e.reference.startsWith(yi.protocol)}
method getLocalPath (line 141) | getLocalPath(e,r){return this.getWorkspace(e,r).cwd}
method fetch (line 141) | async fetch(e,r){let s=this.getWorkspace(e,r).cwd;return{packageFs:new S...
method getWorkspace (line 141) | getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(y...
function iv (line 141) | function iv(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}
function jhe (line 141) | function jhe(t){return typeof t>"u"?3:iv(t)?0:Array.isArray(t)?1:2}
function cH (line 141) | function cH(t,e){return Object.hasOwn(t,e)}
function Uht (line 141) | function Uht(t){return iv(t)&&cH(t,"onConflict")&&typeof t.onConflict=="...
function Hht (line 141) | function Hht(t){if(typeof t>"u")return{onConflict:"default",value:t};if(...
function qhe (line 141) | function qhe(t,e){let r=iv(t)&&cH(t,e)?t[e]:void 0;return Hht(r)}
function fI (line 141) | function fI(t,e){return[t,e,Ghe]}
function uH (line 141) | function uH(t){return Array.isArray(t)?t[2]===Ghe:!1}
function aH (line 141) | function aH(t,e){if(iv(t)){let r={};for(let s of Object.keys(t))r[s]=aH(...
function lH (line 141) | function lH(t,e,r,s,a){let n,c=[],f=a,p=0;for(let E=a-1;E>=s;--E){let[C,...
function Whe (line 141) | function Whe(t){return lH(t.map(([e,r])=>[e,{".":r}]),[],".",0,t.length)}
function sv (line 141) | function sv(t){return uH(t)?t[1]:t}
function NQ (line 141) | function NQ(t){let e=uH(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>NQ...
function fH (line 141) | function fH(t){return uH(t)?t[0]:null}
function pH (line 141) | function pH(){if(process.platform==="win32"){let t=ue.toPortablePath(pro...
function AI (line 141) | function AI(){return ue.toPortablePath((0,AH.homedir)()||"/usr/local/sha...
function hH (line 141) | function hH(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K...
function Yht (line 141) | function Yht(t){var e=new Op(t);return e.request=gH.request,e}
function Vht (line 141) | function Vht(t){var e=new Op(t);return e.request=gH.request,e.createSock...
function Kht (line 141) | function Kht(t){var e=new Op(t);return e.request=Vhe.request,e}
function Jht (line 141) | function Jht(t){var e=new Op(t);return e.request=Vhe.request,e.createSoc...
function Op (line 141) | function Op(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy...
function p (line 141) | function p(){n.emit("free",f,c)}
function h (line 141) | function h(E){n.removeSocket(f),f.removeListener("free",p),f.removeListe...
function f (line 141) | function f(C){C.upgrade=!0}
function p (line 141) | function p(C,S,P){process.nextTick(function(){h(C,S,P)})}
function h (line 141) | function h(C,S,P){if(c.removeAllListeners(),S.removeAllListeners(),C.sta...
function E (line 141) | function E(C){c.removeAllListeners(),w0(`tunneling socket could not be e...
function Khe (line 142) | function Khe(t,e){var r=this;Op.prototype.createSocket.call(r,t,function...
function Jhe (line 142) | function Jhe(t,e,r){return typeof t=="string"?{host:t,port:e,localAddres...
function dH (line 142) | function dH(t){for(var e=1,r=arguments.length;e<r;++e){var s=arguments[e...
function zht (line 142) | function zht(t){return $he.includes(t)}
function Xht (line 142) | function Xht(t){return Zht.includes(t)}
function e0t (line 142) | function e0t(t){return $ht.includes(t)}
function hI (line 142) | function hI(t){return e=>typeof e===t}
function be (line 142) | function be(t){if(t===null)return"null";switch(typeof t){case"undefined"...
method constructor (line 142) | constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}
method isCanceled (line 142) | get isCanceled(){return!0}
method fn (line 142) | static fn(e){return(...r)=>new t((s,a,n)=>{r.push(n),e(...r).then(s,a)})}
method constructor (line 142) | constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCancel...
method then (line 142) | then(e,r){return this._promise.then(e,r)}
method catch (line 142) | catch(e){return this._promise.catch(e)}
method finally (line 142) | finally(e){return this._promise.finally(e)}
method cancel (line 142) | cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandl...
method isCanceled (line 142) | get isCanceled(){return this._isCanceled}
function a0t (line 142) | function a0t(t){return t.encrypted}
method constructor (line 142) | constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:s=3600,errorT...
method servers (line 142) | set servers(e){this.clear(),this._resolver.setServers(e)}
method servers (line 142) | get servers(){return this._resolver.getServers()}
method lookup (line 142) | lookup(e,r,s){if(typeof r=="function"?(s=r,r={}):typeof r=="number"&&(r=...
method lookupAsync (line 142) | async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let s=await...
method query (line 142) | async query(e){let r=await this._cache.get(e);if(!r){let s=this._pending...
method _resolve (line 142) | async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code=...
method _lookup (line 142) | async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),ca...
method _set (line 142) | async _set(e,r,s){if(this.maxTtl>0&&s>0){s=Math.min(s,this.maxTtl)*1e3,r...
method queryAndCache (line 142) | async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._...
method _tick (line 142) | _tick(e){let r=this._nextRemovalTime;(!r||e<r)&&(clearTimeout(this._remo...
method install (line 142) | install(e){if(l0e(e),gI in e)throw new Error("CacheableLookup has been a...
method uninstall (line 142) | uninstall(e){if(l0e(e),e[gI]){if(e[SH]!==this)throw new Error("The agent...
method updateInterfaceInfo (line 142) | updateInterfaceInfo(){let{_iface:e}=this;this._iface=c0e(),(e.has4&&!thi...
method clear (line 142) | clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}
function d0e (line 142) | function d0e(t,e){if(t&&e)return d0e(t)(e);if(typeof t!="function")throw...
function jQ (line 142) | function jQ(t){var e=function(){return e.called?e.value:(e.called=!0,e.v...
function I0e (line 142) | function I0e(t){var e=function(){if(e.called)throw new Error(e.onceError...
method constructor (line 142) | constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}
function WQ (line 142) | async function WQ(t,e){if(!t)return Promise.reject(new Error("Expected a...
function nm (line 142) | function nm(t){let e=parseInt(t,10);return isFinite(e)?e:0}
function j0t (line 142) | function j0t(t){return t?_0t.has(t.status):!0}
function TH (line 142) | function TH(t){let e={};if(!t)return e;let r=t.trim().split(/,/);for(let...
function q0t (line 142) | function q0t(t){let e=[];for(let r in t){let s=t[r];e.push(s===!0?r:r+"=...
method constructor (line 142) | constructor(e,r,{shared:s,cacheHeuristic:a,immutableMinTimeToLive:n,igno...
method now (line 142) | now(){return Date.now()}
method storable (line 142) | storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||thi...
method _hasExplicitExpiration (line 142) | _hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]|...
method _assertRequestHasHeaders (line 142) | _assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request heade...
method satisfiesWithoutRevalidation (line 142) | satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=T...
method _requestMatches (line 142) | _requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host==...
method _allowsStoringAuthenticated (line 142) | _allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||thi...
method _varyMatches (line 142) | _varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.v...
method _copyWithoutHopByHopHeaders (line 142) | _copyWithoutHopByHopHeaders(e){let r={};for(let s in e)U0t[s]||(r[s]=e[s...
method responseHeaders (line 142) | responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeader...
method date (line 142) | date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this...
method age (line 142) | age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;retur...
method _ageValue (line 142) | _ageValue(){return nm(this._resHeaders.age)}
method maxAge (line 142) | maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&t...
method timeToLive (line 142) | timeToLive(){let e=this.maxAge()-this.age(),r=e+nm(this._rescc["stale-if...
method stale (line 142) | stale(){return this.maxAge()<=this.age()}
method _useStaleIfError (line 142) | _useStaleIfError(){return this.maxAge()+nm(this._rescc["stale-if-error"]...
method useStaleWhileRevalidate (line 142) | useStaleWhileRevalidate(){return this.maxAge()+nm(this._rescc["stale-whi...
method fromObject (line 142) | static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}
method _fromObject (line 142) | _fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e|...
method toObject (line 142) | toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._ca...
method revalidationHeaders (line 142) | revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copy...
method revalidatedPolicy (line 142) | revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStal...
method constructor (line 142) | constructor(e,r,s,a){if(typeof e!="number")throw new TypeError("Argument...
method _read (line 142) | _read(){this.push(this.body),this.push(null)}
method constructor (line 142) | constructor(e,{emitErrors:r=!0,...s}={}){if(super(),this.opts={namespace...
method _checkIterableAdaptar (line 142) | _checkIterableAdaptar(){return U0e.includes(this.opts.store.opts.dialect...
method _getKeyPrefix (line 142) | _getKeyPrefix(e){return`${this.opts.namespace}:${e}`}
method _getKeyPrefixArray (line 142) | _getKeyPrefixArray(e){return e.map(r=>`${this.opts.namespace}:${r}`)}
method _getKeyUnprefix (line 142) | _getKeyUnprefix(e){return e.split(":").splice(1).join(":")}
method get (line 142) | get(e,r){let{store:s}=this.opts,a=Array.isArray(e),n=a?this._getKeyPrefi...
method set (line 142) | set(e,r,s){let a=this._getKeyPrefix(e);typeof s>"u"&&(s=this.opts.ttl),s...
method delete (line 142) | delete(e){let{store:r}=this.opts;if(Array.isArray(e)){let a=this._getKey...
method clear (line 142) | clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear...
method has (line 142) | has(e){let r=this._getKeyPrefix(e),{store:s}=this.opts;return Promise.re...
method disconnect (line 142) | disconnect(){let{store:e}=this.opts;if(typeof e.disconnect=="function")r...
method constructor (line 142) | constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter ...
method createCacheableRequest (line 142) | createCacheableRequest(e){return(r,s)=>{let a;if(typeof r=="string")a=LH...
function igt (line 142) | function igt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search...
function LH (line 142) | function LH(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostnam...
method constructor (line 142) | constructor(t){super(t.message),this.name="RequestError",Object.assign(t...
method constructor (line 142) | constructor(t){super(t.message),this.name="CacheError",Object.assign(thi...
method get (line 142) | get(){let n=t[a];return typeof n=="function"?n.bind(t):n}
method set (line 142) | set(n){t[a]=n}
method transform (line 142) | transform(f,p,h){s=!1,h(null,f)}
method flush (line 142) | flush(f){f()}
method destroy (line 142) | destroy(f,p){t.destroy(),p(f)}
method constructor (line 142) | constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`max...
method _set (line 142) | _set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){...
method get (line 142) | get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.ha...
method set (line 142) | set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}
method has (line 142) | has(e){return this.cache.has(e)||this.oldCache.has(e)}
method peek (line 142) | peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.h...
method delete (line 142) | delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCach...
method clear (line 142) | clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}
method keys (line 142) | *keys(){for(let[e]of this)yield e}
method values (line 142) | *values(){for(let[,e]of this)yield e}
method [Symbol.iterator] (line 142) | *[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.o...
method size (line 142) | get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||...
method constructor (line 142) | constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:s=10,maxCac...
method normalizeOrigin (line 142) | static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&...
method normalizeOptions (line 142) | normalizeOptions(e){let r="";if(e)for(let s of pgt)e[s]&&(r+=`:${e[s]}`)...
method _tryToCreateNewSession (line 142) | _tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e])...
method getSession (line 142) | getSession(e,r,s){return new Promise((a,n)=>{Array.isArray(s)?(s=[...s],...
method request (line 143) | request(e,r,s,a){return new Promise((n,c)=>{this.getSession(e,r,[{reject...
method createConnection (line 143) | createConnection(e,r){return t.connect(e,r)}
method connect (line 143) | static connect(e,r){r.ALPNProtocols=["h2"];let s=e.port||443,a=e.hostnam...
method closeFreeSessions (line 143) | closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r ...
method destroy (line 143) | destroy(e){for(let r of Object.values(this.sessions))for(let s of r)s.de...
method freeSessions (line 143) | get freeSessions(){return X0e({agent:this,isFree:!0})}
method busySessions (line 143) | get busySessions(){return X0e({agent:this,isFree:!1})}
method constructor (line 143) | constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode...
method _destroy (line 143) | _destroy(e){this.req._request.destroy(e)}
method setTimeout (line 143) | setTimeout(e,r){return this.req.setTimeout(e,r),this}
method _dump (line 143) | _dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),t...
method _read (line 143) | _read(){this.req&&this.req._request.resume()}
method constructor (line 143) | constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.na...
method constructor (line 143) | constructor(e,r,s){super({autoDestroy:!1});let a=typeof e=="string"||e i...
method method (line 143) | get method(){return this[Jo][Age]}
method method (line 143) | set method(e){e&&(this[Jo][Age]=e.toUpperCase())}
method path (line 143) | get path(){return this[Jo][pge]}
method path (line 143) | set path(e){e&&(this[Jo][pge]=e)}
method _mustNotHaveABody (line 143) | get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"...
method _write (line 143) | _write(e,r,s){if(this._mustNotHaveABody){s(new Error("The GET, HEAD and ...
method _final (line 143) | _final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(thi...
method abort (line 143) | abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=...
method _destroy (line 143) | _destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.de...
method flushHeaders (line 143) | async flushHeaders(){if(this[KQ]||this.destroyed)return;this[KQ]=!0;let ...
method getHeader (line 143) | getHeader(e){if(typeof e!="string")throw new YH("name","string",e);retur...
method headersSent (line 143) | get headersSent(){return this[KQ]}
method removeHeader (line 143) | removeHeader(e){if(typeof e!="string")throw new YH("name","string",e);if...
method setHeader (line 143) | setHeader(e,r){if(this.headersSent)throw new uge("set");if(typeof e!="st...
method setNoDelay (line 143) | setNoDelay(){}
method setSocketKeepAlive (line 143) | setSocketKeepAlive(){}
method setTimeout (line 143) | setTimeout(e,r){let s=()=>this._request.setTimeout(e,r);return this._req...
method maxHeadersCount (line 143) | get maxHeadersCount(){if(!this.destroyed&&this._request)return this._req...
method maxHeadersCount (line 143) | set maxHeadersCount(e){}
function Kgt (line 143) | function Kgt(t,e,r){let s={};for(let a of r)s[a]=(...n)=>{e.emit(a,...n)...
method once (line 143) | once(e,r,s){e.once(r,s),t.push({origin:e,event:r,fn:s})}
method unhandleAll (line 143) | unhandleAll(){for(let e of t){let{origin:r,event:s,fn:a}=e;r.removeListe...
method constructor (line 143) | constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=...
method constructor (line 143) | constructor(){this.weakMap=new WeakMap,this.map=new Map}
method set (line 143) | set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}
method get (line 143) | get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}
method has (line 143) | has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}
function Edt (line 143) | function Edt(t){for(let e in t){let r=t[e];if(!at.default.string(r)&&!at...
function Idt (line 143) | function Idt(t){return at.default.object(t)&&!("statusCode"in t)}
method constructor (line 143) | constructor(e,r,s){var a;if(super(e),Error.captureStackTrace(this,this.c...
method constructor (line 147) | constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborti...
method constructor (line 147) | constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})...
method constructor (line 147) | constructor(e,r){super(e.message,e,r),this.name="CacheError"}
method constructor (line 147) | constructor(e,r){super(e.message,e,r),this.name="UploadError"}
method constructor (line 147) | constructor(e,r,s){super(e.message,e,s),this.name="TimeoutError",this.ev...
method constructor (line 147) | constructor(e,r){super(e.message,e,r),this.name="ReadError"}
method constructor (line 147) | constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),th...
method constructor (line 147) | constructor(e,r={},s){super({autoDestroy:!1,highWaterMark:0}),this[II]=0...
method normalizeArguments (line 147) | static normalizeArguments(e,r,s){var a,n,c,f,p;let h=r;if(at.default.obj...
method _lockWrite (line 147) | _lockWrite(){let e=()=>{throw new TypeError("The payload has been alread...
method _unlockWrite (line 147) | _unlockWrite(){this.write=super.write,this.end=super.end}
method _finalizeBody (line 147) | async _finalizeBody(){let{options:e}=this,{headers:r}=e,s=!at.default.un...
method _onResponseBase (line 147) | async _onResponseBase(e){let{options:r}=this,{url:s}=r;this[ede]=e,r.dec...
method _onResponse (line 147) | async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._be...
method _onRequest (line 147) | _onRequest(e){let{options:r}=this,{timeout:s,url:a}=r;sdt.default(e),thi...
method _createCacheableRequest (line 147) | async _createCacheableRequest(e,r){return new Promise((s,a)=>{Object.ass...
method _makeRequest (line 147) | async _makeRequest(){var e,r,s,a,n;let{options:c}=this,{headers:f}=c;for...
method _error (line 147) | async _error(e){try{for(let r of this.options.hooks.beforeError)e=await ...
method _beforeError (line 147) | _beforeError(e){if(this[BI])return;let{options:r}=this,s=this.retryCount...
method _read (line 147) | _read(){this[$Q]=!0;let e=this[eT];if(e&&!this[BI]){e.readableLength&&(t...
method _write (line 147) | _write(e,r,s){let a=()=>{this._writeRequest(e,r,s)};this.requestInitiali...
method _writeRequest (line 147) | _writeRequest(e,r,s){this[go].destroyed||(this._progressCallbacks.push((...
method _final (line 147) | _final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._prog...
method _destroy (line 147) | _destroy(e,r){var s;this[BI]=!0,clearTimeout(this[tde]),go in this&&(thi...
method _isAboutToError (line 147) | get _isAboutToError(){return this[BI]}
method ip (line 147) | get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteA...
method aborted (line 147) | get aborted(){var e,r,s;return((r=(e=this[go])===null||e===void 0?void 0...
method socket (line 147) | get socket(){var e,r;return(r=(e=this[go])===null||e===void 0?void 0:e.s...
method downloadProgress (line 147) | get downloadProgress(){let e;return this[EI]?e=this[II]/this[EI]:this[EI...
method uploadProgress (line 147) | get uploadProgress(){let e;return this[CI]?e=this[wI]/this[CI]:this[CI]=...
method timings (line 147) | get timings(){var e;return(e=this[go])===null||e===void 0?void 0:e.timings}
method isFromCache (line 147) | get isFromCache(){return this[Xge]}
method pipe (line 147) | pipe(e,r){if(this[$ge])throw new Error("Failed to pipe. The response has...
method unpipe (line 147) | unpipe(e){return e instanceof gj.ServerResponse&&this[XQ].delete(e),supe...
method constructor (line 147) | constructor(e,r){let{options:s}=r.request;super(`${e.message} in "${s.ur...
method constructor (line 147) | constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}
method isCanceled (line 147) | get isCanceled(){return!0}
function lde (line 147) | function lde(t){let e,r,s=new kdt.EventEmitter,a=new Tdt((c,f,p)=>{let h...
function Ldt (line 147) | function Ldt(t,...e){let r=(async()=>{if(t instanceof Odt.RequestError)t...
function fde (line 147) | function fde(t){for(let e of Object.values(t))(ude.default.plainObject(e...
function vde (line 147) | function vde(t){let e=new URL(t),r={host:e.hostname,headers:{}};return e...
function bj (line 147) | async function bj(t){return Vl(Bde,t,()=>le.readFilePromise(t).then(e=>(...
function Xdt (line 147) | function Xdt({statusCode:t,statusMessage:e},r){let s=Ut(r,t,Ct.NUMBER),a...
function AT (line 147) | async function AT(t,{configuration:e,customErrorMessage:r}){try{return a...
function bde (line 147) | function bde(t,e){let r=[...e.configuration.get("networkSettings")].sort...
function mv (line 147) | async function mv(t,e,{configuration:r,headers:s,jsonRequest:a,jsonRespo...
function kj (line 147) | async function kj(t,{configuration:e,jsonResponse:r,customErrorMessage:s...
function $dt (line 147) | async function $dt(t,e,{customErrorMessage:r,...s}){return(await AT(mv(t...
function Qj (line 147) | async function Qj(t,e,{customErrorMessage:r,...s}){return(await AT(mv(t,...
function emt (line 147) | async function emt(t,{customErrorMessage:e,...r}){return(await AT(mv(t,n...
function tmt (line 147) | async function tmt(t,e,{configuration:r,headers:s,jsonRequest:a,jsonResp...
function smt (line 147) | function smt(){if(process.platform==="darwin"||process.platform==="win32...
function yv (line 147) | function yv(){return kde=kde??{os:process.platform,cpu:process.arch,libc...
function omt (line 147) | function omt(t=yv()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}...
function Tj (line 147) | function Tj(){let t=yv();return Qde=Qde??{os:[t.os],cpu:[t.cpu],libc:t.l...
function cmt (line 147) | function cmt(t){let e=amt.exec(t);if(!e)return null;let r=e[2]&&e[2].ind...
function umt (line 147) | function umt(){let e=new Error().stack.split(`
function Rj (line 148) | function Rj(){return typeof hT.default.availableParallelism<"u"?hT.defau...
function _j (line 148) | function _j(t,e,r,s,a){let n=sv(r);if(s.isArray||s.type==="ANY"&&Array.i...
function Nj (line 148) | function Nj(t,e,r,s,a){let n=sv(r);switch(s.type){case"ANY":return NQ(n)...
function hmt (line 148) | function hmt(t,e,r,s,a){let n=sv(r);if(typeof n!="object"||Array.isArray...
function gmt (line 148) | function gmt(t,e,r,s,a){let n=sv(r),c=new Map;if(typeof n!="object"||Arr...
function Uj (line 148) | function Uj(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e...
function yT (line 148) | function yT(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecre...
function dmt (line 148) | function dmt(){let t={};for(let[e,r]of Object.entries(process.env))e=e.t...
function Lj (line 148) | function Lj(){let t=`${ET}rc_filename`;for(let[e,r]of Object.entries(pro...
function Tde (line 148) | async function Tde(t){try{return await le.readFilePromise(t)}catch{retur...
function mmt (line 148) | async function mmt(t,e){return Buffer.compare(...await Promise.all([Tde(...
function ymt (line 148) | async function ymt(t,e){let[r,s]=await Promise.all([le.statPromise(t),le...
function Imt (line 148) | async function Imt({configuration:t,selfPath:e}){let r=t.get("yarnPath")...
method constructor (line 148) | constructor(e){this.isCI=Up.isCI;this.projectCwd=null;this.plugins=new M...
method create (line 148) | static create(e,r,s){let a=new t(e);typeof r<"u"&&!(r instanceof Map)&&(...
method find (line 148) | static async find(e,r,{strict:s=!0,usePathCheck:a=null,useRc:n=!0}={}){l...
method findRcFiles (line 148) | static async findRcFiles(e){let r=Lj(),s=[],a=e,n=null;for(;a!==n;){n=a;...
method findFolderRcFile (line 148) | static async findFolderRcFile(e){let r=K.join(e,Er.rc),s;try{s=await le....
method findProjectCwd (line 148) | static async findProjectCwd(e){let r=null,s=e,a=null;for(;s!==a;){if(a=s...
method updateConfiguration (line 148) | static async updateConfiguration(e,r,s={}){let a=Lj(),n=K.join(e,a),c=le...
method addPlugin (line 148) | static async addPlugin(e,r){r.length!==0&&await t.updateConfiguration(e,...
method updateHomeConfiguration (line 148) | static async updateHomeConfiguration(e){let r=AI();return await t.update...
method activatePlugin (line 148) | activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&th...
method importSettings (line 148) | importSettings(e){for(let[r,s]of Object.entries(e))if(s!=null){if(this.s...
method useWithSource (line 148) | useWithSource(e,r,s,a){try{this.use(e,r,s,a)}catch(n){throw n.message+=`...
method use (line 148) | use(e,r,s,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSe...
method get (line 148) | get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key...
method getSpecial (line 148) | getSpecial(e,{hideSecrets:r=!1,getNativePaths:s=!1}){let a=this.get(e),n...
method getSubprocessStreams (line 148) | getSubprocessStreams(e,{header:r,prefix:s,report:a}){let n,c,f=le.create...
method makeResolver (line 149) | makeResolver(){let e=[];for(let r of this.plugins.values())for(let s of ...
method makeFetcher (line 149) | makeFetcher(){let e=[];for(let r of this.plugins.values())for(let s of r...
method getLinkers (line 149) | getLinkers(){let e=[];for(let r of this.plugins.values())for(let s of r....
method getSupportedArchitectures (line 149) | getSupportedArchitectures(){let e=yv(),r=this.get("supportedArchitecture...
method isInteractive (line 149) | isInteractive({interactive:e,stdout:r}){return r.isTTY?e??this.get("pref...
method getPackageExtensions (line 149) | async getPackageExtensions(){if(this.packageExtensions!==null)return thi...
method normalizeLocator (line 149) | normalizeLocator(e){return ul(e.reference)?Ys(e,`${this.get("defaultProt...
method normalizeDependency (line 149) | normalizeDependency(e){return ul(e.range)?On(e,`${this.get("defaultProto...
method normalizeDependencyMap (line 149) | normalizeDependencyMap(e){return new Map([...e].map(([r,s])=>[r,this.nor...
method normalizePackage (line 149) | normalizePackage(e,{packageExtensions:r}){let s=zB(e),a=r.get(e.identHas...
method getLimit (line 149) | getLimit(e){return Vl(this.limits,e,()=>(0,Ode.default)(this.get(e)))}
method triggerHook (line 149) | async triggerHook(e,...r){for(let s of this.plugins.values()){let a=s.ho...
method triggerMultipleHooks (line 149) | async triggerMultipleHooks(e,r){for(let s of r)await this.triggerHook(e,...
method reduceHook (line 149) | async reduceHook(e,r,...s){let a=r;for(let n of this.plugins.values()){l...
method firstHook (line 149) | async firstHook(e,...r){for(let s of this.plugins.values()){let a=s.hook...
function om (line 149) | function om(t){return t!==null&&typeof t.fd=="number"}
function Hj (line 149) | function Hj(){}
function jj (line 149) | function jj(){for(let t of am)t.kill()}
function Yu (line 149) | async function Yu(t,e,{cwd:r,env:s=process.env,strict:a=!1,stdin:n=null,...
function Fj (line 149) | async function Fj(t,e,{cwd:r,env:s=process.env,encoding:a="utf8",strict:...
function Wj (line 149) | function Wj(t,e){let r=Cmt.get(e);return typeof r<"u"?128+r:t??1}
function wmt (line 149) | function wmt(t,e,{configuration:r,report:s}){s.reportError(1,` ${Zf(r,t...
method constructor (line 149) | constructor({fileName:e,code:r,signal:s}){let a=ze.create(K.cwd()),n=Ut(...
method constructor (line 149) | constructor({fileName:e,code:r,signal:s,stdout:a,stderr:n}){super({fileN...
function _de (line 149) | function _de(t){Mde=t}
function Bv (line 149) | function Bv(){return typeof Yj>"u"&&(Yj=Mde()),Yj}
function P (line 149) | function P(Je){return r.locateFile?r.locateFile(Je,S):S+Je}
function pe (line 149) | function pe(Je,st,St){switch(st=st||"i8",st.charAt(st.length-1)==="*"&&(...
function we (line 149) | function we(Je,st){Je||rs("Assertion failed: "+st)}
function Ee (line 149) | function Ee(Je){var st=r["_"+Je];return we(st,"Cannot call unknown funct...
function fe (line 149) | function fe(Je,st,St,lr,ee){var Ie={string:function(qi){var Tn=0;if(qi!=...
function se (line 149) | function se(Je,st,St,lr){St=St||[];var ee=St.every(function(Oe){return O...
function De (line 149) | function De(Je,st){if(!Je)return"";for(var St=Je+st,lr=Je;!(lr>=St)&&ke[...
function Re (line 149) | function Re(Je,st,St,lr){if(!(lr>0))return 0;for(var ee=St,Ie=St+lr-1,Oe...
function gt (line 149) | function gt(Je,st,St){return Re(Je,ke,st,St)}
function j (line 149) | function j(Je){for(var st=0,St=0;St<Je.length;++St){var lr=Je.charCodeAt...
function rt (line 149) | function rt(Je){var st=j(Je)+1,St=Ma(st);return St&&Re(Je,Ye,St,st),St}
function Fe (line 149) | function Fe(Je,st){Ye.set(Je,st)}
function Ne (line 149) | function Ne(Je,st){return Je%st>0&&(Je+=st-Je%st),Je}
function z (line 149) | function z(Je){Pe=Je,r.HEAP_DATA_VIEW=F=new DataView(Je),r.HEAP8=Ye=new ...
function Et (line 149) | function Et(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r....
function qt (line 149) | function qt(){lt=!0,Rs(xe)}
function ir (line 149) | function ir(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=...
function Pt (line 149) | function Pt(Je){oe.unshift(Je)}
function gn (line 149) | function gn(Je){xe.unshift(Je)}
function Pr (line 149) | function Pr(Je){Te.unshift(Je)}
function oi (line 149) | function oi(Je){Ir++,r.monitorRunDependencies&&r.monitorRunDependencies(...
function wo (line 149) | function wo(Je){if(Ir--,r.monitorRunDependencies&&r.monitorRunDependenci...
function rs (line 149) | function rs(Je){r.onAbort&&r.onAbort(Je),Je+="",te(Je),Ce=!0,g=1,Je="abo...
function Bo (line 149) | function Bo(Je){return Je.startsWith(eo)}
function to (line 149) | function to(Je){try{if(Je==Hi&&ce)return new Uint8Array(ce);var st=Me(Je...
function vo (line 149) | function vo(Je,st){var St,lr,ee;try{ee=to(Je),lr=new WebAssembly.Module(...
function RA (line 149) | function RA(){var Je={a:fu};function st(ee,Ie){var Oe=ee.exports;r.asm=O...
function pf (line 149) | function pf(Je){return F.getFloat32(Je,!0)}
function Eh (line 149) | function Eh(Je){return F.getFloat64(Je,!0)}
function Ih (line 149) | function Ih(Je){return F.getInt16(Je,!0)}
function ro (line 149) | function ro(Je){return F.getInt32(Je,!0)}
function jn (line 149) | function jn(Je,st){F.setInt32(Je,st,!0)}
function Rs (line 149) | function Rs(Je){for(;Je.length>0;){var st=Je.shift();if(typeof st=="func...
function no (line 149) | function no(Je,st){var St=new Date(ro((Je>>2)*4)*1e3);jn((st>>2)*4,St.ge...
function lu (line 149) | function lu(Je,st){return no(Je,st)}
function cu (line 149) | function cu(Je,st,St){ke.copyWithin(Je,st,st+St)}
function uu (line 149) | function uu(Je){try{return Be.grow(Je-Pe.byteLength+65535>>>16),z(Be.buf...
function FA (line 149) | function FA(Je){var st=ke.length;Je=Je>>>0;var St=2147483648;if(Je>St)re...
function NA (line 149) | function NA(Je){Ae(Je)}
function aa (line 149) | function aa(Je){var st=Date.now()/1e3|0;return Je&&jn((Je>>2)*4,st),st}
function la (line 149) | function la(){if(la.called)return;la.called=!0;var Je=new Date().getFull...
function OA (line 149) | function OA(Je){la();var st=Date.UTC(ro((Je+20>>2)*4)+1900,ro((Je+16>>2)...
function So (line 149) | function So(Je){if(typeof C=="boolean"&&C){var st;try{st=Buffer.from(Je,...
function Me (line 149) | function Me(Je){if(Bo(Je))return So(Je.slice(eo.length))}
function pc (line 149) | function pc(Je){if(Je=Je||f,Ir>0||(Et(),Ir>0))return;function st(){Qn||(...
method HEAPU8 (line 149) | get HEAPU8(){return t.HEAPU8}
function zj (line 149) | function zj(t,e){let r=t.indexOf(e);if(r<=0)return null;let s=r;for(;r>=...
method openPromise (line 149) | static async openPromise(e,r){let s=new t(r);try{return await e(s)}final...
method constructor (line 149) | constructor(e={}){let r=e.fileExtensions,s=e.readOnlyArchives,a=typeof r...
method constructor (line 149) | constructor(e,r){super(e),this.name="Libzip Error",this.code=r}
method constructor (line 149) | constructor(e){this.filesShouldBeCached=!0;let r="buffer"in e?e.buffer:e...
method getSymlinkCount (line 149) | getSymlinkCount(){return this.symlinkCount}
method getListings (line 149) | getListings(){return this.listings}
method stat (line 149) | stat(e){let r=this.libzip.struct.statS();if(this.libzip.statIndex(this.z...
method makeLibzipError (line 149) | makeLibzipError(e){let r=this.libzip.struct.errorCodeZip(e),s=this.libzi...
method setFileSource (line 149) | setFileSource(e,r,s){let a=this.allocateSource(s);try{let n=this.libzip....
method setMtime (line 149) | setMtime(e,r){if(this.libzip.file.setMtime(this.zip,e,0,r,0)===-1)throw ...
method getExternalAttributes (line 149) | getExternalAttributes(e){if(this.libzip.file.getExternalAttributes(this....
method setExternalAttributes (line 149) | setExternalAttributes(e,r,s){if(this.libzip.file.setExternalAttributes(t...
method locate (line 149) | locate(e){return this.libzip.name.locate(this.zip,e,0)}
method getFileSource (line 149) | getFileSource(e){let r=this.libzip.struct.statS();if(this.libzip.statInd...
method deleteEntry (line 149) | deleteEntry(e){if(this.libzip.delete(this.zip,e)===-1)throw this.makeLib...
method addDirectory (line 149) | addDirectory(e){let r=this.libzip.dir.add(this.zip,e);if(r===-1)throw th...
method getBufferAndClose (line 149) | getBufferAndClose(){try{if(this.libzip.source.keep(this.lzSource),this.l...
method allocateBuffer (line 149) | allocateBuffer(e){Buffer.isBuffer(e)||(e=Buffer.from(e));let r=this.libz...
method allocateUnattachedSource (line 149) | allocateUnattachedSource(e){let r=this.libzip.struct.errorS(),{buffer:s,...
method allocateSource (line 149) | allocateSource(e){let{buffer:r,byteLength:s}=this.allocateBuffer(e),a=th...
method discard (line 149) | discard(){this.libzip.discard(this.zip)}
function vmt (line 149) | function vmt(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof...
function BT (line 149) | function BT(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
method constructor (line 149) | constructor(r,s={}){super();this.listings=new Map;this.entries=new Map;t...
method getExtractHint (line 149) | getExtractHint(r){for(let s of this.entries.keys()){let a=this.pathUtils...
method getAllFiles (line 149) | getAllFiles(){return Array.from(this.entries.keys())}
method getRealPath (line 149) | getRealPath(){if(!this.path)throw new Error("ZipFS don't have real paths...
method prepareClose (line 149) | prepareClose(){if(!this.ready)throw or.EBUSY("archive closed, close");Ed...
method getBufferAndClose (line 149) | getBufferAndClose(){if(this.prepareClose(),this.entries.size===0)return ...
method discardAndClose (line 149) | discardAndClose(){this.prepareClose(),this.zipImpl.discard(),this.ready=!1}
method saveAndClose (line 149) | saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot...
method resolve (line 149) | resolve(r){return K.resolve(vt.root,r)}
method openPromise (line 149) | async openPromise(r,s,a){return this.openSync(r,s,a)}
method openSync (line 149) | openSync(r,s,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}...
method hasOpenFileHandles (line 149) | hasOpenFileHandles(){return!!this.fds.size}
method opendirPromise (line 149) | async opendirPromise(r,s){return this.opendirSync(r,s)}
method opendirSync (line 149) | opendirSync(r,s={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!t...
method readPromise (line 149) | async readPromise(r,s,a,n,c){return this.readSync(r,s,a,n,c)}
method readSync (line 149) | readSync(r,s,a=0,n=s.byteLength,c=-1){let f=this.fds.get(r);if(typeof f>...
method writePromise (line 149) | async writePromise(r,s,a,n,c){return typeof s=="string"?this.writeSync(r...
method writeSync (line 149) | writeSync(r,s,a,n,c){throw typeof this.fds.get(r)>"u"?or.EBADF("read"):n...
method closePromise (line 149) | async closePromise(r){return this.closeSync(r)}
method closeSync (line 149) | closeSync(r){if(typeof this.fds.get(r)>"u")throw or.EBADF("read");this.f...
method createReadStream (line 149) | createReadStream(r,{encoding:s}={}){if(r===null)throw new Error("Unimple...
method createWriteStream (line 149) | createWriteStream(r,{encoding:s}={}){if(this.readOnly)throw or.EROFS(`op...
method realpathPromise (line 149) | async realpathPromise(r){return this.realpathSync(r)}
method realpathSync (line 149) | realpathSync(r){let s=this.resolveFilename(`lstat '${r}'`,r);if(!this.en...
method existsPromise (line 149) | async existsPromise(r){return this.existsSync(r)}
method existsSync (line 149) | existsSync(r){if(!this.ready)throw or.EBUSY(`archive closed, existsSync ...
method accessPromise (line 149) | async accessPromise(r,s){return this.accessSync(r,s)}
method accessSync (line 149) | accessSync(r,s=ka.constants.F_OK){let a=this.resolveFilename(`access '${...
method statPromise (line 149) | async statPromise(r,s={bigint:!1}){return s.bigint?this.statSync(r,{bigi...
method statSync (line 149) | statSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`...
method fstatPromise (line 149) | async fstatPromise(r,s){return this.fstatSync(r,s)}
method fstatSync (line 149) | fstatSync(r,s){let a=this.fds.get(r);if(typeof a>"u")throw or.EBADF("fst...
method lstatPromise (line 149) | async lstatPromise(r,s={bigint:!1}){return s.bigint?this.lstatSync(r,{bi...
method lstatSync (line 149) | lstatSync(r,s={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(...
method statImpl (line 149) | statImpl(r,s,a={}){let n=this.entries.get(s);if(typeof n<"u"){let c=this...
method getUnixMode (line 149) | getUnixMode(r,s){let[a,n]=this.zipImpl.getExternalAttributes(r);return a...
method registerListing (line 149) | registerListing(r){let s=this.listings.get(r);if(s)return s;this.registe...
method registerEntry (line 149) | registerEntry(r,s){this.registerListing(K.dirname(r)).add(K.basename(r))...
method unregisterListing (line 149) | unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname...
method unregisterEntry (line 149) | unregisterEntry(r){this.unregisterListing(r);let s=this.entries.get(r);t...
method deleteEntry (line 149) | deleteEntry(r,s){this.unregisterEntry(r),this.zipImpl.deleteEntry(s)}
method resolveFilename (line 149) | resolveFilename(r,s,a=!0,n=!0){if(!this.ready)throw or.EBUSY(`archive cl...
method setFileSource (line 149) | setFileSource(r,s){let a=Buffer.isBuffer(s)?s:Buffer.from(s),n=K.relativ...
method isSymbolicLink (line 149) | isSymbolicLink(r){if(this.symlinkCount===0)return!1;let[s,a]=this.zipImp...
method getFileSource (line 149) | getFileSource(r,s={asyncDecompress:!1}){let a=this.fileSources.get(r);if...
method fchmodPromise (line 149) | async fchmodPromise(r,s){return this.chmodPromise(this.fdToPath(r,"fchmo...
method fchmodSync (line 149) | fchmodSync(r,s){return this.chmodSync(this.fdToPath(r,"fchmodSync"),s)}
method chmodPromise (line 149) | async chmodPromise(r,s){return this.chmodSync(r,s)}
method chmodSync (line 149) | chmodSync(r,s){if(this.readOnly)throw or.EROFS(`chmod '${r}'`);s&=493;le...
method fchownPromise (line 149) | async fchownPromise(r,s,a){return this.chownPromise(this.fdToPath(r,"fch...
method fchownSync (line 149) | fchownSync(r,s,a){return this.chownSync(this.fdToPath(r,"fchownSync"),s,a)}
method chownPromise (line 149) | async chownPromise(r,s,a){return this.chownSync(r,s,a)}
method chownSync (line 149) | chownSync(r,s,a){throw new Error("Unimplemented")}
method renamePromise (line 149) | async renamePromise(r,s){return this.renameSync(r,s)}
method renameSync (line 149) | renameSync(r,s){throw new Error("Unimplemented")}
method copyFilePromise (line 149) | async copyFilePromise(r,s,a){let{indexSource:n,indexDest:c,resolvedDestP...
method copyFileSync (line 149) | copyFileSync(r,s,a=0){let{indexSource:n,indexDest:c,resolvedDestP:f}=thi...
method prepareCopyFile (line 149) | prepareCopyFile(r,s,a=0){if(this.readOnly)throw or.EROFS(`copyfile '${r}...
method appendFilePromise (line 149) | async appendFilePromise(r,s,a){if(this.readOnly)throw or.EROFS(`open '${...
method appendFileSync (line 149) | appendFileSync(r,s,a={}){if(this.readOnly)throw or.EROFS(`open '${r}'`);...
method fdToPath (line 149) | fdToPath(r,s){let a=this.fds.get(r)?.p;if(typeof a>"u")throw or.EBADF(s)...
method writeFilePromise (line 149) | async writeFilePromise(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}...
method writeFileSync (line 149) | writeFileSync(r,s,a){let{encoding:n,mode:c,index:f,resolvedP:p}=this.pre...
method prepareWriteFile (line 149) | prepareWriteFile(r,s){if(typeof r=="number"&&(r=this.fdToPath(r,"read"))...
method unlinkPromise (line 149) | async unlinkPromise(r){return this.unlinkSync(r)}
method unlinkSync (line 149) | unlinkSync(r){if(this.readOnly)throw or.EROFS(`unlink '${r}'`);let s=thi...
method utimesPromise (line 149) | async utimesPromise(r,s,a){return this.utimesSync(r,s,a)}
method utimesSync (line 149) | utimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`utimes '${r}'`);let n...
method lutimesPromise (line 149) | async lutimesPromise(r,s,a){return this.lutimesSync(r,s,a)}
method lutimesSync (line 149) | lutimesSync(r,s,a){if(this.readOnly)throw or.EROFS(`lutimes '${r}'`);let...
method utimesImpl (line 149) | utimesImpl(r,s){this.listings.has(r)&&(this.entries.has(r)||this.hydrate...
method mkdirPromise (line 149) | async mkdirPromise(r,s){return this.mkdirSync(r,s)}
method mkdirSync (line 149) | mkdirSync(r,{mode:s=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(...
method rmdirPromise (line 149) | async rmdirPromise(r,s){return this.rmdirSync(r,s)}
method rmdirSync (line 149) | rmdirSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rmdir ...
method rmPromise (line 149) | async rmPromise(r,s){return this.rmSync(r,s)}
method rmSync (line 149) | rmSync(r,{recursive:s=!1}={}){if(this.readOnly)throw or.EROFS(`rm '${r}'...
method hydrateDirectory (line 149) | hydrateDirectory(r){let s=this.zipImpl.addDirectory(K.relative(vt.root,r...
method linkPromise (line 149) | async linkPromise(r,s){return this.linkSync(r,s)}
method linkSync (line 149) | linkSync(r,s){throw or.EOPNOTSUPP(`link '${r}' -> '${s}'`)}
method symlinkPromise (line 149) | async symlinkPromise(r,s){return this.symlinkSync(r,s)}
method symlinkSync (line 149) | symlinkSync(r,s){if(this.readOnly)throw or.EROFS(`symlink '${r}' -> '${s...
method readFilePromise (line 149) | async readFilePromise(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);l...
method readFileSync (line 149) | readFileSync(r,s){typeof s=="object"&&(s=s?s.encoding:void 0);let a=this...
method readFileBuffer (line 149) | readFileBuffer(r,s={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdT...
method readdirPromise (line 149) | async readdirPromise(r,s){return this.readdirSync(r,s)}
method readdirSync (line 149) | readdirSync(r,s){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this...
method readlinkPromise (line 149) | async readlinkPromise(r){let s=this.prepareReadlink(r);return(await this...
method readlinkSync (line 149) | readlinkSync(r){let s=this.prepareReadlink(r);return this.getFileSource(...
method prepareReadlink (line 149) | prepareReadlink(r){let s=this.resolveFilename(`readlink '${r}'`,r,!1);if...
method truncatePromise (line 149) | async truncatePromise(r,s=0){let a=this.resolveFilename(`open '${r}'`,r)...
method truncateSync (line 149) | truncateSync(r,s=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.e...
method ftruncatePromise (line 149) | async ftruncatePromise(r,s){return this.truncatePromise(this.fdToPath(r,...
method ftruncateSync (line 149) | ftruncateSync(r,s){return this.truncateSync(this.fdToPath(r,"ftruncateSy...
method watch (line 149) | watch(r,s,a){let n;switch(typeof s){case"function":case"string":case"und...
method watchFile (line 149) | watchFile(r,s,a){let n=K.resolve(vt.root,r);return sE(this,n,s,a)}
method unwatchFile (line 149) | unwatchFile(r,s){let a=K.resolve(vt.root,r);return yd(this,a,s)}
function Kde (line 149) | function Kde(t,e,r=Buffer.alloc(0),s){let a=new ps(r),n=C=>C===e||C.star...
method constructor (line 149) | constructor(e){this.filesShouldBeCached=!1;if("buffer"in e)throw new Err...
method readZipSync (line 149) | static readZipSync(e,r,s){if(s<vv)throw new Error("Invalid ZIP file: EOC...
method getExternalAttributes (line 149) | getExternalAttributes(e){let r=this.entries[e];return[r.os,r.externalAtt...
method getListings (line 149) | getListings(){return this.entries.map(e=>e.name)}
method getSymlinkCount (line 149) | getSymlinkCount(){let e=0;for(let r of this.entries)r.isSymbolicLink&&(e...
method stat (line 149) | stat(e){let r=this.entries[e];return{crc:r.crc,mtime:r.mtime,size:r.size}}
method locate (line 149) | locate(e){for(let r=0;r<this.entries.length;r++)if(this.entries[r].name=...
method getFileSource (line 149) | getFileSource(e){if(this.fd==="closed")throw new Error("ZIP file is clos...
method discard (line 149) | discard(){this.fd!=="closed"&&(this.baseFs.closeSync(this.fd),this.fd="c...
method addDirectory (line 149) | addDirectory(e){throw new Error("Not implemented")}
method deleteEntry (line 149) | deleteEntry(e){throw new Error("Not implemented")}
method setMtime (line 149) | setMtime(e,r){throw new Error("Not implemented")}
method getBufferAndClose (line 149) | getBufferAndClose(){throw new Error("Not implemented")}
method setFileSource (line 149) | setFileSource(e,r,s){throw new Error("Not implemented")}
method setExternalAttributes (line 149) | setExternalAttributes(e,r,s){throw new Error("Not implemented")}
function Smt (line 149) | function Smt(){return Bv()}
function Dmt (line 149) | async function Dmt(){return Bv()}
method constructor (line 149) | constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd...
method execute (line 159) | async execute(){let r=this.args.length>0?`${this.commandName} ${this.arg...
method constructor (line 159) | constructor(e){super(e),this.name="ShellError"}
function bmt (line 159) | function bmt(t){if(!DT.default.scan(t,bT).isGlob)return!1;try{DT.default...
function Pmt (line 159) | function Pmt(t,{cwd:e,baseFs:r}){return(0,tme.default)(t,{...nme,cwd:ue....
function i6 (line 159) | function i6(t){return DT.default.scan(t,bT).isBrace}
function s6 (line 159) | function s6(){}
function o6 (line 159) | function o6(){for(let t of cm)t.kill()}
function lme (line 159) | function lme(t,e,r,s){return a=>{let n=a[0]instanceof nA.Transform?"pipe...
function cme (line 162) | function cme(t){return e=>{let r=e[0]==="pipe"?new nA.PassThrough:e[0];r...
function xT (line 162) | function xT(t,e){return l6.start(t,e)}
function sme (line 162) | function sme(t,e=null){let r=new nA.PassThrough,s=new ame.StringDecoder,...
function ume (line 163) | function ume(t,{prefix:e}){return{stdout:sme(r=>t.stdout.write(`${r}
method constructor (line 165) | constructor(e){this.stream=e}
method close (line 165) | close(){}
method get (line 165) | get(){return this.stream}
method constructor (line 165) | constructor(){this.stream=null}
method close (line 165) | close(){if(this.stream===null)throw new Error("Assertion failed: No stre...
method attach (line 165) | attach(e){this.stream=e}
method get (line 165) | get(){if(this.stream===null)throw new Error("Assertion failed: No stream...
method constructor (line 165) | constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this....
method start (line 165) | static start(e,{stdin:r,stdout:s,stderr:a}){let n=new t(null,e);return n...
method pipeTo (line 165) | pipeTo(e,r=1){let s=new t(this,e),a=new a6;return s.pipe=a,s.stdout=this...
method exec (line 165) | async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe"...
method run (line 165) | async run(){let e=[];for(let s=this;s;s=s.ancestor)e.push(s.exec());retu...
function fme (line 165) | function fme(t,e,r){let s=new Jl.PassThrough({autoDestroy:!0});switch(t)...
function QT (line 165) | function QT(t,e={}){let r={...t,...e};return r.environment={...t.environ...
function kmt (line 165) | async function kmt(t,e,r){let s=[],a=new Jl.PassThrough;return a.on("dat...
function Ame (line 165) | async function Ame(t,e,r){let s=t.map(async n=>{let c=await um(n.args,e,...
function kT (line 165) | function kT(t){return t.match(/[^ \r\n\t]+/g)||[]}
function yme (line 165) | async function yme(t,e,r,s,a=s){switch(t.name){case"$":s(String(process....
function Pv (line 165) | async function Pv(t,e,r){if(t.type==="number"){if(Number.isInteger(t.val...
function um (line 165) | async function um(t,e,r){let s=new Map,a=[],n=[],c=E=>{n.push(E)},f=()=>...
function xv (line 165) | function xv(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let s=ue.f...
function Tmt (line 165) | function Tmt(t,e,r){return s=>{let a=new Jl.PassThrough,n=TT(t,e,QT(r,{s...
function Rmt (line 165) | function Rmt(t,e,r){return s=>{let a=new Jl.PassThrough,n=TT(t,e,r);retu...
function pme (line 165) | function pme(t,e,r,s){if(e.length===0)return t;{let a;do a=String(Math.r...
function hme (line 165) | async function hme(t,e,r){let s=t,a=null,n=null;for(;s;){let c=s.then?{....
function Fmt (line 165) | async function Fmt(t,e,r,{background:s=!1}={}){function a(n){let c=["#2E...
function Nmt (line 167) | async function Nmt(t,e,r,{background:s=!1}={}){let a,n=f=>{a=f,r.variabl...
function TT (line 168) | async function TT(t,e,r){let s=r.backgroundJobs;r.backgroundJobs=[];let ...
function Eme (line 168) | function Eme(t){switch(t.type){case"variable":return t.name==="@"||t.nam...
function kv (line 168) | function kv(t){switch(t.type){case"redirection":return t.args.some(e=>kv...
function u6 (line 168) | function u6(t){switch(t.type){case"variable":return Eme(t);case"number":...
function f6 (line 168) | function f6(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(...
function SI (line 168) | async function SI(t,e=[],{baseFs:r=new Yn,builtins:s={},cwd:a=ue.toPorta...
method write (line 171) | write(ie,Ae,ce){setImmediate(ce)}
function Omt (line 171) | function Omt(t,e){for(var r=-1,s=t==null?0:t.length,a=Array(s);++r<s;)a[...
function vme (line 171) | function vme(t){if(typeof t=="string")return t;if(Mmt(t))return Lmt(t,vm...
function jmt (line 171) | function jmt(t){return t==null?"":Hmt(t)}
function qmt (line 171) | function qmt(t,e,r){var s=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<...
function Wmt (line 171) | function Wmt(t,e,r){var s=t.length;return r=r===void 0?s:r,!e&&r>=s?t:Gm...
function eyt (line 171) | function eyt(t){return $mt.test(t)}
function tyt (line 171) | function tyt(t){return t.split("")}
function hyt (line 171) | function hyt(t){return t.match(pyt)||[]}
function yyt (line 171) | function yyt(t){return dyt(t)?myt(t):gyt(t)}
function Byt (line 171) | function Byt(t){return function(e){e=wyt(e);var r=Iyt(e)?Cyt(e):void 0,s...
function Pyt (line 171) | function Pyt(t){return byt(Dyt(t).toLowerCase())}
function xyt (line 171) | function xyt(){var t=0,e=1,r=2,s=3,a=4,n=5,c=6,f=7,p=8,h=9,E=10,C=11,S=1...
function Qyt (line 171) | function Qyt(){if(NT)return NT;if(typeof Intl.Segmenter<"u"){let t=new I...
function nye (line 171) | function nye(t,{configuration:e,json:r}){if(!e.get("enableMessageNames")...
function m6 (line 171) | function m6(t,{configuration:e,json:r}){let s=nye(t,{configuration:e,jso...
function DI (line 171) | async function DI({configuration:t,stdout:e,forceError:r},s){let a=await...
method constructor (line 176) | constructor({configuration:r,stdout:s,json:a=!1,forceSectionAlignment:n=...
method start (line 176) | static async start(r,s){let a=new this(r),n=process.emitWarning;process....
method hasErrors (line 176) | hasErrors(){return this.errorCount>0}
method exitCode (line 176) | exitCode(){return this.hasErrors()?1:0}
method getRecommendedLength (line 176) | getRecommendedLength(){let s=this.progressStyle!==null?this.stdout.colum...
method startSectionSync (line 176) | startSectionSync({reportHeader:r,reportFooter:s,skipIfEmpty:a},n){let c=...
method startSectionPromise (line 176) | async startSectionPromise({reportHeader:r,reportFooter:s,skipIfEmpty:a},...
method startTimerImpl (line 176) | startTimerImpl(r,s,a){return{cb:typeof s=="function"?s:a,reportHeader:()...
method startTimerSync (line 176) | startTimerSync(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a);return t...
method startTimerPromise (line 176) | async startTimerPromise(r,s,a){let{cb:n,...c}=this.startTimerImpl(r,s,a)...
method reportSeparator (line 176) | reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(nul...
method reportInfo (line 176) | reportInfo(r,s){if(!this.includeInfos)return;this.commit();let a=this.fo...
method reportWarning (line 176) | reportWarning(r,s){if(this.warningCount+=1,!this.includeWarnings)return;...
method reportError (line 176) | reportError(r,s){this.errorCount+=1,this.timerFooter.push(()=>this.repor...
method reportErrorImpl (line 176) | reportErrorImpl(r,s){this.commit();let a=this.formatNameWithHyperlink(r)...
method reportFold (line 176) | reportFold(r,s){if(!b0)return;let a=`${b0.start(r)}${s}${b0.end(r)}`;thi...
method reportProgress (line 176) | reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve...
method reportJson (line 176) | reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}
method finalize (line 176) | async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>...
method writeLine (line 176) | writeLine(r,{truncate:s}={}){this.clearProgress({clear:!0}),this.stdout....
method writeLines (line 177) | writeLines(r,{truncate:s}={}){this.clearProgress({delta:r.length});for(l...
method commit (line 178) | commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let s of r)...
method clearProgress (line 178) | clearProgress({delta:r=0,clear:s=!1}){this.progressStyle!==null&&this.pr...
method writeProgress (line 178) | writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==nu...
method refreshProgress (line 179) | refreshProgress({delta:r=0,force:s=!1}={}){let a=!1,n=!1;if(s||this.prog...
method truncate (line 179) | truncate(r,{truncate:s}={}){return this.progressStyle===null&&(s=!1),typ...
method formatName (line 179) | formatName(r){return this.includeNames?nye(r,{configuration:this.configu...
method formatPrefix (line 179) | formatPrefix(r,s){return this.includePrefix?`${Ut(this.configuration,"\u...
method formatNameWithHyperlink (line 179) | formatNameWithHyperlink(r){return this.includeNames?m6(r,{configuration:...
method formatIndent (line 179) | formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ...
function P0 (line 179) | async function P0(t,e,r,s=[]){if(process.platform==="win32"){let a=`@got...
function aye (line 181)
Copy disabled (too large)
Download .json
Condensed preview — 9382 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (74,672K chars).
[
{
"path": ".dockerignore",
"chars": 281,
"preview": ".dockerignore\n.editorconfig\nGPLv3.txt\nLICENSE\nREADME.md\n.github\n.gitignore\n.gitattributes\n.git/hooks\n.git/info\n.git/modu"
},
{
"path": ".editorconfig",
"chars": 177,
"preview": "# Editorconfig.org\nroot = true\n\n[*]\ninsert_final_newline = true\ntrim_trailing_whitespace = true\nindent_style = tab\ninden"
},
{
"path": ".gitattributes",
"chars": 601,
"preview": "# force line endings\n* text eol=lf\n\n# text\n*.bat text eol=lf\n*.cjs text eol=lf\n*.dm text eol=lf\n*.dme text eol=lf\n*.dmf "
},
{
"path": ".github/ATOMIZATION.md",
"chars": 2299,
"preview": "# Atomization (AKA, splitting up pull requests)\n\nMaintainers are volunteers and have limited time to review pull request"
},
{
"path": ".github/AUTODOC.md",
"chars": 4143,
"preview": "# dmdoc\n[DOCUMENTATION]: http://codedocs.tgstation13.org\n\n[BYOND]: https://secure.byond.com/\n\n[DMDOC]: https://github.co"
},
{
"path": ".github/CODEOWNERS",
"chars": 470,
"preview": "# This list auto requests reviews from the specified org members\n# when a PR that modifies the file in question is opene"
},
{
"path": ".github/EZDB.md",
"chars": 1213,
"preview": "# Quickly setting up a development database with ezdb\nWhile you do not need a database to code for tgstation, it is a pr"
},
{
"path": ".github/HARDDELETES.md",
"chars": 13069,
"preview": "# Hard Deletes\n\n> Garbage collection is pretty gothic when you think about it.\n>\n>An object in code is like a ghost, cli"
},
{
"path": ".github/HARDDEL_GUIDE.md",
"chars": 11703,
"preview": "# Hard Deletes\n1. [What is hard deletion](#What-is-hard-deletion)\n2. [Causes of hard deletes](#causes-of-hard-deletes)\n3"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1290,
"preview": "name: \"Bug Report\"\ndescription: Create a report to help reproduce and fix the issue\nlabels: 'Bug'\nbody:\n- type: markdown"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 155,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Need help?\n url: https://discord.gg/2dFpfNE\n about: Join dis"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 310,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\n\n---\n\nFeature requests are not handled in the reposito"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 2139,
"preview": "<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->\n<!-- You can view Contribut"
},
{
"path": ".github/TICK_ORDER.md",
"chars": 2813,
"preview": "The byond tick proceeds as follows:\n1. procs sleeping via walk() are resumed (i dont know why these are first)\n\n2. norma"
},
{
"path": ".github/VISUALS.md",
"chars": 46605,
"preview": "# Visuals in TGMC 13\n\nWelcome to a breakdown of visuals and visual effects in our codebase, and in BYOND.\n\nI will be des"
},
{
"path": ".github/actions/restore_or_install_byond/action.yml",
"chars": 2026,
"preview": "# This action attempts to restore BYOND from a cache, or to install it otherwise.\nname: Restore or Install BYOND\ndescrip"
},
{
"path": ".github/actions/setup_node/action.yml",
"chars": 925,
"preview": "# This action is a wrapper around `actions/setup-node`, to use the version specified in\n# `dependencies.sh`.\nname: Setup"
},
{
"path": ".github/alternate_byond_versions.txt",
"chars": 300,
"preview": "# This file contains extra tests to run for specific BYOND versions.\n# This is useful for making sure we maintain compat"
},
{
"path": ".github/guides/EZDB.md",
"chars": 1208,
"preview": "# Quickly setting up a development database with ezdb\nWhile you do not need a database to code for tgmc, it is a prerequ"
},
{
"path": ".github/max_required_byond_client.txt",
"chars": 650,
"preview": "# Highest byond client version allowed to be required by the byond world. Set to 9999 to disable the check flat out.\n# I"
},
{
"path": ".github/workflows/auto_changelog.yml",
"chars": 729,
"preview": "# Creates an entry in html/changelogs automatically, to eventually be compiled by compile_changelogs\nname: Auto Changelo"
},
{
"path": ".github/workflows/ci_suite.yml",
"chars": 8236,
"preview": "name: CI Suite\non:\n pull_request:\n branches:\n - master\n - 'project/**'\n merge_group:\n branches:\n - mast"
},
{
"path": ".github/workflows/compile_changelogs.yml",
"chars": 2310,
"preview": "name: Compile changelogs\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n workflow_dispatch:\n\njobs:\n compile:\n name: \"Compil"
},
{
"path": ".github/workflows/discord_pr_announce.yml",
"chars": 1250,
"preview": "name: 'New PR Notification'\non:\n pull_request_target:\n types: [opened, reopened, closed]\n\njobs:\n notify:\n runs-o"
},
{
"path": ".github/workflows/gbp.yml",
"chars": 1019,
"preview": "name: Label and GBP\non:\n pull_request_target:\n types: [closed, opened, synchronize]\njobs:\n # labeler must run befor"
},
{
"path": ".github/workflows/generate_documentation.yml",
"chars": 1018,
"preview": "name: Generate documentation\non:\n push:\n branches:\n - master\npermissions:\n contents: read\n\njobs:\n generate_docu"
},
{
"path": ".github/workflows/remove_guide_comments.yml",
"chars": 632,
"preview": "# Removes guide comments from PRs when opened, so that when we merge them\n# and reuse the pull request description, the "
},
{
"path": ".github/workflows/round_id_linker.yml",
"chars": 219,
"preview": "name: \"Round ID Linker\"\non:\n issues:\n types: [opened]\n\njobs:\n link_rounds:\n runs-on: ubuntu-20.04\n steps:\n "
},
{
"path": ".github/workflows/run_approval.yml",
"chars": 394,
"preview": "name: Automatic Approve Workflows\non:\n schedule: \n - cron: \"*/10 * * * *\"\njobs:\n automatic-approve:\n name: Autom"
},
{
"path": ".github/workflows/run_integration_tests.yml",
"chars": 2054,
"preview": "# This is a reusable workflow to run integration tests on a single map.\n# This is run for every single map in ci_suite.y"
},
{
"path": ".github/workflows/stale.yml",
"chars": 1035,
"preview": "name: Mark stale issues and pull requests\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n\njobs:\n stale:\n\n runs-on: ubuntu-20"
},
{
"path": ".github/workflows/update_tgs_dmapi.yml",
"chars": 2077,
"preview": "name: Update TGS DMAPI\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n workflow_dispatch:\n\njobs:\n update-dmapi:\n runs-on:"
},
{
"path": ".gitignore",
"chars": 1315,
"preview": "#ignore misc BYOND files\nThumbs.db\n*.log\n*.int\n*.rsc\n*.mdme\n*.mdme.*\n*.m.dme\n*.test.dme\n*.dmb\n*.lk\n*.backup\n*.dmm.before"
},
{
"path": ".prettierignore",
"chars": 157,
"preview": "# We don't want prettier to run on anything outside of the TGUI folder, so we have to do this.\n/*\n\n# We want it to run i"
},
{
"path": ".tgs4.yml",
"chars": 199,
"preview": "static_files:\n - name: config\n populate: true\n - name: data\nlinux_scripts:\n PreCompile.sh: tools/tgs4_scripts/PreC"
},
{
"path": ".vscode/extensions.json",
"chars": 348,
"preview": "{\n\t\"recommendations\": [\n\t\t\"arcanis.vscode-zipfs\",\n\t\t\"dbaeumer.vscode-eslint\",\n\t\t\"donkie.vscode-tgstation-test-adapter\",\n"
},
{
"path": ".vscode/launch.json",
"chars": 980,
"preview": "{\n\t\"version\": \"0.2.0\",\n\t\"configurations\": [\n\t\t{\n\t\t\t\"type\": \"byond\",\n\t\t\t\"request\": \"launch\",\n\t\t\t\"name\": \"Launch DreamSeek"
},
{
"path": ".vscode/tasks.json",
"chars": 2370,
"preview": "{\n\t\"version\": \"2.0.0\",\n\t\"tasks\": [\n\t\t{\n\t\t\t\"type\": \"process\",\n\t\t\t\"command\": \"tools/build/build\",\n\t\t\t\"windows\": {\n\t\t\t\t\"com"
},
{
"path": "BUILD.cmd",
"chars": 70,
"preview": "@echo off\ncall \"%~dp0\\tools\\build\\build.bat\" --wait-on-error build %*\n"
},
{
"path": "CONTRIBUTING.md",
"chars": 49966,
"preview": "# CONTRIBUTING\n\n1. [Reporting Issues](#reporting-issues)\n2. [Introduction](#introduction)\n3. [Getting Started](#getting-"
},
{
"path": "Dockerfile",
"chars": 1605,
"preview": "FROM tgstation/byond:513.1526 as base\n\nFROM base as build_base\n\nRUN apt-get update \\\n && apt-get install -y --no-inst"
},
{
"path": "LICENSE",
"chars": 33822,
"preview": "GNU AFFERO GENERAL PUBLIC LICENSE\n\nVersion 3, 19 November 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <http://"
},
{
"path": "LICENSE-CC-BY-NC-3.0",
"chars": 263,
"preview": "This work is licensed under the Creative Commons\nAttribution-NonCommercial 3.0 Unported License. To view a copy of this "
},
{
"path": "LICENSE-CC-BY-NC-SA-3.0",
"chars": 285,
"preview": "This work is licensed under the Creative Commons\nAttribution-NonCommercial-ShareAlike 3.0 United States License. To view"
},
{
"path": "README.md",
"chars": 4390,
"preview": "\n<h1>\n\nTerraGov Marine Corps \n[![Badge Issues]][Issues]\n[![Badge Time]][Time]\n\n</h1>\n\n<div align = center>\n\n![Badge Rese"
},
{
"path": "SQL/database_changelog.md",
"chars": 5793,
"preview": "Any time you make a change to the schema files, remember to increment the database schema version. Generally increment t"
},
{
"path": "SQL/tgmc-schema.sql",
"chars": 15520,
"preview": "-- --------------------------------------------------------\n-- Host: 127.0.0.1\n-- Server version"
},
{
"path": "SpacemanDMM.toml",
"chars": 202,
"preview": "[langserver]\ndreamchecker = true\n\n[code_standards]\ndisallow_relative_type_definitions = true\ndisallow_relative_proc_defi"
},
{
"path": "__odlint.dm",
"chars": 530,
"preview": "// This file is included right at the start of the DME.\n// Its purpose is to enable multiple lints (pragmas) that are su"
},
{
"path": "_maps/_basemap.dm",
"chars": 1784,
"preview": "//#define LOWMEMORYMODE //uncomment this to load centcom and runtime station and thats it.\n\n#include \"map_files\\generic\\"
},
{
"path": "_maps/arachne.json",
"chars": 193,
"preview": "{\n \"map_name\": \"Arachne\",\n \"map_path\": \"map_files/Arachne\",\n \"map_file\": \"TGS_Arachne.dmm\",\n \"traits\": [{\n\t\t"
},
{
"path": "_maps/bigred_v2.json",
"chars": 598,
"preview": "{\n \"map_name\": \"Big Red\",\n \"map_path\": \"map_files/BigRed_v2\",\n \"map_file\": \"BigRed_v2.dmm\",\n\t\"parallax_icon\": \""
},
{
"path": "_maps/bluemoon.json",
"chars": 581,
"preview": "{\n \"map_name\": \"Blue Moon\",\n \"map_path\": \"map_files/Blue_Moon\",\n \"map_file\": \"bluemoon.dmm\",\n\t\"environment_trai"
},
{
"path": "_maps/bluesummers.json",
"chars": 706,
"preview": "{\n \"map_name\": \"Bluesummers Wreck Site\",\n \"map_path\": \"map_files/Bluesummers\",\n \"map_file\": \"bluesummers.dmm\",\n"
},
{
"path": "_maps/combat_patrol_base.json",
"chars": 239,
"preview": "{\n \"map_name\": \"Combat Patrol Base\",\n \"map_path\": \"map_files/combat_patrol_base\",\n \"map_file\": \"combat_patrol_b"
},
{
"path": "_maps/corsat.json",
"chars": 598,
"preview": "{\n \"map_name\": \"CORSAT Research Station\",\n \"map_path\": \"map_files/corsat\",\n \"map_file\": \"corsat.dmm\",\n\t\"disk_se"
},
{
"path": "_maps/daedalusprison.json",
"chars": 605,
"preview": "{\n \"map_name\": \"Daedalus Prison\",\n \"map_path\": \"map_files/DaedalusPrison\",\n \"map_file\": \"DaedalusPrison.dmm\",\n\t"
},
{
"path": "_maps/debugdalus.json",
"chars": 202,
"preview": "{\n \"map_name\": \"Debugdalus\",\n \"map_path\": \"map_files/debugdalus\",\n \"map_file\": \"tgs_debugdalus.dmm\",\n \"trait"
},
{
"path": "_maps/deltastation.json",
"chars": 642,
"preview": "{\n \"map_name\": \"Delta Station\",\n \"map_path\": \"map_files/deltastation\",\n \"map_file\": \"deltastation.dmm\",\n\t\"disk_"
},
{
"path": "_maps/desertdam.json",
"chars": 499,
"preview": "{\n \"map_name\": \"Chigusa\",\n \"map_path\": \"map_files/desertdam\",\n \"map_file\": \"desertdam.dmm\",\n\t\"parallax_icon\": \""
},
{
"path": "_maps/desparity.json",
"chars": 564,
"preview": "{\n \"map_name\": \"Desparity\",\n \"map_path\": \"map_files/desparity\",\n \"map_file\": \"desparity.dmm\",\n\t\"parallax_icon\":"
},
{
"path": "_maps/fiorina.json",
"chars": 450,
"preview": "{\n \"map_name\": \"Fiorina Science Annex\",\n \"map_path\": \"map_files/fiorina\",\n \"map_file\": \"fiorina.dmm\",\n \"armo"
},
{
"path": "_maps/fort_phobos.json",
"chars": 184,
"preview": "{\n \"map_name\": \"Fort Phobos\",\n \"map_path\": \"map_files/Fort_Phobos\",\n \"map_file\": \"Fort_Phobos.dmm\",\n\t\"parallax_"
},
{
"path": "_maps/gelida_iv.json",
"chars": 751,
"preview": "{\n \"map_name\": \"Gelida IV\",\n \"map_path\": \"map_files/gelida_iv\",\n \"map_file\": \"gelida_iv.dmm\",\n\t\"parallax_icon\":"
},
{
"path": "_maps/ice_colony_v2.json",
"chars": 731,
"preview": "{\n \"map_name\": \"Ice Colony\",\n \"map_path\": \"map_files/Ice_Colony_v2\",\n \"map_file\": \"Ice_Colony_v2.dmm\",\n\t\"parall"
},
{
"path": "_maps/icy_caves.json",
"chars": 708,
"preview": "{\n \"map_name\": \"Icy Caves\",\n \"map_path\": \"map_files/icy_caves\",\n \"map_file\": \"icy_caves.dmm\",\n\t\"parallax_icon\":"
},
{
"path": "_maps/interiors/apc_cloner.dmm",
"chars": 3087,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/apc"
},
{
"path": "_maps/interiors/apc_medical.dmm",
"chars": 3018,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/apc"
},
{
"path": "_maps/interiors/apc_transport.dmm",
"chars": 2988,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/apc"
},
{
"path": "_maps/interiors/icc_recontank.dmm",
"chars": 2183,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/apc"
},
{
"path": "_maps/interiors/mrap.dmm",
"chars": 3208,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/apc"
},
{
"path": "_maps/interiors/som_tank.dmm",
"chars": 2324,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/interior/tan"
},
{
"path": "_maps/interiors/tank.dmm",
"chars": 2637,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/open/space/basic,\n/"
},
{
"path": "_maps/iteron.json",
"chars": 186,
"preview": "{\n \"map_name\": \"Iteron\",\n \"map_path\": \"map_files/Iteron\",\n \"map_file\": \"Iteron.dmm\",\n \"traits\": [{\n\t\t\"Marine"
},
{
"path": "_maps/kutjevo.json",
"chars": 520,
"preview": "{\n \"map_name\": \"Kutjevo Refinery\",\n \"map_path\": \"map_files/kutjevo\",\n \"map_file\": \"kutjevo.dmm\",\n\t\"parallax_ico"
},
{
"path": "_maps/lavaoutpost.json",
"chars": 636,
"preview": "{\n \"map_name\": \"Lava Outpost V1\",\n \"map_path\": \"map_files/lavaoutpost\",\n \"map_file\": \"LavaOutpost.dmm\",\n\t\"paral"
},
{
"path": "_maps/lawanka.json",
"chars": 530,
"preview": "{\n \"map_name\": \"Lawanka Outpost\",\n \"map_path\": \"map_files/Lawanka_Outpost\",\n \"map_file\": \"LawankaOutpost.dmm\",\n"
},
{
"path": "_maps/lv624.json",
"chars": 591,
"preview": "{\n \"map_name\": \"LV624\",\n \"map_path\": \"map_files/LV624\",\n \"map_file\": \"LV624.dmm\",\n\t\"parallax_icon\": \"jungle\",\n\t"
},
{
"path": "_maps/lv759.json",
"chars": 634,
"preview": "{\n \"map_name\": \"LV759\",\n \"map_path\": \"map_files/LV759\",\n \"map_file\": \"LV759.dmm\",\n\t\"disk_sets\": {\n\t\t\"basic\": 1\n"
},
{
"path": "_maps/magmoor_digsite_iv.json",
"chars": 624,
"preview": "{\n \"map_name\": \"Magmoor Digsite IV\",\n \"map_path\": \"map_files/Magmoor_Digsite_IV\",\n \"map_file\": \"Magmoor_Digsite"
},
{
"path": "_maps/map_files/Arachne/TGS_Arachne.dmm",
"chars": 777086,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aat\" = (\n/obj/structure/cable,\n/"
},
{
"path": "_maps/map_files/BigRed_v2/BigRed_v2.dmm",
"chars": 639106,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/turf/open/space/basic,"
},
{
"path": "_maps/map_files/Blue_Moon/bluemoon.dmm",
"chars": 605283,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaB\" = (\n/obj/structure/table/wo"
},
{
"path": "_maps/map_files/Bluesummers/bluesummers.dmm",
"chars": 853254,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aax\" = (\n/obj/effect/landmark/lv"
},
{
"path": "_maps/map_files/Campaign maps/jungle_outpost/jungle_outpost.dmm",
"chars": 375296,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/structure/platform{"
},
{
"path": "_maps/map_files/Campaign maps/nt_base/nt_base.dmm",
"chars": 999051,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/obj/structure/cargo_co"
},
{
"path": "_maps/map_files/Campaign maps/orion_2/orionoutpost_2.dmm",
"chars": 358278,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/obj/effect/ai_node,\n/tu"
},
{
"path": "_maps/map_files/Campaign maps/patricks_rest/patricks_rest.dmm",
"chars": 375417,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/map_files/Campaign maps/som_base/sombase.dmm",
"chars": 648049,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"abc\" = (\n/obj/structure/table/bl"
},
{
"path": "_maps/map_files/Campaign maps/som_raid_base/som_raiding_base.dmm",
"chars": 342691,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/structure/flora/jun"
},
{
"path": "_maps/map_files/Campaign maps/tgmc_airfield/tgmc_airfield.dmm",
"chars": 337344,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/structure/cable,\n/t"
},
{
"path": "_maps/map_files/Campaign maps/tgmc_raid_base/tgmc_raiding_base.dmm",
"chars": 454178,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/machinery/power/apc"
},
{
"path": "_maps/map_files/DaedalusPrison/DaedalusPrison.dmm",
"chars": 952448,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aac\" = (\n/obj/machinery/atmosphe"
},
{
"path": "_maps/map_files/Fort_Phobos/Fort_Phobos.dmm",
"chars": 146234,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/turf/open/floor/mainshi"
},
{
"path": "_maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm",
"chars": 1050706,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/turf/closed/mineral/sm"
},
{
"path": "_maps/map_files/Iteron/Iteron.dmm",
"chars": 269407,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/turf/closed/wall/mainsh"
},
{
"path": "_maps/map_files/LV624/LV624.dmm",
"chars": 730908,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aah\" = (\n/turf/open/floor/platin"
},
{
"path": "_maps/map_files/LV759/LV759.dmm",
"chars": 3645465,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aam\" = (\n/obj/machinery/disposal"
},
{
"path": "_maps/map_files/Lawanka_Outpost/LawankaOutpost.dmm",
"chars": 961036,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aay\" = (\n/obj/structure/flora/ju"
},
{
"path": "_maps/map_files/Magmoor_Digsite_IV/Magmoor_Digsite_IV.dmm",
"chars": 1022980,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/obj/machinery/door/win"
},
{
"path": "_maps/map_files/Metnal_Operation/Metnal_Operation.dmm",
"chars": 1073725,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aak\" = (\n/obj/structure/bed/chai"
},
{
"path": "_maps/map_files/Orion_Military_Outpost/orionoutpost.dmm",
"chars": 358744,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/item/tool/lighter/z"
},
{
"path": "_maps/map_files/Pillar_of_Spring/TGS_Pillar_of_Spring.dmm",
"chars": 755858,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aam\" = (\n/obj/machinery/door/air"
},
{
"path": "_maps/map_files/Prison_Station_FOP/Prison_Station_FOP.dmm",
"chars": 1473473,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aab\" = (\n/turf/open/space/sea,\n/"
},
{
"path": "_maps/map_files/Research_Outpost/Research_Outpost.dmm",
"chars": 313292,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/structure/window/fr"
},
{
"path": "_maps/map_files/Sulaco/TGS_Sulaco.dmm",
"chars": 932566,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/turf/open/space/basic,"
},
{
"path": "_maps/map_files/Theseus/TGS_Theseus.dmm",
"chars": 777504,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/turf/open/space/basic,"
},
{
"path": "_maps/map_files/Vapor_Processing/Vapor_Processing.dmm",
"chars": 168028,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ad\" = (\n/turf/open/floor,\n/area/"
},
{
"path": "_maps/map_files/Whiskey_Outpost/Whiskey_Outpost_v2.dmm",
"chars": 244134,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/space/basic{\n"
},
{
"path": "_maps/map_files/combat_patrol_base/combat_patrol_base.dmm",
"chars": 112207,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/map_files/corsat/corsat.dmm",
"chars": 1685500,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aal\" = (\n/obj/structure/table/ma"
},
{
"path": "_maps/map_files/debugdalus/tgs_debugdalus.dmm",
"chars": 103946,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/turf/open/space/basic,"
},
{
"path": "_maps/map_files/deltastation/deltastation.dmm",
"chars": 3480076,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/obj/effect/turf_decal/"
},
{
"path": "_maps/map_files/desertdam/desertdam.dmm",
"chars": 1938358,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aad\" = (\n/obj/machinery/door/pod"
},
{
"path": "_maps/map_files/desparity/desparity.dmm",
"chars": 289016,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/map_files/fiorina/fiorina.dmm",
"chars": 1273192,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aar\" = (\n/obj/structure/stairs/s"
},
{
"path": "_maps/map_files/gelida_iv/gelida_iv.dmm",
"chars": 1075632,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/obj/structure/cargo_co"
},
{
"path": "_maps/map_files/generic/Admin_Level.dmm",
"chars": 642916,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aai\" = (\n/obj/structure/closet/c"
},
{
"path": "_maps/map_files/icy_caves/icy_caves.dmm",
"chars": 344166,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/map_files/kutjevo/kutjevo.dmm",
"chars": 793952,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaB\" = (\n/obj/effect/ai_node,\n/o"
},
{
"path": "_maps/map_files/lavaoutpost/LavaOutpost.dmm",
"chars": 315999,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ad\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/map_files/multiz_debug/multiz_debug.dmm",
"chars": 191574,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ad\" = (\n/obj/structure/cable,\n/o"
},
{
"path": "_maps/map_files/oscar_outpost/oscar_outpost.dmm",
"chars": 365359,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/structure/bed/chair"
},
{
"path": "_maps/map_files/riptide/riptide.dmm",
"chars": 1064204,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aaa\" = (\n/obj/machinery/miner/da"
},
{
"path": "_maps/map_files/slumbridge/slumbridge.dmm",
"chars": 1004900,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aai\" = (\n/obj/structure/table/re"
},
{
"path": "_maps/metnal.json",
"chars": 651,
"preview": "{\n \"map_name\": \"Metnal Mining Operation\",\n \"map_path\": \"map_files/Metnal_Operation\",\n \"map_file\": \"Metnal_Opera"
},
{
"path": "_maps/modularmaps/EORG/basketball.dmm",
"chars": 29232,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/closed/wall/mainsh"
},
{
"path": "_maps/modularmaps/EORG/cs_mansion.dmm",
"chars": 36087,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ai\" = (\n/obj/structure/flora/aus"
},
{
"path": "_maps/modularmaps/EORG/cs_militia.dmm",
"chars": 19362,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"as\" = (\n/obj/effect/landmark/eor"
},
{
"path": "_maps/modularmaps/EORG/cs_office.dmm",
"chars": 54495,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ad\" = (\n/obj/structure/barricade"
},
{
"path": "_maps/modularmaps/EORG/de_dust2.dmm",
"chars": 21039,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/closed/wall/desert"
},
{
"path": "_maps/modularmaps/EORG/de_inferno.dmm",
"chars": 48370,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/modularmaps/EORG/de_nuke.dmm",
"chars": 20721,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ay\" = (\n/obj/effect/landmark/wea"
},
{
"path": "_maps/modularmaps/EORG/old.dmm",
"chars": 20382,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/space/basic,\n"
},
{
"path": "_maps/modularmaps/EORG/original.dmm",
"chars": 35246,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/closed/mineral/smo"
},
{
"path": "_maps/modularmaps/big_red/barracks.dmm",
"chars": 33382,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/structure/cable,\n/o"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar1.dmm",
"chars": 16486,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aq\" = (\n/obj/effect/landmark/lv6"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar2.dmm",
"chars": 25058,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/turf/open/floor/marking"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar3.dmm",
"chars": 23811,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ai\" = (\n/obj/effect/landmark/wee"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar4.dmm",
"chars": 16488,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/effect/landmark/lv6"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar5.dmm",
"chars": 28519,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aO\" = (\n/obj/structure/closet/fi"
},
{
"path": "_maps/modularmaps/big_red/bigredatmosvar6.dmm",
"chars": 20307,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aw\" = (\n/obj/effect/spawner/rand"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar1.dmm",
"chars": 20875,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ag\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar2.dmm",
"chars": 19527,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aq\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar3.dmm",
"chars": 20116,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"as\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar4.dmm",
"chars": 24394,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aC\" = (\n/obj/structure/cable,\n/t"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar5.dmm",
"chars": 23812,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ax\" = (\n/obj/structure/cable,\n/o"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar6.dmm",
"chars": 22286,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/structure/cable,\n/o"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar7.dmm",
"chars": 22880,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ae\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoareavar8.dmm",
"chars": 24638,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ah\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoentryvar1.dmm",
"chars": 1095,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/wall,\n/area/"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoentryvar2.dmm",
"chars": 1362,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/wall,\n/area/"
},
{
"path": "_maps/modularmaps/big_red/bigredcargoentryvar3.dmm",
"chars": 1475,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/wall,\n/area/"
},
{
"path": "_maps/modularmaps/big_red/bigredcargovar1.dmm",
"chars": 16151,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ax\" = (\n/obj/effect/spawner/rand"
},
{
"path": "_maps/modularmaps/big_red/bigredcargovar2.dmm",
"chars": 19576,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ad\" = (\n/obj/structure/cargo_con"
},
{
"path": "_maps/modularmaps/big_red/bigredcaveswvar1.dmm",
"chars": 7042,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"d\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredcaveswvar2.dmm",
"chars": 7289,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"c\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredcaveswvar3.dmm",
"chars": 7148,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"d\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredcaveswvar4.dmm",
"chars": 9309,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ab\" = (\n/obj/effect/landmark/wee"
},
{
"path": "_maps/modularmaps/big_red/bigredcaveswvar5.dmm",
"chars": 7177,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"d\" = (\n/obj/effect/landmark/exca"
},
{
"path": "_maps/modularmaps/big_red/bigredcavevar1.dmm",
"chars": 14564,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcavevar2.dmm",
"chars": 14905,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcavevar3.dmm",
"chars": 14842,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcavevar4.dmm",
"chars": 15255,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredcavevar5.dmm",
"chars": 14685,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/turf/open/floor/plating"
},
{
"path": "_maps/modularmaps/big_red/bigredchapelvar1.dmm",
"chars": 6031,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/wall,\n/area/"
},
{
"path": "_maps/modularmaps/big_red/bigredchapelvar2.dmm",
"chars": 9574,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"bh\" = (\n/obj/effect/spawner/rand"
},
{
"path": "_maps/modularmaps/big_red/bigredcheckpointsouthvar1.dmm",
"chars": 1255,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"f\" = (\n/obj/effect/decal/cleanab"
},
{
"path": "_maps/modularmaps/big_red/bigredcheckpointsouthvar2.dmm",
"chars": 756,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/mineral/smoo"
},
{
"path": "_maps/modularmaps/big_red/bigredcheckpointsouthvar3.dmm",
"chars": 5725,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/mineral/smoo"
},
{
"path": "_maps/modularmaps/big_red/bigredcheckpointvar1.dmm",
"chars": 599,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/open/floor/asteroid"
},
{
"path": "_maps/modularmaps/big_red/bigredcheckpointvar2.dmm",
"chars": 970,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/obj/machinery/door/poddo"
},
{
"path": "_maps/modularmaps/big_red/bigreddoor1.dmm",
"chars": 338,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/obj/machinery/door/poddo"
},
{
"path": "_maps/modularmaps/big_red/bigreddoor2.dmm",
"chars": 180,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/open/floor/asteroid"
},
{
"path": "_maps/modularmaps/big_red/bigreddoor3.dmm",
"chars": 338,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/obj/machinery/door/poddo"
},
{
"path": "_maps/modularmaps/big_red/bigreddoor4.dmm",
"chars": 180,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/open/floor/asteroid"
},
{
"path": "_maps/modularmaps/big_red/bigreddormvar1.dmm",
"chars": 8824,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"am\" = (\n/obj/docking_port/statio"
},
{
"path": "_maps/modularmaps/big_red/bigreddormvar2.dmm",
"chars": 8619,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aw\" = (\n/obj/machinery/light,\n/o"
},
{
"path": "_maps/modularmaps/big_red/bigredengineeringvar1.dmm",
"chars": 31868,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ae\" = (\n/obj/item/stack/sheet/me"
},
{
"path": "_maps/modularmaps/big_red/bigredengineeringvar2.dmm",
"chars": 29117,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aa\" = (\n/obj/machinery/vending/s"
},
{
"path": "_maps/modularmaps/big_red/bigredengineeringvar3.dmm",
"chars": 32348,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aA\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/modularmaps/big_red/bigredengineeringvar4.dmm",
"chars": 29011,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ax\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/modularmaps/big_red/bigredetavar1.dmm",
"chars": 29226,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aj\" = (\n/obj/structure/table,\n/o"
},
{
"path": "_maps/modularmaps/big_red/bigredetavar2.dmm",
"chars": 29033,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"am\" = (\n/obj/item/shard,\n/turf/o"
},
{
"path": "_maps/modularmaps/big_red/bigredetavar3.dmm",
"chars": 30120,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"al\" = (\n/obj/effect/decal/cleana"
},
{
"path": "_maps/modularmaps/big_red/bigredetavar4.dmm",
"chars": 30160,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"as\" = (\n/obj/effect/spawner/rand"
},
{
"path": "_maps/modularmaps/big_red/bigredetavar5.dmm",
"chars": 32666,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"av\" = (\n/obj/structure/rack,\n/ob"
},
{
"path": "_maps/modularmaps/big_red/bigredgeneralstorevar1.dmm",
"chars": 27349,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ac\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/modularmaps/big_red/bigredgeneralstorevar2.dmm",
"chars": 27735,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aq\" = (\n/obj/machinery/atmospher"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdacave1.dmm",
"chars": 1503,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"g\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdacave2.dmm",
"chars": 1455,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"v\" = (\n/obj/effect/landmark/weed"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelsouthvar1.dmm",
"chars": 2500,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"b\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelsouthvar2.dmm",
"chars": 2653,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"e\" = (\n/obj/effect/ai_node,\n/tur"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelsouthvar3.dmm",
"chars": 2551,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"b\" = (\n/turf/closed/mineral/smoo"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelsouthvar4.dmm",
"chars": 2551,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"b\" = (\n/obj/effect/ai_node,\n/tur"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelvar1.dmm",
"chars": 3352,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"c\" = (\n/obj/effect/landmark/lv62"
},
{
"path": "_maps/modularmaps/big_red/bigredlambdatunnelvar2.dmm",
"chars": 2734,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"b\" = (\n/obj/structure/table/rein"
},
{
"path": "_maps/modularmaps/big_red/bigredlibraryvar1.dmm",
"chars": 7371,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"a\" = (\n/turf/closed/wall,\n/area/"
},
{
"path": "_maps/modularmaps/big_red/bigredlibraryvar2.dmm",
"chars": 9599,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"aA\" = (\n/obj/structure/cable,\n/t"
},
{
"path": "_maps/modularmaps/big_red/bigredlibraryvar3.dmm",
"chars": 12759,
"preview": "//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE\n\"ag\" = (\n/obj/effect/decal/cleana"
}
]
// ... and 9182 more files (download for full content)
About this extraction
This page contains the full source code of the tgstation/TerraGov-Marine-Corps GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 9382 files (65.4 MB), approximately 17.4M tokens, and a symbol index with 7928 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.