Copy disabled (too large)
Download .txt
Showing preview only (71,522K chars total). Download the full file to get everything.
Repository: cmss13-devs/cmss13
Branch: master
Commit: e97c5f08fdcf
Files: 9097
Total size: 67.2 MB
Directory structure:
gitextract_rn30hst7/
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── restore_or_install_byond/
│ │ │ └── action.yml
│ │ ├── setup_bun/
│ │ │ └── action.yml
│ │ └── setup_node/
│ │ └── action.yml
│ ├── add_labels.py
│ ├── alternate_byond_versions.txt
│ ├── guides/
│ │ ├── AUTODOC.md
│ │ ├── STANDARDS.md
│ │ └── STYLES.md
│ ├── maps_to_ignore.txt
│ ├── ss13_genchangelog.py
│ └── workflows/
│ ├── auto_changelog.yml
│ ├── autowiki.yml
│ ├── ci_suite.yml
│ ├── compile_changelogs.yml
│ ├── conflicts.yml
│ ├── generate_web_assets.yml
│ ├── labeler.yml
│ ├── release.yml
│ ├── remove_guide_comments.yml
│ ├── rerun_flaky_tests.yml
│ ├── run_approval.yml
│ ├── run_unit_tests.yml
│ ├── stale.yml
│ └── update_tgs_dmapi.yml
├── .gitignore
├── .prettierignore
├── .tgs.yml
├── .vscode/
│ ├── extensions.json
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
├── BUILD.cmd
├── Dockerfile
├── LICENSE-AGPLv3.txt
├── LICENSE-CC-BY-SA-3.0.txt
├── LICENSE-GPLv3.txt
├── README.md
├── SpacemanDMM.toml
├── bin/
│ ├── build.cmd
│ ├── clean.cmd
│ ├── server.cmd
│ ├── test.cmd
│ ├── tgfont.cmd
│ ├── tgui-build.cmd
│ ├── tgui-dev.cmd
│ └── tgui-fix.cmd
├── cfg/
│ └── .keep
├── code/
│ ├── __DEFINES/
│ │ ├── ARES.dm
│ │ ├── MC.dm
│ │ ├── STUI.dm
│ │ ├── __game.dm
│ │ ├── __rust_g.dm
│ │ ├── __rust_g_redis-pubsub.dm
│ │ ├── __spacemandmm.dm
│ │ ├── _bitfields.dm
│ │ ├── _click.dm
│ │ ├── _globals.dm
│ │ ├── _macros.dm
│ │ ├── _math.dm
│ │ ├── _protect.dm
│ │ ├── _tick.dm
│ │ ├── access.dm
│ │ ├── admin.dm
│ │ ├── alerts.dm
│ │ ├── assert.dm
│ │ ├── atmospherics.dm
│ │ ├── autofire.dm
│ │ ├── autolathe.dm
│ │ ├── autowiki.dm
│ │ ├── blood.dm
│ │ ├── bsql.config.dm
│ │ ├── bullet_traits.dm
│ │ ├── callback.dm
│ │ ├── camera.dm
│ │ ├── chat.dm
│ │ ├── chemistry.dm
│ │ ├── clans.dm
│ │ ├── client.dm
│ │ ├── client_prefs.dm
│ │ ├── colours.dm
│ │ ├── combat.dm
│ │ ├── configuration.dm
│ │ ├── conflict.dm
│ │ ├── cooldowns.dm
│ │ ├── db_defs.dm
│ │ ├── dcs/
│ │ │ ├── flags.dm
│ │ │ ├── helpers.dm
│ │ │ └── signals/
│ │ │ ├── atom/
│ │ │ │ ├── mob/
│ │ │ │ │ ├── living/
│ │ │ │ │ │ ├── signals_human.dm
│ │ │ │ │ │ ├── signals_living.dm
│ │ │ │ │ │ └── signals_xeno.dm
│ │ │ │ │ ├── signals_mind.dm
│ │ │ │ │ └── signals_mob.dm
│ │ │ │ ├── signals_area.dm
│ │ │ │ ├── signals_atom.dm
│ │ │ │ ├── signals_cell.dm
│ │ │ │ ├── signals_gun.dm
│ │ │ │ ├── signals_item.dm
│ │ │ │ ├── signals_movable.dm
│ │ │ │ ├── signals_obj.dm
│ │ │ │ ├── signals_projectile.dm
│ │ │ │ └── signals_turf.dm
│ │ │ ├── signals_admin.dm
│ │ │ ├── signals_client.dm
│ │ │ ├── signals_datum.dm
│ │ │ ├── signals_global.dm
│ │ │ └── signals_subsystem.dm
│ │ ├── defenses.dm
│ │ ├── dropships.dm
│ │ ├── emote_panels.dm
│ │ ├── equipment.dm
│ │ ├── events.dm
│ │ ├── fire.dm
│ │ ├── flags.dm
│ │ ├── fonts.dm
│ │ ├── gamemode.dm
│ │ ├── generators.dm
│ │ ├── gradient.dm
│ │ ├── guns.dm
│ │ ├── hijack.dm
│ │ ├── html.dm
│ │ ├── html_assistant.dm
│ │ ├── hud.dm
│ │ ├── human.dm
│ │ ├── ipcheck.dm
│ │ ├── job.dm
│ │ ├── keybinding.dm
│ │ ├── language.dm
│ │ ├── layers.dm
│ │ ├── lighting.dm
│ │ ├── machinery.dm
│ │ ├── maps.dm
│ │ ├── marine.dm
│ │ ├── math_physics.dm
│ │ ├── matrices.dm
│ │ ├── minimap.dm
│ │ ├── misc.dm
│ │ ├── mob.dm
│ │ ├── mob_hud.dm
│ │ ├── mobs.dm
│ │ ├── mode.dm
│ │ ├── movement.dm
│ │ ├── nightmare.dm
│ │ ├── objects.dm
│ │ ├── origins.dm
│ │ ├── pain.dm
│ │ ├── paperwork.dm
│ │ ├── paygrade_defs/
│ │ │ ├── army.dm
│ │ │ ├── civilian.dm
│ │ │ ├── cmb.dm
│ │ │ ├── dutch.dm
│ │ │ ├── marines.dm
│ │ │ ├── mercs.dm
│ │ │ ├── navy.dm
│ │ │ ├── nspa.dm
│ │ │ ├── pap.dm
│ │ │ ├── paygrade.dm
│ │ │ ├── provost.dm
│ │ │ ├── twe.dm
│ │ │ ├── upp.dm
│ │ │ └── weyland.dm
│ │ ├── pred.dm
│ │ ├── procpath.dm
│ │ ├── qdel.dm
│ │ ├── radio.dm
│ │ ├── redis.dm
│ │ ├── regex.dm
│ │ ├── sentry_laptop_configurations.dm
│ │ ├── shuttles.dm
│ │ ├── skills.dm
│ │ ├── sounds.dm
│ │ ├── speech_channels.dm
│ │ ├── stamina.dm
│ │ ├── stats.dm
│ │ ├── status_effects.dm
│ │ ├── strippable.dm
│ │ ├── structure.dm
│ │ ├── subsystems.dm
│ │ ├── supply.dm
│ │ ├── surgery.dm
│ │ ├── techtree.dm
│ │ ├── text.dm
│ │ ├── tgs.config.dm
│ │ ├── tgs.dm
│ │ ├── tgui.dm
│ │ ├── traits.dm
│ │ ├── turf_flags.dm
│ │ ├── turfs.dm
│ │ ├── tutorial.dm
│ │ ├── typecheck/
│ │ │ ├── assemblers.dm
│ │ │ ├── datums.dm
│ │ │ ├── generic_types.dm
│ │ │ ├── humanoids.dm
│ │ │ ├── items.dm
│ │ │ ├── mobs_generic.dm
│ │ │ └── xenos.dm
│ │ ├── unit_tests.dm
│ │ ├── urls.dm
│ │ ├── vehicle.dm
│ │ ├── vendors.dm
│ │ ├── vv.dm
│ │ ├── weapon_stats.dm
│ │ ├── weather.dm
│ │ ├── wycomputer.dm
│ │ └── xeno.dm
│ ├── __HELPERS/
│ │ ├── #maths.dm
│ │ ├── _lists.dm
│ │ ├── _time.dm
│ │ ├── animations.dm
│ │ ├── chat.dm
│ │ ├── cmp.dm
│ │ ├── dates.dm
│ │ ├── datums.dm
│ │ ├── files.dm
│ │ ├── filters.dm
│ │ ├── game.dm
│ │ ├── generators.dm
│ │ ├── guid.dm
│ │ ├── icons.dm
│ │ ├── job.dm
│ │ ├── lazy_templates.dm
│ │ ├── level_traits.dm
│ │ ├── lighting.dm
│ │ ├── lists.dm
│ │ ├── logging.dm
│ │ ├── matrices.dm
│ │ ├── mobs.dm
│ │ ├── nameof.dm
│ │ ├── pronouns.dm
│ │ ├── qdel.dm
│ │ ├── sanitize_values.dm
│ │ ├── shell.dm
│ │ ├── sorts/
│ │ │ ├── TimSort.dm
│ │ │ └── _Main.dm
│ │ ├── status_effects.dm
│ │ ├── string_lists.dm
│ │ ├── text.dm
│ │ ├── traits.dm
│ │ ├── type2type.dm
│ │ ├── unsorted.dm
│ │ └── verb_helpers.dm
│ ├── __odlint.dm
│ ├── __pragmas.dm
│ ├── _byond_version_compat.dm
│ ├── _compile_options.dm
│ ├── _experiments.dm
│ ├── _globalvars/
│ │ ├── bitfields.dm
│ │ ├── combat_defines.dm
│ │ ├── configuration.dm
│ │ ├── global_lists.dm
│ │ ├── lists/
│ │ │ ├── clans.dm
│ │ │ ├── client.dm
│ │ │ ├── keybindings.dm
│ │ │ ├── mapping_globals.dm
│ │ │ ├── mobs.dm
│ │ │ ├── names.dm
│ │ │ └── object_lists.dm
│ │ ├── misc.dm
│ │ ├── regexes.dm
│ │ └── tgui.dm
│ ├── _macros.dm
│ ├── _onclick/
│ │ ├── adjacent.dm
│ │ ├── ai.dm
│ │ ├── click.dm
│ │ ├── click_hold.dm
│ │ ├── double_click.dm
│ │ ├── drag_drop.dm
│ │ ├── hud/
│ │ │ ├── _defines.dm
│ │ │ ├── alien.dm
│ │ │ ├── fullscreen.dm
│ │ │ ├── ghost.dm
│ │ │ ├── hud.dm
│ │ │ ├── human.dm
│ │ │ ├── map_popups.dm
│ │ │ ├── other_mobs.dm
│ │ │ ├── radial.dm
│ │ │ ├── radial_persistent.dm
│ │ │ ├── rendering/
│ │ │ │ ├── _render_readme.md
│ │ │ │ ├── plane_master.dm
│ │ │ │ ├── plane_master_controller.dm
│ │ │ │ └── render_plate.dm
│ │ │ ├── screen_object_holder.dm
│ │ │ ├── screen_objects.dm
│ │ │ ├── screentip.dm
│ │ │ └── yautja.dm
│ │ ├── human.dm
│ │ ├── item_attack.dm
│ │ ├── observer.dm
│ │ ├── other_mobs.dm
│ │ ├── ventcrawl.dm
│ │ └── xeno.dm
│ ├── controllers/
│ │ ├── configuration/
│ │ │ ├── config_entry.dm
│ │ │ ├── configuration.dm
│ │ │ └── entries/
│ │ │ ├── achievements.dm
│ │ │ ├── combat_config.dm
│ │ │ ├── dbconfig.dm
│ │ │ ├── game_options.dm
│ │ │ ├── general.dm
│ │ │ └── resources.dm
│ │ ├── mc/
│ │ │ ├── admin.dm
│ │ │ ├── controller.dm
│ │ │ ├── failsafe.dm
│ │ │ ├── globals.dm
│ │ │ ├── master.dm
│ │ │ └── subsystem.dm
│ │ ├── shuttle_controller.dm
│ │ ├── subsystem/
│ │ │ ├── achievements.dm
│ │ │ ├── acid_pillar.dm
│ │ │ ├── assets.dm
│ │ │ ├── atoms.dm
│ │ │ ├── autofire.dm
│ │ │ ├── cellauto.dm
│ │ │ ├── chat.dm
│ │ │ ├── cmtv.dm
│ │ │ ├── communications.dm
│ │ │ ├── dcs.dm
│ │ │ ├── decorator.dm
│ │ │ ├── disease.dm
│ │ │ ├── events.dm
│ │ │ ├── fz_transitions.dm
│ │ │ ├── game_decorator.dm
│ │ │ ├── garbage.dm
│ │ │ ├── hijack.dm
│ │ │ ├── human.dm
│ │ │ ├── inactivity.dm
│ │ │ ├── influxdriver.dm
│ │ │ ├── influxmcstats.dm
│ │ │ ├── influxstats.dm
│ │ │ ├── init/
│ │ │ │ ├── landmarks.dm
│ │ │ │ ├── law.dm
│ │ │ │ └── lobby_art.dm
│ │ │ ├── input.dm
│ │ │ ├── interior.dm
│ │ │ ├── ipcheck.dm
│ │ │ ├── item_cleanup.dm
│ │ │ ├── lighting.dm
│ │ │ ├── machinery.dm
│ │ │ ├── mapping.dm
│ │ │ ├── minimap.dm
│ │ │ ├── mob.dm
│ │ │ ├── nanoui.dm
│ │ │ ├── nightmare.dm
│ │ │ ├── objectives_controller.dm
│ │ │ ├── pager_status.dm
│ │ │ ├── perf_logging.dm
│ │ │ ├── ping.dm
│ │ │ ├── playtime.dm
│ │ │ ├── police_clues.dm
│ │ │ ├── polls.dm
│ │ │ ├── power.dm
│ │ │ ├── processing/
│ │ │ │ ├── authentication.dm
│ │ │ │ ├── defprocess.dm
│ │ │ │ ├── effects.dm
│ │ │ │ ├── fasteffects.dm
│ │ │ │ ├── fastobj.dm
│ │ │ │ ├── hive_status.dm
│ │ │ │ ├── obj_tab_items.dm
│ │ │ │ ├── objects.dm
│ │ │ │ ├── oldeffects.dm
│ │ │ │ ├── processing.dm
│ │ │ │ ├── shield_pillar.dm
│ │ │ │ └── slowobj.dm
│ │ │ ├── profiler.dm
│ │ │ ├── projectiles.dm
│ │ │ ├── quadtrees.dm
│ │ │ ├── reagents.dm
│ │ │ ├── redis.dm
│ │ │ ├── round_recording.dm
│ │ │ ├── sentry.dm
│ │ │ ├── shuttle.dm
│ │ │ ├── shuttles.dm
│ │ │ ├── sound.dm
│ │ │ ├── sound_loops.dm
│ │ │ ├── soundscape.dm
│ │ │ ├── statpanel.dm
│ │ │ ├── stickyban.dm
│ │ │ ├── techtree.dm
│ │ │ ├── tgui.dm
│ │ │ ├── thunderdome.dm
│ │ │ ├── ticker.dm
│ │ │ ├── time_track.dm
│ │ │ ├── timer.dm
│ │ │ ├── tracking.dm
│ │ │ ├── vote.dm
│ │ │ ├── weather.dm
│ │ │ ├── who.dm
│ │ │ ├── x_evolution.dm
│ │ │ └── xeno.dm
│ │ └── topic.dm
│ ├── datums/
│ │ ├── ASRS.dm
│ │ ├── _atmos_setup.dm
│ │ ├── _ndatabase/
│ │ │ ├── code/
│ │ │ │ ├── brsql_adapter.dm
│ │ │ │ ├── brsql_connection_settings.dm
│ │ │ │ ├── brsql_persistent_connection.dm
│ │ │ │ ├── brsql_persistent_query.dm
│ │ │ │ ├── database.dm
│ │ │ │ ├── entity/
│ │ │ │ │ ├── entity.dm
│ │ │ │ │ ├── entity_meta.dm
│ │ │ │ │ ├── entity_view.dm
│ │ │ │ │ ├── index.dm
│ │ │ │ │ └── link.dm
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── adapter.dm
│ │ │ │ │ ├── connection.dm
│ │ │ │ │ ├── connection_settings.dm
│ │ │ │ │ ├── filter.dm
│ │ │ │ │ ├── native_function.dm
│ │ │ │ │ └── query.dm
│ │ │ │ ├── native_adapter.dm
│ │ │ │ ├── native_connection_settings.dm
│ │ │ │ ├── native_persistent_connection.dm
│ │ │ │ ├── native_persistent_query.dm
│ │ │ │ └── query_response.dm
│ │ │ ├── help/
│ │ │ │ ├── IE9.js
│ │ │ │ ├── contents.html
│ │ │ │ ├── index.html
│ │ │ │ ├── info.html
│ │ │ │ └── prettyref.js
│ │ │ ├── include.dm
│ │ │ ├── subsystems/
│ │ │ │ ├── database_query_manager.dm
│ │ │ │ └── entity_manager.dm
│ │ │ └── tests/
│ │ │ └── test_entity.dm
│ │ ├── action.dm
│ │ ├── agents/
│ │ │ ├── tools/
│ │ │ │ ├── access_tuner.dm
│ │ │ │ ├── badass_kit.dm
│ │ │ │ ├── chloroform.dm
│ │ │ │ ├── conceal_gloves.dm
│ │ │ │ ├── decoy.dm
│ │ │ │ ├── signal_pack.dm
│ │ │ │ ├── stimulants.dm
│ │ │ │ ├── stunbaton.dm
│ │ │ │ ├── toolbox.dm
│ │ │ │ ├── tracker.dm
│ │ │ │ └── tranq_gun.dm
│ │ │ └── tools.dm
│ │ ├── ammo/
│ │ │ ├── ammo.dm
│ │ │ ├── bullet/
│ │ │ │ ├── arc.dm
│ │ │ │ ├── bullet.dm
│ │ │ │ ├── lever_action.dm
│ │ │ │ ├── pistol.dm
│ │ │ │ ├── revolver.dm
│ │ │ │ ├── rifle.dm
│ │ │ │ ├── shotgun.dm
│ │ │ │ ├── smg.dm
│ │ │ │ ├── sniper.dm
│ │ │ │ ├── special_ammo.dm
│ │ │ │ └── tank.dm
│ │ │ ├── energy.dm
│ │ │ ├── misc.dm
│ │ │ ├── rocket.dm
│ │ │ ├── shrapnel.dm
│ │ │ └── xeno.dm
│ │ ├── autocells/
│ │ │ ├── auto_cell.dm
│ │ │ ├── explosion.dm
│ │ │ └── vomit_wave.dm
│ │ ├── balloon_alerts/
│ │ │ └── balloon_alerts.dm
│ │ ├── beam.dm
│ │ ├── browser.dm
│ │ ├── bug_report.dm
│ │ ├── callback.dm
│ │ ├── changelog.dm
│ │ ├── chat_payload.dm
│ │ ├── cmtv_commands.dm
│ │ ├── combat_personalized.dm
│ │ ├── components/
│ │ │ ├── _component.dm
│ │ │ ├── acid_immunity.dm
│ │ │ ├── armor_link.dm
│ │ │ ├── autofire/
│ │ │ │ ├── _automated_fire.dm
│ │ │ │ └── autofire.dm
│ │ │ ├── bad_leg.dm
│ │ │ ├── bonus_damage_stack.dm
│ │ │ ├── cell.dm
│ │ │ ├── cluster_stack.dm
│ │ │ ├── connect_mob_behalf.dm
│ │ │ ├── crate_tag.dm
│ │ │ ├── damage_over_time.dm
│ │ │ ├── deevolve_cooldown.dm
│ │ │ ├── disk_reader.dm
│ │ │ ├── footstep.dm
│ │ │ ├── healing_reduction.dm
│ │ │ ├── heavy_bullets.dm
│ │ │ ├── id_lock.dm
│ │ │ ├── iff_fire_prevention.dm
│ │ │ ├── label.dm
│ │ │ ├── orbiter.dm
│ │ │ ├── overlay_lighting.dm
│ │ │ ├── overwatch_console_control.dm
│ │ │ ├── rename.dm
│ │ │ ├── resin_cleanup.dm
│ │ │ ├── riding/
│ │ │ │ ├── riding.dm
│ │ │ │ ├── riding_mob.dm
│ │ │ │ └── riding_vehicle.dm
│ │ │ ├── shimmy_around.dm
│ │ │ ├── speed_modifier.dm
│ │ │ ├── status_effect_component.dm
│ │ │ ├── tacmap.dm
│ │ │ ├── temporary_mute.dm
│ │ │ ├── toxin_buildup.dm
│ │ │ ├── tracker_bullets.dm
│ │ │ ├── tutorial_status.dm
│ │ │ ├── weed_damage_reduction.dm
│ │ │ ├── weed_food.dm
│ │ │ └── xeno/
│ │ │ ├── hivemind_interference.dm
│ │ │ ├── shield_slash.dm
│ │ │ └── xeno_daze.dm
│ │ ├── computerfiles.dm
│ │ ├── construction/
│ │ │ ├── construction_template.dm
│ │ │ └── xenomorph/
│ │ │ └── construction_template_xenomorph.dm
│ │ ├── control_server.dm
│ │ ├── crew_manifest.dm
│ │ ├── custom_hud.dm
│ │ ├── datacore.dm
│ │ ├── datum.dm
│ │ ├── datumvars.dm
│ │ ├── decorators/
│ │ │ ├── decorator.dm
│ │ │ └── gamemode_decorator.dm
│ │ ├── disease.dm
│ │ ├── diseases/
│ │ │ ├── addiction.dm
│ │ │ ├── advance/
│ │ │ │ ├── advance.dm
│ │ │ │ ├── presets.dm
│ │ │ │ └── symptoms/
│ │ │ │ ├── confusion.dm
│ │ │ │ ├── cough.dm
│ │ │ │ ├── damage_converter.dm
│ │ │ │ ├── dizzy.dm
│ │ │ │ ├── fever.dm
│ │ │ │ ├── hallucinogen.dm
│ │ │ │ ├── headache.dm
│ │ │ │ ├── heal.dm
│ │ │ │ ├── itching.dm
│ │ │ │ ├── shivering.dm
│ │ │ │ ├── sneeze.dm
│ │ │ │ ├── symptoms.dm
│ │ │ │ ├── voice_change.dm
│ │ │ │ ├── vomit.dm
│ │ │ │ └── weight.dm
│ │ │ ├── beesease.dm
│ │ │ ├── black_goo.dm
│ │ │ ├── brainrot.dm
│ │ │ ├── cold.dm
│ │ │ ├── cold9.dm
│ │ │ ├── fake_gbs.dm
│ │ │ ├── flu.dm
│ │ │ ├── fluspanish.dm
│ │ │ ├── gbs.dm
│ │ │ ├── jungle_fever.dm
│ │ │ ├── magnitis.dm
│ │ │ ├── mob_procs.dm
│ │ │ ├── pierrot_throat.dm
│ │ │ ├── plasmatoid.dm
│ │ │ ├── rhumba_beat.dm
│ │ │ └── xeno_transformation.dm
│ │ ├── effects/
│ │ │ ├── _effects.dm
│ │ │ ├── acid.dm
│ │ │ ├── bleeding.dm
│ │ │ ├── heal_over_time.dm
│ │ │ ├── mob_crit/
│ │ │ │ ├── crit.dm
│ │ │ │ └── human_crit.dm
│ │ │ ├── neurotoxin.dm
│ │ │ ├── pain/
│ │ │ │ ├── human_pain.dm
│ │ │ │ ├── monkey_pain.dm
│ │ │ │ └── pain.dm
│ │ │ ├── plasma_over_time.dm
│ │ │ ├── stamina/
│ │ │ │ └── stamina_human.dm
│ │ │ ├── tether.dm
│ │ │ ├── weak_spray_stack.dm
│ │ │ └── xeno_strains/
│ │ │ ├── boiler_trap.dm
│ │ │ ├── dancer_tag.dm
│ │ │ ├── gain_xeno_cooldown_reduction_on_slash.dm
│ │ │ ├── prae_acid_stacks.dm
│ │ │ ├── xeno_buff.dm
│ │ │ ├── xeno_slow.dm
│ │ │ ├── xeno_speed.dm
│ │ │ └── xeno_structure_reinforcement.dm
│ │ ├── elements/
│ │ │ ├── _element.dm
│ │ │ ├── bloody_feet.dm
│ │ │ ├── bullet_trait/
│ │ │ │ ├── bullet_trait.md
│ │ │ │ ├── damage_boost.dm
│ │ │ │ ├── iff.dm
│ │ │ │ ├── ignored_range.dm
│ │ │ │ ├── incendiary.dm
│ │ │ │ ├── knockback_disabled.dm
│ │ │ │ └── penetrating/
│ │ │ │ ├── heavy.dm
│ │ │ │ ├── penetrating.dm
│ │ │ │ └── weak.dm
│ │ │ ├── drop_retrieval.dm
│ │ │ ├── effects/
│ │ │ │ ├── copy_appearance.dm
│ │ │ │ ├── fading.dm
│ │ │ │ ├── pixel_shifting.dm
│ │ │ │ └── temporary.dm
│ │ │ ├── light_blocking.dm
│ │ │ ├── manufacturer_logos.dm
│ │ │ ├── mouth_drop_item.dm
│ │ │ ├── poor_eyesight_correction.dm
│ │ │ ├── riding.dm
│ │ │ ├── strippable.dm
│ │ │ ├── suturing.dm
│ │ │ ├── traitbound/
│ │ │ │ ├── _traitbound.dm
│ │ │ │ ├── crawler.dm
│ │ │ │ ├── gun_silenced.dm
│ │ │ │ └── leadership.dm
│ │ │ └── yautja_tracked_item.dm
│ │ ├── emergency_calls/
│ │ │ ├── big_game_hunter.dm
│ │ │ ├── bodyguard.dm
│ │ │ ├── cbrn.dm
│ │ │ ├── clf.dm
│ │ │ ├── cmb.dm
│ │ │ ├── colonist.dm
│ │ │ ├── contractor.dm
│ │ │ ├── cryo_marines.dm
│ │ │ ├── cryo_marines_heavy.dm
│ │ │ ├── cryo_spec.dm
│ │ │ ├── custom.dm
│ │ │ ├── deathsquad.dm
│ │ │ ├── deus_vult.dm
│ │ │ ├── dutch.dm
│ │ │ ├── emergency_call.dm
│ │ │ ├── ert_stations.dm
│ │ │ ├── feral_xenos.dm
│ │ │ ├── forecon.dm
│ │ │ ├── forsaken_xenos.dm
│ │ │ ├── goons.dm
│ │ │ ├── hefa_knight.dm
│ │ │ ├── inspection.dm
│ │ │ ├── mercs.dm
│ │ │ ├── pirates.dm
│ │ │ ├── pizza.dm
│ │ │ ├── pmc.dm
│ │ │ ├── pred_hunt/
│ │ │ │ └── hunting_calls.dm
│ │ │ ├── provost.dm
│ │ │ ├── riot.dm
│ │ │ ├── royal_marines.dm
│ │ │ ├── solar_devils.dm
│ │ │ ├── souto.dm
│ │ │ ├── supplies.dm
│ │ │ ├── tank_crew.dm
│ │ │ ├── upp.dm
│ │ │ ├── upp_commando.dm
│ │ │ ├── us_army.dm
│ │ │ ├── whiskey_outpost.dm
│ │ │ ├── wy_commando.dm
│ │ │ ├── xeno_cultists.dm
│ │ │ ├── xenos.dm
│ │ │ └── zombie.dm
│ │ ├── emotes.dm
│ │ ├── entities/
│ │ │ ├── chemical_information.dm
│ │ │ ├── clans.dm
│ │ │ ├── login_triplets.dm
│ │ │ ├── logs/
│ │ │ │ └── player_times_log.dm
│ │ │ ├── map_votes.dm
│ │ │ ├── mc_controller.dm
│ │ │ ├── mc_record.dm
│ │ │ ├── mc_round.dm
│ │ │ ├── mc_timing_info.dm
│ │ │ ├── player.dm
│ │ │ ├── player_job_ban.dm
│ │ │ ├── player_note.dm
│ │ │ ├── player_stat.dm
│ │ │ ├── player_sticky_ban.dm
│ │ │ ├── player_times.dm
│ │ │ ├── ticket.dm
│ │ │ └── twitch_link.dm
│ │ ├── event_info_text.dm
│ │ ├── factions/
│ │ │ ├── clf.dm
│ │ │ ├── cmb.dm
│ │ │ ├── contractor.dm
│ │ │ ├── faction.dm
│ │ │ ├── helpers.dm
│ │ │ ├── hyperdyne.dm
│ │ │ ├── iasf.dm
│ │ │ ├── nspa.dm
│ │ │ ├── pap.dm
│ │ │ ├── pmc.dm
│ │ │ ├── pred_ert.dm
│ │ │ ├── royalmarinescommando.dm
│ │ │ ├── upp.dm
│ │ │ ├── uscm.dm
│ │ │ ├── wo.dm
│ │ │ └── wy.dm
│ │ ├── fluff_emails.dm
│ │ ├── global_variables.dm
│ │ ├── helper_datums/
│ │ │ ├── getrev.dm
│ │ │ ├── stack_end_detector.dm
│ │ │ ├── teleport.dm
│ │ │ └── topic_input.dm
│ │ ├── highlight_keywords_payload.dm
│ │ ├── http.dm
│ │ ├── internet_media.dm
│ │ ├── keybinding/
│ │ │ ├── _keybindings.dm
│ │ │ ├── admin.dm
│ │ │ ├── carbon.dm
│ │ │ ├── client.dm
│ │ │ ├── communication.dm
│ │ │ ├── custom.dm
│ │ │ ├── emote.dm
│ │ │ ├── human.dm
│ │ │ ├── human_combat.dm
│ │ │ ├── human_inventory.dm
│ │ │ ├── living.dm
│ │ │ ├── mob.dm
│ │ │ ├── movement.dm
│ │ │ ├── vehicles.dm
│ │ │ ├── xenomorph.dm
│ │ │ └── yautja.dm
│ │ ├── langchat/
│ │ │ └── langchat.dm
│ │ ├── lazy_template.dm
│ │ ├── looping_sounds/
│ │ │ ├── _looping_sound.dm
│ │ │ ├── item_sounds.dm
│ │ │ └── misc_sounds.dm
│ │ ├── map_config.dm
│ │ ├── matrix_editor.dm
│ │ ├── medal_awards.dm
│ │ ├── mind.dm
│ │ ├── mixed.dm
│ │ ├── mob_hud.dm
│ │ ├── movement_detector.dm
│ │ ├── mutable_appearance.dm
│ │ ├── origin/
│ │ │ ├── civilian.dm
│ │ │ ├── cmb.dm
│ │ │ ├── origin.dm
│ │ │ ├── twe.dm
│ │ │ ├── upp.dm
│ │ │ ├── uscm.dm
│ │ │ └── wy.dm
│ │ ├── pain/
│ │ │ ├── _pain.dm
│ │ │ ├── pain_human.dm
│ │ │ ├── pain_human_hero.dm
│ │ │ ├── pain_monkey.dm
│ │ │ ├── pain_synthetic.dm
│ │ │ ├── pain_xeno.dm
│ │ │ ├── pain_yautja.dm
│ │ │ └── pain_zombie.dm
│ │ ├── paygrades/
│ │ │ ├── factions/
│ │ │ │ ├── other/
│ │ │ │ │ ├── civilian.dm
│ │ │ │ │ ├── cmb.dm
│ │ │ │ │ ├── contractors.dm
│ │ │ │ │ ├── dutch_dozen.dm
│ │ │ │ │ ├── freelancer.dm
│ │ │ │ │ └── misc.dm
│ │ │ │ ├── twe/
│ │ │ │ │ ├── nspa.dm
│ │ │ │ │ └── twe.dm
│ │ │ │ ├── upp/
│ │ │ │ │ ├── pap.dm
│ │ │ │ │ └── upp.dm
│ │ │ │ ├── uscm/
│ │ │ │ │ ├── army.dm
│ │ │ │ │ ├── marine.dm
│ │ │ │ │ ├── navy.dm
│ │ │ │ │ └── provost.dm
│ │ │ │ └── wy/
│ │ │ │ ├── commando.dm
│ │ │ │ ├── pmc.dm
│ │ │ │ ├── security.dm
│ │ │ │ └── wy.dm
│ │ │ ├── helper.dm
│ │ │ └── paygrade.dm
│ │ ├── quadtree.dm
│ │ ├── recipe.dm
│ │ ├── redis/
│ │ │ ├── callbacks/
│ │ │ │ ├── _redis_callback.dm
│ │ │ │ └── asay.dm
│ │ │ └── redis_message.dm
│ │ ├── research_upgrade_datum.dm
│ │ ├── shuttles.dm
│ │ ├── skills/
│ │ │ ├── civilian.dm
│ │ │ ├── clf.dm
│ │ │ ├── cmb.dm
│ │ │ ├── commando.dm
│ │ │ ├── contractor.dm
│ │ │ ├── dutch.dm
│ │ │ ├── forecon.dm
│ │ │ ├── freelancer.dm
│ │ │ ├── gladiator.dm
│ │ │ ├── iasf.dm
│ │ │ ├── mercenary.dm
│ │ │ ├── misc.dm
│ │ │ ├── pmc.dm
│ │ │ ├── rmc.dm
│ │ │ ├── skills.dm
│ │ │ ├── synthetic.dm
│ │ │ ├── upp.dm
│ │ │ ├── uscm.dm
│ │ │ └── wygoons.dm
│ │ ├── soundOutput.dm
│ │ ├── spaceports.dm
│ │ ├── stamina/
│ │ │ ├── _stamina.dm
│ │ │ └── none.dm
│ │ ├── statistics/
│ │ │ ├── cause_data.dm
│ │ │ ├── entities/
│ │ │ │ ├── caste_stats.dm
│ │ │ │ ├── death_stats.dm
│ │ │ │ ├── human_stats.dm
│ │ │ │ ├── initial_spec_picks.dm
│ │ │ │ ├── job_stats.dm
│ │ │ │ ├── map_stats.dm
│ │ │ │ ├── marine_death.dm
│ │ │ │ ├── medal_stats.dm
│ │ │ │ ├── panel_stats.dm
│ │ │ │ ├── player_entity.dm
│ │ │ │ ├── player_save.dm
│ │ │ │ ├── player_stats.dm
│ │ │ │ ├── round_caste_picks.dm
│ │ │ │ ├── round_stats.dm
│ │ │ │ ├── survivor_survival.dm
│ │ │ │ ├── weapon_stats.dm
│ │ │ │ ├── xeno_death.dm
│ │ │ │ └── xeno_stats.dm
│ │ │ └── random_facts/
│ │ │ ├── christmas_fact.dm
│ │ │ ├── damage_fact.dm
│ │ │ ├── ib_fact.dm
│ │ │ ├── kills_fact.dm
│ │ │ ├── random_fact.dm
│ │ │ ├── revives_fact.dm
│ │ │ └── steps_fact.dm
│ │ ├── status_effects/
│ │ │ ├── _status_effect.dm
│ │ │ ├── _status_effect_helpers.dm
│ │ │ ├── debuffs/
│ │ │ │ └── debuffs.dm
│ │ │ ├── grouped_effect.dm
│ │ │ ├── limited_effect.dm
│ │ │ └── stacking_effect.dm
│ │ ├── supply_packs/
│ │ │ ├── _supply_packs.dm
│ │ │ ├── ammo.dm
│ │ │ ├── attachments.dm
│ │ │ ├── black_market.dm
│ │ │ ├── clothing.dm
│ │ │ ├── engineering.dm
│ │ │ ├── explosives.dm
│ │ │ ├── food.dm
│ │ │ ├── gear.dm
│ │ │ ├── medical.dm
│ │ │ ├── misc.dm
│ │ │ ├── mortar.dm
│ │ │ ├── operations.dm
│ │ │ ├── reagent_tanks.dm
│ │ │ ├── research.dm
│ │ │ ├── restricted_equipment.dm
│ │ │ ├── spec_ammo.dm
│ │ │ ├── upp_ammo.dm
│ │ │ ├── upp_attachments.dm
│ │ │ ├── upp_clothing.dm
│ │ │ ├── upp_crates.dm
│ │ │ ├── upp_engineering.dm
│ │ │ ├── upp_explosives.dm
│ │ │ ├── upp_food.dm
│ │ │ ├── upp_gear.dm
│ │ │ ├── upp_medical.dm
│ │ │ ├── upp_mortar.dm
│ │ │ ├── upp_weapons.dm
│ │ │ ├── vehicle_ammo.dm
│ │ │ ├── vehicle_equipment.dm
│ │ │ └── weapons.dm
│ │ ├── tacmap_viewer.dm
│ │ ├── tgs_event_handler.dm
│ │ ├── tutorial/
│ │ │ ├── _tutorial.dm
│ │ │ ├── _tutorial_menu.dm
│ │ │ ├── creating_a_tutorial.md
│ │ │ ├── marine/
│ │ │ │ ├── _marine.dm
│ │ │ │ ├── basic_marine.dm
│ │ │ │ ├── hospital_corpsman_sandbox.dm
│ │ │ │ ├── medical_basic.dm
│ │ │ │ └── reqs_line.dm
│ │ │ ├── ss13/
│ │ │ │ ├── _ss13.dm
│ │ │ │ ├── basic_ss13.dm
│ │ │ │ └── intents.dm
│ │ │ ├── tutorial_example.dm
│ │ │ └── xenomorph/
│ │ │ ├── _xenomorph.dm
│ │ │ ├── abomination.dm
│ │ │ └── xenomorph_basic.dm
│ │ ├── vehicles.dm
│ │ ├── weakrefs.dm
│ │ ├── weather/
│ │ │ ├── weather_event.dm
│ │ │ ├── weather_events/
│ │ │ │ ├── big_red.dm
│ │ │ │ ├── faction_clash.dm
│ │ │ │ ├── lv522_chances_claim.dm
│ │ │ │ ├── lv624.dm
│ │ │ │ ├── lv759_hybrisa_prospera.dm
│ │ │ │ ├── new_varadero.dm
│ │ │ │ └── sorokyne.dm
│ │ │ ├── weather_map_holder.dm
│ │ │ └── weather_map_holders/
│ │ │ ├── big_red.dm
│ │ │ ├── faction_clash.dm
│ │ │ ├── lv522_chances_claim.dm
│ │ │ ├── lv624.dm
│ │ │ ├── lv759_hybrisa_prospera.dm
│ │ │ ├── new_varadero.dm
│ │ │ └── sorokyne.dm
│ │ ├── world_topic.dm
│ │ └── xeno_shields/
│ │ ├── shield_types/
│ │ │ ├── crusher_shield.dm
│ │ │ ├── hedgehog_shield.dm
│ │ │ ├── king_shield.dm
│ │ │ └── vanguard_shield.dm
│ │ └── xeno_shield.dm
│ ├── defines/
│ │ ├── procs/
│ │ │ ├── AStar.dm
│ │ │ ├── admin.dm
│ │ │ ├── announcement.dm
│ │ │ ├── conflict.dm
│ │ │ ├── hud.dm
│ │ │ ├── radio.dm
│ │ │ └── records.dm
│ │ └── unit_tests.dm
│ ├── game/
│ │ ├── area/
│ │ │ ├── BigRed.dm
│ │ │ ├── ChigusaShipyard.dm
│ │ │ ├── Corsat.dm
│ │ │ ├── DesertDam.dm
│ │ │ ├── IceColony.dm
│ │ │ ├── LV522_Chances_Claim.dm
│ │ │ ├── LV624.dm
│ │ │ ├── LV759_Hybrisa_Prospera.dm
│ │ │ ├── Prison_Station_FOP.dm
│ │ │ ├── Sulaco.dm
│ │ │ ├── WhiskeyOutpost.dm
│ │ │ ├── Yautja.dm
│ │ │ ├── admin_level.dm
│ │ │ ├── almayer.dm
│ │ │ ├── areas.dm
│ │ │ ├── areas_event.dm
│ │ │ ├── chinook.dm
│ │ │ ├── hijack.dm
│ │ │ ├── kutjevo.dm
│ │ │ ├── prison.dm
│ │ │ ├── prison_v3_fiorina.dm
│ │ │ ├── rostock.dm
│ │ │ ├── shiva.dm
│ │ │ ├── shuttles.dm
│ │ │ ├── space_station_13_areas.dm
│ │ │ ├── strata.dm
│ │ │ ├── techtree.dm
│ │ │ ├── tyrargo_rift.dm
│ │ │ └── varadero.dm
│ │ ├── atoms.dm
│ │ ├── atoms_movable.dm
│ │ ├── bioscans.dm
│ │ ├── blood.dm
│ │ ├── camera_manager/
│ │ │ └── camera_manager.dm
│ │ ├── cas_manager/
│ │ │ └── datums/
│ │ │ ├── cas_fire_envelope.dm
│ │ │ ├── cas_fire_mission.dm
│ │ │ ├── cas_iff_group.dm
│ │ │ └── cas_signal.dm
│ │ ├── gamemodes/
│ │ │ ├── cm_initialize.dm
│ │ │ ├── cm_process.dm
│ │ │ ├── colonialmarines/
│ │ │ │ ├── colonialmarines.dm
│ │ │ │ ├── huntergames.dm
│ │ │ │ ├── whiskey_outpost/
│ │ │ │ │ ├── equipping.dm
│ │ │ │ │ ├── skills.dm
│ │ │ │ │ └── whiskey_output_waves.dm
│ │ │ │ ├── whiskey_outpost.dm
│ │ │ │ └── xenovsxeno.dm
│ │ │ ├── events/
│ │ │ │ └── power_failure.dm
│ │ │ ├── events.dm
│ │ │ ├── extended/
│ │ │ │ ├── cm_vs_upp.dm
│ │ │ │ ├── extended.dm
│ │ │ │ ├── extended_clash.dm
│ │ │ │ ├── extended_nospawn.dm
│ │ │ │ └── infection.dm
│ │ │ ├── game_mode.dm
│ │ │ └── round_modifiers.dm
│ │ ├── jobs/
│ │ │ ├── access.dm
│ │ │ ├── job/
│ │ │ │ ├── antag/
│ │ │ │ │ ├── antag.dm
│ │ │ │ │ ├── other/
│ │ │ │ │ │ └── pred.dm
│ │ │ │ │ └── xeno/
│ │ │ │ │ ├── queen.dm
│ │ │ │ │ └── xenomorph.dm
│ │ │ │ ├── civilians/
│ │ │ │ │ ├── civilian.dm
│ │ │ │ │ ├── other/
│ │ │ │ │ │ ├── corp_sec.dm
│ │ │ │ │ │ ├── liaison.dm
│ │ │ │ │ │ ├── mess_seargent.dm
│ │ │ │ │ │ ├── reporter.dm
│ │ │ │ │ │ └── survivors.dm
│ │ │ │ │ └── support/
│ │ │ │ │ ├── cmo.dm
│ │ │ │ │ ├── doctor.dm
│ │ │ │ │ ├── field_doctor.dm
│ │ │ │ │ ├── nurse.dm
│ │ │ │ │ ├── researcher.dm
│ │ │ │ │ ├── synthetic.dm
│ │ │ │ │ └── working_joe.dm
│ │ │ │ ├── command/
│ │ │ │ │ ├── auxiliary/
│ │ │ │ │ │ ├── auxiliary_support_officer.dm
│ │ │ │ │ │ ├── cas_pilot.dm
│ │ │ │ │ │ ├── crew_chief.dm
│ │ │ │ │ │ ├── dropship_pilot.dm
│ │ │ │ │ │ ├── intel.dm
│ │ │ │ │ │ ├── senior.dm
│ │ │ │ │ │ └── tank_crew.dm
│ │ │ │ │ ├── cic/
│ │ │ │ │ │ ├── captain.dm
│ │ │ │ │ │ ├── executive.dm
│ │ │ │ │ │ └── staffofficer.dm
│ │ │ │ │ ├── command.dm
│ │ │ │ │ └── police/
│ │ │ │ │ ├── chief_police.dm
│ │ │ │ │ ├── police.dm
│ │ │ │ │ └── warden.dm
│ │ │ │ ├── job.dm
│ │ │ │ ├── logistics/
│ │ │ │ │ ├── cargo/
│ │ │ │ │ │ ├── cargo_tech.dm
│ │ │ │ │ │ └── chief_req.dm
│ │ │ │ │ ├── engi/
│ │ │ │ │ │ ├── chief_engineer.dm
│ │ │ │ │ │ ├── maint_tech.dm
│ │ │ │ │ │ └── ordnance_tech.dm
│ │ │ │ │ └── logistics.dm
│ │ │ │ ├── marine/
│ │ │ │ │ ├── marine.dm
│ │ │ │ │ ├── squad/
│ │ │ │ │ │ ├── engineer.dm
│ │ │ │ │ │ ├── leader.dm
│ │ │ │ │ │ ├── medic.dm
│ │ │ │ │ │ ├── smartgunner.dm
│ │ │ │ │ │ ├── specialist.dm
│ │ │ │ │ │ ├── standard.dm
│ │ │ │ │ │ └── tl.dm
│ │ │ │ │ ├── squad_info.dm
│ │ │ │ │ └── squads.dm
│ │ │ │ └── special/
│ │ │ │ ├── cmb.dm
│ │ │ │ ├── provost.dm
│ │ │ │ ├── responders.dm
│ │ │ │ ├── uscm.dm
│ │ │ │ └── weyland_yutani.dm
│ │ │ ├── role_authority.dm
│ │ │ ├── slot_scaling.dm
│ │ │ └── whitelist.dm
│ │ ├── machinery/
│ │ │ ├── ARES/
│ │ │ │ ├── ARES.dm
│ │ │ │ ├── ARES_interface.dm
│ │ │ │ ├── ARES_interface_admin.dm
│ │ │ │ ├── ARES_interface_apollo.dm
│ │ │ │ ├── ARES_interface_data.dm
│ │ │ │ ├── ARES_procs.dm
│ │ │ │ ├── ARES_records.dm
│ │ │ │ ├── ARES_step_triggers.dm
│ │ │ │ └── apollo_pda.dm
│ │ │ ├── OpTable.dm
│ │ │ ├── aicore_lockdown.dm
│ │ │ ├── air_alarm.dm
│ │ │ ├── atmoalter/
│ │ │ │ ├── canister.dm
│ │ │ │ ├── meter.dm
│ │ │ │ ├── portable_atmospherics.dm
│ │ │ │ ├── pump.dm
│ │ │ │ └── scrubber.dm
│ │ │ ├── autolathe.dm
│ │ │ ├── autolathe_datums.dm
│ │ │ ├── biohazard_lockdown.dm
│ │ │ ├── bioprinter.dm
│ │ │ ├── bots/
│ │ │ │ ├── bots.dm
│ │ │ │ ├── cleanbot.dm
│ │ │ │ ├── cprbot.dm
│ │ │ │ ├── floorbot.dm
│ │ │ │ ├── medbot.dm
│ │ │ │ └── mulebot.dm
│ │ │ ├── buttons.dm
│ │ │ ├── camera/
│ │ │ │ ├── camera.dm
│ │ │ │ ├── motion.dm
│ │ │ │ ├── presets.dm
│ │ │ │ └── wires.dm
│ │ │ ├── cell_charger.dm
│ │ │ ├── cloning.dm
│ │ │ ├── colony_floodlights.dm
│ │ │ ├── communications_encryption.dm
│ │ │ ├── computer/
│ │ │ │ ├── HolodeckControl.dm
│ │ │ │ ├── Operating.dm
│ │ │ │ ├── almayer_control.dm
│ │ │ │ ├── arcade.dm
│ │ │ │ ├── area_air_control.dm
│ │ │ │ ├── atmos_alert.dm
│ │ │ │ ├── buildandrepair.dm
│ │ │ │ ├── camera_console.dm
│ │ │ │ ├── communications.dm
│ │ │ │ ├── computer.dm
│ │ │ │ ├── demo_sim.dm
│ │ │ │ ├── dropship_weapons.dm
│ │ │ │ ├── emails.dm
│ │ │ │ ├── fax_responder_spy.dm
│ │ │ │ ├── fluff.dm
│ │ │ │ ├── general_air_control.dm
│ │ │ │ ├── groundside_operations.dm
│ │ │ │ ├── guestpass.dm
│ │ │ │ ├── hybrisa_slotmachine.dm
│ │ │ │ ├── medical.dm
│ │ │ │ ├── pod.dm
│ │ │ │ ├── prisoner.dm
│ │ │ │ ├── research.dm
│ │ │ │ ├── robot.dm
│ │ │ │ ├── robots_props.dm
│ │ │ │ ├── security.dm
│ │ │ │ ├── sentencing.dm
│ │ │ │ ├── skills.dm
│ │ │ │ ├── station_alert.dm
│ │ │ │ └── wy_computer.dm
│ │ │ ├── constructable_frame.dm
│ │ │ ├── cryo.dm
│ │ │ ├── cryopod.dm
│ │ │ ├── deployable.dm
│ │ │ ├── door_control.dm
│ │ │ ├── door_display/
│ │ │ │ └── door_display.dm
│ │ │ ├── doors/
│ │ │ │ ├── airlock.dm
│ │ │ │ ├── airlock_control.dm
│ │ │ │ ├── airlock_types.dm
│ │ │ │ ├── alarmlock.dm
│ │ │ │ ├── brig_system.dm
│ │ │ │ ├── checkForMultipleDoors.dm
│ │ │ │ ├── door.dm
│ │ │ │ ├── firedoor.dm
│ │ │ │ ├── multi_tile.dm
│ │ │ │ ├── poddoor/
│ │ │ │ │ ├── almayer.dm
│ │ │ │ │ ├── poddoor.dm
│ │ │ │ │ ├── shutters/
│ │ │ │ │ │ └── shutters.dm
│ │ │ │ │ └── two_tile.dm
│ │ │ │ ├── railing.dm
│ │ │ │ ├── runed_sandstone.dm
│ │ │ │ ├── unpowered.dm
│ │ │ │ └── windowdoor.dm
│ │ │ ├── embedded_controller/
│ │ │ │ ├── docking_program.dm
│ │ │ │ ├── embedded_controller_base.dm
│ │ │ │ ├── embedded_program_base.dm
│ │ │ │ └── simple_docking_controller.dm
│ │ │ ├── fax_machine.dm
│ │ │ ├── fire_alarm.dm
│ │ │ ├── flasher.dm
│ │ │ ├── floodlight.dm
│ │ │ ├── fuelcell_recycler.dm
│ │ │ ├── fusion_engine.dm
│ │ │ ├── gear.dm
│ │ │ ├── holosign.dm
│ │ │ ├── hybrisa_lights.dm
│ │ │ ├── igniter.dm
│ │ │ ├── iv_drip.dm
│ │ │ ├── kitchen/
│ │ │ │ ├── gibber.dm
│ │ │ │ ├── juicer.dm
│ │ │ │ ├── microwave.dm
│ │ │ │ ├── processor.dm
│ │ │ │ └── smartfridge.dm
│ │ │ ├── lightswitch.dm
│ │ │ ├── line_nexter.dm
│ │ │ ├── machinery.dm
│ │ │ ├── medical_pod/
│ │ │ │ ├── autodoc.dm
│ │ │ │ ├── bodyscanner.dm
│ │ │ │ ├── bone_gel_refill.dm
│ │ │ │ ├── medical_pod.dm
│ │ │ │ └── sleeper.dm
│ │ │ ├── mining.dm
│ │ │ ├── misc.dm
│ │ │ ├── newscaster.dm
│ │ │ ├── nuclearbomb.dm
│ │ │ ├── pipe/
│ │ │ │ ├── construction.dm
│ │ │ │ └── pipe_dispenser.dm
│ │ │ ├── recharger.dm
│ │ │ ├── rechargestation.dm
│ │ │ ├── robot_fabricator.dm
│ │ │ ├── scoreboard.dm
│ │ │ ├── seed_extractor.dm
│ │ │ ├── sentry_holder.dm
│ │ │ ├── spaceheater.dm
│ │ │ ├── status_display.dm
│ │ │ ├── storm_siren.dm
│ │ │ ├── suit_storage_unit.dm
│ │ │ ├── supply_display.dm
│ │ │ ├── telecomms/
│ │ │ │ ├── broadcaster.dm
│ │ │ │ ├── logbrowser.dm
│ │ │ │ ├── machine_interactions.dm
│ │ │ │ ├── portable_comms.dm
│ │ │ │ ├── presets.dm
│ │ │ │ ├── telecomunications.dm
│ │ │ │ ├── telemonitor.dm
│ │ │ │ └── traffic_control.dm
│ │ │ ├── teleporter.dm
│ │ │ ├── vending/
│ │ │ │ ├── cm_vending.dm
│ │ │ │ ├── essential_sets.dm
│ │ │ │ ├── vending.dm
│ │ │ │ ├── vending_types.dm
│ │ │ │ └── vendor_types/
│ │ │ │ ├── antag/
│ │ │ │ │ ├── antag_clothing.dm
│ │ │ │ │ ├── antag_gear.dm
│ │ │ │ │ ├── antag_guns_snowflake.dm
│ │ │ │ │ ├── antag_guns_sorted.dm
│ │ │ │ │ ├── antag_predator.dm
│ │ │ │ │ └── antag_upp_commanding_officer.dm
│ │ │ │ ├── crew/
│ │ │ │ │ ├── cia_agents.dm
│ │ │ │ │ ├── combat_correspondent.dm
│ │ │ │ │ ├── commanding_officer.dm
│ │ │ │ │ ├── corporate_liaison.dm
│ │ │ │ │ ├── corporate_security.dm
│ │ │ │ │ ├── engineering.dm
│ │ │ │ │ ├── k9_synth.dm
│ │ │ │ │ ├── medical.dm
│ │ │ │ │ ├── mp.dm
│ │ │ │ │ ├── pilot_officer.dm
│ │ │ │ │ ├── sea.dm
│ │ │ │ │ ├── senior_officers.dm
│ │ │ │ │ ├── staff_officer.dm
│ │ │ │ │ ├── synthetic.dm
│ │ │ │ │ └── vehicle_crew.dm
│ │ │ │ ├── dress.dm
│ │ │ │ ├── engineering.dm
│ │ │ │ ├── food.dm
│ │ │ │ ├── general.dm
│ │ │ │ ├── intelligence_officer.dm
│ │ │ │ ├── medical.dm
│ │ │ │ ├── prep_upp/
│ │ │ │ │ ├── requisitions_upp.dm
│ │ │ │ │ ├── squad_prep_upp.dm
│ │ │ │ │ └── uniform_upp.dm
│ │ │ │ ├── requisitions.dm
│ │ │ │ ├── squad_prep/
│ │ │ │ │ ├── squad_engineer.dm
│ │ │ │ │ ├── squad_leader.dm
│ │ │ │ │ ├── squad_medic.dm
│ │ │ │ │ ├── squad_prep.dm
│ │ │ │ │ ├── squad_rifleman.dm
│ │ │ │ │ ├── squad_smartgunner.dm
│ │ │ │ │ ├── squad_specialist.dm
│ │ │ │ │ ├── squad_tl.dm
│ │ │ │ │ └── tutorial.dm
│ │ │ │ ├── supplies.dm
│ │ │ │ └── wo_vendors.dm
│ │ │ ├── washing_machine.dm
│ │ │ └── weather_siren.dm
│ │ ├── objects/
│ │ │ ├── effects/
│ │ │ │ ├── acid_hole.dm
│ │ │ │ ├── afterimage.dm
│ │ │ │ ├── aliens.dm
│ │ │ │ ├── block.dm
│ │ │ │ ├── bloodsplatter.dm
│ │ │ │ ├── client_image_holder.dm
│ │ │ │ ├── decals/
│ │ │ │ │ ├── cleanable/
│ │ │ │ │ │ ├── blood/
│ │ │ │ │ │ │ ├── blood.dm
│ │ │ │ │ │ │ ├── robots.dm
│ │ │ │ │ │ │ ├── tracks.dm
│ │ │ │ │ │ │ └── xeno.dm
│ │ │ │ │ │ ├── cleanable.dm
│ │ │ │ │ │ ├── fuel.dm
│ │ │ │ │ │ └── misc.dm
│ │ │ │ │ ├── crayon.dm
│ │ │ │ │ ├── decal.dm
│ │ │ │ │ ├── floor_symbol.dm
│ │ │ │ │ ├── heavy_cable_decal.dm
│ │ │ │ │ ├── hefa_cult_decals.dm
│ │ │ │ │ ├── hybrisa_decals.dm
│ │ │ │ │ ├── kutjevo_decals.dm
│ │ │ │ │ ├── medical_decals.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── posters/
│ │ │ │ │ │ └── poster_list.dm
│ │ │ │ │ ├── posters.dm
│ │ │ │ │ ├── prints.dm
│ │ │ │ │ ├── remains.dm
│ │ │ │ │ ├── strata_decals.dm
│ │ │ │ │ └── warning_stripes.dm
│ │ │ │ ├── effect.dm
│ │ │ │ ├── effect_system/
│ │ │ │ │ ├── chemsmoke.dm
│ │ │ │ │ ├── effect_system.dm
│ │ │ │ │ ├── explosions.dm
│ │ │ │ │ ├── foam.dm
│ │ │ │ │ ├── particle_effects.dm
│ │ │ │ │ └── smoke.dm
│ │ │ │ ├── elevator.dm
│ │ │ │ ├── glowshroom.dm
│ │ │ │ ├── heavy_impact.dm
│ │ │ │ ├── king_leap.dm
│ │ │ │ ├── landmarks/
│ │ │ │ │ ├── corpsespawner.dm
│ │ │ │ │ ├── freed_mob_spawner.dm
│ │ │ │ │ ├── item_pool.dm
│ │ │ │ │ ├── itemspawner.dm
│ │ │ │ │ ├── landmarks.dm
│ │ │ │ │ ├── structure_spawners/
│ │ │ │ │ │ ├── setup_distress.dm
│ │ │ │ │ │ ├── structure_spawner.dm
│ │ │ │ │ │ └── xvx_hive.dm
│ │ │ │ │ └── survivor_spawner.dm
│ │ │ │ ├── manifest.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── overlays.dm
│ │ │ │ ├── portals.dm
│ │ │ │ ├── projector.dm
│ │ │ │ ├── rappel_rope.dm
│ │ │ │ ├── shockwave.dm
│ │ │ │ ├── spawners/
│ │ │ │ │ ├── faction_spawners.dm
│ │ │ │ │ ├── gibspawner.dm
│ │ │ │ │ ├── prop_gun_spawner.dm
│ │ │ │ │ ├── random.dm
│ │ │ │ │ ├── spawner.dm
│ │ │ │ │ └── wo_spawners/
│ │ │ │ │ ├── players.dm
│ │ │ │ │ └── supplies.dm
│ │ │ │ ├── spiders.dm
│ │ │ │ └── step_triggers.dm
│ │ │ ├── empulse.dm
│ │ │ ├── explosion.dm
│ │ │ ├── explosion_recursive.dm
│ │ │ ├── items/
│ │ │ │ ├── XMAS.dm
│ │ │ │ ├── ashtray.dm
│ │ │ │ ├── backpack_sprayers.dm
│ │ │ │ ├── bodybag.dm
│ │ │ │ ├── books/
│ │ │ │ │ ├── book.dm
│ │ │ │ │ └── manuals.dm
│ │ │ │ ├── cards_ids.dm
│ │ │ │ ├── circuitboards/
│ │ │ │ │ ├── airlock.dm
│ │ │ │ │ ├── circuitboard.dm
│ │ │ │ │ ├── computer.dm
│ │ │ │ │ ├── machine.dm
│ │ │ │ │ ├── mecha.dm
│ │ │ │ │ └── robot_modules.dm
│ │ │ │ ├── contraband.dm
│ │ │ │ ├── cosmetics.dm
│ │ │ │ ├── cpr_dummy.dm
│ │ │ │ ├── cprbot_item.dm
│ │ │ │ ├── devices/
│ │ │ │ │ ├── aicard.dm
│ │ │ │ │ ├── autopsy_scanner.dm
│ │ │ │ │ ├── binoculars.dm
│ │ │ │ │ ├── cictablet.dm
│ │ │ │ │ ├── cloaking.dm
│ │ │ │ │ ├── clue_scanner.dm
│ │ │ │ │ ├── coins.dm
│ │ │ │ │ ├── data_detector.dm
│ │ │ │ │ ├── defibrillator.dm
│ │ │ │ │ ├── device.dm
│ │ │ │ │ ├── dummy_tablet.dm
│ │ │ │ │ ├── flash.dm
│ │ │ │ │ ├── flashlight.dm
│ │ │ │ │ ├── floor_painter.dm
│ │ │ │ │ ├── helmet_visors.dm
│ │ │ │ │ ├── lightreplacer.dm
│ │ │ │ │ ├── megaphone.dm
│ │ │ │ │ ├── motion_detector.dm
│ │ │ │ │ ├── multitool.dm
│ │ │ │ │ ├── personal_data_transmitter.dm
│ │ │ │ │ ├── pinpointer.dm
│ │ │ │ │ ├── pipe_painter.dm
│ │ │ │ │ ├── portable_vendor.dm
│ │ │ │ │ ├── radio/
│ │ │ │ │ │ ├── beacon.dm
│ │ │ │ │ │ ├── electropack.dm
│ │ │ │ │ │ ├── encryptionkey.dm
│ │ │ │ │ │ ├── headset.dm
│ │ │ │ │ │ ├── intercom.dm
│ │ │ │ │ │ ├── listening_bugs.dm
│ │ │ │ │ │ ├── motion_sensor.dm
│ │ │ │ │ │ └── radio.dm
│ │ │ │ │ ├── scanners.dm
│ │ │ │ │ ├── taperecorder.dm
│ │ │ │ │ ├── teleportation.dm
│ │ │ │ │ ├── transfer_valve.dm
│ │ │ │ │ ├── vulture_spotter.dm
│ │ │ │ │ ├── walkman.dm
│ │ │ │ │ └── whistle.dm
│ │ │ │ ├── disks.dm
│ │ │ │ ├── explosives/
│ │ │ │ │ ├── explosive.dm
│ │ │ │ │ ├── grenades/
│ │ │ │ │ │ ├── chem_grenade.dm
│ │ │ │ │ │ ├── emgrenade.dm
│ │ │ │ │ │ ├── flashbang.dm
│ │ │ │ │ │ ├── grenade.dm
│ │ │ │ │ │ ├── marines.dm
│ │ │ │ │ │ ├── spawnergrenade.dm
│ │ │ │ │ │ └── xeno_nades.dm
│ │ │ │ │ ├── mine.dm
│ │ │ │ │ ├── plastic.dm
│ │ │ │ │ └── warhead.dm
│ │ │ │ ├── frames/
│ │ │ │ │ ├── alarms.dm
│ │ │ │ │ ├── bot_assembly.dm
│ │ │ │ │ ├── camera.dm
│ │ │ │ │ ├── frame.dm
│ │ │ │ │ ├── light_fixtures.dm
│ │ │ │ │ ├── matrix.dm
│ │ │ │ │ └── table_rack.dm
│ │ │ │ ├── fulton.dm
│ │ │ │ ├── gift_wrappaper.dm
│ │ │ │ ├── handcuffs.dm
│ │ │ │ ├── handheld_distress_beacon.dm
│ │ │ │ ├── hoverpack.dm
│ │ │ │ ├── implants/
│ │ │ │ │ ├── implant.dm
│ │ │ │ │ ├── implantcase.dm
│ │ │ │ │ ├── implanter.dm
│ │ │ │ │ ├── implantfreedom.dm
│ │ │ │ │ ├── implantneurostim.dm
│ │ │ │ │ └── implantpad.dm
│ │ │ │ ├── legcuffs.dm
│ │ │ │ ├── lightstick.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── ore.dm
│ │ │ │ ├── paint.dm
│ │ │ │ ├── pamphlets/
│ │ │ │ │ ├── pamphlet_languages.dm
│ │ │ │ │ ├── pamphlet_upgrades.dm
│ │ │ │ │ └── pamphlets.dm
│ │ │ │ ├── props/
│ │ │ │ │ ├── helmetgarb.dm
│ │ │ │ │ ├── robots.dm
│ │ │ │ │ ├── rocks.dm
│ │ │ │ │ └── souto_land.dm
│ │ │ │ ├── reagent_containers/
│ │ │ │ │ ├── autoinjectors.dm
│ │ │ │ │ ├── beverages.dm
│ │ │ │ │ ├── blood_pack.dm
│ │ │ │ │ ├── dropper.dm
│ │ │ │ │ ├── food/
│ │ │ │ │ │ ├── canned_food.dm
│ │ │ │ │ │ ├── cans.dm
│ │ │ │ │ │ ├── condiment.dm
│ │ │ │ │ │ ├── drinks/
│ │ │ │ │ │ │ ├── bottle.dm
│ │ │ │ │ │ │ ├── drinkingglass.dm
│ │ │ │ │ │ │ └── jar.dm
│ │ │ │ │ │ ├── drinks.dm
│ │ │ │ │ │ ├── fish_snacks.dm
│ │ │ │ │ │ ├── fortunecookie.dm
│ │ │ │ │ │ ├── mre_food/
│ │ │ │ │ │ │ ├── clf.dm
│ │ │ │ │ │ │ ├── core_food.dm
│ │ │ │ │ │ │ ├── mercenary.dm
│ │ │ │ │ │ │ ├── twe.dm
│ │ │ │ │ │ │ ├── upp.dm
│ │ │ │ │ │ │ ├── uscm.dm
│ │ │ │ │ │ │ └── wy.dm
│ │ │ │ │ │ ├── sandwich.dm
│ │ │ │ │ │ ├── snacks/
│ │ │ │ │ │ │ ├── grown.dm
│ │ │ │ │ │ │ └── meat.dm
│ │ │ │ │ │ └── snacks.dm
│ │ │ │ │ ├── food.dm
│ │ │ │ │ ├── glass/
│ │ │ │ │ │ ├── bottle/
│ │ │ │ │ │ │ └── robot.dm
│ │ │ │ │ │ └── bottle.dm
│ │ │ │ │ ├── glass.dm
│ │ │ │ │ ├── hypospray.dm
│ │ │ │ │ ├── pill.dm
│ │ │ │ │ ├── reagent_container.dm
│ │ │ │ │ ├── robodropper.dm
│ │ │ │ │ ├── robot_parts.dm
│ │ │ │ │ ├── spray.dm
│ │ │ │ │ └── syringes.dm
│ │ │ │ ├── research_upgrades.dm
│ │ │ │ ├── shards.dm
│ │ │ │ ├── stacks/
│ │ │ │ │ ├── barbed_wire.dm
│ │ │ │ │ ├── cable_coil.dm
│ │ │ │ │ ├── catwalk.dm
│ │ │ │ │ ├── flags.dm
│ │ │ │ │ ├── medical.dm
│ │ │ │ │ ├── nanopaste.dm
│ │ │ │ │ ├── predator.dm
│ │ │ │ │ ├── rods.dm
│ │ │ │ │ ├── sandbags.dm
│ │ │ │ │ ├── sheets/
│ │ │ │ │ │ ├── glass.dm
│ │ │ │ │ │ ├── leather.dm
│ │ │ │ │ │ ├── light.dm
│ │ │ │ │ │ ├── mineral.dm
│ │ │ │ │ │ ├── sheet_types.dm
│ │ │ │ │ │ └── sheets.dm
│ │ │ │ │ ├── snow.dm
│ │ │ │ │ ├── stack.dm
│ │ │ │ │ └── tiles/
│ │ │ │ │ ├── light.dm
│ │ │ │ │ └── tile_types.dm
│ │ │ │ ├── stock_parts.dm
│ │ │ │ ├── storage/
│ │ │ │ │ ├── backpack.dm
│ │ │ │ │ ├── bags.dm
│ │ │ │ │ ├── belt.dm
│ │ │ │ │ ├── bible.dm
│ │ │ │ │ ├── boxes.dm
│ │ │ │ │ ├── briefcase.dm
│ │ │ │ │ ├── fancy.dm
│ │ │ │ │ ├── firstaid.dm
│ │ │ │ │ ├── internal.dm
│ │ │ │ │ ├── large_holster.dm
│ │ │ │ │ ├── lockbox.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── mre.dm
│ │ │ │ │ ├── pouch.dm
│ │ │ │ │ ├── secure.dm
│ │ │ │ │ ├── smartpack.dm
│ │ │ │ │ ├── storage.dm
│ │ │ │ │ ├── surgical_tray.dm
│ │ │ │ │ ├── toolbox.dm
│ │ │ │ │ ├── toolkit.dm
│ │ │ │ │ └── wallets.dm
│ │ │ │ ├── tanks/
│ │ │ │ │ ├── tank_types.dm
│ │ │ │ │ └── tanks.dm
│ │ │ │ ├── tools/
│ │ │ │ │ ├── cleaning_tools.dm
│ │ │ │ │ ├── experimental_tools.dm
│ │ │ │ │ ├── extinguisher.dm
│ │ │ │ │ ├── flame_tools.dm
│ │ │ │ │ ├── hydro_tools.dm
│ │ │ │ │ ├── kitchen_tools.dm
│ │ │ │ │ ├── maintenance_tools.dm
│ │ │ │ │ ├── mining_tools.dm
│ │ │ │ │ ├── misc_tools.dm
│ │ │ │ │ ├── shovel_tools.dm
│ │ │ │ │ └── surgery_tools.dm
│ │ │ │ ├── toys/
│ │ │ │ │ ├── cards.dm
│ │ │ │ │ ├── crayons.dm
│ │ │ │ │ ├── toy_weapons.dm
│ │ │ │ │ ├── toys.dm
│ │ │ │ │ └── trading_cards.dm
│ │ │ │ ├── trash.dm
│ │ │ │ └── weapons/
│ │ │ │ ├── blades.dm
│ │ │ │ ├── energy.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── shields.dm
│ │ │ │ ├── stunbaton.dm
│ │ │ │ ├── swords_axes_etc.dm
│ │ │ │ ├── twohanded.dm
│ │ │ │ ├── weapon.dm
│ │ │ │ └── weaponry.dm
│ │ │ ├── items.dm
│ │ │ ├── objs.dm
│ │ │ ├── prop.dm
│ │ │ ├── shrapnel.dm
│ │ │ ├── structures/
│ │ │ │ ├── airlock_assembly.dm
│ │ │ │ ├── ancient_brazier.dm
│ │ │ │ ├── barricade/
│ │ │ │ │ ├── barricade.dm
│ │ │ │ │ ├── deployable.dm
│ │ │ │ │ ├── folding.dm
│ │ │ │ │ ├── handrail.dm
│ │ │ │ │ ├── misc.dm
│ │ │ │ │ ├── non_folding.dm
│ │ │ │ │ └── sandbags.dm
│ │ │ │ ├── barsign.dm
│ │ │ │ ├── bedsheet_bin.dm
│ │ │ │ ├── blocker.dm
│ │ │ │ ├── bookcase.dm
│ │ │ │ ├── cargo_container.dm
│ │ │ │ ├── catwalk.dm
│ │ │ │ ├── coathanger.dm
│ │ │ │ ├── crates_lockers/
│ │ │ │ │ ├── closets/
│ │ │ │ │ │ ├── coffin.dm
│ │ │ │ │ │ ├── crittercrate.dm
│ │ │ │ │ │ ├── fireaxe.dm
│ │ │ │ │ │ ├── fitness.dm
│ │ │ │ │ │ ├── gimmick.dm
│ │ │ │ │ │ ├── job_closets.dm
│ │ │ │ │ │ ├── l3closet.dm
│ │ │ │ │ │ ├── phonebox.dm
│ │ │ │ │ │ ├── secure/
│ │ │ │ │ │ │ ├── bar.dm
│ │ │ │ │ │ │ ├── cargo.dm
│ │ │ │ │ │ │ ├── cm_closets.dm
│ │ │ │ │ │ │ ├── emergency/
│ │ │ │ │ │ │ │ ├── emergency_closets.dm
│ │ │ │ │ │ │ │ └── medical.dm
│ │ │ │ │ │ │ ├── engineering.dm
│ │ │ │ │ │ │ ├── freezer.dm
│ │ │ │ │ │ │ ├── guncabinet/
│ │ │ │ │ │ │ │ ├── guncabinet.dm
│ │ │ │ │ │ │ │ ├── level_blue.dm
│ │ │ │ │ │ │ │ └── level_red.dm
│ │ │ │ │ │ │ ├── hydroponics.dm
│ │ │ │ │ │ │ ├── kitchen.dm
│ │ │ │ │ │ │ ├── medical.dm
│ │ │ │ │ │ │ ├── personal.dm
│ │ │ │ │ │ │ ├── scientist.dm
│ │ │ │ │ │ │ ├── secure_closets.dm
│ │ │ │ │ │ │ └── security.dm
│ │ │ │ │ │ ├── utility_closets.dm
│ │ │ │ │ │ ├── wall_locker.dm
│ │ │ │ │ │ └── wardrobe.dm
│ │ │ │ │ ├── closets.dm
│ │ │ │ │ ├── crates.dm
│ │ │ │ │ ├── largecrate.dm
│ │ │ │ │ ├── largecrate_supplies.dm
│ │ │ │ │ └── secure_crates.dm
│ │ │ │ ├── curtains.dm
│ │ │ │ ├── desertdam.dm
│ │ │ │ ├── displaycase.dm
│ │ │ │ ├── extinguisher.dm
│ │ │ │ ├── fence.dm
│ │ │ │ ├── flora.dm
│ │ │ │ ├── girders.dm
│ │ │ │ ├── grille.dm
│ │ │ │ ├── hunter_props.dm
│ │ │ │ ├── hybrisa_props.dm
│ │ │ │ ├── ice_caves.dm
│ │ │ │ ├── inflatable.dm
│ │ │ │ ├── janicart.dm
│ │ │ │ ├── kitchen_spike.dm
│ │ │ │ ├── ladders.dm
│ │ │ │ ├── lamarr_cage.dm
│ │ │ │ ├── landing_signs.dm
│ │ │ │ ├── lattice.dm
│ │ │ │ ├── lawnmower.dm
│ │ │ │ ├── mineral_doors.dm
│ │ │ │ ├── mirror.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── morgue.dm
│ │ │ │ ├── multiz_stairs.dm
│ │ │ │ ├── musician.dm
│ │ │ │ ├── noticeboard.dm
│ │ │ │ ├── pipes/
│ │ │ │ │ ├── binary_misc.dm
│ │ │ │ │ ├── multiz_pipes.dm
│ │ │ │ │ ├── pipes.dm
│ │ │ │ │ ├── standard/
│ │ │ │ │ │ ├── manifolds.dm
│ │ │ │ │ │ ├── simple.dm
│ │ │ │ │ │ ├── standard.dm
│ │ │ │ │ │ └── standard_misc.dm
│ │ │ │ │ ├── trinary_misc.dm
│ │ │ │ │ ├── unary_misc.dm
│ │ │ │ │ ├── valve_connector.dm
│ │ │ │ │ └── vents/
│ │ │ │ │ ├── pump_scrubber.dm
│ │ │ │ │ └── vents.dm
│ │ │ │ ├── platforms.dm
│ │ │ │ ├── prop_mech.dm
│ │ │ │ ├── props/
│ │ │ │ │ ├── requests_console.dm
│ │ │ │ │ └── research.dm
│ │ │ │ ├── props.dm
│ │ │ │ ├── reagent_dispensers.dm
│ │ │ │ ├── roof.dm
│ │ │ │ ├── safe.dm
│ │ │ │ ├── shower.dm
│ │ │ │ ├── signs.dm
│ │ │ │ ├── sink.dm
│ │ │ │ ├── stool_bed_chair_nest/
│ │ │ │ │ ├── bed.dm
│ │ │ │ │ ├── chairs.dm
│ │ │ │ │ ├── janicart.dm
│ │ │ │ │ ├── sofa.dm
│ │ │ │ │ ├── stools.dm
│ │ │ │ │ ├── wheelchair.dm
│ │ │ │ │ └── xeno_nest.dm
│ │ │ │ ├── surface.dm
│ │ │ │ ├── tables_racks.dm
│ │ │ │ ├── tank_dispenser.dm
│ │ │ │ ├── temple_rubble.dm
│ │ │ │ ├── tyrargo_props.dm
│ │ │ │ ├── urinal.dm
│ │ │ │ ├── vulture_spotter.dm
│ │ │ │ ├── watercloset.dm
│ │ │ │ ├── windoor_assembly.dm
│ │ │ │ ├── window.dm
│ │ │ │ └── window_frame.dm
│ │ │ └── structures.dm
│ │ ├── runtimes.dm
│ │ ├── shuttle_engines.dm
│ │ ├── sim_manager/
│ │ │ └── datums/
│ │ │ └── simulator.dm
│ │ ├── skincmd.dm
│ │ ├── smoothwall.dm
│ │ ├── sound.dm
│ │ ├── supplyshuttle.dm
│ │ ├── supplyshuttle_upp.dm
│ │ ├── turfs/
│ │ │ ├── auto_turf.dm
│ │ │ ├── baseturf_skipover.dm
│ │ │ ├── closed.dm
│ │ │ ├── floor.dm
│ │ │ ├── floor_types.dm
│ │ │ ├── floors/
│ │ │ │ └── desert.dm
│ │ │ ├── hunter_turf.dm
│ │ │ ├── hybrisa.dm
│ │ │ ├── kutjevo.dm
│ │ │ ├── light.dm
│ │ │ ├── open.dm
│ │ │ ├── open_space.dm
│ │ │ ├── shale.dm
│ │ │ ├── shiva.dm
│ │ │ ├── soro.dm
│ │ │ ├── space.dm
│ │ │ ├── strata.dm
│ │ │ ├── transit.dm
│ │ │ ├── turf.dm
│ │ │ └── walls/
│ │ │ ├── r_wall.dm
│ │ │ ├── wall_icon.dm
│ │ │ ├── wall_types.dm
│ │ │ └── walls.dm
│ │ ├── verbs/
│ │ │ ├── ooc.dm
│ │ │ ├── preferences.dm
│ │ │ └── records.dm
│ │ └── world.dm
│ ├── global.dm
│ ├── modules/
│ │ ├── admin/
│ │ │ ├── IsBanned.dm
│ │ │ ├── NewBan.dm
│ │ │ ├── STUI.dm
│ │ │ ├── admin.dm
│ │ │ ├── admin_ranks.dm
│ │ │ ├── admin_verbs.dm
│ │ │ ├── autoreply.dm
│ │ │ ├── banjob.dm
│ │ │ ├── callproc.dm
│ │ │ ├── chat_commands.dm
│ │ │ ├── create_mob.dm
│ │ │ ├── create_object.dm
│ │ │ ├── create_turf.dm
│ │ │ ├── fax_templates.dm
│ │ │ ├── gamemode_modifiers_panel.dm
│ │ │ ├── holder2.dm
│ │ │ ├── medal_panel/
│ │ │ │ ├── medals_panel.dm
│ │ │ │ └── medals_panel_tgui.dm
│ │ │ ├── player_notes.dm
│ │ │ ├── player_panel/
│ │ │ │ ├── actions/
│ │ │ │ │ ├── antag.dm
│ │ │ │ │ ├── fun.dm
│ │ │ │ │ ├── general.dm
│ │ │ │ │ ├── physical.dm
│ │ │ │ │ ├── punish.dm
│ │ │ │ │ └── transform.dm
│ │ │ │ ├── player_action.dm
│ │ │ │ └── player_panel.dm
│ │ │ ├── server_verbs.dm
│ │ │ ├── tabs/
│ │ │ │ ├── admin_tab.dm
│ │ │ │ ├── debug_tab.dm
│ │ │ │ ├── event_tab.dm
│ │ │ │ ├── round_tab.dm
│ │ │ │ ├── server_tab.dm
│ │ │ │ └── thunderdome_tab.dm
│ │ │ ├── tacmap_panel/
│ │ │ │ ├── tacmap_admin_panel.dm
│ │ │ │ └── tacmap_admin_panel_tgui.dm
│ │ │ ├── tag.dm
│ │ │ ├── topic/
│ │ │ │ ├── topic.dm
│ │ │ │ ├── topic_chems.dm
│ │ │ │ ├── topic_events.dm
│ │ │ │ ├── topic_inview.dm
│ │ │ │ ├── topic_teleports.dm
│ │ │ │ └── topic_vehicles.dm
│ │ │ ├── two_factor.dm
│ │ │ ├── verbs/
│ │ │ │ ├── SDQL2/
│ │ │ │ │ ├── SDQL_2.dm
│ │ │ │ │ ├── SDQL_2_parser.dm
│ │ │ │ │ └── SDQL_2_wrappers.dm
│ │ │ │ ├── adminhelp.dm
│ │ │ │ ├── adminjump.dm
│ │ │ │ ├── adminpanelgq.dm
│ │ │ │ ├── adminpanelweapons.dm
│ │ │ │ ├── adminpm.dm
│ │ │ │ ├── autoreplace.dm
│ │ │ │ ├── custom_event.dm
│ │ │ │ ├── custom_paper.dm
│ │ │ │ ├── deadsay.dm
│ │ │ │ ├── debug.dm
│ │ │ │ ├── freeforghosts.dm
│ │ │ │ ├── getlogs.dm
│ │ │ │ ├── load_event_level.dm
│ │ │ │ ├── map_template_loadverb.dm
│ │ │ │ ├── mentorhud.dm
│ │ │ │ ├── mob_verbs.dm
│ │ │ │ ├── mooc.dm
│ │ │ │ ├── noclip.dm
│ │ │ │ ├── playsound.dm
│ │ │ │ ├── pray.dm
│ │ │ │ ├── randomverbs.dm
│ │ │ │ ├── select_equipment.dm
│ │ │ │ ├── shakeshipverb.dm
│ │ │ │ ├── shuttlepanel.dm
│ │ │ │ ├── xooc.dm
│ │ │ │ └── yooc.dm
│ │ │ └── view_variables/
│ │ │ ├── admin_delete.dm
│ │ │ ├── color_matrix_editor.dm
│ │ │ ├── debug_variables.dm
│ │ │ ├── filterrific.dm
│ │ │ ├── get_variables.dm
│ │ │ ├── mark_datum.dm
│ │ │ ├── mass_edit_variables.dm
│ │ │ ├── modify_variables.dm
│ │ │ ├── particle_editor.dm
│ │ │ ├── reference_tracking.dm
│ │ │ ├── tag_datum.dm
│ │ │ ├── topic.dm
│ │ │ ├── topic_basic.dm
│ │ │ ├── topic_list.dm
│ │ │ └── view_variables.dm
│ │ ├── almayer/
│ │ │ ├── machinery.dm
│ │ │ ├── shakeship.dm
│ │ │ ├── ship_memorial.dm
│ │ │ └── weaponhits.dm
│ │ ├── animations/
│ │ │ └── animation_library.dm
│ │ ├── assembly/
│ │ │ ├── assembly.dm
│ │ │ ├── helpers.dm
│ │ │ ├── holder.dm
│ │ │ ├── igniter.dm
│ │ │ ├── infrared.dm
│ │ │ ├── mousetrap.dm
│ │ │ ├── proximity.dm
│ │ │ ├── signaller.dm
│ │ │ ├── timer.dm
│ │ │ └── voice.dm
│ │ ├── asset_cache/
│ │ │ ├── asset_cache_client.dm
│ │ │ ├── asset_cache_item.dm
│ │ │ ├── asset_list.dm
│ │ │ ├── asset_list_items.dm
│ │ │ ├── assets/
│ │ │ │ ├── fontawesome.dm
│ │ │ │ ├── icon_ref_map.dm
│ │ │ │ ├── lobby.dm
│ │ │ │ ├── medals.dm
│ │ │ │ ├── sevastopol.dm
│ │ │ │ ├── stack_receipts.dm
│ │ │ │ ├── tgfont.dm
│ │ │ │ ├── tgui.dm
│ │ │ │ └── vending.dm
│ │ │ ├── readme.md
│ │ │ ├── transports/
│ │ │ │ ├── asset_transport.dm
│ │ │ │ └── webroot_transport.dm
│ │ │ └── validate_assets.html
│ │ ├── autowiki/
│ │ │ ├── autowiki.dm
│ │ │ └── pages/
│ │ │ ├── _page.dm
│ │ │ ├── guns.dm
│ │ │ ├── supply_packs.dm
│ │ │ └── xeno_stats.dm
│ │ ├── buildmode/
│ │ │ ├── README.md
│ │ │ ├── bm-mode.dm
│ │ │ ├── buildmode.dm
│ │ │ ├── buttons.dm
│ │ │ └── submodes/
│ │ │ ├── advanced.dm
│ │ │ ├── area_edit.dm
│ │ │ ├── basic.dm
│ │ │ ├── boom.dm
│ │ │ ├── copy.dm
│ │ │ ├── delete.dm
│ │ │ ├── fill.dm
│ │ │ ├── outfit.dm
│ │ │ ├── throwing.dm
│ │ │ └── variable_edit.dm
│ │ ├── character_traits/
│ │ │ ├── biology_traits.dm
│ │ │ ├── character_trait.dm
│ │ │ ├── hair_dye.dm
│ │ │ ├── languages.dm
│ │ │ ├── robotic_limbs.dm
│ │ │ └── skills.dm
│ │ ├── clans/
│ │ │ ├── clan.dm
│ │ │ ├── client.dm
│ │ │ ├── rank.dm
│ │ │ └── ship.dm
│ │ ├── client/
│ │ │ ├── body_picker.dm
│ │ │ ├── client_defines.dm
│ │ │ ├── client_procs.dm
│ │ │ ├── country_flags.dm
│ │ │ ├── flavor_text_editor.dm
│ │ │ ├── hair_picker.dm
│ │ │ ├── loadout_picker.dm
│ │ │ ├── player_details.dm
│ │ │ ├── pred_picker.dm
│ │ │ ├── preferences.dm
│ │ │ ├── preferences_factions.dm
│ │ │ ├── preferences_gear.dm
│ │ │ ├── preferences_savefile.dm
│ │ │ ├── preferences_toggles.dm
│ │ │ ├── tgui_macro.dm
│ │ │ └── traits_picker.dm
│ │ ├── clothing/
│ │ │ ├── clothing.dm
│ │ │ ├── clothing_accessories.dm
│ │ │ ├── clothing_helpers.dm
│ │ │ ├── glasses/
│ │ │ │ ├── glasses.dm
│ │ │ │ ├── hud.dm
│ │ │ │ ├── meson.dm
│ │ │ │ ├── night.dm
│ │ │ │ └── thermal.dm
│ │ │ ├── gloves/
│ │ │ │ ├── color.dm
│ │ │ │ ├── marine_gloves.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── head/
│ │ │ │ ├── WY/
│ │ │ │ │ ├── commando.dm
│ │ │ │ │ ├── goons.dm
│ │ │ │ │ ├── pmc.dm
│ │ │ │ │ └── wy_droid.dm
│ │ │ │ ├── collectable.dm
│ │ │ │ ├── hardhat.dm
│ │ │ │ ├── head.dm
│ │ │ │ ├── helmet.dm
│ │ │ │ ├── jobs.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── misc_special.dm
│ │ │ │ ├── soft_caps.dm
│ │ │ │ └── xeno_hats.dm
│ │ │ ├── hybrisa_clothing.dm
│ │ │ ├── masks/
│ │ │ │ ├── breath.dm
│ │ │ │ ├── gasmask.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── officer_stuff.dm
│ │ │ ├── shoes/
│ │ │ │ ├── colour.dm
│ │ │ │ ├── magboots.dm
│ │ │ │ ├── marine_shoes.dm
│ │ │ │ └── miscellaneous.dm
│ │ │ ├── spacesuits/
│ │ │ │ ├── breaches.dm
│ │ │ │ ├── miscellaneous.dm
│ │ │ │ ├── spacesuits.dm
│ │ │ │ └── void.dm
│ │ │ ├── suits/
│ │ │ │ ├── armor.dm
│ │ │ │ ├── bio.dm
│ │ │ │ ├── jobs.dm
│ │ │ │ ├── labcoat.dm
│ │ │ │ ├── marine_armor/
│ │ │ │ │ ├── WY/
│ │ │ │ │ │ ├── commando.dm
│ │ │ │ │ │ ├── goon.dm
│ │ │ │ │ │ ├── pmc.dm
│ │ │ │ │ │ └── wy_droid.dm
│ │ │ │ │ ├── _marine_armor.dm
│ │ │ │ │ ├── ert.dm
│ │ │ │ │ ├── ghillie.dm
│ │ │ │ │ ├── intel.dm
│ │ │ │ │ ├── smartgunner.dm
│ │ │ │ │ └── spec_fire.dm
│ │ │ │ ├── marine_coat.dm
│ │ │ │ ├── miscellaneous.dm
│ │ │ │ ├── storage.dm
│ │ │ │ ├── utility.dm
│ │ │ │ └── xeno_suits.dm
│ │ │ └── under/
│ │ │ ├── color.dm
│ │ │ ├── gimmick.dm
│ │ │ ├── jobs/
│ │ │ │ ├── civilian.dm
│ │ │ │ ├── engineering.dm
│ │ │ │ ├── medsci.dm
│ │ │ │ └── security.dm
│ │ │ ├── marine_uniform.dm
│ │ │ ├── miscellaneous.dm
│ │ │ ├── rank_pins.dm
│ │ │ ├── shorts.dm
│ │ │ ├── ties.dm
│ │ │ └── under.dm
│ │ ├── cm_aliens/
│ │ │ ├── Ovipositor.dm
│ │ │ ├── XenoStructures.dm
│ │ │ ├── hivebuffs/
│ │ │ │ └── hivebuff.dm
│ │ │ ├── structures/
│ │ │ │ ├── construction_node.dm
│ │ │ │ ├── egg.dm
│ │ │ │ ├── fruit.dm
│ │ │ │ ├── special/
│ │ │ │ │ ├── egg_morpher.dm
│ │ │ │ │ ├── hive_cluster.dm
│ │ │ │ │ ├── pred_nest.dm
│ │ │ │ │ ├── pylon_core.dm
│ │ │ │ │ └── recovery_node.dm
│ │ │ │ ├── special_structure.dm
│ │ │ │ ├── trap.dm
│ │ │ │ ├── tunnel.dm
│ │ │ │ └── xeno_structures_boilertrap.dm
│ │ │ └── weeds.dm
│ │ ├── cm_marines/
│ │ │ ├── Donator_Items.dm
│ │ │ ├── altitude_control_console.dm
│ │ │ ├── anti_air.dm
│ │ │ ├── codebook.dm
│ │ │ ├── custom_items.dm
│ │ │ ├── dropship_ammo.dm
│ │ │ ├── dropship_equipment.dm
│ │ │ ├── equipment/
│ │ │ │ ├── gear.dm
│ │ │ │ ├── guncases.dm
│ │ │ │ ├── kit_boxes.dm
│ │ │ │ ├── maps.dm
│ │ │ │ ├── mortar/
│ │ │ │ │ ├── mortar_shells.dm
│ │ │ │ │ └── mortars.dm
│ │ │ │ └── weapons.dm
│ │ │ ├── m2c.dm
│ │ │ ├── marines_consoles.dm
│ │ │ ├── orbital_cannon.dm
│ │ │ ├── overwatch.dm
│ │ │ ├── radar.dm
│ │ │ ├── shuttle_backend.dm
│ │ │ ├── smartgun_mount.dm
│ │ │ ├── specialist.dm
│ │ │ └── vehicle_part_fabricator.dm
│ │ ├── cm_phone/
│ │ │ ├── internal_phone.dm
│ │ │ └── phone.dm
│ │ ├── cm_preds/
│ │ │ ├── _yaut_defines.dm
│ │ │ ├── falcon.dm
│ │ │ ├── huntdata.dm
│ │ │ ├── hunting_grounds.dm
│ │ │ ├── lz_placer.dm
│ │ │ ├── mcaste_items.dm
│ │ │ ├── mcaste_weapons.dm
│ │ │ ├── smartdisc.dm
│ │ │ ├── thrall_items.dm
│ │ │ ├── thrall_procs.dm
│ │ │ ├── yaut_actions.dm
│ │ │ ├── yaut_bow_arrow.dm
│ │ │ ├── yaut_bracers.dm
│ │ │ ├── yaut_hudprocs.dm
│ │ │ ├── yaut_items.dm
│ │ │ ├── yaut_machines.dm
│ │ │ ├── yaut_mask.dm
│ │ │ ├── yaut_procs.dm
│ │ │ └── yaut_weapons.dm
│ │ ├── cm_tech/
│ │ │ ├── droppod/
│ │ │ │ ├── droppod.dm
│ │ │ │ ├── equipment.dm
│ │ │ │ ├── gear_access_point.dm
│ │ │ │ ├── lz_effect.dm
│ │ │ │ ├── marine.dm
│ │ │ │ └── supply.dm
│ │ │ ├── hologram.dm
│ │ │ ├── implements/
│ │ │ │ ├── adv_weapon.dm
│ │ │ │ ├── ammo_kits.dm
│ │ │ │ ├── armor.dm
│ │ │ │ ├── czsp.dm
│ │ │ │ ├── engi_czsp.dm
│ │ │ │ ├── implants.dm
│ │ │ │ ├── railgun.dm
│ │ │ │ ├── rev_jelly.dm
│ │ │ │ ├── stims.dm
│ │ │ │ ├── tank.dm
│ │ │ │ └── xeno_handler.dm
│ │ │ ├── research_memories.dm
│ │ │ ├── resources/
│ │ │ │ ├── landmark.dm
│ │ │ │ └── resource.dm
│ │ │ ├── tech.dm
│ │ │ ├── tech_memories.dm
│ │ │ ├── tech_node.dm
│ │ │ ├── tech_tiers.dm
│ │ │ ├── techs/
│ │ │ │ ├── abstract/
│ │ │ │ │ ├── repeatable.dm
│ │ │ │ │ └── transitory.dm
│ │ │ │ └── marine/
│ │ │ │ ├── tier1/
│ │ │ │ │ ├── arc.dm
│ │ │ │ │ └── points.dm
│ │ │ │ ├── tier2/
│ │ │ │ │ └── orbital_ammo.dm
│ │ │ │ ├── tier3/
│ │ │ │ │ ├── cryo_spec.dm
│ │ │ │ │ └── cryorine.dm
│ │ │ │ └── tier4/
│ │ │ │ └── nuke.dm
│ │ │ ├── techtree.dm
│ │ │ └── trees/
│ │ │ └── marine.dm
│ │ ├── decorators/
│ │ │ ├── admin_runtime_decorator.dm
│ │ │ ├── cassette_decorator.dm
│ │ │ ├── christmas.dm
│ │ │ ├── mass_xeno_decorator.dm
│ │ │ ├── weapon_decorator.dm
│ │ │ └── weapon_map_decorator.dm
│ │ ├── defenses/
│ │ │ ├── bell_tower.dm
│ │ │ ├── defenses.dm
│ │ │ ├── handheld.dm
│ │ │ ├── planted_flag.dm
│ │ │ ├── sentry.dm
│ │ │ ├── sentry_computer.dm
│ │ │ ├── sentry_flamer.dm
│ │ │ └── tesla_coil.dm
│ │ ├── desert_dam/
│ │ │ ├── filtration/
│ │ │ │ ├── consoles.dm
│ │ │ │ ├── dispersal_landmark.dm
│ │ │ │ ├── filtration.dm
│ │ │ │ ├── floodgates.dm
│ │ │ │ ├── structures.dm
│ │ │ │ ├── water_base.dm
│ │ │ │ └── water_toxic.dm
│ │ │ └── motion_sensor/
│ │ │ └── sensortower.dm
│ │ ├── discord/
│ │ │ └── discord_embed.dm
│ │ ├── droppod/
│ │ │ ├── container_droppod.dm
│ │ │ └── droppod_ui.dm
│ │ ├── dropships/
│ │ │ ├── attach_points/
│ │ │ │ ├── attach_point.dm
│ │ │ │ └── templates.dm
│ │ │ └── cas/
│ │ │ └── fire_mission_record.dm
│ │ ├── economy/
│ │ │ ├── ATM.dm
│ │ │ ├── Accounts.dm
│ │ │ ├── EFTPOS.dm
│ │ │ ├── cash.dm
│ │ │ └── economy_misc.dm
│ │ ├── emoji/
│ │ │ └── emoji_parse.dm
│ │ ├── escape_menu/
│ │ │ ├── admin_buttons.dm
│ │ │ ├── details.dm
│ │ │ ├── dimmer.dm
│ │ │ ├── escape_menu.dm
│ │ │ ├── home_page.dm
│ │ │ ├── leave_body.dm
│ │ │ ├── subsystem.dm
│ │ │ └── title.dm
│ │ ├── events/
│ │ │ ├── _events.dm
│ │ │ ├── comms_blackout.dm
│ │ │ ├── destructible_terrain.dm
│ │ │ ├── inflation.dm
│ │ │ └── nothing_happens.dm
│ │ ├── fishing/
│ │ │ ├── bait/
│ │ │ │ └── generic.dm
│ │ │ ├── datums/
│ │ │ │ ├── generic.dm
│ │ │ │ └── helpers.dm
│ │ │ ├── poles/
│ │ │ │ └── generic.dm
│ │ │ └── props/
│ │ │ ├── fishing_line.dm
│ │ │ └── fishing_pole.dm
│ │ ├── flufftext/
│ │ │ ├── Chinese.dm
│ │ │ ├── Dreaming.dm
│ │ │ ├── Hallucination.dm
│ │ │ ├── Japanese.dm
│ │ │ └── TextFilters.dm
│ │ ├── gear_presets/
│ │ │ ├── _select_equipment.dm
│ │ │ ├── agents.dm
│ │ │ ├── cbrn.dm
│ │ │ ├── cia.dm
│ │ │ ├── clf.dm
│ │ │ ├── cmb.dm
│ │ │ ├── colonist.dm
│ │ │ ├── contractor.dm
│ │ │ ├── corpses.dm
│ │ │ ├── dust_raider.dm
│ │ │ ├── dutch.dm
│ │ │ ├── fax_responders.dm
│ │ │ ├── fun.dm
│ │ │ ├── mutiny.dm
│ │ │ ├── other.dm
│ │ │ ├── pmc.dm
│ │ │ ├── royal_marines.dm
│ │ │ ├── survivors/
│ │ │ │ ├── corsat/
│ │ │ │ │ └── preset_corsat.dm
│ │ │ │ ├── fiorina_sciannex/
│ │ │ │ │ ├── preset_fiorina_sciannex.dm
│ │ │ │ │ └── riot_in_progress_insert_fiorina_nightmare.dm
│ │ │ │ ├── kutjevo/
│ │ │ │ │ └── preset_kutjevo.dm
│ │ │ │ ├── lv_522/
│ │ │ │ │ └── forcon_survivors.dm
│ │ │ │ ├── lv_624/
│ │ │ │ │ ├── clfship_insert_lv624.dm
│ │ │ │ │ ├── corporate_dome_insert_lv624.dm
│ │ │ │ │ └── preset_lv.dm
│ │ │ │ ├── lv_759/
│ │ │ │ │ ├── iasf_survivor_insert.dm
│ │ │ │ │ └── preset_hybrisa.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── new_varadero/
│ │ │ │ │ └── preset_new_varadero.dm
│ │ │ │ ├── shivas_snowball/
│ │ │ │ │ ├── panic_room_insert_shivas.dm
│ │ │ │ │ └── preset_shivas_snowball.dm
│ │ │ │ ├── solaris/
│ │ │ │ │ ├── crashlanding-offices_insert_bigred.dm
│ │ │ │ │ └── preset_solaris.dm
│ │ │ │ ├── sorokyne_strata/
│ │ │ │ │ ├── crashlanding_insert_soro.dm
│ │ │ │ │ └── preset_sorokyne_strata.dm
│ │ │ │ ├── survivors.dm
│ │ │ │ ├── trijent/
│ │ │ │ │ ├── crashlanding_upp_bar_insert_trijent.dm
│ │ │ │ │ └── preset_trijent.dm
│ │ │ │ └── tyrargo_rift/
│ │ │ │ └── us_army_survivors.dm
│ │ │ ├── synth_k9.dm
│ │ │ ├── synths.dm
│ │ │ ├── upp.dm
│ │ │ ├── us_army.dm
│ │ │ ├── uscm.dm
│ │ │ ├── uscm_co.dm
│ │ │ ├── uscm_dress.dm
│ │ │ ├── uscm_event.dm
│ │ │ ├── uscm_forecon.dm
│ │ │ ├── uscm_medical.dm
│ │ │ ├── uscm_police.dm
│ │ │ ├── uscm_ship.dm
│ │ │ ├── uscm_synths.dm
│ │ │ ├── whiteout.dm
│ │ │ ├── wo.dm
│ │ │ ├── wy.dm
│ │ │ ├── wy_commandos.dm
│ │ │ ├── wy_goons.dm
│ │ │ └── yautja.dm
│ │ ├── holidays/
│ │ │ ├── halloween/
│ │ │ │ ├── decorators.dm
│ │ │ │ └── pumpkins/
│ │ │ │ ├── patches.dm
│ │ │ │ └── wearable.dm
│ │ │ └── holidays.dm
│ │ ├── hydroponics/
│ │ │ ├── botany_disks.dm
│ │ │ ├── grown_inedible.dm
│ │ │ ├── hydro_tools.dm
│ │ │ ├── hydro_tray.dm
│ │ │ ├── seed_datums.dm
│ │ │ ├── seed_machines/
│ │ │ │ ├── seed_editor.dm
│ │ │ │ ├── seed_extractor.dm
│ │ │ │ └── seed_machines.dm
│ │ │ └── seeds.dm
│ │ ├── keybindings/
│ │ │ ├── bindings_atom.dm
│ │ │ ├── bindings_client.dm
│ │ │ ├── focus.dm
│ │ │ ├── readme.md
│ │ │ └── setup.dm
│ │ ├── law/
│ │ │ ├── incident.dm
│ │ │ ├── law.dm
│ │ │ └── laws/
│ │ │ ├── capital_crime.dm
│ │ │ ├── civil_crime.dm
│ │ │ ├── major_crime.dm
│ │ │ ├── minor_crime.dm
│ │ │ ├── optional.dm
│ │ │ └── precautionary_charge.dm
│ │ ├── lighting/
│ │ │ ├── _LIGHTING_README.MD
│ │ │ ├── emissive_blocker.dm
│ │ │ ├── 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/
│ │ │ ├── global_logs.dm
│ │ │ ├── log_category.dm
│ │ │ └── log_holder.dm
│ │ ├── mapping/
│ │ │ ├── README.txt
│ │ │ ├── map_template.dm
│ │ │ ├── mapping_helpers.dm
│ │ │ ├── merge_conflicts.dm
│ │ │ ├── preloader.dm
│ │ │ ├── reader.dm
│ │ │ ├── space_management/
│ │ │ │ ├── space_level.dm
│ │ │ │ ├── space_reservation.dm
│ │ │ │ ├── traits.dm
│ │ │ │ └── zlevel_manager.dm
│ │ │ └── verify.dm
│ │ ├── maptext_alerts/
│ │ │ ├── screen_alerts.dm
│ │ │ └── text_blurbs.dm
│ │ ├── mentor/
│ │ │ ├── looc_toggle.dm
│ │ │ └── mentorhelp.dm
│ │ ├── mob/
│ │ │ ├── camera/
│ │ │ │ ├── camera.dm
│ │ │ │ └── imaginary_friend.dm
│ │ │ ├── dead/
│ │ │ │ ├── death.dm
│ │ │ │ └── observer/
│ │ │ │ ├── actions.dm
│ │ │ │ ├── event_spawning.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── observer.dm
│ │ │ │ ├── orbit.dm
│ │ │ │ └── say.dm
│ │ │ ├── death.dm
│ │ │ ├── emote.dm
│ │ │ ├── hear_say.dm
│ │ │ ├── holder.dm
│ │ │ ├── inventory.dm
│ │ │ ├── language/
│ │ │ │ ├── language.dm
│ │ │ │ ├── language_handling.dm
│ │ │ │ └── languages.dm
│ │ │ ├── living/
│ │ │ │ ├── blood.dm
│ │ │ │ ├── brain/
│ │ │ │ │ ├── MMI.dm
│ │ │ │ │ ├── brain.dm
│ │ │ │ │ ├── brain_item.dm
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── emote.dm
│ │ │ │ │ ├── life.dm
│ │ │ │ │ ├── login.dm
│ │ │ │ │ └── say.dm
│ │ │ │ ├── carbon/
│ │ │ │ │ ├── carbon.dm
│ │ │ │ │ ├── carbon_defines.dm
│ │ │ │ │ ├── carbon_helpers.dm
│ │ │ │ │ ├── give.dm
│ │ │ │ │ ├── human/
│ │ │ │ │ │ ├── death.dm
│ │ │ │ │ │ ├── emote.dm
│ │ │ │ │ │ ├── examine.dm
│ │ │ │ │ │ ├── exercise.dm
│ │ │ │ │ │ ├── human.dm
│ │ │ │ │ │ ├── human_abilities.dm
│ │ │ │ │ │ ├── human_attackhand.dm
│ │ │ │ │ │ ├── human_damage.dm
│ │ │ │ │ │ ├── human_defense.dm
│ │ │ │ │ │ ├── human_defines.dm
│ │ │ │ │ │ ├── human_dummy.dm
│ │ │ │ │ │ ├── human_helpers.dm
│ │ │ │ │ │ ├── human_movement.dm
│ │ │ │ │ │ ├── human_shields.dm
│ │ │ │ │ │ ├── human_stripping.dm
│ │ │ │ │ │ ├── inventory.dm
│ │ │ │ │ │ ├── life/
│ │ │ │ │ │ │ ├── handle_breath.dm
│ │ │ │ │ │ │ ├── handle_chemicals_in_body.dm
│ │ │ │ │ │ │ ├── handle_disabilities.dm
│ │ │ │ │ │ │ ├── handle_environment.dm
│ │ │ │ │ │ │ ├── handle_fire.dm
│ │ │ │ │ │ │ ├── handle_grabbed.dm
│ │ │ │ │ │ │ ├── handle_organs.dm
│ │ │ │ │ │ │ ├── handle_regular_hud_updates.dm
│ │ │ │ │ │ │ ├── handle_regular_status_updates.dm
│ │ │ │ │ │ │ ├── handle_stasis_bag.dm
│ │ │ │ │ │ │ └── life_helpers.dm
│ │ │ │ │ │ ├── life.dm
│ │ │ │ │ │ ├── login.dm
│ │ │ │ │ │ ├── logout.dm
│ │ │ │ │ │ ├── powers/
│ │ │ │ │ │ │ ├── check_skills.dm
│ │ │ │ │ │ │ ├── human_powers.dm
│ │ │ │ │ │ │ └── issue_order.dm
│ │ │ │ │ │ ├── say.dm
│ │ │ │ │ │ ├── species/
│ │ │ │ │ │ │ ├── emote-monkey.dm
│ │ │ │ │ │ │ ├── emote-synth_k9.dm
│ │ │ │ │ │ │ ├── human.dm
│ │ │ │ │ │ │ ├── monkey.dm
│ │ │ │ │ │ │ ├── species.dm
│ │ │ │ │ │ │ ├── synth_k9.dm
│ │ │ │ │ │ │ ├── synthetic.dm
│ │ │ │ │ │ │ ├── working_joe/
│ │ │ │ │ │ │ │ ├── _emote.dm
│ │ │ │ │ │ │ │ ├── _species.dm
│ │ │ │ │ │ │ │ ├── damage.dm
│ │ │ │ │ │ │ │ ├── farewell.dm
│ │ │ │ │ │ │ │ ├── fire.dm
│ │ │ │ │ │ │ │ ├── greeting.dm
│ │ │ │ │ │ │ │ ├── notice.dm
│ │ │ │ │ │ │ │ ├── question.dm
│ │ │ │ │ │ │ │ ├── quip.dm
│ │ │ │ │ │ │ │ ├── restricted_area.dm
│ │ │ │ │ │ │ │ ├── task_update.dm
│ │ │ │ │ │ │ │ └── warning.dm
│ │ │ │ │ │ │ ├── wy_droid/
│ │ │ │ │ │ │ │ ├── _emote.dm
│ │ │ │ │ │ │ │ ├── _species.dm
│ │ │ │ │ │ │ │ ├── combat.dm
│ │ │ │ │ │ │ │ ├── quip.dm
│ │ │ │ │ │ │ │ └── status.dm
│ │ │ │ │ │ │ ├── yautja/
│ │ │ │ │ │ │ │ ├── _emote.dm
│ │ │ │ │ │ │ │ ├── _species.dm
│ │ │ │ │ │ │ │ ├── fake_sounds.dm
│ │ │ │ │ │ │ │ ├── fake_voice.dm
│ │ │ │ │ │ │ │ └── yautja_sound.dm
│ │ │ │ │ │ │ └── zombie.dm
│ │ │ │ │ │ ├── unarmed_attacks.dm
│ │ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ │ └── whisper.dm
│ │ │ │ │ ├── inventory.dm
│ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ └── xenomorph/
│ │ │ │ │ ├── Embryo.dm
│ │ │ │ │ ├── Evolution.dm
│ │ │ │ │ ├── Facehuggers.dm
│ │ │ │ │ ├── Powers.dm
│ │ │ │ │ ├── XenoAttacks.dm
│ │ │ │ │ ├── XenoOverwatch.dm
│ │ │ │ │ ├── XenoProcs.dm
│ │ │ │ │ ├── XenoUpgrade.dm
│ │ │ │ │ ├── Xenomorph.dm
│ │ │ │ │ ├── abilities/
│ │ │ │ │ │ ├── ability_helper_procs.dm
│ │ │ │ │ │ ├── ability_macro_framework.dm
│ │ │ │ │ │ ├── boiler/
│ │ │ │ │ │ │ ├── boiler_abilities.dm
│ │ │ │ │ │ │ └── boiler_macros.dm
│ │ │ │ │ │ ├── burrower/
│ │ │ │ │ │ │ ├── burrower_abilities.dm
│ │ │ │ │ │ │ └── burrower_macros.dm
│ │ │ │ │ │ ├── carrier/
│ │ │ │ │ │ │ ├── carrier_abilities.dm
│ │ │ │ │ │ │ └── carrier_macros.dm
│ │ │ │ │ │ ├── crusher/
│ │ │ │ │ │ │ ├── crusher_abilities.dm
│ │ │ │ │ │ │ └── crusher_macros.dm
│ │ │ │ │ │ ├── defender/
│ │ │ │ │ │ │ ├── defender_abilities.dm
│ │ │ │ │ │ │ └── defender_macros.dm
│ │ │ │ │ │ ├── despoiler/
│ │ │ │ │ │ │ ├── despoiler_abilities.dm
│ │ │ │ │ │ │ └── despoiler_macros.dm
│ │ │ │ │ │ ├── facehugger/
│ │ │ │ │ │ │ ├── facehugger_abilities.dm
│ │ │ │ │ │ │ └── facehugger_powers.dm
│ │ │ │ │ │ ├── general_abilities.dm
│ │ │ │ │ │ ├── general_ability_macros.dm
│ │ │ │ │ │ ├── general_powers.dm
│ │ │ │ │ │ ├── hellhound/
│ │ │ │ │ │ │ └── hellhound_abilities.dm
│ │ │ │ │ │ ├── hivelord/
│ │ │ │ │ │ │ └── hivelord_abilities.dm
│ │ │ │ │ │ ├── king/
│ │ │ │ │ │ │ ├── king_abilities.dm
│ │ │ │ │ │ │ └── king_macros.dm
│ │ │ │ │ │ ├── lesser_drone/
│ │ │ │ │ │ │ ├── lesser_drone_abilities.dm
│ │ │ │ │ │ │ ├── lesser_drone_macros.dm
│ │ │ │ │ │ │ └── lesser_drone_powers.dm
│ │ │ │ │ │ ├── lurker/
│ │ │ │ │ │ │ ├── lurker_abilities.dm
│ │ │ │ │ │ │ └── lurker_macros.dm
│ │ │ │ │ │ ├── praetorian/
│ │ │ │ │ │ │ ├── praetorian_abilities.dm
│ │ │ │ │ │ │ └── praetorian_macros.dm
│ │ │ │ │ │ ├── predalien/
│ │ │ │ │ │ │ ├── predalien_abilities.dm
│ │ │ │ │ │ │ ├── predalien_macros.dm
│ │ │ │ │ │ │ └── predalien_powers.dm
│ │ │ │ │ │ ├── queen/
│ │ │ │ │ │ │ ├── queen_abilities.dm
│ │ │ │ │ │ │ ├── queen_macros.dm
│ │ │ │ │ │ │ └── queen_powers.dm
│ │ │ │ │ │ ├── ravager/
│ │ │ │ │ │ │ ├── ravager_abilities.dm
│ │ │ │ │ │ │ └── ravager_macros.dm
│ │ │ │ │ │ ├── runner/
│ │ │ │ │ │ │ ├── runner_abilities.dm
│ │ │ │ │ │ │ ├── runner_macros.dm
│ │ │ │ │ │ │ └── runner_powers.dm
│ │ │ │ │ │ ├── sentinel/
│ │ │ │ │ │ │ ├── sentinel_abilities.dm
│ │ │ │ │ │ │ └── sentinel_macros.dm
│ │ │ │ │ │ ├── spitter/
│ │ │ │ │ │ │ ├── spitter_abilities.dm
│ │ │ │ │ │ │ └── spitter_macros.dm
│ │ │ │ │ │ ├── warrior/
│ │ │ │ │ │ │ ├── warrior_abilities.dm
│ │ │ │ │ │ │ └── warrior_macros.dm
│ │ │ │ │ │ └── xeno_action.dm
│ │ │ │ │ ├── attack_alien.dm
│ │ │ │ │ ├── castes/
│ │ │ │ │ │ ├── Boiler.dm
│ │ │ │ │ │ ├── Burrower.dm
│ │ │ │ │ │ ├── Carrier.dm
│ │ │ │ │ │ ├── Crusher.dm
│ │ │ │ │ │ ├── Defender.dm
│ │ │ │ │ │ ├── Despoiler.dm
│ │ │ │ │ │ ├── Drone.dm
│ │ │ │ │ │ ├── Facehugger.dm
│ │ │ │ │ │ ├── Hellhound.dm
│ │ │ │ │ │ ├── Hivelord.dm
│ │ │ │ │ │ ├── King.dm
│ │ │ │ │ │ ├── Larva.dm
│ │ │ │ │ │ ├── Lurker.dm
│ │ │ │ │ │ ├── Praetorian.dm
│ │ │ │ │ │ ├── Predalien.dm
│ │ │ │ │ │ ├── Queen.dm
│ │ │ │ │ │ ├── Ravager.dm
│ │ │ │ │ │ ├── Runner.dm
│ │ │ │ │ │ ├── Sentinel.dm
│ │ │ │ │ │ ├── Spitter.dm
│ │ │ │ │ │ ├── Warrior.dm
│ │ │ │ │ │ ├── caste_datum.dm
│ │ │ │ │ │ └── lesser_drone.dm
│ │ │ │ │ ├── damage_procs.dm
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── egg_item.dm
│ │ │ │ │ ├── emote.dm
│ │ │ │ │ ├── hive_faction.dm
│ │ │ │ │ ├── hive_status.dm
│ │ │ │ │ ├── hive_status_ui.dm
│ │ │ │ │ ├── items/
│ │ │ │ │ │ └── iff_tag.dm
│ │ │ │ │ ├── life.dm
│ │ │ │ │ ├── login.dm
│ │ │ │ │ ├── mark_menu.dm
│ │ │ │ │ ├── resin_constructions.dm
│ │ │ │ │ ├── say.dm
│ │ │ │ │ ├── seethrough.dm
│ │ │ │ │ ├── strains/
│ │ │ │ │ │ ├── behavior_delegate.dm
│ │ │ │ │ │ ├── castes/
│ │ │ │ │ │ │ ├── boiler/
│ │ │ │ │ │ │ │ └── trapper.dm
│ │ │ │ │ │ │ ├── carrier/
│ │ │ │ │ │ │ │ └── eggsac.dm
│ │ │ │ │ │ │ ├── crusher/
│ │ │ │ │ │ │ │ └── charger.dm
│ │ │ │ │ │ │ ├── defender/
│ │ │ │ │ │ │ │ └── steel_crest.dm
│ │ │ │ │ │ │ ├── drone/
│ │ │ │ │ │ │ │ ├── gardener.dm
│ │ │ │ │ │ │ │ └── healer.dm
│ │ │ │ │ │ │ ├── facehugger/
│ │ │ │ │ │ │ │ └── watcher.dm
│ │ │ │ │ │ │ ├── hivelord/
│ │ │ │ │ │ │ │ ├── designer.dm
│ │ │ │ │ │ │ │ └── resin_whisperer.dm
│ │ │ │ │ │ │ ├── lurker/
│ │ │ │ │ │ │ │ └── vampire.dm
│ │ │ │ │ │ │ ├── praetorian/
│ │ │ │ │ │ │ │ ├── dancer.dm
│ │ │ │ │ │ │ │ ├── oppressor.dm
│ │ │ │ │ │ │ │ ├── valkyrie.dm
│ │ │ │ │ │ │ │ └── vanguard.dm
│ │ │ │ │ │ │ ├── ravager/
│ │ │ │ │ │ │ │ ├── berserker.dm
│ │ │ │ │ │ │ │ └── hedgehog.dm
│ │ │ │ │ │ │ └── runner/
│ │ │ │ │ │ │ └── acid.dm
│ │ │ │ │ │ └── xeno_strain.dm
│ │ │ │ │ ├── update_icons.dm
│ │ │ │ │ ├── xeno_helpers.dm
│ │ │ │ │ ├── xeno_tackle_counter.dm
│ │ │ │ │ └── xeno_verbs.dm
│ │ │ │ ├── damage_procs.dm
│ │ │ │ ├── init_signals.dm
│ │ │ │ ├── living.dm
│ │ │ │ ├── living_defense.dm
│ │ │ │ ├── living_defines.dm
│ │ │ │ ├── living_health_procs.dm
│ │ │ │ ├── living_healthscan.dm
│ │ │ │ ├── living_helpers.dm
│ │ │ │ ├── living_powers.dm
│ │ │ │ ├── living_verbs.dm
│ │ │ │ ├── login.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── say.dm
│ │ │ │ ├── silicon/
│ │ │ │ │ ├── death.dm
│ │ │ │ │ ├── decoy/
│ │ │ │ │ │ └── decoy.dm
│ │ │ │ │ ├── login.dm
│ │ │ │ │ ├── say.dm
│ │ │ │ │ └── silicon.dm
│ │ │ │ └── simple_animal/
│ │ │ │ ├── bat.dm
│ │ │ │ ├── friendly/
│ │ │ │ │ ├── bunny.dm
│ │ │ │ │ ├── cat.dm
│ │ │ │ │ ├── corgi.dm
│ │ │ │ │ ├── crab.dm
│ │ │ │ │ ├── farm_animals.dm
│ │ │ │ │ ├── lizard.dm
│ │ │ │ │ ├── mouse.dm
│ │ │ │ │ ├── rat.dm
│ │ │ │ │ ├── spiderbot.dm
│ │ │ │ │ └── tomato.dm
│ │ │ │ ├── hostile/
│ │ │ │ │ ├── alien.dm
│ │ │ │ │ ├── bear.dm
│ │ │ │ │ ├── carp.dm
│ │ │ │ │ ├── creature.dm
│ │ │ │ │ ├── giant_spider.dm
│ │ │ │ │ ├── hostile.dm
│ │ │ │ │ ├── retaliate/
│ │ │ │ │ │ ├── clown.dm
│ │ │ │ │ │ ├── drone.dm
│ │ │ │ │ │ ├── giant_lizard.dm
│ │ │ │ │ │ └── retaliate.dm
│ │ │ │ │ └── tree.dm
│ │ │ │ ├── parrot.dm
│ │ │ │ ├── simple_animal.dm
│ │ │ │ └── slug.dm
│ │ │ ├── login.dm
│ │ │ ├── logout.dm
│ │ │ ├── mob.dm
│ │ │ ├── mob_defines.dm
│ │ │ ├── mob_grab.dm
│ │ │ ├── mob_helpers.dm
│ │ │ ├── mob_movement.dm
│ │ │ ├── mob_status_procs.dm
│ │ │ ├── mob_transformation_simple.dm
│ │ │ ├── mob_verbs.dm
│ │ │ ├── new_player/
│ │ │ │ ├── body.dm
│ │ │ │ ├── login.dm
│ │ │ │ ├── logout.dm
│ │ │ │ ├── new_player.dm
│ │ │ │ ├── preferences_setup.dm
│ │ │ │ ├── skin_color.dm
│ │ │ │ └── sprite_accessories/
│ │ │ │ ├── facial_hair.dm
│ │ │ │ ├── hair.dm
│ │ │ │ ├── hair_gradients.dm
│ │ │ │ ├── sprite_accessories.dm
│ │ │ │ ├── tattoo.dm
│ │ │ │ ├── undershirt.dm
│ │ │ │ ├── underwear.dm
│ │ │ │ └── yautja_hair.dm
│ │ │ ├── say.dm
│ │ │ ├── transform_procs.dm
│ │ │ ├── unauthenticated/
│ │ │ │ ├── entity.dm
│ │ │ │ └── unauthenticated.dm
│ │ │ └── update_icons.dm
│ │ ├── movement/
│ │ │ ├── launching/
│ │ │ │ └── launching.dm
│ │ │ ├── movement.dm
│ │ │ └── pass_flags_container.dm
│ │ ├── nano/
│ │ │ ├── nanoexternal.dm
│ │ │ ├── nanomanager.dm
│ │ │ └── nanoui.dm
│ │ ├── nightmare/
│ │ │ ├── nmcontext.dm
│ │ │ ├── nmnodes/
│ │ │ │ ├── components.dm
│ │ │ │ ├── flow.dm
│ │ │ │ ├── mapload.dm
│ │ │ │ ├── nmnode.dm
│ │ │ │ └── scenario.dm
│ │ │ └── nmtasks/
│ │ │ ├── mapload.dm
│ │ │ ├── mapscheduler.dm
│ │ │ ├── nmtask.dm
│ │ │ └── scheduler.dm
│ │ ├── objectives/
│ │ │ ├── analyze_chems.dm
│ │ │ ├── communications.dm
│ │ │ ├── data_retrieval.dm
│ │ │ ├── documents.dm
│ │ │ ├── experimental_devices.dm
│ │ │ ├── mob_objectives.dm
│ │ │ ├── objective.dm
│ │ │ ├── objective_landmarks.dm
│ │ │ ├── objective_memory_storage.dm
│ │ │ ├── power_objectives.dm
│ │ │ ├── retrieve_items.dm
│ │ │ └── safe_cracking.dm
│ │ ├── organs/
│ │ │ ├── limb_objects.dm
│ │ │ ├── limbs.dm
│ │ │ ├── organ_internal.dm
│ │ │ ├── organ_objects.dm
│ │ │ ├── pain.dm
│ │ │ └── wound.dm
│ │ ├── paperwork/
│ │ │ ├── carbonpaper.dm
│ │ │ ├── clipboard.dm
│ │ │ ├── desk_bell.dm
│ │ │ ├── filingcabinet.dm
│ │ │ ├── folders.dm
│ │ │ ├── notepad.dm
│ │ │ ├── paper.dm
│ │ │ ├── paper_bundle.dm
│ │ │ ├── paperbin.dm
│ │ │ ├── photocopier.dm
│ │ │ ├── photography.dm
│ │ │ ├── prefab_papers/
│ │ │ │ ├── provost/
│ │ │ │ │ ├── high_command/
│ │ │ │ │ │ ├── arrest_warrant.dm
│ │ │ │ │ │ ├── custody_transfer.dm
│ │ │ │ │ │ ├── dao_response.dm
│ │ │ │ │ │ └── standard.dm
│ │ │ │ │ └── military_police/
│ │ │ │ │ ├── apology_notice.dm
│ │ │ │ │ ├── appeal_form.dm
│ │ │ │ │ ├── confiscation_receipt.dm
│ │ │ │ │ ├── dao_request.dm
│ │ │ │ │ └── ops_report.dm
│ │ │ │ ├── uacqs.dm
│ │ │ │ ├── uscm/
│ │ │ │ │ ├── high_command/
│ │ │ │ │ │ ├── arrest_warrant.dm
│ │ │ │ │ │ ├── custody_transfer.dm
│ │ │ │ │ │ └── standard.dm
│ │ │ │ │ └── ops_report.dm
│ │ │ │ └── wey_yu/
│ │ │ │ ├── high_command/
│ │ │ │ │ └── standard.dm
│ │ │ │ └── liaison/
│ │ │ │ ├── liability.dm
│ │ │ │ ├── nda_long.dm
│ │ │ │ ├── nda_short.dm
│ │ │ │ ├── ops_report.dm
│ │ │ │ └── preserve_intent.dm
│ │ │ ├── prefab_papers.dm
│ │ │ └── punch_card.dm
│ │ ├── power/
│ │ │ ├── apc.dm
│ │ │ ├── batteryrack.dm
│ │ │ ├── breaker_box.dm
│ │ │ ├── cable.dm
│ │ │ ├── cable_heavyduty.dm
│ │ │ ├── cell.dm
│ │ │ ├── fractal_reactor.dm
│ │ │ ├── lighting.dm
│ │ │ ├── port_gen.dm
│ │ │ ├── power.dm
│ │ │ ├── power_monitor.dm
│ │ │ ├── powernet.dm
│ │ │ ├── profiling.dm
│ │ │ ├── smes.dm
│ │ │ ├── smes_construction.dm
│ │ │ ├── terminal.dm
│ │ │ └── turbine.dm
│ │ ├── projectiles/
│ │ │ ├── ammo_boxes/
│ │ │ │ ├── ammo_boxes.dm
│ │ │ │ ├── box_structures.dm
│ │ │ │ ├── grenade_packets.dm
│ │ │ │ ├── handful_boxes.dm
│ │ │ │ ├── magazine_boxes.dm
│ │ │ │ ├── misc_boxes.dm
│ │ │ │ └── round_boxes.dm
│ │ │ ├── ammunition.dm
│ │ │ ├── gun.dm
│ │ │ ├── gun_attachables.dm
│ │ │ ├── gun_helpers.dm
│ │ │ ├── guns/
│ │ │ │ ├── boltaction.dm
│ │ │ │ ├── energy.dm
│ │ │ │ ├── flamer/
│ │ │ │ │ ├── flamer.dm
│ │ │ │ │ └── flameshape.dm
│ │ │ │ ├── flare_gun.dm
│ │ │ │ ├── lever_action.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── pistols.dm
│ │ │ │ ├── revolvers.dm
│ │ │ │ ├── rifles.dm
│ │ │ │ ├── shotguns.dm
│ │ │ │ ├── smartgun.dm
│ │ │ │ ├── smgs.dm
│ │ │ │ ├── souto.dm
│ │ │ │ └── specialist/
│ │ │ │ ├── launcher/
│ │ │ │ │ ├── grenade_launcher.dm
│ │ │ │ │ ├── launcher.dm
│ │ │ │ │ └── rocket_launcher.dm
│ │ │ │ ├── scout.dm
│ │ │ │ ├── sharp.dm
│ │ │ │ └── sniper.dm
│ │ │ ├── homing_projectile_component.dm
│ │ │ ├── item_to_box_mapping.dm
│ │ │ ├── magazines/
│ │ │ │ ├── flamer.dm
│ │ │ │ ├── lever_action.dm
│ │ │ │ ├── misc.dm
│ │ │ │ ├── pistols.dm
│ │ │ │ ├── revolvers.dm
│ │ │ │ ├── rifles.dm
│ │ │ │ ├── sentries.dm
│ │ │ │ ├── shotguns.dm
│ │ │ │ ├── smgs.dm
│ │ │ │ └── specialist.dm
│ │ │ └── projectile.dm
│ │ ├── reagents/
│ │ │ ├── Chemistry-Colours.dm
│ │ │ ├── Chemistry-Generator.dm
│ │ │ ├── Chemistry-Holder.dm
│ │ │ ├── Chemistry-Reactions.dm
│ │ │ ├── Chemistry-Readme.dm
│ │ │ ├── Chemistry-Reagents.dm
│ │ │ ├── Chemistry-Vessel.dm
│ │ │ ├── chemical_research/
│ │ │ │ ├── Chemical-Research.dm
│ │ │ │ └── generated_reagents.dm
│ │ │ ├── chemistry_machinery/
│ │ │ │ ├── acid_harness.dm
│ │ │ │ ├── autodispenser.dm
│ │ │ │ ├── centrifuge.dm
│ │ │ │ ├── chem_dispenser.dm
│ │ │ │ ├── chem_master.dm
│ │ │ │ ├── chem_simulator.dm
│ │ │ │ ├── chem_storage.dm
│ │ │ │ ├── pandemic.dm
│ │ │ │ ├── reagent_analyzer.dm
│ │ │ │ ├── reagent_grinder.dm
│ │ │ │ └── xenomorph_analyzer.dm
│ │ │ ├── chemistry_properties/
│ │ │ │ ├── chem_property.dm
│ │ │ │ ├── prop_negative.dm
│ │ │ │ ├── prop_neutral.dm
│ │ │ │ ├── prop_positive.dm
│ │ │ │ └── prop_special.dm
│ │ │ ├── chemistry_reactions/
│ │ │ │ ├── food_drink.dm
│ │ │ │ ├── medical.dm
│ │ │ │ └── other.dm
│ │ │ └── chemistry_reagents/
│ │ │ ├── alcohol.dm
│ │ │ ├── drink.dm
│ │ │ ├── food.dm
│ │ │ ├── medical.dm
│ │ │ ├── other.dm
│ │ │ ├── stims.dm
│ │ │ └── toxin.dm
│ │ ├── recycling/
│ │ │ ├── conveyor2.dm
│ │ │ ├── disposal-construction.dm
│ │ │ ├── disposal.dm
│ │ │ ├── recycler.dm
│ │ │ └── sortingmachinery.dm
│ │ ├── round_recording/
│ │ │ ├── debug_verbs.dm
│ │ │ ├── hooks.dm
│ │ │ └── round_recorder.dm
│ │ ├── security_levels/
│ │ │ ├── keycard_authentication.dm
│ │ │ └── security_levels.dm
│ │ ├── shuttle/
│ │ │ ├── computer.dm
│ │ │ ├── computers/
│ │ │ │ ├── dropship_computer.dm
│ │ │ │ ├── escape_pod_computer.dm
│ │ │ │ └── trijent_elevator_control.dm
│ │ │ ├── docking.dm
│ │ │ ├── dropship.dm
│ │ │ ├── dropship_hijack.dm
│ │ │ ├── helpers.dm
│ │ │ ├── on_move.dm
│ │ │ ├── ripple.dm
│ │ │ ├── shuttle.dm
│ │ │ ├── shuttle_rotate.dm
│ │ │ ├── shuttles/
│ │ │ │ ├── crashable/
│ │ │ │ │ ├── crashable.dm
│ │ │ │ │ ├── escape_shuttle.dm
│ │ │ │ │ └── lifeboats.dm
│ │ │ │ ├── dropship.dm
│ │ │ │ ├── ert.dm
│ │ │ │ └── trijent_elevator.dm
│ │ │ ├── shuttles.md
│ │ │ └── vehicle_elevator.dm
│ │ ├── shuttles/
│ │ │ ├── marine_ferry.dm
│ │ │ ├── monorail_console.dm
│ │ │ ├── shuttle.dm
│ │ │ ├── shuttle_console.dm
│ │ │ ├── shuttle_ferry.dm
│ │ │ └── shuttle_supply.dm
│ │ ├── sorokyne/
│ │ │ └── sorokyne_hot_water.dm
│ │ ├── statusbar/
│ │ │ └── statusbar.dm
│ │ ├── surgery/
│ │ │ ├── amputation.dm
│ │ │ ├── bones.dm
│ │ │ ├── brainrepair.dm
│ │ │ ├── chestburster.dm
│ │ │ ├── eschar.dm
│ │ │ ├── eye.dm
│ │ │ ├── generic.dm
│ │ │ ├── headreattach.dm
│ │ │ ├── implant.dm
│ │ │ ├── internal_bleeding.dm
│ │ │ ├── mcomp_tendwounds.dm
│ │ │ ├── organs_internal.dm
│ │ │ ├── robolimb_repair.dm
│ │ │ ├── robolimbs.dm
│ │ │ ├── robotic_organs_internal.dm
│ │ │ ├── surgery_initiator.dm
│ │ │ ├── surgery_procedure.dm
│ │ │ ├── surgery_steps.dm
│ │ │ ├── surgery_toggle.dm
│ │ │ ├── tendwounds.dm
│ │ │ └── xeno.dm
│ │ ├── teleporters/
│ │ │ ├── teleporter.dm
│ │ │ ├── teleporter_admin_verbs.dm
│ │ │ ├── teleporter_console.dm
│ │ │ └── teleporter_landmarks.dm
│ │ ├── tents/
│ │ │ ├── blockers.dm
│ │ │ ├── deployed_tents.dm
│ │ │ ├── equipment.dm
│ │ │ ├── folded_tents.dm
│ │ │ └── templates.dm
│ │ ├── tgchat/
│ │ │ ├── cm_shims.dm
│ │ │ ├── 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/
│ │ │ │ ├── admin.dm
│ │ │ │ ├── always.dm
│ │ │ │ ├── computer.dm
│ │ │ │ ├── conscious.dm
│ │ │ │ ├── contained.dm
│ │ │ │ ├── debug.dm
│ │ │ │ ├── deep_inventory.dm
│ │ │ │ ├── default.dm
│ │ │ │ ├── hands.dm
│ │ │ │ ├── human_adjacent.dm
│ │ │ │ ├── in_view.dm
│ │ │ │ ├── inventory.dm
│ │ │ │ ├── never.dm
│ │ │ │ ├── new_player.dm
│ │ │ │ ├── not_incapacitated.dm
│ │ │ │ ├── not_incapacitated_and_adjacent.dm
│ │ │ │ ├── not_incapacitated_and_adjacent_strict.dm
│ │ │ │ ├── not_incapacitated_and_inventory.dm
│ │ │ │ ├── notcontained.dm
│ │ │ │ ├── observer.dm
│ │ │ │ ├── physical.dm
│ │ │ │ ├── reverse_contained.dm
│ │ │ │ ├── self.dm
│ │ │ │ ├── xeno.dm
│ │ │ │ └── zlevel.dm
│ │ │ ├── states.dm
│ │ │ ├── status_composers.dm
│ │ │ ├── tgui-say/
│ │ │ │ ├── modal.dm
│ │ │ │ ├── speech.dm
│ │ │ │ └── typing.dm
│ │ │ ├── tgui.dm
│ │ │ ├── tgui_alert.dm
│ │ │ ├── tgui_input_list.dm
│ │ │ ├── tgui_number_input.dm
│ │ │ └── tgui_window.dm
│ │ ├── tgui_input/
│ │ │ ├── checkboxes.dm
│ │ │ ├── color.dm
│ │ │ └── text.dm
│ │ ├── tgui_panel/
│ │ │ ├── audio.dm
│ │ │ ├── external.dm
│ │ │ ├── ping_relay.dm
│ │ │ ├── telemetry.dm
│ │ │ └── tgui_panel.dm
│ │ ├── tooltip/
│ │ │ ├── tooltip.dm
│ │ │ └── tooltip.html
│ │ ├── trigger.dm
│ │ ├── unit_tests/
│ │ │ ├── README.md
│ │ │ ├── areas_unpowered.dm
│ │ │ ├── autowiki.dm
│ │ │ ├── check_runtimes.dm
│ │ │ ├── create_and_destroy.dm
│ │ │ ├── duplicate_sprite_accessories.dm
│ │ │ ├── emote_panels.dm
│ │ │ ├── focus_only_tests.dm
│ │ │ ├── map_sanity.dm
│ │ │ ├── missing_icons.dm
│ │ │ ├── resist.dm
│ │ │ ├── spawn_humans.dm
│ │ │ ├── spritesheets.dm
│ │ │ ├── subsystem_init.dm
│ │ │ ├── tgui_create_message.dm
│ │ │ ├── timer_sanity.dm
│ │ │ ├── tutorials.dm
│ │ │ ├── unit_test.dm
│ │ │ └── xeno_strains.dm
│ │ ├── vehicles/
│ │ │ ├── apc/
│ │ │ │ ├── apc.dm
│ │ │ │ ├── apc_command.dm
│ │ │ │ ├── apc_medical.dm
│ │ │ │ ├── apc_pmc.dm
│ │ │ │ └── interior.dm
│ │ │ ├── arc/
│ │ │ │ ├── arc.dm
│ │ │ │ ├── interior.dm
│ │ │ │ └── verbs.dm
│ │ │ ├── cargo_train.dm
│ │ │ ├── hardpoints/
│ │ │ │ ├── armor/
│ │ │ │ │ ├── armor.dm
│ │ │ │ │ ├── ballistic.dm
│ │ │ │ │ ├── caustic.dm
│ │ │ │ │ ├── concussive.dm
│ │ │ │ │ ├── paladin.dm
│ │ │ │ │ └── snowplow.dm
│ │ │ │ ├── hardpoint.dm
│ │ │ │ ├── hardpoint_ammo/
│ │ │ │ │ ├── arc_sentry_ammo.dm
│ │ │ │ │ ├── autocannon_ammo.dm
│ │ │ │ │ ├── cupola_ammo.dm
│ │ │ │ │ ├── dualcannon_ammo.dm
│ │ │ │ │ ├── firing_port_weapon_ammo.dm
│ │ │ │ │ ├── flare_launcher_ammo.dm
│ │ │ │ │ ├── gl_ammo.dm
│ │ │ │ │ ├── hardpoint_ammo.dm
│ │ │ │ │ ├── ltb_ammo.dm
│ │ │ │ │ ├── minigun_ammo.dm
│ │ │ │ │ ├── primary_flamer_ammo.dm
│ │ │ │ │ ├── secondary_flamer_ammo.dm
│ │ │ │ │ ├── smoke_ammo.dm
│ │ │ │ │ └── tow_ammo.dm
│ │ │ │ ├── holder/
│ │ │ │ │ ├── holder.dm
│ │ │ │ │ └── tank_turret.dm
│ │ │ │ ├── primary/
│ │ │ │ │ ├── arc_sentry.dm
│ │ │ │ │ ├── autocannon.dm
│ │ │ │ │ ├── dual_cannon.dm
│ │ │ │ │ ├── flamer.dm
│ │ │ │ │ ├── ltb.dm
│ │ │ │ │ ├── minigun.dm
│ │ │ │ │ └── primary.dm
│ │ │ │ ├── secondary/
│ │ │ │ │ ├── cupola.dm
│ │ │ │ │ ├── flamer.dm
│ │ │ │ │ ├── frontal_cannon.dm
│ │ │ │ │ ├── grenade_launcher.dm
│ │ │ │ │ ├── secondary.dm
│ │ │ │ │ └── tow.dm
│ │ │ │ ├── special/
│ │ │ │ │ ├── firing_port_weapon.dm
│ │ │ │ │ └── special.dm
│ │ │ │ ├── support/
│ │ │ │ │ ├── antenna.dm
│ │ │ │ │ ├── artillery.dm
│ │ │ │ │ ├── flare.dm
│ │ │ │ │ ├── iwsa.dm
│ │ │ │ │ ├── overdrive.dm
│ │ │ │ │ └── support.dm
│ │ │ │ └── wheels/
│ │ │ │ ├── apc_wheels.dm
│ │ │ │ ├── arc_wheels.dm
│ │ │ │ ├── locomotion.dm
│ │ │ │ ├── treads.dm
│ │ │ │ └── van_wheels.dm
│ │ │ ├── interior/
│ │ │ │ ├── areas.dm
│ │ │ │ ├── interactable/
│ │ │ │ │ ├── doors.dm
│ │ │ │ │ ├── seats.dm
│ │ │ │ │ ├── vehicle_locker.dm
│ │ │ │ │ ├── vendors.dm
│ │ │ │ │ ├── viewports.dm
│ │ │ │ │ └── weapons_loader.dm
│ │ │ │ ├── interior.dm
│ │ │ │ ├── interior_hull.dm
│ │ │ │ └── interior_landmarks.dm
│ │ │ ├── multitile/
│ │ │ │ ├── multitile.dm
│ │ │ │ ├── multitile_bump.dm
│ │ │ │ ├── multitile_hardpoints.dm
│ │ │ │ ├── multitile_interaction.dm
│ │ │ │ ├── multitile_movement.dm
│ │ │ │ └── multitile_verbs.dm
│ │ │ ├── powerloader.dm
│ │ │ ├── souto_mobile.dm
│ │ │ ├── tank/
│ │ │ │ ├── interior.dm
│ │ │ │ └── tank.dm
│ │ │ ├── train.dm
│ │ │ ├── van/
│ │ │ │ ├── box_van.dm
│ │ │ │ ├── clf_van.dm
│ │ │ │ ├── interior.dm
│ │ │ │ ├── pizza_van.dm
│ │ │ │ └── van.dm
│ │ │ ├── vehicle.dm
│ │ │ └── vehicle_misc_objects.dm
│ │ └── vox/
│ │ ├── vox.dm
│ │ ├── vox_sounds/
│ │ │ ├── vox.dm
│ │ │ └── vox_military.dm
│ │ └── vox_tgui.dm
│ ├── span_macros.dm
│ └── stylesheet.dm
├── colonialmarines.dme
├── config/
│ ├── .gitignore
│ └── example/
│ ├── admin_ranks.txt
│ ├── admins.txt
│ ├── alienwhitelist.txt
│ ├── config.txt
│ ├── custom_items.txt
│ ├── dbconfig_bsql.txt
│ ├── dbconfig_docker.txt
│ ├── dbconfig_native.txt
│ ├── forumdbconfig.txt
│ ├── game_options.txt
│ ├── lobby_art/
│ │ └── .gitkeep
│ ├── motd.txt
│ ├── reboot_sfx.txt
│ ├── relays.txt
│ ├── resources.txt
│ ├── role_whitelist.txt
│ └── word_filter.txt
├── dependencies.sh
├── docker-compose.yml
├── html/
│ ├── admin/
│ │ └── view_variables.css
│ ├── admin_pm.html
│ ├── browser/
│ │ ├── common.css
│ │ ├── cryo.css
│ │ ├── legacy.css
│ │ ├── punchcard.css
│ │ ├── scannernew.css
│ │ └── sleeper.css
│ ├── changelog.css
│ ├── changelog.js
│ ├── changelog2015.html
│ ├── changelog2016.html
│ ├── changelog2017.html
│ ├── changelog2018.html
│ ├── changelog2019.html
│ ├── 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-02.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-11.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
│ │ │ └── 2026-05.yml
│ │ ├── example.yml
│ │ ├── last_mr_dates.txt
│ │ └── pull_desc_changelogs.bat
│ ├── create_humans.html
│ ├── create_object.html
│ ├── create_xenos.html
│ ├── font-awesome/
│ │ └── README.MD
│ ├── help.html
│ ├── old_add-to-changelog.html
│ ├── search.js
│ ├── statbrowser.css
│ ├── statbrowser.html
│ ├── statbrowser.js
│ └── templates/
│ ├── footer.html
│ └── header.html
├── icons/
│ ├── dyn/
│ │ └── .keep
│ ├── effects/
│ │ ├── 128x128.dmi
│ │ ├── 160x160.dmi
│ │ ├── 32x32-hunter_effects.dmi
│ │ ├── 3WE_logo_tile.dmi
│ │ ├── 64x64hybrisa_decals.dmi
│ │ ├── 64x96-hunter_effects.dmi
│ │ ├── 96x96.dmi
│ │ ├── Targeted.dmi
│ │ ├── WY_huge_logo.dmi
│ │ ├── acid.dmi
│ │ ├── alert.dmi
│ │ ├── alphacolors.dmi
│ │ ├── attacks.dmi
│ │ ├── beam.dmi
│ │ ├── blood.dmi
│ │ ├── bulletholes.dmi
│ │ ├── chemsmoke.dmi
│ │ ├── crayondecal.dmi
│ │ ├── drip.dmi
│ │ ├── effects.dmi
│ │ ├── explosion.dmi
│ │ ├── fingerprints.dmi
│ │ ├── fire.dmi
│ │ ├── fluidtracks.dmi
│ │ ├── footprints.dmi
│ │ ├── heavyimpact.dmi
│ │ ├── hefa_cult/
│ │ │ ├── 32_wall.dmi
│ │ │ └── 96.dmi
│ │ ├── hybrisa_decals.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_384.dmi
│ │ │ ├── light_416.dmi
│ │ │ ├── light_64.dmi
│ │ │ ├── light_96.dmi
│ │ │ ├── light_cone.dmi
│ │ │ └── shockwave.dmi
│ │ ├── lighting_object.dmi
│ │ ├── lighting_object_big.dmi
│ │ ├── medical_decals.dmi
│ │ ├── meridianlogo.dmi
│ │ ├── monkey_blood.dmi
│ │ ├── mouse_pointer/
│ │ │ ├── explosive_mouse.dmi
│ │ │ ├── flamer_mouse.dmi
│ │ │ ├── lmg_mouse.dmi
│ │ │ ├── mecha_mouse.dmi
│ │ │ ├── pistol_mouse.dmi
│ │ │ ├── plasma_caster_mouse.dmi
│ │ │ ├── rifle_mouse.dmi
│ │ │ ├── shotgun_mouse.dmi
│ │ │ ├── smartgun_mouse.dmi
│ │ │ ├── sniper_mouse.dmi
│ │ │ ├── supplypod_down_target.dmi
│ │ │ ├── supplypod_pickturf.dmi
│ │ │ ├── supplypod_target.dmi
│ │ │ ├── twe.dmi
│ │ │ ├── upp.dmi
│ │ │ ├── upp_smartgun_mouse.dmi
│ │ │ ├── uscm.dmi
│ │ │ ├── wy.dmi
│ │ │ ├── xeno.dmi
│ │ │ └── xm88/
│ │ │ ├── xm88-0.dmi
│ │ │ ├── xm88-1.dmi
│ │ │ ├── xm88-2.dmi
│ │ │ ├── xm88-3.dmi
│ │ │ ├── xm88-4.dmi
│ │ │ ├── xm88-fired-0.dmi
│ │ │ ├── xm88-fired-1.dmi
│ │ │ ├── xm88-fired-2.dmi
│ │ │ ├── xm88-fired-3.dmi
│ │ │ └── xm88-fired-4.dmi
│ │ ├── new_acid.dmi
│ │ ├── particles/
│ │ │ └── fire.dmi
│ │ ├── portals.dmi
│ │ ├── sebb.dmi
│ │ ├── spacevines.dmi
│ │ ├── ss13_dark_alpha6.dmi
│ │ ├── station_explosion.dmi
│ │ ├── status_effects.dmi
│ │ ├── strata_decals.dmi
│ │ ├── techtree/
│ │ │ ├── tech.dmi
│ │ │ └── tech_64.dmi
│ │ ├── warning_stripes.dmi
│ │ ├── water.dmi
│ │ └── weather.dmi
│ ├── emoji.dmi
│ ├── flags.dmi
│ ├── landmarks.dmi
│ ├── lobby/
│ │ └── icon.dmi
│ ├── minimap.dmi
│ ├── misc/
│ │ ├── buildmode.dmi
│ │ ├── colortest.dmi
│ │ ├── events/
│ │ │ └── pumpkins.dmi
│ │ └── tutorial.dmi
│ ├── mob/
│ │ ├── animal.dmi
│ │ ├── critter.dmi
│ │ ├── do_afters.dmi
│ │ ├── effects/
│ │ │ └── talk.dmi
│ │ ├── hud/
│ │ │ ├── actions.dmi
│ │ │ ├── actions_xeno.dmi
│ │ │ ├── actions_yautja.dmi
│ │ │ ├── alien_standard.dmi
│ │ │ ├── chat_icons.dmi
│ │ │ ├── escape_menu_leave_body.dmi
│ │ │ ├── factions/
│ │ │ │ ├── clf.dmi
│ │ │ │ ├── cmb.dmi
│ │ │ │ ├── hyperdyne.dmi
│ │ │ │ ├── marine.dmi
│ │ │ │ ├── twe.dmi
│ │ │ │ ├── upp.dmi
│ │ │ │ └── wy.dmi
│ │ │ ├── hud.dmi
│ │ │ ├── hud_yautja.dmi
│ │ │ ├── human_bronze.dmi
│ │ │ ├── human_dark.dmi
│ │ │ ├── human_dark_frame.dmi
│ │ │ ├── human_glass.dmi
│ │ │ ├── human_green.dmi
│ │ │ ├── human_grey.dmi
│ │ │ ├── human_holo.dmi
│ │ │ ├── human_midnight.dmi
│ │ │ ├── human_old.dmi
│ │ │ ├── human_orange.dmi
│ │ │ ├── human_red.dmi
│ │ │ ├── human_status.dmi
│ │ │ ├── human_white.dmi
│ │ │ ├── mecha_mouse.dmi
│ │ │ ├── minimap_overlay.dmi
│ │ │ ├── screen1.dmi
│ │ │ ├── screen1_full.dmi
│ │ │ ├── sec_hud.dmi
│ │ │ ├── xeno_markers.dmi
│ │ │ └── zone_sel.dmi
│ │ ├── humans/
│ │ │ ├── body_mask.dmi
│ │ │ ├── dam_human.dmi
│ │ │ ├── hair_gradients.dmi
│ │ │ ├── human.dmi
│ │ │ ├── human_facial.dmi
│ │ │ ├── human_hair.dmi
│ │ │ ├── onmob/
│ │ │ │ ├── OnFire.dmi
│ │ │ │ ├── clothing/
│ │ │ │ │ ├── accessory/
│ │ │ │ │ │ ├── armbands.dmi
│ │ │ │ │ │ ├── legpouch.dmi
│ │ │ │ │ │ ├── medals.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── patches.dmi
│ │ │ │ │ │ ├── ponchos.dmi
│ │ │ │ │ │ ├── ranks.dmi
│ │ │ │ │ │ ├── ties.dmi
│ │ │ │ │ │ ├── watches.dmi
│ │ │ │ │ │ └── webbings.dmi
│ │ │ │ │ ├── back/
│ │ │ │ │ │ ├── ammo_boxes.dmi
│ │ │ │ │ │ ├── backpacks.dmi
│ │ │ │ │ │ ├── backpacks_by_faction/
│ │ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ │ ├── backpacks_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ ├── donator.dmi
│ │ │ │ │ │ ├── guns_by_type/
│ │ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ │ ├── energy_weapons.dmi
│ │ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ │ ├── grenade_launchers.dmi
│ │ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ │ ├── pred_guns.dmi
│ │ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ │ ├── holster.dmi
│ │ │ │ │ │ ├── melee_weapons.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── smartpack.dmi
│ │ │ │ │ │ └── sprayers.dmi
│ │ │ │ │ ├── belts/
│ │ │ │ │ │ ├── belts.dmi
│ │ │ │ │ │ ├── belts_by_faction/
│ │ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ │ ├── belts_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ ├── donator.dmi
│ │ │ │ │ │ ├── guns.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── scabbards.dmi
│ │ │ │ │ │ ├── tools.dmi
│ │ │ │ │ │ └── weapons.dmi
│ │ │ │ │ ├── critters_shoulder.dmi
│ │ │ │ │ ├── ears.dmi
│ │ │ │ │ ├── feet.dmi
│ │ │ │ │ ├── glasses/
│ │ │ │ │ │ ├── glasses.dmi
│ │ │ │ │ │ ├── goggles.dmi
│ │ │ │ │ │ ├── huds.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ └── night_vision.dmi
│ │ │ │ │ ├── hands.dmi
│ │ │ │ │ ├── hands_garb.dmi
│ │ │ │ │ ├── head/
│ │ │ │ │ │ ├── berets.dmi
│ │ │ │ │ │ ├── critters.dmi
│ │ │ │ │ │ ├── donator.dmi
│ │ │ │ │ │ ├── formal_hats.dmi
│ │ │ │ │ │ ├── hardhats.dmi
│ │ │ │ │ │ ├── hats.dmi
│ │ │ │ │ │ ├── hats_by_faction/
│ │ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ │ ├── hats_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ ├── hazard.dmi
│ │ │ │ │ │ ├── head_64.dmi
│ │ │ │ │ │ ├── headbands.dmi
│ │ │ │ │ │ ├── misc_ert_colony.dmi
│ │ │ │ │ │ ├── objects.dmi
│ │ │ │ │ │ ├── overlays.dmi
│ │ │ │ │ │ ├── soft_caps.dmi
│ │ │ │ │ │ ├── surgical_caps.dmi
│ │ │ │ │ │ └── xeno_hats.dmi
│ │ │ │ │ ├── helmet_garb/
│ │ │ │ │ │ ├── ammo.dmi
│ │ │ │ │ │ ├── cards.dmi
│ │ │ │ │ │ ├── crayons.dmi
│ │ │ │ │ │ ├── food.dmi
│ │ │ │ │ │ ├── glasses.dmi
│ │ │ │ │ │ ├── goggles.dmi
│ │ │ │ │ │ ├── headbands.dmi
│ │ │ │ │ │ ├── helmet_covers.dmi
│ │ │ │ │ │ ├── helmet_garb_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ ├── huds.dmi
│ │ │ │ │ │ ├── medical.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── patches_flairs.dmi
│ │ │ │ │ │ ├── smoking.dmi
│ │ │ │ │ │ ├── visors.dmi
│ │ │ │ │ │ └── walkman.dmi
│ │ │ │ │ ├── masks/
│ │ │ │ │ │ ├── balaclava.dmi
│ │ │ │ │ │ ├── donator.dmi
│ │ │ │ │ │ ├── gasmasks.dmi
│ │ │ │ │ │ ├── glasses_masks.dmi
│ │ │ │ │ │ ├── masks.dmi
│ │ │ │ │ │ ├── masks_by_faction/
│ │ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ │ ├── objects.dmi
│ │ │ │ │ │ ├── scarves.dmi
│ │ │ │ │ │ └── smoking.dmi
│ │ │ │ │ ├── suit_storage/
│ │ │ │ │ │ ├── belts.dmi
│ │ │ │ │ │ ├── guns_by_type/
│ │ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ │ ├── energy_weapons.dmi
│ │ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ │ ├── grenade_launchers.dmi
│ │ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ │ ├── misc_weapons.dmi
│ │ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ │ ├── rocket_launchers.dmi
│ │ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ │ ├── smartguns.dmi
│ │ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ │ ├── melee.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── suit_storage_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ └── tools.dmi
│ │ │ │ │ ├── suits/
│ │ │ │ │ │ ├── armor.dmi
│ │ │ │ │ │ ├── coats_robes.dmi
│ │ │ │ │ │ ├── donator.dmi
│ │ │ │ │ │ ├── hazard.dmi
│ │ │ │ │ │ ├── jackets.dmi
│ │ │ │ │ │ ├── misc_ert.dmi
│ │ │ │ │ │ ├── objects.dmi
│ │ │ │ │ │ ├── suits_by_faction/
│ │ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ │ ├── suits_by_map/
│ │ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ │ ├── vests_aprons.dmi
│ │ │ │ │ │ ├── windbreakers.dmi
│ │ │ │ │ │ └── xeno_suits.dmi
│ │ │ │ │ └── uniforms/
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ ├── formal_uniforms.dmi
│ │ │ │ │ ├── jumpsuits.dmi
│ │ │ │ │ ├── misc_ert_colony.dmi
│ │ │ │ │ ├── synthetic_uniforms.dmi
│ │ │ │ │ ├── underwear_uniforms.dmi
│ │ │ │ │ ├── uniforms_by_department/
│ │ │ │ │ │ ├── cargo.dmi
│ │ │ │ │ │ ├── engineering.dmi
│ │ │ │ │ │ ├── medical.dmi
│ │ │ │ │ │ ├── research.dmi
│ │ │ │ │ │ ├── security.dmi
│ │ │ │ │ │ └── service.dmi
│ │ │ │ │ ├── uniforms_by_faction/
│ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ │ ├── SEEGSON.dmi
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ ├── uniforms_by_map/
│ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ └── workwear.dmi
│ │ │ │ ├── corgi_back.dmi
│ │ │ │ ├── corgi_head.dmi
│ │ │ │ ├── cuffs.dmi
│ │ │ │ ├── human_face.dmi
│ │ │ │ ├── hunter/
│ │ │ │ │ ├── badblood_gear.dmi
│ │ │ │ │ ├── hellhound.dmi
│ │ │ │ │ ├── hellhound_wounds.dmi
│ │ │ │ │ ├── items_lefthand.dmi
│ │ │ │ │ ├── items_righthand.dmi
│ │ │ │ │ ├── mcaste_gear.dmi
│ │ │ │ │ ├── pred_armor.dmi
│ │ │ │ │ ├── pred_bracers.dmi
│ │ │ │ │ ├── pred_gear.dmi
│ │ │ │ │ ├── pred_gear64.dmi
│ │ │ │ │ ├── pred_mask.dmi
│ │ │ │ │ ├── pred_mask_accessories.dmi
│ │ │ │ │ ├── pred_shoes.dmi
│ │ │ │ │ ├── suit_storage.dmi
│ │ │ │ │ └── thrall_gear.dmi
│ │ │ │ ├── ids.dmi
│ │ │ │ ├── inhands/
│ │ │ │ │ ├── __inhand_template.dmi
│ │ │ │ │ ├── clothing/
│ │ │ │ │ │ ├── backpacks_lefthand.dmi
│ │ │ │ │ │ ├── backpacks_righthand.dmi
│ │ │ │ │ │ ├── belts_lefthand.dmi
│ │ │ │ │ │ ├── belts_righthand.dmi
│ │ │ │ │ │ ├── boots_lefthand.dmi
│ │ │ │ │ │ ├── boots_righthand.dmi
│ │ │ │ │ │ ├── glasses_lefthand.dmi
│ │ │ │ │ │ ├── glasses_righthand.dmi
│ │ │ │ │ │ ├── gloves_lefthand.dmi
│ │ │ │ │ │ ├── gloves_righthand.dmi
│ │ │ │ │ │ ├── hats_lefthand.dmi
│ │ │ │ │ │ ├── hats_righthand.dmi
│ │ │ │ │ │ ├── masks_lefthand.dmi
│ │ │ │ │ │ ├── masks_righthand.dmi
│ │ │ │ │ │ ├── pouches_lefthand.dmi
│ │ │ │ │ │ ├── pouches_righthand.dmi
│ │ │ │ │ │ ├── suits_lefthand.dmi
│ │ │ │ │ │ ├── suits_righthand.dmi
│ │ │ │ │ │ ├── uniforms_lefthand.dmi
│ │ │ │ │ │ └── uniforms_righthand.dmi
│ │ │ │ │ ├── equipment/
│ │ │ │ │ │ ├── briefcases_lefthand.dmi
│ │ │ │ │ │ ├── briefcases_righthand.dmi
│ │ │ │ │ │ ├── construction_lefthand.dmi
│ │ │ │ │ │ ├── construction_righthand.dmi
│ │ │ │ │ │ ├── devices_lefthand.dmi
│ │ │ │ │ │ ├── devices_righthand.dmi
│ │ │ │ │ │ ├── hydroponics_tools_lefthand.dmi
│ │ │ │ │ │ ├── hydroponics_tools_righthand.dmi
│ │ │ │ │ │ ├── janitor_lefthand.dmi
│ │ │ │ │ │ ├── janitor_righthand.dmi
│ │ │ │ │ │ ├── kitchen_tools_lefthand.dmi
│ │ │ │ │ │ ├── kitchen_tools_righthand.dmi
│ │ │ │ │ │ ├── medical_lefthand.dmi
│ │ │ │ │ │ ├── medical_righthand.dmi
│ │ │ │ │ │ ├── paint_lefthand.dmi
│ │ │ │ │ │ ├── paint_righthand.dmi
│ │ │ │ │ │ ├── paperwork_lefthand.dmi
│ │ │ │ │ │ ├── paperwork_righthand.dmi
│ │ │ │ │ │ ├── security_lefthand.dmi
│ │ │ │ │ │ ├── security_righthand.dmi
│ │ │ │ │ │ ├── tanks_lefthand.dmi
│ │ │ │ │ │ ├── tanks_righthand.dmi
│ │ │ │ │ │ ├── toolboxes_lefthand.dmi
│ │ │ │ │ │ ├── toolboxes_righthand.dmi
│ │ │ │ │ │ ├── tools_lefthand.dmi
│ │ │ │ │ │ └── tools_righthand.dmi
│ │ │ │ │ ├── items/
│ │ │ │ │ │ ├── bedsheets_lefthand.dmi
│ │ │ │ │ │ ├── bedsheets_righthand.dmi
│ │ │ │ │ │ ├── books_lefthand.dmi
│ │ │ │ │ │ ├── books_righthand.dmi
│ │ │ │ │ │ ├── bottles_lefthand.dmi
│ │ │ │ │ │ ├── bottles_righthand.dmi
│ │ │ │ │ │ ├── canned_food_lefthand.dmi
│ │ │ │ │ │ ├── canned_food_righthand.dmi
│ │ │ │ │ │ ├── critters_lefthand.dmi
│ │ │ │ │ │ ├── critters_righthand.dmi
│ │ │ │ │ │ ├── food_lefthand.dmi
│ │ │ │ │ │ ├── food_righthand.dmi
│ │ │ │ │ │ ├── furniture_lefthand.dmi
│ │ │ │ │ │ ├── furniture_righthand.dmi
│ │ │ │ │ │ ├── ids_lefthand.dmi
│ │ │ │ │ │ ├── ids_righthand.dmi
│ │ │ │ │ │ ├── items_lefthand_64.dmi
│ │ │ │ │ │ ├── items_righthand_64.dmi
│ │ │ │ │ │ ├── lighting_lefthand.dmi
│ │ │ │ │ │ ├── lighting_righthand.dmi
│ │ │ │ │ │ ├── material_stacks_lefthand.dmi
│ │ │ │ │ │ ├── material_stacks_righthand.dmi
│ │ │ │ │ │ ├── mres_lefthand.dmi
│ │ │ │ │ │ ├── mres_righthand.dmi
│ │ │ │ │ │ ├── organs_lefthand.dmi
│ │ │ │ │ │ ├── organs_righthand.dmi
│ │ │ │ │ │ ├── smoking_lefthand.dmi
│ │ │ │ │ │ ├── smoking_righthand.dmi
│ │ │ │ │ │ ├── storage_lefthand.dmi
│ │ │ │ │ │ ├── storage_righthand.dmi
│ │ │ │ │ │ ├── toys_lefthand.dmi
│ │ │ │ │ │ ├── toys_righthand.dmi
│ │ │ │ │ │ ├── xeno_items_lefthand.dmi
│ │ │ │ │ │ └── xeno_items_righthand.dmi
│ │ │ │ │ ├── items_by_map/
│ │ │ │ │ │ ├── classic_lefthand.dmi
│ │ │ │ │ │ ├── classic_righthand.dmi
│ │ │ │ │ │ ├── desert_lefthand.dmi
│ │ │ │ │ │ ├── desert_righthand.dmi
│ │ │ │ │ │ ├── jungle_lefthand.dmi
│ │ │ │ │ │ ├── jungle_righthand.dmi
│ │ │ │ │ │ ├── snow_lefthand.dmi
│ │ │ │ │ │ ├── snow_righthand.dmi
│ │ │ │ │ │ ├── urban_lefthand.dmi
│ │ │ │ │ │ └── urban_righthand.dmi
│ │ │ │ │ └── weapons/
│ │ │ │ │ ├── ammo_lefthand.dmi
│ │ │ │ │ ├── ammo_righthand.dmi
│ │ │ │ │ ├── grenades_lefthand.dmi
│ │ │ │ │ ├── grenades_righthand.dmi
│ │ │ │ │ ├── guns/
│ │ │ │ │ │ ├── assault_rifles_lefthand.dmi
│ │ │ │ │ │ ├── assault_rifles_righthand.dmi
│ │ │ │ │ │ ├── energy_weapons_lefthand.dmi
│ │ │ │ │ │ ├── energy_weapons_righthand.dmi
│ │ │ │ │ │ ├── flamers_lefthand.dmi
│ │ │ │ │ │ ├── flamers_righthand.dmi
│ │ │ │ │ │ ├── grenade_launchers_lefthand.dmi
│ │ │ │ │ │ ├── grenade_launchers_righthand.dmi
│ │ │ │ │ │ ├── machineguns_lefthand.dmi
│ │ │ │ │ │ ├── machineguns_righthand.dmi
│ │ │ │ │ │ ├── marksman_rifles_lefthand.dmi
│ │ │ │ │ │ ├── marksman_rifles_righthand.dmi
│ │ │ │ │ │ ├── misc_weapons_lefthand.dmi
│ │ │ │ │ │ ├── misc_weapons_righthand.dmi
│ │ │ │ │ │ ├── pistols_lefthand.dmi
│ │ │ │ │ │ ├── pistols_righthand.dmi
│ │ │ │ │ │ ├── pred_guns_lefthand.dmi
│ │ │ │ │ │ ├── pred_guns_righthand.dmi
│ │ │ │ │ │ ├── revolvers_lefthand.dmi
│ │ │ │ │ │ ├── revolvers_righthand.dmi
│ │ │ │ │ │ ├── rocket_launchers_lefthand.dmi
│ │ │ │ │ │ ├── rocket_launchers_righthand.dmi
│ │ │ │ │ │ ├── shotguns_lefthand.dmi
│ │ │ │ │ │ ├── shotguns_righthand.dmi
│ │ │ │ │ │ ├── smartguns_lefthand.dmi
│ │ │ │ │ │ ├── smartguns_righthand.dmi
│ │ │ │ │ │ ├── smgs_lefthand.dmi
│ │ │ │ │ │ └── smgs_righthand.dmi
│ │ │ │ │ └── melee/
│ │ │ │ │ ├── 64_weapons_lefthand.dmi
│ │ │ │ │ ├── 64_weapons_righthand.dmi
│ │ │ │ │ ├── axes_lefthand.dmi
│ │ │ │ │ ├── axes_righthand.dmi
│ │ │ │ │ ├── canes_lefthand.dmi
│ │ │ │ │ ├── canes_righthand.dmi
│ │ │ │ │ ├── energy_lefthand.dmi
│ │ │ │ │ ├── energy_righthand.dmi
│ │ │ │ │ ├── knives_lefthand.dmi
│ │ │ │ │ ├── knives_righthand.dmi
│ │ │ │ │ ├── misc_weapons_lefthand.dmi
│ │ │ │ │ ├── misc_weapons_righthand.dmi
│ │ │ │ │ ├── non_lethal_lefthand.dmi
│ │ │ │ │ ├── non_lethal_righthand.dmi
│ │ │ │ │ ├── shields_lefthand.dmi
│ │ │ │ │ ├── shields_righthand.dmi
│ │ │ │ │ ├── spears_lefthand.dmi
│ │ │ │ │ ├── spears_righthand.dmi
│ │ │ │ │ ├── swords_lefthand.dmi
│ │ │ │ │ └── swords_righthand.dmi
│ │ │ │ ├── limb_mask.dmi
│ │ │ │ └── med_human.dmi
│ │ │ ├── species/
│ │ │ │ ├── monkeys/
│ │ │ │ │ ├── onmob/
│ │ │ │ │ │ ├── hands_monkey.dmi
│ │ │ │ │ │ ├── suit_monkey_0.dmi
│ │ │ │ │ │ ├── suit_monkey_1.dmi
│ │ │ │ │ │ ├── ties_monkey.dmi
│ │ │ │ │ │ └── uniform_monkey_0.dmi
│ │ │ │ │ ├── r_farwa.dmi
│ │ │ │ │ ├── r_monkey.dmi
│ │ │ │ │ ├── r_neaera.dmi
│ │ │ │ │ ├── r_stok.dmi
│ │ │ │ │ └── r_yiren.dmi
│ │ │ │ ├── r_def_human.dmi
│ │ │ │ ├── r_goo_zed.dmi
│ │ │ │ ├── r_human.dmi
│ │ │ │ ├── r_predator.dmi
│ │ │ │ ├── r_skeleton.dmi
│ │ │ │ ├── r_spooker.dmi
│ │ │ │ ├── r_synthetic.dmi
│ │ │ │ ├── r_wy_combat_android.dmi
│ │ │ │ ├── r_zombie.dmi
│ │ │ │ └── synth_k9/
│ │ │ │ ├── onmob/
│ │ │ │ │ └── synth_k9_overlays.dmi
│ │ │ │ └── r_k9.dmi
│ │ │ ├── template.dmi
│ │ │ ├── undershirt.dmi
│ │ │ ├── underwear.dmi
│ │ │ └── yaut_hair.dmi
│ │ ├── map_backgrounds.dmi
│ │ ├── mob.dmi
│ │ ├── mob_64.dmi
│ │ ├── radial.dmi
│ │ ├── radial_tape.dmi
│ │ ├── radial_taperecorder.dmi
│ │ ├── robotic.dmi
│ │ ├── robots.dmi
│ │ ├── screen_alert.dmi
│ │ ├── screen_ghost.dmi
│ │ ├── xenonids/
│ │ │ ├── Effects.dmi
│ │ │ ├── castes/
│ │ │ │ ├── tier_0/
│ │ │ │ │ ├── larva.dmi
│ │ │ │ │ ├── lesser_drone.dmi
│ │ │ │ │ └── xenonid_crab.dmi
│ │ │ │ ├── tier_1/
│ │ │ │ │ ├── defender.dmi
│ │ │ │ │ ├── drone.dmi
│ │ │ │ │ ├── runner.dmi
│ │ │ │ │ └── sentinel.dmi
│ │ │ │ ├── tier_2/
│ │ │ │ │ ├── burrower.dmi
│ │ │ │ │ ├── carrier.dmi
│ │ │ │ │ ├── hivelord.dmi
│ │ │ │ │ ├── lurker.dmi
│ │ │ │ │ ├── spitter.dmi
│ │ │ │ │ └── warrior.dmi
│ │ │ │ ├── tier_3/
│ │ │ │ │ ├── boiler.dmi
│ │ │ │ │ ├── crusher.dmi
│ │ │ │ │ ├── praetorian.dmi
│ │ │ │ │ └── ravager.dmi
│ │ │ │ └── tier_4/
│ │ │ │ ├── ovipositor.dmi
│ │ │ │ └── queen.dmi
│ │ │ ├── fruits.dmi
│ │ │ ├── overlay_effects64x64.dmi
│ │ │ ├── structures.dmi
│ │ │ ├── structures48x48.dmi
│ │ │ ├── structures64x64.dmi
│ │ │ ├── weeds.dmi
│ │ │ └── wounds.dmi
│ │ └── xenos/
│ │ ├── ATTRIBUTION.txt
│ │ ├── castes/
│ │ │ ├── tier_0/
│ │ │ │ ├── facehugger.dmi
│ │ │ │ ├── larva.dmi
│ │ │ │ ├── lesser_drone.dmi
│ │ │ │ └── predalien_larva.dmi
│ │ │ ├── tier_1/
│ │ │ │ ├── defender.dmi
│ │ │ │ ├── drone.dmi
│ │ │ │ ├── drone_strain_overlays.dmi
│ │ │ │ ├── runner.dmi
│ │ │ │ ├── runner_strain_overlays.dmi
│ │ │ │ └── sentinel.dmi
│ │ │ ├── tier_2/
│ │ │ │ ├── burrower.dmi
│ │ │ │ ├── carrier.dmi
│ │ │ │ ├── hivelord.dmi
│ │ │ │ ├── lurker.dmi
│ │ │ │ ├── spitter.dmi
│ │ │ │ └── warrior.dmi
│ │ │ ├── tier_3/
│ │ │ │ ├── boiler.dmi
│ │ │ │ ├── crusher.dmi
│ │ │ │ ├── despoiler.dmi
│ │ │ │ ├── praetorian.dmi
│ │ │ │ └── ravager.dmi
│ │ │ └── tier_4/
│ │ │ ├── king.dmi
│ │ │ ├── ovipositor.dmi
│ │ │ ├── predalien.dmi
│ │ │ ├── queen.dmi
│ │ │ └── rogueking.dmi
│ │ ├── effects.dmi
│ │ ├── effects_xenoids.dmi
│ │ ├── fruits.dmi
│ │ ├── onmob/
│ │ │ ├── defender.dmi
│ │ │ ├── drone.dmi
│ │ │ ├── praetorian.dmi
│ │ │ ├── runner.dmi
│ │ │ ├── sentinel.dmi
│ │ │ ├── spitter.dmi
│ │ │ └── warrior.dmi
│ │ ├── overlay_effects64x64.dmi
│ │ ├── radial_xenos.dmi
│ │ ├── structures.dmi
│ │ ├── structures48x48.dmi
│ │ ├── structures64x64.dmi
│ │ ├── weeds.dmi
│ │ ├── weeds_48x48.dmi
│ │ └── weeds_64x64.dmi
│ ├── obj/
│ │ ├── apc.dmi
│ │ ├── bodybag.dmi
│ │ ├── flora/
│ │ │ └── tallgrass.dmi
│ │ ├── items/
│ │ │ ├── Marine_Research.dmi
│ │ │ ├── assemblies.dmi
│ │ │ ├── backpack_sprayers.dmi
│ │ │ ├── bedsheets.dmi
│ │ │ ├── binoculars.dmi
│ │ │ ├── black_goo_stuff.dmi
│ │ │ ├── bloodpack.dmi
│ │ │ ├── books.dmi
│ │ │ ├── candle.dmi
│ │ │ ├── card.dmi
│ │ │ ├── casings.dmi
│ │ │ ├── ceramic_plates.dmi
│ │ │ ├── chemistry.dmi
│ │ │ ├── circuitboards.dmi
│ │ │ ├── clothing/
│ │ │ │ ├── accessory/
│ │ │ │ │ ├── armbands.dmi
│ │ │ │ │ ├── inventory_overlays/
│ │ │ │ │ │ ├── armbands.dmi
│ │ │ │ │ │ ├── legpouch.dmi
│ │ │ │ │ │ ├── medals.dmi
│ │ │ │ │ │ ├── misc.dmi
│ │ │ │ │ │ ├── ponchos.dmi
│ │ │ │ │ │ ├── ranks.dmi
│ │ │ │ │ │ ├── ties.dmi
│ │ │ │ │ │ ├── webbings.dmi
│ │ │ │ │ │ └── yautja.dmi
│ │ │ │ │ ├── legpouch.dmi
│ │ │ │ │ ├── medals.dmi
│ │ │ │ │ ├── misc.dmi
│ │ │ │ │ ├── patches.dmi
│ │ │ │ │ ├── ponchos.dmi
│ │ │ │ │ ├── ranks.dmi
│ │ │ │ │ ├── ties.dmi
│ │ │ │ │ ├── watches.dmi
│ │ │ │ │ ├── webbings.dmi
│ │ │ │ │ └── wrist_accessories.dmi
│ │ │ │ ├── backpack/
│ │ │ │ │ ├── backpacks.dmi
│ │ │ │ │ ├── backpacks_by_faction/
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ ├── backpacks_by_map/
│ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ └── smartpack.dmi
│ │ │ │ ├── belts/
│ │ │ │ │ ├── belts.dmi
│ │ │ │ │ ├── belts_by_faction/
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ ├── belts_by_map/
│ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ ├── holstered_guns.dmi
│ │ │ │ │ └── misc.dmi
│ │ │ │ ├── glasses/
│ │ │ │ │ ├── glasses.dmi
│ │ │ │ │ ├── goggles.dmi
│ │ │ │ │ ├── huds.dmi
│ │ │ │ │ ├── misc.dmi
│ │ │ │ │ └── night_vision.dmi
│ │ │ │ ├── gloves.dmi
│ │ │ │ ├── halloween_clothes.dmi
│ │ │ │ ├── hats/
│ │ │ │ │ ├── berets.dmi
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ ├── formal_hats.dmi
│ │ │ │ │ ├── hardhats.dmi
│ │ │ │ │ ├── hats.dmi
│ │ │ │ │ ├── hats_by_faction/
│ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ ├── hats_by_map/
│ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ ├── hazard.dmi
│ │ │ │ │ ├── headbands.dmi
│ │ │ │ │ ├── misc_ert_colony.dmi
│ │ │ │ │ ├── overlays.dmi
│ │ │ │ │ ├── soft_caps.dmi
│ │ │ │ │ ├── surgical_caps.dmi
│ │ │ │ │ └── xeno_hats.dmi
│ │ │ │ ├── helmet_garb.dmi
│ │ │ │ ├── helmet_visors.dmi
│ │ │ │ ├── masks/
│ │ │ │ │ ├── balaclava.dmi
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ ├── gasmasks.dmi
│ │ │ │ │ ├── masks.dmi
│ │ │ │ │ ├── masks_by_faction/
│ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ └── scarves.dmi
│ │ │ │ ├── pouches.dmi
│ │ │ │ ├── shoes.dmi
│ │ │ │ ├── suits/
│ │ │ │ │ ├── armor.dmi
│ │ │ │ │ ├── coats_robes.dmi
│ │ │ │ │ ├── donator.dmi
│ │ │ │ │ ├── halloween.dmi
│ │ │ │ │ ├── hazard.dmi
│ │ │ │ │ ├── jackets.dmi
│ │ │ │ │ ├── misc_ert.dmi
│ │ │ │ │ ├── suits_by_faction/
│ │ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ │ ├── UA.dmi
│ │ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ │ └── WY.dmi
│ │ │ │ │ ├── suits_by_map/
│ │ │ │ │ │ ├── classic.dmi
│ │ │ │ │ │ ├── desert.dmi
│ │ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ │ ├── snow.dmi
│ │ │ │ │ │ └── urban.dmi
│ │ │ │ │ ├── vests_aprons.dmi
│ │ │ │ │ ├── windbreakers.dmi
│ │ │ │ │ └── xeno_suits.dmi
│ │ │ │ └── uniforms/
│ │ │ │ ├── donator.dmi
│ │ │ │ ├── formal_uniforms.dmi
│ │ │ │ ├── jumpsuits.dmi
│ │ │ │ ├── misc_ert_colony.dmi
│ │ │ │ ├── synthetic_uniforms.dmi
│ │ │ │ ├── underwear_uniforms.dmi
│ │ │ │ ├── uniforms_by_department/
│ │ │ │ │ ├── cargo.dmi
│ │ │ │ │ ├── engineering.dmi
│ │ │ │ │ ├── medical.dmi
│ │ │ │ │ ├── research.dmi
│ │ │ │ │ ├── security.dmi
│ │ │ │ │ └── service.dmi
│ │ │ │ ├── uniforms_by_faction/
│ │ │ │ │ ├── CLF.dmi
│ │ │ │ │ ├── CMB.dmi
│ │ │ │ │ ├── SEEGSON.dmi
│ │ │ │ │ ├── TWE.dmi
│ │ │ │ │ ├── UA.dmi
│ │ │ │ │ ├── UPP.dmi
│ │ │ │ │ └── WY.dmi
│ │ │ │ ├── uniforms_by_map/
│ │ │ │ │ ├── classic.dmi
│ │ │ │ │ ├── desert.dmi
│ │ │ │ │ ├── jungle.dmi
│ │ │ │ │ ├── snow.dmi
│ │ │ │ │ └── urban.dmi
│ │ │ │ └── workwear.dmi
│ │ │ ├── cpr_dummy.dmi
│ │ │ ├── devices.dmi
│ │ │ ├── dice.dmi
│ │ │ ├── disk.dmi
│ │ │ ├── economy.dmi
│ │ │ ├── fishing_atoms.dmi
│ │ │ ├── floor_tiles.dmi
│ │ │ ├── food/
│ │ │ │ ├── bakery.dmi
│ │ │ │ ├── bread.dmi
│ │ │ │ ├── burgers.dmi
│ │ │ │ ├── cakes.dmi
│ │ │ │ ├── candies.dmi
│ │ │ │ ├── cheese.dmi
│ │ │ │ ├── condiments.dmi
│ │ │ │ ├── dishes.dmi
│ │ │ │ ├── donuts.dmi
│ │ │ │ ├── drinkcans.dmi
│ │ │ │ ├── drinks.dmi
│ │ │ │ ├── eggs.dmi
│ │ │ │ ├── fish.dmi
│ │ │ │ ├── food_ingredients.dmi
│ │ │ │ ├── junkfood.dmi
│ │ │ │ ├── meat.dmi
│ │ │ │ ├── monkeycubes.dmi
│ │ │ │ ├── mre_food/
│ │ │ │ │ ├── clf.dmi
│ │ │ │ │ ├── merc.dmi
│ │ │ │ │ ├── twe.dmi
│ │ │ │ │ ├── upp.dmi
│ │ │ │ │ ├── uscm.dmi
│ │ │ │ │ └── wy.dmi
│ │ │ │ ├── pizza.dmi
│ │ │ │ ├── slices.dmi
│ │ │ │ ├── soups_salads.dmi
│ │ │ │ └── trays.dmi
│ │ │ ├── gifts.dmi
│ │ │ ├── harvest.dmi
│ │ │ ├── hunter/
│ │ │ │ ├── badblood_gear.dmi
│ │ │ │ ├── bow.dmi
│ │ │ │ ├── mcaste_gear.dmi
│ │ │ │ ├── pred_armor.dmi
│ │ │ │ ├── pred_bracers.dmi
│ │ │ │ ├── pred_gear.dmi
│ │ │ │ ├── pred_mask.dmi
│ │ │ │ ├── pred_mask_accessories.dmi
│ │ │ │ ├── pred_shoes.dmi
│ │ │ │ ├── pred_vendor.dmi
│ │ │ │ ├── prey_items.dmi
│ │ │ │ └── thrall_gear.dmi
│ │ │ ├── inflatable.dmi
│ │ │ ├── kitchen_tools.dmi
│ │ │ ├── lighting.dmi
│ │ │ ├── marine-items.dmi
│ │ │ ├── marine-items_christmas.dmi
│ │ │ ├── medical_stacks.dmi
│ │ │ ├── medical_tools.dmi
│ │ │ ├── new_assemblies.dmi
│ │ │ ├── organs.dmi
│ │ │ ├── paint.dmi
│ │ │ ├── pamphlets.dmi
│ │ │ ├── paper.dmi
│ │ │ ├── pizza_galaxy_pizza.dmi
│ │ │ ├── playing_cards.dmi
│ │ │ ├── radio.dmi
│ │ │ ├── reagentfillings.dmi
│ │ │ ├── robot_component.dmi
│ │ │ ├── robot_parts.dmi
│ │ │ ├── security.dmi
│ │ │ ├── seeds.dmi
│ │ │ ├── shards.dmi
│ │ │ ├── skeleton.dmi
│ │ │ ├── smoking/
│ │ │ │ ├── ashtray.dmi
│ │ │ │ ├── cigarettes.dmi
│ │ │ │ ├── cigars.dmi
│ │ │ │ ├── lighters.dmi
│ │ │ │ ├── matches.dmi
│ │ │ │ ├── packets/
│ │ │ │ │ ├── arcturian_ace.dmi
│ │ │ │ │ ├── balaji_imperials.dmi
│ │ │ │ │ ├── balaji_imperials_mini.dmi
│ │ │ │ │ ├── executive_selec_mini.dmi
│ │ │ │ │ ├── executive_select.dmi
│ │ │ │ │ ├── executive_select_mini.dmi
│ │ │ │ │ ├── koorlander.dmi
│ │ │ │ │ ├── lady_fingers.dmi
│ │ │ │ │ ├── lucky_strike.dmi
│ │ │ │ │ ├── lucky_strike_mini.dmi
│ │ │ │ │ ├── normal.dmi
│ │ │ │ │ ├── spirits_cyan.dmi
│ │ │ │ │ ├── spirits_yellow.dmi
│ │ │ │ │ ├── trading_card.dmi
│ │ │ │ │ ├── wy_gold.dmi
│ │ │ │ │ └── wy_gold_mini.dmi
│ │ │ │ └── pipes.dmi
│ │ │ ├── spray.dmi
│ │ │ ├── stacks.dmi
│ │ │ ├── stock_parts.dmi
│ │ │ ├── storage/
│ │ │ │ ├── bags.dmi
│ │ │ │ ├── boxes.dmi
│ │ │ │ ├── briefcases.dmi
│ │ │ │ ├── holsters.dmi
│ │ │ │ ├── kits.dmi
│ │ │ │ ├── medical.dmi
│ │ │ │ ├── mre.dmi
│ │ │ │ ├── packets.dmi
│ │ │ │ └── toolbox.dmi
│ │ │ ├── surgery_tools.dmi
│ │ │ ├── synth/
│ │ │ │ ├── synth_reset_key.dmi
│ │ │ │ └── wj_pda.dmi
│ │ │ ├── syringe.dmi
│ │ │ ├── table_decorations.dmi
│ │ │ ├── table_parts.dmi
│ │ │ ├── tank.dmi
│ │ │ ├── tools.dmi
│ │ │ ├── toy.dmi
│ │ │ ├── trash.dmi
│ │ │ ├── vialbox.dmi
│ │ │ ├── walkman.dmi
│ │ │ └── weapons/
│ │ │ ├── grenade.dmi
│ │ │ ├── guns/
│ │ │ │ ├── ammo_boxes/
│ │ │ │ │ ├── boxes_and_lids.dmi
│ │ │ │ │ ├── handfuls.dmi
│ │ │ │ │ ├── magazines.dmi
│ │ │ │ │ ├── misc.dmi
│ │ │ │ │ └── text.dmi
│ │ │ │ ├── ammo_by_faction/
│ │ │ │ │ ├── TWE/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── UPP/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── rocket_launchers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ ├── smgs.dmi
│ │ │ │ │ │ └── turrets.dmi
│ │ │ │ │ ├── USCM/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── grenade_launchers.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── rocket_launchers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ ├── smgs.dmi
│ │ │ │ │ │ ├── turrets.dmi
│ │ │ │ │ │ └── vehicles.dmi
│ │ │ │ │ ├── WY/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── turrets.dmi
│ │ │ │ │ ├── colony/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── nailguns.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── event.dmi
│ │ │ │ │ └── pred.dmi
│ │ │ │ ├── attachments/
│ │ │ │ │ ├── barrel.dmi
│ │ │ │ │ ├── rail.dmi
│ │ │ │ │ ├── stock.dmi
│ │ │ │ │ └── under.dmi
│ │ │ │ ├── guns_by_faction/
│ │ │ │ │ ├── TWE/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── UPP/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── hmg.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── rocket_launchers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── USCM/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── energy_weapons.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── grenade_launchers.dmi
│ │ │ │ │ │ ├── hmg.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── rocket_launchers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── WY/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── colony/
│ │ │ │ │ │ ├── assault_rifles.dmi
│ │ │ │ │ │ ├── energy_weapons.dmi
│ │ │ │ │ │ ├── flamers.dmi
│ │ │ │ │ │ ├── grenade_launchers.dmi
│ │ │ │ │ │ ├── machineguns.dmi
│ │ │ │ │ │ ├── marksman_rifles.dmi
│ │ │ │ │ │ ├── nailguns.dmi
│ │ │ │ │ │ ├── pistols.dmi
│ │ │ │ │ │ ├── revolvers.dmi
│ │ │ │ │ │ ├── shotguns.dmi
│ │ │ │ │ │ └── smgs.dmi
│ │ │ │ │ ├── event.dmi
│ │ │ │ │ └── pred.dmi
│ │ │ │ ├── guns_by_map/
│ │ │ │ │ ├── classic/
│ │ │ │ │ │ ├── back.dmi
│ │ │ │ │ │ ├── guns_lefthand.dmi
│ │ │ │ │ │ ├── guns_lefthand_x64.dmi
│ │ │ │ │ │ ├── guns_obj.dmi
│ │ │ │ │ │ ├── guns_righthand.dmi
│ │ │ │ │ │ ├── guns_righthand_x64.dmi
│ │ │ │ │ │ └── suit_slot.dmi
│ │ │ │ │ ├── desert/
│ │ │ │ │ │ ├── back.dmi
│ │ │ │ │ │ ├── guns_lefthand.dmi
│ │ │ │ │ │ ├── guns_lefthand_x64.dmi
│ │ │ │ │ │ ├── guns_obj.dmi
│ │ │ │ │ │ ├── guns_righthand.dmi
│ │ │ │ │ │ ├── guns_righthand_x64.dmi
│ │ │ │ │ │ └── suit_slot.dmi
│ │ │ │ │ ├── jungle/
│ │ │ │ │ │ ├── back.dmi
│ │ │ │ │ │ ├── guns_lefthand.dmi
│ │ │ │ │ │ ├── guns_lefthand_x64.dmi
│ │ │ │ │ │ ├── guns_obj.dmi
│ │ │ │ │ │ ├── guns_righthand.dmi
│ │ │ │ │ │ ├── guns_righthand_x64.dmi
│ │ │ │ │ │ └── suit_slot.dmi
│ │ │ │ │ ├── snow/
│ │ │ │ │ │ ├── back.dmi
│ │ │ │ │ │ ├── guns_lefthand.dmi
│ │ │ │ │ │ ├── guns_lefthand_x64.dmi
│ │ │ │ │ │ ├── guns_obj.dmi
│ │ │ │ │ │ ├── guns_righthand.dmi
│ │ │ │ │ │ ├── guns_righthand_x64.dmi
│ │ │ │ │ │ └── suit_slot.dmi
│ │ │ │ │ └── urban/
│ │ │ │ │ ├── back.dmi
│ │ │ │ │ ├── guns_lefthand.dmi
│ │ │ │ │ ├── guns_lefthand_x64.dmi
│ │ │ │ │ ├── guns_obj.dmi
│ │ │ │ │ ├── guns_righthand.dmi
│ │ │ │ │ ├── guns_righthand_x64.dmi
│ │ │ │ │ └── suit_slot.dmi
│ │ │ │ ├── handful.dmi
│ │ │ │ ├── lineart.dmi
│ │ │ │ └── lineart_modes.dmi
│ │ │ ├── melee/
│ │ │ │ ├── axes.dmi
│ │ │ │ ├── canes.dmi
│ │ │ │ ├── energy.dmi
│ │ │ │ ├── hammers.dmi
│ │ │ │ ├── knives.dmi
│ │ │ │ ├── misc.dmi
│ │ │ │ ├── misc_64.dmi
│ │ │ │ ├── non_lethal.dmi
│ │ │ │ ├── shields.dmi
│ │ │ │ ├── spears.dmi
│ │ │ │ └── swords.dmi
│ │ │ └── projectiles.dmi
│ │ ├── janitor.dmi
│ │ ├── pipes/
│ │ │ ├── connector.dmi
│ │ │ ├── digital_tvalve.dmi
│ │ │ ├── digital_valve.dmi
│ │ │ ├── disposal.dmi
│ │ │ ├── filter.dmi
│ │ │ ├── heat.dmi
│ │ │ ├── heat_exchanger.dmi
│ │ │ ├── injector.dmi
│ │ │ ├── junction.dmi
│ │ │ ├── manifold.dmi
│ │ │ ├── mixer.dmi
│ │ │ ├── omni_devices.dmi
│ │ │ ├── outlet_injector.dmi
│ │ │ ├── passive_gate.dmi
│ │ │ ├── pipe_item.dmi
│ │ │ ├── pipe_underlays.dmi
│ │ │ ├── pipe_vent.dmi
│ │ │ ├── pipes.dmi
│ │ │ ├── pipes2.dmi
│ │ │ ├── pipes3.dmi
│ │ │ ├── pipeturbine.dmi
│ │ │ ├── power_cond_heavy.dmi
│ │ │ ├── power_cond_white.dmi
│ │ │ ├── power_local.dmi
│ │ │ ├── pump.dmi
│ │ │ ├── red_pipe.dmi
│ │ │ ├── regular.dmi
│ │ │ ├── tank.dmi
│ │ │ ├── transit_tube.dmi
│ │ │ ├── transit_tube_pod.dmi
│ │ │ ├── transit_tube_station.dmi
│ │ │ ├── tvalve.dmi
│ │ │ ├── valve.dmi
│ │ │ ├── vent_pump.dmi
│ │ │ ├── vent_pump_hybrisa.dmi
│ │ │ ├── vent_scrubber.dmi
│ │ │ └── volume_pump.dmi
│ │ ├── resin_objects.dmi
│ │ ├── rune.dmi
│ │ ├── structures/
│ │ │ ├── alien/
│ │ │ │ ├── structures.dmi
│ │ │ │ ├── structures64x64.dmi
│ │ │ │ ├── structures96x96.dmi
│ │ │ │ └── xenoKingHatchery.dmi
│ │ │ ├── barrels.dmi
│ │ │ ├── barricades.dmi
│ │ │ ├── barricades_christmas.dmi
│ │ │ ├── bonfire.dmi
│ │ │ ├── bookshelf.dmi
│ │ │ ├── closet.dmi
│ │ │ ├── crates.dmi
│ │ │ ├── doors/
│ │ │ │ ├── 1x2blast_hor.dmi
│ │ │ │ ├── 1x2blast_vert.dmi
│ │ │ │ ├── 1x4blast_hor.dmi
│ │ │ │ ├── 1x4blast_hor_secure.dmi
│ │ │ │ ├── 1x4blast_vert.dmi
│ │ │ │ ├── 1x4blast_vert_secure.dmi
│ │ │ │ ├── 2x1almayerdoor.dmi
│ │ │ │ ├── 2x1almayerdoor_glass.dmi
│ │ │ │ ├── 2x1comdoor.dmi
│ │ │ │ ├── 2x1comdoor_solid.dmi
│ │ │ │ ├── 2x1engidoor.dmi
│ │ │ │ ├── 2x1engidoor_glass.dmi
│ │ │ │ ├── 2x1generic.dmi
│ │ │ │ ├── 2x1generic_solid.dmi
│ │ │ │ ├── 2x1maintdoor.dmi
│ │ │ │ ├── 2x1medidoor.dmi
│ │ │ │ ├── 2x1medidoor_solid.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
│ │ │ │ ├── 4x1_elevator.dmi
│ │ │ │ ├── 4x1_elevator_access.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
│ │ │ │ ├── Doorbananium.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
│ │ │ │ ├── airlock_assembly.dmi
│ │ │ │ ├── airlock_assembly2x1.dmi
│ │ │ │ ├── almayerblastdoor.dmi
│ │ │ │ ├── almayerdoor.dmi
│ │ │ │ ├── almayerdoor_glass.dmi
│ │ │ │ ├── blastdoors_shutters.dmi
│ │ │ │ ├── celldoor.dmi
│ │ │ │ ├── comdoor.dmi
│ │ │ │ ├── door_black.dmi
│ │ │ │ ├── door_fire2.dmi
│ │ │ │ ├── door_marines.dmi
│ │ │ │ ├── doormed.dmi
│ │ │ │ ├── doormedglass.dmi
│ │ │ │ ├── doormorgue.dmi
│ │ │ │ ├── doorresearch.dmi
│ │ │ │ ├── doorresearchglass.dmi
│ │ │ │ ├── doorsci.dmi
│ │ │ │ ├── doorsciglass.dmi
│ │ │ │ ├── dropship1_cargo.dmi
│ │ │ │ ├── dropship1_pilot.dmi
│ │ │ │ ├── dropship1_side.dmi
│ │ │ │ ├── dropship1_side2.dmi
│ │ │ │ ├── dropship2_cargo.dmi
│ │ │ │ ├── dropship2_pilot.dmi
│ │ │ │ ├── dropship2_side.dmi
│ │ │ │ ├── dropship2_side2.dmi
│ │ │ │ ├── dropship3_cargo.dmi
│ │ │ │ ├── dropship3_pilot.dmi
│ │ │ │ ├── dropship3_side.dmi
│ │ │ │ ├── dropship3_side2.dmi
│ │ │ │ ├── dropship_upp_cargo.dmi
│ │ │ │ ├── dropship_upp_pilot.dmi
│ │ │ │ ├── dropship_upp_side2.dmi
│ │ │ │ ├── edge_Doorfire.dmi
│ │ │ │ ├── engidoor.dmi
│ │ │ │ ├── engidoor_glass.dmi
│ │ │ │ ├── escapepoddoor_black.dmi
│ │ │ │ ├── escapepoddoor_white.dmi
│ │ │ │ ├── escapepoddoor_yellow.dmi
│ │ │ │ ├── hightechsecurity.dmi
│ │ │ │ ├── hunter/
│ │ │ │ │ ├── ancient_temple_door.dmi
│ │ │ │ │ ├── colorable_ancient_temple_door.dmi
│ │ │ │ │ ├── hunter_door.dmi
│ │ │ │ │ └── hunter_shutter.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
│ │ │ │ ├── hybrisashutters.dmi
│ │ │ │ ├── lifeboatdoors.dmi
│ │ │ │ ├── maintdoor.dmi
│ │ │ │ ├── medidoor.dmi
│ │ │ │ ├── medidoor_glass.dmi
│ │ │ │ ├── mineral_doors.dmi
│ │ │ │ ├── personaldoor.dmi
│ │ │ │ ├── personaldoor_glass.dmi
│ │ │ │ ├── pod_doors.dmi
│ │ │ │ ├── prepdoor.dmi
│ │ │ │ ├── prepdoor_alpha.dmi
│ │ │ │ ├── prepdoor_bravo.dmi
│ │ │ │ ├── prepdoor_charlie.dmi
│ │ │ │ ├── prepdoor_delta.dmi
│ │ │ │ ├── prison_FOP/
│ │ │ │ │ └── prison_hatches.dmi
│ │ │ │ ├── purinadoor.dmi
│ │ │ │ ├── railing.dmi
│ │ │ │ ├── rapid_pdoor.dmi
│ │ │ │ ├── rusted_door.dmi
│ │ │ │ ├── rusted_door_window.dmi
│ │ │ │ ├── rusted_door_windowsmall.dmi
│ │ │ │ ├── secdoor.dmi
│ │ │ │ ├── secdoor_glass.dmi
│ │ │ │ ├── securedoor.dmi
│ │ │ │ ├── strata/
│ │ │ │ │ ├── strata_doors.dmi
│ │ │ │ │ ├── strata_maint.dmi
│ │ │ │ │ ├── strata_mining.dmi
│ │ │ │ │ └── strata_sec.dmi
│ │ │ │ ├── upp/
│ │ │ │ │ ├── upp_2x1engdoor_glass.dmi
│ │ │ │ │ ├── upp_2x1enggreendoor.dmi
│ │ │ │ │ ├── upp_2x1greendoor.dmi
│ │ │ │ │ ├── upp_2x1greendoor_glass.dmi
│ │ │ │ │ ├── upp_2x1medigreendoor.dmi
│ │ │ │ │ ├── upp_2x1medigreendoor_glass.dmi
│ │ │ │ │ ├── upp_2x1reqgreendoor.dmi
│ │ │ │ │ ├── upp_2x1reqgreendoor_glass.dmi
│ │ │ │ │ ├── upp_2x1secgreendoor.dmi
│ │ │ │ │ ├── upp_2x1secgreendoor_glass.dmi
│ │ │ │ │ ├── upp_commandgreendoor.dmi
│ │ │ │ │ ├── upp_commandgreendoor_glass.dmi
│ │ │ │ │ ├── upp_engigreendoor.dmi
│ │ │ │ │ ├── upp_engigreendoor_glass.dmi
│ │ │ │ │ ├── upp_greendoor.dmi
│ │ │ │ │ ├── upp_greendoor_glass.dmi
│ │ │ │ │ ├── upp_medigreendoor.dmi
│ │ │ │ │ ├── upp_medigreendoor_glass.dmi
│ │ │ │ │ ├── upp_reqgreendoor.dmi
│ │ │ │ │ ├── upp_reqgreendoor_glass.dmi
│ │ │ │ │ ├── upp_secgreendoor.dmi
│ │ │ │ │ └── upp_secgreendoor_glass.dmi
│ │ │ │ ├── vault.dmi
│ │ │ │ ├── white_rusted_solid.dmi
│ │ │ │ └── windoor.dmi
│ │ │ ├── droppod_32x64.dmi
│ │ │ ├── droppod_64x64.dmi
│ │ │ ├── fishing.dmi
│ │ │ ├── flasher.dmi
│ │ │ ├── handrail.dmi
│ │ │ ├── kegs.dmi
│ │ │ ├── ladders.dmi
│ │ │ ├── liquid_tanks.dmi
│ │ │ ├── machinery/
│ │ │ │ ├── ai.dmi
│ │ │ │ ├── aibots.dmi
│ │ │ │ ├── airlock_machines.dmi
│ │ │ │ ├── apc.dmi
│ │ │ │ ├── ares.dmi
│ │ │ │ ├── artillery.dmi
│ │ │ │ ├── atmos.dmi
│ │ │ │ ├── autolathe.dmi
│ │ │ │ ├── big_floodlight.dmi
│ │ │ │ ├── biogenerator.dmi
│ │ │ │ ├── bolt_target.dmi
│ │ │ │ ├── bolt_terminal.dmi
│ │ │ │ ├── coffee_machine.dmi
│ │ │ │ ├── comm_tower.dmi
│ │ │ │ ├── comm_tower2.dmi
│ │ │ │ ├── comm_tower3.dmi
│ │ │ │ ├── computer.dmi
│ │ │ │ ├── computer3.dmi
│ │ │ │ ├── cryogenics.dmi
│ │ │ │ ├── cryogenics2.dmi
│ │ │ │ ├── defenses/
│ │ │ │ │ ├── bell_tower.dmi
│ │ │ │ │ ├── clf_defenses.dmi
│ │ │ │ │ ├── flamer.dmi
│ │ │ │ │ ├── planted_flag.dmi
│ │ │ │ │ ├── sentry.dmi
│ │ │ │ │ ├── tesla.dmi
│ │ │ │ │ ├── unused.dmi
│ │ │ │ │ ├── upp_defenses.dmi
│ │ │ │ │ ├── wy_defenses.dmi
│ │ │ │ │ ├── wy_heavy.dmi
│ │ │ │ │ └── wy_static.dmi
│ │ │ │ ├── drone_fab.dmi
│ │ │ │ ├── filtration.dmi
│ │ │ │ ├── floodlight.dmi
│ │ │ │ ├── fuelpump.dmi
│ │ │ │ ├── fusion_eng.dmi
│ │ │ │ ├── geothermal.dmi
│ │ │ │ ├── holosign.dmi
│ │ │ │ ├── hydroponics.dmi
│ │ │ │ ├── iv_drip.dmi
│ │ │ │ ├── kitchen.dmi
│ │ │ │ ├── library.dmi
│ │ │ │ ├── lifeboat.dmi
│ │ │ │ ├── loudspeaker.dmi
│ │ │ │ ├── meter.dmi
│ │ │ │ ├── monitors.dmi
│ │ │ │ ├── motion_sensor_v2.dmi
│ │ │ │ ├── nuclearbomb.dmi
│ │ │ │ ├── power.dmi
│ │ │ │ ├── recycling.dmi
│ │ │ │ ├── research.dmi
│ │ │ │ ├── robotics.dmi
│ │ │ │ ├── science_machines.dmi
│ │ │ │ ├── science_machines_64x32.dmi
│ │ │ │ ├── scoreboard.dmi
│ │ │ │ ├── self_destruct.dmi
│ │ │ │ ├── shuttle-parts.dmi
│ │ │ │ ├── status_display.dmi
│ │ │ │ ├── stock_parts.dmi
│ │ │ │ ├── suitstorage.dmi
│ │ │ │ ├── surgery.dmi
│ │ │ │ ├── synth_charger.dmi
│ │ │ │ ├── terminals.dmi
│ │ │ │ ├── vending.dmi
│ │ │ │ ├── vending_64x32.dmi
│ │ │ │ ├── virology.dmi
│ │ │ │ ├── washing_machine.dmi
│ │ │ │ └── yautja_machines.dmi
│ │ │ ├── marine_closet.dmi
│ │ │ ├── mememower.dmi
│ │ │ ├── minecart.dmi
│ │ │ ├── morgue.dmi
│ │ │ ├── mortar.dmi
│ │ │ ├── phone.dmi
│ │ │ ├── plantable_flag.dmi
│ │ │ ├── props/
│ │ │ │ ├── 64x64.dmi
│ │ │ │ ├── 64x64_bodybag_pile.dmi
│ │ │ │ ├── alien_autopsy.dmi
│ │ │ │ ├── almayer/
│ │ │ │ │ ├── almayer_props.dmi
│ │ │ │ │ ├── almayer_props64.dmi
│ │ │ │ │ └── almayer_props96.dmi
│ │ │ │ ├── atm.dmi
│ │ │ │ ├── cash_register.dmi
│ │ │ │ ├── containers/
│ │ │ │ │ ├── contain.dmi
│ │ │ │ │ ├── containHorizont.dmi
│ │ │ │ │ └── containersextended.dmi
│ │ │ │ ├── curtain.dmi
│ │ │ │ ├── digger.dmi
│ │ │ │ ├── dropship/
│ │ │ │ │ ├── dropship_ammo.dmi
│ │ │ │ │ ├── dropship_ammo64.dmi
│ │ │ │ │ ├── dropship_equipment.dmi
│ │ │ │ │ ├── dropship_equipment64.dmi
│ │ │ │ │ └── dropshipdamage.dmi
│ │ │ │ ├── engineers/
│ │ │ │ │ ├── consoles.dmi
│ │ │ │ │ ├── engineerJockey.dmi
│ │ │ │ │ ├── engineerPod.dmi
│ │ │ │ │ ├── hybrisaengineerpillarangled.dmi
│ │ │ │ │ ├── light.dmi
│ │ │ │ │ └── props.dmi
│ │ │ │ ├── fences/
│ │ │ │ │ ├── dark_fence.dmi
│ │ │ │ │ ├── dark_fence_alt.dmi
│ │ │ │ │ ├── dark_fence_alt_door.dmi
│ │ │ │ │ ├── electric_fence.dmi
│ │ │ │ │ ├── electric_fence_alt.dmi
│ │ │ │ │ ├── electric_fence_alt_door.dmi
│ │ │ │ │ ├── fence.dmi
│ │ │ │ │ ├── fence_alt.dmi
│ │ │ │ │ ├── fence_alt_door.dmi
│ │ │ │ │ ├── overgrown_dark_fence.dmi
│ │ │ │ │ ├── overgrown_electric_fence.dmi
│ │ │ │ │ ├── overgrown_fence.dmi
│ │ │ │ │ ├── upp_fence.dmi
│ │ │ │ │ └── upp_fence_door.dmi
│ │ │ │ ├── furniture/
│ │ │ │ │ ├── chairs.dmi
│ │ │ │ │ ├── clock.dmi
│ │ │ │ │ ├── crosses.dmi
│ │ │ │ │ ├── display_case.dmi
│ │ │ │ │ ├── misc.dmi
│ │ │ │ │ ├── musician.dmi
│ │ │ │ │ ├── noticeboard.dmi
│ │ │ │ │ ├── slot_machines.dmi
│ │ │ │ │ └── torii.dmi
│ │ │ │ ├── gigadrill.dmi
│ │ │ │ ├── holiday_props.dmi
│ │ │ │ ├── hunter/
│ │ │ │ │ ├── 32x32_hunter_props.dmi
│ │ │ │ │ ├── ancientbrazier.dmi
│ │ │ │ │ ├── ancientsatuebase.dmi
│ │ │ │ │ ├── ancientsmallstatue.dmi
│ │ │ │ │ ├── ancientstatue.dmi
│ │ │ │ │ ├── rubble.dmi
│ │ │ │ │ └── sarcophagus.dmi
│ │ │ │ ├── hybrisa/
│ │ │ │ │ ├── 64x64_props.dmi
│ │ │ │ │ ├── 64x96-props.dmi
│ │ │ │ │ ├── computers.dmi
│ │ │ │ │ ├── grates.dmi
│ │ │ │ │ ├── hybrisaxenocryogenics.dmi
│ │ │ │ │ ├── misc_props.dmi
│ │ │ │ │ ├── piping_wiring.dmi
│ │ │ │ │ ├── platforms.dmi
│ │ │ │ │ ├── souto.dmi
│ │ │ │ │ ├── trash_bins.dmi
│ │ │ │ │ └── wall_egg.dmi
│ │ │ │ ├── ice_colony/
│ │ │ │ │ ├── Hula.dmi
│ │ │ │ │ ├── Tiger_Rugs.dmi
│ │ │ │ │ ├── barrel_yard.dmi
│ │ │ │ │ ├── fabs_64.dmi
│ │ │ │ │ ├── fabs_greebles.dmi
│ │ │ │ │ ├── fabs_tileset.dmi
│ │ │ │ │ └── props.dmi
│ │ │ │ ├── industrial/
│ │ │ │ │ ├── 32x64.dmi
│ │ │ │ │ ├── 64x128.dmi
│ │ │ │ │ ├── 64x96.dmi
│ │ │ │ │ ├── 96x96.dmi
│ │ │ │ │ ├── biomass_turbine.dmi
│ │ │ │ │ ├── coagulation_arm.dmi
│ │ │ │ │ ├── drill.dmi
│ │ │ │ │ ├── factory.dmi
│ │ │ │ │ ├── flacculation_arm.dmi
│ │ │ │ │ ├── generic_props.dmi
│ │ │ │ │ ├── hybrisa_lattice.dmi
│ │ │ │ │ ├── illuminator.dmi
│ │ │ │ │ ├── overhead_ducting.dmi
│ │ │ │ │ ├── pipes.dmi
│ │ │ │ │ ├── power_transformer.dmi
│ │ │ │ │ ├── traffic_signal.dmi
│ │ │ │ │ └── watchtower.dmi
│ │ │ │ ├── landing_signs.dmi
│ │ │ │ ├── landinglights.dmi
│ │ │ │ ├── large_tent_props.dmi
│ │ │ │ ├── mech.dmi
│ │ │ │ ├── mining.dmi
│ │ │ │ ├── natural/
│ │ │ │ │ ├── boulder_large.dmi
│ │ │ │ │ ├── boulder_largedark.dmi
│ │ │ │ │ ├── boulder_small.dmi
│ │ │ │ │ ├── boulder_wide.dmi
│ │ │ │ │ ├── boulder_widedark.dmi
│ │ │ │ │ ├── rocks.dmi
│ │ │ │ │ └── vegetation/
│ │ │ │ │ ├── ausflora.dmi
│ │ │ │ │ ├── colorable_junge_bush.dmi
│ │ │ │ │ ├── dam.dmi
│ │ │ │ │ ├── deadtrees.dmi
│ │ │ │ │ ├── ground_map64.dmi
│ │ │ │ │ ├── joshuatree.dmi
│ │ │ │ │ ├── jungleplants.dmi
│ │ │ │ │ ├── pinetrees.dmi
│ │ │ │ │ ├── plants.dmi
│ │ │ │ │ ├── snowflora.dmi
│ │ │ │ │ ├── tallgrass.dmi
│ │ │ │ │ ├── temperate_flora.dmi
│ │ │ │ │ ├── tyrargo_dead_trees.dmi
│ │ │ │ │ ├── tyrargo_pine_tree.dmi
│ │ │ │ │ └── tyrargo_wood_flora.dmi
│ │ │ │ ├── phonebox.dmi
│ │ │ │ ├── platforms.dmi
│ │ │ │ ├── props.dmi
│ │ │ │ ├── sentry_holder_wy.dmi
│ │ │ │ ├── sentrycomp.dmi
│ │ │ │ ├── server_equipment.dmi
│ │ │ │ ├── singularity.dmi
│ │ │ │ ├── smoothlattice.dmi
│ │ │ │ ├── static_defence_prop.dmi
│ │ │ │ ├── stationobjs.dmi
│ │ │ │ ├── streetlights.dmi
│ │ │ │ ├── supermart.dmi
│ │ │ │ ├── target_dummies.dmi
│ │ │ │ ├── tyrargo_props.dmi
│ │ │ │ ├── vehicles/
│ │ │ │ │ ├── ambulance.dmi
│ │ │ │ │ ├── armored_truck_blue.dmi
│ │ │ │ │ ├── armored_truck_teal.dmi
│ │ │ │ │ ├── armored_truck_trr.dmi
│ │ │ │ │ ├── armored_truck_white.dmi
│ │ │ │ │ ├── armored_truck_wy_black.dmi
│ │ │ │ │ ├── armored_truck_wy_white.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
│ │ │ │ │ ├── car_pileup.dmi
│ │ │ │ │ ├── crawler_bed.dmi
│ │ │ │ │ ├── crawler_wy_1.dmi
│ │ │ │ │ ├── crawler_wy_2.dmi
│ │ │ │ │ ├── long_truck_blue.dmi
│ │ │ │ │ ├── long_truck_brown.dmi
│ │ │ │ │ ├── long_truck_donk.dmi
│ │ │ │ │ ├── long_truck_kelland.dmi
│ │ │ │ │ ├── long_truck_red.dmi
│ │ │ │ │ ├── long_truck_wy_black.dmi
│ │ │ │ │ ├── long_truck_wy_blue.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_shell.dmi
│ │ │ │ │ ├── meridian_taxi.dmi
│ │ │ │ │ ├── meridian_turquoise.dmi
│ │ │ │ │ ├── meridian_wy.dmi
│ │ │ │ │ ├── mining_crawler.dmi
│ │ │ │ │ ├── mining_crawler_fuel.dmi
│ │ │ │ │ ├── small_truck_blue.dmi
│ │ │ │ │ ├── small_truck_blue_cargo.dmi
│ │ │ │ │ ├── small_truck_brown.dmi
│ │ │ │ │ ├── small_truck_brown_cargo.dmi
│ │ │ │ │ ├── small_truck_brown_cargobarrels.dmi
│ │ │ │ │ ├── small_truck_garbage.dmi
│ │ │ │ │ ├── small_truck_green.dmi
│ │ │ │ │ ├── small_truck_medical.dmi
│ │ │ │ │ ├── small_truck_mining.dmi
│ │ │ │ │ ├── small_truck_red.dmi
│ │ │ │ │ ├── small_truck_turquoise_cargo.dmi
│ │ │ │ │ ├── small_truck_white.dmi
│ │ │ │ │ ├── small_truck_white_cargo.dmi
│ │ │ │ │ └── vehicles.dmi
│ │ │ │ ├── wall_decorations/
│ │ │ │ │ ├── 32x64_hybrisabillboards.dmi
│ │ │ │ │ ├── banners.dmi
│ │ │ │ │ ├── barsigns.dmi
│ │ │ │ │ ├── decals.dmi
│ │ │ │ │ ├── flags.dmi
│ │ │ │ │ ├── hybrisa64x64_signs.dmi
│ │ │ │ │ ├── posters.dmi
│ │ │ │ │ ├── semiotic_standard.dmi
│ │ │ │ │ ├── tyrargo32x64_signs.dmi
│ │ │ │ │ └── tyrargo64x64_signs.dmi
│ │ │ │ ├── walllocker.dmi
│ │ │ │ ├── watercloset.dmi
│ │ │ │ └── xeno_cyro_giant.dmi
│ │ │ ├── recharger.dmi
│ │ │ ├── resources.dmi
│ │ │ ├── resources_64x64.dmi
│ │ │ ├── restock_carts.dmi
│ │ │ ├── rollerbed.dmi
│ │ │ ├── safes.dmi
│ │ │ ├── souto_land.dmi
│ │ │ ├── stairs/
│ │ │ │ ├── perspective_stairs.dmi
│ │ │ │ ├── perspective_stairs_ice.dmi
│ │ │ │ └── perspective_stairs_kutjevo.dmi
│ │ │ ├── structures.dmi
│ │ │ ├── tables.dmi
│ │ │ ├── tables_64x64.dmi
│ │ │ ├── tank_dispenser.dmi
│ │ │ ├── tents_deployed_classic.dmi
│ │ │ ├── tents_deployed_desert.dmi
│ │ │ ├── tents_deployed_jungle.dmi
│ │ │ ├── tents_deployed_snow.dmi
│ │ │ ├── tents_deployed_urban.dmi
│ │ │ ├── tents_equipment.dmi
│ │ │ ├── tents_folded.dmi
│ │ │ └── wall_dispensers.dmi
│ │ ├── turrets.dmi
│ │ └── vehicles/
│ │ ├── CLF_van.dmi
│ │ ├── aircraft_prop.dmi
│ │ ├── apc.dmi
│ │ ├── apc_pmc.dmi
│ │ ├── apc_prop.dmi
│ │ ├── arc.dmi
│ │ ├── arc_prop.dmi
│ │ ├── bison_prop.dmi
│ │ ├── box_van.dmi
│ │ ├── hardpoints/
│ │ │ ├── apc.dmi
│ │ │ ├── arc.dmi
│ │ │ ├── tank.dmi
│ │ │ ├── truck.dmi
│ │ │ └── van.dmi
│ │ ├── humvee_prop.dmi
│ │ ├── ifv_prop.dmi
│ │ ├── interiors/
│ │ │ ├── apc.dmi
│ │ │ ├── apc_pmc.dmi
│ │ │ ├── arc.dmi
│ │ │ ├── arc_chassis.dmi
│ │ │ ├── box_van_interior.dmi
│ │ │ ├── clf_van.dmi
│ │ │ ├── general.dmi
│ │ │ ├── general_wy.dmi
│ │ │ ├── pizza_van_interior.dmi
│ │ │ ├── tank.dmi
│ │ │ └── van.dmi
│ │ ├── miltruck_prop.dmi
│ │ ├── pizza_van.dmi
│ │ ├── powerloader.dmi
│ │ ├── powerloader_clamp.dmi
│ │ ├── tank.dmi
│ │ ├── tank_prop.dmi
│ │ ├── twe_tank.dmi
│ │ ├── van.dmi
│ │ ├── van_prop.dmi
│ │ ├── vehicles.dmi
│ │ └── vtol_prop.dmi
│ ├── old_stuff/
│ │ ├── Seasonal/
│ │ │ └── xmas.dmi
│ │ ├── debug_group.dmi
│ │ └── mark.dmi
│ ├── turf/
│ │ ├── almayer.dmi
│ │ ├── area_almayer.dmi
│ │ ├── area_chigusashipyard.dmi
│ │ ├── area_corsat.dmi
│ │ ├── area_dam.dmi
│ │ ├── area_hybrisa.dmi
│ │ ├── area_kutjevo.dmi
│ │ ├── area_prison_v3_fiorina.dmi
│ │ ├── area_shiva.dmi
│ │ ├── area_strata.dmi
│ │ ├── area_varadero.dmi
│ │ ├── area_whiskey.dmi
│ │ ├── area_yautja.dmi
│ │ ├── areas.dmi
│ │ ├── areas_event.dmi
│ │ ├── areas_interiors.dmi
│ │ ├── beach2.dmi
│ │ ├── biodomes.dmi
│ │ ├── dropship.dmi
│ │ ├── dropship2.dmi
│ │ ├── dropship3.dmi
│ │ ├── dropship_clf.dmi
│ │ ├── dropship_twe.dmi
│ │ ├── dropship_upp.dmi
│ │ ├── dropship_upp_sof.dmi
│ │ ├── dropship_upp_sof_alt.dmi
│ │ ├── dropship_wy.dmi
│ │ ├── elevator.dmi
│ │ ├── elevator_strut.dmi
│ │ ├── ert_shuttle.dmi
│ │ ├── escapepods.dmi
│ │ ├── faction_flags.dmi
│ │ ├── floors/
│ │ │ ├── 32x32.dmi
│ │ │ ├── aicore.dmi
│ │ │ ├── asphalt.dmi
│ │ │ ├── auto_ice.dmi
│ │ │ ├── auto_sand.dmi
│ │ │ ├── auto_shale.dmi
│ │ │ ├── auto_strata_grass.dmi
│ │ │ ├── auto_tyrargo_turf.dmi
│ │ │ ├── beach.dmi
│ │ │ ├── bigred.dmi
│ │ │ ├── carpet_manual.dmi
│ │ │ ├── catwalks.dmi
│ │ │ ├── coagulation.dmi
│ │ │ ├── collection.dmi
│ │ │ ├── concrete.dmi
│ │ │ ├── corsat.dmi
│ │ │ ├── desert.dmi
│ │ │ ├── desert_dirt.dmi
│ │ │ ├── desert_excavation.dmi
│ │ │ ├── desert_rock.dmi
│ │ │ ├── desert_water.dmi
│ │ │ ├── desert_water_covered.dmi
│ │ │ ├── desert_water_toxic.dmi
│ │ │ ├── desert_water_transition.dmi
│ │ │ ├── desertdam_map.dmi
│ │ │ ├── dev/
│ │ │ │ └── dev_floor.dmi
│ │ │ ├── dirt.dmi
│ │ │ ├── engineership.dmi
│ │ │ ├── filtration.dmi
│ │ │ ├── floors.dmi
│ │ │ ├── ground_map_dirt.dmi
│ │ │ ├── hunter/
│ │ │ │ ├── ancientfloor.dmi
│ │ │ │ └── hunter_floors.dmi
│ │ │ ├── hybrisa_auto_turf.dmi
│ │ │ ├── hybrisafloors.dmi
│ │ │ ├── ice_colony/
│ │ │ │ └── shiva_floor.dmi
│ │ │ ├── interior.dmi
│ │ │ ├── jungle.dmi
│ │ │ ├── kutjevo/
│ │ │ │ └── kutjevo_floor.dmi
│ │ │ ├── prison.dmi
│ │ │ ├── snow.dmi
│ │ │ ├── snow2.dmi
│ │ │ ├── space.dmi
│ │ │ ├── strata_floor.dmi
│ │ │ └── tyrargo_map_dirt.dmi
│ │ ├── ground_map.dmi
│ │ ├── hunter_shuttle.dmi
│ │ ├── ice.dmi
│ │ ├── lifeboat.dmi
│ │ ├── overlays.dmi
│ │ ├── podwindows.dmi
│ │ ├── shuttle.dmi
│ │ ├── upp_floor.dmi
│ │ ├── vehicle_interior.dmi
│ │ └── walls/
│ │ ├── almayer.dmi
│ │ ├── almayer_aicore.dmi
│ │ ├── almayer_aicore_white.dmi
│ │ ├── almayer_white.dmi
│ │ ├── bunker.dmi
│ │ ├── cave.dmi
│ │ ├── chigusa.dmi
│ │ ├── corsat.dmi
│ │ ├── cult.dmi
│ │ ├── dev/
│ │ │ ├── dev.dmi
│ │ │ └── dev_windows.dmi
│ │ ├── domeretro.dmi
│ │ ├── engineership.dmi
│ │ ├── floodgate.dmi
│ │ ├── forest_veg.dmi
│ │ ├── hangar.dmi
│ │ ├── hangar_windows.dmi
│ │ ├── hunter/
│ │ │ ├── hunter_temple.dmi
│ │ │ ├── hunter_temple_broken_wall.dmi
│ │ │ ├── hunter_temple_deco.dmi
│ │ │ ├── hunter_temple_deco_2.dmi
│ │ │ ├── hunter_temple_deco_3.dmi
│ │ │ ├── runedstone.dmi
│ │ │ └── stone.dmi
│ │ ├── hunter.dmi
│ │ ├── hybrisa_colony_window.dmi
│ │ ├── hybrisa_colonywall.dmi
│ │ ├── hybrisa_colonywall_hospital.dmi
│ │ ├── hybrisa_engineering_wall.dmi
│ │ ├── hybrisa_engineering_windows.dmi
│ │ ├── hybrisa_hospital_colonywindows.dmi
│ │ ├── hybrisa_marshalls.dmi
│ │ ├── hybrisa_marshalls_windows.dmi
│ │ ├── hybrisa_offices_colonywall.dmi
│ │ ├── hybrisa_offices_windows.dmi
│ │ ├── hybrisa_spaceport_walls.dmi
│ │ ├── hybrisa_spaceport_windows.dmi
│ │ ├── hybrisaresearchbrown_windows.dmi
│ │ ├── hybrisaresearchbrownwall.dmi
│ │ ├── ice_colony/
│ │ │ ├── shiva_turfs.dmi
│ │ │ └── shiva_windows.dmi
│ │ ├── icewall.dmi
│ │ ├── icewalllight.dmi
│ │ ├── jungle_soro_rock_walls.dmi
│ │ ├── jungle_veg.dmi
│ │ ├── junglewall.dmi
│ │ ├── junglewalls_v3.dmi
│ │ ├── kutjevo/
│ │ │ ├── kutjevo.dmi
│ │ │ └── kutjevo_windows.dmi
│ │ ├── kutjevorockdark.dmi
│ │ ├── mineral_wall.dmi
│ │ ├── prison/
│ │ │ └── bone_resin.dmi
│ │ ├── prison.dmi
│ │ ├── rockwall.dmi
│ │ ├── rwall.dmi
│ │ ├── solaris/
│ │ │ ├── solaris.dmi
│ │ │ ├── solaris_old.dmi
│ │ │ └── solaris_windows.dmi
│ │ ├── strata_ice.dmi
│ │ ├── strata_jungle.dmi
│ │ ├── strata_outpost.dmi
│ │ ├── strata_outpost_v1.dmi
│ │ ├── strata_windows.dmi
│ │ ├── upp_almayer_walls.dmi
│ │ ├── upp_almayer_windows.dmi
│ │ ├── upp_hull.dmi
│ │ ├── upp_walls.dmi
│ │ ├── upp_windows.dmi
│ │ ├── walls.dmi
│ │ ├── window_frames.dmi
│ │ ├── windows.dmi
│ │ ├── windows_corsat.dmi
│ │ ├── wood.dmi
│ │ ├── wood2.dmi
│ │ └── xeno.dmi
│ └── ui_icons/
│ ├── hivebuff_radial.dmi
│ ├── logos.dmi
│ ├── map_blips.dmi
│ ├── map_blips_large.dmi
│ ├── map_blips_larger.dmi
│ ├── minimap.dmi
│ ├── minimap_buttons.dmi
│ └── minimap_mouse/
│ ├── draw_black.dmi
│ ├── draw_blue.dmi
│ ├── draw_erase.dmi
│ ├── draw_green.dmi
│ ├── draw_purple.dmi
│ ├── draw_red.dmi
│ ├── draw_yellow.dmi
│ └── label.dmi
├── interface/
│ ├── fonts.dm
│ ├── interface.dm
│ ├── license.txt
│ └── skin.dmf
├── map_config/
│ ├── maps.txt
│ └── shipmaps.txt
├── maps/
│ ├── Nightmare/
│ │ ├── doc/
│ │ │ ├── Design.md
│ │ │ ├── Quickstart.md
│ │ │ └── Tech.md
│ │ ├── maps/
│ │ │ ├── BigRed/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── CORSAT/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── DesertDam/
│ │ │ │ ├── mapgen_variations.json
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── FOP_v2_Cellblocks/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── FOP_v3_Sciannex/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Hunter_Ship/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Ice_Colony_v2/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Ice_Colony_v3/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Kutjevo/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── LV522_Chances_Claim/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── LV624/
│ │ │ │ ├── mapgen_variations.json
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── LV759_Hybrisa_Prospera/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── New_Varadero/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Sorokyne_Strata/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── USS_Almayer/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ ├── Whiskey_Outpost_v2/
│ │ │ │ ├── nightmare.json
│ │ │ │ └── scenario.json
│ │ │ └── tyrargo_rift/
│ │ │ ├── nightmare.json
│ │ │ └── scenario.json
│ │ ├── nightmare.json
│ │ └── scenario.json
│ ├── _basemap.dm
│ ├── almayer.json
│ ├── bigredv2.json
│ ├── chinook.json
│ ├── corsat.json
│ ├── desert_dam.json
│ ├── fiorina_sciannex.json
│ ├── huntership.json
│ ├── ice_colony_v2.json
│ ├── interiors/
│ │ ├── apc.dmm
│ │ ├── apc_command.dmm
│ │ ├── apc_med.dmm
│ │ ├── apc_no_fpw.dmm
│ │ ├── apc_pmc.dmm
│ │ ├── arc.dmm
│ │ ├── box_van.dmm
│ │ ├── clf_van.dmm
│ │ ├── pizza_van.dmm
│ │ ├── tank.dmm
│ │ └── van.dmm
│ ├── kutjevo.json
│ ├── lv522_chances_claim.json
│ ├── lv624.json
│ ├── lv759_hybrisa_prospera.json
│ ├── map_briefings/
│ │ ├── cl_brief_kutjevo.html
│ │ ├── cl_brief_placeholder.html
│ │ ├── cl_brief_trijent.html
│ │ └── commanding_officer/
│ │ ├── big_red/
│ │ │ ├── SOLARISRIDGEcpo.html
│ │ │ ├── SOLARISRIDGEhmm.html
│ │ │ ├── SOLARISRIDGEmodi.html
│ │ │ └── SOLARISRIDGEunaligned.html
│ │ ├── chances/
│ │ │ ├── CHANCEScpo.html
│ │ │ ├── CHANCEShmm.html
│ │ │ ├── CHANCESmodi.html
│ │ │ └── CHANCESunaligned.html
│ │ ├── fiorina/
│ │ │ ├── FIORINAcpo.html
│ │ │ ├── FIORINAhmm.html
│ │ │ ├── FIORINAmodi.html
│ │ │ └── FIORINAunaligned.html
│ │ ├── hybrisa/
│ │ │ ├── HYBRISAcpo.html
│ │ │ ├── HYBRISAhmm.html
│ │ │ ├── HYBRISAmodi.html
│ │ │ └── HYBRISAunaligned.html
│ │ ├── kutjevo/
│ │ │ ├── KUTJEVOcpo.html
│ │ │ ├── KUTJEVOhmm.html
│ │ │ ├── KUTJEVOmodi.html
│ │ │ └── KUTJEVOunaligned.html
│ │ ├── lv624/
│ │ │ ├── LV624cpo.html
│ │ │ ├── LV624hmm.html
│ │ │ ├── LV624modi.html
│ │ │ └── LV624unaligned.html
│ │ ├── new_varadero/
│ │ │ ├── NEWVARADEROcpo.html
│ │ │ ├── NEWVARADEROhmm.html
│ │ │ ├── NEWVARADEROmodi.html
│ │ │ └── NEWVARADEROunaligned.html
│ │ ├── shivas/
│ │ │ ├── SHIVAScpo.html
│ │ │ ├── SHIVAShmm.html
│ │ │ ├── SHIVASmodi.html
│ │ │ └── SHIVASunaligned.html
│ │ ├── sorokyne/
│ │ │ ├── SOROKYNEcpo.html
│ │ │ ├── SOROKYNEhmm.html
│ │ │ ├── SOROKYNEmodi.html
│ │ │ └── SOROKYNEunaligned.html
│ │ └── trijent_dam/
│ │ ├── TRIJENTDAMcpo.html
│ │ ├── TRIJENTDAMhmm.html
│ │ ├── TRIJENTDAMmodi.html
│ │ └── TRIJENTDAMunaligned.html
│ ├── map_files/
│ │ ├── BigRed/
│ │ │ ├── BigRed.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── 10.prison_breakout.dmm
│ │ │ │ ├── 10.tcomms_open.dmm
│ │ │ │ ├── 15.reactor_meltdown.dmm
│ │ │ │ ├── 20.etatunnel_open.dmm
│ │ │ │ ├── 20.lz1entrance_v2.dmm
│ │ │ │ ├── 20.lz1north_mining.dmm
│ │ │ │ ├── 25.chapel_cult.dmm
│ │ │ │ ├── 25.containerroom_xenos.dmm
│ │ │ │ ├── 25.lz1cave_flank.dmm
│ │ │ │ ├── 25.lz1containers_scramble.dmm
│ │ │ │ ├── 25.vault_v2.dmm
│ │ │ │ ├── 30.cargo_containers.dmm
│ │ │ │ ├── 30.viro-rock_open.dmm
│ │ │ │ ├── 35.filtration_restored.dmm
│ │ │ │ ├── 40.admin_pmc.dmm
│ │ │ │ ├── 40.dorms_party.dmm
│ │ │ │ ├── 40.viro_open.dmm
│ │ │ │ ├── 5.eta_carp.dmm
│ │ │ │ └── 70.se-checkpoint.dmm
│ │ │ └── standalone/
│ │ │ ├── clfmining.dmm
│ │ │ ├── crashlanding-eva.dmm
│ │ │ ├── crashlanding-offices.dmm
│ │ │ ├── lambda-cave_extratunnel.dmm
│ │ │ ├── lambda-cave_mushroom.dmm
│ │ │ ├── lambda-graveyard.dmm
│ │ │ ├── landingzone_solaris_upp_lz1.dmm
│ │ │ ├── landingzone_solaris_uscm_lz1.dmm
│ │ │ ├── landingzone_solaris_uscm_lz2.dmm
│ │ │ ├── medbay-passage.dmm
│ │ │ └── medbay-v3.dmm
│ │ ├── CORSAT/
│ │ │ ├── Corsat.dmm
│ │ │ ├── sprinkles/
│ │ │ │ └── .gitkeep
│ │ │ └── standalone/
│ │ │ ├── lockdown_gammacontrol.dmm
│ │ │ ├── lockdown_gammanorth.dmm
│ │ │ ├── lockdown_highsec.dmm
│ │ │ ├── lockdown_thetacontrol.dmm
│ │ │ ├── lockdown_thetaeast.dmm
│ │ │ └── sigma_ice.dmm
│ │ ├── DesertDam/
│ │ │ ├── Desert_Dam.dmm
│ │ │ ├── armory/
│ │ │ │ ├── 10.pristine.dmm
│ │ │ │ └── 20.battle.dmm
│ │ │ ├── chapel/
│ │ │ │ ├── 10.father.dmm
│ │ │ │ └── 20.explosion.dmm
│ │ │ ├── engicheckpoint/
│ │ │ │ ├── 10.cavein.dmm
│ │ │ │ └── 10.destroyed.dmm
│ │ │ ├── northcheckpoint/
│ │ │ │ └── 10.goons.dmm
│ │ │ ├── nspa/
│ │ │ │ ├── 10.clf_attack.dmm
│ │ │ │ └── 10.destroyed.dmm
│ │ │ ├── southbridge/
│ │ │ │ ├── 10.civhold.dmm
│ │ │ │ └── 10.corphold.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── 10.damtemple_intact.dmm
│ │ │ │ ├── 25.green-new-bridge.dmm
│ │ │ │ ├── 25.loaderdude.dmm
│ │ │ │ ├── 25.purple-new-bridge.dmm
│ │ │ │ ├── 30.admin_fight.dmm
│ │ │ │ ├── 30.admin_panic_hold.dmm
│ │ │ │ ├── 30.cmbengi.dmm
│ │ │ │ ├── 30.engi_walkway_block.dmm
│ │ │ │ ├── 30.hold_gen_breakroom.dmm
│ │ │ │ ├── 30.hold_genwest.dmm
│ │ │ │ ├── 30.hydro_breakroom_hold.dmm
│ │ │ │ ├── 30.hydro_walkway_block.dmm
│ │ │ │ ├── 30.metal_geneast.dmm
│ │ │ │ ├── 30.metal_genwest.dmm
│ │ │ │ ├── 30.metal_toolstorage.dmm
│ │ │ │ ├── 30.nspa_cordon.dmm
│ │ │ │ ├── 30.shipgone_northlz.dmm
│ │ │ │ ├── 40.helipad.dmm
│ │ │ │ ├── 40.minievac_westresearch.dmm
│ │ │ │ └── 50.sensorhold.dmm
│ │ │ ├── standalone/
│ │ │ │ ├── barhold.dmm
│ │ │ │ ├── clfpods.dmm
│ │ │ │ ├── crashlanding-upp-alt1.dmm
│ │ │ │ ├── crashlanding-upp-bar.dmm
│ │ │ │ ├── landingzone_desertdam_upp_lz1.dmm
│ │ │ │ ├── landingzone_desertdam_uscm_lz1.dmm
│ │ │ │ ├── landingzone_desertdam_uscm_lz2.dmm
│ │ │ │ └── quarantine.dmm
│ │ │ ├── treatmentone/
│ │ │ │ ├── 10.destroyed.dmm
│ │ │ │ └── 10.hold.dmm
│ │ │ ├── workshop/
│ │ │ │ ├── 10.gear.dmm
│ │ │ │ └── 10.guns.dmm
│ │ │ └── xenoflora/
│ │ │ ├── 10.alt.dmm
│ │ │ └── 10.destroyed.dmm
│ │ ├── FOP_v2_Cellblocks/
│ │ │ ├── Prison_Station_FOP.dmm
│ │ │ └── sprinkles/
│ │ │ └── .gitkeep
│ │ ├── FOP_v3_Sciannex/
│ │ │ ├── Fiorina_SciAnnex.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── 10.podholder.dmm
│ │ │ │ ├── 10.scavshipholder.dmm
│ │ │ │ ├── 15.birthdayparty.dmm
│ │ │ │ ├── 15.nogear.dmm
│ │ │ │ ├── 15.wardenofficedecorated.dmm
│ │ │ │ ├── 20.gamertime.dmm
│ │ │ │ ├── 20.poolparty.dmm
│ │ │ │ ├── 20.yardbasketball.dmm
│ │ │ │ ├── 25.researchprestine.dmm
│ │ │ │ ├── 30.engineeroffice.dmm
│ │ │ │ ├── 30.pizzatime.dmm
│ │ │ │ ├── 30.repairpanelslz.dmm
│ │ │ │ └── unused/
│ │ │ │ └── 20.medicalhold.dmm
│ │ │ └── standalone/
│ │ │ ├── landingzone_fop_upp_lz1.dmm
│ │ │ ├── landingzone_fop_uscm_lz1.dmm
│ │ │ ├── landingzone_fop_uscm_lz2.dmm
│ │ │ ├── riot_in_progress.dmm
│ │ │ └── rocinante.dmm
│ │ ├── Hunter_Ship/
│ │ │ ├── Hunter_Ship.dmm
│ │ │ └── sprinkles/
│ │ │ └── .gitkeep
│ │ ├── Ice_Colony_v2/
│ │ │ ├── Ice_Colony_v2.dmm
│ │ │ └── sprinkles/
│ │ │ └── .gitkeep
│ │ ├── Ice_Colony_v3/
│ │ │ ├── Shivas_Snowball.dmm
│ │ │ ├── lz2-south-caves/
│ │ │ │ ├── 20.destroyed_lz2-south-caves.dmm
│ │ │ │ └── 30.builtup_lz2-south-caves.dmm
│ │ │ ├── lz2-variations/
│ │ │ │ ├── east/
│ │ │ │ │ ├── full-closed.dmm
│ │ │ │ │ └── half-closed.dmm
│ │ │ │ ├── east-gate/
│ │ │ │ │ ├── blocked.dmm
│ │ │ │ │ └── closed.dmm
│ │ │ │ ├── eastsouth/
│ │ │ │ │ ├── full-closed.dmm
│ │ │ │ │ └── half-open.dmm
│ │ │ │ ├── north/
│ │ │ │ │ ├── full-closed.dmm
│ │ │ │ │ └── full-open.dmm
│ │ │ │ ├── south-gate/
│ │ │ │ │ ├── blocked.dmm
│ │ │ │ │ └── closed.dmm
│ │ │ │ ├── southeast/
│ │ │ │ │ ├── full-closed.dmm
│ │ │ │ │ └── half-open.dmm
│ │ │ │ ├── southeast-gate/
│ │ │ │ │ ├── cleared.dmm
│ │ │ │ │ └── closed.dmm
│ │ │ │ └── southwest/
│ │ │ │ ├── full-open.dmm
│ │ │ │ └── half-open.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── .gitkeep
│ │ │ │ └── unused/
│ │ │ │ ├── 20.labs-larder.dmm
│ │ │ │ ├── 30.labs-elevator_alternate.dmm
│ │ │ │ ├── 33.labs-entrance.dmm
│ │ │ │ └── 35.south-spidercave_cleared.dmm
│ │ │ └── standalone/
│ │ │ ├── clfraid.dmm
│ │ │ ├── landingzone_ice_upp_lz1.dmm
│ │ │ ├── landingzone_ice_uscm_lz2.dmm
│ │ │ └── panic_room_hold.dmm
│ │ ├── Kutjevo/
│ │ │ ├── Kutjevo.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── .gitkeep
│ │ │ │ ├── 25.cleaningprog_botany.dmm
│ │ │ │ ├── 25.plinkingspot_northlz.dmm
│ │ │ │ ├── 35.communications.dmm
│ │ │ │ ├── 5+trappedmonke_andclown.dmm
│ │ │ │ └── lz1alternative.dmm
│ │ │ └── standalone/
│ │ │ ├── clfsmugglers.dmm
│ │ │ ├── landingzone_kutjevo_upp_lz1.dmm
│ │ │ ├── landingzone_kutjevo_uscm_lz1.dmm
│ │ │ └── landingzone_kutjevo_uscm_lz2.dmm
│ │ ├── LV522_Chances_Claim/
│ │ │ ├── LV522_Chances_Claim.dmm
│ │ │ ├── sprinkles/
│ │ │ │ └── .gitkeep
│ │ │ └── standalone/
│ │ │ ├── landingzone_chance_upp_lz1.dmm
│ │ │ └── landingzone_chance_uscm_lz2.dmm
│ │ ├── LV624/
│ │ │ ├── LV624.dmm
│ │ │ ├── armory/
│ │ │ │ ├── 10.cheese.dmm
│ │ │ │ ├── 10.extra.dmm
│ │ │ │ └── 10.looted.dmm
│ │ │ ├── cargospecial/
│ │ │ │ ├── cargospecial1_mines.dmm
│ │ │ │ ├── cargospecial2_weapons.dmm
│ │ │ │ └── cargospecial3_gear.dmm
│ │ │ ├── centralcaves/
│ │ │ │ ├── 10.T.dmm
│ │ │ │ └── 10.qc.dmm
│ │ │ ├── crashedship/
│ │ │ │ ├── 10.digsite.dmm
│ │ │ │ └── 10.swapped.dmm
│ │ │ ├── gym/
│ │ │ │ ├── 20.pool.dmm
│ │ │ │ └── 30.alternate.dmm
│ │ │ ├── hydro/
│ │ │ │ └── 30.destroyed.dmm
│ │ │ ├── maintemple/
│ │ │ │ ├── 1.intact.dmm
│ │ │ │ └── 2.flooded.dmm
│ │ │ ├── medbay/
│ │ │ │ ├── 10.destroyed.dmm
│ │ │ │ └── 30.larvasurgery.dmm
│ │ │ ├── science/
│ │ │ │ ├── 10.yautja.dmm
│ │ │ │ └── 40.fullylocked.dmm
│ │ │ ├── sprinkles/
│ │ │ │ ├── 20.lz-containers_swapped.dmm
│ │ │ │ └── 30.nexuscenter_barricaded.dmm
│ │ │ ├── standalone/
│ │ │ │ ├── clfship.dmm
│ │ │ │ ├── corporatedome.dmm
│ │ │ │ ├── landingzone_624_upp_lz1.dmm
│ │ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
/.git
/.gitlab-ci.yml
/.github
/.vscode
/*.txt
/bin
/tmp
/data
/cfg
/scripts
/.gitlab
/.vscode
/tools/dmitool
/tools/runtimes
/local.db*
*.dll
*.exe
*.bat
*.rsc.dyn
*.log
*.lk
================================================
FILE: .editorconfig
================================================
[*]
indent_style = tab
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
[*.yml]
indent_style = space
indent_size = 2
[*.py]
indent_style = space
[*.json]
indent_style = space
================================================
FILE: .gitattributes
================================================
* text=auto
## Enforce text mode and LF line breaks
*.bat text eol=lf
*.cjs text eol=lf
*.css text eol=lf
*.dm text eol=lf
*.dme text eol=lf
*.dmf text eol=lf
*.htm text eol=lf
*.html text eol=lf
*.js text eol=lf
*.json text eol=lf
*.jsx text eol=lf
*.md text eol=lf
*.ps1 text eol=lf
*.py text eol=lf
*.scss text eol=lf
*.sql text eol=lf
*.svg text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.txt text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.sh text eol=lf
Dockerfile eol=lf
## Enforce binary mode
*.bmp binary
*.dll binary
*.dmb binary
*.exe binary
*.gif binary
*.jpg binary
*.png binary
*.so binary
## Merger hooks, run tools/hooks/install.bat or install.sh to set up
*.dmm text eol=lf merge=dmm
*.dmi binary merge=dmi
## Force tab indents on dm files
*.dm whitespace=indent-with-non-tab
================================================
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 and separated into sections for Maintainers KEEP IT THAT WAY
# In the event that people are to be informed of changes
# to the same file or dir, add them to the end of under Multiple Owners
# Fira
/.dockerignore @Fira
/code/controllers/subsystem/atoms.dm @Fira
/code/controllers/subsystem/mapping.dm @Fira
/code/controllers/subsystem/sound.dm @Fira
/code/controllers/subsystem/predships.dm @Fira
/code/controllers/subsystem/quadtrees.dm @Fira
/code/datums/quadtree.dm @Fira
/code/datums/soundOutput.dm @Fira
/code/game/cas_manager/ @Fira
/code/game/machinery/computer/dropship_weapons.dm @Fira
/code/game/sound.dm @Fira
/code/game/world.dm @Fira
/code/modules/mapping/reader.dm @Fira
/code/modules/mapping/map_template.dm @Fira
/code/modules/nightmare/ @Fira
/tools/docker/ @Fira
/Dockerfile @Fira
# Forest2001
/code/game/machinery/ARES @realforest2001
/tgui/packages/tgui/interfaces/AresAdmin.jsx @realforest2001
/tgui/packages/tgui/interfaces/AresInterface.jsx @realforest2001
/tgui/packages/tgui/interfaces/WorkingJoe.jsx @realforest2001
# Nanu
/maps @Nanu308
# MULTIPLE OWNERS
================================================
FILE: .github/CONTRIBUTING.md
================================================
# CONTRIBUTING TO CM-SS13
- [CONTRIBUTING TO CM-SS13](#contributing-to-cm-ss13)
- [Reporting Issues](#reporting-issues)
- [Introduction](#introduction)
- [Getting Started](#getting-started)
- [Meet the Team](#meet-the-team)
- [Head Maintainer and Maintainer Managers](#head-maintainer-and-maintainer-managers)
- [Maintainers](#maintainers)
- [Staff Tools and Major Rule changing PR’s](#staff-tools-and-major-rule-changing-prs)
- [Issue Managers](#issue-managers)
- [Issues Tracker](#issues-tracker)
- [Development Guides](#development-guides)
- [Creating a development environment](#creating-a-development-environment)
- [Writing readable code](#writing-readable-code)
- [Writing sane code](#writing-sane-code)
- [Writing understandable code](#writing-understandable-code)
- [Misc](#misc)
- [Pull Request Process](#pull-request-process)
- [A note on PRs altering sprites](#a-note-on-prs-altering-sprites)
- [A note on PRs altering maps](#a-note-on-prs-altering-maps)
- [A note on balance impacting PRs](#a-note-on-balance-impacting-prs)
- [Porting features/sprites/sounds/tools from other codebases](#porting-featuresspritessoundstools-from-other-codebases)
- [Things you can work on](#things-you-can-work-on)
- [Spriting](#spriting)
- [Mapping](#mapping)
- [Coding](#coding)
- [What we don't want](#what-we-dont-want)
- [Spriting](#spriting-1)
- [Mapping](#mapping-1)
- [Coding](#coding-1)
- [Banned content](#banned-content)
- [Generative AI](#generative-ai)
## Reporting Issues
If you ever encounter a bug in-game, the best way to let a coder know about it is with our GitHub Issue Tracker. Please make sure you use the supplied issue template.
(If you don't have an account, making a new one takes only one minute.)
If you have difficulty, ask for help in the #development channel on our discord.
## Introduction
Hello and welcome to CM-SS13's 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; at CM-SS13, we strive to maintain 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 the kinds of powers the team has over your additions, to avoid any unpleasant surprises if your pull request is closed for a reason you didn't foresee.
## Getting Started
CM-SS13 doesn't have a 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.
There is an open list of approachable issues for [your inspiration here](https://github.com/cmss13-devs/cmss13/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+First+Issue%22).
You can of course, as always, ask for help on the Discord channels or the forums. We're just here to have fun and help out, so please don't expect professional support.
## Meet the Team
### Head Maintainer and Maintainer Managers
The Head Maintainer and Maintainer Managers are responsible for controlling, adding, and removing maintainers from the project. In addition to filling the role of a normal maintainer, they have sole authority on who becomes a maintainer, as well as who remains a maintainer and who does not.
### Maintainers
Maintainers are quality control. If a proposed pull request doesn't meet the following specifications, they can request you to change it, or simply just close the pull request. Maintainers are required to give a reason for closing the pull request.
Maintainers can revert your changes if they feel they are not worth maintaining or if they did not live up to the quality specifications.
<details>
<summary>Maintainer Guidelines</summary>
These are the few directives we have for project maintainers.
- Do not merge PRs you create.
- Do not merge PRs until 24 hours have passed since it was opened. Exceptions include:
- Emergency fixes.
- Try to get secondary maintainer approval before merging if you are able to.
- PRs with empty commits intended to generate a changelog.
- Do not merge PRs that contain content from the [banned content list](./CONTRIBUTING.md#banned-content).
- Do not merge or remove the DNM label that another Maintainer has applied. Exceptions include:
- Maintainer Managers removing a DNM label placed by a Maintainer for Balance/Design reasons
- Do not merge PRs that lack appropriate approvals:
- A PR that alters code needs approval from a codetainer (a maintainer authorized to approve code)
- A PR that alters sprites needs approval from a spritetainer (a maintainer authorized to approve sprites)
- A PR that alters maps needs approval from a maptainer (a maintainer authorized to approve maps)
- A PR that alters balance needs approval from a Maintainer Manager unless it has been un-reviewed by a Maintainer Manager for 7 days.
These are not steadfast rules as maintainers are expected to use their best judgement when operating.
Our team is entirely voluntary, as such we extend our thanks to maintainers, issue managers, and contributors alike for helping keep the project alive.
</details>
### Staff Tools and Major Rule changing PR’s
PR’s that affect staff tools/major rules rewrite (adding/removing/editing etc.) requires certain Head Staff oversight and can be blocked from being merged. The Head Maintainer must be informed about why so a discussion can be had. The Host makes a final decision if the PR is to be merged after changes have been implemented stemming from the discussion.
### Issue Managers
Issue Managers help out the project by labelling bug reports and closing bug reports which are duplicates or are no longer applicable.
<details>
<summary>What You Can and Can't Do as an Issue Manager</summary>
This should help you understand what you can and can't do with your newfound GitHub permissions.
Things you **CAN** do:
- Label issues appropriately.
- Close issues when appropriate.
Things you **CAN'T** do:
- Close PRs: Only maintainers are allowed to close PRs. Do not hit that button.
- Label PRs, leave that for maintainers to handle.
</details>
## Issues Tracker
Potential bugs can be submitted to the project issue tracker on GitHub. While we appreciate suggestions, they should **not** be posted here to make triaging technical issues and fixing bugs easier.
When submitting an issue, use the provided template. A few things to keep in mind for a good issue report maximizing the chance of finding and fixing it:
* Search quickly for existing related issues - add info there if applicable rather than duplicating them.
* Stay factual and as concise as possible.
* If possible, attempt to reproduce and confirm the issue, and detail steps.
The tracker is a powerful tool - it might look pointless, but ensures what's there can be known by anyone, team members and contributors alike, and won't be forgotten. This maximizes chances of issues being resolved. Don't be afraid to use it.
## Development Guides
#### Creating a development environment
[Guide to Git](https://cm-ss13.com/wiki/Guide_to_Git)
#### Writing readable code
[Style guidelines](./guides/STYLES.md)
#### Writing sane code
[Code standards](./guides/STANDARDS.md)
#### Writing understandable code
[Autodocumenting code](./guides/AUTODOC.md)
#### Misc
[UI Development](../tgui/README.md)
[Embedding tgui components in chat](../tgui/docs/chat-embedded-components.md)
## 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.
* Make sure your pull request complies to the requirements outlined here.
* You are expected to have tested your pull requests if it is anything that would warrant testing. Text only changes, single number balance changes, and similar generally don't need testing, but anything else does. This means by extension web edits are disallowed for larger changes.
* You are going to be expected to document all your changes in the pull request. Failing to do so will mean delaying it as we will 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. Should you be optimizing a routine you must provide proof by way of profiling that your changes are faster.
* We ask that you use the changelog system to document your player facing changes, which prevents our players from being caught unaware by said changes - you can find more information about this [on this wiki page](http://tgstation13.org/wiki/Guide_to_Changelogs) but all possible options are already in the template when opening a pull request.
* If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off (aka atomize) into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable.
* 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 should convert it to a draft. Once you have addressed all their comments to the best of your ability, please mark the pull as `Ready for Review` again. Keep in mind it won't appear in our backlog if it is drafted or has merge conflicts.
* We ask that you refrain from pinging staff about getting your pull request reviewed until after it is automatically marked stale pending review. If it ends up stale exempt, give it a week, but usually this situation will be explained such as when a relevant maintainer is currently unavailable.
### A note on PRs altering sprites
Spriting changes requires additional approval from a spritetainer.
* Whenever sprites are added, please include screenshots or video(s) of them in game in the pull request description.
### A note on PRs altering maps
Mapping changes requires additional approval from a maptainer.
* Whenever bulk modifying a map (i.e. repathing existing objects), please include an [UpdatePaths](../tools/UpdatePaths/readme.md) script in your PR (under /tools/UpdatePaths/Scripts) for other mappers to easily apply your changes to their own mapping PRs or for downstreams.
### A note on balance impacting PRs
Certain PRs, such as those which directly change number values (i.e. health, recoil, damage) or add large pieces of content to the game (i.e. a new gun, a new dropship weapon, or a new xeno structure) can have the potential to highly impact game balance or gameflow.
* If a Maintainer Manager or Head Maintainer has not reviewed a pull request that impacts balance in 7 days, maintainers may review and merge the PR themselves.
* We understand that having something you have worked on for quite some time being denied can be frustrating. Therefore, it is recommended that you check with a maintainer before beginning to code your PR if you have any doubts that it will be accepted. This will save everyone's time and energy.
## 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 and the changelog 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.
## Things you can work on
The following list is non-exhaustive, but should give you a good idea of what we would like to see in Pull Requests.
### Spriting
- Replacements of legacy Bay12 sprites
- Strain specific designs for Aliens for ones that lack them
- Alternative Alien sprite sets
- Icon sheet sorting styled after firearms sheets
- New cosmetic loadout items, such as additional helmet garb
- Custom tilesets for maps that don’t have them
- Map specific props and details
- Map specific Colonist uniforms and equipment
- Additional HUD styles
- Bug fixes and inconsistency fixes
### Mapping
- Nightmare inserts
- Object placement quality of life improvements (such as widening hallways and combat lanes cluttered with props)
- Extra map detailing (so long as it doesn’t negatively impact performance)
- Removal of dead-ends or gameplay dead-space on existing maps
- New maps*
- Bug fixes and inconsistency fixes
#### A note on new maps:
Entirely new maps are generally considered to be stepping stones into the maintainers’ mapping dept. proper. However, making a new map is a months long process that requires dedication and constant communication and oversight from mappers on the Maintainer team. Mapping, like spriting and coding, is an acquired skill and it is highly likely your first map is going to suck. Maps are fluid entities that are never absolutely complete, don’t wed yourself to your initial layout, always be prepared to remap half the project when going in.
### Coding
- Quality of life improvements that don’t impact gameplay, but improve it
- Latency optimizations and improvements
- Backend system refactors that improve server stability or performance
- Minor features that don’t impact the overall round loop
- Content for jobs currently lacking in it
- Anything on the public task-board
- New Alien strains
- Bay12 legacy feature removal (such as wizard backend, laser eyes, etc.)
- Map specific survivor loadouts
- Bug fixes and inconsistency fixes
- New TGUI
## What we don't want
The following list is non-exhaustive, but should give you a good idea of what we don't want to see in Pull Requests.
### Spriting
- Resprites of recently updated content, such as uniforms, guns, marine armor
- Donor item adjustments or changes
- Joke sprites
- Tacticool equipment and gear. We’re retro-future (or cassette punk if you will).
### Mapping
- Nightmare inserts with ridiculous loot or ones that are out of place (don’t put snow on LV, for example)
- Additional detailing that degrades arena space or hinders gameplay in any sort of way
- Event or unused maps
### Coding
- No additional species or races, even Arcturians
- No new whitelists
- NanoUI
- Player-facing HTML UIs
- Prior denied content/PRs (without approval)
### Frozen
- See pinned [issues](https://github.com/cmss13-devs/cmss13/issues) for anything that requires explicit permission.
Remember that the list is not exhaustive. And you can freely contribute an PR with content that can be shuffled into the “What we don’t want” category, and still get it merged. It is just unlikely without prior talk/approval from a maintainer.
## Banned content
Do not add any of the following in a Pull Request or risk getting the PR closed:
* Any content that adds a specific character played by or reference to a single player, contributor, staff member, or maintainer.
For example, a PR that adds a blue crab named after a staff member’s username is not permitted, as it directly references a specific individual.
* Code which violates GitHub's [terms of service](https://github.com/site/terms) or [acceptable use policies](https://docs.github.com/en/site-policy/acceptable-use-policies/github-acceptable-use-policies).
### Generative AI
The use of generative AI tools is not permitted on the CM-SS13 repository. This includes but is not limited to pull request code, code review, and filing issues. If you proceed to post PRs, issues, or comments that are clearly AI generated, you will be warned against this and your content will be closed/deleted. Multiple infractions will result in an outright ban from the repository.
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: File a bug report
labels: ["Bug"]
body:
- type: input
id: current-tms
attributes:
label: Testmerges
description: Are there any current TMs on the server? You can see this from the message when you join, or via using the OOC -> Show Revision Info verb. If you're certain the issue is to be caused by a test merge, report it in the pull request's comment section rather than on the tracker.
placeholder: "#1, #2, #3, etc"
validations:
required: true
- type: input
id: round-id
attributes:
label: Round ID
description: If known, what was the Round ID this bug was found on? Can be left blank if unknown or occured across multiple rounds.
placeholder: "12345"
- type: textarea
id: what-happened
attributes:
label: Description of the bug
description: What went wrong? Give us a 1-2 sentence summary.
placeholder: Maintainers hate this one simple trick...
validations:
required: true
- type: textarea
id: what-should-have-happened
attributes:
label: What's the difference with what should have happened?
description: What's the expected behaviour?
placeholder: Not this. Never this...
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: How do we reproduce this bug?
description: Using as much detail as necessary, give us the steps to reproducing this error.
value: |
1.
2.
3.
...
validations:
required: true
- type: checkboxes
id: issue-bingo
attributes:
label: Issue Bingo
options:
- label: Issue could be reproduced at least once
- label: Issue happened in a recent (less than 7 days ago) round
- label: Couldn't find an existing issue about this (https://github.com/cmss13-devs/cmss13/issues)
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: PR Feedback
url: https://forum.cm-ss13.com/w/pr-feedback
about: General pull request feedback can be submitted privately on the forums here.
- name: Game Breaking Exploits
url: https://discord.gg/cmss13
about: Securely disclose high priority issues in a DM to a member of the Maintainer Team here.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->
# About the pull request
<!-- Remove this text and explain what the purpose of your PR is.
Mention if you have tested your changes. If you changed a map, make sure you used the mapmerge tool.
If this addresses a reported issue, you can include "Fixes #12345" to link the PR to the corresponding Issue number #12345.
For multiple issues you must include the "Fixes" keyword for each, e.g. "Fixes #12345, Fixes #12346, Fixes #12347". You cannot use multiple issue numbers with only one keyword.
Remember: something that is self-evident to you might not be to others. Explain your rationale fully, even if you feel it goes without saying. -->
# Explain why it's good for the game
<!-- Please add a short description of why you think these changes would benefit the game. If you can't justify it in words, it might not be worth adding, and may discourage maintainers from reviewing or merging your PR. This section is not strictly required for (non-controversial) fix PRs or backend PRs. -->
# Testing Photographs and Procedure
<!-- Include any screenshots/videos/debugging steps of the modified code functioning successfully, ideally including edge cases. -->
<!-- !! If you are modifying sprites, you **must** include one or more in-game screenshots or videos of the new sprites. !! -->
<details>
<summary>Screenshots & Videos</summary>
Put screenshots and videos here with an empty line between the screenshots and the `<details>` tags.
</details>
# 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 label your changes in the changelog. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. -->
<!-- If you add a name after the ':cl', that name will be used in the changelog. You must add your CKEY after the CL if your GitHub name doesn't match. Maintainers freely reserve the right to remove and add tags should they deem it appropriate. -->
:cl:
add: Added something
admin: messed with admin stuff
balance: rebalanced something
code: changed some code
config: changed some config setting
del: Removed old things
fix: fixed a few things
imageadd: added some icons and images
imagedel: deleted some icons and images
imagetweak: tweaked some icons and images
mapadd: added a new map or section to a map
maptweak: tweaked a map
qol: made something easier to use
refactor: refactored some code
server: something server ops should know
soundadd: added a new sound thingy
sounddel: removed an old sound thingy
soundtweak: tweaked a sound thingy
spellcheck: fixed a few typos
ui: changed something relating to user interfaces
/:cl:
<!-- Both :cl:'s are required for the changelog to work! -->
================================================
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_bun/action.yml
================================================
# This action is a wrapper around `oven-sh/setup-bun` to use the version specified in
# `dependencies.sh`.
name: Setup Bun
description: Install Bun using the version specified in `dependencies.sh`
runs:
using: composite
steps:
- name: Configure Bun version
shell: bash
run: |
source dependencies.sh
echo "BUN_VERSION_REQUIRED=$BUN_VERSION" >> $GITHUB_ENV
- name: Install Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION_REQUIRED }}
================================================
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/add_labels.py
================================================
import os, re
from github import Auth, Github, GithubIntegration, GithubException
# Format - Key: Array[Label, [StringsToIgnore]]
changelogToPrefix = {
'add': ["Feature", ["Added new mechanics or gameplay changes", "Added more things", "Added something"]],
'admin': ["Admin", ["messed with admin stuff"]],
'balance': ["Balance", ["rebalanced something"]],
'code': ["Code Improvement", ["changed some code"]],
'config': ["Config", ["changed some config setting"]],
'del': ["Removal", ["Removed old things"]],
'fix': ["Fix", ["fixed a few things"]],
'imageadd': ["Sprites", ["added some icons and images"]],
'imagedel': ["Sprites", ["deleted some icons and images"]],
'imagetweak': ["Sprites", ["tweaked some icons and images"]],
'mapadd': ["Mapping", ["added a new map or section to a map"]],
'maptweak': ["Mapping", ["tweaked a map"]],
'qol': ["Quality of Life", ["made something easier to use"]],
'refactor': ["Refactor", ["refactored some code"]],
'server': ["Server", ["something server ops should know"]],
'soundadd': ["Sound", ["added a new sound thingy"]],
'sounddel': ["Sound", ["removed an old sound thingy"]],
'soundtweak': ["Sound", ["tweaked a sound thingy"]],
'spellcheck': ["Grammar and Formatting", ["fixed a few typos"]],
'ui': ["UI", ["changed something relating to user interfaces"]],
}
fileToPrefix = {
'wav': 'Sound',
'ogg': 'Sound',
'mp3': 'Sound', ## Can't believe they forgot about the best sound format
'dmm': 'Mapping',
'js': 'UI',
'tsx': 'UI',
'ts': 'UI',
'jsx': 'UI',
'scss': 'UI',
'dmi': "Sprites",
}
githubLabel = "Github"
missingLogLabel = "Missing Changelog"
def get_labels(pr):
labels = {}
failed = False
files = pr.get_files()
for file in files:
prefix = file.filename.split(".")[-1]
if file.filename.startswith(".github"):
labels[githubLabel] = True
if not prefix in fileToPrefix:
continue
labels[fileToPrefix[prefix]] = True
changelog_match = re.search(r"(?:🆑|:cl:)(.*)/(?:🆑|:cl:)", pr.body, re.S | re.M)
if changelog_match is None:
print("::warning ::No changelog detected.")
labels[missingLogLabel] = True
return labels, False
lines = changelog_match.group(1).split('\n')
failed = len(lines) <= 2 # Make sure its not an empty changelog
if failed:
print("::error ::Empty changelog.")
for line in lines[1:-1]: # Skip first line with authors and last
line = line.strip()
if not line:
continue
contentSplit = line.split(":")
key = contentSplit.pop(0).strip()
content = ":".join(contentSplit).strip()
if not key in changelogToPrefix: # Some key that we didn't expect
print(f"::error ::Invalid changelog entry: {line}")
failed = True
continue
if content in changelogToPrefix[key][1]: # They left the template entry in
print(f"::error ::Invalid changelog entry: {line}")
failed = True
continue
labels[changelogToPrefix[key][0]] = True
return list(labels), failed
def main():
auth = Auth.Token(os.environ["TOKEN"])
g = Github(auth=auth)
repo = g.get_repo(os.environ['REPO'])
pr = repo.get_pull(int(os.environ["PR_NUMBER"]))
if not pr:
print("::warning ::Not a PR.")
return
labels, failed = get_labels(pr)
if not missingLogLabel in labels:
try:
pr.remove_from_labels(missingLogLabel)
except GithubException as e:
if e.status == 404:
pass # 404 if we try to remove a label that isn't set
for label in labels:
pr.add_to_labels(label)
if failed:
exit(1)
if __name__ == '__main__':
main()
================================================
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: runtime
516.1681: runtime
================================================
FILE: .github/guides/AUTODOC.md
================================================
# dmdoc
[DOCUMENTATION]: https://docs.cm-ss13.com/
[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 CM-SS13 codebase structure and api reference.
## Documenting code on CM-SS13
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 it's 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 it's 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 CM-SS13 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.
## 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/Dizzy] - Expands to a link that will take you to the /mob class and anchor you to the dizzy 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 dizzy here] [/mob/proc/Dizzy]`
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/guides/STANDARDS.md
================================================
# Code Standards
These are our code standards. They include information about how to properly work with our code, rules about how to structure what you're writing, and some more general information about BYOND and Dream Maker.
As with the style guide, 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. Thank you for reading this file!
- [Code Standards](#code-standards)
- [General](#general)
- [Object Oriented Code](#object-oriented-code)
- [Avoid hacky code](#avoid-hacky-code)
- [Develop Secure Code](#develop-secure-code)
- [User Interfaces](#user-interfaces)
- [Dont override type safety checks](#dont-override-type-safety-checks)
- [Do not use text/string based type paths](#do-not-use-textstring-based-type-paths)
- [Other Notes](#other-notes)
- [Structural](#structural)
- [No duplicated code (Don't repeat yourself)](#no-duplicated-code-dont-repeat-yourself)
- [Prefer `Initialize()` over `New()` for atoms](#prefer-initialize-over-new-for-atoms)
- [Files](#files)
- [Use of `.proc/xyz` format for callback timers](#use-of-procxyz-format-for-callback-timers)
- [PROC\_REF Macros](#proc_ref-macros)
- [Signal Handlers](#signal-handlers)
- [Enforcing parent calling](#enforcing-parent-calling)
- [Avoid unnecessary type checks and obscuring nulls in lists](#avoid-unnecessary-type-checks-and-obscuring-nulls-in-lists)
- [All `process` procs need to make use of delta-time and be frame independent](#all-process-procs-need-to-make-use-of-delta-time-and-be-frame-independent)
- [Optimization](#optimization)
- [Startup/Runtime tradeoffs with lists and the "hidden" init proc](#startupruntime-tradeoffs-with-lists-and-the-hidden-init-proc)
- [Icons are for image manipulation and defining an obj's `.icon` var, appearances are for everything else.](#icons-are-for-image-manipulation-and-defining-an-objs-icon-var-appearances-are-for-everything-else)
- [Do not abuse associated lists.](#do-not-abuse-associated-lists)
- [Dream Maker Quirks/Tricks](#dream-maker-quirkstricks)
- [Loops](#loops)
- [In-To for-loops](#in-to-for-loops)
- [`for(var/A in list)` versus `for(var/i in 1 to list.len)`](#forvara-in-list-versus-forvari-in-1-to-listlen)
- [Dot variable (`.`)](#dot-variable-)
- [Exception: `. = ..()`](#exception---)
- [Exception: Runtime resilience](#exception-runtime-resilience)
- [The BYOND walk procs](#the-byond-walk-procs)
- [BYOND hellspawn](#byond-hellspawn)
- [Icon hell](#icon-hell)
## General
### 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.
### Avoid hacky code
Hacky code, such as adding specific checks, is highly discouraged and only allowed when there is ***no*** other option. (Protip: "I couldn't immediately think of a proper way so thus there must be no other option" is not gonna cut it here! If you can't think of anything else, say that outright and admit that you need help with it. Maintainers 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.
### 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 default admin roles - use common sense to determine which role fits the level of damage a function could do.
### User Interfaces
* All new player-facing user interfaces must use TGUI, unless they are critical user interfaces.
* All critical user interfaces must be done exclusively with HTML or the interface.dmf, with tgui being *optional* for this UI.
* Examples of critical user interfaces are the chat box, the observe button, the stat panel, and the chat input.
* Documentation for TGUI can be found at:
* [tgui/README.md](../../tgui/README.md)
* [tgui/tutorial-and-examples.md](../../tgui/docs/tutorial-and-examples.md)
### Dont override 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.
### 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"
```
### 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 or not. 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`)
* Separating single lines into more readable blocks is not banned, however you should use it only where it makes new information more accessible, or aids maintainability. We do not have a column limit, and mass conversions will not be received well.
* 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.
## Structural
### No duplicated code (Don't repeat yourself)
Copying code from one place to another may be suitable for small, short-time projects, but /tg/station 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.
### 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. See here for details on `Initialize`: https://github.com/tgstation/tgstation/blob/34775d42a2db4e0f6734560baadcfcf5f5540910/code/game/atoms.dm#L166
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 dependent on parent and children procs so unrelated random conversions of existing things can cause bugs that take months to figure out.
### Files
* Because runtime errors do not give the full path, try to avoid having files with the same name across folders.
* File names should not be mixed case, or contain 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.
### Use of `.proc/xyz` format for callback timers
This is a simple one - as we will eventually move to 515, we will need to ditch this kind of callback. So please don't add any new ones. Make our lives easier.
### PROC_REF Macros
When referencing procs in RegisterSignal, Callback and other procs you should use PROC_REF, TYPE_PROC_REF and GLOBAL_PROC_REF macros.
They ensure compilation fails if the reffered to procs change names or get removed.
The macro to be used depends on how the proc you're in relates to the proc you want to use:
PROC_REF if the proc you want to use is defined on the current proc type or any of it's ancestor types.
Example:
```
/mob/proc/funny()
to_chat(world,"knock knock")
/mob/subtype/proc/very_funny()
to_chat(world,"who's there?")
/mob/subtype/proc/do_something()
// Proc on our own type
RegisterSignal(x, COMSIG_OTHER_FAKE, PROC_REF(very_funny))
// Proc on ancestor type, /mob is parent type of /mob/subtype
RegisterSignal(x, COMSIG_FAKE, PROC_REF(funny))
```
TYPE_PROC_REF if the proc you want to use is defined on a different unrelated type
Example:
```
/obj/thing/proc/funny()
to_chat(world,"knock knock")
/mob/subtype/proc/do_something()
var/obj/thing/x = new()
// we're referring to /obj/thing proc inside /mob/subtype proc
RegisterSignal(x, COMSIG_FAKE, TYPE_PROC_REF(/obj/thing, funny))
```
GLOBAL_PROC_REF if the proc you want to use is a global proc.
Example:
```
/proc/funny()
to_chat(world,"knock knock")
/mob/subtype/proc/do_something()
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(funny)), 100))
```
Note that the same rules go for verbs too! We have VERB_REF() and TYPE_VERB_REF() as you need it in these same cases. GLOBAL_VERB_REF() isn't a thing however, as verbs are not global.
### 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.
### 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 anything` key can be used to skip the check.
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 anything in bag_of_atoms)
if(thing.alpha <= highest_alpha)
continue
highest_alpha = thing.alpha
```
### All `process` procs need to make use of delta-time and be frame independent
In a lot of our older code, `process()` is frame dependent. Here's some example mob code:
```DM
/mob/testmob
var/health = 100
var/health_loss = 4 //We want to lose 2 health per second, so 4 per SSmobs process
/mob/testmob/process(delta_time) //SSmobs runs once every 2 seconds
health -= health_loss
```
As the mobs subsystem runs once every 2 seconds, the mob now loses 4 health every process, or 2 health per second. This is called frame dependent programming.
Why is this an issue? If someone decides to make it so the mobs subsystem processes once every second (2 times as fast), your effects in process() will also be two times as fast. Resulting in 4 health loss per second rather than 2.
How do we solve this? By using delta-time. Delta-time is the amount of seconds you would theoretically have between 2 process() calls. In the case of the mobs subsystem, this would be 2 (As there is 2 seconds between every call in `process()`). Here is a new example using delta-time:
```DM
/mob/testmob
var/health = 100
var/health_loss = 2 //Health loss every second
/mob/testmob/process(delta_time) //SSmobs runs once every 2 seconds
health -= health_loss * delta_time
```
In the above example, we made our health_loss variable a per second value rather than per process. In the actual process() proc we then make use of deltatime. Because SSmobs runs once every 2 seconds. Delta_time would have a value of 2. This means that by doing health_loss * delta_time, you end up with the correct amount of health_loss per process, but if for some reason the SSmobs subsystem gets changed to be faster or slower in a PR, your health_loss variable will work the same.
For example, if SSmobs is set to run once every 4 seconds, it would call process once every 4 seconds and multiply your health_loss var by 4 before subtracting it. Ensuring that your code is frame independent.
## Optimization
### 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.
### 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.
## Dream Maker Quirks/Tricks
Like all languages, Dream Maker has its quirks, some of them are beneficial to us, some are harmful.
### Loops
#### 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)` versus `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
### Dot variable (`.`)
The `.` variable is present in all procs. It refers to the value returned by a proc.
```dm
/proc/return_six()
. = 3
. *= 2
// ...is equivalent to...
/proc/return_six()
var/output = 3
output *= 2
return output
```
At its best, it can make some very common patterns easy to use, and harder to mess up. However, at its worst, it can make it significantly harder to understand what a proc does.
```dm
/proc/complex_proc()
if (do_something())
some_code()
if (do_something_else())
. = TRUE // Uh oh, what's going on!
// even
// more
// code
if (bad_condition())
return // This actually will return something set from earlier!
```
This sort of behavior can create some nasty to debug errors with things returning when you don't expect them to. Would you see `return` and it expect it to return a value, without reading all the code before it? Furthermore, a simple `return` statement cannot easily be checked by the LSP, meaning you can't easily check what is actually being returned. Basically, `return output` lets you go to where `output` is defined/set. `return` does not.
Even in simple cases, this can create some just generally hard to read code, seemingly in the pursuit of being clever.
```dm
/client/p_were(gender)
. = "was"
if (gender == PLURAL || gender == NEUTER)
. = "were"
```
Because of these problems, it is encouraged to prefer standard, explicit return statements. The above code would be best written as:
```dm
/client/p_were(gender)
if (gender == PLURAL || gender == NEUTER)
return "were"
else
return "was"
```
#### Exception: `. = ..()`
As hinted at before, `. = ..()` is *extremely* common. This will call the parent function, and preserve its return type. Code like this:
```dm
/obj/item/spoon/attack()
. = ..()
visible_message("Whack!")
```
...is completely accepted, and in fact, usually *prefered* over:
```dm
/obj/item/spoon/attack()
var/output = ..()
visible_message("Whack!")
return output
```
#### Exception: Runtime resilience
One unique property of DM is the ability for procs to error, but for code to continue. For instance, the following:
```dm
/proc/uh_oh()
CRASH("oh no!")
/proc/main()
to_chat(world, "1")
uh_oh()
to_chat(world, "2")
```
...would print both 1 *and* 2, which may be unexpected if you come from other languages.
This is where `.` provides a new useful behavior--**a proc that runtimes will return `.`**.
Meaning:
```dm
/proc/uh_oh()
. = "woah!"
CRASH("oh no!")
/proc/main()
to_chat(world, uh_oh())
```
...will print `woah!`.
For this reason, it is acceptable for `.` to be used in places where consumers can reasonably continue in the event of a runtime.
If you are using `.` in this case (or for another case that might be acceptable, other than most uses of `. = ..()`), it is still prefered that you explicitly `return .` in order to prevent both editor issues and readability/error-prone issues.
```dm
/proc/uh_oh()
. = "woah!"
if (do_something())
call_code()
if (!working_fine())
return . // Instead of `return`, we explicitly `return .`
if (some_fail_state())
CRASH("youch!")
return . // `return .` is used at the end, to signify it has been used
```
```dm
/obj/item/spoon/super_attack()
. = ..()
if (. == BIGGER_SUPER_ATTACK)
return BIGGER_SUPER_ATTACK // More readable than `.`
// Due to how common it is, most uses of `. = ..()` do not need a trailing `return .`
```
### The BYOND walk procs
BYOND has a few procs that move one atom towards/away from another, `walk()`, `walk_to()`, `walk_towards`, `walk_away()` and `walk_rand()`.
The way they pull this off, while fine for the language itself, makes a mess of our master-controller, and can cause the whole game to slow down. Do not use them.
The following is a list of procs, and their safe replacements.
* Removing something from the loop `walk(0)` -> `SSmove_manager.stop_looping()`
* Move in a direction `walk()` -> `SSmove_manager.move()`
* Move towards a thing, taking turf density into account`walk_to()` -> `SSmove_manager.move_to()`
* Move in a thing's direction, ignoring turf density `walk_towards()` -> `SSmove_manager.home_onto()` and `SSmove_manager.move_towards_legacy()`, check the documentation to see which you like better
* Move away from something, taking turf density into account `walk_away()` -> `SSmove_manager.move_away()`
* Move to a random place nearby. NOT random walk `walk_rand()` -> `SSmove_manager.move_rand()` is random walk, `SSmove_manager.move_to_rand()` is walk to a random place
### BYOND hellspawn
What follows is documentation of inconsistent or strange behavior found in our engine, BYOND.
It's listed here in the hope that it will prevent fruitless debugging in future.
#### Icon hell
Due to how they are internally represented as part of appearance, overlays and underlays which have an icon_state named the same as an icon_state on the parent object will use the parent's icon_state and look completely wrong. This has caused two bugs with underlay lighting whenever a turf had the icon_state of "transparent" or "dark" and their lighting objects also had those states - because when the lighting underlays were in those modes they would be rendered by the client to look like the icons the floor used. When adding something as an overlay or an underlay make sure it can't match icon_state names with whatever you're adding it to.
================================================
FILE: .github/guides/STYLES.md
================================================
# Style Guide
This is the style you must follow when writing code. It's important to note that large parts of the codebase do not consistently follow these rules, but this does not free you of the requirement to follow them.
1. [General Guidelines](#general-guidelines)
2. [Paths and Inheritence](#paths-and-inheritence)
3. [Variables](#variables)
4. [Procs](#procs)
5. [Things that do not matter](#things-that-do-not-matter)
## General Guidelines
### Tabs, not spaces
You must use tabs to indent your code, NOT SPACES.
Do not use tabs/spaces for indentation in the middle of a code line. Not only is this inconsistent because the size of a tab is undefined, but it means that, should the line you're aligning to change size at all, we have to adjust a ton of other code. Plus, it often time hurts readability.
```dm
// Bad
#define SPECIES_YAUTJA "yautja"
#define SPECIES_HUMAN "human"
#define SPECIES_SYNTH "synth"
// Good
#define SPECIES_YAUTJA "yautja"
#define SPECIES_HUMAN "human"
#define SPECIES_SYNTH "synth"
```
### Control statements
(if, while, for, etc)
* No control statement may 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)`)
### Operators
#### Spacing
* 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 `variable & CONSTANT` NEVER `CONSTANT & variable`. Both are valid, but the latter is confusing and nonstandard.
* Associated lists declarations must have their key value quoted if it's a string
* WRONG: `list(a = "b")`
* RIGHT: `list("a" = "b")`
### Use static instead of global
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.
### Use early returns
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.
### 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!
### 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()
````
## Paths and Inheritence
### 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
// Not our style!
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
```
### 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.
## Variables
### Use `var/name` format when declaring variables
While DM allows other ways of declaring variables, this one should be used for consistency.
### 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](./STANDARDS.md#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 anything in reagents)
// Good
for (var/datum/reagent/deadly_reagent as anything 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)
```
## Procs
### 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 complex 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
```
### When passing vars through New() or Initialize()'s arguments, use src.var
Using src.var + naming the arguments the same as the var is the most readable and intuitive way to pass arguments into a new instance's vars. The main benefit is that you do not need to give arguments odd names with prefixes and suffixes that are easily forgotten in `new()` when sending named args.
This is very bad:
```DM
/atom/thing
var/is_red
/atom/thing/Initialize(mapload, enable_red)
is_red = enable_red
/proc/make_red_thing()
new /atom/thing(null, enable_red = TRUE)
```
Future coders using this code will have to remember two differently named variables which are near-synonyms of eachother. One of them is only used in Initialize for one line.
This is bad:
```DM
/atom/thing
var/is_red
/atom/thing/Initialize(mapload, _is_red)
is_red = _is_red
/proc/make_red_thing()
new /atom/thing(null, _is_red = TRUE)
```
`_is_red` is being used to set `is_red` and yet means a random '_' needs to be appended to the front of the arg, same as all other args like this.
This is good:
```DM
/atom/thing
var/is_red
/atom/thing/Initialize(mapload, is_red)
src.is_red = is_red
/proc/make_red_thing()
new /atom/thing(null, is_red = TRUE)
```
Setting `is_red` in args is simple, and directly names the variable the argument sets.
### Prefer named arguments when the meaning is not obvious.
Pop-quiz, what does this do?
```dm
give_pizza(TRUE, 2)
```
Well, obviously the `TRUE` makes the pizza hot, and `2` is the number of toppings.
Code like this can be very difficult to read, especially since our LSP does not show argument names at this time. Because of this, you should prefer to use named arguments where the meaning is not otherwise obvious.
```dm
give_pizza(hot = TRUE, toppings = 2)
```
What is "obvious" is subjective--for instance, `give_pizza(PIZZA_HOT, toppings = 2)` is completely acceptable.
Other examples:
```dm
deal_damage(10) // Fine! The proc name makes it obvious `10` is the damage...at least it better be.
deal_damage(10, FIRE) // Also fine! `FIRE` makes it obvious the second parameter is damage type.
deal_damage(damage = 10) // Redundant, but not prohibited.
use_power(30) // Fine! `30` is obviously something like watts.
turn_on(30) // Not fine!
turn_on(power_usage = 30) // Fine!
set_invincible(FALSE) // Fine! Boolean parameters don't always need to be named. In this case, it is obvious what it means.
```
## Things that do not matter
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!
================================================
FILE: .github/maps_to_ignore.txt
================================================
chinook
corsat
ice_colony_v2
prison_station_fop
================================================
FILE: .github/ss13_genchangelog.py
================================================
'''
Usage:
$ python ss13_genchangelog.py html/changelogs/
ss13_genchangelog.py - Generate changelog from YAML.
Copyright 2013 Rob "N3X15" Nelson <nexis@7chan.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
'''
from __future__ import print_function
import yaml, os, glob, sys, re, time, argparse
from datetime import datetime, date, timedelta
from time import time
today = date.today()
fileDateFormat = "%Y-%m"
opt = argparse.ArgumentParser()
opt.add_argument('ymlDir', help='The directory of YAML changelogs we will use.')
args = opt.parse_args()
archiveDir = os.path.join(args.ymlDir, 'archive')
all_changelog_entries = {}
# Do not change the order, add to the bottom of the array if necessary
validPrefixes = [
'add',
'admin',
'balance',
'code',
'config',
'del',
'fix',
'imageadd',
'imagedel',
'imagetweak',
'mapadd',
'maptweak',
'qol',
'refactor',
'server',
'soundadd',
'sounddel',
'soundtweak',
'spellcheck',
'ui'
]
def dictToTuples(inp):
return [(k, v) for k, v in inp.items()]
old_changelog_cache = os.path.join(args.ymlDir, '.all_changelog.yml')
if os.path.isfile(old_changelog_cache):
try:
print('Reading old changelog cache...')
data = {}
with open(old_changelog_cache,encoding='utf-8') as f:
(_, all_changelog_entries) = yaml.load_all(f, Loader=yaml.SafeLoader)
# Categorize changes by year and month
for _date in all_changelog_entries.keys():
ty = type(_date).__name__
formattedDate = _date.strftime(fileDateFormat)
if not formattedDate in data:
data[formattedDate] = {}
data[formattedDate][_date] = all_changelog_entries[_date]
# Write files with changes by year and month
for month in data.keys():
print("Writing " + month + ".yml...")
if not os.path.exists(archiveDir):
os.makedirs(archiveDir)
currentFile = os.path.join(archiveDir, month + '.yml')
with open(currentFile, 'w', encoding='utf-8') as f:
yaml.dump(data[month], f, default_flow_style=False)
# Remove the old changelog cache, as we won't use it anymore
print("Removing old changelog cache...")
os.remove(old_changelog_cache)
old_changelog_html = os.path.join(args.ymlDir, '..', 'changelog.html')
if os.path.isfile(old_changelog_html):
print("Removing old changelog html...")
os.remove(old_changelog_html)
except Exception as e:
print("Failed to read old changelog cache:")
print(e, file=sys.stderr)
print('Reading changelogs...')
for fileName in glob.glob(os.path.join(args.ymlDir, "*.yml")):
name, ext = os.path.splitext(os.path.basename(fileName))
if name.startswith('.'): continue
if name == 'example': continue
fileName = os.path.abspath(fileName)
formattedDate = today.strftime(fileDateFormat)
monthFile = os.path.join(archiveDir, formattedDate + '.yml')
print(' Reading {}...'.format(fileName))
cl = {}
with open(fileName, 'r',encoding='utf-8') as f:
cl = yaml.load(f, Loader=yaml.SafeLoader)
currentEntries = {}
if os.path.exists(monthFile):
with open(monthFile,'r',encoding='utf-8') as f:
currentEntries = yaml.load(f, Loader=yaml.SafeLoader)
if today not in currentEntries:
currentEntries[today] = {}
author_entries = currentEntries[today].get(cl['author'], [])
if len(cl['changes']):
new = 0
for change in cl['changes']:
if change not in author_entries:
(change_type, _) = dictToTuples(change)[0]
if change_type not in validPrefixes:
print(' {0}: Invalid prefix {1}'.format(fileName, change_type), file=sys.stderr)
author_entries += [change]
new += 1
currentEntries[today][cl['author']] = author_entries
if new > 0:
print(' Added {0} new changelog entries.'.format(new))
if cl.get('delete-after', False):
if os.path.isfile(fileName):
print(' Deleting {0} (delete-after set)...'.format(fileName))
os.remove(fileName)
with open(monthFile, 'w', encoding='utf-8') as f:
yaml.dump(currentEntries, f, default_flow_style=False)
================================================
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: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Checkout
uses: actions/checkout@v5
with:
token: ${{ steps.app-token-generation.outputs.token }}
- 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: ${{ steps.app-token-generation.outputs.token }}
================================================
FILE: .github/workflows/autowiki.yml
================================================
name: Autowiki
on:
schedule:
- cron: "5 4 * * *"
workflow_dispatch:
permissions:
contents: read
jobs:
autowiki:
runs-on: ubuntu-latest
steps:
- name: "Check for AUTOWIKI_USERNAME"
id: secrets_set
env:
ENABLER_SECRET: ${{ secrets.AUTOWIKI_USERNAME }}
run: |
unset SECRET_EXISTS
if [ -n "$ENABLER_SECRET" ]; then SECRET_EXISTS=true ; fi
echo "SECRETS_ENABLED=$SECRET_EXISTS" >> $GITHUB_OUTPUT
- name: Checkout
if: steps.secrets_set.outputs.SECRETS_ENABLED
uses: actions/checkout@v5
- name: Install BYOND
if: steps.secrets_set.outputs.SECRETS_ENABLED
uses: ./.github/actions/restore_or_install_byond
- name: Install rust-g
if: steps.secrets_set.outputs.SECRETS_ENABLED
run: |
sudo dpkg --add-architecture i386
sudo apt update || true
sudo apt install -o APT::Immediate-Configure=false zlib1g-dev:i386 libssl-dev:i386 curl:i386
bash tools/ci/install_rust_g.sh
- name: Compile and generate Autowiki files
if: steps.secrets_set.outputs.SECRETS_ENABLED
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build.sh --ci autowiki
- name: Run Autowiki
if: steps.secrets_set.outputs.SECRETS_ENABLED
env:
USERNAME: ${{ secrets.AUTOWIKI_USERNAME }}
PASSWORD: ${{ secrets.AUTOWIKI_PASSWORD }}
run: |
cd tools/autowiki
npm install
cd ../..
node tools/autowiki/autowiki.js data/autowiki_edits.txt data/autowiki_files/
================================================
FILE: .github/workflows/ci_suite.yml
================================================
name: CI Suite
on:
pull_request:
branches:
- master
merge_group:
jobs:
run_linters:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Run Linters
runs-on: ubuntu-latest
timeout-minutes: 30
concurrency:
group: run_linters-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- 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 Bun
uses: ./.github/actions/setup_bun
- 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('dependencies.sh')}}
restore-keys: |
${{ runner.os }}-rust-
- name: Install Tools
run: |
pip3 install setuptools
bash tools/ci/install_spaceman_dmm.sh dreamchecker
cargo install ripgrep --features pcre2
tools/bootstrap/python -c ''
- name: Run Linters
run: |
bash tools/ci/check_filedirs.sh colonialmarines.dme
bash tools/ci/check_changelogs.sh
bash tools/ci/check_grep.sh
bash tools/ci/check_misc.sh
tools/bootstrap/python tools/ci/validate_dme.py < colonialmarines.dme
tools/bootstrap/python -m tools.maplint.source --github
tools/build/build.sh --ci lint tgui-test
tools/bootstrap/python -m dmi.test
tools/bootstrap/python -m mapmerge2.dmm_test
~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1
- name: Annotate Lints
uses: yogstation13/DreamAnnotate@v2
if: success() || failure()
with:
outputFile: output-annotations.txt
odlint:
name: Lint with OpenDream
runs-on: ubuntu-22.04
steps:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 9
- uses: actions/checkout@v4
- uses: robinraju/release-downloader@v1.9
with:
repository: "OpenDreamProject/OpenDream"
tag: "latest"
fileName: "DMCompiler_linux-x64.tar.gz"
extract: true
- run: ./DMCompiler_linux-x64/DMCompiler --suppress-unimplemented colonialmarines.dme
compile_all_maps:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Compile Maps
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- name: Setup Bun
uses: ./.github/actions/setup_bun
- name: Restore BYOND from Cache
uses: ./.github/actions/restore_or_install_byond
- name: Install curl
run: |
sudo dpkg --add-architecture i386
sudo apt update || true
sudo apt install -o APT::Immediate-Configure=false curl:i386
- name: Compile All Maps
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build.sh --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS -I"loop_checks"
find_all_maps:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Find Maps to Test
runs-on: ubuntu-latest
outputs:
maps: ${{ steps.map_finder.outputs.maps }}
alternate_tests: ${{ steps.alternate_test_finder.outputs.alternate_tests }}
concurrency:
group: find_all_maps-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v5
- name: Find Maps
id: map_finder
run: |
shopt -s extglob
echo "$(ls -mw0 maps/!(*override*).json)" > maps_output.txt
sed -i -e s+maps/+\"+g -e s+.json+\"+g maps_output.txt
echo "Ignored Maps: $(cat .github/maps_to_ignore.txt)"
cat .github/maps_to_ignore.txt | sed -r 's/\s*//g' | xargs -i sed -ri 's/(, "{}")|("{}", )//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>.+)$")]' .github/alternate_byond_versions.txt)
echo "alternate_tests=$ALTERNATE_TESTS_JSON" >> $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: Unit Tests
needs: [find_all_maps]
strategy:
fail-fast: false
matrix:
map: ${{ fromJSON(needs.find_all_maps.outputs.maps).paths }}
concurrency:
group: run_all_tests-${{ github.head_ref || github.run_id }}-${{ matrix.map }}
cancel-in-progress: true
uses: ./.github/workflows/run_unit_tests.yml
with:
map: ${{ matrix.map }}
run_alternate_tests:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]' )
name: Alternate Tests
needs: [find_all_maps]
strategy:
fail-fast: false
matrix:
setup: ${{ fromJSON(needs.find_all_maps.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_unit_tests.yml
with:
map: ${{ matrix.setup.map }}
major: ${{ matrix.setup.major }}
minor: ${{ matrix.setup.minor }}
check_alternate_tests:
if: ( !contains(github.event.head_commit.message, '[ci skip]') && needs.find_all_maps.outputs.alternate_tests != '[]' )
name: Check Alternate Tests
needs: [run_alternate_tests]
runs-on: ubuntu-latest
steps:
- run: echo Alternate tests passed.
test_windows:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
name: Windows Build
runs-on: windows-latest
timeout-minutes: 30
concurrency:
group: test_windows-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v5
- name: Setup Bun
uses: ./.github/actions/setup_bun
- 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
- name: Restore BYOND cache
uses: actions/cache@v4
with:
path: C:\\byond
key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }}
- name: Compile
run: pwsh tools/ci/build.ps1
env:
DM_EXE: "C:\\byond\\bin\\dm.exe"
================================================
FILE: .github/workflows/compile_changelogs.yml
================================================
name: Compile changelogs
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
compile:
name: "Compile changelogs"
runs-on: ubuntu-latest
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: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Work around setup-python cache issue
# see https://github.com/actions/setup-python/issues/807
if: hashFiles('**/requirements.txt', '**/pyproject.toml') == ''
shell: bash
run: touch requirements.txt
- name: "Setup python"
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/setup-python@v6
with:
python-version: '3.x'
cache: 'pip'
- 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@v5
with:
fetch-depth: 25
persist-credentials: false
token: ${{ steps.app-token-generation.outputs.token }}
- name: "Compile"
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python .github/ss13_genchangelog.py html/changelogs
- name: Commit
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
git config --local user.email "${{ secrets.APP_PUBLIC_ID }}+${{ secrets.APP_PUBLIC_NAME }}[bot]@users.noreply.github.com"
git config --local user.name "${{ secrets.APP_PUBLIC_NAME }}[bot]"
git pull origin master
git add html/changelogs/archive
git commit -m "Automatic changelog compile [ci skip]" -a || true
- 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 }}
================================================
FILE: .github/workflows/conflicts.yml
================================================
name: 'Check for merge conflicts'
on:
push:
branches:
- master
pull_request_target:
types: [ready_for_review, opened, synchronize, reopened]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: eps1lon/actions-label-merge-conflict@v3.0.3
with:
dirtyLabel: 'Merge Conflict'
commentOnDirty: "This pull request has conflicts, please resolve those before we can evaluate the pull request."
commentOnClean: "Conflicts have been resolved. A maintainer will review the pull request shortly."
repoToken: ${{ secrets.BOT_TOKEN_CM || secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/generate_web_assets.yml
================================================
name: Generate web assets
on:
push:
branches:
- master
jobs:
generate_static_assets:
if: ( !contains(github.event.head_commit.message, '[ci skip]') )
runs-on: ubuntu-latest
concurrency: gen-assets
steps:
- uses: actions/checkout@v5
- name: Setup cache
uses: actions/cache@v4
with:
path: ~/SpacemanDMM
key: ${{ runner.os }}-spacemandmm-${{ hashFiles('dependencies.sh') }}
restore-keys: |
${{ runner.os }}-spacemandmm-
- name: Install SpacemanDMM
run: bash tools/ci/install_spaceman_dmm.sh dmdoc
- name: Generate documentation and static assets
run: |
~/dmdoc
touch dmdoc/.nojekyll
echo docs.cm-ss13.com > dmdoc/CNAME
mv tgui/public/ dmdoc/assets
- 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/labeler.yml
================================================
name: Labeling and Verification
on:
pull_request_target:
types: [opened, reopened, synchronize, edited]
jobs:
label:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
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: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Get The Script
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
wget "https://raw.githubusercontent.com/${{ github.repository }}/master/.github/add_labels.py"
- name: Work around setup-python cache issue
# see https://github.com/actions/setup-python/issues/807
if: hashFiles('**/requirements.txt', '**/pyproject.toml') == ''
shell: bash
run: touch requirements.txt
- name: Set up Python
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: actions/setup-python@v6
with:
python-version: 3.8
cache: 'pip'
- name: Install dependencies
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python -m pip install --upgrade pip
python -m pip install pygithub
sudo apt-get install dos2unix
- name: Add and verify labels
if: steps.value_holder.outputs.ACTIONS_ENABLED
run: |
python add_labels.py
env:
REPO: ${{ github.repository }}
TOKEN: ${{ steps.app-token-generation.outputs.token }}
PR_NUMBER: ${{ github.event.number }}
- name: size-label
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: "pascalgn/size-label-action@v0.5.5"
env:
GITHUB_TOKEN: ${{ steps.app-token-generation.outputs.token }}
IGNORED: "**/bun.lock"
with:
sizes: >
{
"0": "XS",
"20": "S",
"50": "M",
"200": "L",
"800": "XL",
"2000": "XXL"
}
================================================
FILE: .github/workflows/release.yml
================================================
name: Build and Release
on:
push:
branches:
- master
concurrency:
group: build-and-release
cancel-in-progress: true
jobs:
build_and_release:
name: Build and Release
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- name: Setup Bun
uses: ./.github/actions/setup_bun
- name: Restore BYOND from Cache
uses: ./.github/actions/restore_or_install_byond
- name: Install curl
run: |
sudo dpkg --add-architecture i386
sudo apt update || true
sudo apt install -o APT::Immediate-Configure=false curl:i386
- name: Build
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build.sh
- name: Install zstd
run: sudo apt install -y zstd
- name: Create compressed archive
run: |
tar --exclude='./icons' --exclude='./sound' --exclude='./.git' --exclude='node_modules' --exclude='./code' --exclude='./tools' -cvf - . | zstd -19 -T0 -o colonialmarines-build.tar.zst
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: build-${{ github.sha }}
name: Build ${{ github.sha }}
body: Automated build from commit ${{ github.sha }}
files: |
colonialmarines-build.tar.zst
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
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@v5
- 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/rerun_flaky_tests.yml
================================================
name: Rerun/Report Flaky Tests
on:
workflow_run:
workflows: [CI Suite]
types:
- completed
jobs:
rerun_flaky_tests:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.run_attempt == 1 }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Rerun flaky tests
uses: actions/github-script@v6
with:
script: |
const { rerunFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js')
await rerunFlakyTests({ github, context })
report_flaky_tests:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.run_attempt == 2 }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Report flaky tests
uses: actions/github-script@v6
with:
script: |
const { reportFlakyTests } = await import('${{ github.workspace }}/tools/pull_request_hooks/rerunFlakyTests.js')
await reportFlakyTests({ github, context })
================================================
FILE: .github/workflows/run_approval.yml
================================================
name: Automatic Approve Workflows
on:
schedule:
- cron: "*/10 * * * *"
jobs:
automatic-approve:
name: Automatic Approve Workflows
runs-on: ubuntu-latest
steps:
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Automatic Approve
uses: mheap/automatic-approve-action@v1
with:
token: ${{ steps.app-token-generation.outputs.token }}
workflows: "ci_suite.yml"
dangerous_files: "build.bat"
================================================
FILE: .github/workflows/run_unit_tests.yml
================================================
# This is a reusable workflow to run unit 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 Unit Tests
on:
workflow_call:
inputs:
map:
required: true
type: string
major:
required: false
type: string
minor:
required: false
type: string
jobs:
run_unit_tests:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@v5
- name: Restore BYOND from Cache
uses: ./.github/actions/restore_or_install_byond
with:
major: ${{ inputs.major }}
minor: ${{ inputs.minor }}
- name: Setup Bun
uses: ./.github/actions/setup_bun
- name: Install rust-g
run: |
sudo dpkg --add-architecture i386
sudo apt update || true
sudo apt install -o APT::Immediate-Configure=false zlib1g-dev:i386 libssl-dev:i386 curl:i386
bash tools/ci/install_rust_g.sh
- name: Compile Tests
run: |
source $HOME/BYOND/byond/bin/byondsetup
tools/build/build.sh --ci dm -DCIBUILDING -DANSICOLORS -Werror -I"loop_checks"
- name: Run Tests
run: |
source $HOME/BYOND/byond/bin/byondsetup
bash tools/ci/run_server.sh ${{ inputs.map }}
================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
steps:
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- uses: actions/stale@v4
with:
repo-token: ${{ steps.app-token-generation.outputs.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 ~ 7 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: 7
stale-pr-label: 'Stale'
days-before-issue-stale: -1
stale-issue-label: 'Cleanup Flagged'
remove-issue-stale-when-updated: false
exempt-pr-labels: 'Stale Exempt,Good First PR'
operations-per-run: 300
================================================
FILE: .github/workflows/update_tgs_dmapi.yml
================================================
name: Update TGS DMAPI
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
update-dmapi:
runs-on: ubuntu-latest
name: Update the TGS DMAPI
steps:
- name: Generate App Token
id: app-token-generation
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Clone Repo
uses: actions/checkout@v5
with:
token: ${{ steps.app-token-generation.outputs.token }}
- 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
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 "${{ secrets.APP_PUBLIC_NAME }}[bot]"
git config user.email "${{ secrets.APP_PUBLIC_ID }}+${{ secrets.APP_PUBLIC_NAME }}[bot]@users.noreply.github.com"
git add .
git commit -m 'Update TGS DMAPI'
git push -f -u origin tgs-dmapi-update
- 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 breaking or unimplemented changes before merging."
pr_label: "Tools"
pr_allow_empty: false
github_token: ${{ steps.app-token-generation.outputs.token }}
================================================
FILE: .gitignore
================================================
#ignore misc BYOND files
Thumbs.db
*.log
*.int
*.rsc
*.m.dme
*.rej
*.dmb
*.lk
*.backup
*.db
*.db-shm
*.db-wal
data/
cfg/
!cfg/.keep
tmp/
dmdoc/
tools/Runtime Condenser/Input.txt
tools/Runtime Condenser/Output.txt
sound/music/*.ogg
sound/music/walkman/*/*.ogg
sound/music/walkman/*.txt
icons/custom/*
maps/**/backup
maps/templates.dm
*.before
__pycache__
test_environment.txt
.cache
# byond-tracy backend, not shipped with the codebase so it shouldn't be maintained
prof.dll
libprof.so
# OpenDream compatibility stuff
colonialmarines.json
================================================
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
# Avoid running on any bundles.
/tgui/public/**/*
================================================
FILE: .tgs.yml
================================================
version: 1
byond: "515.1627"
static_files:
- name: config
- name: data
linux_scripts:
PreCompile.sh: tools/tgs_scripts/PreCompile.sh
WatchdogLaunch.sh: tools/tgs_scripts/WatchdogLaunch.sh
InstallDeps.sh: tools/tgs_scripts/InstallDeps.sh
windows_scripts:
PreCompile.bat: tools/tgs_scripts/PreCompile.bat
security: Trusted
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"cmss13-devs.cm-extpack"
]
}
================================================
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 DreamSeeker (runtime map)",
"preLaunchTask": "Build All (runtime map)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (quickstart)",
"preLaunchTask": "Build All (quickstart)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (testing)",
"preLaunchTask": "Build All (testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (runtime map + quickstart)",
"preLaunchTask": "Build All (runtime map + quickstart)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (runtime map + testing)",
"preLaunchTask": "Build All (runtime map + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (quickstart + testing)",
"preLaunchTask": "Build All (quickstart + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamSeeker (runtime map + quickstart + testing)",
"preLaunchTask": "Build All (runtime map + quickstart + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}"
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon",
"preLaunchTask": "Build All",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (runtime map)",
"preLaunchTask": "Build All (runtime map)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (quickstart)",
"preLaunchTask": "Build All (quickstart)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (testing)",
"preLaunchTask": "Build All (testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (runtime map + quickstart)",
"preLaunchTask": "Build All (runtime map + quickstart)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (runtime map + testing)",
"preLaunchTask": "Build All (runtime map + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (quickstart + testing)",
"preLaunchTask": "Build All (quickstart + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
},
{
"type": "byond",
"request": "launch",
"name": "Launch DreamDaemon (runtime map + quickstart + testing)",
"preLaunchTask": "Build All (runtime map + quickstart + testing)",
"dmb": "${workspaceFolder}/${command:CurrentDMB}",
"dreamDaemon": true
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"eslint.workingDirectories": ["./tgui"],
"search.exclude": {
"**/node_modules": true
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"files.eol": "\n",
"files.insertFinalNewline": true,
"gitlens.advanced.blame.customArguments": ["-w"],
"tgstationTestExplorer.project.resultsType": "json",
"[javascript]": {
"editor.rulers": [80],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[javascriptreact]": {
"editor.rulers": [80],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[typescript]": {
"editor.rulers": [80],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[typescriptreact]": {
"editor.rulers": [80],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[scss]": {
"editor.rulers": [80],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"workbench.editorAssociations": {
"*.dmi": "dmiEditor.dmiEditor"
},
"tgstationTestExplorer.project.DMEName": "colonialmarines.dme",
"dreammaker.tickOnCreate": true,
"dreammaker.reparseOnSave": true,
"dreammaker.autoUpdate": true,
"accessibility.verbosity.inlineChat": false,
"accessibility.verbosity.panelChat": false,
"ansible.lightspeed.suggestions.waitWindow": 360000,
"chat.agent.enabled": false,
"chat.agent.maxRequests": 0,
"chat.commandCenter.enabled": false,
"chat.detectParticipant.enabled": false,
"chat.disableAIFeatures": true,
"chat.extensionTools.enabled": false,
"chat.focusWindowOnConfirmation": false,
"chat.implicitContext.enabled": {
"panel": "never"
},
"chat.implicitContext.suggestedContext": false,
"chat.instructionsFilesLocations": {
".github/instructions": false
},
"chat.mcp.access": "none",
"chat.mcp.discovery.enabled": {
"claude-desktop": false,
"windsurf": false,
"cursor-global": false,
"cursor-workspace": false
},
"chat.promptFiles": false,
"chat.promptFilesLocations": {
".github/prompts": false
},
"chat.sendElementsToChat.attachCSS": false,
"chat.sendElementsToChat.attachImages": false,
"chat.sendElementsToChat.enabled": false,
"chat.setupFromDialog": false,
"chat.showAgentSessionsViewDescription": false,
"chat.tools.todos.showWidget": false,
"chat.useAgentsMdFile": false,
"chat.useFileStorage": false,
"dataWrangler.experiments.copilot.enabled": false,
"github.copilot.editor.enableAutoCompletions": false,
"github.copilot.editor.enableCodeActions": false,
"github.copilot.enable": false,
"github.copilot.nextEditSuggestions.enabled": false,
"github.copilot.renameSuggestions.triggerAutomatically": false,
"githubPullRequests.codingAgent.enabled": false,
"githubPullRequests.experimental.chat": false,
"gitlab.duoChat.enabled": false,
"mcp": {
"inputs": [],
"servers": {}
},
"notebook.experimental.generate": false,
"python.analysis.aiCodeActions": {
"convertFormatString": false,
"convertLambdaToNamedFunction": false,
"generateDocstring": false,
"generateSymbol": false,
"implementAbstractClasses": false
},
"python.experiments.enabled": false,
"redhat.telemetry.enabled": false,
"remote.SSH.experimental.chat": false,
"telemetry.feedback.enabled": false,
"terminal.integrated.initialHint": false,
"workbench.editor.empty.hint": "hidden",
"workbench.settings.showAISearchToggle": false,
"C_Cpp.copilotHover": "disabled",
"chat.tools.terminal.enableAutoApprove": false,
"chat.undoRequests.restoreInput": false,
"chat.math.enabled": false,
"chat.emptyChatState.enabled": false,
"chat.agent.thinking.generateTitles": false,
"githubPullRequests.codingAgent.codeLens": false,
"chat.viewSessions.enabled": false,
"chat.extensionUnification.enabled": false,
"githubPullRequests.codingAgent.autoCommitAndPush": false,
"githubPullRequests.codingAgent.uiIntegration": false,
"chat.useNestedAgentsMdFiles": false,
"chat.tools.global.autoApprove": false,
"chat.mcp.gallery.enabled": false,
"mermaid-chat.enabled": false,
"githubPullRequests.experimental.useQuickChat": false,
"chat.useAgentSkills": false
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"type": "process",
"command": "tools/build/build.sh",
"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.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DRUNTIME_MAP"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (runtime map)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DQUICK_START"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (quickstart)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DTESTING"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (testing)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DRUNTIME_MAP", "-DQUICK_START"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (runtime map + quickstart)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DTESTING", "-DQUICK_START"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (quickstart + quickstart)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DRUNTIME_MAP", "-DTESTING"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (runtime map + testing)"
},
{
"type": "process",
"command": "tools/build/build.sh",
"windows": {
"command": ".\\tools\\build\\build.bat",
"args": ["-DRUNTIME_MAP", "-DTESTING", "-DQUICK_START"]
},
"options": {
"env": {
"DM_EXE": "${config:dreammaker.byondPath}"
}
},
"problemMatcher": [
"$dreammaker",
"$tsc",
"$eslint-stylish"
],
"group": {
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"label": "Build All (runtime map + quickstart + testing)"
},
{
"type": "dreammaker",
"dme": "colonialmarines.dme",
"problemMatcher": [
"$dreammaker"
],
"group": "build",
"label": "dm: build - colonialmarines.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/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: Dockerfile
================================================
# TODO: Use an .envfile and make everyone use it instead
ARG BYOND_BASE_IMAGE=ubuntu:focal
ARG UTILITY_BASE_IMAGE=alpine:3
ARG PROJECT_NAME=colonialmarines
ARG BYOND_MAJOR=514
ARG BYOND_MINOR=1575
ARG NODE_VERSION=16
ARG BYOND_UID=1000
# BUILD_TYPE=standalone to build with juke in docker
# BUILD_TYPE=deploy to directly use already built local files
# This will only work properly with later docker version! If it doesn't try launching with DOCKER_BUILDKIT=1 env variable
ARG BUILD_TYPE=deploy
# Base BYOND image
FROM ${BYOND_BASE_IMAGE} AS byond
SHELL ["/bin/bash", "-c"]
RUN dpkg --add-architecture i386
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y make man curl unzip libssl-dev libssl-dev:i386 libz-dev:i386 lib32stdc++6 python3-minimal
RUN update-alternatives --install /usr/local/bin/python python /usr/bin/python3 20
ARG BYOND_MAJOR
ARG BYOND_MINOR
ARG BYOND_DOWNLOAD_URL=http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip
RUN curl ${BYOND_DOWNLOAD_URL} -o byond.zip -A "CMSS13/1.0 Continuous Integration"\
&& unzip byond.zip \
&& rm -rf byond.zip
RUN DEBIAN_FRONTEND=noninteractive apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /byond
RUN make here
# DM Build Env to be used in particular with juke if not running it locally
FROM byond AS cm-builder
COPY tools/docker/nodesource.gpg /usr/share/keyrings/nodesource.gpg
COPY tools/docker/nodesource.list /etc/apt/sources.list.d/
COPY tools/docker/apt-node-prefs /etc/apt/preferences/
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y nodejs bun g++-multilib && apt-get clean && rm -rf /var/lib/apt/lists/*
# TGUI deps pre-caching, thin out files to serve as basis for layer caching
FROM node:${NODE_VERSION}-buster AS tgui-thin
COPY tgui /tgui
RUN rm -rf docs public
RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -print | xargs rm -rf
# TGUI deps cache layer, actually gets the deps
FROM node:${NODE_VERSION}-buster AS tgui-deps
COPY --from=tgui-thin tgui /tgui
WORKDIR /tgui
RUN bun install --immutable
# Game source cache stage: remove irrelevant dupes not dockerignored to prevent cache misses
FROM ${UTILITY_BASE_IMAGE} AS source-cache
COPY . /src
WORKDIR /src
RUN rm -rf *.rsc *.dmb
# Stage actually building with juke if needed
FROM cm-builder AS cm-build-standalone
ARG PROJECT_NAME
COPY --from=source-cache /src /build
WORKDIR /build
COPY --from=tgui-deps /tgui/node_modules tgui/node_modules
RUN ./tools/docker/juke-build.sh
# Helper Stage just packaging locally provided resources
FROM ${UTILITY_BASE_IMAGE} AS cm-build-deploy
ARG PROJECT_NAME
RUN mkdir /build
WORKDIR /build
COPY tgui/public tgui/public
COPY ${PROJECT_NAME}.dmb ${PROJECT_NAME}.dmb
COPY ${PROJECT_NAME}.rsc ${PROJECT_NAME}.rsc
# Alias for using either of the above
FROM cm-build-${BUILD_TYPE} AS build-results
# Deployment stage, piecing a workable game image
FROM byond AS deploy
ARG PROJECT_NAME
ARG BYOND_UID
ENV DREAMDAEMON_PORT=1400
RUN mkdir -p /cm/data
RUN curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /cm/ytdl
COPY tools/docker/runner-entrypoint.sh /entrypoint.sh
RUN chmod a+x /entrypoint.sh /cm/ytdl
RUN useradd -u ${BYOND_UID} -ms /bin/bash byond
WORKDIR /cm
COPY librust_g.so .
COPY config config
COPY map_config map_config
COPY strings strings
COPY nano nano
COPY maps maps
COPY html html
COPY sound sound
COPY icons icons
COPY --from=build-results /build/tgui/public tgui/public/
COPY --from=build-results /build/${PROJECT_NAME}.dmb application.dmb
COPY --from=build-results /build/${PROJECT_NAME}.rsc application.rsc
RUN chown -R byond:byond /byond /cm /entrypoint.sh
USER ${BYOND_UID}
ENTRYPOINT [ "/entrypoint.sh" ]
================================================
FILE: LICENSE-AGPLv3.txt
================================================
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://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, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
================================================
FILE: LICENSE-CC-BY-SA-3.0.txt
================================================
Creative Commons Legal Code
Attribution-ShareAlike 3.0 Unported
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
CONDITIONS.
1. Definitions
a. "Adaptation" means a work based upon the Work, or upon the Work and
other pre-existing works, such as a translation, adaptation,
derivative work, arrangement of music or other alterations of a
literary or artistic work, or phonogram or performance and includes
cinematographic adaptations or any other form in which the Work may be
recast, transformed, or adapted including in any form recognizably
derived from the original, except that a work that constitutes a
Collection will not be considered an Adaptation for the purpose of
this License. For the avoidance of doubt, where the Work is a musical
work, performance or phonogram, the synchronization of the Work in
timed-relation with a moving image ("synching") will be considered an
Adaptation for the purpose of this License.
b. "Collection" means a collection of literary or artistic works, such as
encyclopedias and anthologies, or performances, phonograms or
broadcasts, or other works or subject matter other than works listed
in Section 1(f) below, which, by reason of the selection and
arrangement of their contents, constitute intellectual creations, in
which the Work is included in its entirety in unmodified form along
with one or more other contributions, each constituting separate and
independent works in themselves, which together are assembled into a
collective whole. A work that constitutes a Collection will not be
considered an Adaptation (as defined below) for the purposes of this
License.
c. "Creative Commons Compatible License" means a license that is listed
at https://creativecommons.org/compatiblelicenses that has been
approved by Creative Commons as being essentially equivalent to this
License, including, at a minimum, because that license: (i) contains
terms that have the same purpose, meaning and effect as the License
Elements of this License; and, (ii) explicitly permits the relicensing
of adaptations of works made available under that license under this
License or a Creative Commons jurisdiction license with the same
License Elements as this License.
d. "Distribute" means to make available to the public the original and
copies of the Work or Adaptation, as appropriate, through sale or
other transfer of ownership.
e. "License Elements" means the following high-level license attributes
as selected by Licensor and indicated in the title of this License:
Attribution, ShareAlike.
f. "Licensor" means the individual, individuals, entity or entities that
offer(s) the Work under the terms of this License.
g. "Original Author" means, in the case of a literary or artistic work,
the individual, individuals, entity or entities who created the Work
or if no individual or entity can be identified, the publisher; and in
addition (i) in the case of a performance the actors, singers,
musicians, dancers, and other persons who act, sing, deliver, declaim,
play in, interpret or otherwise perform literary or artistic works or
expressions of folklore; (ii) in the case of a phonogram the producer
being the person or legal entity who first fixes the sounds of a
performance or other sounds; and, (iii) in the case of broadcasts, the
organization that transmits the broadcast.
h. "Work" means the literary and/or artistic work offered under the terms
of this License including without limitation any production in the
literary, scientific and artistic domain, whatever may be the mode or
form of its expression including digital form, such as a book,
pamphlet and other writing; a lecture, address, sermon or other work
of the same nature; a dramatic or dramatico-musical work; a
choreographic work or entertainment in dumb show; a musical
composition with or without words; a cinematographic work to which are
assimilated works expressed by a process analogous to cinematography;
a work of drawing, painting, architecture, sculpture, engraving or
lithography; a photographic work to which are assimilated works
expressed by a process analogous to photography; a work of applied
art; an illustration, map, plan, sketch or three-dimensional work
relative to geography, topography, architecture or science; a
performance; a broadcast; a phonogram; a compilation of data to the
extent it is protected as a copyrightable work; or a work performed by
a variety or circus performer to the extent it is not otherwise
considered a literary or artistic work.
i. "You" means an individual or entity exercising rights under this
License who has not previously violated the terms of this License with
respect to the Work, or who has received express permission from the
Licensor to exercise rights under this License despite a previous
violation.
j. "Publicly Perform" means to perform public recitations of the Work and
to communicate to the public those public recitations, by any means or
process, including by wire or wireless means or public digital
performances; to make available to the public Works in such a way that
members of the public may access these Works from a place and at a
place individually chosen by them; to perform the Work to the public
by any means or process and the communication to the public of the
performances of the Work, including by public digital performance; to
broadcast and rebroadcast the Work by any means including signs,
sounds or images.
k. "Reproduce" means to make copies of the Work by any means including
without limitation by sound or visual recordings and the right of
fixation and reproducing fixations of the Work, including storage of a
protected performance or phonogram in digital form or other electronic
medium.
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
limit, or restrict any uses free from copyright or rights arising from
limitations or exceptions that are provided for in connection with the
copyright protection under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License,
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
perpetual (for the duration of the applicable copyright) license to
exercise the rights in the Work as stated below:
a. to Reproduce the Work, to incorporate the Work into one or more
Collections, and to Reproduce the Work as incorporated in the
Collections;
b. to create and Reproduce Adaptations provided that any such Adaptation,
including any translation in any medium, takes reasonable steps to
clearly label, demarcate or otherwise identify that changes were made
to the original Work. For example, a translation could be marked "The
original work was translated from English to Spanish," or a
modification could indicate "The original work has been modified.";
c. to Distribute and Publicly Perform the Work including as incorporated
in Collections; and,
d. to Distribute and Publicly Perform Adaptations.
e. For the avoidance of doubt:
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme cannot be waived, the Licensor
reserves the exclusive right to collect such royalties for any
exercise by You of the rights granted under this License;
ii. Waivable Compulsory License Schemes. In those jurisdictions in
which the right to collect royalties through any statutory or
compulsory licensing scheme can be waived, the Licensor waives the
exclusive right to collect such royalties for any exercise by You
of the rights granted under this License; and,
iii. Voluntary License Schemes. The Licensor waives the right to
collect royalties, whether individually or, in the event that the
Licensor is a member of a collecting society that administers
voluntary licensing schemes, via that society, from any exercise
by You of the rights granted under this License.
The above rights may be exercised in all media and formats whether now
known or hereafter devised. The above rights include the right to make
such modifications as are technically necessary to exercise the rights in
other media and formats. Subject to Section 8(f), all rights not expressly
granted by Licensor are hereby reserved.
4. Restrictions. The license granted in Section 3 above is expressly made
subject to and limited by the following restrictions:
a. You may Distribute or Publicly Perform the Work only under the terms
of this License. You must include a copy of, or the Uniform Resource
Identifier (URI) for, this License with every copy of the Work You
Distribute or Publicly Perform. You may not offer or impose any terms
on the Work that restrict the terms of this License or the ability of
the recipient of the Work to exercise the rights granted to that
recipient under the terms of the License. You may not sublicense the
Work. You must keep intact all notices that refer to this License and
to the disclaimer of warranties with every copy of the Work You
Distribute or Publicly Perform. When You Distribute or Publicly
Perform the Work, You may not impose any effective technological
measures on the Work that restrict the ability of a recipient of the
Work from You to exercise the rights granted to that recipient under
the terms of the License. This Section 4(a) applies to the Work as
incorporated in a Collection, but this does not require the Collection
apart from the Work itself to be made subject to the terms of this
License. If You create a Collection, upon notice from any Licensor You
must, to the extent practicable, remove from the Collection any credit
as required by Section 4(c), as requested. If You create an
Adaptation, upon notice from any Licensor You must, to the extent
practicable, remove from the Adaptation any credit as required by
Section 4(c), as requested.
b. You may Distribute or Publicly Perform an Adaptation only under the
terms of: (i) this License; (ii) a later version of this License with
the same License Elements as this License; (iii) a Creative Commons
jurisdiction license (either this or a later license version) that
contains the same License Elements as this License (e.g.,
Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible
License. If you license the Adaptation under one of the licenses
mentioned in (iv), you must comply with the terms of that license. If
you license the Adaptation under the terms of any of the licenses
mentioned in (i), (ii) or (iii) (the "Applicable License"), you must
comply with the terms of the Applicable License generally and the
following provisions: (I) You must include a copy of, or the URI for,
the Applicable License with every copy of each Adaptation You
Distribute or Publicly Perform; (II) You may not offer or impose any
terms on the Adaptation that restrict the terms of the Applicable
License or the ability of the recipient of the Adaptation to exercise
the rights granted to that recipient under the terms of the Applicable
License; (III) You must keep intact all notices that refer to the
Applicable License and to the disclaimer of warranties with every copy
of the Work as included in the Adaptation You Distribute or Publicly
Perform; (IV) when You Distribute or Publicly Perform the Adaptation,
You may not impose any effective technological measures on the
Adaptation that restrict the ability of a recipient of the Adaptation
from You to exercise the rights granted to that recipient under the
terms of the Applicable License. This Section 4(b) applies to the
Adaptation as incorporated in a Collection, but this does not require
the Collection apart from the Adaptation itself to be made subject to
the terms of the Applicable License.
c. If You Distribute, or Publicly Perform the Work or any Adaptations or
Collections, You must, unless a request has been made pursuant to
Section 4(a), keep intact all copyright notices for the Work and
provide, reasonable to the medium or means You are utilizing: (i) the
name of the Original Author (or pseudonym, if applicable) if supplied,
and/or if the Original Author and/or Licensor designate another party
or parties (e.g., a sponsor institute, publishing entity, journal) for
attribution ("Attribution Parties") in Licensor's copyright notice,
terms of service or by other reasonable means, the name of such party
or parties; (ii) the title of the Work if supplied; (iii) to the
extent reasonably practicable, the URI, if any, that Licensor
specifies to be associated with the Work, unless such URI does not
refer to the copyright notice or licensing information for the Work;
and (iv) , consistent with Ssection 3(b), in the case of an
Adaptation, a credit identifying the use of the Work in the Adaptation
(e.g., "French translation of the Work by Original Author," or
"Screenplay based on original Work by Original Author"). The credit
required by this Section 4(c) may be implemented in any reasonable
manner; provided, however, that in the case of a Adaptation or
Collection, at a minimum such credit will appear, if a credit for all
contributing authors of the Adaptation or Collection appears, then as
part of these credits and in a manner at least as prominent as the
credits for the other contributing authors. For the avoidance of
doubt, You may only use the credit required by this Section for the
purpose of attribution in the manner set out above and, by exercising
Your rights under this License, You may not implicitly or explicitly
assert or imply any connection with, sponsorship or endorsement by the
Original Author, Licensor and/or Attribution Parties, as appropriate,
of You or Your use of the Work, without the separate, express prior
written permission of the Original Author, Licensor and/or Attribution
Parties.
d. Except as otherwise agreed in writing by the Licensor or as may be
otherwise permitted by applicable law, if You Reproduce, Distribute or
Publicly Perform the Work either by itself or as part of any
Adaptations or Collections, You must not distort, mutilate, modify or
take other derogatory action in relation to the Work which would be
prejudicial to the Original Author's honor or reputation. Licensor
agrees that in those jurisdictions (e.g. Japan), in which any exercise
of the right granted in Section 3(b) of this License (the right to
make Adaptations) would be deemed to be a distortion, mutilation,
modification or other derogatory action prejudicial to the Original
Author's honor and reputation, the Licensor will waive or not assert,
as appropriate, this Section, to the fullest extent permitted by the
applicable national law, to enable You to reasonably exercise Your
right under Section 3(b) of this License (right to make Adaptations)
but not otherwise.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate
automatically upon any breach by You of the terms of this License.
Individuals or entities who have received Adaptations or Collections
from You under this License, however, will not have their licenses
terminated provided such individuals or entities remain in full
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the Work).
Notwithstanding the above, Licensor reserves the right to release the
Work under different license terms or to stop distributing the Work at
any time; provided, however that any such election will not serve to
withdraw this License (or any other license that has been, or is
required to be, granted under the terms of this License), and this
License will continue in full force and effect unless terminated as
stated above.
8. Miscellaneous
a. Each time You Distribute or Publicly Perform the Work or a Collection,
the Licensor offers to the recipient a license to the Work on the same
terms and conditions as the license granted to You under this License.
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
offers to the recipient a license to the original Work on the same
terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under
applicable law, it shall not affect the validity or enforceability of
the remainder of the terms of this License, and without further action
by the parties to this agreement, such provision shall be reformed to
the minimum extent necessary to make such provision valid and
enforceable.
d. No term or provision of this License shall be deemed waived and no
breach consented to unless such waiver or consent shall be in writing
and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with
respect to the Work licensed here. There are no understandings,
agreements or representations with respect to the Work not specified
here. Licensor shall not be bound by any additional provisions that
may appear in any communication from You. This License may not be
modified without the mutual written agreement of the Licensor and You.
f. The rights granted under, and the subject matter referenced, in this
License were drafted utilizing the terminology of the Berne Convention
for the Protection of Literary and Artistic Works (as amended on
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
and the Universal Copyright Convention (as revised on July 24, 1971).
These rights and subject matter take effect in the relevant
jurisdiction in which the License terms are sought to be enforced
according to the corresponding provisions of the implementation of
those treaty provisions in the applicable national law. If the
standard suite of rights granted under applicable copyright law
includes additional rights not granted under this License, such
additional rights are deemed to be included in the License; this
License is not intended to restrict the license of any rights under
applicable law.
Creative Commons Notice
Creative Commons is not a party to this License, and makes no warranty
whatsoever in connection with the Work. Creative Commons will not be
liable to You or any party on any legal theory for any damages
whatsoever, including without limitation any general, special,
incidental or consequential damages arising in connection to this
license. Notwithstanding the foregoing two (2) sentences, if Creative
Commons has expressly identified itself as the Licensor hereunder, it
shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the
Work is licensed under the CCPL, Creative Commons does not authorize
the use by either party of the trademark "Creative Commons" or any
related trademark or logo of Creative Commons without the prior
written consent of Creative Commons. Any permitted use will be in
compliance with Creative Commons' then-current trademark usage
guidelines, as may be published on its website or otherwise made
available upon request from time to time. For the avoidance of doubt,
this trademark restriction does not form part of the License.
Creative Commons may be contacted at https://creativecommons.org/.
================================================
FILE: LICENSE-GPLv3.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 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 General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is 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. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
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.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
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 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 t
Showing preview only (457K chars total). Download the full file or copy to clipboard to get everything.
gitextract_rn30hst7/ ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── restore_or_install_byond/ │ │ │ └── action.yml │ │ ├── setup_bun/ │ │ │ └── action.yml │ │ └── setup_node/ │ │ └── action.yml │ ├── add_labels.py │ ├── alternate_byond_versions.txt │ ├── guides/ │ │ ├── AUTODOC.md │ │ ├── STANDARDS.md │ │ └── STYLES.md │ ├── maps_to_ignore.txt │ ├── ss13_genchangelog.py │ └── workflows/ │ ├── auto_changelog.yml │ ├── autowiki.yml │ ├── ci_suite.yml │ ├── compile_changelogs.yml │ ├── conflicts.yml │ ├── generate_web_assets.yml │ ├── labeler.yml │ ├── release.yml │ ├── remove_guide_comments.yml │ ├── rerun_flaky_tests.yml │ ├── run_approval.yml │ ├── run_unit_tests.yml │ ├── stale.yml │ └── update_tgs_dmapi.yml ├── .gitignore ├── .prettierignore ├── .tgs.yml ├── .vscode/ │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── BUILD.cmd ├── Dockerfile ├── LICENSE-AGPLv3.txt ├── LICENSE-CC-BY-SA-3.0.txt ├── LICENSE-GPLv3.txt ├── README.md ├── SpacemanDMM.toml ├── bin/ │ ├── build.cmd │ ├── clean.cmd │ ├── server.cmd │ ├── test.cmd │ ├── tgfont.cmd │ ├── tgui-build.cmd │ ├── tgui-dev.cmd │ └── tgui-fix.cmd ├── cfg/ │ └── .keep ├── code/ │ ├── __DEFINES/ │ │ ├── ARES.dm │ │ ├── MC.dm │ │ ├── STUI.dm │ │ ├── __game.dm │ │ ├── __rust_g.dm │ │ ├── __rust_g_redis-pubsub.dm │ │ ├── __spacemandmm.dm │ │ ├── _bitfields.dm │ │ ├── _click.dm │ │ ├── _globals.dm │ │ ├── _macros.dm │ │ ├── _math.dm │ │ ├── _protect.dm │ │ ├── _tick.dm │ │ ├── access.dm │ │ ├── admin.dm │ │ ├── alerts.dm │ │ ├── assert.dm │ │ ├── atmospherics.dm │ │ ├── autofire.dm │ │ ├── autolathe.dm │ │ ├── autowiki.dm │ │ ├── blood.dm │ │ ├── bsql.config.dm │ │ ├── bullet_traits.dm │ │ ├── callback.dm │ │ ├── camera.dm │ │ ├── chat.dm │ │ ├── chemistry.dm │ │ ├── clans.dm │ │ ├── client.dm │ │ ├── client_prefs.dm │ │ ├── colours.dm │ │ ├── combat.dm │ │ ├── configuration.dm │ │ ├── conflict.dm │ │ ├── cooldowns.dm │ │ ├── db_defs.dm │ │ ├── dcs/ │ │ │ ├── flags.dm │ │ │ ├── helpers.dm │ │ │ └── signals/ │ │ │ ├── atom/ │ │ │ │ ├── mob/ │ │ │ │ │ ├── living/ │ │ │ │ │ │ ├── signals_human.dm │ │ │ │ │ │ ├── signals_living.dm │ │ │ │ │ │ └── signals_xeno.dm │ │ │ │ │ ├── signals_mind.dm │ │ │ │ │ └── signals_mob.dm │ │ │ │ ├── signals_area.dm │ │ │ │ ├── signals_atom.dm │ │ │ │ ├── signals_cell.dm │ │ │ │ ├── signals_gun.dm │ │ │ │ ├── signals_item.dm │ │ │ │ ├── signals_movable.dm │ │ │ │ ├── signals_obj.dm │ │ │ │ ├── signals_projectile.dm │ │ │ │ └── signals_turf.dm │ │ │ ├── signals_admin.dm │ │ │ ├── signals_client.dm │ │ │ ├── signals_datum.dm │ │ │ ├── signals_global.dm │ │ │ └── signals_subsystem.dm │ │ ├── defenses.dm │ │ ├── dropships.dm │ │ ├── emote_panels.dm │ │ ├── equipment.dm │ │ ├── events.dm │ │ ├── fire.dm │ │ ├── flags.dm │ │ ├── fonts.dm │ │ ├── gamemode.dm │ │ ├── generators.dm │ │ ├── gradient.dm │ │ ├── guns.dm │ │ ├── hijack.dm │ │ ├── html.dm │ │ ├── html_assistant.dm │ │ ├── hud.dm │ │ ├── human.dm │ │ ├── ipcheck.dm │ │ ├── job.dm │ │ ├── keybinding.dm │ │ ├── language.dm │ │ ├── layers.dm │ │ ├── lighting.dm │ │ ├── machinery.dm │ │ ├── maps.dm │ │ ├── marine.dm │ │ ├── math_physics.dm │ │ ├── matrices.dm │ │ ├── minimap.dm │ │ ├── misc.dm │ │ ├── mob.dm │ │ ├── mob_hud.dm │ │ ├── mobs.dm │ │ ├── mode.dm │ │ ├── movement.dm │ │ ├── nightmare.dm │ │ ├── objects.dm │ │ ├── origins.dm │ │ ├── pain.dm │ │ ├── paperwork.dm │ │ ├── paygrade_defs/ │ │ │ ├── army.dm │ │ │ ├── civilian.dm │ │ │ ├── cmb.dm │ │ │ ├── dutch.dm │ │ │ ├── marines.dm │ │ │ ├── mercs.dm │ │ │ ├── navy.dm │ │ │ ├── nspa.dm │ │ │ ├── pap.dm │ │ │ ├── paygrade.dm │ │ │ ├── provost.dm │ │ │ ├── twe.dm │ │ │ ├── upp.dm │ │ │ └── weyland.dm │ │ ├── pred.dm │ │ ├── procpath.dm │ │ ├── qdel.dm │ │ ├── radio.dm │ │ ├── redis.dm │ │ ├── regex.dm │ │ ├── sentry_laptop_configurations.dm │ │ ├── shuttles.dm │ │ ├── skills.dm │ │ ├── sounds.dm │ │ ├── speech_channels.dm │ │ ├── stamina.dm │ │ ├── stats.dm │ │ ├── status_effects.dm │ │ ├── strippable.dm │ │ ├── structure.dm │ │ ├── subsystems.dm │ │ ├── supply.dm │ │ ├── surgery.dm │ │ ├── techtree.dm │ │ ├── text.dm │ │ ├── tgs.config.dm │ │ ├── tgs.dm │ │ ├── tgui.dm │ │ ├── traits.dm │ │ ├── turf_flags.dm │ │ ├── turfs.dm │ │ ├── tutorial.dm │ │ ├── typecheck/ │ │ │ ├── assemblers.dm │ │ │ ├── datums.dm │ │ │ ├── generic_types.dm │ │ │ ├── humanoids.dm │ │ │ ├── items.dm │ │ │ ├── mobs_generic.dm │ │ │ └── xenos.dm │ │ ├── unit_tests.dm │ │ ├── urls.dm │ │ ├── vehicle.dm │ │ ├── vendors.dm │ │ ├── vv.dm │ │ ├── weapon_stats.dm │ │ ├── weather.dm │ │ ├── wycomputer.dm │ │ └── xeno.dm │ ├── __HELPERS/ │ │ ├── #maths.dm │ │ ├── _lists.dm │ │ ├── _time.dm │ │ ├── animations.dm │ │ ├── chat.dm │ │ ├── cmp.dm │ │ ├── dates.dm │ │ ├── datums.dm │ │ ├── files.dm │ │ ├── filters.dm │ │ ├── game.dm │ │ ├── generators.dm │ │ ├── guid.dm │ │ ├── icons.dm │ │ ├── job.dm │ │ ├── lazy_templates.dm │ │ ├── level_traits.dm │ │ ├── lighting.dm │ │ ├── lists.dm │ │ ├── logging.dm │ │ ├── matrices.dm │ │ ├── mobs.dm │ │ ├── nameof.dm │ │ ├── pronouns.dm │ │ ├── qdel.dm │ │ ├── sanitize_values.dm │ │ ├── shell.dm │ │ ├── sorts/ │ │ │ ├── TimSort.dm │ │ │ └── _Main.dm │ │ ├── status_effects.dm │ │ ├── string_lists.dm │ │ ├── text.dm │ │ ├── traits.dm │ │ ├── type2type.dm │ │ ├── unsorted.dm │ │ └── verb_helpers.dm │ ├── __odlint.dm │ ├── __pragmas.dm │ ├── _byond_version_compat.dm │ ├── _compile_options.dm │ ├── _experiments.dm │ ├── _globalvars/ │ │ ├── bitfields.dm │ │ ├── combat_defines.dm │ │ ├── configuration.dm │ │ ├── global_lists.dm │ │ ├── lists/ │ │ │ ├── clans.dm │ │ │ ├── client.dm │ │ │ ├── keybindings.dm │ │ │ ├── mapping_globals.dm │ │ │ ├── mobs.dm │ │ │ ├── names.dm │ │ │ └── object_lists.dm │ │ ├── misc.dm │ │ ├── regexes.dm │ │ └── tgui.dm │ ├── _macros.dm │ ├── _onclick/ │ │ ├── adjacent.dm │ │ ├── ai.dm │ │ ├── click.dm │ │ ├── click_hold.dm │ │ ├── double_click.dm │ │ ├── drag_drop.dm │ │ ├── hud/ │ │ │ ├── _defines.dm │ │ │ ├── alien.dm │ │ │ ├── fullscreen.dm │ │ │ ├── ghost.dm │ │ │ ├── hud.dm │ │ │ ├── human.dm │ │ │ ├── map_popups.dm │ │ │ ├── other_mobs.dm │ │ │ ├── radial.dm │ │ │ ├── radial_persistent.dm │ │ │ ├── rendering/ │ │ │ │ ├── _render_readme.md │ │ │ │ ├── plane_master.dm │ │ │ │ ├── plane_master_controller.dm │ │ │ │ └── render_plate.dm │ │ │ ├── screen_object_holder.dm │ │ │ ├── screen_objects.dm │ │ │ ├── screentip.dm │ │ │ └── yautja.dm │ │ ├── human.dm │ │ ├── item_attack.dm │ │ ├── observer.dm │ │ ├── other_mobs.dm │ │ ├── ventcrawl.dm │ │ └── xeno.dm │ ├── controllers/ │ │ ├── configuration/ │ │ │ ├── config_entry.dm │ │ │ ├── configuration.dm │ │ │ └── entries/ │ │ │ ├── achievements.dm │ │ │ ├── combat_config.dm │ │ │ ├── dbconfig.dm │ │ │ ├── game_options.dm │ │ │ ├── general.dm │ │ │ └── resources.dm │ │ ├── mc/ │ │ │ ├── admin.dm │ │ │ ├── controller.dm │ │ │ ├── failsafe.dm │ │ │ ├── globals.dm │ │ │ ├── master.dm │ │ │ └── subsystem.dm │ │ ├── shuttle_controller.dm │ │ ├── subsystem/ │ │ │ ├── achievements.dm │ │ │ ├── acid_pillar.dm │ │ │ ├── assets.dm │ │ │ ├── atoms.dm │ │ │ ├── autofire.dm │ │ │ ├── cellauto.dm │ │ │ ├── chat.dm │ │ │ ├── cmtv.dm │ │ │ ├── communications.dm │ │ │ ├── dcs.dm │ │ │ ├── decorator.dm │ │ │ ├── disease.dm │ │ │ ├── events.dm │ │ │ ├── fz_transitions.dm │ │ │ ├── game_decorator.dm │ │ │ ├── garbage.dm │ │ │ ├── hijack.dm │ │ │ ├── human.dm │ │ │ ├── inactivity.dm │ │ │ ├── influxdriver.dm │ │ │ ├── influxmcstats.dm │ │ │ ├── influxstats.dm │ │ │ ├── init/ │ │ │ │ ├── landmarks.dm │ │ │ │ ├── law.dm │ │ │ │ └── lobby_art.dm │ │ │ ├── input.dm │ │ │ ├── interior.dm │ │ │ ├── ipcheck.dm │ │ │ ├── item_cleanup.dm │ │ │ ├── lighting.dm │ │ │ ├── machinery.dm │ │ │ ├── mapping.dm │ │ │ ├── minimap.dm │ │ │ ├── mob.dm │ │ │ ├── nanoui.dm │ │ │ ├── nightmare.dm │ │ │ ├── objectives_controller.dm │ │ │ ├── pager_status.dm │ │ │ ├── perf_logging.dm │ │ │ ├── ping.dm │ │ │ ├── playtime.dm │ │ │ ├── police_clues.dm │ │ │ ├── polls.dm │ │ │ ├── power.dm │ │ │ ├── processing/ │ │ │ │ ├── authentication.dm │ │ │ │ ├── defprocess.dm │ │ │ │ ├── effects.dm │ │ │ │ ├── fasteffects.dm │ │ │ │ ├── fastobj.dm │ │ │ │ ├── hive_status.dm │ │ │ │ ├── obj_tab_items.dm │ │ │ │ ├── objects.dm │ │ │ │ ├── oldeffects.dm │ │ │ │ ├── processing.dm │ │ │ │ ├── shield_pillar.dm │ │ │ │ └── slowobj.dm │ │ │ ├── profiler.dm │ │ │ ├── projectiles.dm │ │ │ ├── quadtrees.dm │ │ │ ├── reagents.dm │ │ │ ├── redis.dm │ │ │ ├── round_recording.dm │ │ │ ├── sentry.dm │ │ │ ├── shuttle.dm │ │ │ ├── shuttles.dm │ │ │ ├── sound.dm │ │ │ ├── sound_loops.dm │ │ │ ├── soundscape.dm │ │ │ ├── statpanel.dm │ │ │ ├── stickyban.dm │ │ │ ├── techtree.dm │ │ │ ├── tgui.dm │ │ │ ├── thunderdome.dm │ │ │ ├── ticker.dm │ │ │ ├── time_track.dm │ │ │ ├── timer.dm │ │ │ ├── tracking.dm │ │ │ ├── vote.dm │ │ │ ├── weather.dm │ │ │ ├── who.dm │ │ │ ├── x_evolution.dm │ │ │ └── xeno.dm │ │ └── topic.dm │ ├── datums/ │ │ ├── ASRS.dm │ │ ├── _atmos_setup.dm │ │ ├── _ndatabase/ │ │ │ ├── code/ │ │ │ │ ├── brsql_adapter.dm │ │ │ │ ├── brsql_connection_settings.dm │ │ │ │ ├── brsql_persistent_connection.dm │ │ │ │ ├── brsql_persistent_query.dm │ │ │ │ ├── database.dm │ │ │ │ ├── entity/ │ │ │ │ │ ├── entity.dm │ │ │ │ │ ├── entity_meta.dm │ │ │ │ │ ├── entity_view.dm │ │ │ │ │ ├── index.dm │ │ │ │ │ └── link.dm │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── adapter.dm │ │ │ │ │ ├── connection.dm │ │ │ │ │ ├── connection_settings.dm │ │ │ │ │ ├── filter.dm │ │ │ │ │ ├── native_function.dm │ │ │ │ │ └── query.dm │ │ │ │ ├── native_adapter.dm │ │ │ │ ├── native_connection_settings.dm │ │ │ │ ├── native_persistent_connection.dm │ │ │ │ ├── native_persistent_query.dm │ │ │ │ └── query_response.dm │ │ │ ├── help/ │ │ │ │ ├── IE9.js │ │ │ │ ├── contents.html │ │ │ │ ├── index.html │ │ │ │ ├── info.html │ │ │ │ └── prettyref.js │ │ │ ├── include.dm │ │ │ ├── subsystems/ │ │ │ │ ├── database_query_manager.dm │ │ │ │ └── entity_manager.dm │ │ │ └── tests/ │ │ │ └── test_entity.dm │ │ ├── action.dm │ │ ├── agents/ │ │ │ ├── tools/ │ │ │ │ ├── access_tuner.dm │ │ │ │ ├── badass_kit.dm │ │ │ │ ├── chloroform.dm │ │ │ │ ├── conceal_gloves.dm │ │ │ │ ├── decoy.dm │ │ │ │ ├── signal_pack.dm │ │ │ │ ├── stimulants.dm │ │ │ │ ├── stunbaton.dm │ │ │ │ ├── toolbox.dm │ │ │ │ ├── tracker.dm │ │ │ │ └── tranq_gun.dm │ │ │ └── tools.dm │ │ ├── ammo/ │ │ │ ├── ammo.dm │ │ │ ├── bullet/ │ │ │ │ ├── arc.dm │ │ │ │ ├── bullet.dm │ │ │ │ ├── lever_action.dm │ │ │ │ ├── pistol.dm │ │ │ │ ├── revolver.dm │ │ │ │ ├── rifle.dm │ │ │ │ ├── shotgun.dm │ │ │ │ ├── smg.dm │ │ │ │ ├── sniper.dm │ │ │ │ ├── special_ammo.dm │ │ │ │ └── tank.dm │ │ │ ├── energy.dm │ │ │ ├── misc.dm │ │ │ ├── rocket.dm │ │ │ ├── shrapnel.dm │ │ │ └── xeno.dm │ │ ├── autocells/ │ │ │ ├── auto_cell.dm │ │ │ ├── explosion.dm │ │ │ └── vomit_wave.dm │ │ ├── balloon_alerts/ │ │ │ └── balloon_alerts.dm │ │ ├── beam.dm │ │ ├── browser.dm │ │ ├── bug_report.dm │ │ ├── callback.dm │ │ ├── changelog.dm │ │ ├── chat_payload.dm │ │ ├── cmtv_commands.dm │ │ ├── combat_personalized.dm │ │ ├── components/ │ │ │ ├── _component.dm │ │ │ ├── acid_immunity.dm │ │ │ ├── armor_link.dm │ │ │ ├── autofire/ │ │ │ │ ├── _automated_fire.dm │ │ │ │ └── autofire.dm │ │ │ ├── bad_leg.dm │ │ │ ├── bonus_damage_stack.dm │ │ │ ├── cell.dm │ │ │ ├── cluster_stack.dm │ │ │ ├── connect_mob_behalf.dm │ │ │ ├── crate_tag.dm │ │ │ ├── damage_over_time.dm │ │ │ ├── deevolve_cooldown.dm │ │ │ ├── disk_reader.dm │ │ │ ├── footstep.dm │ │ │ ├── healing_reduction.dm │ │ │ ├── heavy_bullets.dm │ │ │ ├── id_lock.dm │ │ │ ├── iff_fire_prevention.dm │ │ │ ├── label.dm │ │ │ ├── orbiter.dm │ │ │ ├── overlay_lighting.dm │ │ │ ├── overwatch_console_control.dm │ │ │ ├── rename.dm │ │ │ ├── resin_cleanup.dm │ │ │ ├── riding/ │ │ │ │ ├── riding.dm │ │ │ │ ├── riding_mob.dm │ │ │ │ └── riding_vehicle.dm │ │ │ ├── shimmy_around.dm │ │ │ ├── speed_modifier.dm │ │ │ ├── status_effect_component.dm │ │ │ ├── tacmap.dm │ │ │ ├── temporary_mute.dm │ │ │ ├── toxin_buildup.dm │ │ │ ├── tracker_bullets.dm │ │ │ ├── tutorial_status.dm │ │ │ ├── weed_damage_reduction.dm │ │ │ ├── weed_food.dm │ │ │ └── xeno/ │ │ │ ├── hivemind_interference.dm │ │ │ ├── shield_slash.dm │ │ │ └── xeno_daze.dm │ │ ├── computerfiles.dm │ │ ├── construction/ │ │ │ ├── construction_template.dm │ │ │ └── xenomorph/ │ │ │ └── construction_template_xenomorph.dm │ │ ├── control_server.dm │ │ ├── crew_manifest.dm │ │ ├── custom_hud.dm │ │ ├── datacore.dm │ │ ├── datum.dm │ │ ├── datumvars.dm │ │ ├── decorators/ │ │ │ ├── decorator.dm │ │ │ └── gamemode_decorator.dm │ │ ├── disease.dm │ │ ├── diseases/ │ │ │ ├── addiction.dm │ │ │ ├── advance/ │ │ │ │ ├── advance.dm │ │ │ │ ├── presets.dm │ │ │ │ └── symptoms/ │ │ │ │ ├── confusion.dm │ │ │ │ ├── cough.dm │ │ │ │ ├── damage_converter.dm │ │ │ │ ├── dizzy.dm │ │ │ │ ├── fever.dm │ │ │ │ ├── hallucinogen.dm │ │ │ │ ├── headache.dm │ │ │ │ ├── heal.dm │ │ │ │ ├── itching.dm │ │ │ │ ├── shivering.dm │ │ │ │ ├── sneeze.dm │ │ │ │ ├── symptoms.dm │ │ │ │ ├── voice_change.dm │ │ │ │ ├── vomit.dm │ │ │ │ └── weight.dm │ │ │ ├── beesease.dm │ │ │ ├── black_goo.dm │ │ │ ├── brainrot.dm │ │ │ ├── cold.dm │ │ │ ├── cold9.dm │ │ │ ├── fake_gbs.dm │ │ │ ├── flu.dm │ │ │ ├── fluspanish.dm │ │ │ ├── gbs.dm │ │ │ ├── jungle_fever.dm │ │ │ ├── magnitis.dm │ │ │ ├── mob_procs.dm │ │ │ ├── pierrot_throat.dm │ │ │ ├── plasmatoid.dm │ │ │ ├── rhumba_beat.dm │ │ │ └── xeno_transformation.dm │ │ ├── effects/ │ │ │ ├── _effects.dm │ │ │ ├── acid.dm │ │ │ ├── bleeding.dm │ │ │ ├── heal_over_time.dm │ │ │ ├── mob_crit/ │ │ │ │ ├── crit.dm │ │ │ │ └── human_crit.dm │ │ │ ├── neurotoxin.dm │ │ │ ├── pain/ │ │ │ │ ├── human_pain.dm │ │ │ │ ├── monkey_pain.dm │ │ │ │ └── pain.dm │ │ │ ├── plasma_over_time.dm │ │ │ ├── stamina/ │ │ │ │ └── stamina_human.dm │ │ │ ├── tether.dm │ │ │ ├── weak_spray_stack.dm │ │ │ └── xeno_strains/ │ │ │ ├── boiler_trap.dm │ │ │ ├── dancer_tag.dm │ │ │ ├── gain_xeno_cooldown_reduction_on_slash.dm │ │ │ ├── prae_acid_stacks.dm │ │ │ ├── xeno_buff.dm │ │ │ ├── xeno_slow.dm │ │ │ ├── xeno_speed.dm │ │ │ └── xeno_structure_reinforcement.dm │ │ ├── elements/ │ │ │ ├── _element.dm │ │ │ ├── bloody_feet.dm │ │ │ ├── bullet_trait/ │ │ │ │ ├── bullet_trait.md │ │ │ │ ├── damage_boost.dm │ │ │ │ ├── iff.dm │ │ │ │ ├── ignored_range.dm │ │ │ │ ├── incendiary.dm │ │ │ │ ├── knockback_disabled.dm │ │ │ │ └── penetrating/ │ │ │ │ ├── heavy.dm │ │ │ │ ├── penetrating.dm │ │ │ │ └── weak.dm │ │ │ ├── drop_retrieval.dm │ │ │ ├── effects/ │ │ │ │ ├── copy_appearance.dm │ │ │ │ ├── fading.dm │ │ │ │ ├── pixel_shifting.dm │ │ │ │ └── temporary.dm │ │ │ ├── light_blocking.dm │ │ │ ├── manufacturer_logos.dm │ │ │ ├── mouth_drop_item.dm │ │ │ ├── poor_eyesight_correction.dm │ │ │ ├── riding.dm │ │ │ ├── strippable.dm │ │ │ ├── suturing.dm │ │ │ ├── traitbound/ │ │ │ │ ├── _traitbound.dm │ │ │ │ ├── crawler.dm │ │ │ │ ├── gun_silenced.dm │ │ │ │ └── leadership.dm │ │ │ └── yautja_tracked_item.dm │ │ ├── emergency_calls/ │ │ │ ├── big_game_hunter.dm │ │ │ ├── bodyguard.dm │ │ │ ├── cbrn.dm │ │ │ ├── clf.dm │ │ │ ├── cmb.dm │ │ │ ├── colonist.dm │ │ │ ├── contractor.dm │ │ │ ├── cryo_marines.dm │ │ │ ├── cryo_marines_heavy.dm │ │ │ ├── cryo_spec.dm │ │ │ ├── custom.dm │ │ │ ├── deathsquad.dm │ │ │ ├── deus_vult.dm │ │ │ ├── dutch.dm │ │ │ ├── emergency_call.dm │ │ │ ├── ert_stations.dm │ │ │ ├── feral_xenos.dm │ │ │ ├── forecon.dm │ │ │ ├── forsaken_xenos.dm │ │ │ ├── goons.dm │ │ │ ├── hefa_knight.dm │ │ │ ├── inspection.dm │ │ │ ├── mercs.dm │ │ │ ├── pirates.dm │ │ │ ├── pizza.dm │ │ │ ├── pmc.dm │ │ │ ├── pred_hunt/ │ │ │ │ └── hunting_calls.dm │ │ │ ├── provost.dm │ │ │ ├── riot.dm │ │ │ ├── royal_marines.dm │ │ │ ├── solar_devils.dm │ │ │ ├── souto.dm │ │ │ ├── supplies.dm │ │ │ ├── tank_crew.dm │ │ │ ├── upp.dm │ │ │ ├── upp_commando.dm │ │ │ ├── us_army.dm │ │ │ ├── whiskey_outpost.dm │ │ │ ├── wy_commando.dm │ │ │ ├── xeno_cultists.dm │ │ │ ├── xenos.dm │ │ │ └── zombie.dm │ │ ├── emotes.dm │ │ ├── entities/ │ │ │ ├── chemical_information.dm │ │ │ ├── clans.dm │ │ │ ├── login_triplets.dm │ │ │ ├── logs/ │ │ │ │ └── player_times_log.dm │ │ │ ├── map_votes.dm │ │ │ ├── mc_controller.dm │ │ │ ├── mc_record.dm │ │ │ ├── mc_round.dm │ │ │ ├── mc_timing_info.dm │ │ │ ├── player.dm │ │ │ ├── player_job_ban.dm │ │ │ ├── player_note.dm │ │ │ ├── player_stat.dm │ │ │ ├── player_sticky_ban.dm │ │ │ ├── player_times.dm │ │ │ ├── ticket.dm │ │ │ └── twitch_link.dm │ │ ├── event_info_text.dm │ │ ├── factions/ │ │ │ ├── clf.dm │ │ │ ├── cmb.dm │ │ │ ├── contractor.dm │ │ │ ├── faction.dm │ │ │ ├── helpers.dm │ │ │ ├── hyperdyne.dm │ │ │ ├── iasf.dm │ │ │ ├── nspa.dm │ │ │ ├── pap.dm │ │ │ ├── pmc.dm │ │ │ ├── pred_ert.dm │ │ │ ├── royalmarinescommando.dm │ │ │ ├── upp.dm │ │ │ ├── uscm.dm │ │ │ ├── wo.dm │ │ │ └── wy.dm │ │ ├── fluff_emails.dm │ │ ├── global_variables.dm │ │ ├── helper_datums/ │ │ │ ├── getrev.dm │ │ │ ├── stack_end_detector.dm │ │ │ ├── teleport.dm │ │ │ └── topic_input.dm │ │ ├── highlight_keywords_payload.dm │ │ ├── http.dm │ │ ├── internet_media.dm │ │ ├── keybinding/ │ │ │ ├── _keybindings.dm │ │ │ ├── admin.dm │ │ │ ├── carbon.dm │ │ │ ├── client.dm │ │ │ ├── communication.dm │ │ │ ├── custom.dm │ │ │ ├── emote.dm │ │ │ ├── human.dm │ │ │ ├── human_combat.dm │ │ │ ├── human_inventory.dm │ │ │ ├── living.dm │ │ │ ├── mob.dm │ │ │ ├── movement.dm │ │ │ ├── vehicles.dm │ │ │ ├── xenomorph.dm │ │ │ └── yautja.dm │ │ ├── langchat/ │ │ │ └── langchat.dm │ │ ├── lazy_template.dm │ │ ├── looping_sounds/ │ │ │ ├── _looping_sound.dm │ │ │ ├── item_sounds.dm │ │ │ └── misc_sounds.dm │ │ ├── map_config.dm │ │ ├── matrix_editor.dm │ │ ├── medal_awards.dm │ │ ├── mind.dm │ │ ├── mixed.dm │ │ ├── mob_hud.dm │ │ ├── movement_detector.dm │ │ ├── mutable_appearance.dm │ │ ├── origin/ │ │ │ ├── civilian.dm │ │ │ ├── cmb.dm │ │ │ ├── origin.dm │ │ │ ├── twe.dm │ │ │ ├── upp.dm │ │ │ ├── uscm.dm │ │ │ └── wy.dm │ │ ├── pain/ │ │ │ ├── _pain.dm │ │ │ ├── pain_human.dm │ │ │ ├── pain_human_hero.dm │ │ │ ├── pain_monkey.dm │ │ │ ├── pain_synthetic.dm │ │ │ ├── pain_xeno.dm │ │ │ ├── pain_yautja.dm │ │ │ └── pain_zombie.dm │ │ ├── paygrades/ │ │ │ ├── factions/ │ │ │ │ ├── other/ │ │ │ │ │ ├── civilian.dm │ │ │ │ │ ├── cmb.dm │ │ │ │ │ ├── contractors.dm │ │ │ │ │ ├── dutch_dozen.dm │ │ │ │ │ ├── freelancer.dm │ │ │ │ │ └── misc.dm │ │ │ │ ├── twe/ │ │ │ │ │ ├── nspa.dm │ │ │ │ │ └── twe.dm │ │ │ │ ├── upp/ │ │ │ │ │ ├── pap.dm │ │ │ │ │ └── upp.dm │ │ │ │ ├── uscm/ │ │ │ │ │ ├── army.dm │ │ │ │ │ ├── marine.dm │ │ │ │ │ ├── navy.dm │ │ │ │ │ └── provost.dm │ │ │ │ └── wy/ │ │ │ │ ├── commando.dm │ │ │ │ ├── pmc.dm │ │ │ │ ├── security.dm │ │ │ │ └── wy.dm │ │ │ ├── helper.dm │ │ │ └── paygrade.dm │ │ ├── quadtree.dm │ │ ├── recipe.dm │ │ ├── redis/ │ │ │ ├── callbacks/ │ │ │ │ ├── _redis_callback.dm │ │ │ │ └── asay.dm │ │ │ └── redis_message.dm │ │ ├── research_upgrade_datum.dm │ │ ├── shuttles.dm │ │ ├── skills/ │ │ │ ├── civilian.dm │ │ │ ├── clf.dm │ │ │ ├── cmb.dm │ │ │ ├── commando.dm │ │ │ ├── contractor.dm │ │ │ ├── dutch.dm │ │ │ ├── forecon.dm │ │ │ ├── freelancer.dm │ │ │ ├── gladiator.dm │ │ │ ├── iasf.dm │ │ │ ├── mercenary.dm │ │ │ ├── misc.dm │ │ │ ├── pmc.dm │ │ │ ├── rmc.dm │ │ │ ├── skills.dm │ │ │ ├── synthetic.dm │ │ │ ├── upp.dm │ │ │ ├── uscm.dm │ │ │ └── wygoons.dm │ │ ├── soundOutput.dm │ │ ├── spaceports.dm │ │ ├── stamina/ │ │ │ ├── _stamina.dm │ │ │ └── none.dm │ │ ├── statistics/ │ │ │ ├── cause_data.dm │ │ │ ├── entities/ │ │ │ │ ├── caste_stats.dm │ │ │ │ ├── death_stats.dm │ │ │ │ ├── human_stats.dm │ │ │ │ ├── initial_spec_picks.dm │ │ │ │ ├── job_stats.dm │ │ │ │ ├── map_stats.dm │ │ │ │ ├── marine_death.dm │ │ │ │ ├── medal_stats.dm │ │ │ │ ├── panel_stats.dm │ │ │ │ ├── player_entity.dm │ │ │ │ ├── player_save.dm │ │ │ │ ├── player_stats.dm │ │ │ │ ├── round_caste_picks.dm │ │ │ │ ├── round_stats.dm │ │ │ │ ├── survivor_survival.dm │ │ │ │ ├── weapon_stats.dm │ │ │ │ ├── xeno_death.dm │ │ │ │ └── xeno_stats.dm │ │ │ └── random_facts/ │ │ │ ├── christmas_fact.dm │ │ │ ├── damage_fact.dm │ │ │ ├── ib_fact.dm │ │ │ ├── kills_fact.dm │ │ │ ├── random_fact.dm │ │ │ ├── revives_fact.dm │ │ │ └── steps_fact.dm │ │ ├── status_effects/ │ │ │ ├── _status_effect.dm │ │ │ ├── _status_effect_helpers.dm │ │ │ ├── debuffs/ │ │ │ │ └── debuffs.dm │ │ │ ├── grouped_effect.dm │ │ │ ├── limited_effect.dm │ │ │ └── stacking_effect.dm │ │ ├── supply_packs/ │ │ │ ├── _supply_packs.dm │ │ │ ├── ammo.dm │ │ │ ├── attachments.dm │ │ │ ├── black_market.dm │ │ │ ├── clothing.dm │ │ │ ├── engineering.dm │ │ │ ├── explosives.dm │ │ │ ├── food.dm │ │ │ ├── gear.dm │ │ │ ├── medical.dm │ │ │ ├── misc.dm │ │ │ ├── mortar.dm │ │ │ ├── operations.dm │ │ │ ├── reagent_tanks.dm │ │ │ ├── research.dm │ │ │ ├── restricted_equipment.dm │ │ │ ├── spec_ammo.dm │ │ │ ├── upp_ammo.dm │ │ │ ├── upp_attachments.dm │ │ │ ├── upp_clothing.dm │ │ │ ├── upp_crates.dm │ │ │ ├── upp_engineering.dm │ │ │ ├── upp_explosives.dm │ │ │ ├── upp_food.dm │ │ │ ├── upp_gear.dm │ │ │ ├── upp_medical.dm │ │ │ ├── upp_mortar.dm │ │ │ ├── upp_weapons.dm │ │ │ ├── vehicle_ammo.dm │ │ │ ├── vehicle_equipment.dm │ │ │ └── weapons.dm │ │ ├── tacmap_viewer.dm │ │ ├── tgs_event_handler.dm │ │ ├── tutorial/ │ │ │ ├── _tutorial.dm │ │ │ ├── _tutorial_menu.dm │ │ │ ├── creating_a_tutorial.md │ │ │ ├── marine/ │ │ │ │ ├── _marine.dm │ │ │ │ ├── basic_marine.dm │ │ │ │ ├── hospital_corpsman_sandbox.dm │ │ │ │ ├── medical_basic.dm │ │ │ │ └── reqs_line.dm │ │ │ ├── ss13/ │ │ │ │ ├── _ss13.dm │ │ │ │ ├── basic_ss13.dm │ │ │ │ └── intents.dm │ │ │ ├── tutorial_example.dm │ │ │ └── xenomorph/ │ │ │ ├── _xenomorph.dm │ │ │ ├── abomination.dm │ │ │ └── xenomorph_basic.dm │ │ ├── vehicles.dm │ │ ├── weakrefs.dm │ │ ├── weather/ │ │ │ ├── weather_event.dm │ │ │ ├── weather_events/ │ │ │ │ ├── big_red.dm │ │ │ │ ├── faction_clash.dm │ │ │ │ ├── lv522_chances_claim.dm │ │ │ │ ├── lv624.dm │ │ │ │ ├── lv759_hybrisa_prospera.dm │ │ │ │ ├── new_varadero.dm │ │ │ │ └── sorokyne.dm │ │ │ ├── weather_map_holder.dm │ │ │ └── weather_map_holders/ │ │ │ ├── big_red.dm │ │ │ ├── faction_clash.dm │ │ │ ├── lv522_chances_claim.dm │ │ │ ├── lv624.dm │ │ │ ├── lv759_hybrisa_prospera.dm │ │ │ ├── new_varadero.dm │ │ │ └── sorokyne.dm │ │ ├── world_topic.dm │ │ └── xeno_shields/ │ │ ├── shield_types/ │ │ │ ├── crusher_shield.dm │ │ │ ├── hedgehog_shield.dm │ │ │ ├── king_shield.dm │ │ │ └── vanguard_shield.dm │ │ └── xeno_shield.dm │ ├── defines/ │ │ ├── procs/ │ │ │ ├── AStar.dm │ │ │ ├── admin.dm │ │ │ ├── announcement.dm │ │ │ ├── conflict.dm │ │ │ ├── hud.dm │ │ │ ├── radio.dm │ │ │ └── records.dm │ │ └── unit_tests.dm │ ├── game/ │ │ ├── area/ │ │ │ ├── BigRed.dm │ │ │ ├── ChigusaShipyard.dm │ │ │ ├── Corsat.dm │ │ │ ├── DesertDam.dm │ │ │ ├── IceColony.dm │ │ │ ├── LV522_Chances_Claim.dm │ │ │ ├── LV624.dm │ │ │ ├── LV759_Hybrisa_Prospera.dm │ │ │ ├── Prison_Station_FOP.dm │ │ │ ├── Sulaco.dm │ │ │ ├── WhiskeyOutpost.dm │ │ │ ├── Yautja.dm │ │ │ ├── admin_level.dm │ │ │ ├── almayer.dm │ │ │ ├── areas.dm │ │ │ ├── areas_event.dm │ │ │ ├── chinook.dm │ │ │ ├── hijack.dm │ │ │ ├── kutjevo.dm │ │ │ ├── prison.dm │ │ │ ├── prison_v3_fiorina.dm │ │ │ ├── rostock.dm │ │ │ ├── shiva.dm │ │ │ ├── shuttles.dm │ │ │ ├── space_station_13_areas.dm │ │ │ ├── strata.dm │ │ │ ├── techtree.dm │ │ │ ├── tyrargo_rift.dm │ │ │ └── varadero.dm │ │ ├── atoms.dm │ │ ├── atoms_movable.dm │ │ ├── bioscans.dm │ │ ├── blood.dm │ │ ├── camera_manager/ │ │ │ └── camera_manager.dm │ │ ├── cas_manager/ │ │ │ └── datums/ │ │ │ ├── cas_fire_envelope.dm │ │ │ ├── cas_fire_mission.dm │ │ │ ├── cas_iff_group.dm │ │ │ └── cas_signal.dm │ │ ├── gamemodes/ │ │ │ ├── cm_initialize.dm │ │ │ ├── cm_process.dm │ │ │ ├── colonialmarines/ │ │ │ │ ├── colonialmarines.dm │ │ │ │ ├── huntergames.dm │ │ │ │ ├── whiskey_outpost/ │ │ │ │ │ ├── equipping.dm │ │ │ │ │ ├── skills.dm │ │ │ │ │ └── whiskey_output_waves.dm │ │ │ │ ├── whiskey_outpost.dm │ │ │ │ └── xenovsxeno.dm │ │ │ ├── events/ │ │ │ │ └── power_failure.dm │ │ │ ├── events.dm │ │ │ ├── extended/ │ │ │ │ ├── cm_vs_upp.dm │ │ │ │ ├── extended.dm │ │ │ │ ├── extended_clash.dm │ │ │ │ ├── extended_nospawn.dm │ │ │ │ └── infection.dm │ │ │ ├── game_mode.dm │ │ │ └── round_modifiers.dm │ │ ├── jobs/ │ │ │ ├── access.dm │ │ │ ├── job/ │ │ │ │ ├── antag/ │ │ │ │ │ ├── antag.dm │ │ │ │ │ ├── other/ │ │ │ │ │ │ └── pred.dm │ │ │ │ │ └── xeno/ │ │ │ │ │ ├── queen.dm │ │ │ │ │ └── xenomorph.dm │ │ │ │ ├── civilians/ │ │ │ │ │ ├── civilian.dm │ │ │ │ │ ├── other/ │ │ │ │ │ │ ├── corp_sec.dm │ │ │ │ │ │ ├── liaison.dm │ │ │ │ │ │ ├── mess_seargent.dm │ │ │ │ │ │ ├── reporter.dm │ │ │ │ │ │ └── survivors.dm │ │ │ │ │ └── support/ │ │ │ │ │ ├── cmo.dm │ │ │ │ │ ├── doctor.dm │ │ │ │ │ ├── field_doctor.dm │ │ │ │ │ ├── nurse.dm │ │ │ │ │ ├── researcher.dm │ │ │ │ │ ├── synthetic.dm │ │ │ │ │ └── working_joe.dm │ │ │ │ ├── command/ │ │ │ │ │ ├── auxiliary/ │ │ │ │ │ │ ├── auxiliary_support_officer.dm │ │ │ │ │ │ ├── cas_pilot.dm │ │ │ │ │ │ ├── crew_chief.dm │ │ │ │ │ │ ├── dropship_pilot.dm │ │ │ │ │ │ ├── intel.dm │ │ │ │ │ │ ├── senior.dm │ │ │ │ │ │ └── tank_crew.dm │ │ │ │ │ ├── cic/ │ │ │ │ │ │ ├── captain.dm │ │ │ │ │ │ ├── executive.dm │ │ │ │ │ │ └── staffofficer.dm │ │ │ │ │ ├── command.dm │ │ │ │ │ └── police/ │ │ │ │ │ ├── chief_police.dm │ │ │ │ │ ├── police.dm │ │ │ │ │ └── warden.dm │ │ │ │ ├── job.dm │ │ │ │ ├── logistics/ │ │ │ │ │ ├── cargo/ │ │ │ │ │ │ ├── cargo_tech.dm │ │ │ │ │ │ └── chief_req.dm │ │ │ │ │ ├── engi/ │ │ │ │ │ │ ├── chief_engineer.dm │ │ │ │ │ │ ├── maint_tech.dm │ │ │ │ │ │ └── ordnance_tech.dm │ │ │ │ │ └── logistics.dm │ │ │ │ ├── marine/ │ │ │ │ │ ├── marine.dm │ │ │ │ │ ├── squad/ │ │ │ │ │ │ ├── engineer.dm │ │ │ │ │ │ ├── leader.dm │ │ │ │ │ │ ├── medic.dm │ │ │ │ │ │ ├── smartgunner.dm │ │ │ │ │ │ ├── specialist.dm │ │ │ │ │ │ ├── standard.dm │ │ │ │ │ │ └── tl.dm │ │ │ │ │ ├── squad_info.dm │ │ │ │ │ └── squads.dm │ │ │ │ └── special/ │ │ │ │ ├── cmb.dm │ │ │ │ ├── provost.dm │ │ │ │ ├── responders.dm │ │ │ │ ├── uscm.dm │ │ │ │ └── weyland_yutani.dm │ │ │ ├── role_authority.dm │ │ │ ├── slot_scaling.dm │ │ │ └── whitelist.dm │ │ ├── machinery/ │ │ │ ├── ARES/ │ │ │ │ ├── ARES.dm │ │ │ │ ├── ARES_interface.dm │ │ │ │ ├── ARES_interface_admin.dm │ │ │ │ ├── ARES_interface_apollo.dm │ │ │ │ ├── ARES_interface_data.dm │ │ │ │ ├── ARES_procs.dm │ │ │ │ ├── ARES_records.dm │ │ │ │ ├── ARES_step_triggers.dm │ │ │ │ └── apollo_pda.dm │ │ │ ├── OpTable.dm │ │ │ ├── aicore_lockdown.dm │ │ │ ├── air_alarm.dm │ │ │ ├── atmoalter/ │ │ │ │ ├── canister.dm │ │ │ │ ├── meter.dm │ │ │ │ ├── portable_atmospherics.dm │ │ │ │ ├── pump.dm │ │ │ │ └── scrubber.dm │ │ │ ├── autolathe.dm │ │ │ ├── autolathe_datums.dm │ │ │ ├── biohazard_lockdown.dm │ │ │ ├── bioprinter.dm │ │ │ ├── bots/ │ │ │ │ ├── bots.dm │ │ │ │ ├── cleanbot.dm │ │ │ │ ├── cprbot.dm │ │ │ │ ├── floorbot.dm │ │ │ │ ├── medbot.dm │ │ │ │ └── mulebot.dm │ │ │ ├── buttons.dm │ │ │ ├── camera/ │ │ │ │ ├── camera.dm │ │ │ │ ├── motion.dm │ │ │ │ ├── presets.dm │ │ │ │ └── wires.dm │ │ │ ├── cell_charger.dm │ │ │ ├── cloning.dm │ │ │ ├── colony_floodlights.dm │ │ │ ├── communications_encryption.dm │ │ │ ├── computer/ │ │ │ │ ├── HolodeckControl.dm │ │ │ │ ├── Operating.dm │ │ │ │ ├── almayer_control.dm │ │ │ │ ├── arcade.dm │ │ │ │ ├── area_air_control.dm │ │ │ │ ├── atmos_alert.dm │ │ │ │ ├── buildandrepair.dm │ │ │ │ ├── camera_console.dm │ │ │ │ ├── communications.dm │ │ │ │ ├── computer.dm │ │ │ │ ├── demo_sim.dm │ │ │ │ ├── dropship_weapons.dm │ │ │ │ ├── emails.dm │ │ │ │ ├── fax_responder_spy.dm │ │ │ │ ├── fluff.dm │ │ │ │ ├── general_air_control.dm │ │ │ │ ├── groundside_operations.dm │ │ │ │ ├── guestpass.dm │ │ │ │ ├── hybrisa_slotmachine.dm │ │ │ │ ├── medical.dm │ │ │ │ ├── pod.dm │ │ │ │ ├── prisoner.dm │ │ │ │ ├── research.dm │ │ │ │ ├── robot.dm │ │ │ │ ├── robots_props.dm │ │ │ │ ├── security.dm │ │ │ │ ├── sentencing.dm │ │ │ │ ├── skills.dm │ │ │ │ ├── station_alert.dm │ │ │ │ └── wy_computer.dm │ │ │ ├── constructable_frame.dm │ │ │ ├── cryo.dm │ │ │ ├── cryopod.dm │ │ │ ├── deployable.dm │ │ │ ├── door_control.dm │ │ │ ├── door_display/ │ │ │ │ └── door_display.dm │ │ │ ├── doors/ │ │ │ │ ├── airlock.dm │ │ │ │ ├── airlock_control.dm │ │ │ │ ├── airlock_types.dm │ │ │ │ ├── alarmlock.dm │ │ │ │ ├── brig_system.dm │ │ │ │ ├── checkForMultipleDoors.dm │ │ │ │ ├── door.dm │ │ │ │ ├── firedoor.dm │ │ │ │ ├── multi_tile.dm │ │ │ │ ├── poddoor/ │ │ │ │ │ ├── almayer.dm │ │ │ │ │ ├── poddoor.dm │ │ │ │ │ ├── shutters/ │ │ │ │ │ │ └── shutters.dm │ │ │ │ │ └── two_tile.dm │ │ │ │ ├── railing.dm │ │ │ │ ├── runed_sandstone.dm │ │ │ │ ├── unpowered.dm │ │ │ │ └── windowdoor.dm │ │ │ ├── embedded_controller/ │ │ │ │ ├── docking_program.dm │ │ │ │ ├── embedded_controller_base.dm │ │ │ │ ├── embedded_program_base.dm │ │ │ │ └── simple_docking_controller.dm │ │ │ ├── fax_machine.dm │ │ │ ├── fire_alarm.dm │ │ │ ├── flasher.dm │ │ │ ├── floodlight.dm │ │ │ ├── fuelcell_recycler.dm │ │ │ ├── fusion_engine.dm │ │ │ ├── gear.dm │ │ │ ├── holosign.dm │ │ │ ├── hybrisa_lights.dm │ │ │ ├── igniter.dm │ │ │ ├── iv_drip.dm │ │ │ ├── kitchen/ │ │ │ │ ├── gibber.dm │ │ │ │ ├── juicer.dm │ │ │ │ ├── microwave.dm │ │ │ │ ├── processor.dm │ │ │ │ └── smartfridge.dm │ │ │ ├── lightswitch.dm │ │ │ ├── line_nexter.dm │ │ │ ├── machinery.dm │ │ │ ├── medical_pod/ │ │ │ │ ├── autodoc.dm │ │ │ │ ├── bodyscanner.dm │ │ │ │ ├── bone_gel_refill.dm │ │ │ │ ├── medical_pod.dm │ │ │ │ └── sleeper.dm │ │ │ ├── mining.dm │ │ │ ├── misc.dm │ │ │ ├── newscaster.dm │ │ │ ├── nuclearbomb.dm │ │ │ ├── pipe/ │ │ │ │ ├── construction.dm │ │ │ │ └── pipe_dispenser.dm │ │ │ ├── recharger.dm │ │ │ ├── rechargestation.dm │ │ │ ├── robot_fabricator.dm │ │ │ ├── scoreboard.dm │ │ │ ├── seed_extractor.dm │ │ │ ├── sentry_holder.dm │ │ │ ├── spaceheater.dm │ │ │ ├── status_display.dm │ │ │ ├── storm_siren.dm │ │ │ ├── suit_storage_unit.dm │ │ │ ├── supply_display.dm │ │ │ ├── telecomms/ │ │ │ │ ├── broadcaster.dm │ │ │ │ ├── logbrowser.dm │ │ │ │ ├── machine_interactions.dm │ │ │ │ ├── portable_comms.dm │ │ │ │ ├── presets.dm │ │ │ │ ├── telecomunications.dm │ │ │ │ ├── telemonitor.dm │ │ │ │ └── traffic_control.dm │ │ │ ├── teleporter.dm │ │ │ ├── vending/ │ │ │ │ ├── cm_vending.dm │ │ │ │ ├── essential_sets.dm │ │ │ │ ├── vending.dm │ │ │ │ ├── vending_types.dm │ │ │ │ └── vendor_types/ │ │ │ │ ├── antag/ │ │ │ │ │ ├── antag_clothing.dm │ │ │ │ │ ├── antag_gear.dm │ │ │ │ │ ├── antag_guns_snowflake.dm │ │ │ │ │ ├── antag_guns_sorted.dm │ │ │ │ │ ├── antag_predator.dm │ │ │ │ │ └── antag_upp_commanding_officer.dm │ │ │ │ ├── crew/ │ │ │ │ │ ├── cia_agents.dm │ │ │ │ │ ├── combat_correspondent.dm │ │ │ │ │ ├── commanding_officer.dm │ │ │ │ │ ├── corporate_liaison.dm │ │ │ │ │ ├── corporate_security.dm │ │ │ │ │ ├── engineering.dm │ │ │ │ │ ├── k9_synth.dm │ │ │ │ │ ├── medical.dm │ │ │ │ │ ├── mp.dm │ │ │ │ │ ├── pilot_officer.dm │ │ │ │ │ ├── sea.dm │ │ │ │ │ ├── senior_officers.dm │ │ │ │ │ ├── staff_officer.dm │ │ │ │ │ ├── synthetic.dm │ │ │ │ │ └── vehicle_crew.dm │ │ │ │ ├── dress.dm │ │ │ │ ├── engineering.dm │ │ │ │ ├── food.dm │ │ │ │ ├── general.dm │ │ │ │ ├── intelligence_officer.dm │ │ │ │ ├── medical.dm │ │ │ │ ├── prep_upp/ │ │ │ │ │ ├── requisitions_upp.dm │ │ │ │ │ ├── squad_prep_upp.dm │ │ │ │ │ └── uniform_upp.dm │ │ │ │ ├── requisitions.dm │ │ │ │ ├── squad_prep/ │ │ │ │ │ ├── squad_engineer.dm │ │ │ │ │ ├── squad_leader.dm │ │ │ │ │ ├── squad_medic.dm │ │ │ │ │ ├── squad_prep.dm │ │ │ │ │ ├── squad_rifleman.dm │ │ │ │ │ ├── squad_smartgunner.dm │ │ │ │ │ ├── squad_specialist.dm │ │ │ │ │ ├── squad_tl.dm │ │ │ │ │ └── tutorial.dm │ │ │ │ ├── supplies.dm │ │ │ │ └── wo_vendors.dm │ │ │ ├── washing_machine.dm │ │ │ └── weather_siren.dm │ │ ├── objects/ │ │ │ ├── effects/ │ │ │ │ ├── acid_hole.dm │ │ │ │ ├── afterimage.dm │ │ │ │ ├── aliens.dm │ │ │ │ ├── block.dm │ │ │ │ ├── bloodsplatter.dm │ │ │ │ ├── client_image_holder.dm │ │ │ │ ├── decals/ │ │ │ │ │ ├── cleanable/ │ │ │ │ │ │ ├── blood/ │ │ │ │ │ │ │ ├── blood.dm │ │ │ │ │ │ │ ├── robots.dm │ │ │ │ │ │ │ ├── tracks.dm │ │ │ │ │ │ │ └── xeno.dm │ │ │ │ │ │ ├── cleanable.dm │ │ │ │ │ │ ├── fuel.dm │ │ │ │ │ │ └── misc.dm │ │ │ │ │ ├── crayon.dm │ │ │ │ │ ├── decal.dm │ │ │ │ │ ├── floor_symbol.dm │ │ │ │ │ ├── heavy_cable_decal.dm │ │ │ │ │ ├── hefa_cult_decals.dm │ │ │ │ │ ├── hybrisa_decals.dm │ │ │ │ │ ├── kutjevo_decals.dm │ │ │ │ │ ├── medical_decals.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── posters/ │ │ │ │ │ │ └── poster_list.dm │ │ │ │ │ ├── posters.dm │ │ │ │ │ ├── prints.dm │ │ │ │ │ ├── remains.dm │ │ │ │ │ ├── strata_decals.dm │ │ │ │ │ └── warning_stripes.dm │ │ │ │ ├── effect.dm │ │ │ │ ├── effect_system/ │ │ │ │ │ ├── chemsmoke.dm │ │ │ │ │ ├── effect_system.dm │ │ │ │ │ ├── explosions.dm │ │ │ │ │ ├── foam.dm │ │ │ │ │ ├── particle_effects.dm │ │ │ │ │ └── smoke.dm │ │ │ │ ├── elevator.dm │ │ │ │ ├── glowshroom.dm │ │ │ │ ├── heavy_impact.dm │ │ │ │ ├── king_leap.dm │ │ │ │ ├── landmarks/ │ │ │ │ │ ├── corpsespawner.dm │ │ │ │ │ ├── freed_mob_spawner.dm │ │ │ │ │ ├── item_pool.dm │ │ │ │ │ ├── itemspawner.dm │ │ │ │ │ ├── landmarks.dm │ │ │ │ │ ├── structure_spawners/ │ │ │ │ │ │ ├── setup_distress.dm │ │ │ │ │ │ ├── structure_spawner.dm │ │ │ │ │ │ └── xvx_hive.dm │ │ │ │ │ └── survivor_spawner.dm │ │ │ │ ├── manifest.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── overlays.dm │ │ │ │ ├── portals.dm │ │ │ │ ├── projector.dm │ │ │ │ ├── rappel_rope.dm │ │ │ │ ├── shockwave.dm │ │ │ │ ├── spawners/ │ │ │ │ │ ├── faction_spawners.dm │ │ │ │ │ ├── gibspawner.dm │ │ │ │ │ ├── prop_gun_spawner.dm │ │ │ │ │ ├── random.dm │ │ │ │ │ ├── spawner.dm │ │ │ │ │ └── wo_spawners/ │ │ │ │ │ ├── players.dm │ │ │ │ │ └── supplies.dm │ │ │ │ ├── spiders.dm │ │ │ │ └── step_triggers.dm │ │ │ ├── empulse.dm │ │ │ ├── explosion.dm │ │ │ ├── explosion_recursive.dm │ │ │ ├── items/ │ │ │ │ ├── XMAS.dm │ │ │ │ ├── ashtray.dm │ │ │ │ ├── backpack_sprayers.dm │ │ │ │ ├── bodybag.dm │ │ │ │ ├── books/ │ │ │ │ │ ├── book.dm │ │ │ │ │ └── manuals.dm │ │ │ │ ├── cards_ids.dm │ │ │ │ ├── circuitboards/ │ │ │ │ │ ├── airlock.dm │ │ │ │ │ ├── circuitboard.dm │ │ │ │ │ ├── computer.dm │ │ │ │ │ ├── machine.dm │ │ │ │ │ ├── mecha.dm │ │ │ │ │ └── robot_modules.dm │ │ │ │ ├── contraband.dm │ │ │ │ ├── cosmetics.dm │ │ │ │ ├── cpr_dummy.dm │ │ │ │ ├── cprbot_item.dm │ │ │ │ ├── devices/ │ │ │ │ │ ├── aicard.dm │ │ │ │ │ ├── autopsy_scanner.dm │ │ │ │ │ ├── binoculars.dm │ │ │ │ │ ├── cictablet.dm │ │ │ │ │ ├── cloaking.dm │ │ │ │ │ ├── clue_scanner.dm │ │ │ │ │ ├── coins.dm │ │ │ │ │ ├── data_detector.dm │ │ │ │ │ ├── defibrillator.dm │ │ │ │ │ ├── device.dm │ │ │ │ │ ├── dummy_tablet.dm │ │ │ │ │ ├── flash.dm │ │ │ │ │ ├── flashlight.dm │ │ │ │ │ ├── floor_painter.dm │ │ │ │ │ ├── helmet_visors.dm │ │ │ │ │ ├── lightreplacer.dm │ │ │ │ │ ├── megaphone.dm │ │ │ │ │ ├── motion_detector.dm │ │ │ │ │ ├── multitool.dm │ │ │ │ │ ├── personal_data_transmitter.dm │ │ │ │ │ ├── pinpointer.dm │ │ │ │ │ ├── pipe_painter.dm │ │ │ │ │ ├── portable_vendor.dm │ │ │ │ │ ├── radio/ │ │ │ │ │ │ ├── beacon.dm │ │ │ │ │ │ ├── electropack.dm │ │ │ │ │ │ ├── encryptionkey.dm │ │ │ │ │ │ ├── headset.dm │ │ │ │ │ │ ├── intercom.dm │ │ │ │ │ │ ├── listening_bugs.dm │ │ │ │ │ │ ├── motion_sensor.dm │ │ │ │ │ │ └── radio.dm │ │ │ │ │ ├── scanners.dm │ │ │ │ │ ├── taperecorder.dm │ │ │ │ │ ├── teleportation.dm │ │ │ │ │ ├── transfer_valve.dm │ │ │ │ │ ├── vulture_spotter.dm │ │ │ │ │ ├── walkman.dm │ │ │ │ │ └── whistle.dm │ │ │ │ ├── disks.dm │ │ │ │ ├── explosives/ │ │ │ │ │ ├── explosive.dm │ │ │ │ │ ├── grenades/ │ │ │ │ │ │ ├── chem_grenade.dm │ │ │ │ │ │ ├── emgrenade.dm │ │ │ │ │ │ ├── flashbang.dm │ │ │ │ │ │ ├── grenade.dm │ │ │ │ │ │ ├── marines.dm │ │ │ │ │ │ ├── spawnergrenade.dm │ │ │ │ │ │ └── xeno_nades.dm │ │ │ │ │ ├── mine.dm │ │ │ │ │ ├── plastic.dm │ │ │ │ │ └── warhead.dm │ │ │ │ ├── frames/ │ │ │ │ │ ├── alarms.dm │ │ │ │ │ ├── bot_assembly.dm │ │ │ │ │ ├── camera.dm │ │ │ │ │ ├── frame.dm │ │ │ │ │ ├── light_fixtures.dm │ │ │ │ │ ├── matrix.dm │ │ │ │ │ └── table_rack.dm │ │ │ │ ├── fulton.dm │ │ │ │ ├── gift_wrappaper.dm │ │ │ │ ├── handcuffs.dm │ │ │ │ ├── handheld_distress_beacon.dm │ │ │ │ ├── hoverpack.dm │ │ │ │ ├── implants/ │ │ │ │ │ ├── implant.dm │ │ │ │ │ ├── implantcase.dm │ │ │ │ │ ├── implanter.dm │ │ │ │ │ ├── implantfreedom.dm │ │ │ │ │ ├── implantneurostim.dm │ │ │ │ │ └── implantpad.dm │ │ │ │ ├── legcuffs.dm │ │ │ │ ├── lightstick.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── ore.dm │ │ │ │ ├── paint.dm │ │ │ │ ├── pamphlets/ │ │ │ │ │ ├── pamphlet_languages.dm │ │ │ │ │ ├── pamphlet_upgrades.dm │ │ │ │ │ └── pamphlets.dm │ │ │ │ ├── props/ │ │ │ │ │ ├── helmetgarb.dm │ │ │ │ │ ├── robots.dm │ │ │ │ │ ├── rocks.dm │ │ │ │ │ └── souto_land.dm │ │ │ │ ├── reagent_containers/ │ │ │ │ │ ├── autoinjectors.dm │ │ │ │ │ ├── beverages.dm │ │ │ │ │ ├── blood_pack.dm │ │ │ │ │ ├── dropper.dm │ │ │ │ │ ├── food/ │ │ │ │ │ │ ├── canned_food.dm │ │ │ │ │ │ ├── cans.dm │ │ │ │ │ │ ├── condiment.dm │ │ │ │ │ │ ├── drinks/ │ │ │ │ │ │ │ ├── bottle.dm │ │ │ │ │ │ │ ├── drinkingglass.dm │ │ │ │ │ │ │ └── jar.dm │ │ │ │ │ │ ├── drinks.dm │ │ │ │ │ │ ├── fish_snacks.dm │ │ │ │ │ │ ├── fortunecookie.dm │ │ │ │ │ │ ├── mre_food/ │ │ │ │ │ │ │ ├── clf.dm │ │ │ │ │ │ │ ├── core_food.dm │ │ │ │ │ │ │ ├── mercenary.dm │ │ │ │ │ │ │ ├── twe.dm │ │ │ │ │ │ │ ├── upp.dm │ │ │ │ │ │ │ ├── uscm.dm │ │ │ │ │ │ │ └── wy.dm │ │ │ │ │ │ ├── sandwich.dm │ │ │ │ │ │ ├── snacks/ │ │ │ │ │ │ │ ├── grown.dm │ │ │ │ │ │ │ └── meat.dm │ │ │ │ │ │ └── snacks.dm │ │ │ │ │ ├── food.dm │ │ │ │ │ ├── glass/ │ │ │ │ │ │ ├── bottle/ │ │ │ │ │ │ │ └── robot.dm │ │ │ │ │ │ └── bottle.dm │ │ │ │ │ ├── glass.dm │ │ │ │ │ ├── hypospray.dm │ │ │ │ │ ├── pill.dm │ │ │ │ │ ├── reagent_container.dm │ │ │ │ │ ├── robodropper.dm │ │ │ │ │ ├── robot_parts.dm │ │ │ │ │ ├── spray.dm │ │ │ │ │ └── syringes.dm │ │ │ │ ├── research_upgrades.dm │ │ │ │ ├── shards.dm │ │ │ │ ├── stacks/ │ │ │ │ │ ├── barbed_wire.dm │ │ │ │ │ ├── cable_coil.dm │ │ │ │ │ ├── catwalk.dm │ │ │ │ │ ├── flags.dm │ │ │ │ │ ├── medical.dm │ │ │ │ │ ├── nanopaste.dm │ │ │ │ │ ├── predator.dm │ │ │ │ │ ├── rods.dm │ │ │ │ │ ├── sandbags.dm │ │ │ │ │ ├── sheets/ │ │ │ │ │ │ ├── glass.dm │ │ │ │ │ │ ├── leather.dm │ │ │ │ │ │ ├── light.dm │ │ │ │ │ │ ├── mineral.dm │ │ │ │ │ │ ├── sheet_types.dm │ │ │ │ │ │ └── sheets.dm │ │ │ │ │ ├── snow.dm │ │ │ │ │ ├── stack.dm │ │ │ │ │ └── tiles/ │ │ │ │ │ ├── light.dm │ │ │ │ │ └── tile_types.dm │ │ │ │ ├── stock_parts.dm │ │ │ │ ├── storage/ │ │ │ │ │ ├── backpack.dm │ │ │ │ │ ├── bags.dm │ │ │ │ │ ├── belt.dm │ │ │ │ │ ├── bible.dm │ │ │ │ │ ├── boxes.dm │ │ │ │ │ ├── briefcase.dm │ │ │ │ │ ├── fancy.dm │ │ │ │ │ ├── firstaid.dm │ │ │ │ │ ├── internal.dm │ │ │ │ │ ├── large_holster.dm │ │ │ │ │ ├── lockbox.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── mre.dm │ │ │ │ │ ├── pouch.dm │ │ │ │ │ ├── secure.dm │ │ │ │ │ ├── smartpack.dm │ │ │ │ │ ├── storage.dm │ │ │ │ │ ├── surgical_tray.dm │ │ │ │ │ ├── toolbox.dm │ │ │ │ │ ├── toolkit.dm │ │ │ │ │ └── wallets.dm │ │ │ │ ├── tanks/ │ │ │ │ │ ├── tank_types.dm │ │ │ │ │ └── tanks.dm │ │ │ │ ├── tools/ │ │ │ │ │ ├── cleaning_tools.dm │ │ │ │ │ ├── experimental_tools.dm │ │ │ │ │ ├── extinguisher.dm │ │ │ │ │ ├── flame_tools.dm │ │ │ │ │ ├── hydro_tools.dm │ │ │ │ │ ├── kitchen_tools.dm │ │ │ │ │ ├── maintenance_tools.dm │ │ │ │ │ ├── mining_tools.dm │ │ │ │ │ ├── misc_tools.dm │ │ │ │ │ ├── shovel_tools.dm │ │ │ │ │ └── surgery_tools.dm │ │ │ │ ├── toys/ │ │ │ │ │ ├── cards.dm │ │ │ │ │ ├── crayons.dm │ │ │ │ │ ├── toy_weapons.dm │ │ │ │ │ ├── toys.dm │ │ │ │ │ └── trading_cards.dm │ │ │ │ ├── trash.dm │ │ │ │ └── weapons/ │ │ │ │ ├── blades.dm │ │ │ │ ├── energy.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── shields.dm │ │ │ │ ├── stunbaton.dm │ │ │ │ ├── swords_axes_etc.dm │ │ │ │ ├── twohanded.dm │ │ │ │ ├── weapon.dm │ │ │ │ └── weaponry.dm │ │ │ ├── items.dm │ │ │ ├── objs.dm │ │ │ ├── prop.dm │ │ │ ├── shrapnel.dm │ │ │ ├── structures/ │ │ │ │ ├── airlock_assembly.dm │ │ │ │ ├── ancient_brazier.dm │ │ │ │ ├── barricade/ │ │ │ │ │ ├── barricade.dm │ │ │ │ │ ├── deployable.dm │ │ │ │ │ ├── folding.dm │ │ │ │ │ ├── handrail.dm │ │ │ │ │ ├── misc.dm │ │ │ │ │ ├── non_folding.dm │ │ │ │ │ └── sandbags.dm │ │ │ │ ├── barsign.dm │ │ │ │ ├── bedsheet_bin.dm │ │ │ │ ├── blocker.dm │ │ │ │ ├── bookcase.dm │ │ │ │ ├── cargo_container.dm │ │ │ │ ├── catwalk.dm │ │ │ │ ├── coathanger.dm │ │ │ │ ├── crates_lockers/ │ │ │ │ │ ├── closets/ │ │ │ │ │ │ ├── coffin.dm │ │ │ │ │ │ ├── crittercrate.dm │ │ │ │ │ │ ├── fireaxe.dm │ │ │ │ │ │ ├── fitness.dm │ │ │ │ │ │ ├── gimmick.dm │ │ │ │ │ │ ├── job_closets.dm │ │ │ │ │ │ ├── l3closet.dm │ │ │ │ │ │ ├── phonebox.dm │ │ │ │ │ │ ├── secure/ │ │ │ │ │ │ │ ├── bar.dm │ │ │ │ │ │ │ ├── cargo.dm │ │ │ │ │ │ │ ├── cm_closets.dm │ │ │ │ │ │ │ ├── emergency/ │ │ │ │ │ │ │ │ ├── emergency_closets.dm │ │ │ │ │ │ │ │ └── medical.dm │ │ │ │ │ │ │ ├── engineering.dm │ │ │ │ │ │ │ ├── freezer.dm │ │ │ │ │ │ │ ├── guncabinet/ │ │ │ │ │ │ │ │ ├── guncabinet.dm │ │ │ │ │ │ │ │ ├── level_blue.dm │ │ │ │ │ │ │ │ └── level_red.dm │ │ │ │ │ │ │ ├── hydroponics.dm │ │ │ │ │ │ │ ├── kitchen.dm │ │ │ │ │ │ │ ├── medical.dm │ │ │ │ │ │ │ ├── personal.dm │ │ │ │ │ │ │ ├── scientist.dm │ │ │ │ │ │ │ ├── secure_closets.dm │ │ │ │ │ │ │ └── security.dm │ │ │ │ │ │ ├── utility_closets.dm │ │ │ │ │ │ ├── wall_locker.dm │ │ │ │ │ │ └── wardrobe.dm │ │ │ │ │ ├── closets.dm │ │ │ │ │ ├── crates.dm │ │ │ │ │ ├── largecrate.dm │ │ │ │ │ ├── largecrate_supplies.dm │ │ │ │ │ └── secure_crates.dm │ │ │ │ ├── curtains.dm │ │ │ │ ├── desertdam.dm │ │ │ │ ├── displaycase.dm │ │ │ │ ├── extinguisher.dm │ │ │ │ ├── fence.dm │ │ │ │ ├── flora.dm │ │ │ │ ├── girders.dm │ │ │ │ ├── grille.dm │ │ │ │ ├── hunter_props.dm │ │ │ │ ├── hybrisa_props.dm │ │ │ │ ├── ice_caves.dm │ │ │ │ ├── inflatable.dm │ │ │ │ ├── janicart.dm │ │ │ │ ├── kitchen_spike.dm │ │ │ │ ├── ladders.dm │ │ │ │ ├── lamarr_cage.dm │ │ │ │ ├── landing_signs.dm │ │ │ │ ├── lattice.dm │ │ │ │ ├── lawnmower.dm │ │ │ │ ├── mineral_doors.dm │ │ │ │ ├── mirror.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── morgue.dm │ │ │ │ ├── multiz_stairs.dm │ │ │ │ ├── musician.dm │ │ │ │ ├── noticeboard.dm │ │ │ │ ├── pipes/ │ │ │ │ │ ├── binary_misc.dm │ │ │ │ │ ├── multiz_pipes.dm │ │ │ │ │ ├── pipes.dm │ │ │ │ │ ├── standard/ │ │ │ │ │ │ ├── manifolds.dm │ │ │ │ │ │ ├── simple.dm │ │ │ │ │ │ ├── standard.dm │ │ │ │ │ │ └── standard_misc.dm │ │ │ │ │ ├── trinary_misc.dm │ │ │ │ │ ├── unary_misc.dm │ │ │ │ │ ├── valve_connector.dm │ │ │ │ │ └── vents/ │ │ │ │ │ ├── pump_scrubber.dm │ │ │ │ │ └── vents.dm │ │ │ │ ├── platforms.dm │ │ │ │ ├── prop_mech.dm │ │ │ │ ├── props/ │ │ │ │ │ ├── requests_console.dm │ │ │ │ │ └── research.dm │ │ │ │ ├── props.dm │ │ │ │ ├── reagent_dispensers.dm │ │ │ │ ├── roof.dm │ │ │ │ ├── safe.dm │ │ │ │ ├── shower.dm │ │ │ │ ├── signs.dm │ │ │ │ ├── sink.dm │ │ │ │ ├── stool_bed_chair_nest/ │ │ │ │ │ ├── bed.dm │ │ │ │ │ ├── chairs.dm │ │ │ │ │ ├── janicart.dm │ │ │ │ │ ├── sofa.dm │ │ │ │ │ ├── stools.dm │ │ │ │ │ ├── wheelchair.dm │ │ │ │ │ └── xeno_nest.dm │ │ │ │ ├── surface.dm │ │ │ │ ├── tables_racks.dm │ │ │ │ ├── tank_dispenser.dm │ │ │ │ ├── temple_rubble.dm │ │ │ │ ├── tyrargo_props.dm │ │ │ │ ├── urinal.dm │ │ │ │ ├── vulture_spotter.dm │ │ │ │ ├── watercloset.dm │ │ │ │ ├── windoor_assembly.dm │ │ │ │ ├── window.dm │ │ │ │ └── window_frame.dm │ │ │ └── structures.dm │ │ ├── runtimes.dm │ │ ├── shuttle_engines.dm │ │ ├── sim_manager/ │ │ │ └── datums/ │ │ │ └── simulator.dm │ │ ├── skincmd.dm │ │ ├── smoothwall.dm │ │ ├── sound.dm │ │ ├── supplyshuttle.dm │ │ ├── supplyshuttle_upp.dm │ │ ├── turfs/ │ │ │ ├── auto_turf.dm │ │ │ ├── baseturf_skipover.dm │ │ │ ├── closed.dm │ │ │ ├── floor.dm │ │ │ ├── floor_types.dm │ │ │ ├── floors/ │ │ │ │ └── desert.dm │ │ │ ├── hunter_turf.dm │ │ │ ├── hybrisa.dm │ │ │ ├── kutjevo.dm │ │ │ ├── light.dm │ │ │ ├── open.dm │ │ │ ├── open_space.dm │ │ │ ├── shale.dm │ │ │ ├── shiva.dm │ │ │ ├── soro.dm │ │ │ ├── space.dm │ │ │ ├── strata.dm │ │ │ ├── transit.dm │ │ │ ├── turf.dm │ │ │ └── walls/ │ │ │ ├── r_wall.dm │ │ │ ├── wall_icon.dm │ │ │ ├── wall_types.dm │ │ │ └── walls.dm │ │ ├── verbs/ │ │ │ ├── ooc.dm │ │ │ ├── preferences.dm │ │ │ └── records.dm │ │ └── world.dm │ ├── global.dm │ ├── modules/ │ │ ├── admin/ │ │ │ ├── IsBanned.dm │ │ │ ├── NewBan.dm │ │ │ ├── STUI.dm │ │ │ ├── admin.dm │ │ │ ├── admin_ranks.dm │ │ │ ├── admin_verbs.dm │ │ │ ├── autoreply.dm │ │ │ ├── banjob.dm │ │ │ ├── callproc.dm │ │ │ ├── chat_commands.dm │ │ │ ├── create_mob.dm │ │ │ ├── create_object.dm │ │ │ ├── create_turf.dm │ │ │ ├── fax_templates.dm │ │ │ ├── gamemode_modifiers_panel.dm │ │ │ ├── holder2.dm │ │ │ ├── medal_panel/ │ │ │ │ ├── medals_panel.dm │ │ │ │ └── medals_panel_tgui.dm │ │ │ ├── player_notes.dm │ │ │ ├── player_panel/ │ │ │ │ ├── actions/ │ │ │ │ │ ├── antag.dm │ │ │ │ │ ├── fun.dm │ │ │ │ │ ├── general.dm │ │ │ │ │ ├── physical.dm │ │ │ │ │ ├── punish.dm │ │ │ │ │ └── transform.dm │ │ │ │ ├── player_action.dm │ │ │ │ └── player_panel.dm │ │ │ ├── server_verbs.dm │ │ │ ├── tabs/ │ │ │ │ ├── admin_tab.dm │ │ │ │ ├── debug_tab.dm │ │ │ │ ├── event_tab.dm │ │ │ │ ├── round_tab.dm │ │ │ │ ├── server_tab.dm │ │ │ │ └── thunderdome_tab.dm │ │ │ ├── tacmap_panel/ │ │ │ │ ├── tacmap_admin_panel.dm │ │ │ │ └── tacmap_admin_panel_tgui.dm │ │ │ ├── tag.dm │ │ │ ├── topic/ │ │ │ │ ├── topic.dm │ │ │ │ ├── topic_chems.dm │ │ │ │ ├── topic_events.dm │ │ │ │ ├── topic_inview.dm │ │ │ │ ├── topic_teleports.dm │ │ │ │ └── topic_vehicles.dm │ │ │ ├── two_factor.dm │ │ │ ├── verbs/ │ │ │ │ ├── SDQL2/ │ │ │ │ │ ├── SDQL_2.dm │ │ │ │ │ ├── SDQL_2_parser.dm │ │ │ │ │ └── SDQL_2_wrappers.dm │ │ │ │ ├── adminhelp.dm │ │ │ │ ├── adminjump.dm │ │ │ │ ├── adminpanelgq.dm │ │ │ │ ├── adminpanelweapons.dm │ │ │ │ ├── adminpm.dm │ │ │ │ ├── autoreplace.dm │ │ │ │ ├── custom_event.dm │ │ │ │ ├── custom_paper.dm │ │ │ │ ├── deadsay.dm │ │ │ │ ├── debug.dm │ │ │ │ ├── freeforghosts.dm │ │ │ │ ├── getlogs.dm │ │ │ │ ├── load_event_level.dm │ │ │ │ ├── map_template_loadverb.dm │ │ │ │ ├── mentorhud.dm │ │ │ │ ├── mob_verbs.dm │ │ │ │ ├── mooc.dm │ │ │ │ ├── noclip.dm │ │ │ │ ├── playsound.dm │ │ │ │ ├── pray.dm │ │ │ │ ├── randomverbs.dm │ │ │ │ ├── select_equipment.dm │ │ │ │ ├── shakeshipverb.dm │ │ │ │ ├── shuttlepanel.dm │ │ │ │ ├── xooc.dm │ │ │ │ └── yooc.dm │ │ │ └── view_variables/ │ │ │ ├── admin_delete.dm │ │ │ ├── color_matrix_editor.dm │ │ │ ├── debug_variables.dm │ │ │ ├── filterrific.dm │ │ │ ├── get_variables.dm │ │ │ ├── mark_datum.dm │ │ │ ├── mass_edit_variables.dm │ │ │ ├── modify_variables.dm │ │ │ ├── particle_editor.dm │ │ │ ├── reference_tracking.dm │ │ │ ├── tag_datum.dm │ │ │ ├── topic.dm │ │ │ ├── topic_basic.dm │ │ │ ├── topic_list.dm │ │ │ └── view_variables.dm │ │ ├── almayer/ │ │ │ ├── machinery.dm │ │ │ ├── shakeship.dm │ │ │ ├── ship_memorial.dm │ │ │ └── weaponhits.dm │ │ ├── animations/ │ │ │ └── animation_library.dm │ │ ├── assembly/ │ │ │ ├── assembly.dm │ │ │ ├── helpers.dm │ │ │ ├── holder.dm │ │ │ ├── igniter.dm │ │ │ ├── infrared.dm │ │ │ ├── mousetrap.dm │ │ │ ├── proximity.dm │ │ │ ├── signaller.dm │ │ │ ├── timer.dm │ │ │ └── voice.dm │ │ ├── asset_cache/ │ │ │ ├── asset_cache_client.dm │ │ │ ├── asset_cache_item.dm │ │ │ ├── asset_list.dm │ │ │ ├── asset_list_items.dm │ │ │ ├── assets/ │ │ │ │ ├── fontawesome.dm │ │ │ │ ├── icon_ref_map.dm │ │ │ │ ├── lobby.dm │ │ │ │ ├── medals.dm │ │ │ │ ├── sevastopol.dm │ │ │ │ ├── stack_receipts.dm │ │ │ │ ├── tgfont.dm │ │ │ │ ├── tgui.dm │ │ │ │ └── vending.dm │ │ │ ├── readme.md │ │ │ ├── transports/ │ │ │ │ ├── asset_transport.dm │ │ │ │ └── webroot_transport.dm │ │ │ └── validate_assets.html │ │ ├── autowiki/ │ │ │ ├── autowiki.dm │ │ │ └── pages/ │ │ │ ├── _page.dm │ │ │ ├── guns.dm │ │ │ ├── supply_packs.dm │ │ │ └── xeno_stats.dm │ │ ├── buildmode/ │ │ │ ├── README.md │ │ │ ├── bm-mode.dm │ │ │ ├── buildmode.dm │ │ │ ├── buttons.dm │ │ │ └── submodes/ │ │ │ ├── advanced.dm │ │ │ ├── area_edit.dm │ │ │ ├── basic.dm │ │ │ ├── boom.dm │ │ │ ├── copy.dm │ │ │ ├── delete.dm │ │ │ ├── fill.dm │ │ │ ├── outfit.dm │ │ │ ├── throwing.dm │ │ │ └── variable_edit.dm │ │ ├── character_traits/ │ │ │ ├── biology_traits.dm │ │ │ ├── character_trait.dm │ │ │ ├── hair_dye.dm │ │ │ ├── languages.dm │ │ │ ├── robotic_limbs.dm │ │ │ └── skills.dm │ │ ├── clans/ │ │ │ ├── clan.dm │ │ │ ├── client.dm │ │ │ ├── rank.dm │ │ │ └── ship.dm │ │ ├── client/ │ │ │ ├── body_picker.dm │ │ │ ├── client_defines.dm │ │ │ ├── client_procs.dm │ │ │ ├── country_flags.dm │ │ │ ├── flavor_text_editor.dm │ │ │ ├── hair_picker.dm │ │ │ ├── loadout_picker.dm │ │ │ ├── player_details.dm │ │ │ ├── pred_picker.dm │ │ │ ├── preferences.dm │ │ │ ├── preferences_factions.dm │ │ │ ├── preferences_gear.dm │ │ │ ├── preferences_savefile.dm │ │ │ ├── preferences_toggles.dm │ │ │ ├── tgui_macro.dm │ │ │ └── traits_picker.dm │ │ ├── clothing/ │ │ │ ├── clothing.dm │ │ │ ├── clothing_accessories.dm │ │ │ ├── clothing_helpers.dm │ │ │ ├── glasses/ │ │ │ │ ├── glasses.dm │ │ │ │ ├── hud.dm │ │ │ │ ├── meson.dm │ │ │ │ ├── night.dm │ │ │ │ └── thermal.dm │ │ │ ├── gloves/ │ │ │ │ ├── color.dm │ │ │ │ ├── marine_gloves.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── head/ │ │ │ │ ├── WY/ │ │ │ │ │ ├── commando.dm │ │ │ │ │ ├── goons.dm │ │ │ │ │ ├── pmc.dm │ │ │ │ │ └── wy_droid.dm │ │ │ │ ├── collectable.dm │ │ │ │ ├── hardhat.dm │ │ │ │ ├── head.dm │ │ │ │ ├── helmet.dm │ │ │ │ ├── jobs.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── misc_special.dm │ │ │ │ ├── soft_caps.dm │ │ │ │ └── xeno_hats.dm │ │ │ ├── hybrisa_clothing.dm │ │ │ ├── masks/ │ │ │ │ ├── breath.dm │ │ │ │ ├── gasmask.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── officer_stuff.dm │ │ │ ├── shoes/ │ │ │ │ ├── colour.dm │ │ │ │ ├── magboots.dm │ │ │ │ ├── marine_shoes.dm │ │ │ │ └── miscellaneous.dm │ │ │ ├── spacesuits/ │ │ │ │ ├── breaches.dm │ │ │ │ ├── miscellaneous.dm │ │ │ │ ├── spacesuits.dm │ │ │ │ └── void.dm │ │ │ ├── suits/ │ │ │ │ ├── armor.dm │ │ │ │ ├── bio.dm │ │ │ │ ├── jobs.dm │ │ │ │ ├── labcoat.dm │ │ │ │ ├── marine_armor/ │ │ │ │ │ ├── WY/ │ │ │ │ │ │ ├── commando.dm │ │ │ │ │ │ ├── goon.dm │ │ │ │ │ │ ├── pmc.dm │ │ │ │ │ │ └── wy_droid.dm │ │ │ │ │ ├── _marine_armor.dm │ │ │ │ │ ├── ert.dm │ │ │ │ │ ├── ghillie.dm │ │ │ │ │ ├── intel.dm │ │ │ │ │ ├── smartgunner.dm │ │ │ │ │ └── spec_fire.dm │ │ │ │ ├── marine_coat.dm │ │ │ │ ├── miscellaneous.dm │ │ │ │ ├── storage.dm │ │ │ │ ├── utility.dm │ │ │ │ └── xeno_suits.dm │ │ │ └── under/ │ │ │ ├── color.dm │ │ │ ├── gimmick.dm │ │ │ ├── jobs/ │ │ │ │ ├── civilian.dm │ │ │ │ ├── engineering.dm │ │ │ │ ├── medsci.dm │ │ │ │ └── security.dm │ │ │ ├── marine_uniform.dm │ │ │ ├── miscellaneous.dm │ │ │ ├── rank_pins.dm │ │ │ ├── shorts.dm │ │ │ ├── ties.dm │ │ │ └── under.dm │ │ ├── cm_aliens/ │ │ │ ├── Ovipositor.dm │ │ │ ├── XenoStructures.dm │ │ │ ├── hivebuffs/ │ │ │ │ └── hivebuff.dm │ │ │ ├── structures/ │ │ │ │ ├── construction_node.dm │ │ │ │ ├── egg.dm │ │ │ │ ├── fruit.dm │ │ │ │ ├── special/ │ │ │ │ │ ├── egg_morpher.dm │ │ │ │ │ ├── hive_cluster.dm │ │ │ │ │ ├── pred_nest.dm │ │ │ │ │ ├── pylon_core.dm │ │ │ │ │ └── recovery_node.dm │ │ │ │ ├── special_structure.dm │ │ │ │ ├── trap.dm │ │ │ │ ├── tunnel.dm │ │ │ │ └── xeno_structures_boilertrap.dm │ │ │ └── weeds.dm │ │ ├── cm_marines/ │ │ │ ├── Donator_Items.dm │ │ │ ├── altitude_control_console.dm │ │ │ ├── anti_air.dm │ │ │ ├── codebook.dm │ │ │ ├── custom_items.dm │ │ │ ├── dropship_ammo.dm │ │ │ ├── dropship_equipment.dm │ │ │ ├── equipment/ │ │ │ │ ├── gear.dm │ │ │ │ ├── guncases.dm │ │ │ │ ├── kit_boxes.dm │ │ │ │ ├── maps.dm │ │ │ │ ├── mortar/ │ │ │ │ │ ├── mortar_shells.dm │ │ │ │ │ └── mortars.dm │ │ │ │ └── weapons.dm │ │ │ ├── m2c.dm │ │ │ ├── marines_consoles.dm │ │ │ ├── orbital_cannon.dm │ │ │ ├── overwatch.dm │ │ │ ├── radar.dm │ │ │ ├── shuttle_backend.dm │ │ │ ├── smartgun_mount.dm │ │ │ ├── specialist.dm │ │ │ └── vehicle_part_fabricator.dm │ │ ├── cm_phone/ │ │ │ ├── internal_phone.dm │ │ │ └── phone.dm │ │ ├── cm_preds/ │ │ │ ├── _yaut_defines.dm │ │ │ ├── falcon.dm │ │ │ ├── huntdata.dm │ │ │ ├── hunting_grounds.dm │ │ │ ├── lz_placer.dm │ │ │ ├── mcaste_items.dm │ │ │ ├── mcaste_weapons.dm │ │ │ ├── smartdisc.dm │ │ │ ├── thrall_items.dm │ │ │ ├── thrall_procs.dm │ │ │ ├── yaut_actions.dm │ │ │ ├── yaut_bow_arrow.dm │ │ │ ├── yaut_bracers.dm │ │ │ ├── yaut_hudprocs.dm │ │ │ ├── yaut_items.dm │ │ │ ├── yaut_machines.dm │ │ │ ├── yaut_mask.dm │ │ │ ├── yaut_procs.dm │ │ │ └── yaut_weapons.dm │ │ ├── cm_tech/ │ │ │ ├── droppod/ │ │ │ │ ├── droppod.dm │ │ │ │ ├── equipment.dm │ │ │ │ ├── gear_access_point.dm │ │ │ │ ├── lz_effect.dm │ │ │ │ ├── marine.dm │ │ │ │ └── supply.dm │ │ │ ├── hologram.dm │ │ │ ├── implements/ │ │ │ │ ├── adv_weapon.dm │ │ │ │ ├── ammo_kits.dm │ │ │ │ ├── armor.dm │ │ │ │ ├── czsp.dm │ │ │ │ ├── engi_czsp.dm │ │ │ │ ├── implants.dm │ │ │ │ ├── railgun.dm │ │ │ │ ├── rev_jelly.dm │ │ │ │ ├── stims.dm │ │ │ │ ├── tank.dm │ │ │ │ └── xeno_handler.dm │ │ │ ├── research_memories.dm │ │ │ ├── resources/ │ │ │ │ ├── landmark.dm │ │ │ │ └── resource.dm │ │ │ ├── tech.dm │ │ │ ├── tech_memories.dm │ │ │ ├── tech_node.dm │ │ │ ├── tech_tiers.dm │ │ │ ├── techs/ │ │ │ │ ├── abstract/ │ │ │ │ │ ├── repeatable.dm │ │ │ │ │ └── transitory.dm │ │ │ │ └── marine/ │ │ │ │ ├── tier1/ │ │ │ │ │ ├── arc.dm │ │ │ │ │ └── points.dm │ │ │ │ ├── tier2/ │ │ │ │ │ └── orbital_ammo.dm │ │ │ │ ├── tier3/ │ │ │ │ │ ├── cryo_spec.dm │ │ │ │ │ └── cryorine.dm │ │ │ │ └── tier4/ │ │ │ │ └── nuke.dm │ │ │ ├── techtree.dm │ │ │ └── trees/ │ │ │ └── marine.dm │ │ ├── decorators/ │ │ │ ├── admin_runtime_decorator.dm │ │ │ ├── cassette_decorator.dm │ │ │ ├── christmas.dm │ │ │ ├── mass_xeno_decorator.dm │ │ │ ├── weapon_decorator.dm │ │ │ └── weapon_map_decorator.dm │ │ ├── defenses/ │ │ │ ├── bell_tower.dm │ │ │ ├── defenses.dm │ │ │ ├── handheld.dm │ │ │ ├── planted_flag.dm │ │ │ ├── sentry.dm │ │ │ ├── sentry_computer.dm │ │ │ ├── sentry_flamer.dm │ │ │ └── tesla_coil.dm │ │ ├── desert_dam/ │ │ │ ├── filtration/ │ │ │ │ ├── consoles.dm │ │ │ │ ├── dispersal_landmark.dm │ │ │ │ ├── filtration.dm │ │ │ │ ├── floodgates.dm │ │ │ │ ├── structures.dm │ │ │ │ ├── water_base.dm │ │ │ │ └── water_toxic.dm │ │ │ └── motion_sensor/ │ │ │ └── sensortower.dm │ │ ├── discord/ │ │ │ └── discord_embed.dm │ │ ├── droppod/ │ │ │ ├── container_droppod.dm │ │ │ └── droppod_ui.dm │ │ ├── dropships/ │ │ │ ├── attach_points/ │ │ │ │ ├── attach_point.dm │ │ │ │ └── templates.dm │ │ │ └── cas/ │ │ │ └── fire_mission_record.dm │ │ ├── economy/ │ │ │ ├── ATM.dm │ │ │ ├── Accounts.dm │ │ │ ├── EFTPOS.dm │ │ │ ├── cash.dm │ │ │ └── economy_misc.dm │ │ ├── emoji/ │ │ │ └── emoji_parse.dm │ │ ├── escape_menu/ │ │ │ ├── admin_buttons.dm │ │ │ ├── details.dm │ │ │ ├── dimmer.dm │ │ │ ├── escape_menu.dm │ │ │ ├── home_page.dm │ │ │ ├── leave_body.dm │ │ │ ├── subsystem.dm │ │ │ └── title.dm │ │ ├── events/ │ │ │ ├── _events.dm │ │ │ ├── comms_blackout.dm │ │ │ ├── destructible_terrain.dm │ │ │ ├── inflation.dm │ │ │ └── nothing_happens.dm │ │ ├── fishing/ │ │ │ ├── bait/ │ │ │ │ └── generic.dm │ │ │ ├── datums/ │ │ │ │ ├── generic.dm │ │ │ │ └── helpers.dm │ │ │ ├── poles/ │ │ │ │ └── generic.dm │ │ │ └── props/ │ │ │ ├── fishing_line.dm │ │ │ └── fishing_pole.dm │ │ ├── flufftext/ │ │ │ ├── Chinese.dm │ │ │ ├── Dreaming.dm │ │ │ ├── Hallucination.dm │ │ │ ├── Japanese.dm │ │ │ └── TextFilters.dm │ │ ├── gear_presets/ │ │ │ ├── _select_equipment.dm │ │ │ ├── agents.dm │ │ │ ├── cbrn.dm │ │ │ ├── cia.dm │ │ │ ├── clf.dm │ │ │ ├── cmb.dm │ │ │ ├── colonist.dm │ │ │ ├── contractor.dm │ │ │ ├── corpses.dm │ │ │ ├── dust_raider.dm │ │ │ ├── dutch.dm │ │ │ ├── fax_responders.dm │ │ │ ├── fun.dm │ │ │ ├── mutiny.dm │ │ │ ├── other.dm │ │ │ ├── pmc.dm │ │ │ ├── royal_marines.dm │ │ │ ├── survivors/ │ │ │ │ ├── corsat/ │ │ │ │ │ └── preset_corsat.dm │ │ │ │ ├── fiorina_sciannex/ │ │ │ │ │ ├── preset_fiorina_sciannex.dm │ │ │ │ │ └── riot_in_progress_insert_fiorina_nightmare.dm │ │ │ │ ├── kutjevo/ │ │ │ │ │ └── preset_kutjevo.dm │ │ │ │ ├── lv_522/ │ │ │ │ │ └── forcon_survivors.dm │ │ │ │ ├── lv_624/ │ │ │ │ │ ├── clfship_insert_lv624.dm │ │ │ │ │ ├── corporate_dome_insert_lv624.dm │ │ │ │ │ └── preset_lv.dm │ │ │ │ ├── lv_759/ │ │ │ │ │ ├── iasf_survivor_insert.dm │ │ │ │ │ └── preset_hybrisa.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── new_varadero/ │ │ │ │ │ └── preset_new_varadero.dm │ │ │ │ ├── shivas_snowball/ │ │ │ │ │ ├── panic_room_insert_shivas.dm │ │ │ │ │ └── preset_shivas_snowball.dm │ │ │ │ ├── solaris/ │ │ │ │ │ ├── crashlanding-offices_insert_bigred.dm │ │ │ │ │ └── preset_solaris.dm │ │ │ │ ├── sorokyne_strata/ │ │ │ │ │ ├── crashlanding_insert_soro.dm │ │ │ │ │ └── preset_sorokyne_strata.dm │ │ │ │ ├── survivors.dm │ │ │ │ ├── trijent/ │ │ │ │ │ ├── crashlanding_upp_bar_insert_trijent.dm │ │ │ │ │ └── preset_trijent.dm │ │ │ │ └── tyrargo_rift/ │ │ │ │ └── us_army_survivors.dm │ │ │ ├── synth_k9.dm │ │ │ ├── synths.dm │ │ │ ├── upp.dm │ │ │ ├── us_army.dm │ │ │ ├── uscm.dm │ │ │ ├── uscm_co.dm │ │ │ ├── uscm_dress.dm │ │ │ ├── uscm_event.dm │ │ │ ├── uscm_forecon.dm │ │ │ ├── uscm_medical.dm │ │ │ ├── uscm_police.dm │ │ │ ├── uscm_ship.dm │ │ │ ├── uscm_synths.dm │ │ │ ├── whiteout.dm │ │ │ ├── wo.dm │ │ │ ├── wy.dm │ │ │ ├── wy_commandos.dm │ │ │ ├── wy_goons.dm │ │ │ └── yautja.dm │ │ ├── holidays/ │ │ │ ├── halloween/ │ │ │ │ ├── decorators.dm │ │ │ │ └── pumpkins/ │ │ │ │ ├── patches.dm │ │ │ │ └── wearable.dm │ │ │ └── holidays.dm │ │ ├── hydroponics/ │ │ │ ├── botany_disks.dm │ │ │ ├── grown_inedible.dm │ │ │ ├── hydro_tools.dm │ │ │ ├── hydro_tray.dm │ │ │ ├── seed_datums.dm │ │ │ ├── seed_machines/ │ │ │ │ ├── seed_editor.dm │ │ │ │ ├── seed_extractor.dm │ │ │ │ └── seed_machines.dm │ │ │ └── seeds.dm │ │ ├── keybindings/ │ │ │ ├── bindings_atom.dm │ │ │ ├── bindings_client.dm │ │ │ ├── focus.dm │ │ │ ├── readme.md │ │ │ └── setup.dm │ │ ├── law/ │ │ │ ├── incident.dm │ │ │ ├── law.dm │ │ │ └── laws/ │ │ │ ├── capital_crime.dm │ │ │ ├── civil_crime.dm │ │ │ ├── major_crime.dm │ │ │ ├── minor_crime.dm │ │ │ ├── optional.dm │ │ │ └── precautionary_charge.dm │ │ ├── lighting/ │ │ │ ├── _LIGHTING_README.MD │ │ │ ├── emissive_blocker.dm │ │ │ ├── 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/ │ │ │ ├── global_logs.dm │ │ │ ├── log_category.dm │ │ │ └── log_holder.dm │ │ ├── mapping/ │ │ │ ├── README.txt │ │ │ ├── map_template.dm │ │ │ ├── mapping_helpers.dm │ │ │ ├── merge_conflicts.dm │ │ │ ├── preloader.dm │ │ │ ├── reader.dm │ │ │ ├── space_management/ │ │ │ │ ├── space_level.dm │ │ │ │ ├── space_reservation.dm │ │ │ │ ├── traits.dm │ │ │ │ └── zlevel_manager.dm │ │ │ └── verify.dm │ │ ├── maptext_alerts/ │ │ │ ├── screen_alerts.dm │ │ │ └── text_blurbs.dm │ │ ├── mentor/ │ │ │ ├── looc_toggle.dm │ │ │ └── mentorhelp.dm │ │ ├── mob/ │ │ │ ├── camera/ │ │ │ │ ├── camera.dm │ │ │ │ └── imaginary_friend.dm │ │ │ ├── dead/ │ │ │ │ ├── death.dm │ │ │ │ └── observer/ │ │ │ │ ├── actions.dm │ │ │ │ ├── event_spawning.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── observer.dm │ │ │ │ ├── orbit.dm │ │ │ │ └── say.dm │ │ │ ├── death.dm │ │ │ ├── emote.dm │ │ │ ├── hear_say.dm │ │ │ ├── holder.dm │ │ │ ├── inventory.dm │ │ │ ├── language/ │ │ │ │ ├── language.dm │ │ │ │ ├── language_handling.dm │ │ │ │ └── languages.dm │ │ │ ├── living/ │ │ │ │ ├── blood.dm │ │ │ │ ├── brain/ │ │ │ │ │ ├── MMI.dm │ │ │ │ │ ├── brain.dm │ │ │ │ │ ├── brain_item.dm │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── emote.dm │ │ │ │ │ ├── life.dm │ │ │ │ │ ├── login.dm │ │ │ │ │ └── say.dm │ │ │ │ ├── carbon/ │ │ │ │ │ ├── carbon.dm │ │ │ │ │ ├── carbon_defines.dm │ │ │ │ │ ├── carbon_helpers.dm │ │ │ │ │ ├── give.dm │ │ │ │ │ ├── human/ │ │ │ │ │ │ ├── death.dm │ │ │ │ │ │ ├── emote.dm │ │ │ │ │ │ ├── examine.dm │ │ │ │ │ │ ├── exercise.dm │ │ │ │ │ │ ├── human.dm │ │ │ │ │ │ ├── human_abilities.dm │ │ │ │ │ │ ├── human_attackhand.dm │ │ │ │ │ │ ├── human_damage.dm │ │ │ │ │ │ ├── human_defense.dm │ │ │ │ │ │ ├── human_defines.dm │ │ │ │ │ │ ├── human_dummy.dm │ │ │ │ │ │ ├── human_helpers.dm │ │ │ │ │ │ ├── human_movement.dm │ │ │ │ │ │ ├── human_shields.dm │ │ │ │ │ │ ├── human_stripping.dm │ │ │ │ │ │ ├── inventory.dm │ │ │ │ │ │ ├── life/ │ │ │ │ │ │ │ ├── handle_breath.dm │ │ │ │ │ │ │ ├── handle_chemicals_in_body.dm │ │ │ │ │ │ │ ├── handle_disabilities.dm │ │ │ │ │ │ │ ├── handle_environment.dm │ │ │ │ │ │ │ ├── handle_fire.dm │ │ │ │ │ │ │ ├── handle_grabbed.dm │ │ │ │ │ │ │ ├── handle_organs.dm │ │ │ │ │ │ │ ├── handle_regular_hud_updates.dm │ │ │ │ │ │ │ ├── handle_regular_status_updates.dm │ │ │ │ │ │ │ ├── handle_stasis_bag.dm │ │ │ │ │ │ │ └── life_helpers.dm │ │ │ │ │ │ ├── life.dm │ │ │ │ │ │ ├── login.dm │ │ │ │ │ │ ├── logout.dm │ │ │ │ │ │ ├── powers/ │ │ │ │ │ │ │ ├── check_skills.dm │ │ │ │ │ │ │ ├── human_powers.dm │ │ │ │ │ │ │ └── issue_order.dm │ │ │ │ │ │ ├── say.dm │ │ │ │ │ │ ├── species/ │ │ │ │ │ │ │ ├── emote-monkey.dm │ │ │ │ │ │ │ ├── emote-synth_k9.dm │ │ │ │ │ │ │ ├── human.dm │ │ │ │ │ │ │ ├── monkey.dm │ │ │ │ │ │ │ ├── species.dm │ │ │ │ │ │ │ ├── synth_k9.dm │ │ │ │ │ │ │ ├── synthetic.dm │ │ │ │ │ │ │ ├── working_joe/ │ │ │ │ │ │ │ │ ├── _emote.dm │ │ │ │ │ │ │ │ ├── _species.dm │ │ │ │ │ │ │ │ ├── damage.dm │ │ │ │ │ │ │ │ ├── farewell.dm │ │ │ │ │ │ │ │ ├── fire.dm │ │ │ │ │ │ │ │ ├── greeting.dm │ │ │ │ │ │ │ │ ├── notice.dm │ │ │ │ │ │ │ │ ├── question.dm │ │ │ │ │ │ │ │ ├── quip.dm │ │ │ │ │ │ │ │ ├── restricted_area.dm │ │ │ │ │ │ │ │ ├── task_update.dm │ │ │ │ │ │ │ │ └── warning.dm │ │ │ │ │ │ │ ├── wy_droid/ │ │ │ │ │ │ │ │ ├── _emote.dm │ │ │ │ │ │ │ │ ├── _species.dm │ │ │ │ │ │ │ │ ├── combat.dm │ │ │ │ │ │ │ │ ├── quip.dm │ │ │ │ │ │ │ │ └── status.dm │ │ │ │ │ │ │ ├── yautja/ │ │ │ │ │ │ │ │ ├── _emote.dm │ │ │ │ │ │ │ │ ├── _species.dm │ │ │ │ │ │ │ │ ├── fake_sounds.dm │ │ │ │ │ │ │ │ ├── fake_voice.dm │ │ │ │ │ │ │ │ └── yautja_sound.dm │ │ │ │ │ │ │ └── zombie.dm │ │ │ │ │ │ ├── unarmed_attacks.dm │ │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ │ └── whisper.dm │ │ │ │ │ ├── inventory.dm │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ └── xenomorph/ │ │ │ │ │ ├── Embryo.dm │ │ │ │ │ ├── Evolution.dm │ │ │ │ │ ├── Facehuggers.dm │ │ │ │ │ ├── Powers.dm │ │ │ │ │ ├── XenoAttacks.dm │ │ │ │ │ ├── XenoOverwatch.dm │ │ │ │ │ ├── XenoProcs.dm │ │ │ │ │ ├── XenoUpgrade.dm │ │ │ │ │ ├── Xenomorph.dm │ │ │ │ │ ├── abilities/ │ │ │ │ │ │ ├── ability_helper_procs.dm │ │ │ │ │ │ ├── ability_macro_framework.dm │ │ │ │ │ │ ├── boiler/ │ │ │ │ │ │ │ ├── boiler_abilities.dm │ │ │ │ │ │ │ └── boiler_macros.dm │ │ │ │ │ │ ├── burrower/ │ │ │ │ │ │ │ ├── burrower_abilities.dm │ │ │ │ │ │ │ └── burrower_macros.dm │ │ │ │ │ │ ├── carrier/ │ │ │ │ │ │ │ ├── carrier_abilities.dm │ │ │ │ │ │ │ └── carrier_macros.dm │ │ │ │ │ │ ├── crusher/ │ │ │ │ │ │ │ ├── crusher_abilities.dm │ │ │ │ │ │ │ └── crusher_macros.dm │ │ │ │ │ │ ├── defender/ │ │ │ │ │ │ │ ├── defender_abilities.dm │ │ │ │ │ │ │ └── defender_macros.dm │ │ │ │ │ │ ├── despoiler/ │ │ │ │ │ │ │ ├── despoiler_abilities.dm │ │ │ │ │ │ │ └── despoiler_macros.dm │ │ │ │ │ │ ├── facehugger/ │ │ │ │ │ │ │ ├── facehugger_abilities.dm │ │ │ │ │ │ │ └── facehugger_powers.dm │ │ │ │ │ │ ├── general_abilities.dm │ │ │ │ │ │ ├── general_ability_macros.dm │ │ │ │ │ │ ├── general_powers.dm │ │ │ │ │ │ ├── hellhound/ │ │ │ │ │ │ │ └── hellhound_abilities.dm │ │ │ │ │ │ ├── hivelord/ │ │ │ │ │ │ │ └── hivelord_abilities.dm │ │ │ │ │ │ ├── king/ │ │ │ │ │ │ │ ├── king_abilities.dm │ │ │ │ │ │ │ └── king_macros.dm │ │ │ │ │ │ ├── lesser_drone/ │ │ │ │ │ │ │ ├── lesser_drone_abilities.dm │ │ │ │ │ │ │ ├── lesser_drone_macros.dm │ │ │ │ │ │ │ └── lesser_drone_powers.dm │ │ │ │ │ │ ├── lurker/ │ │ │ │ │ │ │ ├── lurker_abilities.dm │ │ │ │ │ │ │ └── lurker_macros.dm │ │ │ │ │ │ ├── praetorian/ │ │ │ │ │ │ │ ├── praetorian_abilities.dm │ │ │ │ │ │ │ └── praetorian_macros.dm │ │ │ │ │ │ ├── predalien/ │ │ │ │ │ │ │ ├── predalien_abilities.dm │ │ │ │ │ │ │ ├── predalien_macros.dm │ │ │ │ │ │ │ └── predalien_powers.dm │ │ │ │ │ │ ├── queen/ │ │ │ │ │ │ │ ├── queen_abilities.dm │ │ │ │ │ │ │ ├── queen_macros.dm │ │ │ │ │ │ │ └── queen_powers.dm │ │ │ │ │ │ ├── ravager/ │ │ │ │ │ │ │ ├── ravager_abilities.dm │ │ │ │ │ │ │ └── ravager_macros.dm │ │ │ │ │ │ ├── runner/ │ │ │ │ │ │ │ ├── runner_abilities.dm │ │ │ │ │ │ │ ├── runner_macros.dm │ │ │ │ │ │ │ └── runner_powers.dm │ │ │ │ │ │ ├── sentinel/ │ │ │ │ │ │ │ ├── sentinel_abilities.dm │ │ │ │ │ │ │ └── sentinel_macros.dm │ │ │ │ │ │ ├── spitter/ │ │ │ │ │ │ │ ├── spitter_abilities.dm │ │ │ │ │ │ │ └── spitter_macros.dm │ │ │ │ │ │ ├── warrior/ │ │ │ │ │ │ │ ├── warrior_abilities.dm │ │ │ │ │ │ │ └── warrior_macros.dm │ │ │ │ │ │ └── xeno_action.dm │ │ │ │ │ ├── attack_alien.dm │ │ │ │ │ ├── castes/ │ │ │ │ │ │ ├── Boiler.dm │ │ │ │ │ │ ├── Burrower.dm │ │ │ │ │ │ ├── Carrier.dm │ │ │ │ │ │ ├── Crusher.dm │ │ │ │ │ │ ├── Defender.dm │ │ │ │ │ │ ├── Despoiler.dm │ │ │ │ │ │ ├── Drone.dm │ │ │ │ │ │ ├── Facehugger.dm │ │ │ │ │ │ ├── Hellhound.dm │ │ │ │ │ │ ├── Hivelord.dm │ │ │ │ │ │ ├── King.dm │ │ │ │ │ │ ├── Larva.dm │ │ │ │ │ │ ├── Lurker.dm │ │ │ │ │ │ ├── Praetorian.dm │ │ │ │ │ │ ├── Predalien.dm │ │ │ │ │ │ ├── Queen.dm │ │ │ │ │ │ ├── Ravager.dm │ │ │ │ │ │ ├── Runner.dm │ │ │ │ │ │ ├── Sentinel.dm │ │ │ │ │ │ ├── Spitter.dm │ │ │ │ │ │ ├── Warrior.dm │ │ │ │ │ │ ├── caste_datum.dm │ │ │ │ │ │ └── lesser_drone.dm │ │ │ │ │ ├── damage_procs.dm │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── egg_item.dm │ │ │ │ │ ├── emote.dm │ │ │ │ │ ├── hive_faction.dm │ │ │ │ │ ├── hive_status.dm │ │ │ │ │ ├── hive_status_ui.dm │ │ │ │ │ ├── items/ │ │ │ │ │ │ └── iff_tag.dm │ │ │ │ │ ├── life.dm │ │ │ │ │ ├── login.dm │ │ │ │ │ ├── mark_menu.dm │ │ │ │ │ ├── resin_constructions.dm │ │ │ │ │ ├── say.dm │ │ │ │ │ ├── seethrough.dm │ │ │ │ │ ├── strains/ │ │ │ │ │ │ ├── behavior_delegate.dm │ │ │ │ │ │ ├── castes/ │ │ │ │ │ │ │ ├── boiler/ │ │ │ │ │ │ │ │ └── trapper.dm │ │ │ │ │ │ │ ├── carrier/ │ │ │ │ │ │ │ │ └── eggsac.dm │ │ │ │ │ │ │ ├── crusher/ │ │ │ │ │ │ │ │ └── charger.dm │ │ │ │ │ │ │ ├── defender/ │ │ │ │ │ │ │ │ └── steel_crest.dm │ │ │ │ │ │ │ ├── drone/ │ │ │ │ │ │ │ │ ├── gardener.dm │ │ │ │ │ │ │ │ └── healer.dm │ │ │ │ │ │ │ ├── facehugger/ │ │ │ │ │ │ │ │ └── watcher.dm │ │ │ │ │ │ │ ├── hivelord/ │ │ │ │ │ │ │ │ ├── designer.dm │ │ │ │ │ │ │ │ └── resin_whisperer.dm │ │ │ │ │ │ │ ├── lurker/ │ │ │ │ │ │ │ │ └── vampire.dm │ │ │ │ │ │ │ ├── praetorian/ │ │ │ │ │ │ │ │ ├── dancer.dm │ │ │ │ │ │ │ │ ├── oppressor.dm │ │ │ │ │ │ │ │ ├── valkyrie.dm │ │ │ │ │ │ │ │ └── vanguard.dm │ │ │ │ │ │ │ ├── ravager/ │ │ │ │ │ │ │ │ ├── berserker.dm │ │ │ │ │ │ │ │ └── hedgehog.dm │ │ │ │ │ │ │ └── runner/ │ │ │ │ │ │ │ └── acid.dm │ │ │ │ │ │ └── xeno_strain.dm │ │ │ │ │ ├── update_icons.dm │ │ │ │ │ ├── xeno_helpers.dm │ │ │ │ │ ├── xeno_tackle_counter.dm │ │ │ │ │ └── xeno_verbs.dm │ │ │ │ ├── damage_procs.dm │ │ │ │ ├── init_signals.dm │ │ │ │ ├── living.dm │ │ │ │ ├── living_defense.dm │ │ │ │ ├── living_defines.dm │ │ │ │ ├── living_health_procs.dm │ │ │ │ ├── living_healthscan.dm │ │ │ │ ├── living_helpers.dm │ │ │ │ ├── living_powers.dm │ │ │ │ ├── living_verbs.dm │ │ │ │ ├── login.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── say.dm │ │ │ │ ├── silicon/ │ │ │ │ │ ├── death.dm │ │ │ │ │ ├── decoy/ │ │ │ │ │ │ └── decoy.dm │ │ │ │ │ ├── login.dm │ │ │ │ │ ├── say.dm │ │ │ │ │ └── silicon.dm │ │ │ │ └── simple_animal/ │ │ │ │ ├── bat.dm │ │ │ │ ├── friendly/ │ │ │ │ │ ├── bunny.dm │ │ │ │ │ ├── cat.dm │ │ │ │ │ ├── corgi.dm │ │ │ │ │ ├── crab.dm │ │ │ │ │ ├── farm_animals.dm │ │ │ │ │ ├── lizard.dm │ │ │ │ │ ├── mouse.dm │ │ │ │ │ ├── rat.dm │ │ │ │ │ ├── spiderbot.dm │ │ │ │ │ └── tomato.dm │ │ │ │ ├── hostile/ │ │ │ │ │ ├── alien.dm │ │ │ │ │ ├── bear.dm │ │ │ │ │ ├── carp.dm │ │ │ │ │ ├── creature.dm │ │ │ │ │ ├── giant_spider.dm │ │ │ │ │ ├── hostile.dm │ │ │ │ │ ├── retaliate/ │ │ │ │ │ │ ├── clown.dm │ │ │ │ │ │ ├── drone.dm │ │ │ │ │ │ ├── giant_lizard.dm │ │ │ │ │ │ └── retaliate.dm │ │ │ │ │ └── tree.dm │ │ │ │ ├── parrot.dm │ │ │ │ ├── simple_animal.dm │ │ │ │ └── slug.dm │ │ │ ├── login.dm │ │ │ ├── logout.dm │ │ │ ├── mob.dm │ │ │ ├── mob_defines.dm │ │ │ ├── mob_grab.dm │ │ │ ├── mob_helpers.dm │ │ │ ├── mob_movement.dm │ │ │ ├── mob_status_procs.dm │ │ │ ├── mob_transformation_simple.dm │ │ │ ├── mob_verbs.dm │ │ │ ├── new_player/ │ │ │ │ ├── body.dm │ │ │ │ ├── login.dm │ │ │ │ ├── logout.dm │ │ │ │ ├── new_player.dm │ │ │ │ ├── preferences_setup.dm │ │ │ │ ├── skin_color.dm │ │ │ │ └── sprite_accessories/ │ │ │ │ ├── facial_hair.dm │ │ │ │ ├── hair.dm │ │ │ │ ├── hair_gradients.dm │ │ │ │ ├── sprite_accessories.dm │ │ │ │ ├── tattoo.dm │ │ │ │ ├── undershirt.dm │ │ │ │ ├── underwear.dm │ │ │ │ └── yautja_hair.dm │ │ │ ├── say.dm │ │ │ ├── transform_procs.dm │ │ │ ├── unauthenticated/ │ │ │ │ ├── entity.dm │ │ │ │ └── unauthenticated.dm │ │ │ └── update_icons.dm │ │ ├── movement/ │ │ │ ├── launching/ │ │ │ │ └── launching.dm │ │ │ ├── movement.dm │ │ │ └── pass_flags_container.dm │ │ ├── nano/ │ │ │ ├── nanoexternal.dm │ │ │ ├── nanomanager.dm │ │ │ └── nanoui.dm │ │ ├── nightmare/ │ │ │ ├── nmcontext.dm │ │ │ ├── nmnodes/ │ │ │ │ ├── components.dm │ │ │ │ ├── flow.dm │ │ │ │ ├── mapload.dm │ │ │ │ ├── nmnode.dm │ │ │ │ └── scenario.dm │ │ │ └── nmtasks/ │ │ │ ├── mapload.dm │ │ │ ├── mapscheduler.dm │ │ │ ├── nmtask.dm │ │ │ └── scheduler.dm │ │ ├── objectives/ │ │ │ ├── analyze_chems.dm │ │ │ ├── communications.dm │ │ │ ├── data_retrieval.dm │ │ │ ├── documents.dm │ │ │ ├── experimental_devices.dm │ │ │ ├── mob_objectives.dm │ │ │ ├── objective.dm │ │ │ ├── objective_landmarks.dm │ │ │ ├── objective_memory_storage.dm │ │ │ ├── power_objectives.dm │ │ │ ├── retrieve_items.dm │ │ │ └── safe_cracking.dm │ │ ├── organs/ │ │ │ ├── limb_objects.dm │ │ │ ├── limbs.dm │ │ │ ├── organ_internal.dm │ │ │ ├── organ_objects.dm │ │ │ ├── pain.dm │ │ │ └── wound.dm │ │ ├── paperwork/ │ │ │ ├── carbonpaper.dm │ │ │ ├── clipboard.dm │ │ │ ├── desk_bell.dm │ │ │ ├── filingcabinet.dm │ │ │ ├── folders.dm │ │ │ ├── notepad.dm │ │ │ ├── paper.dm │ │ │ ├── paper_bundle.dm │ │ │ ├── paperbin.dm │ │ │ ├── photocopier.dm │ │ │ ├── photography.dm │ │ │ ├── prefab_papers/ │ │ │ │ ├── provost/ │ │ │ │ │ ├── high_command/ │ │ │ │ │ │ ├── arrest_warrant.dm │ │ │ │ │ │ ├── custody_transfer.dm │ │ │ │ │ │ ├── dao_response.dm │ │ │ │ │ │ └── standard.dm │ │ │ │ │ └── military_police/ │ │ │ │ │ ├── apology_notice.dm │ │ │ │ │ ├── appeal_form.dm │ │ │ │ │ ├── confiscation_receipt.dm │ │ │ │ │ ├── dao_request.dm │ │ │ │ │ └── ops_report.dm │ │ │ │ ├── uacqs.dm │ │ │ │ ├── uscm/ │ │ │ │ │ ├── high_command/ │ │ │ │ │ │ ├── arrest_warrant.dm │ │ │ │ │ │ ├── custody_transfer.dm │ │ │ │ │ │ └── standard.dm │ │ │ │ │ └── ops_report.dm │ │ │ │ └── wey_yu/ │ │ │ │ ├── high_command/ │ │ │ │ │ └── standard.dm │ │ │ │ └── liaison/ │ │ │ │ ├── liability.dm │ │ │ │ ├── nda_long.dm │ │ │ │ ├── nda_short.dm │ │ │ │ ├── ops_report.dm │ │ │ │ └── preserve_intent.dm │ │ │ ├── prefab_papers.dm │ │ │ └── punch_card.dm │ │ ├── power/ │ │ │ ├── apc.dm │ │ │ ├── batteryrack.dm │ │ │ ├── breaker_box.dm │ │ │ ├── cable.dm │ │ │ ├── cable_heavyduty.dm │ │ │ ├── cell.dm │ │ │ ├── fractal_reactor.dm │ │ │ ├── lighting.dm │ │ │ ├── port_gen.dm │ │ │ ├── power.dm │ │ │ ├── power_monitor.dm │ │ │ ├── powernet.dm │ │ │ ├── profiling.dm │ │ │ ├── smes.dm │ │ │ ├── smes_construction.dm │ │ │ ├── terminal.dm │ │ │ └── turbine.dm │ │ ├── projectiles/ │ │ │ ├── ammo_boxes/ │ │ │ │ ├── ammo_boxes.dm │ │ │ │ ├── box_structures.dm │ │ │ │ ├── grenade_packets.dm │ │ │ │ ├── handful_boxes.dm │ │ │ │ ├── magazine_boxes.dm │ │ │ │ ├── misc_boxes.dm │ │ │ │ └── round_boxes.dm │ │ │ ├── ammunition.dm │ │ │ ├── gun.dm │ │ │ ├── gun_attachables.dm │ │ │ ├── gun_helpers.dm │ │ │ ├── guns/ │ │ │ │ ├── boltaction.dm │ │ │ │ ├── energy.dm │ │ │ │ ├── flamer/ │ │ │ │ │ ├── flamer.dm │ │ │ │ │ └── flameshape.dm │ │ │ │ ├── flare_gun.dm │ │ │ │ ├── lever_action.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── pistols.dm │ │ │ │ ├── revolvers.dm │ │ │ │ ├── rifles.dm │ │ │ │ ├── shotguns.dm │ │ │ │ ├── smartgun.dm │ │ │ │ ├── smgs.dm │ │ │ │ ├── souto.dm │ │ │ │ └── specialist/ │ │ │ │ ├── launcher/ │ │ │ │ │ ├── grenade_launcher.dm │ │ │ │ │ ├── launcher.dm │ │ │ │ │ └── rocket_launcher.dm │ │ │ │ ├── scout.dm │ │ │ │ ├── sharp.dm │ │ │ │ └── sniper.dm │ │ │ ├── homing_projectile_component.dm │ │ │ ├── item_to_box_mapping.dm │ │ │ ├── magazines/ │ │ │ │ ├── flamer.dm │ │ │ │ ├── lever_action.dm │ │ │ │ ├── misc.dm │ │ │ │ ├── pistols.dm │ │ │ │ ├── revolvers.dm │ │ │ │ ├── rifles.dm │ │ │ │ ├── sentries.dm │ │ │ │ ├── shotguns.dm │ │ │ │ ├── smgs.dm │ │ │ │ └── specialist.dm │ │ │ └── projectile.dm │ │ ├── reagents/ │ │ │ ├── Chemistry-Colours.dm │ │ │ ├── Chemistry-Generator.dm │ │ │ ├── Chemistry-Holder.dm │ │ │ ├── Chemistry-Reactions.dm │ │ │ ├── Chemistry-Readme.dm │ │ │ ├── Chemistry-Reagents.dm │ │ │ ├── Chemistry-Vessel.dm │ │ │ ├── chemical_research/ │ │ │ │ ├── Chemical-Research.dm │ │ │ │ └── generated_reagents.dm │ │ │ ├── chemistry_machinery/ │ │ │ │ ├── acid_harness.dm │ │ │ │ ├── autodispenser.dm │ │ │ │ ├── centrifuge.dm │ │ │ │ ├── chem_dispenser.dm │ │ │ │ ├── chem_master.dm │ │ │ │ ├── chem_simulator.dm │ │ │ │ ├── chem_storage.dm │ │ │ │ ├── pandemic.dm │ │ │ │ ├── reagent_analyzer.dm │ │ │ │ ├── reagent_grinder.dm │ │ │ │ └── xenomorph_analyzer.dm │ │ │ ├── chemistry_properties/ │ │ │ │ ├── chem_property.dm │ │ │ │ ├── prop_negative.dm │ │ │ │ ├── prop_neutral.dm │ │ │ │ ├── prop_positive.dm │ │ │ │ └── prop_special.dm │ │ │ ├── chemistry_reactions/ │ │ │ │ ├── food_drink.dm │ │ │ │ ├── medical.dm │ │ │ │ └── other.dm │ │ │ └── chemistry_reagents/ │ │ │ ├── alcohol.dm │ │ │ ├── drink.dm │ │ │ ├── food.dm │ │ │ ├── medical.dm │ │ │ ├── other.dm │ │ │ ├── stims.dm │ │ │ └── toxin.dm │ │ ├── recycling/ │ │ │ ├── conveyor2.dm │ │ │ ├── disposal-construction.dm │ │ │ ├── disposal.dm │ │ │ ├── recycler.dm │ │ │ └── sortingmachinery.dm │ │ ├── round_recording/ │ │ │ ├── debug_verbs.dm │ │ │ ├── hooks.dm │ │ │ └── round_recorder.dm │ │ ├── security_levels/ │ │ │ ├── keycard_authentication.dm │ │ │ └── security_levels.dm │ │ ├── shuttle/ │ │ │ ├── computer.dm │ │ │ ├── computers/ │ │ │ │ ├── dropship_computer.dm │ │ │ │ ├── escape_pod_computer.dm │ │ │ │ └── trijent_elevator_control.dm │ │ │ ├── docking.dm │ │ │ ├── dropship.dm │ │ │ ├── dropship_hijack.dm │ │ │ ├── helpers.dm │ │ │ ├── on_move.dm │ │ │ ├── ripple.dm │ │ │ ├── shuttle.dm │ │ │ ├── shuttle_rotate.dm │ │ │ ├── shuttles/ │ │ │ │ ├── crashable/ │ │ │ │ │ ├── crashable.dm │ │ │ │ │ ├── escape_shuttle.dm │ │ │ │ │ └── lifeboats.dm │ │ │ │ ├── dropship.dm │ │ │ │ ├── ert.dm │ │ │ │ └── trijent_elevator.dm │ │ │ ├── shuttles.md │ │ │ └── vehicle_elevator.dm │ │ ├── shuttles/ │ │ │ ├── marine_ferry.dm │ │ │ ├── monorail_console.dm │ │ │ ├── shuttle.dm │ │ │ ├── shuttle_console.dm │ │ │ ├── shuttle_ferry.dm │ │ │ └── shuttle_supply.dm │ │ ├── sorokyne/ │ │ │ └── sorokyne_hot_water.dm │ │ ├── statusbar/ │ │ │ └── statusbar.dm │ │ ├── surgery/ │ │ │ ├── amputation.dm │ │ │ ├── bones.dm │ │ │ ├── brainrepair.dm │ │ │ ├── chestburster.dm │ │ │ ├── eschar.dm │ │ │ ├── eye.dm │ │ │ ├── generic.dm │ │ │ ├── headreattach.dm │ │ │ ├── implant.dm │ │ │ ├── internal_bleeding.dm │ │ │ ├── mcomp_tendwounds.dm │ │ │ ├── organs_internal.dm │ │ │ ├── robolimb_repair.dm │ │ │ ├── robolimbs.dm │ │ │ ├── robotic_organs_internal.dm │ │ │ ├── surgery_initiator.dm │ │ │ ├── surgery_procedure.dm │ │ │ ├── surgery_steps.dm │ │ │ ├── surgery_toggle.dm │ │ │ ├── tendwounds.dm │ │ │ └── xeno.dm │ │ ├── teleporters/ │ │ │ ├── teleporter.dm │ │ │ ├── teleporter_admin_verbs.dm │ │ │ ├── teleporter_console.dm │ │ │ └── teleporter_landmarks.dm │ │ ├── tents/ │ │ │ ├── blockers.dm │ │ │ ├── deployed_tents.dm │ │ │ ├── equipment.dm │ │ │ ├── folded_tents.dm │ │ │ └── templates.dm │ │ ├── tgchat/ │ │ │ ├── cm_shims.dm │ │ │ ├── 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/ │ │ │ │ ├── admin.dm │ │ │ │ ├── always.dm │ │ │ │ ├── computer.dm │ │ │ │ ├── conscious.dm │ │ │ │ ├── contained.dm │ │ │ │ ├── debug.dm │ │ │ │ ├── deep_inventory.dm │ │ │ │ ├── default.dm │ │ │ │ ├── hands.dm │ │ │ │ ├── human_adjacent.dm │ │ │ │ ├── in_view.dm │ │ │ │ ├── inventory.dm │ │ │ │ ├── never.dm │ │ │ │ ├── new_player.dm │ │ │ │ ├── not_incapacitated.dm │ │ │ │ ├── not_incapacitated_and_adjacent.dm │ │ │ │ ├── not_incapacitated_and_adjacent_strict.dm │ │ │ │ ├── not_incapacitated_and_inventory.dm │ │ │ │ ├── notcontained.dm │ │ │ │ ├── observer.dm │ │ │ │ ├── physical.dm │ │ │ │ ├── reverse_contained.dm │ │ │ │ ├── self.dm │ │ │ │ ├── xeno.dm │ │ │ │ └── zlevel.dm │ │ │ ├── states.dm │ │ │ ├── status_composers.dm │ │ │ ├── tgui-say/ │ │ │ │ ├── modal.dm │ │ │ │ ├── speech.dm │ │ │ │ └── typing.dm │ │ │ ├── tgui.dm │ │ │ ├── tgui_alert.dm │ │ │ ├── tgui_input_list.dm │ │ │ ├── tgui_number_input.dm │ │ │ └── tgui_window.dm │ │ ├── tgui_input/ │ │ │ ├── checkboxes.dm │ │ │ ├── color.dm │ │ │ └── text.dm │ │ ├── tgui_panel/ │ │ │ ├── audio.dm │ │ │ ├── external.dm │ │ │ ├── ping_relay.dm │ │ │ ├── telemetry.dm │ │ │ └── tgui_panel.dm │ │ ├── tooltip/ │ │ │ ├── tooltip.dm │ │ │ └── tooltip.html │ │ ├── trigger.dm │ │ ├── unit_tests/ │ │ │ ├── README.md │ │ │ ├── areas_unpowered.dm │ │ │ ├── autowiki.dm │ │ │ ├── check_runtimes.dm │ │ │ ├── create_and_destroy.dm │ │ │ ├── duplicate_sprite_accessories.dm │ │ │ ├── emote_panels.dm │ │ │ ├── focus_only_tests.dm │ │ │ ├── map_sanity.dm │ │ │ ├── missing_icons.dm │ │ │ ├── resist.dm │ │ │ ├── spawn_humans.dm │ │ │ ├── spritesheets.dm │ │ │ ├── subsystem_init.dm │ │ │ ├── tgui_create_message.dm │ │ │ ├── timer_sanity.dm │ │ │ ├── tutorials.dm │ │ │ ├── unit_test.dm │ │ │ └── xeno_strains.dm │ │ ├── vehicles/ │ │ │ ├── apc/ │ │ │ │ ├── apc.dm │ │ │ │ ├── apc_command.dm │ │ │ │ ├── apc_medical.dm │ │ │ │ ├── apc_pmc.dm │ │ │ │ └── interior.dm │ │ │ ├── arc/ │ │ │ │ ├── arc.dm │ │ │ │ ├── interior.dm │ │ │ │ └── verbs.dm │ │ │ ├── cargo_train.dm │ │ │ ├── hardpoints/ │ │ │ │ ├── armor/ │ │ │ │ │ ├── armor.dm │ │ │ │ │ ├── ballistic.dm │ │ │ │ │ ├── caustic.dm │ │ │ │ │ ├── concussive.dm │ │ │ │ │ ├── paladin.dm │ │ │ │ │ └── snowplow.dm │ │ │ │ ├── hardpoint.dm │ │ │ │ ├── hardpoint_ammo/ │ │ │ │ │ ├── arc_sentry_ammo.dm │ │ │ │ │ ├── autocannon_ammo.dm │ │ │ │ │ ├── cupola_ammo.dm │ │ │ │ │ ├── dualcannon_ammo.dm │ │ │ │ │ ├── firing_port_weapon_ammo.dm │ │ │ │ │ ├── flare_launcher_ammo.dm │ │ │ │ │ ├── gl_ammo.dm │ │ │ │ │ ├── hardpoint_ammo.dm │ │ │ │ │ ├── ltb_ammo.dm │ │ │ │ │ ├── minigun_ammo.dm │ │ │ │ │ ├── primary_flamer_ammo.dm │ │ │ │ │ ├── secondary_flamer_ammo.dm │ │ │ │ │ ├── smoke_ammo.dm │ │ │ │ │ └── tow_ammo.dm │ │ │ │ ├── holder/ │ │ │ │ │ ├── holder.dm │ │ │ │ │ └── tank_turret.dm │ │ │ │ ├── primary/ │ │ │ │ │ ├── arc_sentry.dm │ │ │ │ │ ├── autocannon.dm │ │ │ │ │ ├── dual_cannon.dm │ │ │ │ │ ├── flamer.dm │ │ │ │ │ ├── ltb.dm │ │ │ │ │ ├── minigun.dm │ │ │ │ │ └── primary.dm │ │ │ │ ├── secondary/ │ │ │ │ │ ├── cupola.dm │ │ │ │ │ ├── flamer.dm │ │ │ │ │ ├── frontal_cannon.dm │ │ │ │ │ ├── grenade_launcher.dm │ │ │ │ │ ├── secondary.dm │ │ │ │ │ └── tow.dm │ │ │ │ ├── special/ │ │ │ │ │ ├── firing_port_weapon.dm │ │ │ │ │ └── special.dm │ │ │ │ ├── support/ │ │ │ │ │ ├── antenna.dm │ │ │ │ │ ├── artillery.dm │ │ │ │ │ ├── flare.dm │ │ │ │ │ ├── iwsa.dm │ │ │ │ │ ├── overdrive.dm │ │ │ │ │ └── support.dm │ │ │ │ └── wheels/ │ │ │ │ ├── apc_wheels.dm │ │ │ │ ├── arc_wheels.dm │ │ │ │ ├── locomotion.dm │ │ │ │ ├── treads.dm │ │ │ │ └── van_wheels.dm │ │ │ ├── interior/ │ │ │ │ ├── areas.dm │ │ │ │ ├── interactable/ │ │ │ │ │ ├── doors.dm │ │ │ │ │ ├── seats.dm │ │ │ │ │ ├── vehicle_locker.dm │ │ │ │ │ ├── vendors.dm │ │ │ │ │ ├── viewports.dm │ │ │ │ │ └── weapons_loader.dm │ │ │ │ ├── interior.dm │ │ │ │ ├── interior_hull.dm │ │ │ │ └── interior_landmarks.dm │ │ │ ├── multitile/ │ │ │ │ ├── multitile.dm │ │ │ │ ├── multitile_bump.dm │ │ │ │ ├── multitile_hardpoints.dm │ │ │ │ ├── multitile_interaction.dm │ │ │ │ ├── multitile_movement.dm │ │ │ │ └── multitile_verbs.dm │ │ │ ├── powerloader.dm │ │ │ ├── souto_mobile.dm │ │ │ ├── tank/ │ │ │ │ ├── interior.dm │ │ │ │ └── tank.dm │ │ │ ├── train.dm │ │ │ ├── van/ │ │ │ │ ├── box_van.dm │ │ │ │ ├── clf_van.dm │ │ │ │ ├── interior.dm │ │ │ │ ├── pizza_van.dm │ │ │ │ └── van.dm │ │ │ ├── vehicle.dm │ │ │ └── vehicle_misc_objects.dm │ │ └── vox/ │ │ ├── vox.dm │ │ ├── vox_sounds/ │ │ │ ├── vox.dm │ │ │ └── vox_military.dm │ │ └── vox_tgui.dm │ ├── span_macros.dm │ └── stylesheet.dm ├── colonialmarines.dme ├── config/ │ ├── .gitignore │ └── example/ │ ├── admin_ranks.txt │ ├── admins.txt │ ├── alienwhitelist.txt │ ├── config.txt │ ├── custom_items.txt │ ├── dbconfig_bsql.txt │ ├── dbconfig_docker.txt │ ├── dbconfig_native.txt │ ├── forumdbconfig.txt │ ├── game_options.txt │ ├── lobby_art/ │ │ └── .gitkeep │ ├── motd.txt │ ├── reboot_sfx.txt │ ├── relays.txt │ ├── resources.txt │ ├── role_whitelist.txt │ └── word_filter.txt ├── dependencies.sh ├── docker-compose.yml ├── html/ │ ├── admin/ │ │ └── view_variables.css │ ├── admin_pm.html │ ├── browser/ │ │ ├── common.css │ │ ├── cryo.css │ │ ├── legacy.css │ │ ├── punchcard.css │ │ ├── scannernew.css │ │ └── sleeper.css │ ├── changelog.css │ ├── changelog.js │ ├── changelog2015.html │ ├── changelog2016.html │ ├── changelog2017.html │ ├── changelog2018.html │ ├── changelog2019.html │ ├── 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-02.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-11.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 │ │ │ └── 2026-05.yml │ │ ├── example.yml │ │ ├── last_mr_dates.txt │ │ └── pull_desc_changelogs.bat │ ├── create_humans.html │ ├── create_object.html │ ├── create_xenos.html │ ├── font-awesome/ │ │ └── README.MD │ ├── help.html │ ├── old_add-to-changelog.html │ ├── search.js │ ├── statbrowser.css │ ├── statbrowser.html │ ├── statbrowser.js │ └── templates/ │ ├── footer.html │ └── header.html ├── icons/ │ ├── dyn/ │ │ └── .keep │ ├── effects/ │ │ ├── 128x128.dmi │ │ ├── 160x160.dmi │ │ ├── 32x32-hunter_effects.dmi │ │ ├── 3WE_logo_tile.dmi │ │ ├── 64x64hybrisa_decals.dmi │ │ ├── 64x96-hunter_effects.dmi │ │ ├── 96x96.dmi │ │ ├── Targeted.dmi │ │ ├── WY_huge_logo.dmi │ │ ├── acid.dmi │ │ ├── alert.dmi │ │ ├── alphacolors.dmi │ │ ├── attacks.dmi │ │ ├── beam.dmi │ │ ├── blood.dmi │ │ ├── bulletholes.dmi │ │ ├── chemsmoke.dmi │ │ ├── crayondecal.dmi │ │ ├── drip.dmi │ │ ├── effects.dmi │ │ ├── explosion.dmi │ │ ├── fingerprints.dmi │ │ ├── fire.dmi │ │ ├── fluidtracks.dmi │ │ ├── footprints.dmi │ │ ├── heavyimpact.dmi │ │ ├── hefa_cult/ │ │ │ ├── 32_wall.dmi │ │ │ └── 96.dmi │ │ ├── hybrisa_decals.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_384.dmi │ │ │ ├── light_416.dmi │ │ │ ├── light_64.dmi │ │ │ ├── light_96.dmi │ │ │ ├── light_cone.dmi │ │ │ └── shockwave.dmi │ │ ├── lighting_object.dmi │ │ ├── lighting_object_big.dmi │ │ ├── medical_decals.dmi │ │ ├── meridianlogo.dmi │ │ ├── monkey_blood.dmi │ │ ├── mouse_pointer/ │ │ │ ├── explosive_mouse.dmi │ │ │ ├── flamer_mouse.dmi │ │ │ ├── lmg_mouse.dmi │ │ │ ├── mecha_mouse.dmi │ │ │ ├── pistol_mouse.dmi │ │ │ ├── plasma_caster_mouse.dmi │ │ │ ├── rifle_mouse.dmi │ │ │ ├── shotgun_mouse.dmi │ │ │ ├── smartgun_mouse.dmi │ │ │ ├── sniper_mouse.dmi │ │ │ ├── supplypod_down_target.dmi │ │ │ ├── supplypod_pickturf.dmi │ │ │ ├── supplypod_target.dmi │ │ │ ├── twe.dmi │ │ │ ├── upp.dmi │ │ │ ├── upp_smartgun_mouse.dmi │ │ │ ├── uscm.dmi │ │ │ ├── wy.dmi │ │ │ ├── xeno.dmi │ │ │ └── xm88/ │ │ │ ├── xm88-0.dmi │ │ │ ├── xm88-1.dmi │ │ │ ├── xm88-2.dmi │ │ │ ├── xm88-3.dmi │ │ │ ├── xm88-4.dmi │ │ │ ├── xm88-fired-0.dmi │ │ │ ├── xm88-fired-1.dmi │ │ │ ├── xm88-fired-2.dmi │ │ │ ├── xm88-fired-3.dmi │ │ │ └── xm88-fired-4.dmi │ │ ├── new_acid.dmi │ │ ├── particles/ │ │ │ └── fire.dmi │ │ ├── portals.dmi │ │ ├── sebb.dmi │ │ ├── spacevines.dmi │ │ ├── ss13_dark_alpha6.dmi │ │ ├── station_explosion.dmi │ │ ├── status_effects.dmi │ │ ├── strata_decals.dmi │ │ ├── techtree/ │ │ │ ├── tech.dmi │ │ │ └── tech_64.dmi │ │ ├── warning_stripes.dmi │ │ ├── water.dmi │ │ └── weather.dmi │ ├── emoji.dmi │ ├── flags.dmi │ ├── landmarks.dmi │ ├── lobby/ │ │ └── icon.dmi │ ├── minimap.dmi │ ├── misc/ │ │ ├── buildmode.dmi │ │ ├── colortest.dmi │ │ ├── events/ │ │ │ └── pumpkins.dmi │ │ └── tutorial.dmi │ ├── mob/ │ │ ├── animal.dmi │ │ ├── critter.dmi │ │ ├── do_afters.dmi │ │ ├── effects/ │ │ │ └── talk.dmi │ │ ├── hud/ │ │ │ ├── actions.dmi │ │ │ ├── actions_xeno.dmi │ │ │ ├── actions_yautja.dmi │ │ │ ├── alien_standard.dmi │ │ │ ├── chat_icons.dmi │ │ │ ├── escape_menu_leave_body.dmi │ │ │ ├── factions/ │ │ │ │ ├── clf.dmi │ │ │ │ ├── cmb.dmi │ │ │ │ ├── hyperdyne.dmi │ │ │ │ ├── marine.dmi │ │ │ │ ├── twe.dmi │ │ │ │ ├── upp.dmi │ │ │ │ └── wy.dmi │ │ │ ├── hud.dmi │ │ │ ├── hud_yautja.dmi │ │ │ ├── human_bronze.dmi │ │ │ ├── human_dark.dmi │ │ │ ├── human_dark_frame.dmi │ │ │ ├── human_glass.dmi │ │ │ ├── human_green.dmi │ │ │ ├── human_grey.dmi │ │ │ ├── human_holo.dmi │ │ │ ├── human_midnight.dmi │ │ │ ├── human_old.dmi │ │ │ ├── human_orange.dmi │ │ │ ├── human_red.dmi │ │ │ ├── human_status.dmi │ │ │ ├── human_white.dmi │ │ │ ├── mecha_mouse.dmi │ │ │ ├── minimap_overlay.dmi │ │ │ ├── screen1.dmi │ │ │ ├── screen1_full.dmi │ │ │ ├── sec_hud.dmi │ │ │ ├── xeno_markers.dmi │ │ │ └── zone_sel.dmi │ │ ├── humans/ │ │ │ ├── body_mask.dmi │ │ │ ├── dam_human.dmi │ │ │ ├── hair_gradients.dmi │ │ │ ├── human.dmi │ │ │ ├── human_facial.dmi │ │ │ ├── human_hair.dmi │ │ │ ├── onmob/ │ │ │ │ ├── OnFire.dmi │ │ │ │ ├── clothing/ │ │ │ │ │ ├── accessory/ │ │ │ │ │ │ ├── armbands.dmi │ │ │ │ │ │ ├── legpouch.dmi │ │ │ │ │ │ ├── medals.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── patches.dmi │ │ │ │ │ │ ├── ponchos.dmi │ │ │ │ │ │ ├── ranks.dmi │ │ │ │ │ │ ├── ties.dmi │ │ │ │ │ │ ├── watches.dmi │ │ │ │ │ │ └── webbings.dmi │ │ │ │ │ ├── back/ │ │ │ │ │ │ ├── ammo_boxes.dmi │ │ │ │ │ │ ├── backpacks.dmi │ │ │ │ │ │ ├── backpacks_by_faction/ │ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ │ ├── backpacks_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ │ ├── guns_by_type/ │ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ │ ├── energy_weapons.dmi │ │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ │ ├── grenade_launchers.dmi │ │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ │ ├── pred_guns.dmi │ │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ │ ├── holster.dmi │ │ │ │ │ │ ├── melee_weapons.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── smartpack.dmi │ │ │ │ │ │ └── sprayers.dmi │ │ │ │ │ ├── belts/ │ │ │ │ │ │ ├── belts.dmi │ │ │ │ │ │ ├── belts_by_faction/ │ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ │ ├── belts_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ │ ├── guns.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── scabbards.dmi │ │ │ │ │ │ ├── tools.dmi │ │ │ │ │ │ └── weapons.dmi │ │ │ │ │ ├── critters_shoulder.dmi │ │ │ │ │ ├── ears.dmi │ │ │ │ │ ├── feet.dmi │ │ │ │ │ ├── glasses/ │ │ │ │ │ │ ├── glasses.dmi │ │ │ │ │ │ ├── goggles.dmi │ │ │ │ │ │ ├── huds.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ └── night_vision.dmi │ │ │ │ │ ├── hands.dmi │ │ │ │ │ ├── hands_garb.dmi │ │ │ │ │ ├── head/ │ │ │ │ │ │ ├── berets.dmi │ │ │ │ │ │ ├── critters.dmi │ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ │ ├── formal_hats.dmi │ │ │ │ │ │ ├── hardhats.dmi │ │ │ │ │ │ ├── hats.dmi │ │ │ │ │ │ ├── hats_by_faction/ │ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ │ ├── hats_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ ├── hazard.dmi │ │ │ │ │ │ ├── head_64.dmi │ │ │ │ │ │ ├── headbands.dmi │ │ │ │ │ │ ├── misc_ert_colony.dmi │ │ │ │ │ │ ├── objects.dmi │ │ │ │ │ │ ├── overlays.dmi │ │ │ │ │ │ ├── soft_caps.dmi │ │ │ │ │ │ ├── surgical_caps.dmi │ │ │ │ │ │ └── xeno_hats.dmi │ │ │ │ │ ├── helmet_garb/ │ │ │ │ │ │ ├── ammo.dmi │ │ │ │ │ │ ├── cards.dmi │ │ │ │ │ │ ├── crayons.dmi │ │ │ │ │ │ ├── food.dmi │ │ │ │ │ │ ├── glasses.dmi │ │ │ │ │ │ ├── goggles.dmi │ │ │ │ │ │ ├── headbands.dmi │ │ │ │ │ │ ├── helmet_covers.dmi │ │ │ │ │ │ ├── helmet_garb_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ ├── huds.dmi │ │ │ │ │ │ ├── medical.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── patches_flairs.dmi │ │ │ │ │ │ ├── smoking.dmi │ │ │ │ │ │ ├── visors.dmi │ │ │ │ │ │ └── walkman.dmi │ │ │ │ │ ├── masks/ │ │ │ │ │ │ ├── balaclava.dmi │ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ │ ├── gasmasks.dmi │ │ │ │ │ │ ├── glasses_masks.dmi │ │ │ │ │ │ ├── masks.dmi │ │ │ │ │ │ ├── masks_by_faction/ │ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ │ ├── objects.dmi │ │ │ │ │ │ ├── scarves.dmi │ │ │ │ │ │ └── smoking.dmi │ │ │ │ │ ├── suit_storage/ │ │ │ │ │ │ ├── belts.dmi │ │ │ │ │ │ ├── guns_by_type/ │ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ │ ├── energy_weapons.dmi │ │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ │ ├── grenade_launchers.dmi │ │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ │ ├── misc_weapons.dmi │ │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ │ ├── rocket_launchers.dmi │ │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ │ ├── smartguns.dmi │ │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ │ ├── melee.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── suit_storage_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ └── tools.dmi │ │ │ │ │ ├── suits/ │ │ │ │ │ │ ├── armor.dmi │ │ │ │ │ │ ├── coats_robes.dmi │ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ │ ├── hazard.dmi │ │ │ │ │ │ ├── jackets.dmi │ │ │ │ │ │ ├── misc_ert.dmi │ │ │ │ │ │ ├── objects.dmi │ │ │ │ │ │ ├── suits_by_faction/ │ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ │ ├── suits_by_map/ │ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ │ ├── vests_aprons.dmi │ │ │ │ │ │ ├── windbreakers.dmi │ │ │ │ │ │ └── xeno_suits.dmi │ │ │ │ │ └── uniforms/ │ │ │ │ │ ├── donator.dmi │ │ │ │ │ ├── formal_uniforms.dmi │ │ │ │ │ ├── jumpsuits.dmi │ │ │ │ │ ├── misc_ert_colony.dmi │ │ │ │ │ ├── synthetic_uniforms.dmi │ │ │ │ │ ├── underwear_uniforms.dmi │ │ │ │ │ ├── uniforms_by_department/ │ │ │ │ │ │ ├── cargo.dmi │ │ │ │ │ │ ├── engineering.dmi │ │ │ │ │ │ ├── medical.dmi │ │ │ │ │ │ ├── research.dmi │ │ │ │ │ │ ├── security.dmi │ │ │ │ │ │ └── service.dmi │ │ │ │ │ ├── uniforms_by_faction/ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ │ ├── SEEGSON.dmi │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ ├── uniforms_by_map/ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ └── workwear.dmi │ │ │ │ ├── corgi_back.dmi │ │ │ │ ├── corgi_head.dmi │ │ │ │ ├── cuffs.dmi │ │ │ │ ├── human_face.dmi │ │ │ │ ├── hunter/ │ │ │ │ │ ├── badblood_gear.dmi │ │ │ │ │ ├── hellhound.dmi │ │ │ │ │ ├── hellhound_wounds.dmi │ │ │ │ │ ├── items_lefthand.dmi │ │ │ │ │ ├── items_righthand.dmi │ │ │ │ │ ├── mcaste_gear.dmi │ │ │ │ │ ├── pred_armor.dmi │ │ │ │ │ ├── pred_bracers.dmi │ │ │ │ │ ├── pred_gear.dmi │ │ │ │ │ ├── pred_gear64.dmi │ │ │ │ │ ├── pred_mask.dmi │ │ │ │ │ ├── pred_mask_accessories.dmi │ │ │ │ │ ├── pred_shoes.dmi │ │ │ │ │ ├── suit_storage.dmi │ │ │ │ │ └── thrall_gear.dmi │ │ │ │ ├── ids.dmi │ │ │ │ ├── inhands/ │ │ │ │ │ ├── __inhand_template.dmi │ │ │ │ │ ├── clothing/ │ │ │ │ │ │ ├── backpacks_lefthand.dmi │ │ │ │ │ │ ├── backpacks_righthand.dmi │ │ │ │ │ │ ├── belts_lefthand.dmi │ │ │ │ │ │ ├── belts_righthand.dmi │ │ │ │ │ │ ├── boots_lefthand.dmi │ │ │ │ │ │ ├── boots_righthand.dmi │ │ │ │ │ │ ├── glasses_lefthand.dmi │ │ │ │ │ │ ├── glasses_righthand.dmi │ │ │ │ │ │ ├── gloves_lefthand.dmi │ │ │ │ │ │ ├── gloves_righthand.dmi │ │ │ │ │ │ ├── hats_lefthand.dmi │ │ │ │ │ │ ├── hats_righthand.dmi │ │ │ │ │ │ ├── masks_lefthand.dmi │ │ │ │ │ │ ├── masks_righthand.dmi │ │ │ │ │ │ ├── pouches_lefthand.dmi │ │ │ │ │ │ ├── pouches_righthand.dmi │ │ │ │ │ │ ├── suits_lefthand.dmi │ │ │ │ │ │ ├── suits_righthand.dmi │ │ │ │ │ │ ├── uniforms_lefthand.dmi │ │ │ │ │ │ └── uniforms_righthand.dmi │ │ │ │ │ ├── equipment/ │ │ │ │ │ │ ├── briefcases_lefthand.dmi │ │ │ │ │ │ ├── briefcases_righthand.dmi │ │ │ │ │ │ ├── construction_lefthand.dmi │ │ │ │ │ │ ├── construction_righthand.dmi │ │ │ │ │ │ ├── devices_lefthand.dmi │ │ │ │ │ │ ├── devices_righthand.dmi │ │ │ │ │ │ ├── hydroponics_tools_lefthand.dmi │ │ │ │ │ │ ├── hydroponics_tools_righthand.dmi │ │ │ │ │ │ ├── janitor_lefthand.dmi │ │ │ │ │ │ ├── janitor_righthand.dmi │ │ │ │ │ │ ├── kitchen_tools_lefthand.dmi │ │ │ │ │ │ ├── kitchen_tools_righthand.dmi │ │ │ │ │ │ ├── medical_lefthand.dmi │ │ │ │ │ │ ├── medical_righthand.dmi │ │ │ │ │ │ ├── paint_lefthand.dmi │ │ │ │ │ │ ├── paint_righthand.dmi │ │ │ │ │ │ ├── paperwork_lefthand.dmi │ │ │ │ │ │ ├── paperwork_righthand.dmi │ │ │ │ │ │ ├── security_lefthand.dmi │ │ │ │ │ │ ├── security_righthand.dmi │ │ │ │ │ │ ├── tanks_lefthand.dmi │ │ │ │ │ │ ├── tanks_righthand.dmi │ │ │ │ │ │ ├── toolboxes_lefthand.dmi │ │ │ │ │ │ ├── toolboxes_righthand.dmi │ │ │ │ │ │ ├── tools_lefthand.dmi │ │ │ │ │ │ └── tools_righthand.dmi │ │ │ │ │ ├── items/ │ │ │ │ │ │ ├── bedsheets_lefthand.dmi │ │ │ │ │ │ ├── bedsheets_righthand.dmi │ │ │ │ │ │ ├── books_lefthand.dmi │ │ │ │ │ │ ├── books_righthand.dmi │ │ │ │ │ │ ├── bottles_lefthand.dmi │ │ │ │ │ │ ├── bottles_righthand.dmi │ │ │ │ │ │ ├── canned_food_lefthand.dmi │ │ │ │ │ │ ├── canned_food_righthand.dmi │ │ │ │ │ │ ├── critters_lefthand.dmi │ │ │ │ │ │ ├── critters_righthand.dmi │ │ │ │ │ │ ├── food_lefthand.dmi │ │ │ │ │ │ ├── food_righthand.dmi │ │ │ │ │ │ ├── furniture_lefthand.dmi │ │ │ │ │ │ ├── furniture_righthand.dmi │ │ │ │ │ │ ├── ids_lefthand.dmi │ │ │ │ │ │ ├── ids_righthand.dmi │ │ │ │ │ │ ├── items_lefthand_64.dmi │ │ │ │ │ │ ├── items_righthand_64.dmi │ │ │ │ │ │ ├── lighting_lefthand.dmi │ │ │ │ │ │ ├── lighting_righthand.dmi │ │ │ │ │ │ ├── material_stacks_lefthand.dmi │ │ │ │ │ │ ├── material_stacks_righthand.dmi │ │ │ │ │ │ ├── mres_lefthand.dmi │ │ │ │ │ │ ├── mres_righthand.dmi │ │ │ │ │ │ ├── organs_lefthand.dmi │ │ │ │ │ │ ├── organs_righthand.dmi │ │ │ │ │ │ ├── smoking_lefthand.dmi │ │ │ │ │ │ ├── smoking_righthand.dmi │ │ │ │ │ │ ├── storage_lefthand.dmi │ │ │ │ │ │ ├── storage_righthand.dmi │ │ │ │ │ │ ├── toys_lefthand.dmi │ │ │ │ │ │ ├── toys_righthand.dmi │ │ │ │ │ │ ├── xeno_items_lefthand.dmi │ │ │ │ │ │ └── xeno_items_righthand.dmi │ │ │ │ │ ├── items_by_map/ │ │ │ │ │ │ ├── classic_lefthand.dmi │ │ │ │ │ │ ├── classic_righthand.dmi │ │ │ │ │ │ ├── desert_lefthand.dmi │ │ │ │ │ │ ├── desert_righthand.dmi │ │ │ │ │ │ ├── jungle_lefthand.dmi │ │ │ │ │ │ ├── jungle_righthand.dmi │ │ │ │ │ │ ├── snow_lefthand.dmi │ │ │ │ │ │ ├── snow_righthand.dmi │ │ │ │ │ │ ├── urban_lefthand.dmi │ │ │ │ │ │ └── urban_righthand.dmi │ │ │ │ │ └── weapons/ │ │ │ │ │ ├── ammo_lefthand.dmi │ │ │ │ │ ├── ammo_righthand.dmi │ │ │ │ │ ├── grenades_lefthand.dmi │ │ │ │ │ ├── grenades_righthand.dmi │ │ │ │ │ ├── guns/ │ │ │ │ │ │ ├── assault_rifles_lefthand.dmi │ │ │ │ │ │ ├── assault_rifles_righthand.dmi │ │ │ │ │ │ ├── energy_weapons_lefthand.dmi │ │ │ │ │ │ ├── energy_weapons_righthand.dmi │ │ │ │ │ │ ├── flamers_lefthand.dmi │ │ │ │ │ │ ├── flamers_righthand.dmi │ │ │ │ │ │ ├── grenade_launchers_lefthand.dmi │ │ │ │ │ │ ├── grenade_launchers_righthand.dmi │ │ │ │ │ │ ├── machineguns_lefthand.dmi │ │ │ │ │ │ ├── machineguns_righthand.dmi │ │ │ │ │ │ ├── marksman_rifles_lefthand.dmi │ │ │ │ │ │ ├── marksman_rifles_righthand.dmi │ │ │ │ │ │ ├── misc_weapons_lefthand.dmi │ │ │ │ │ │ ├── misc_weapons_righthand.dmi │ │ │ │ │ │ ├── pistols_lefthand.dmi │ │ │ │ │ │ ├── pistols_righthand.dmi │ │ │ │ │ │ ├── pred_guns_lefthand.dmi │ │ │ │ │ │ ├── pred_guns_righthand.dmi │ │ │ │ │ │ ├── revolvers_lefthand.dmi │ │ │ │ │ │ ├── revolvers_righthand.dmi │ │ │ │ │ │ ├── rocket_launchers_lefthand.dmi │ │ │ │ │ │ ├── rocket_launchers_righthand.dmi │ │ │ │ │ │ ├── shotguns_lefthand.dmi │ │ │ │ │ │ ├── shotguns_righthand.dmi │ │ │ │ │ │ ├── smartguns_lefthand.dmi │ │ │ │ │ │ ├── smartguns_righthand.dmi │ │ │ │ │ │ ├── smgs_lefthand.dmi │ │ │ │ │ │ └── smgs_righthand.dmi │ │ │ │ │ └── melee/ │ │ │ │ │ ├── 64_weapons_lefthand.dmi │ │ │ │ │ ├── 64_weapons_righthand.dmi │ │ │ │ │ ├── axes_lefthand.dmi │ │ │ │ │ ├── axes_righthand.dmi │ │ │ │ │ ├── canes_lefthand.dmi │ │ │ │ │ ├── canes_righthand.dmi │ │ │ │ │ ├── energy_lefthand.dmi │ │ │ │ │ ├── energy_righthand.dmi │ │ │ │ │ ├── knives_lefthand.dmi │ │ │ │ │ ├── knives_righthand.dmi │ │ │ │ │ ├── misc_weapons_lefthand.dmi │ │ │ │ │ ├── misc_weapons_righthand.dmi │ │ │ │ │ ├── non_lethal_lefthand.dmi │ │ │ │ │ ├── non_lethal_righthand.dmi │ │ │ │ │ ├── shields_lefthand.dmi │ │ │ │ │ ├── shields_righthand.dmi │ │ │ │ │ ├── spears_lefthand.dmi │ │ │ │ │ ├── spears_righthand.dmi │ │ │ │ │ ├── swords_lefthand.dmi │ │ │ │ │ └── swords_righthand.dmi │ │ │ │ ├── limb_mask.dmi │ │ │ │ └── med_human.dmi │ │ │ ├── species/ │ │ │ │ ├── monkeys/ │ │ │ │ │ ├── onmob/ │ │ │ │ │ │ ├── hands_monkey.dmi │ │ │ │ │ │ ├── suit_monkey_0.dmi │ │ │ │ │ │ ├── suit_monkey_1.dmi │ │ │ │ │ │ ├── ties_monkey.dmi │ │ │ │ │ │ └── uniform_monkey_0.dmi │ │ │ │ │ ├── r_farwa.dmi │ │ │ │ │ ├── r_monkey.dmi │ │ │ │ │ ├── r_neaera.dmi │ │ │ │ │ ├── r_stok.dmi │ │ │ │ │ └── r_yiren.dmi │ │ │ │ ├── r_def_human.dmi │ │ │ │ ├── r_goo_zed.dmi │ │ │ │ ├── r_human.dmi │ │ │ │ ├── r_predator.dmi │ │ │ │ ├── r_skeleton.dmi │ │ │ │ ├── r_spooker.dmi │ │ │ │ ├── r_synthetic.dmi │ │ │ │ ├── r_wy_combat_android.dmi │ │ │ │ ├── r_zombie.dmi │ │ │ │ └── synth_k9/ │ │ │ │ ├── onmob/ │ │ │ │ │ └── synth_k9_overlays.dmi │ │ │ │ └── r_k9.dmi │ │ │ ├── template.dmi │ │ │ ├── undershirt.dmi │ │ │ ├── underwear.dmi │ │ │ └── yaut_hair.dmi │ │ ├── map_backgrounds.dmi │ │ ├── mob.dmi │ │ ├── mob_64.dmi │ │ ├── radial.dmi │ │ ├── radial_tape.dmi │ │ ├── radial_taperecorder.dmi │ │ ├── robotic.dmi │ │ ├── robots.dmi │ │ ├── screen_alert.dmi │ │ ├── screen_ghost.dmi │ │ ├── xenonids/ │ │ │ ├── Effects.dmi │ │ │ ├── castes/ │ │ │ │ ├── tier_0/ │ │ │ │ │ ├── larva.dmi │ │ │ │ │ ├── lesser_drone.dmi │ │ │ │ │ └── xenonid_crab.dmi │ │ │ │ ├── tier_1/ │ │ │ │ │ ├── defender.dmi │ │ │ │ │ ├── drone.dmi │ │ │ │ │ ├── runner.dmi │ │ │ │ │ └── sentinel.dmi │ │ │ │ ├── tier_2/ │ │ │ │ │ ├── burrower.dmi │ │ │ │ │ ├── carrier.dmi │ │ │ │ │ ├── hivelord.dmi │ │ │ │ │ ├── lurker.dmi │ │ │ │ │ ├── spitter.dmi │ │ │ │ │ └── warrior.dmi │ │ │ │ ├── tier_3/ │ │ │ │ │ ├── boiler.dmi │ │ │ │ │ ├── crusher.dmi │ │ │ │ │ ├── praetorian.dmi │ │ │ │ │ └── ravager.dmi │ │ │ │ └── tier_4/ │ │ │ │ ├── ovipositor.dmi │ │ │ │ └── queen.dmi │ │ │ ├── fruits.dmi │ │ │ ├── overlay_effects64x64.dmi │ │ │ ├── structures.dmi │ │ │ ├── structures48x48.dmi │ │ │ ├── structures64x64.dmi │ │ │ ├── weeds.dmi │ │ │ └── wounds.dmi │ │ └── xenos/ │ │ ├── ATTRIBUTION.txt │ │ ├── castes/ │ │ │ ├── tier_0/ │ │ │ │ ├── facehugger.dmi │ │ │ │ ├── larva.dmi │ │ │ │ ├── lesser_drone.dmi │ │ │ │ └── predalien_larva.dmi │ │ │ ├── tier_1/ │ │ │ │ ├── defender.dmi │ │ │ │ ├── drone.dmi │ │ │ │ ├── drone_strain_overlays.dmi │ │ │ │ ├── runner.dmi │ │ │ │ ├── runner_strain_overlays.dmi │ │ │ │ └── sentinel.dmi │ │ │ ├── tier_2/ │ │ │ │ ├── burrower.dmi │ │ │ │ ├── carrier.dmi │ │ │ │ ├── hivelord.dmi │ │ │ │ ├── lurker.dmi │ │ │ │ ├── spitter.dmi │ │ │ │ └── warrior.dmi │ │ │ ├── tier_3/ │ │ │ │ ├── boiler.dmi │ │ │ │ ├── crusher.dmi │ │ │ │ ├── despoiler.dmi │ │ │ │ ├── praetorian.dmi │ │ │ │ └── ravager.dmi │ │ │ └── tier_4/ │ │ │ ├── king.dmi │ │ │ ├── ovipositor.dmi │ │ │ ├── predalien.dmi │ │ │ ├── queen.dmi │ │ │ └── rogueking.dmi │ │ ├── effects.dmi │ │ ├── effects_xenoids.dmi │ │ ├── fruits.dmi │ │ ├── onmob/ │ │ │ ├── defender.dmi │ │ │ ├── drone.dmi │ │ │ ├── praetorian.dmi │ │ │ ├── runner.dmi │ │ │ ├── sentinel.dmi │ │ │ ├── spitter.dmi │ │ │ └── warrior.dmi │ │ ├── overlay_effects64x64.dmi │ │ ├── radial_xenos.dmi │ │ ├── structures.dmi │ │ ├── structures48x48.dmi │ │ ├── structures64x64.dmi │ │ ├── weeds.dmi │ │ ├── weeds_48x48.dmi │ │ └── weeds_64x64.dmi │ ├── obj/ │ │ ├── apc.dmi │ │ ├── bodybag.dmi │ │ ├── flora/ │ │ │ └── tallgrass.dmi │ │ ├── items/ │ │ │ ├── Marine_Research.dmi │ │ │ ├── assemblies.dmi │ │ │ ├── backpack_sprayers.dmi │ │ │ ├── bedsheets.dmi │ │ │ ├── binoculars.dmi │ │ │ ├── black_goo_stuff.dmi │ │ │ ├── bloodpack.dmi │ │ │ ├── books.dmi │ │ │ ├── candle.dmi │ │ │ ├── card.dmi │ │ │ ├── casings.dmi │ │ │ ├── ceramic_plates.dmi │ │ │ ├── chemistry.dmi │ │ │ ├── circuitboards.dmi │ │ │ ├── clothing/ │ │ │ │ ├── accessory/ │ │ │ │ │ ├── armbands.dmi │ │ │ │ │ ├── inventory_overlays/ │ │ │ │ │ │ ├── armbands.dmi │ │ │ │ │ │ ├── legpouch.dmi │ │ │ │ │ │ ├── medals.dmi │ │ │ │ │ │ ├── misc.dmi │ │ │ │ │ │ ├── ponchos.dmi │ │ │ │ │ │ ├── ranks.dmi │ │ │ │ │ │ ├── ties.dmi │ │ │ │ │ │ ├── webbings.dmi │ │ │ │ │ │ └── yautja.dmi │ │ │ │ │ ├── legpouch.dmi │ │ │ │ │ ├── medals.dmi │ │ │ │ │ ├── misc.dmi │ │ │ │ │ ├── patches.dmi │ │ │ │ │ ├── ponchos.dmi │ │ │ │ │ ├── ranks.dmi │ │ │ │ │ ├── ties.dmi │ │ │ │ │ ├── watches.dmi │ │ │ │ │ ├── webbings.dmi │ │ │ │ │ └── wrist_accessories.dmi │ │ │ │ ├── backpack/ │ │ │ │ │ ├── backpacks.dmi │ │ │ │ │ ├── backpacks_by_faction/ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ ├── backpacks_by_map/ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ ├── donator.dmi │ │ │ │ │ └── smartpack.dmi │ │ │ │ ├── belts/ │ │ │ │ │ ├── belts.dmi │ │ │ │ │ ├── belts_by_faction/ │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ ├── belts_by_map/ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ ├── donator.dmi │ │ │ │ │ ├── holstered_guns.dmi │ │ │ │ │ └── misc.dmi │ │ │ │ ├── glasses/ │ │ │ │ │ ├── glasses.dmi │ │ │ │ │ ├── goggles.dmi │ │ │ │ │ ├── huds.dmi │ │ │ │ │ ├── misc.dmi │ │ │ │ │ └── night_vision.dmi │ │ │ │ ├── gloves.dmi │ │ │ │ ├── halloween_clothes.dmi │ │ │ │ ├── hats/ │ │ │ │ │ ├── berets.dmi │ │ │ │ │ ├── donator.dmi │ │ │ │ │ ├── formal_hats.dmi │ │ │ │ │ ├── hardhats.dmi │ │ │ │ │ ├── hats.dmi │ │ │ │ │ ├── hats_by_faction/ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ ├── hats_by_map/ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ ├── hazard.dmi │ │ │ │ │ ├── headbands.dmi │ │ │ │ │ ├── misc_ert_colony.dmi │ │ │ │ │ ├── overlays.dmi │ │ │ │ │ ├── soft_caps.dmi │ │ │ │ │ ├── surgical_caps.dmi │ │ │ │ │ └── xeno_hats.dmi │ │ │ │ ├── helmet_garb.dmi │ │ │ │ ├── helmet_visors.dmi │ │ │ │ ├── masks/ │ │ │ │ │ ├── balaclava.dmi │ │ │ │ │ ├── donator.dmi │ │ │ │ │ ├── gasmasks.dmi │ │ │ │ │ ├── masks.dmi │ │ │ │ │ ├── masks_by_faction/ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ └── scarves.dmi │ │ │ │ ├── pouches.dmi │ │ │ │ ├── shoes.dmi │ │ │ │ ├── suits/ │ │ │ │ │ ├── armor.dmi │ │ │ │ │ ├── coats_robes.dmi │ │ │ │ │ ├── donator.dmi │ │ │ │ │ ├── halloween.dmi │ │ │ │ │ ├── hazard.dmi │ │ │ │ │ ├── jackets.dmi │ │ │ │ │ ├── misc_ert.dmi │ │ │ │ │ ├── suits_by_faction/ │ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ │ ├── UA.dmi │ │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ │ └── WY.dmi │ │ │ │ │ ├── suits_by_map/ │ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ │ ├── desert.dmi │ │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ │ ├── snow.dmi │ │ │ │ │ │ └── urban.dmi │ │ │ │ │ ├── vests_aprons.dmi │ │ │ │ │ ├── windbreakers.dmi │ │ │ │ │ └── xeno_suits.dmi │ │ │ │ └── uniforms/ │ │ │ │ ├── donator.dmi │ │ │ │ ├── formal_uniforms.dmi │ │ │ │ ├── jumpsuits.dmi │ │ │ │ ├── misc_ert_colony.dmi │ │ │ │ ├── synthetic_uniforms.dmi │ │ │ │ ├── underwear_uniforms.dmi │ │ │ │ ├── uniforms_by_department/ │ │ │ │ │ ├── cargo.dmi │ │ │ │ │ ├── engineering.dmi │ │ │ │ │ ├── medical.dmi │ │ │ │ │ ├── research.dmi │ │ │ │ │ ├── security.dmi │ │ │ │ │ └── service.dmi │ │ │ │ ├── uniforms_by_faction/ │ │ │ │ │ ├── CLF.dmi │ │ │ │ │ ├── CMB.dmi │ │ │ │ │ ├── SEEGSON.dmi │ │ │ │ │ ├── TWE.dmi │ │ │ │ │ ├── UA.dmi │ │ │ │ │ ├── UPP.dmi │ │ │ │ │ └── WY.dmi │ │ │ │ ├── uniforms_by_map/ │ │ │ │ │ ├── classic.dmi │ │ │ │ │ ├── desert.dmi │ │ │ │ │ ├── jungle.dmi │ │ │ │ │ ├── snow.dmi │ │ │ │ │ └── urban.dmi │ │ │ │ └── workwear.dmi │ │ │ ├── cpr_dummy.dmi │ │ │ ├── devices.dmi │ │ │ ├── dice.dmi │ │ │ ├── disk.dmi │ │ │ ├── economy.dmi │ │ │ ├── fishing_atoms.dmi │ │ │ ├── floor_tiles.dmi │ │ │ ├── food/ │ │ │ │ ├── bakery.dmi │ │ │ │ ├── bread.dmi │ │ │ │ ├── burgers.dmi │ │ │ │ ├── cakes.dmi │ │ │ │ ├── candies.dmi │ │ │ │ ├── cheese.dmi │ │ │ │ ├── condiments.dmi │ │ │ │ ├── dishes.dmi │ │ │ │ ├── donuts.dmi │ │ │ │ ├── drinkcans.dmi │ │ │ │ ├── drinks.dmi │ │ │ │ ├── eggs.dmi │ │ │ │ ├── fish.dmi │ │ │ │ ├── food_ingredients.dmi │ │ │ │ ├── junkfood.dmi │ │ │ │ ├── meat.dmi │ │ │ │ ├── monkeycubes.dmi │ │ │ │ ├── mre_food/ │ │ │ │ │ ├── clf.dmi │ │ │ │ │ ├── merc.dmi │ │ │ │ │ ├── twe.dmi │ │ │ │ │ ├── upp.dmi │ │ │ │ │ ├── uscm.dmi │ │ │ │ │ └── wy.dmi │ │ │ │ ├── pizza.dmi │ │ │ │ ├── slices.dmi │ │ │ │ ├── soups_salads.dmi │ │ │ │ └── trays.dmi │ │ │ ├── gifts.dmi │ │ │ ├── harvest.dmi │ │ │ ├── hunter/ │ │ │ │ ├── badblood_gear.dmi │ │ │ │ ├── bow.dmi │ │ │ │ ├── mcaste_gear.dmi │ │ │ │ ├── pred_armor.dmi │ │ │ │ ├── pred_bracers.dmi │ │ │ │ ├── pred_gear.dmi │ │ │ │ ├── pred_mask.dmi │ │ │ │ ├── pred_mask_accessories.dmi │ │ │ │ ├── pred_shoes.dmi │ │ │ │ ├── pred_vendor.dmi │ │ │ │ ├── prey_items.dmi │ │ │ │ └── thrall_gear.dmi │ │ │ ├── inflatable.dmi │ │ │ ├── kitchen_tools.dmi │ │ │ ├── lighting.dmi │ │ │ ├── marine-items.dmi │ │ │ ├── marine-items_christmas.dmi │ │ │ ├── medical_stacks.dmi │ │ │ ├── medical_tools.dmi │ │ │ ├── new_assemblies.dmi │ │ │ ├── organs.dmi │ │ │ ├── paint.dmi │ │ │ ├── pamphlets.dmi │ │ │ ├── paper.dmi │ │ │ ├── pizza_galaxy_pizza.dmi │ │ │ ├── playing_cards.dmi │ │ │ ├── radio.dmi │ │ │ ├── reagentfillings.dmi │ │ │ ├── robot_component.dmi │ │ │ ├── robot_parts.dmi │ │ │ ├── security.dmi │ │ │ ├── seeds.dmi │ │ │ ├── shards.dmi │ │ │ ├── skeleton.dmi │ │ │ ├── smoking/ │ │ │ │ ├── ashtray.dmi │ │ │ │ ├── cigarettes.dmi │ │ │ │ ├── cigars.dmi │ │ │ │ ├── lighters.dmi │ │ │ │ ├── matches.dmi │ │ │ │ ├── packets/ │ │ │ │ │ ├── arcturian_ace.dmi │ │ │ │ │ ├── balaji_imperials.dmi │ │ │ │ │ ├── balaji_imperials_mini.dmi │ │ │ │ │ ├── executive_selec_mini.dmi │ │ │ │ │ ├── executive_select.dmi │ │ │ │ │ ├── executive_select_mini.dmi │ │ │ │ │ ├── koorlander.dmi │ │ │ │ │ ├── lady_fingers.dmi │ │ │ │ │ ├── lucky_strike.dmi │ │ │ │ │ ├── lucky_strike_mini.dmi │ │ │ │ │ ├── normal.dmi │ │ │ │ │ ├── spirits_cyan.dmi │ │ │ │ │ ├── spirits_yellow.dmi │ │ │ │ │ ├── trading_card.dmi │ │ │ │ │ ├── wy_gold.dmi │ │ │ │ │ └── wy_gold_mini.dmi │ │ │ │ └── pipes.dmi │ │ │ ├── spray.dmi │ │ │ ├── stacks.dmi │ │ │ ├── stock_parts.dmi │ │ │ ├── storage/ │ │ │ │ ├── bags.dmi │ │ │ │ ├── boxes.dmi │ │ │ │ ├── briefcases.dmi │ │ │ │ ├── holsters.dmi │ │ │ │ ├── kits.dmi │ │ │ │ ├── medical.dmi │ │ │ │ ├── mre.dmi │ │ │ │ ├── packets.dmi │ │ │ │ └── toolbox.dmi │ │ │ ├── surgery_tools.dmi │ │ │ ├── synth/ │ │ │ │ ├── synth_reset_key.dmi │ │ │ │ └── wj_pda.dmi │ │ │ ├── syringe.dmi │ │ │ ├── table_decorations.dmi │ │ │ ├── table_parts.dmi │ │ │ ├── tank.dmi │ │ │ ├── tools.dmi │ │ │ ├── toy.dmi │ │ │ ├── trash.dmi │ │ │ ├── vialbox.dmi │ │ │ ├── walkman.dmi │ │ │ └── weapons/ │ │ │ ├── grenade.dmi │ │ │ ├── guns/ │ │ │ │ ├── ammo_boxes/ │ │ │ │ │ ├── boxes_and_lids.dmi │ │ │ │ │ ├── handfuls.dmi │ │ │ │ │ ├── magazines.dmi │ │ │ │ │ ├── misc.dmi │ │ │ │ │ └── text.dmi │ │ │ │ ├── ammo_by_faction/ │ │ │ │ │ ├── TWE/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── UPP/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── rocket_launchers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ ├── smgs.dmi │ │ │ │ │ │ └── turrets.dmi │ │ │ │ │ ├── USCM/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── grenade_launchers.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── rocket_launchers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ ├── smgs.dmi │ │ │ │ │ │ ├── turrets.dmi │ │ │ │ │ │ └── vehicles.dmi │ │ │ │ │ ├── WY/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── turrets.dmi │ │ │ │ │ ├── colony/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── nailguns.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── event.dmi │ │ │ │ │ └── pred.dmi │ │ │ │ ├── attachments/ │ │ │ │ │ ├── barrel.dmi │ │ │ │ │ ├── rail.dmi │ │ │ │ │ ├── stock.dmi │ │ │ │ │ └── under.dmi │ │ │ │ ├── guns_by_faction/ │ │ │ │ │ ├── TWE/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── UPP/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── hmg.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── rocket_launchers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── USCM/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── energy_weapons.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── grenade_launchers.dmi │ │ │ │ │ │ ├── hmg.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── rocket_launchers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── WY/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── colony/ │ │ │ │ │ │ ├── assault_rifles.dmi │ │ │ │ │ │ ├── energy_weapons.dmi │ │ │ │ │ │ ├── flamers.dmi │ │ │ │ │ │ ├── grenade_launchers.dmi │ │ │ │ │ │ ├── machineguns.dmi │ │ │ │ │ │ ├── marksman_rifles.dmi │ │ │ │ │ │ ├── nailguns.dmi │ │ │ │ │ │ ├── pistols.dmi │ │ │ │ │ │ ├── revolvers.dmi │ │ │ │ │ │ ├── shotguns.dmi │ │ │ │ │ │ └── smgs.dmi │ │ │ │ │ ├── event.dmi │ │ │ │ │ └── pred.dmi │ │ │ │ ├── guns_by_map/ │ │ │ │ │ ├── classic/ │ │ │ │ │ │ ├── back.dmi │ │ │ │ │ │ ├── guns_lefthand.dmi │ │ │ │ │ │ ├── guns_lefthand_x64.dmi │ │ │ │ │ │ ├── guns_obj.dmi │ │ │ │ │ │ ├── guns_righthand.dmi │ │ │ │ │ │ ├── guns_righthand_x64.dmi │ │ │ │ │ │ └── suit_slot.dmi │ │ │ │ │ ├── desert/ │ │ │ │ │ │ ├── back.dmi │ │ │ │ │ │ ├── guns_lefthand.dmi │ │ │ │ │ │ ├── guns_lefthand_x64.dmi │ │ │ │ │ │ ├── guns_obj.dmi │ │ │ │ │ │ ├── guns_righthand.dmi │ │ │ │ │ │ ├── guns_righthand_x64.dmi │ │ │ │ │ │ └── suit_slot.dmi │ │ │ │ │ ├── jungle/ │ │ │ │ │ │ ├── back.dmi │ │ │ │ │ │ ├── guns_lefthand.dmi │ │ │ │ │ │ ├── guns_lefthand_x64.dmi │ │ │ │ │ │ ├── guns_obj.dmi │ │ │ │ │ │ ├── guns_righthand.dmi │ │ │ │ │ │ ├── guns_righthand_x64.dmi │ │ │ │ │ │ └── suit_slot.dmi │ │ │ │ │ ├── snow/ │ │ │ │ │ │ ├── back.dmi │ │ │ │ │ │ ├── guns_lefthand.dmi │ │ │ │ │ │ ├── guns_lefthand_x64.dmi │ │ │ │ │ │ ├── guns_obj.dmi │ │ │ │ │ │ ├── guns_righthand.dmi │ │ │ │ │ │ ├── guns_righthand_x64.dmi │ │ │ │ │ │ └── suit_slot.dmi │ │ │ │ │ └── urban/ │ │ │ │ │ ├── back.dmi │ │ │ │ │ ├── guns_lefthand.dmi │ │ │ │ │ ├── guns_lefthand_x64.dmi │ │ │ │ │ ├── guns_obj.dmi │ │ │ │ │ ├── guns_righthand.dmi │ │ │ │ │ ├── guns_righthand_x64.dmi │ │ │ │ │ └── suit_slot.dmi │ │ │ │ ├── handful.dmi │ │ │ │ ├── lineart.dmi │ │ │ │ └── lineart_modes.dmi │ │ │ ├── melee/ │ │ │ │ ├── axes.dmi │ │ │ │ ├── canes.dmi │ │ │ │ ├── energy.dmi │ │ │ │ ├── hammers.dmi │ │ │ │ ├── knives.dmi │ │ │ │ ├── misc.dmi │ │ │ │ ├── misc_64.dmi │ │ │ │ ├── non_lethal.dmi │ │ │ │ ├── shields.dmi │ │ │ │ ├── spears.dmi │ │ │ │ └── swords.dmi │ │ │ └── projectiles.dmi │ │ ├── janitor.dmi │ │ ├── pipes/ │ │ │ ├── connector.dmi │ │ │ ├── digital_tvalve.dmi │ │ │ ├── digital_valve.dmi │ │ │ ├── disposal.dmi │ │ │ ├── filter.dmi │ │ │ ├── heat.dmi │ │ │ ├── heat_exchanger.dmi │ │ │ ├── injector.dmi │ │ │ ├── junction.dmi │ │ │ ├── manifold.dmi │ │ │ ├── mixer.dmi │ │ │ ├── omni_devices.dmi │ │ │ ├── outlet_injector.dmi │ │ │ ├── passive_gate.dmi │ │ │ ├── pipe_item.dmi │ │ │ ├── pipe_underlays.dmi │ │ │ ├── pipe_vent.dmi │ │ │ ├── pipes.dmi │ │ │ ├── pipes2.dmi │ │ │ ├── pipes3.dmi │ │ │ ├── pipeturbine.dmi │ │ │ ├── power_cond_heavy.dmi │ │ │ ├── power_cond_white.dmi │ │ │ ├── power_local.dmi │ │ │ ├── pump.dmi │ │ │ ├── red_pipe.dmi │ │ │ ├── regular.dmi │ │ │ ├── tank.dmi │ │ │ ├── transit_tube.dmi │ │ │ ├── transit_tube_pod.dmi │ │ │ ├── transit_tube_station.dmi │ │ │ ├── tvalve.dmi │ │ │ ├── valve.dmi │ │ │ ├── vent_pump.dmi │ │ │ ├── vent_pump_hybrisa.dmi │ │ │ ├── vent_scrubber.dmi │ │ │ └── volume_pump.dmi │ │ ├── resin_objects.dmi │ │ ├── rune.dmi │ │ ├── structures/ │ │ │ ├── alien/ │ │ │ │ ├── structures.dmi │ │ │ │ ├── structures64x64.dmi │ │ │ │ ├── structures96x96.dmi │ │ │ │ └── xenoKingHatchery.dmi │ │ │ ├── barrels.dmi │ │ │ ├── barricades.dmi │ │ │ ├── barricades_christmas.dmi │ │ │ ├── bonfire.dmi │ │ │ ├── bookshelf.dmi │ │ │ ├── closet.dmi │ │ │ ├── crates.dmi │ │ │ ├── doors/ │ │ │ │ ├── 1x2blast_hor.dmi │ │ │ │ ├── 1x2blast_vert.dmi │ │ │ │ ├── 1x4blast_hor.dmi │ │ │ │ ├── 1x4blast_hor_secure.dmi │ │ │ │ ├── 1x4blast_vert.dmi │ │ │ │ ├── 1x4blast_vert_secure.dmi │ │ │ │ ├── 2x1almayerdoor.dmi │ │ │ │ ├── 2x1almayerdoor_glass.dmi │ │ │ │ ├── 2x1comdoor.dmi │ │ │ │ ├── 2x1comdoor_solid.dmi │ │ │ │ ├── 2x1engidoor.dmi │ │ │ │ ├── 2x1engidoor_glass.dmi │ │ │ │ ├── 2x1generic.dmi │ │ │ │ ├── 2x1generic_solid.dmi │ │ │ │ ├── 2x1maintdoor.dmi │ │ │ │ ├── 2x1medidoor.dmi │ │ │ │ ├── 2x1medidoor_solid.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 │ │ │ │ ├── 4x1_elevator.dmi │ │ │ │ ├── 4x1_elevator_access.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 │ │ │ │ ├── Doorbananium.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 │ │ │ │ ├── airlock_assembly.dmi │ │ │ │ ├── airlock_assembly2x1.dmi │ │ │ │ ├── almayerblastdoor.dmi │ │ │ │ ├── almayerdoor.dmi │ │ │ │ ├── almayerdoor_glass.dmi │ │ │ │ ├── blastdoors_shutters.dmi │ │ │ │ ├── celldoor.dmi │ │ │ │ ├── comdoor.dmi │ │ │ │ ├── door_black.dmi │ │ │ │ ├── door_fire2.dmi │ │ │ │ ├── door_marines.dmi │ │ │ │ ├── doormed.dmi │ │ │ │ ├── doormedglass.dmi │ │ │ │ ├── doormorgue.dmi │ │ │ │ ├── doorresearch.dmi │ │ │ │ ├── doorresearchglass.dmi │ │ │ │ ├── doorsci.dmi │ │ │ │ ├── doorsciglass.dmi │ │ │ │ ├── dropship1_cargo.dmi │ │ │ │ ├── dropship1_pilot.dmi │ │ │ │ ├── dropship1_side.dmi │ │ │ │ ├── dropship1_side2.dmi │ │ │ │ ├── dropship2_cargo.dmi │ │ │ │ ├── dropship2_pilot.dmi │ │ │ │ ├── dropship2_side.dmi │ │ │ │ ├── dropship2_side2.dmi │ │ │ │ ├── dropship3_cargo.dmi │ │ │ │ ├── dropship3_pilot.dmi │ │ │ │ ├── dropship3_side.dmi │ │ │ │ ├── dropship3_side2.dmi │ │ │ │ ├── dropship_upp_cargo.dmi │ │ │ │ ├── dropship_upp_pilot.dmi │ │ │ │ ├── dropship_upp_side2.dmi │ │ │ │ ├── edge_Doorfire.dmi │ │ │ │ ├── engidoor.dmi │ │ │ │ ├── engidoor_glass.dmi │ │ │ │ ├── escapepoddoor_black.dmi │ │ │ │ ├── escapepoddoor_white.dmi │ │ │ │ ├── escapepoddoor_yellow.dmi │ │ │ │ ├── hightechsecurity.dmi │ │ │ │ ├── hunter/ │ │ │ │ │ ├── ancient_temple_door.dmi │ │ │ │ │ ├── colorable_ancient_temple_door.dmi │ │ │ │ │ ├── hunter_door.dmi │ │ │ │ │ └── hunter_shutter.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 │ │ │ │ ├── hybrisashutters.dmi │ │ │ │ ├── lifeboatdoors.dmi │ │ │ │ ├── maintdoor.dmi │ │ │ │ ├── medidoor.dmi │ │ │ │ ├── medidoor_glass.dmi │ │ │ │ ├── mineral_doors.dmi │ │ │ │ ├── personaldoor.dmi │ │ │ │ ├── personaldoor_glass.dmi │ │ │ │ ├── pod_doors.dmi │ │ │ │ ├── prepdoor.dmi │ │ │ │ ├── prepdoor_alpha.dmi │ │ │ │ ├── prepdoor_bravo.dmi │ │ │ │ ├── prepdoor_charlie.dmi │ │ │ │ ├── prepdoor_delta.dmi │ │ │ │ ├── prison_FOP/ │ │ │ │ │ └── prison_hatches.dmi │ │ │ │ ├── purinadoor.dmi │ │ │ │ ├── railing.dmi │ │ │ │ ├── rapid_pdoor.dmi │ │ │ │ ├── rusted_door.dmi │ │ │ │ ├── rusted_door_window.dmi │ │ │ │ ├── rusted_door_windowsmall.dmi │ │ │ │ ├── secdoor.dmi │ │ │ │ ├── secdoor_glass.dmi │ │ │ │ ├── securedoor.dmi │ │ │ │ ├── strata/ │ │ │ │ │ ├── strata_doors.dmi │ │ │ │ │ ├── strata_maint.dmi │ │ │ │ │ ├── strata_mining.dmi │ │ │ │ │ └── strata_sec.dmi │ │ │ │ ├── upp/ │ │ │ │ │ ├── upp_2x1engdoor_glass.dmi │ │ │ │ │ ├── upp_2x1enggreendoor.dmi │ │ │ │ │ ├── upp_2x1greendoor.dmi │ │ │ │ │ ├── upp_2x1greendoor_glass.dmi │ │ │ │ │ ├── upp_2x1medigreendoor.dmi │ │ │ │ │ ├── upp_2x1medigreendoor_glass.dmi │ │ │ │ │ ├── upp_2x1reqgreendoor.dmi │ │ │ │ │ ├── upp_2x1reqgreendoor_glass.dmi │ │ │ │ │ ├── upp_2x1secgreendoor.dmi │ │ │ │ │ ├── upp_2x1secgreendoor_glass.dmi │ │ │ │ │ ├── upp_commandgreendoor.dmi │ │ │ │ │ ├── upp_commandgreendoor_glass.dmi │ │ │ │ │ ├── upp_engigreendoor.dmi │ │ │ │ │ ├── upp_engigreendoor_glass.dmi │ │ │ │ │ ├── upp_greendoor.dmi │ │ │ │ │ ├── upp_greendoor_glass.dmi │ │ │ │ │ ├── upp_medigreendoor.dmi │ │ │ │ │ ├── upp_medigreendoor_glass.dmi │ │ │ │ │ ├── upp_reqgreendoor.dmi │ │ │ │ │ ├── upp_reqgreendoor_glass.dmi │ │ │ │ │ ├── upp_secgreendoor.dmi │ │ │ │ │ └── upp_secgreendoor_glass.dmi │ │ │ │ ├── vault.dmi │ │ │ │ ├── white_rusted_solid.dmi │ │ │ │ └── windoor.dmi │ │ │ ├── droppod_32x64.dmi │ │ │ ├── droppod_64x64.dmi │ │ │ ├── fishing.dmi │ │ │ ├── flasher.dmi │ │ │ ├── handrail.dmi │ │ │ ├── kegs.dmi │ │ │ ├── ladders.dmi │ │ │ ├── liquid_tanks.dmi │ │ │ ├── machinery/ │ │ │ │ ├── ai.dmi │ │ │ │ ├── aibots.dmi │ │ │ │ ├── airlock_machines.dmi │ │ │ │ ├── apc.dmi │ │ │ │ ├── ares.dmi │ │ │ │ ├── artillery.dmi │ │ │ │ ├── atmos.dmi │ │ │ │ ├── autolathe.dmi │ │ │ │ ├── big_floodlight.dmi │ │ │ │ ├── biogenerator.dmi │ │ │ │ ├── bolt_target.dmi │ │ │ │ ├── bolt_terminal.dmi │ │ │ │ ├── coffee_machine.dmi │ │ │ │ ├── comm_tower.dmi │ │ │ │ ├── comm_tower2.dmi │ │ │ │ ├── comm_tower3.dmi │ │ │ │ ├── computer.dmi │ │ │ │ ├── computer3.dmi │ │ │ │ ├── cryogenics.dmi │ │ │ │ ├── cryogenics2.dmi │ │ │ │ ├── defenses/ │ │ │ │ │ ├── bell_tower.dmi │ │ │ │ │ ├── clf_defenses.dmi │ │ │ │ │ ├── flamer.dmi │ │ │ │ │ ├── planted_flag.dmi │ │ │ │ │ ├── sentry.dmi │ │ │ │ │ ├── tesla.dmi │ │ │ │ │ ├── unused.dmi │ │ │ │ │ ├── upp_defenses.dmi │ │ │ │ │ ├── wy_defenses.dmi │ │ │ │ │ ├── wy_heavy.dmi │ │ │ │ │ └── wy_static.dmi │ │ │ │ ├── drone_fab.dmi │ │ │ │ ├── filtration.dmi │ │ │ │ ├── floodlight.dmi │ │ │ │ ├── fuelpump.dmi │ │ │ │ ├── fusion_eng.dmi │ │ │ │ ├── geothermal.dmi │ │ │ │ ├── holosign.dmi │ │ │ │ ├── hydroponics.dmi │ │ │ │ ├── iv_drip.dmi │ │ │ │ ├── kitchen.dmi │ │ │ │ ├── library.dmi │ │ │ │ ├── lifeboat.dmi │ │ │ │ ├── loudspeaker.dmi │ │ │ │ ├── meter.dmi │ │ │ │ ├── monitors.dmi │ │ │ │ ├── motion_sensor_v2.dmi │ │ │ │ ├── nuclearbomb.dmi │ │ │ │ ├── power.dmi │ │ │ │ ├── recycling.dmi │ │ │ │ ├── research.dmi │ │ │ │ ├── robotics.dmi │ │ │ │ ├── science_machines.dmi │ │ │ │ ├── science_machines_64x32.dmi │ │ │ │ ├── scoreboard.dmi │ │ │ │ ├── self_destruct.dmi │ │ │ │ ├── shuttle-parts.dmi │ │ │ │ ├── status_display.dmi │ │ │ │ ├── stock_parts.dmi │ │ │ │ ├── suitstorage.dmi │ │ │ │ ├── surgery.dmi │ │ │ │ ├── synth_charger.dmi │ │ │ │ ├── terminals.dmi │ │ │ │ ├── vending.dmi │ │ │ │ ├── vending_64x32.dmi │ │ │ │ ├── virology.dmi │ │ │ │ ├── washing_machine.dmi │ │ │ │ └── yautja_machines.dmi │ │ │ ├── marine_closet.dmi │ │ │ ├── mememower.dmi │ │ │ ├── minecart.dmi │ │ │ ├── morgue.dmi │ │ │ ├── mortar.dmi │ │ │ ├── phone.dmi │ │ │ ├── plantable_flag.dmi │ │ │ ├── props/ │ │ │ │ ├── 64x64.dmi │ │ │ │ ├── 64x64_bodybag_pile.dmi │ │ │ │ ├── alien_autopsy.dmi │ │ │ │ ├── almayer/ │ │ │ │ │ ├── almayer_props.dmi │ │ │ │ │ ├── almayer_props64.dmi │ │ │ │ │ └── almayer_props96.dmi │ │ │ │ ├── atm.dmi │ │ │ │ ├── cash_register.dmi │ │ │ │ ├── containers/ │ │ │ │ │ ├── contain.dmi │ │ │ │ │ ├── containHorizont.dmi │ │ │ │ │ └── containersextended.dmi │ │ │ │ ├── curtain.dmi │ │ │ │ ├── digger.dmi │ │ │ │ ├── dropship/ │ │ │ │ │ ├── dropship_ammo.dmi │ │ │ │ │ ├── dropship_ammo64.dmi │ │ │ │ │ ├── dropship_equipment.dmi │ │ │ │ │ ├── dropship_equipment64.dmi │ │ │ │ │ └── dropshipdamage.dmi │ │ │ │ ├── engineers/ │ │ │ │ │ ├── consoles.dmi │ │ │ │ │ ├── engineerJockey.dmi │ │ │ │ │ ├── engineerPod.dmi │ │ │ │ │ ├── hybrisaengineerpillarangled.dmi │ │ │ │ │ ├── light.dmi │ │ │ │ │ └── props.dmi │ │ │ │ ├── fences/ │ │ │ │ │ ├── dark_fence.dmi │ │ │ │ │ ├── dark_fence_alt.dmi │ │ │ │ │ ├── dark_fence_alt_door.dmi │ │ │ │ │ ├── electric_fence.dmi │ │ │ │ │ ├── electric_fence_alt.dmi │ │ │ │ │ ├── electric_fence_alt_door.dmi │ │ │ │ │ ├── fence.dmi │ │ │ │ │ ├── fence_alt.dmi │ │ │ │ │ ├── fence_alt_door.dmi │ │ │ │ │ ├── overgrown_dark_fence.dmi │ │ │ │ │ ├── overgrown_electric_fence.dmi │ │ │ │ │ ├── overgrown_fence.dmi │ │ │ │ │ ├── upp_fence.dmi │ │ │ │ │ └── upp_fence_door.dmi │ │ │ │ ├── furniture/ │ │ │ │ │ ├── chairs.dmi │ │ │ │ │ ├── clock.dmi │ │ │ │ │ ├── crosses.dmi │ │ │ │ │ ├── display_case.dmi │ │ │ │ │ ├── misc.dmi │ │ │ │ │ ├── musician.dmi │ │ │ │ │ ├── noticeboard.dmi │ │ │ │ │ ├── slot_machines.dmi │ │ │ │ │ └── torii.dmi │ │ │ │ ├── gigadrill.dmi │ │ │ │ ├── holiday_props.dmi │ │ │ │ ├── hunter/ │ │ │ │ │ ├── 32x32_hunter_props.dmi │ │ │ │ │ ├── ancientbrazier.dmi │ │ │ │ │ ├── ancientsatuebase.dmi │ │ │ │ │ ├── ancientsmallstatue.dmi │ │ │ │ │ ├── ancientstatue.dmi │ │ │ │ │ ├── rubble.dmi │ │ │ │ │ └── sarcophagus.dmi │ │ │ │ ├── hybrisa/ │ │ │ │ │ ├── 64x64_props.dmi │ │ │ │ │ ├── 64x96-props.dmi │ │ │ │ │ ├── computers.dmi │ │ │ │ │ ├── grates.dmi │ │ │ │ │ ├── hybrisaxenocryogenics.dmi │ │ │ │ │ ├── misc_props.dmi │ │ │ │ │ ├── piping_wiring.dmi │ │ │ │ │ ├── platforms.dmi │ │ │ │ │ ├── souto.dmi │ │ │ │ │ ├── trash_bins.dmi │ │ │ │ │ └── wall_egg.dmi │ │ │ │ ├── ice_colony/ │ │ │ │ │ ├── Hula.dmi │ │ │ │ │ ├── Tiger_Rugs.dmi │ │ │ │ │ ├── barrel_yard.dmi │ │ │ │ │ ├── fabs_64.dmi │ │ │ │ │ ├── fabs_greebles.dmi │ │ │ │ │ ├── fabs_tileset.dmi │ │ │ │ │ └── props.dmi │ │ │ │ ├── industrial/ │ │ │ │ │ ├── 32x64.dmi │ │ │ │ │ ├── 64x128.dmi │ │ │ │ │ ├── 64x96.dmi │ │ │ │ │ ├── 96x96.dmi │ │ │ │ │ ├── biomass_turbine.dmi │ │ │ │ │ ├── coagulation_arm.dmi │ │ │ │ │ ├── drill.dmi │ │ │ │ │ ├── factory.dmi │ │ │ │ │ ├── flacculation_arm.dmi │ │ │ │ │ ├── generic_props.dmi │ │ │ │ │ ├── hybrisa_lattice.dmi │ │ │ │ │ ├── illuminator.dmi │ │ │ │ │ ├── overhead_ducting.dmi │ │ │ │ │ ├── pipes.dmi │ │ │ │ │ ├── power_transformer.dmi │ │ │ │ │ ├── traffic_signal.dmi │ │ │ │ │ └── watchtower.dmi │ │ │ │ ├── landing_signs.dmi │ │ │ │ ├── landinglights.dmi │ │ │ │ ├── large_tent_props.dmi │ │ │ │ ├── mech.dmi │ │ │ │ ├── mining.dmi │ │ │ │ ├── natural/ │ │ │ │ │ ├── boulder_large.dmi │ │ │ │ │ ├── boulder_largedark.dmi │ │ │ │ │ ├── boulder_small.dmi │ │ │ │ │ ├── boulder_wide.dmi │ │ │ │ │ ├── boulder_widedark.dmi │ │ │ │ │ ├── rocks.dmi │ │ │ │ │ └── vegetation/ │ │ │ │ │ ├── ausflora.dmi │ │ │ │ │ ├── colorable_junge_bush.dmi │ │ │ │ │ ├── dam.dmi │ │ │ │ │ ├── deadtrees.dmi │ │ │ │ │ ├── ground_map64.dmi │ │ │ │ │ ├── joshuatree.dmi │ │ │ │ │ ├── jungleplants.dmi │ │ │ │ │ ├── pinetrees.dmi │ │ │ │ │ ├── plants.dmi │ │ │ │ │ ├── snowflora.dmi │ │ │ │ │ ├── tallgrass.dmi │ │ │ │ │ ├── temperate_flora.dmi │ │ │ │ │ ├── tyrargo_dead_trees.dmi │ │ │ │ │ ├── tyrargo_pine_tree.dmi │ │ │ │ │ └── tyrargo_wood_flora.dmi │ │ │ │ ├── phonebox.dmi │ │ │ │ ├── platforms.dmi │ │ │ │ ├── props.dmi │ │ │ │ ├── sentry_holder_wy.dmi │ │ │ │ ├── sentrycomp.dmi │ │ │ │ ├── server_equipment.dmi │ │ │ │ ├── singularity.dmi │ │ │ │ ├── smoothlattice.dmi │ │ │ │ ├── static_defence_prop.dmi │ │ │ │ ├── stationobjs.dmi │ │ │ │ ├── streetlights.dmi │ │ │ │ ├── supermart.dmi │ │ │ │ ├── target_dummies.dmi │ │ │ │ ├── tyrargo_props.dmi │ │ │ │ ├── vehicles/ │ │ │ │ │ ├── ambulance.dmi │ │ │ │ │ ├── armored_truck_blue.dmi │ │ │ │ │ ├── armored_truck_teal.dmi │ │ │ │ │ ├── armored_truck_trr.dmi │ │ │ │ │ ├── armored_truck_white.dmi │ │ │ │ │ ├── armored_truck_wy_black.dmi │ │ │ │ │ ├── armored_truck_wy_white.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 │ │ │ │ │ ├── car_pileup.dmi │ │ │ │ │ ├── crawler_bed.dmi │ │ │ │ │ ├── crawler_wy_1.dmi │ │ │ │ │ ├── crawler_wy_2.dmi │ │ │ │ │ ├── long_truck_blue.dmi │ │ │ │ │ ├── long_truck_brown.dmi │ │ │ │ │ ├── long_truck_donk.dmi │ │ │ │ │ ├── long_truck_kelland.dmi │ │ │ │ │ ├── long_truck_red.dmi │ │ │ │ │ ├── long_truck_wy_black.dmi │ │ │ │ │ ├── long_truck_wy_blue.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_shell.dmi │ │ │ │ │ ├── meridian_taxi.dmi │ │ │ │ │ ├── meridian_turquoise.dmi │ │ │ │ │ ├── meridian_wy.dmi │ │ │ │ │ ├── mining_crawler.dmi │ │ │ │ │ ├── mining_crawler_fuel.dmi │ │ │ │ │ ├── small_truck_blue.dmi │ │ │ │ │ ├── small_truck_blue_cargo.dmi │ │ │ │ │ ├── small_truck_brown.dmi │ │ │ │ │ ├── small_truck_brown_cargo.dmi │ │ │ │ │ ├── small_truck_brown_cargobarrels.dmi │ │ │ │ │ ├── small_truck_garbage.dmi │ │ │ │ │ ├── small_truck_green.dmi │ │ │ │ │ ├── small_truck_medical.dmi │ │ │ │ │ ├── small_truck_mining.dmi │ │ │ │ │ ├── small_truck_red.dmi │ │ │ │ │ ├── small_truck_turquoise_cargo.dmi │ │ │ │ │ ├── small_truck_white.dmi │ │ │ │ │ ├── small_truck_white_cargo.dmi │ │ │ │ │ └── vehicles.dmi │ │ │ │ ├── wall_decorations/ │ │ │ │ │ ├── 32x64_hybrisabillboards.dmi │ │ │ │ │ ├── banners.dmi │ │ │ │ │ ├── barsigns.dmi │ │ │ │ │ ├── decals.dmi │ │ │ │ │ ├── flags.dmi │ │ │ │ │ ├── hybrisa64x64_signs.dmi │ │ │ │ │ ├── posters.dmi │ │ │ │ │ ├── semiotic_standard.dmi │ │ │ │ │ ├── tyrargo32x64_signs.dmi │ │ │ │ │ └── tyrargo64x64_signs.dmi │ │ │ │ ├── walllocker.dmi │ │ │ │ ├── watercloset.dmi │ │ │ │ └── xeno_cyro_giant.dmi │ │ │ ├── recharger.dmi │ │ │ ├── resources.dmi │ │ │ ├── resources_64x64.dmi │ │ │ ├── restock_carts.dmi │ │ │ ├── rollerbed.dmi │ │ │ ├── safes.dmi │ │ │ ├── souto_land.dmi │ │ │ ├── stairs/ │ │ │ │ ├── perspective_stairs.dmi │ │ │ │ ├── perspective_stairs_ice.dmi │ │ │ │ └── perspective_stairs_kutjevo.dmi │ │ │ ├── structures.dmi │ │ │ ├── tables.dmi │ │ │ ├── tables_64x64.dmi │ │ │ ├── tank_dispenser.dmi │ │ │ ├── tents_deployed_classic.dmi │ │ │ ├── tents_deployed_desert.dmi │ │ │ ├── tents_deployed_jungle.dmi │ │ │ ├── tents_deployed_snow.dmi │ │ │ ├── tents_deployed_urban.dmi │ │ │ ├── tents_equipment.dmi │ │ │ ├── tents_folded.dmi │ │ │ └── wall_dispensers.dmi │ │ ├── turrets.dmi │ │ └── vehicles/ │ │ ├── CLF_van.dmi │ │ ├── aircraft_prop.dmi │ │ ├── apc.dmi │ │ ├── apc_pmc.dmi │ │ ├── apc_prop.dmi │ │ ├── arc.dmi │ │ ├── arc_prop.dmi │ │ ├── bison_prop.dmi │ │ ├── box_van.dmi │ │ ├── hardpoints/ │ │ │ ├── apc.dmi │ │ │ ├── arc.dmi │ │ │ ├── tank.dmi │ │ │ ├── truck.dmi │ │ │ └── van.dmi │ │ ├── humvee_prop.dmi │ │ ├── ifv_prop.dmi │ │ ├── interiors/ │ │ │ ├── apc.dmi │ │ │ ├── apc_pmc.dmi │ │ │ ├── arc.dmi │ │ │ ├── arc_chassis.dmi │ │ │ ├── box_van_interior.dmi │ │ │ ├── clf_van.dmi │ │ │ ├── general.dmi │ │ │ ├── general_wy.dmi │ │ │ ├── pizza_van_interior.dmi │ │ │ ├── tank.dmi │ │ │ └── van.dmi │ │ ├── miltruck_prop.dmi │ │ ├── pizza_van.dmi │ │ ├── powerloader.dmi │ │ ├── powerloader_clamp.dmi │ │ ├── tank.dmi │ │ ├── tank_prop.dmi │ │ ├── twe_tank.dmi │ │ ├── van.dmi │ │ ├── van_prop.dmi │ │ ├── vehicles.dmi │ │ └── vtol_prop.dmi │ ├── old_stuff/ │ │ ├── Seasonal/ │ │ │ └── xmas.dmi │ │ ├── debug_group.dmi │ │ └── mark.dmi │ ├── turf/ │ │ ├── almayer.dmi │ │ ├── area_almayer.dmi │ │ ├── area_chigusashipyard.dmi │ │ ├── area_corsat.dmi │ │ ├── area_dam.dmi │ │ ├── area_hybrisa.dmi │ │ ├── area_kutjevo.dmi │ │ ├── area_prison_v3_fiorina.dmi │ │ ├── area_shiva.dmi │ │ ├── area_strata.dmi │ │ ├── area_varadero.dmi │ │ ├── area_whiskey.dmi │ │ ├── area_yautja.dmi │ │ ├── areas.dmi │ │ ├── areas_event.dmi │ │ ├── areas_interiors.dmi │ │ ├── beach2.dmi │ │ ├── biodomes.dmi │ │ ├── dropship.dmi │ │ ├── dropship2.dmi │ │ ├── dropship3.dmi │ │ ├── dropship_clf.dmi │ │ ├── dropship_twe.dmi │ │ ├── dropship_upp.dmi │ │ ├── dropship_upp_sof.dmi │ │ ├── dropship_upp_sof_alt.dmi │ │ ├── dropship_wy.dmi │ │ ├── elevator.dmi │ │ ├── elevator_strut.dmi │ │ ├── ert_shuttle.dmi │ │ ├── escapepods.dmi │ │ ├── faction_flags.dmi │ │ ├── floors/ │ │ │ ├── 32x32.dmi │ │ │ ├── aicore.dmi │ │ │ ├── asphalt.dmi │ │ │ ├── auto_ice.dmi │ │ │ ├── auto_sand.dmi │ │ │ ├── auto_shale.dmi │ │ │ ├── auto_strata_grass.dmi │ │ │ ├── auto_tyrargo_turf.dmi │ │ │ ├── beach.dmi │ │ │ ├── bigred.dmi │ │ │ ├── carpet_manual.dmi │ │ │ ├── catwalks.dmi │ │ │ ├── coagulation.dmi │ │ │ ├── collection.dmi │ │ │ ├── concrete.dmi │ │ │ ├── corsat.dmi │ │ │ ├── desert.dmi │ │ │ ├── desert_dirt.dmi │ │ │ ├── desert_excavation.dmi │ │ │ ├── desert_rock.dmi │ │ │ ├── desert_water.dmi │ │ │ ├── desert_water_covered.dmi │ │ │ ├── desert_water_toxic.dmi │ │ │ ├── desert_water_transition.dmi │ │ │ ├── desertdam_map.dmi │ │ │ ├── dev/ │ │ │ │ └── dev_floor.dmi │ │ │ ├── dirt.dmi │ │ │ ├── engineership.dmi │ │ │ ├── filtration.dmi │ │ │ ├── floors.dmi │ │ │ ├── ground_map_dirt.dmi │ │ │ ├── hunter/ │ │ │ │ ├── ancientfloor.dmi │ │ │ │ └── hunter_floors.dmi │ │ │ ├── hybrisa_auto_turf.dmi │ │ │ ├── hybrisafloors.dmi │ │ │ ├── ice_colony/ │ │ │ │ └── shiva_floor.dmi │ │ │ ├── interior.dmi │ │ │ ├── jungle.dmi │ │ │ ├── kutjevo/ │ │ │ │ └── kutjevo_floor.dmi │ │ │ ├── prison.dmi │ │ │ ├── snow.dmi │ │ │ ├── snow2.dmi │ │ │ ├── space.dmi │ │ │ ├── strata_floor.dmi │ │ │ └── tyrargo_map_dirt.dmi │ │ ├── ground_map.dmi │ │ ├── hunter_shuttle.dmi │ │ ├── ice.dmi │ │ ├── lifeboat.dmi │ │ ├── overlays.dmi │ │ ├── podwindows.dmi │ │ ├── shuttle.dmi │ │ ├── upp_floor.dmi │ │ ├── vehicle_interior.dmi │ │ └── walls/ │ │ ├── almayer.dmi │ │ ├── almayer_aicore.dmi │ │ ├── almayer_aicore_white.dmi │ │ ├── almayer_white.dmi │ │ ├── bunker.dmi │ │ ├── cave.dmi │ │ ├── chigusa.dmi │ │ ├── corsat.dmi │ │ ├── cult.dmi │ │ ├── dev/ │ │ │ ├── dev.dmi │ │ │ └── dev_windows.dmi │ │ ├── domeretro.dmi │ │ ├── engineership.dmi │ │ ├── floodgate.dmi │ │ ├── forest_veg.dmi │ │ ├── hangar.dmi │ │ ├── hangar_windows.dmi │ │ ├── hunter/ │ │ │ ├── hunter_temple.dmi │ │ │ ├── hunter_temple_broken_wall.dmi │ │ │ ├── hunter_temple_deco.dmi │ │ │ ├── hunter_temple_deco_2.dmi │ │ │ ├── hunter_temple_deco_3.dmi │ │ │ ├── runedstone.dmi │ │ │ └── stone.dmi │ │ ├── hunter.dmi │ │ ├── hybrisa_colony_window.dmi │ │ ├── hybrisa_colonywall.dmi │ │ ├── hybrisa_colonywall_hospital.dmi │ │ ├── hybrisa_engineering_wall.dmi │ │ ├── hybrisa_engineering_windows.dmi │ │ ├── hybrisa_hospital_colonywindows.dmi │ │ ├── hybrisa_marshalls.dmi │ │ ├── hybrisa_marshalls_windows.dmi │ │ ├── hybrisa_offices_colonywall.dmi │ │ ├── hybrisa_offices_windows.dmi │ │ ├── hybrisa_spaceport_walls.dmi │ │ ├── hybrisa_spaceport_windows.dmi │ │ ├── hybrisaresearchbrown_windows.dmi │ │ ├── hybrisaresearchbrownwall.dmi │ │ ├── ice_colony/ │ │ │ ├── shiva_turfs.dmi │ │ │ └── shiva_windows.dmi │ │ ├── icewall.dmi │ │ ├── icewalllight.dmi │ │ ├── jungle_soro_rock_walls.dmi │ │ ├── jungle_veg.dmi │ │ ├── junglewall.dmi │ │ ├── junglewalls_v3.dmi │ │ ├── kutjevo/ │ │ │ ├── kutjevo.dmi │ │ │ └── kutjevo_windows.dmi │ │ ├── kutjevorockdark.dmi │ │ ├── mineral_wall.dmi │ │ ├── prison/ │ │ │ └── bone_resin.dmi │ │ ├── prison.dmi │ │ ├── rockwall.dmi │ │ ├── rwall.dmi │ │ ├── solaris/ │ │ │ ├── solaris.dmi │ │ │ ├── solaris_old.dmi │ │ │ └── solaris_windows.dmi │ │ ├── strata_ice.dmi │ │ ├── strata_jungle.dmi │ │ ├── strata_outpost.dmi │ │ ├── strata_outpost_v1.dmi │ │ ├── strata_windows.dmi │ │ ├── upp_almayer_walls.dmi │ │ ├── upp_almayer_windows.dmi │ │ ├── upp_hull.dmi │ │ ├── upp_walls.dmi │ │ ├── upp_windows.dmi │ │ ├── walls.dmi │ │ ├── window_frames.dmi │ │ ├── windows.dmi │ │ ├── windows_corsat.dmi │ │ ├── wood.dmi │ │ ├── wood2.dmi │ │ └── xeno.dmi │ └── ui_icons/ │ ├── hivebuff_radial.dmi │ ├── logos.dmi │ ├── map_blips.dmi │ ├── map_blips_large.dmi │ ├── map_blips_larger.dmi │ ├── minimap.dmi │ ├── minimap_buttons.dmi │ └── minimap_mouse/ │ ├── draw_black.dmi │ ├── draw_blue.dmi │ ├── draw_erase.dmi │ ├── draw_green.dmi │ ├── draw_purple.dmi │ ├── draw_red.dmi │ ├── draw_yellow.dmi │ └── label.dmi ├── interface/ │ ├── fonts.dm │ ├── interface.dm │ ├── license.txt │ └── skin.dmf ├── map_config/ │ ├── maps.txt │ └── shipmaps.txt ├── maps/ │ ├── Nightmare/ │ │ ├── doc/ │ │ │ ├── Design.md │ │ │ ├── Quickstart.md │ │ │ └── Tech.md │ │ ├── maps/ │ │ │ ├── BigRed/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── CORSAT/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── DesertDam/ │ │ │ │ ├── mapgen_variations.json │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── FOP_v2_Cellblocks/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── FOP_v3_Sciannex/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Hunter_Ship/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Ice_Colony_v2/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Ice_Colony_v3/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Kutjevo/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── LV522_Chances_Claim/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── LV624/ │ │ │ │ ├── mapgen_variations.json │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── LV759_Hybrisa_Prospera/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── New_Varadero/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Sorokyne_Strata/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── USS_Almayer/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ ├── Whiskey_Outpost_v2/ │ │ │ │ ├── nightmare.json │ │ │ │ └── scenario.json │ │ │ └── tyrargo_rift/ │ │ │ ├── nightmare.json │ │ │ └── scenario.json │ │ ├── nightmare.json │ │ └── scenario.json │ ├── _basemap.dm │ ├── almayer.json │ ├── bigredv2.json │ ├── chinook.json │ ├── corsat.json │ ├── desert_dam.json │ ├── fiorina_sciannex.json │ ├── huntership.json │ ├── ice_colony_v2.json │ ├── interiors/ │ │ ├── apc.dmm │ │ ├── apc_command.dmm │ │ ├── apc_med.dmm │ │ ├── apc_no_fpw.dmm │ │ ├── apc_pmc.dmm │ │ ├── arc.dmm │ │ ├── box_van.dmm │ │ ├── clf_van.dmm │ │ ├── pizza_van.dmm │ │ ├── tank.dmm │ │ └── van.dmm │ ├── kutjevo.json │ ├── lv522_chances_claim.json │ ├── lv624.json │ ├── lv759_hybrisa_prospera.json │ ├── map_briefings/ │ │ ├── cl_brief_kutjevo.html │ │ ├── cl_brief_placeholder.html │ │ ├── cl_brief_trijent.html │ │ └── commanding_officer/ │ │ ├── big_red/ │ │ │ ├── SOLARISRIDGEcpo.html │ │ │ ├── SOLARISRIDGEhmm.html │ │ │ ├── SOLARISRIDGEmodi.html │ │ │ └── SOLARISRIDGEunaligned.html │ │ ├── chances/ │ │ │ ├── CHANCEScpo.html │ │ │ ├── CHANCEShmm.html │ │ │ ├── CHANCESmodi.html │ │ │ └── CHANCESunaligned.html │ │ ├── fiorina/ │ │ │ ├── FIORINAcpo.html │ │ │ ├── FIORINAhmm.html │ │ │ ├── FIORINAmodi.html │ │ │ └── FIORINAunaligned.html │ │ ├── hybrisa/ │ │ │ ├── HYBRISAcpo.html │ │ │ ├── HYBRISAhmm.html │ │ │ ├── HYBRISAmodi.html │ │ │ └── HYBRISAunaligned.html │ │ ├── kutjevo/ │ │ │ ├── KUTJEVOcpo.html │ │ │ ├── KUTJEVOhmm.html │ │ │ ├── KUTJEVOmodi.html │ │ │ └── KUTJEVOunaligned.html │ │ ├── lv624/ │ │ │ ├── LV624cpo.html │ │ │ ├── LV624hmm.html │ │ │ ├── LV624modi.html │ │ │ └── LV624unaligned.html │ │ ├── new_varadero/ │ │ │ ├── NEWVARADEROcpo.html │ │ │ ├── NEWVARADEROhmm.html │ │ │ ├── NEWVARADEROmodi.html │ │ │ └── NEWVARADEROunaligned.html │ │ ├── shivas/ │ │ │ ├── SHIVAScpo.html │ │ │ ├── SHIVAShmm.html │ │ │ ├── SHIVASmodi.html │ │ │ └── SHIVASunaligned.html │ │ ├── sorokyne/ │ │ │ ├── SOROKYNEcpo.html │ │ │ ├── SOROKYNEhmm.html │ │ │ ├── SOROKYNEmodi.html │ │ │ └── SOROKYNEunaligned.html │ │ └── trijent_dam/ │ │ ├── TRIJENTDAMcpo.html │ │ ├── TRIJENTDAMhmm.html │ │ ├── TRIJENTDAMmodi.html │ │ └── TRIJENTDAMunaligned.html │ ├── map_files/ │ │ ├── BigRed/ │ │ │ ├── BigRed.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── 10.prison_breakout.dmm │ │ │ │ ├── 10.tcomms_open.dmm │ │ │ │ ├── 15.reactor_meltdown.dmm │ │ │ │ ├── 20.etatunnel_open.dmm │ │ │ │ ├── 20.lz1entrance_v2.dmm │ │ │ │ ├── 20.lz1north_mining.dmm │ │ │ │ ├── 25.chapel_cult.dmm │ │ │ │ ├── 25.containerroom_xenos.dmm │ │ │ │ ├── 25.lz1cave_flank.dmm │ │ │ │ ├── 25.lz1containers_scramble.dmm │ │ │ │ ├── 25.vault_v2.dmm │ │ │ │ ├── 30.cargo_containers.dmm │ │ │ │ ├── 30.viro-rock_open.dmm │ │ │ │ ├── 35.filtration_restored.dmm │ │ │ │ ├── 40.admin_pmc.dmm │ │ │ │ ├── 40.dorms_party.dmm │ │ │ │ ├── 40.viro_open.dmm │ │ │ │ ├── 5.eta_carp.dmm │ │ │ │ └── 70.se-checkpoint.dmm │ │ │ └── standalone/ │ │ │ ├── clfmining.dmm │ │ │ ├── crashlanding-eva.dmm │ │ │ ├── crashlanding-offices.dmm │ │ │ ├── lambda-cave_extratunnel.dmm │ │ │ ├── lambda-cave_mushroom.dmm │ │ │ ├── lambda-graveyard.dmm │ │ │ ├── landingzone_solaris_upp_lz1.dmm │ │ │ ├── landingzone_solaris_uscm_lz1.dmm │ │ │ ├── landingzone_solaris_uscm_lz2.dmm │ │ │ ├── medbay-passage.dmm │ │ │ └── medbay-v3.dmm │ │ ├── CORSAT/ │ │ │ ├── Corsat.dmm │ │ │ ├── sprinkles/ │ │ │ │ └── .gitkeep │ │ │ └── standalone/ │ │ │ ├── lockdown_gammacontrol.dmm │ │ │ ├── lockdown_gammanorth.dmm │ │ │ ├── lockdown_highsec.dmm │ │ │ ├── lockdown_thetacontrol.dmm │ │ │ ├── lockdown_thetaeast.dmm │ │ │ └── sigma_ice.dmm │ │ ├── DesertDam/ │ │ │ ├── Desert_Dam.dmm │ │ │ ├── armory/ │ │ │ │ ├── 10.pristine.dmm │ │ │ │ └── 20.battle.dmm │ │ │ ├── chapel/ │ │ │ │ ├── 10.father.dmm │ │ │ │ └── 20.explosion.dmm │ │ │ ├── engicheckpoint/ │ │ │ │ ├── 10.cavein.dmm │ │ │ │ └── 10.destroyed.dmm │ │ │ ├── northcheckpoint/ │ │ │ │ └── 10.goons.dmm │ │ │ ├── nspa/ │ │ │ │ ├── 10.clf_attack.dmm │ │ │ │ └── 10.destroyed.dmm │ │ │ ├── southbridge/ │ │ │ │ ├── 10.civhold.dmm │ │ │ │ └── 10.corphold.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── 10.damtemple_intact.dmm │ │ │ │ ├── 25.green-new-bridge.dmm │ │ │ │ ├── 25.loaderdude.dmm │ │ │ │ ├── 25.purple-new-bridge.dmm │ │ │ │ ├── 30.admin_fight.dmm │ │ │ │ ├── 30.admin_panic_hold.dmm │ │ │ │ ├── 30.cmbengi.dmm │ │ │ │ ├── 30.engi_walkway_block.dmm │ │ │ │ ├── 30.hold_gen_breakroom.dmm │ │ │ │ ├── 30.hold_genwest.dmm │ │ │ │ ├── 30.hydro_breakroom_hold.dmm │ │ │ │ ├── 30.hydro_walkway_block.dmm │ │ │ │ ├── 30.metal_geneast.dmm │ │ │ │ ├── 30.metal_genwest.dmm │ │ │ │ ├── 30.metal_toolstorage.dmm │ │ │ │ ├── 30.nspa_cordon.dmm │ │ │ │ ├── 30.shipgone_northlz.dmm │ │ │ │ ├── 40.helipad.dmm │ │ │ │ ├── 40.minievac_westresearch.dmm │ │ │ │ └── 50.sensorhold.dmm │ │ │ ├── standalone/ │ │ │ │ ├── barhold.dmm │ │ │ │ ├── clfpods.dmm │ │ │ │ ├── crashlanding-upp-alt1.dmm │ │ │ │ ├── crashlanding-upp-bar.dmm │ │ │ │ ├── landingzone_desertdam_upp_lz1.dmm │ │ │ │ ├── landingzone_desertdam_uscm_lz1.dmm │ │ │ │ ├── landingzone_desertdam_uscm_lz2.dmm │ │ │ │ └── quarantine.dmm │ │ │ ├── treatmentone/ │ │ │ │ ├── 10.destroyed.dmm │ │ │ │ └── 10.hold.dmm │ │ │ ├── workshop/ │ │ │ │ ├── 10.gear.dmm │ │ │ │ └── 10.guns.dmm │ │ │ └── xenoflora/ │ │ │ ├── 10.alt.dmm │ │ │ └── 10.destroyed.dmm │ │ ├── FOP_v2_Cellblocks/ │ │ │ ├── Prison_Station_FOP.dmm │ │ │ └── sprinkles/ │ │ │ └── .gitkeep │ │ ├── FOP_v3_Sciannex/ │ │ │ ├── Fiorina_SciAnnex.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── .gitkeep │ │ │ │ ├── 10.podholder.dmm │ │ │ │ ├── 10.scavshipholder.dmm │ │ │ │ ├── 15.birthdayparty.dmm │ │ │ │ ├── 15.nogear.dmm │ │ │ │ ├── 15.wardenofficedecorated.dmm │ │ │ │ ├── 20.gamertime.dmm │ │ │ │ ├── 20.poolparty.dmm │ │ │ │ ├── 20.yardbasketball.dmm │ │ │ │ ├── 25.researchprestine.dmm │ │ │ │ ├── 30.engineeroffice.dmm │ │ │ │ ├── 30.pizzatime.dmm │ │ │ │ ├── 30.repairpanelslz.dmm │ │ │ │ └── unused/ │ │ │ │ └── 20.medicalhold.dmm │ │ │ └── standalone/ │ │ │ ├── landingzone_fop_upp_lz1.dmm │ │ │ ├── landingzone_fop_uscm_lz1.dmm │ │ │ ├── landingzone_fop_uscm_lz2.dmm │ │ │ ├── riot_in_progress.dmm │ │ │ └── rocinante.dmm │ │ ├── Hunter_Ship/ │ │ │ ├── Hunter_Ship.dmm │ │ │ └── sprinkles/ │ │ │ └── .gitkeep │ │ ├── Ice_Colony_v2/ │ │ │ ├── Ice_Colony_v2.dmm │ │ │ └── sprinkles/ │ │ │ └── .gitkeep │ │ ├── Ice_Colony_v3/ │ │ │ ├── Shivas_Snowball.dmm │ │ │ ├── lz2-south-caves/ │ │ │ │ ├── 20.destroyed_lz2-south-caves.dmm │ │ │ │ └── 30.builtup_lz2-south-caves.dmm │ │ │ ├── lz2-variations/ │ │ │ │ ├── east/ │ │ │ │ │ ├── full-closed.dmm │ │ │ │ │ └── half-closed.dmm │ │ │ │ ├── east-gate/ │ │ │ │ │ ├── blocked.dmm │ │ │ │ │ └── closed.dmm │ │ │ │ ├── eastsouth/ │ │ │ │ │ ├── full-closed.dmm │ │ │ │ │ └── half-open.dmm │ │ │ │ ├── north/ │ │ │ │ │ ├── full-closed.dmm │ │ │ │ │ └── full-open.dmm │ │ │ │ ├── south-gate/ │ │ │ │ │ ├── blocked.dmm │ │ │ │ │ └── closed.dmm │ │ │ │ ├── southeast/ │ │ │ │ │ ├── full-closed.dmm │ │ │ │ │ └── half-open.dmm │ │ │ │ ├── southeast-gate/ │ │ │ │ │ ├── cleared.dmm │ │ │ │ │ └── closed.dmm │ │ │ │ └── southwest/ │ │ │ │ ├── full-open.dmm │ │ │ │ └── half-open.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── .gitkeep │ │ │ │ └── unused/ │ │ │ │ ├── 20.labs-larder.dmm │ │ │ │ ├── 30.labs-elevator_alternate.dmm │ │ │ │ ├── 33.labs-entrance.dmm │ │ │ │ └── 35.south-spidercave_cleared.dmm │ │ │ └── standalone/ │ │ │ ├── clfraid.dmm │ │ │ ├── landingzone_ice_upp_lz1.dmm │ │ │ ├── landingzone_ice_uscm_lz2.dmm │ │ │ └── panic_room_hold.dmm │ │ ├── Kutjevo/ │ │ │ ├── Kutjevo.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── .gitkeep │ │ │ │ ├── 25.cleaningprog_botany.dmm │ │ │ │ ├── 25.plinkingspot_northlz.dmm │ │ │ │ ├── 35.communications.dmm │ │ │ │ ├── 5+trappedmonke_andclown.dmm │ │ │ │ └── lz1alternative.dmm │ │ │ └── standalone/ │ │ │ ├── clfsmugglers.dmm │ │ │ ├── landingzone_kutjevo_upp_lz1.dmm │ │ │ ├── landingzone_kutjevo_uscm_lz1.dmm │ │ │ └── landingzone_kutjevo_uscm_lz2.dmm │ │ ├── LV522_Chances_Claim/ │ │ │ ├── LV522_Chances_Claim.dmm │ │ │ ├── sprinkles/ │ │ │ │ └── .gitkeep │ │ │ └── standalone/ │ │ │ ├── landingzone_chance_upp_lz1.dmm │ │ │ └── landingzone_chance_uscm_lz2.dmm │ │ ├── LV624/ │ │ │ ├── LV624.dmm │ │ │ ├── armory/ │ │ │ │ ├── 10.cheese.dmm │ │ │ │ ├── 10.extra.dmm │ │ │ │ └── 10.looted.dmm │ │ │ ├── cargospecial/ │ │ │ │ ├── cargospecial1_mines.dmm │ │ │ │ ├── cargospecial2_weapons.dmm │ │ │ │ └── cargospecial3_gear.dmm │ │ │ ├── centralcaves/ │ │ │ │ ├── 10.T.dmm │ │ │ │ └── 10.qc.dmm │ │ │ ├── crashedship/ │ │ │ │ ├── 10.digsite.dmm │ │ │ │ └── 10.swapped.dmm │ │ │ ├── gym/ │ │ │ │ ├── 20.pool.dmm │ │ │ │ └── 30.alternate.dmm │ │ │ ├── hydro/ │ │ │ │ └── 30.destroyed.dmm │ │ │ ├── maintemple/ │ │ │ │ ├── 1.intact.dmm │ │ │ │ └── 2.flooded.dmm │ │ │ ├── medbay/ │ │ │ │ ├── 10.destroyed.dmm │ │ │ │ └── 30.larvasurgery.dmm │ │ │ ├── science/ │ │ │ │ ├── 10.yautja.dmm │ │ │ │ └── 40.fullylocked.dmm │ │ │ ├── sprinkles/ │ │ │ │ ├── 20.lz-containers_swapped.dmm │ │ │ │ └── 30.nexuscenter_barricaded.dmm │ │ │ ├── standalone/ │ │ │ │ ├── clfship.dmm │ │ │ │ ├── corporatedome.dmm │ │ │ │ ├── landingzone_624_upp_lz1.dmm │ │ │ │ ├── landingzone_624_uscm_lz1.dmm │ │ │ │ ├── laststand.dmm │ │ │ │ ├── leftsidepass.dmm │ │ │
SYMBOL INDEX (1820 symbols across 375 files)
FILE: .github/add_labels.py
function get_labels (line 46) | def get_labels(pr):
function main (line 94) | def main():
FILE: .github/ss13_genchangelog.py
function dictToTuples (line 69) | def dictToTuples(inp):
FILE: code/datums/_ndatabase/help/IE9.js
function bk (line 6) | function bk(c,a){if(cz.test(c))c=(a||"")+c;return c}
function by (line 6) | function by(c,a){c=bk(c,a);return c.slice(0,c.lastIndexOf("/")+1)}
function cB (line 6) | function cB(c,a){try{c=bk(c,a);if(!bl[c]){V.open("GET",c,false);V.send()...
function F (line 6) | function F(){}
function a (line 6) | function a(){if(!bm)c.apply(this,arguments)}
function cN (line 6) | function cN(c,a){return a||"(?:"}
function O (line 6) | function O(i,g){if(i&&g){var f=(typeof g=="function"?Function:Object).pr...
function bX (line 6) | function bX(i,g,f){var d=i[g];i[g]=function(){var c=this.base;this.base=...
function cO (line 6) | function cO(f,d){if(!d)d=f;var c={};for(var a in f)c[a]=d[a];return c}
function H (line 6) | function H(g){var f=arguments,d=new RegExp("%([1-"+arguments.length+"])"...
function bo (line 6) | function bo(c,a){return String(c).match(a)||[]}
function bY (line 6) | function bY(a){return String(a).replace(cE,"\\$1")}
function bZ (line 6) | function bZ(a){return String(a).replace(cC,"").replace(cD,"")}
function bT (line 6) | function bT(a){return function(){return a}}
function cQ (line 6) | function cQ(a){return cc.parse(a).replace(bz,"$1")}
function bd (line 6) | function bd(a){return a.replace(cb,cR)}
function cd (line 6) | function cd(c){var a=W.length;W[a]=c.slice(1,-1).replace(bz,"$1").replac...
function cR (line 6) | function cR(d,c){var a=W[c];if(a==null)return d;return"'"+W[c]+"'"}
function bp (line 6) | function bp(a){return a.indexOf("'")===0?W[a.slice(1,-1)]:a}
function ce (line 6) | function ce(a){return cS.parse(a)}
function bA (line 6) | function bA(a){cT(a);y(N,"onresize",a)}
function y (line 6) | function y(d,c,a){d.attachEvent(c,a);cf.push(arguments)}
function cU (line 6) | function cU(d,c,a){try{d.detachEvent(c,a)}catch(ex){}}
function be (line 6) | function be(d,c,a){if(!d.elements)d.elements={};if(a)d.elements[c.unique...
function cT (line 6) | function cT(a){bC.push(a)}
function bq (line 6) | function bq(a){return a.currentStyle["ie7-position"]=="fixed"}
function bD (line 6) | function bD(c,a){return c.currentStyle[bB+a]||c.currentStyle[a]}
function Y (line 6) | function Y(d,c,a){if(d.currentStyle[bB+c]==null){d.runtimeStyle[bB+c]=d....
function cj (line 6) | function cj(c){var a=p.createElement(c||"object");a.style.cssText="posit...
function z (line 6) | function z(k,l,m,j){var i="";if(!j){m=q(k.media);j=0}if(m==="none"){k.di...
function A (line 6) | function A(c,a){s.value=a;return c.replace(v,s)}
function s (line 6) | function s(d,c,a){c=q(c);switch(c){case"screen":case"print":if(c!==s.val...
function q (line 6) | function q(d){if(!d)return"all";var c=d.toLowerCase().split(/\s*,\s*/);d...
function n (line 6) | function n(f,d){var c=f._2||f.href,a=bk(c,d);if(L[a])return"";L[a]=f.dis...
function o (line 6) | function o(c,a){return c.replace(ba,"$1"+a.slice(0,a.lastIndexOf("/")+1)...
function Z (line 6) | function Z(a){if(a!=x&&a.currentStyle.position!=="absolute"){S(a,"margin...
function S (line 6) | function S(g,f){if(!g.runtimeStyle[f]){var d=g.parentElement;var c=f==="...
function ba (line 6) | function ba(c,a){return a==="auto"?0:C(c,a)}
function A (line 6) | function A(c,a){if(!c.runtimeStyle.fixedWidth){if(!a)a=c.currentStyle.wi...
function s (line 6) | function s(c){if(!bq(c)){var a=c.offsetParent;while(a&&!a.currentStyle.h...
function q (line 6) | function q(c,a){if(X.test(a))return parseInt(parseFloat(a)/100*s(c));ret...
function o (line 6) | function o(a){return a.offsetWidth-a.clientWidth}
function k (line 6) | function k(c,a){return q(c,c.currentStyle[a+"Left"])+q(c,c.currentStyle[...
function l (line 6) | function l(d){if(d==p.body){var c=d.clientWidth}else{var a=d.getBounding...
function m (line 6) | function m(a){if(be(m,a,/^(fixed|absolute)$/.test(a.currentStyle.positio...
function j (line 6) | function j(d){var c=q(d,d.runtimeStyle._3||d.currentStyle.left),a=s(d)-q...
function cq (line 6) | function cq(c){if(bh.test(c.src)){var a=new Image(c.width,c.height);a.on...
function cr (line 6) | function cr(i,g){var f=i.runtimeStyle,d=i.offsetHeight,c=new Image;c.onl...
function bs (line 6) | function bs(f,d,c){var a=f.filters[bH];if(a){a.src=c||f.src;a.enabled=tr...
function db (line 6) | function db(a){a.src=a.pngSrc;a.filters[bH].enabled=false}
function w (line 6) | function w(){if(B.currentStyle.backgroundAttachment!=="fixed"){if(B.curr...
function A (line 6) | function A(a){return a?bq(a)||A(a.parentElement):false}
function s (line 6) | function s(d,c,a){setTimeout("document.all."+d.uniqueID+".runtimeStyle.s...
function q (line 6) | function q(a){if(be(q,a,a.currentStyle.backgroundAttachment==="fixed"&&!...
function n (line 6) | function n(c){r.src=c.currentStyle.backgroundImage.slice(5,-2);var a=c.c...
function o (line 6) | function o(a){if(be(o,a,bq(a))){Y(a,"position","absolute");Y(a,"left",a....
function k (line 6) | function k(d,c){p.body.getBoundingClientRect();j.positionTop(d,c);j.posi...
function l (line 6) | function l(){var c=q.elements;for(var a in c)n(c[a]);c=o.elements;for(a ...
function dc (line 6) | function dc(){var s="xx-small,x-small,small,medium,large,x-large,xx-larg...
function da (line 6) | function da(a){return a.replace(new RegExp("([{;\\s])("+bF.join("|")+")\...
function dg (line 6) | function dg(c,a){return a.toUpperCase()}
function dp (line 6) | function dp(f,d,c){f=bZ(f);if(!d)d=p;var a=d;bw=o0.test(f);if(bw){d=d.pa...
function dw (line 6) | function dw(a){a=dv.parse(a.replace(du,"\\x$1")).replace(bz,"$1").replac...
function dJ (line 6) | function dJ(a){return a.replace(cb,dx)}
function dx (line 6) | function dx(c,a){return W[a]}
function bS (line 6) | function bS(a){return Array((a.replace(dz,"").match(dy)||"").length+1).j...
function S (line 6) | function S(c){var a="";if(Z.test(c))a+=",R=d.documentElement";if(v.test(...
function bv (line 6) | function bv(){throw new SyntaxError("Invalid selector.");}
FILE: code/datums/_ndatabase/help/prettyref.js
function now (line 25) | function now() {return (new Date()).getTime();}
function toArray (line 27) | function toArray(a) {
function prevElem (line 36) | function prevElem(e) {
function DMhighlight (line 55) | function DMhighlight(pre, params) {
function makearticle (line 373) | function makearticle(p) {
function makeNav (line 380) | function makeNav(article) {
function prettify (line 438) | function prettify(article) {
function addCSSRule (line 557) | function addCSSRule(sheet, selector, rules, index) {
function collapse (line 562) | function collapse() {
function search (line 696) | function search(pattern, params) {
function lenfrom (line 726) | function lenfrom(node,parent,offset) {
function lento (line 737) | function lento(len,parent) {
function textlen (line 756) | function textlen(node,limit) {
function contentLoaded (line 784) | function contentLoaded(win, fn) {
FILE: html/changelog.js
function dropdowns (line 57) | function dropdowns() {
function filterchanges (line 74) | function filterchanges(type){
FILE: html/search.js
function selectFilterField (line 1) | function selectFilterField(){
function updateFilter (line 10) | function updateFilter(){
function handle_filter (line 48) | function handle_filter() {
FILE: html/statbrowser.js
function testHubStorage (line 18) | function testHubStorage() {
function run_after_focus (line 184) | function run_after_focus(callback) {
function createStatusTab (line 188) | function createStatusTab(name, end) {
function removeStatusTab (line 238) | function removeStatusTab(name) {
function sortVerbs (line 252) | function sortVerbs() {
function addPermanentTab (line 268) | function addPermanentTab(name, end) {
function removePermanentTab (line 275) | function removePermanentTab(name) {
function checkStatusTab (line 284) | function checkStatusTab() {
function remove_verb (line 295) | function remove_verb(v) {
function check_verbs (line 305) | function check_verbs() {
function verbs_cat_check (line 311) | function verbs_cat_check(cat) {
function findVerbindex (line 346) | function findVerbindex(name, verblist) {
function wipe_verbs (line 352) | function wipe_verbs() {
function update_verbs (line 358) | function update_verbs() {
function SendTabsToByond (line 363) | function SendTabsToByond() {
function SendTabToByond (line 371) | function SendTabToByond(tab) {
function TakeTabFromByond (line 376) | function TakeTabFromByond(tab) {
function spell_cat_check (line 380) | function spell_cat_check(cat) {
function tab_change (line 395) | function tab_change(tab, force) {
function set_byond_tab (line 433) | function set_byond_tab(tab) {
function draw_debug (line 437) | function draw_debug() {
function draw_status (line 513) | function draw_status() {
function draw_mc (line 545) | function draw_mc() {
function remove_tickets (line 570) | function remove_tickets() {
function remove_sdql2 (line 579) | function remove_sdql2() {
function remove_interviews (line 588) | function remove_interviews() {
function iconError (line 595) | function iconError(e) {
function draw_listedturf (line 613) | function draw_listedturf() {
function remove_listedturf (line 670) | function remove_listedturf() {
function remove_mc (line 678) | function remove_mc() {
function drawClientOptions (line 685) | function drawClientOptions() {
function draw_sdql2 (line 744) | function draw_sdql2() {
function draw_tickets (line 768) | function draw_tickets() {
function draw_interviews (line 805) | function draw_interviews() {
function draw_spells (line 863) | function draw_spells(cat) {
function make_verb_onclick (line 888) | function make_verb_onclick(command) {
function draw_verbs (line 896) | function draw_verbs(cat) {
function set_theme (line 982) | function set_theme(which) {
function set_style_sheet (line 992) | function set_style_sheet(sheet) {
function restoreFocus (line 1007) | function restoreFocus() {
function getCookie (line 1015) | function getCookie(cname) {
function add_verb_list (line 1028) | function add_verb_list(payload) {
function init_spells (line 1055) | function init_spells() {
function handleWinget (line 1111) | function handleWinget(properties) {
function set_font_size (line 1125) | function set_font_size(size) {
function createOptionsButton (line 1343) | function createOptionsButton() {
FILE: nano/js/libraries/doT.js
function encodeHTMLSource (line 39) | function encodeHTMLSource() {
function resolveDefs (line 56) | function resolveDefs(c, block, def) {
function unescape (line 88) | function unescape(code) {
FILE: nano/js/libraries/jquery-ui.js
function focusable (line 93) | function focusable( element, isTabIndexNotNaN ) {
function visible (line 114) | function visible( element ) {
function reduce (line 156) | function reduce( elem, size, border, margin ) {
function handlerProxy (line 706) | function handlerProxy() {
function handlerProxy (line 742) | function handlerProxy() {
function getOffsets (line 1043) | function getOffsets( offsets, width, height ) {
function parseCss (line 1050) | function parseCss( element, property ) {
function getDimensions (line 1054) | function getDimensions( elem ) {
FILE: nano/js/libraries/jquery.js
function isArraylike (line 983) | function isArraylike( obj ) {
function Sizzle (line 1183) | function Sizzle( selector, context, results, seed ) {
function createCache (line 1298) | function createCache() {
function markFunction (line 1316) | function markFunction( fn ) {
function assert (line 1325) | function assert( fn ) {
function addHandle (line 1347) | function addHandle( attrs, handler ) {
function siblingCheck (line 1362) | function siblingCheck( a, b ) {
function createInputPseudo (line 1389) | function createInputPseudo( type ) {
function createButtonPseudo (line 1400) | function createButtonPseudo( type ) {
function createPositionalPseudo (line 1411) | function createPositionalPseudo( fn ) {
function setFilters (line 2394) | function setFilters() {}
function tokenize (line 2398) | function tokenize( selector, parseOnly ) {
function toSelector (line 2465) | function toSelector( tokens ) {
function addCombinator (line 2475) | function addCombinator( matcher, combinator, base ) {
function elementMatcher (line 2525) | function elementMatcher( matchers ) {
function condense (line 2539) | function condense( unmatched, map, filter, context, xml ) {
function setMatcher (line 2560) | function setMatcher( preFilter, selector, matcher, postFilter, postFinde...
function matcherFromTokens (line 2653) | function matcherFromTokens( tokens ) {
function matcherFromGroupMatchers (line 2708) | function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
function multipleContexts (line 2836) | function multipleContexts( selector, contexts, results ) {
function select (line 2845) | function select( selector, context, results, seed ) {
function createOptions (line 2985) | function createOptions( options ) {
function internalData (line 3568) | function internalData( elem, name, data, pvt /* Internal Use Only */ ){
function internalRemoveData (line 3657) | function internalRemoveData( elem, name, pvt ) {
function dataAttr (line 3854) | function dataAttr( elem, key, data ) {
function isEmptyDataObject (line 3886) | function isEmptyDataObject( obj ) {
function returnTrue (line 4712) | function returnTrue() {
function returnFalse (line 4716) | function returnFalse() {
function safeActiveElement (line 4720) | function safeActiveElement() {
function sibling (line 5838) | function sibling( cur, dir ) {
function winnow (line 5956) | function winnow( elements, qualifier, not ) {
function createSafeFragment (line 5984) | function createSafeFragment( document ) {
function manipulationTarget (line 6298) | function manipulationTarget( elem, content ) {
function disableScript (line 6308) | function disableScript( elem ) {
function restoreScript (line 6312) | function restoreScript( elem ) {
function setGlobalEval (line 6323) | function setGlobalEval( elems, refElements ) {
function cloneCopyEvent (line 6331) | function cloneCopyEvent( src, dest ) {
function fixCloneNodeIssues (line 6359) | function fixCloneNodeIssues( src, dest ) {
function getAll (line 6452) | function getAll( context, tag ) {
function fixDefaultChecked (line 6475) | function fixDefaultChecked( elem ) {
function vendorPropName (line 6817) | function vendorPropName( style, name ) {
function isHidden (line 6839) | function isHidden( elem, el ) {
function showHide (line 6846) | function showHide( elements, show ) {
function setPositiveNumber (line 7175) | function setPositiveNumber( elem, value, subtract ) {
function augmentWidthOrHeight (line 7183) | function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
function getWidthOrHeight (line 7222) | function getWidthOrHeight( elem, name, extra ) {
function css_defaultDisplay (line 7266) | function css_defaultDisplay( nodeName ) {
function actualDisplay (line 7298) | function actualDisplay( name, doc ) {
function buildParams (line 7527) | function buildParams( prefix, obj, traditional, add ) {
function addToPrefiltersOrTransports (line 7642) | function addToPrefiltersOrTransports( structure ) {
function inspectPrefiltersOrTransports (line 7674) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
function ajaxExtend (line 7701) | function ajaxExtend( target, src ) {
function done (line 8149) | function done( status, nativeStatusText, responses, headers ) {
function ajaxHandleResponses (line 8296) | function ajaxHandleResponses( s, jqXHR, responses ) {
function ajaxConvert (line 8351) | function ajaxConvert( s, response, jqXHR, isSuccess ) {
function createStandardXHR (line 8619) | function createStandardXHR() {
function createActiveXHR (line 8625) | function createActiveXHR() {
function createFxNow (line 8871) | function createFxNow() {
function createTween (line 8878) | function createTween( value, prop, animation ) {
function Animation (line 8892) | function Animation( elem, properties, options ) {
function propFilter (line 8996) | function propFilter( props, specialEasing ) {
function defaultPrefilter (line 9063) | function defaultPrefilter( elem, props, opts ) {
function Tween (line 9188) | function Tween( elem, options, prop, end, easing ) {
function genFx (line 9412) | function genFx( type, includeWidth ) {
function getWindow (line 9708) | function getWindow( elem ) {
FILE: nano/js/nano_state.js
function NanoStateClass (line 3) | function NanoStateClass() {
FILE: nano/js/nano_state_default.js
function NanoStateDefaultClass (line 5) | function NanoStateDefaultClass() {
FILE: nano/js/ui_scripts/mortar.js
function handleElement (line 1) | function handleElement(element)
function focusNextElement (line 7) | function focusNextElement() {
function handleEvent (line 21) | function handleEvent(e) {
FILE: tgui/global.d.ts
type IntrinsicElements (line 25) | interface IntrinsicElements {
type TguiMessage (line 31) | type TguiMessage = {
type ByondType (line 37) | type ByondType = {
type Window (line 205) | interface Window {
FILE: tgui/packages/common/collections.ts
type MapFunction (line 35) | type MapFunction = {
type ReduceFunction (line 144) | type ReduceFunction = {
type Zip (line 233) | type Zip<T extends unknown[][]> = {
FILE: tgui/packages/common/color.ts
constant EPSILON (line 7) | const EPSILON = 0.0001;
class Color (line 9) | class Color {
method constructor (line 15) | constructor(r = 0, g = 0, b = 0, a = 1) {
method toString (line 22) | toString(): string {
method darken (line 35) | darken(percent: number): Color {
method lighten (line 46) | lighten(percent: number): Color {
method fromHex (line 54) | static fromHex(hex: string): Color {
method lerp (line 65) | static lerp(c1: Color, c2: Color, n: number): Color {
method lookup (line 78) | static lookup(value: number, colors: Color[]): Color {
type RgbColor (line 118) | interface RgbColor {
type RgbaColor (line 124) | interface RgbaColor extends RgbColor {
type HslColor (line 128) | interface HslColor {
type HslaColor (line 134) | interface HslaColor extends HslColor {
type HsvColor (line 138) | interface HsvColor {
type HsvaColor (line 144) | interface HsvaColor extends HsvColor {
type ObjectColor (line 148) | type ObjectColor =
type AnyColor (line 156) | type AnyColor = string | ObjectColor;
FILE: tgui/packages/common/events.ts
type Fn (line 7) | type Fn = (...args: any[]) => void;
class EventEmitter (line 9) | class EventEmitter {
method constructor (line 12) | constructor() {
method on (line 16) | on(name: string, listener: Fn): void {
method off (line 21) | off(name: string, listener: Fn): void {
method emit (line 31) | emit(name: string, ...params: any[]): void {
method clear (line 42) | clear(): void {
FILE: tgui/packages/common/fp.ts
type Func (line 7) | type Func = (...args: any[]) => any;
FILE: tgui/packages/common/keycodes.ts
constant KEY_BACKSPACE (line 9) | const KEY_BACKSPACE = 8;
constant KEY_TAB (line 10) | const KEY_TAB = 9;
constant KEY_ENTER (line 11) | const KEY_ENTER = 13;
constant KEY_SHIFT (line 12) | const KEY_SHIFT = 16;
constant KEY_CTRL (line 13) | const KEY_CTRL = 17;
constant KEY_ALT (line 14) | const KEY_ALT = 18;
constant KEY_PAUSE (line 15) | const KEY_PAUSE = 19;
constant KEY_CAPSLOCK (line 16) | const KEY_CAPSLOCK = 20;
constant KEY_ESCAPE (line 17) | const KEY_ESCAPE = 27;
constant KEY_SPACE (line 18) | const KEY_SPACE = 32;
constant KEY_PAGEUP (line 19) | const KEY_PAGEUP = 33;
constant KEY_PAGEDOWN (line 20) | const KEY_PAGEDOWN = 34;
constant KEY_END (line 21) | const KEY_END = 35;
constant KEY_HOME (line 22) | const KEY_HOME = 36;
constant KEY_LEFT (line 23) | const KEY_LEFT = 37;
constant KEY_UP (line 24) | const KEY_UP = 38;
constant KEY_RIGHT (line 25) | const KEY_RIGHT = 39;
constant KEY_DOWN (line 26) | const KEY_DOWN = 40;
constant KEY_INSERT (line 27) | const KEY_INSERT = 45;
constant KEY_DELETE (line 28) | const KEY_DELETE = 46;
constant KEY_0 (line 29) | const KEY_0 = 48;
constant KEY_1 (line 30) | const KEY_1 = 49;
constant KEY_2 (line 31) | const KEY_2 = 50;
constant KEY_3 (line 32) | const KEY_3 = 51;
constant KEY_4 (line 33) | const KEY_4 = 52;
constant KEY_5 (line 34) | const KEY_5 = 53;
constant KEY_6 (line 35) | const KEY_6 = 54;
constant KEY_7 (line 36) | const KEY_7 = 55;
constant KEY_8 (line 37) | const KEY_8 = 56;
constant KEY_9 (line 38) | const KEY_9 = 57;
constant KEY_A (line 39) | const KEY_A = 65;
constant KEY_B (line 40) | const KEY_B = 66;
constant KEY_C (line 41) | const KEY_C = 67;
constant KEY_D (line 42) | const KEY_D = 68;
constant KEY_E (line 43) | const KEY_E = 69;
constant KEY_F (line 44) | const KEY_F = 70;
constant KEY_G (line 45) | const KEY_G = 71;
constant KEY_H (line 46) | const KEY_H = 72;
constant KEY_I (line 47) | const KEY_I = 73;
constant KEY_J (line 48) | const KEY_J = 74;
constant KEY_K (line 49) | const KEY_K = 75;
constant KEY_L (line 50) | const KEY_L = 76;
constant KEY_M (line 51) | const KEY_M = 77;
constant KEY_N (line 52) | const KEY_N = 78;
constant KEY_O (line 53) | const KEY_O = 79;
constant KEY_P (line 54) | const KEY_P = 80;
constant KEY_Q (line 55) | const KEY_Q = 81;
constant KEY_R (line 56) | const KEY_R = 82;
constant KEY_S (line 57) | const KEY_S = 83;
constant KEY_T (line 58) | const KEY_T = 84;
constant KEY_U (line 59) | const KEY_U = 85;
constant KEY_V (line 60) | const KEY_V = 86;
constant KEY_W (line 61) | const KEY_W = 87;
constant KEY_X (line 62) | const KEY_X = 88;
constant KEY_Y (line 63) | const KEY_Y = 89;
constant KEY_Z (line 64) | const KEY_Z = 90;
constant KEY_F1 (line 65) | const KEY_F1 = 112;
constant KEY_F2 (line 66) | const KEY_F2 = 113;
constant KEY_F3 (line 67) | const KEY_F3 = 114;
constant KEY_F4 (line 68) | const KEY_F4 = 115;
constant KEY_F5 (line 69) | const KEY_F5 = 116;
constant KEY_F6 (line 70) | const KEY_F6 = 117;
constant KEY_F7 (line 71) | const KEY_F7 = 118;
constant KEY_F8 (line 72) | const KEY_F8 = 119;
constant KEY_F9 (line 73) | const KEY_F9 = 120;
constant KEY_F10 (line 74) | const KEY_F10 = 121;
constant KEY_F11 (line 75) | const KEY_F11 = 122;
constant KEY_F12 (line 76) | const KEY_F12 = 123;
constant KEY_SEMICOLON (line 77) | const KEY_SEMICOLON = 186;
constant KEY_EQUAL (line 78) | const KEY_EQUAL = 187;
constant KEY_COMMA (line 79) | const KEY_COMMA = 188;
constant KEY_MINUS (line 80) | const KEY_MINUS = 189;
constant KEY_PERIOD (line 81) | const KEY_PERIOD = 190;
constant KEY_SLASH (line 82) | const KEY_SLASH = 191;
constant KEY_LEFT_BRACKET (line 83) | const KEY_LEFT_BRACKET = 219;
constant KEY_BACKSLASH (line 84) | const KEY_BACKSLASH = 220;
constant KEY_RIGHT_BRACKET (line 85) | const KEY_RIGHT_BRACKET = 221;
constant KEY_QUOTE (line 86) | const KEY_QUOTE = 222;
FILE: tgui/packages/common/keys.ts
type KEY (line 23) | enum KEY {
function isEscape (line 63) | function isEscape(key: string): boolean {
function isAlphabetic (line 75) | function isAlphabetic(key: string): boolean {
function isNumeric (line 87) | function isNumeric(key: string): boolean {
function isCardinal (line 99) | function isCardinal(key: string): boolean {
function isArrow (line 111) | function isArrow(key: string): boolean {
function isWasd (line 125) | function isWasd(key: string): boolean {
function isMovement (line 137) | function isMovement(key: string): boolean {
FILE: tgui/packages/common/perf.ts
constant FPS (line 11) | const FPS = 60;
constant FRAME_DURATION (line 12) | const FRAME_DURATION = 1000 / FPS;
function mark (line 24) | function mark(name: string, timestamp?: number): void {
function measure (line 38) | function measure(markerNameA: string, markerNameB: string): string | und...
function formatDuration (line 57) | function formatDuration(duration: number): string {
FILE: tgui/packages/common/react.ts
type BooleanLike (line 58) | type BooleanLike = number | boolean | null | undefined;
FILE: tgui/packages/common/redux.ts
type Reducer (line 7) | type Reducer<State = any, ActionType extends Action = AnyAction> = (
type Store (line 12) | type Store<State = any, ActionType extends Action = AnyAction> = {
type MiddlewareAPI (line 18) | type MiddlewareAPI<State = any, ActionType extends Action = AnyAction> = {
type Middleware (line 23) | type Middleware = <State = any, ActionType extends Action = AnyAction>(
type Action (line 27) | type Action<TType = any> = {
type AnyAction (line 31) | type AnyAction = Action & {
type Dispatch (line 35) | type Dispatch<ActionType extends Action = AnyAction> = (
type StoreEnhancer (line 39) | type StoreEnhancer = (createStoreFunction: Function) => Function;
type PreparedAction (line 41) | type PreparedAction = {
FILE: tgui/packages/common/storage.js
constant IMPL_MEMORY (line 9) | const IMPL_MEMORY = 0;
constant IMPL_HUB_STORAGE (line 10) | const IMPL_HUB_STORAGE = 1;
constant IMPL_INDEXED_DB (line 11) | const IMPL_INDEXED_DB = 2;
constant IMPL_IFRAME_INDEXED_DB (line 12) | const IMPL_IFRAME_INDEXED_DB = 3;
constant INDEXED_DB_VERSION (line 14) | const INDEXED_DB_VERSION = 1;
constant INDEXED_DB_NAME (line 15) | const INDEXED_DB_NAME = 'cm-tgui';
constant INDEXED_DB_STORE_NAME (line 16) | const INDEXED_DB_STORE_NAME = 'storage-v1';
constant READ_ONLY (line 18) | const READ_ONLY = 'readonly';
constant READ_WRITE (line 19) | const READ_WRITE = 'readwrite';
class MemoryBackend (line 40) | class MemoryBackend {
method constructor (line 41) | constructor() {
method get (line 46) | async get(key) {
method set (line 50) | async set(key, value) {
method remove (line 54) | async remove(key) {
method clear (line 58) | async clear() {
class HubStorageBackend (line 63) | class HubStorageBackend {
method constructor (line 64) | constructor() {
method get (line 68) | async get(key) {
method set (line 75) | async set(key, value) {
method remove (line 79) | async remove(key) {
method clear (line 83) | async clear() {
class IFrameIndexedDbBackend (line 88) | class IFrameIndexedDbBackend {
method constructor (line 89) | constructor() {
method ready (line 93) | async ready() {
method get (line 108) | async get(key) {
method set (line 121) | async set(key, value) {
method remove (line 125) | async remove(key) {
method clear (line 129) | async clear() {
method ping (line 133) | async ping() {
method processChatMessages (line 148) | async processChatMessages(messages) {
method getChatMessages (line 155) | async getChatMessages() {
method destroy (line 168) | async destroy() {
class IndexedDbBackend (line 175) | class IndexedDbBackend {
method constructor (line 177) | constructor() {
method getStore (line 197) | async getStore(mode) {
method get (line 204) | async get(key) {
method set (line 213) | async set(key, value) {
method remove (line 219) | async remove(key) {
method clear (line 225) | async clear() {
class StorageProxy (line 236) | class StorageProxy {
method constructor (line 237) | constructor() {
method get (line 299) | async get(key) {
method set (line 304) | async set(key, value) {
method remove (line 309) | async remove(key) {
method clear (line 314) | async clear() {
FILE: tgui/packages/common/string.ts
function createSearch (line 24) | function createSearch<TObj>(
function capitalize (line 50) | function capitalize(str: string): string {
function capitalizeAll (line 63) | function capitalizeAll(str: string): string {
function capitalizeFirst (line 75) | function capitalizeFirst(str: string): string {
constant WORDS_UPPER (line 79) | const WORDS_UPPER = ['Id', 'Tv'] as const;
constant WORDS_LOWER (line 81) | const WORDS_LOWER = [
function toTitleCase (line 113) | function toTitleCase(str: string): string {
constant TRANSLATE_REGEX (line 133) | const TRANSLATE_REGEX = /&(nbsp|amp|quot|lt|gt|apos);/g;
constant TRANSLATIONS (line 134) | const TRANSLATIONS = {
function decodeHtmlEntities (line 152) | function decodeHtmlEntities(str: string): string {
FILE: tgui/packages/common/type-utils.ts
function getShallowTypes (line 9) | function getShallowTypes(
FILE: tgui/packages/common/types.ts
type ArgumentsOf (line 5) | type ArgumentsOf<F extends Function>
type ByondStorage (line 8) | type ByondStorage = {
type ByondWindow (line 18) | type ByondWindow = Window &
FILE: tgui/packages/common/uuid.ts
function createUuid (line 15) | function createUuid(): string {
FILE: tgui/packages/common/vector.ts
type Vector (line 18) | type Vector = number[];
FILE: tgui/packages/tgui-dev-server/dreamseeker.ts
type Entry (line 14) | type Entry = {
class DreamSeeker (line 23) | class DreamSeeker {
method constructor (line 28) | constructor(pid: number, addr: string) {
method topic (line 36) | topic(params: Record<string, any> = {}): Promise<AxiosResponse> {
method getInstancesByPids (line 49) | static async getInstancesByPids(pids: number[]): Promise<DreamSeeker[]> {
function plural (line 113) | function plural(word: string, n: number): string {
FILE: tgui/packages/tgui-dev-server/index.ts
function setupServer (line 14) | async function setupServer() {
FILE: tgui/packages/tgui-dev-server/link/client.ts
type Messenger (line 1) | type Messenger = (msg: any) => void;
function ensureConnection (line 7) | function ensureConnection() {
function primitiveReviver (line 37) | function primitiveReviver(value: unknown): any {
function sendLogEntry (line 51) | function sendLogEntry(
function sendMessage (line 70) | function sendMessage(msg: Record<string, any>): void {
function serializeObject (line 90) | function serializeObject(obj: Record<string, any>): string {
function setupHotReloading (line 129) | function setupHotReloading(): void {
function subscribe (line 170) | function subscribe(fn: Messenger): void {
FILE: tgui/packages/tgui-dev-server/link/retrace.ts
type SourceMap (line 9) | type SourceMap = {
function loadSourceMaps (line 18) | async function loadSourceMaps(bundleDir: string): Promise<void> {
function retrace (line 43) | function retrace(stack: string): string | undefined {
FILE: tgui/packages/tgui-dev-server/link/server.ts
type LinkSocketData (line 8) | interface LinkSocketData {
constant DEBUG (line 16) | const DEBUG = process.argv.includes('--debug');
function setupLink (line 18) | function setupLink() {
function broadcastMessage (line 38) | function broadcastMessage(msg: Record<string, any>): void {
function deserializeObject (line 45) | function deserializeObject(str: any): any {
function handleLinkMessage (line 70) | function handleLinkMessage(
function upgradeServer (line 107) | function upgradeServer(req: Request, srv: Bun.Server<LinkSocketData>) {
FILE: tgui/packages/tgui-dev-server/logging.ts
type Fn (line 7) | type Fn = (...args: any[]) => void;
function getTimestamp (line 19) | function getTimestamp(): string {
function createLogger (line 58) | function createLogger(ns: string): Record<string, Fn> {
function directLog (line 70) | function directLog(ns: string, ...args: any[]): void {
FILE: tgui/packages/tgui-dev-server/reloader.ts
constant HOME (line 20) | const HOME = os.homedir();
constant SEARCH_LOCATIONS (line 21) | const SEARCH_LOCATIONS = [
function findCacheRoot (line 36) | async function findCacheRoot(): Promise<string | undefined> {
function onCacheRootFound (line 72) | async function onCacheRootFound(cacheRoot: string): Promise<void> {
function reloadByondCache (line 78) | async function reloadByondCache(bundleDir: string): Promise<void> {
FILE: tgui/packages/tgui-dev-server/util.ts
function resolveGlob (line 14) | async function resolveGlob(
FILE: tgui/packages/tgui-dev-server/webpack.ts
class RspackCompiler (line 12) | class RspackCompiler {
method setup (line 17) | async setup() {
method watch (line 28) | async watch() {
FILE: tgui/packages/tgui-dev-server/winreg.ts
function regQuery (line 17) | async function regQuery(
FILE: tgui/packages/tgui-panel/audio/player.ts
type AudioOptions (line 11) | type AudioOptions = {
function isProtectedError (line 17) | function isProtectedError(error: ErrorEvent): boolean {
class AudioPlayer (line 26) | class AudioPlayer {
method constructor (line 34) | constructor() {
method destroy (line 41) | destroy() {
method play (line 45) | play(url: string, options: AudioOptions = {}) {
method stop (line 96) | stop() {
method setVolume (line 107) | setVolume(volume: number): void {
method onPlay (line 115) | onPlay(subscriber: () => void): void {
method onStop (line 119) | onStop(subscriber: () => void): void {
FILE: tgui/packages/tgui-panel/audio/types.ts
type AudioState (line 1) | type AudioState = {
FILE: tgui/packages/tgui-panel/chat/ChatPanel.tsx
type ChatPanelTypes (line 13) | type ChatPanelTypes = {
class ChatPanel (line 18) | class ChatPanel extends Component<ChatPanelTypes> {
method constructor (line 22) | constructor(props) {
method componentDidMount (line 34) | componentDidMount() {
method componentWillUnmount (line 43) | componentWillUnmount() {
method componentDidUpdate (line 50) | componentDidUpdate(prevProps?) {
method render (line 66) | render() {
FILE: tgui/packages/tgui-panel/chat/constants.ts
constant MAX_VISIBLE_MESSAGES (line 7) | const MAX_VISIBLE_MESSAGES = 2500;
constant MAX_PERSISTED_MESSAGES (line 8) | const MAX_PERSISTED_MESSAGES = 1000;
constant MESSAGE_SAVE_INTERVAL (line 9) | const MESSAGE_SAVE_INTERVAL = 10000;
constant MESSAGE_PRUNE_INTERVAL (line 10) | const MESSAGE_PRUNE_INTERVAL = 60000;
constant COMBINE_MAX_MESSAGES (line 11) | const COMBINE_MAX_MESSAGES = 5;
constant COMBINE_MAX_TIME_WINDOW (line 12) | const COMBINE_MAX_TIME_WINDOW = 5000;
constant IMAGE_RETRY_DELAY (line 13) | const IMAGE_RETRY_DELAY = 250;
constant IMAGE_RETRY_LIMIT (line 14) | const IMAGE_RETRY_LIMIT = 10;
constant IMAGE_RETRY_MESSAGE_AGE (line 15) | const IMAGE_RETRY_MESSAGE_AGE = 60000;
constant RENDERER_RELOAD_WAIT (line 16) | const RENDERER_RELOAD_WAIT = 1000;
constant RENDERER_RELOAD_WAIT_TRIDENT (line 19) | const RENDERER_RELOAD_WAIT_TRIDENT = 2500;
constant MESSAGE_TYPE_UNKNOWN (line 22) | const MESSAGE_TYPE_UNKNOWN = 'unknown';
constant MESSAGE_TYPE_INTERNAL (line 25) | const MESSAGE_TYPE_INTERNAL = 'internal';
constant MESSAGE_TYPE_SYSTEM (line 28) | const MESSAGE_TYPE_SYSTEM = 'system';
constant MESSAGE_TYPE_LOCALCHAT (line 29) | const MESSAGE_TYPE_LOCALCHAT = 'localchat';
constant MESSAGE_TYPE_RADIO (line 30) | const MESSAGE_TYPE_RADIO = 'radio';
constant MESSAGE_TYPE_HIVEMIND (line 31) | const MESSAGE_TYPE_HIVEMIND = 'hivemind';
constant MESSAGE_TYPE_INFO (line 32) | const MESSAGE_TYPE_INFO = 'info';
constant MESSAGE_TYPE_WARNING (line 33) | const MESSAGE_TYPE_WARNING = 'warning';
constant MESSAGE_TYPE_HELPFUL (line 34) | const MESSAGE_TYPE_HELPFUL = 'helpful';
constant MESSAGE_TYPE_DEADCHAT (line 35) | const MESSAGE_TYPE_DEADCHAT = 'deadchat';
constant MESSAGE_TYPE_OOC (line 36) | const MESSAGE_TYPE_OOC = 'ooc';
constant MESSAGE_TYPE_ADMINPM (line 37) | const MESSAGE_TYPE_ADMINPM = 'adminpm';
constant MESSAGE_TYPE_COMBAT (line 38) | const MESSAGE_TYPE_COMBAT = 'combat';
constant MESSAGE_TYPE_ADMINCHAT (line 39) | const MESSAGE_TYPE_ADMINCHAT = 'adminchat';
constant MESSAGE_TYPE_MODCHAT (line 40) | const MESSAGE_TYPE_MODCHAT = 'modchat';
constant MESSAGE_TYPE_MENTOR (line 41) | const MESSAGE_TYPE_MENTOR = 'mentor';
constant MESSAGE_TYPE_STAFF_IC (line 42) | const MESSAGE_TYPE_STAFF_IC = 'staff_ic';
constant MESSAGE_TYPE_EVENTCHAT (line 43) | const MESSAGE_TYPE_EVENTCHAT = 'eventchat';
constant MESSAGE_TYPE_ADMINLOG (line 44) | const MESSAGE_TYPE_ADMINLOG = 'adminlog';
constant MESSAGE_TYPE_ATTACKLOG (line 45) | const MESSAGE_TYPE_ATTACKLOG = 'attacklog';
constant MESSAGE_TYPE_DEBUG (line 46) | const MESSAGE_TYPE_DEBUG = 'debug';
constant MESSAGE_TYPE_NICHE (line 47) | const MESSAGE_TYPE_NICHE = 'niche';
constant MESSAGE_TYPES (line 50) | const MESSAGE_TYPES = [
FILE: tgui/packages/tgui-panel/chat/middleware.ts
constant FORBID_TAGS (line 41) | const FORBID_TAGS = ['a', 'iframe', 'link', 'video'];
FILE: tgui/packages/tgui-panel/chat/renderer.tsx
constant SCROLL_TRACKING_TOLERANCE (line 36) | const SCROLL_TRACKING_TOLERANCE = 24;
constant TGUI_CHAT_COMPONENTS (line 39) | const TGUI_CHAT_COMPONENTS = {
constant TGUI_CHAT_ATTRIBUTES_TO_PROPS (line 45) | const TGUI_CHAT_ATTRIBUTES_TO_PROPS = {
class ChatRenderer (line 126) | class ChatRenderer {
method constructor (line 149) | constructor() {
method isReady (line 193) | isReady() {
method mount (line 197) | mount(node) {
method onStateLoaded (line 211) | onStateLoaded() {
method tryFlushQueue (line 216) | tryFlushQueue() {
method assignStyle (line 227) | assignStyle(style = {}) {
method setHighlight (line 235) | setHighlight(highlightSettings, highlightSettingById, highlightKeyword...
method scrollToBottom (line 332) | scrollToBottom() {
method tryFindScrollable (line 340) | tryFindScrollable() {
method changePage (line 354) | changePage(page: Page) {
method getCombinableMessage (line 382) | getCombinableMessage(predicate: message) {
method processBatch (line 404) | processBatch(
method pruneMessages (line 576) | pruneMessages() {
method rebuildChat (line 621) | rebuildChat() {
method clearChat (line 654) | clearChat() {
method saveToDisk (line 672) | saveToDisk() {
type ChatWindow (line 721) | type ChatWindow = Window &
FILE: tgui/packages/tgui-panel/chat/replaceInTextNode.ts
constant URL_REGEX (line 187) | const URL_REGEX =
FILE: tgui/packages/tgui-panel/chat/types.ts
type message (line 1) | type message = {
type Page (line 12) | type Page = {
FILE: tgui/packages/tgui-panel/game/constants.ts
constant CONNECTION_LOST_AFTER (line 7) | const CONNECTION_LOST_AFTER = 45000;
FILE: tgui/packages/tgui-panel/index.tsx
function setupApp (line 52) | function setupApp() {
FILE: tgui/packages/tgui-panel/panelFocus.ts
constant MIN_SELECTION_DISTANCE (line 16) | const MIN_SELECTION_DISTANCE = 10;
FILE: tgui/packages/tgui-panel/ping/constants.ts
constant PING_TIMEOUT (line 7) | const PING_TIMEOUT = 2000;
constant PING_MAX_FAILS (line 8) | const PING_MAX_FAILS = 3;
constant PING_QUEUE_SIZE (line 9) | const PING_QUEUE_SIZE = 8;
constant PING_ROUNDTRIP_BEST (line 10) | const PING_ROUNDTRIP_BEST = 50;
constant PING_ROUNDTRIP_WORST (line 11) | const PING_ROUNDTRIP_WORST = 200;
FILE: tgui/packages/tgui-panel/ping/reducer.ts
type PingState (line 16) | type PingState = {
FILE: tgui/packages/tgui-panel/settings/SettingTabs/SettingsGeneral.tsx
function SettingsGeneral (line 23) | function SettingsGeneral(props) {
FILE: tgui/packages/tgui-panel/settings/SettingTabs/SettingsStatPanel.tsx
function SettingsStatPanel (line 19) | function SettingsStatPanel(props) {
FILE: tgui/packages/tgui-panel/settings/SettingTabs/TextHighlight.tsx
function TextHighlightSettings (line 30) | function TextHighlightSettings(props) {
function TextHighlightSetting (line 74) | function TextHighlightSetting(props) {
FILE: tgui/packages/tgui-panel/settings/constants.ts
constant SETTINGS_TABS (line 7) | const SETTINGS_TABS = [
constant FONTS_DISABLED (line 27) | const FONTS_DISABLED = 'Default';
constant FONTS (line 29) | const FONTS = [
constant MAX_HIGHLIGHT_SETTINGS (line 43) | const MAX_HIGHLIGHT_SETTINGS = 10;
FILE: tgui/packages/tgui-panel/settings/middleware.ts
function updateGlobalOverrideRule (line 30) | function updateGlobalOverrideRule() {
function setGlobalFontSize (line 52) | function setGlobalFontSize(
function setGlobalFontFamily (line 71) | function setGlobalFontFamily(fontFamily: string) {
function setStatTabsStyle (line 75) | function setStatTabsStyle(style: string) {
function settingsMiddleware (line 83) | function settingsMiddleware(store) {
FILE: tgui/packages/tgui-panel/settings/reducer.ts
function settingsReducer (line 50) | function settingsReducer(
FILE: tgui/packages/tgui-panel/settings/settingsImExport.ts
function exportChatSettings (line 6) | function exportChatSettings(
function importChatSettings (line 42) | function importChatSettings(settings: string | string[]) {
FILE: tgui/packages/tgui-panel/telemetry.ts
constant MAX_CONNECTIONS_STORED (line 12) | const MAX_CONNECTIONS_STORED = 10;
type Client (line 14) | type Client = {
type Telemetry (line 19) | type Telemetry = { limits: { connections: number }[]; connections: Clien...
FILE: tgui/packages/tgui-panel/themes.ts
constant THEMES (line 7) | const THEMES = ['dark', 'light'];
constant COLOR_DARK_BG (line 9) | const COLOR_DARK_BG = '#202020';
constant COLOR_DARK_BG_DARKER (line 10) | const COLOR_DARK_BG_DARKER = '#171717';
constant COLOR_DARK_TEXT (line 11) | const COLOR_DARK_TEXT = '#a4bad6';
FILE: tgui/packages/tgui-say/ChannelIterator.ts
type Channel (line 1) | type Channel =
class ChannelIterator (line 16) | class ChannelIterator {
method next (line 30) | public next(whitelist?: Channel[]): Channel {
method set (line 52) | public set(channel: Channel): void {
method current (line 56) | public current(): Channel {
method isSay (line 60) | public isSay(): boolean {
method isVisible (line 64) | public isVisible(): boolean {
method reset (line 68) | public reset(): void {
FILE: tgui/packages/tgui-say/ChatHistory.ts
class ChatHistory (line 7) | class ChatHistory {
method add (line 12) | public add(message: string): void {
method getIndex (line 20) | public getIndex(): number {
method getOlderMessage (line 24) | public getOlderMessage(): string | null {
method getNewerMessage (line 32) | public getNewerMessage(): string | null {
method isAtLatest (line 41) | public isAtLatest(): boolean {
method saveTemp (line 45) | public saveTemp(message: string): void {
method getTemp (line 49) | public getTemp(): string | null {
method reset (line 55) | public reset(): void {
FILE: tgui/packages/tgui-say/TguiSay.tsx
type ByondOpen (line 19) | type ByondOpen = {
type ByondProps (line 25) | type ByondProps = {
function TguiSay (line 33) | function TguiSay() {
FILE: tgui/packages/tgui-say/constants.ts
type WindowSize (line 2) | enum WindowSize {
type LineLength (line 10) | enum LineLength {
constant RADIO_PREFIXES (line 22) | const RADIO_PREFIXES = {
constant LANGUAGE_PREFIXES (line 361) | const LANGUAGE_PREFIXES = {
FILE: tgui/packages/tgui-say/helpers.ts
function windowOpen (line 8) | function windowOpen(channel: Channel, scale: boolean): void {
function windowClose (line 17) | function windowClose(scale: boolean): void {
function windowSet (line 28) | function windowSet(size = WindowSize.Small, scale: boolean): void {
function setWindowVisibility (line 40) | function setWindowVisibility(visible: boolean, scale: boolean): void {
constant CHANNEL_REGEX (line 52) | const CHANNEL_REGEX = /^[!:.#]\w\s/;
function getPrefix (line 55) | function getPrefix(
FILE: tgui/packages/tgui-say/timers.ts
constant SECONDS (line 5) | const SECONDS = 1000;
FILE: tgui/packages/tgui/App.tsx
function App (line 4) | function App() {
FILE: tgui/packages/tgui/Icons.tsx
function setIconRefMap (line 7) | function setIconRefMap(map: Record<string, string>): void {
function loadIconMap (line 11) | function loadIconMap(): void {
function IconMapLoader (line 18) | function IconMapLoader(): null {
function IconProvider (line 28) | function IconProvider() {
FILE: tgui/packages/tgui/assets.ts
constant EXCLUDED_PATTERNS (line 11) | const EXCLUDED_PATTERNS = [/v4shim/i];
FILE: tgui/packages/tgui/backend.ts
type BackendState (line 259) | type BackendState<TData> = {
type StateWithSetter (line 311) | type StateWithSetter<T> = [T, (nextState: T) => void];
FILE: tgui/packages/tgui/components/AnimatedNumber.tsx
type AnimatedNumberProps (line 17) | type AnimatedNumberProps = {
constant SIXTY_HZ (line 40) | const SIXTY_HZ = 1_000.0 / 60.0;
constant EPSILON (line 51) | const EPSILON = 10e-4;
class AnimatedNumber (line 57) | class AnimatedNumber extends Component<AnimatedNumberProps> {
method constructor (line 73) | constructor(props: AnimatedNumberProps) {
method componentDidMount (line 85) | componentDidMount() {
method componentWillUnmount (line 91) | componentWillUnmount() {
method shouldComponentUpdate (line 96) | shouldComponentUpdate(newProps: AnimatedNumberProps) {
method startTicking (line 110) | startTicking() {
method stopTicking (line 122) | stopTicking() {
method tick (line 136) | tick() {
method getText (line 165) | getText() {
method render (line 183) | render() {
FILE: tgui/packages/tgui/components/Autofocus.tsx
function Autofocus (line 4) | function Autofocus(props: PropsWithChildren) {
FILE: tgui/packages/tgui/components/Blink.tsx
type Props (line 3) | type Props = Partial<{
type State (line 16) | type State = {
constant DEFAULT_BLINKING_INTERVAL (line 20) | const DEFAULT_BLINKING_INTERVAL = 1000;
constant DEFAULT_BLINKING_TIME (line 21) | const DEFAULT_BLINKING_TIME = 1000;
class Blink (line 23) | class Blink extends Component<Props, State> {
method constructor (line 27) | constructor(props) {
method createTimer (line 34) | createTimer() {
method componentDidMount (line 60) | componentDidMount() {
method componentDidUpdate (line 64) | componentDidUpdate(prevProps) {
method componentWillUnmount (line 73) | componentWillUnmount() {
method render (line 78) | render() {
FILE: tgui/packages/tgui/components/BlockQuote.tsx
function BlockQuote (line 11) | function BlockQuote(props: BoxProps) {
FILE: tgui/packages/tgui/components/BodyZoneSelector.tsx
type BodyZone (line 6) | enum BodyZone {
type BodyZoneSelectorProps (line 57) | type BodyZoneSelectorProps = {
type BodyZoneSelectorState (line 63) | type BodyZoneSelectorState = {
class BodyZoneSelector (line 67) | class BodyZoneSelector extends Component<
method render (line 76) | render() {
FILE: tgui/packages/tgui/components/Box.tsx
type BooleanProps (line 19) | type BooleanProps = Partial<Record<keyof typeof booleanStyleMap, boolean>>;
type StringProps (line 20) | type StringProps = Partial<
type EventHandlers (line 24) | type EventHandlers = Partial<{
type BoxProps (line 37) | type BoxProps = Partial<{
type DangerDoNotUse (line 49) | type DangerDoNotUse = {
FILE: tgui/packages/tgui/components/Button.tsx
type EllipsisUnion (line 35) | type EllipsisUnion =
type Props (line 49) | type Props = Partial<{
type CheckProps (line 193) | type CheckProps = Partial<{
type ConfirmProps (line 214) | type ConfirmProps = Partial<{
function handleBlur (line 239) | function handleBlur(event: FocusEvent) {
type InputProps (line 275) | type InputProps = Partial<{
type FileProps (line 395) | type FileProps = {
function ButtonFile (line 402) | function ButtonFile(props: FileProps) {
FILE: tgui/packages/tgui/components/ByondUi.tsx
type BoundingBox (line 6) | type BoundingBox = {
function joinComma (line 11) | function joinComma(num1: number, num2: number): string {
function byondFmtPos (line 15) | function byondFmtPos(pos: number[]): string {
function byondFmtSize (line 19) | function byondFmtSize(size: number[]): string {
type ByondUiElement (line 25) | type ByondUiElement = {
function getBoundingBox (line 36) | function getBoundingBox(element: HTMLDivElement): BoundingBox {
type SampleWinsetParams (line 49) | type SampleWinsetParams = Partial<{
function callWinset (line 63) | function callWinset(
function createByondUiElement (line 84) | function createByondUiElement(elementId: string | undefined): ByondUiEle...
type ByondUiProps (line 108) | type ByondUiProps = Partial<{
function ByondUi (line 151) | function ByondUi(props: ByondUiProps) {
FILE: tgui/packages/tgui/components/Chart.tsx
type Props (line 12) | type Props = {
type State (line 23) | type State = {
type Point (line 27) | type Point = number[];
type Range (line 28) | type Range = [number, number];
class LineChart (line 72) | class LineChart extends Component<Props> {
method constructor (line 76) | constructor(props: Props) {
method componentDidMount (line 86) | componentDidMount() {
method componentWillUnmount (line 91) | componentWillUnmount() {
method render (line 105) | render() {
FILE: tgui/packages/tgui/components/Collapsible.tsx
type Props (line 12) | type Props = Partial<{
function Collapsible (line 20) | function Collapsible(props: Props) {
FILE: tgui/packages/tgui/components/ColorBox.tsx
type Props (line 12) | type Props = {
function ColorBox (line 16) | function ColorBox(props: Props) {
FILE: tgui/packages/tgui/components/Dialog.tsx
type DialogProps (line 9) | type DialogProps = {
type DialogButtonProps (line 44) | type DialogButtonProps = {
type UnsavedChangesDialogProps (line 64) | type UnsavedChangesDialogProps = {
FILE: tgui/packages/tgui/components/Dimmer.tsx
function Dimmer (line 11) | function Dimmer(props: BoxProps) {
FILE: tgui/packages/tgui/components/Divider.tsx
type Props (line 9) | type Props = Partial<{
function Divider (line 14) | function Divider(props: Props) {
FILE: tgui/packages/tgui/components/DmIcon.tsx
type Direction (line 8) | enum Direction {
type Props (line 19) | type Props = {
function DmIcon (line 44) | function DmIcon(props: Props) {
FILE: tgui/packages/tgui/components/DraggableControl.tsx
constant DEFAULT_UPDATE_RATE (line 13) | const DEFAULT_UPDATE_RATE = 400;
type ControlProps (line 22) | type ControlProps = {
type State (line 44) | type State = {
class DraggableControl (line 53) | class DraggableControl extends Component<ControlProps> {
method constructor (line 64) | constructor(props) {
method render (line 194) | render() {
FILE: tgui/packages/tgui/components/Dropdown.tsx
type DropdownEntry (line 9) | type DropdownEntry = {
type DropdownOption (line 14) | type DropdownOption = string | DropdownEntry;
type Props (line 16) | type Props = {
type DIRECTION (line 58) | enum DIRECTION {
constant NONE (line 64) | const NONE = -1;
function getOptionValue (line 66) | function getOptionValue(option: DropdownOption) {
function Dropdown (line 70) | function Dropdown(props: Props) {
FILE: tgui/packages/tgui/components/FitText.tsx
constant DEFAULT_ACCEPTABLE_DIFFERENCE (line 9) | const DEFAULT_ACCEPTABLE_DIFFERENCE = 5;
type Props (line 11) | type Props = {
type State (line 18) | type State = {
class FitText (line 22) | class FitText extends Component<Props, State> {
method constructor (line 28) | constructor(props: Props) {
method componentDidUpdate (line 36) | componentDidUpdate(prevProps) {
method componentWillUnmount (line 42) | componentWillUnmount() {
method resize (line 46) | resize() {
method componentDidMount (line 80) | componentDidMount() {
method render (line 84) | render() {
FILE: tgui/packages/tgui/components/Flex.tsx
type FlexProps (line 16) | type FlexProps = Partial<{
type FlexItemProps (line 60) | type FlexItemProps = BoxProps &
FILE: tgui/packages/tgui/components/Icon.tsx
constant FA_OUTLINE_REGEX (line 14) | const FA_OUTLINE_REGEX = /-o$/;
type IconPropsUnique (line 16) | type IconPropsUnique = { readonly name: string } & Partial<{
type IconProps (line 24) | type IconProps = IconPropsUnique & BoxProps;
type IconStackUnique (line 72) | type IconStackUnique = {
type IconStackProps (line 77) | type IconStackProps = IconStackUnique & BoxProps;
FILE: tgui/packages/tgui/components/Image.tsx
type Props (line 5) | type Props = Partial<{
function Image (line 39) | function Image(props: Props) {
FILE: tgui/packages/tgui/components/InfinitePlane.tsx
constant ZOOM_MIN_VAL (line 7) | const ZOOM_MIN_VAL = 0.5;
constant ZOOM_MAX_VAL (line 8) | const ZOOM_MAX_VAL = 1.5;
constant ZOOM_INCREMENT (line 10) | const ZOOM_INCREMENT = 0.1;
type InfinitePlaneProps (line 12) | type InfinitePlaneProps = PropsWithChildren<
type InfinitePlaneState (line 23) | type InfinitePlaneState = {
type MouseEventExtension (line 35) | type MouseEventExtension = {
class InfinitePlane (line 40) | class InfinitePlane extends Component<
method constructor (line 44) | constructor(props: InfinitePlaneProps) {
method componentDidMount (line 60) | componentDidMount() {
method componentWillUnmount (line 68) | componentWillUnmount() {
method render (line 148) | render() {
FILE: tgui/packages/tgui/components/Input.tsx
type ConditionalProps (line 19) | type ConditionalProps =
type OptionalProps (line 42) | type OptionalProps = Partial<{
type Props (line 72) | type Props = OptionalProps & ConditionalProps & BoxProps;
function toInputValue (line 74) | function toInputValue(value: string | number | undefined) {
function Input (line 88) | function Input(props: Props) {
FILE: tgui/packages/tgui/components/Interactive.tsx
type Interaction (line 18) | interface Interaction {
type InteractiveProps (line 51) | interface InteractiveProps {
class Interactive (line 58) | class Interactive extends Component {
method constructor (line 62) | constructor(props: InteractiveProps) {
method toggleDocumentEvents (line 117) | toggleDocumentEvents(state?: boolean) {
method componentDidMount (line 129) | componentDidMount() {
method componentWillUnmount (line 133) | componentWillUnmount() {
method render (line 137) | render() {
FILE: tgui/packages/tgui/components/KeyListener.tsx
type KeyListenerProps (line 6) | type KeyListenerProps = Partial<{
class KeyListener (line 12) | class KeyListener extends Component<KeyListenerProps> {
method constructor (line 15) | constructor(props) {
method componentWillUnmount (line 33) | componentWillUnmount() {
method render (line 37) | render() {
FILE: tgui/packages/tgui/components/Knob.tsx
type Props (line 13) | type Props = {
function Knob (line 59) | function Knob(props: Props) {
FILE: tgui/packages/tgui/components/LabeledControls.tsx
function LabeledControls (line 9) | function LabeledControls(props: FlexProps) {
type ItemProps (line 25) | type ItemProps = {
function LabeledControlsItem (line 29) | function LabeledControlsItem(props: ItemProps) {
FILE: tgui/packages/tgui/components/LabeledList.tsx
type LabeledListItemProps (line 19) | type LabeledListItemProps = Partial<{
type LabeledListDividerProps (line 108) | type LabeledListDividerProps = {
FILE: tgui/packages/tgui/components/MenuBar.tsx
type MenuProps (line 14) | type MenuProps = {
class Menu (line 21) | class Menu extends Component<MenuProps> {
method constructor (line 24) | constructor(props) {
method componentWillMount (line 42) | componentWillMount() {
method componentWillUnmount (line 46) | componentWillUnmount() {
method render (line 50) | render() {
type MenuBarDropdownProps (line 65) | type MenuBarDropdownProps = {
class MenuBarButton (line 77) | class MenuBarButton extends Component<MenuBarDropdownProps> {
method constructor (line 80) | constructor(props) {
method render (line 85) | render() {
type MenuBarItemProps (line 129) | type MenuBarItemProps = {
type MenuBarProps (line 229) | type MenuBarProps = {
FILE: tgui/packages/tgui/components/Modal.tsx
function Modal (line 12) | function Modal(props: BoxProps) {
FILE: tgui/packages/tgui/components/NoticeBox.tsx
type Props (line 11) | type Props = ExclusiveProps & BoxProps;
type NoticeType (line 14) | type NoticeType = 'info' | 'success' | 'warning' | 'danger';
type None (line 16) | type None = {
type ExclusiveProps (line 20) | type ExclusiveProps =
function NoticeBox (line 35) | function NoticeBox(props: Props) {
FILE: tgui/packages/tgui/components/NumberInput.tsx
type Props (line 17) | type Props = Required<{
type State (line 58) | type State = {
class NumberInput (line 71) | class NumberInput extends Component<Props, State> {
method componentDidMount (line 90) | componentDidMount(): void {
method render (line 272) | render() {
FILE: tgui/packages/tgui/components/Pointer.tsx
type PointerProps (line 18) | interface PointerProps {
FILE: tgui/packages/tgui/components/Popper.tsx
type RequiredProps (line 11) | type RequiredProps = {
type OptionalProps (line 18) | type OptionalProps = Partial<{
type Props (line 29) | type Props = RequiredProps & OptionalProps;
function Popper (line 36) | function Popper(props: PropsWithChildren<Props>) {
FILE: tgui/packages/tgui/components/ProgressBar.tsx
type Props (line 14) | type Props = {
FILE: tgui/packages/tgui/components/RestrictedInput.tsx
constant DEFAULT_MIN (line 8) | const DEFAULT_MIN = 0;
constant DEFAULT_MAX (line 9) | const DEFAULT_MAX = 10000;
function softSanitizeNumber (line 20) | function softSanitizeNumber(value, minValue, maxValue, allowFloats) {
function maybeMoveMinusSign (line 76) | function maybeMoveMinusSign(string) {
function maybeLeadWithMin (line 95) | function maybeLeadWithMin(string, min) {
function keepOnlyFirstOccurrence (line 112) | function keepOnlyFirstOccurrence(needle, haystack) {
function getClampedNumber (line 129) | function getClampedNumber(value, minValue, maxValue, allowFloats) {
class RestrictedInput (line 144) | class RestrictedInput extends Component {
method constructor (line 167) | constructor(props) {
method componentDidMount (line 249) | componentDidMount() {
method componentDidUpdate (line 274) | componentDidUpdate(prevProps, _) {
method setEditing (line 292) | setEditing(editing) {
method render (line 296) | render() {
FILE: tgui/packages/tgui/components/RoundGauge.tsx
type Props (line 18) | type Props = {
function RoundGauge (line 69) | function RoundGauge(props: Props) {
FILE: tgui/packages/tgui/components/Section.tsx
type Props (line 13) | type Props = Partial<{
FILE: tgui/packages/tgui/components/Slider.tsx
type Props (line 14) | type Props = {
function Slider (line 58) | function Slider(props: Props) {
FILE: tgui/packages/tgui/components/Stack.tsx
type Props (line 19) | type Props = Partial<{
function Stack (line 31) | function Stack(props: Props) {
type StackItemProps (line 56) | type StackItemProps = FlexItemProps &
function StackItem (line 61) | function StackItem(props: StackItemProps) {
type StackDividerProps (line 79) | type StackDividerProps = FlexItemProps &
function StackDivider (line 84) | function StackDivider(props: StackDividerProps) {
FILE: tgui/packages/tgui/components/StyleableSection.tsx
type Props (line 5) | type Props = Partial<{
FILE: tgui/packages/tgui/components/Table.tsx
type Props (line 11) | type Props = Partial<{
function Table (line 17) | function Table(props: Props) {
type RowProps (line 35) | type RowProps = Partial<{
function TableRow (line 41) | function TableRow(props: RowProps) {
type CellProps (line 59) | type CellProps = Partial<{
function TableCell (line 72) | function TableCell(props: CellProps) {
FILE: tgui/packages/tgui/components/Tabs.tsx
type Props (line 13) | type Props = Partial<{
type TabProps (line 22) | type TabProps = Partial<{
FILE: tgui/packages/tgui/components/TextArea.tsx
type Props (line 23) | type Props = Partial<{
FILE: tgui/packages/tgui/components/TimeDisplay.tsx
class TimeDisplay (line 12) | class TimeDisplay extends Component {
method constructor (line 17) | constructor(props) {
method componentDidUpdate (line 31) | componentDidUpdate() {
method tick (line 40) | tick() {
method componentDidMount (line 51) | componentDidMount() {
method componentWillUnmount (line 57) | componentWillUnmount() {
method render (line 63) | render() {
FILE: tgui/packages/tgui/components/Tooltip.tsx
type TooltipProps (line 11) | type TooltipProps = {
type TooltipState (line 17) | type TooltipState = {
constant DEFAULT_OPTIONS (line 21) | const DEFAULT_OPTIONS = {
constant NULL_RECT (line 30) | const NULL_RECT: DOMRect = {
class Tooltip (line 42) | class Tooltip extends Component<TooltipProps, TooltipState> {
method getDOMNode (line 58) | getDOMNode() {
method componentDidMount (line 72) | componentDidMount() {
method fadeOut (line 100) | fadeOut() {
method renderPopperContent (line 109) | renderPopperContent() {
method componentDidUpdate (line 139) | componentDidUpdate() {
method componentWillUnmount (line 147) | componentWillUnmount() {
method render (line 151) | render() {
FILE: tgui/packages/tgui/components/TrackOutsideClicks.tsx
type Props (line 3) | type Props = {
class TrackOutsideClicks (line 7) | class TrackOutsideClicks extends Component<Props> {
method constructor (line 10) | constructor(props) {
method componentWillUnmount (line 18) | componentWillUnmount() {
method handleOutsideClick (line 22) | handleOutsideClick(event: MouseEvent) {
method render (line 32) | render() {
FILE: tgui/packages/tgui/constants.ts
type Gas (line 7) | type Gas = {
constant UI_INTERACTIVE (line 16) | const UI_INTERACTIVE = 2;
constant UI_UPDATE (line 17) | const UI_UPDATE = 1;
constant UI_DISABLED (line 18) | const UI_DISABLED = 0;
constant UI_CLOSE (line 19) | const UI_CLOSE = -1;
constant COLORS (line 22) | const COLORS = {
constant CSS_COLORS (line 66) | const CSS_COLORS = [
constant RADIO_CHANNELS (line 89) | const RADIO_CHANNELS = [
constant GASES (line 357) | const GASES = [
FILE: tgui/packages/tgui/debug/KitchenSink.tsx
function getStories (line 22) | function getStories() {
function KitchenSink (line 26) | function KitchenSink(props) {
FILE: tgui/packages/tgui/debug/hooks.ts
function useDebug (line 10) | function useDebug() {
FILE: tgui/packages/tgui/debug/middleware.ts
function debugMiddleware (line 19) | function debugMiddleware(store) {
function relayMiddleware (line 44) | function relayMiddleware(store) {
FILE: tgui/packages/tgui/debug/reducer.ts
type DebugState (line 7) | type DebugState = {
function debugReducer (line 12) | function debugReducer(state = {} as DebugState, action) {
FILE: tgui/packages/tgui/debug/selectors.ts
function selectDebug (line 7) | function selectDebug(state: Record<string, any>) {
FILE: tgui/packages/tgui/debug/types.ts
type ActionData (line 1) | type ActionData = { type: string; payload: any; relayed: boolean };
FILE: tgui/packages/tgui/events.ts
class KeyEvent (line 170) | class KeyEvent {
method constructor (line 180) | constructor(e: KeyboardEvent, type: 'keydown' | 'keyup', repeat?: bool...
method hasModifierKeys (line 190) | hasModifierKeys() {
method isModifierKey (line 194) | isModifierKey() {
method isDown (line 200) | isDown() {
method isUp (line 204) | isUp() {
method toString (line 208) | toString() {
FILE: tgui/packages/tgui/format.ts
constant SI_SYMBOLS (line 7) | const SI_SYMBOLS = [
constant SI_BASE_INDEX (line 33) | const SI_BASE_INDEX = SI_SYMBOLS.indexOf(' ');
constant SI_BASE_TEN_UNITS (line 109) | const SI_BASE_TEN_UNITS = [
FILE: tgui/packages/tgui/hotkeys.ts
type ByondSkinMacro (line 154) | type ByondSkinMacro = {
FILE: tgui/packages/tgui/index.tsx
function setupApp (line 59) | function setupApp() {
FILE: tgui/packages/tgui/interfaces/AcidVest.tsx
type ListEntry (line 13) | type ListEntry = { flag: BooleanLike; value: number };
type Data (line 15) | type Data = {
FILE: tgui/packages/tgui/interfaces/Adminhelp.tsx
type AdminhelpData (line 14) | type AdminhelpData = {
FILE: tgui/packages/tgui/interfaces/AlertModal.tsx
type Data (line 10) | type Data = {
type DIRECTION (line 20) | enum DIRECTION {
function AlertModal (line 25) | function AlertModal(props) {
type ButtonDisplayProps (line 108) | type ButtonDisplayProps = {
function HorizontalButtons (line 115) | function HorizontalButtons(props: ButtonDisplayProps) {
function VerticalButtons (line 146) | function VerticalButtons(props: ButtonDisplayProps) {
FILE: tgui/packages/tgui/interfaces/AlmayerControl.tsx
type Data (line 13) | type Data = {
FILE: tgui/packages/tgui/interfaces/AltitudeControlConsole.tsx
type Data (line 6) | type Data = { temp: number; alt: number };
FILE: tgui/packages/tgui/interfaces/AntiAirConsole.tsx
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/Apc.tsx
type PowerChannel (line 15) | type PowerChannel = {
type Data (line 26) | type Data = {
FILE: tgui/packages/tgui/interfaces/AresAdmin.tsx
type Data (line 8) | type Data = DataCoreData & {
constant PAGES (line 21) | const PAGES = {
FILE: tgui/packages/tgui/interfaces/AresInterface.tsx
type Data (line 12) | type Data = DataCoreData & {
constant PAGES (line 25) | const PAGES = {
FILE: tgui/packages/tgui/interfaces/Autodispenser.tsx
type Data (line 15) | type Data = {
FILE: tgui/packages/tgui/interfaces/Autodoc.tsx
type HumanData (line 32) | type HumanData = {
type OccupantData (line 40) | type OccupantData = {
type Data (line 54) | type Data = {
FILE: tgui/packages/tgui/interfaces/Autolathe.tsx
type PrintData (line 21) | type PrintData = {
type Data (line 32) | type Data = {
FILE: tgui/packages/tgui/interfaces/AutosortingCabinet.tsx
type SortingProps (line 14) | interface SortingProps {
type PaperData (line 18) | interface PaperData {
type PropertyCode (line 27) | interface PropertyCode {
FILE: tgui/packages/tgui/interfaces/Binoculars.tsx
type Data (line 5) | type Data = { xcoord: number; ycoord: number; zcoord: number };
FILE: tgui/packages/tgui/interfaces/BioSyntheticPrinter.tsx
type Recipe (line 14) | type Recipe = { recipe_id: string; name: string; time: number; metal: nu...
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/BodyPicker.tsx
type PickerData (line 14) | type PickerData = {
FILE: tgui/packages/tgui/interfaces/Book.tsx
type BookData (line 9) | type BookData = {
FILE: tgui/packages/tgui/interfaces/BotanyEditor.tsx
type Data (line 12) | type Data = {
FILE: tgui/packages/tgui/interfaces/BotanyExtractor.tsx
type Data (line 13) | type Data = {
FILE: tgui/packages/tgui/interfaces/BrigCell.tsx
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/BugReportForm.tsx
type FormTypes (line 7) | interface FormTypes {
type FormDetails (line 13) | type FormDetails = {
FILE: tgui/packages/tgui/interfaces/CameraConsole.tsx
type Data (line 15) | type Data = {
type Camera (line 23) | type Camera = {
FILE: tgui/packages/tgui/interfaces/CanvasLayer.tsx
type PaintCanvasProps (line 5) | type PaintCanvasProps = {
type Line (line 16) | type Line = [
class CanvasLayer (line 24) | class CanvasLayer extends Component<PaintCanvasProps> {
method constructor (line 36) | constructor(props) {
method componentDidMount (line 65) | componentDidMount() {
method componentDidUpdate (line 258) | componentDidUpdate(prevProps) {
method drawCanvas (line 264) | drawCanvas() {
method convertToSVG (line 279) | convertToSVG() {
method getComplexity (line 293) | getComplexity() {
method displayCanvas (line 301) | displayCanvas() {
method displayLoading (line 336) | displayLoading() {
method render (line 348) | render() {
FILE: tgui/packages/tgui/interfaces/CardMod.tsx
type Data (line 17) | type Data = {
FILE: tgui/packages/tgui/interfaces/CasSim.tsx
type CasSimData (line 12) | interface CasSimData {
FILE: tgui/packages/tgui/interfaces/CentralOverwatchConsole.tsx
type MarineData (line 21) | type MarineData = {
type SquadData (line 34) | type SquadData = {
type Data (line 42) | type Data = {
type Props (line 84) | type Props = Partial<{
FILE: tgui/packages/tgui/interfaces/Centrifuge.tsx
type Data (line 5) | type Data = {
FILE: tgui/packages/tgui/interfaces/Changelog.tsx
type Data (line 52) | type Data = { dates: string[] };
class Changelog (line 54) | class Changelog extends Component<
method constructor (line 65) | constructor(props) {
method setData (line 75) | setData(data) {
method setSelectedDate (line 79) | setSelectedDate(selectedDate) {
method setSelectedIndex (line 83) | setSelectedIndex(selectedIndex) {
method componentDidMount (line 117) | componentDidMount() {
method render (line 131) | render() {
FILE: tgui/packages/tgui/interfaces/CheckboxInput.tsx
type Data (line 20) | type Data = {
FILE: tgui/packages/tgui/interfaces/ChemDispenser.tsx
type Data (line 17) | type Data = {
FILE: tgui/packages/tgui/interfaces/ChemMaster.tsx
type PillBottleType (line 24) | type PillBottleType = {
type ChemMasterData (line 32) | type ChemMasterData = {
type Reagent (line 70) | type Reagent = {
FILE: tgui/packages/tgui/interfaces/ChemSimulator.tsx
type ChemData (line 15) | type ChemData = {
type Data (line 25) | type Data = {
FILE: tgui/packages/tgui/interfaces/ChooseDesign.tsx
type Data (line 7) | type Data = {
FILE: tgui/packages/tgui/interfaces/ChooseFruit.tsx
type Data (line 7) | type Data = {
FILE: tgui/packages/tgui/interfaces/ChooseResin.tsx
constant INFINITE_BUILD_AMOUNT (line 7) | const INFINITE_BUILD_AMOUNT = -1;
type Data (line 9) | type Data = {
FILE: tgui/packages/tgui/interfaces/ColorMatrixEditor.tsx
type Data (line 13) | type Data = {
constant PREFIXES (line 18) | const PREFIXES = ['r', 'g', 'b', 'a', 'c'] as const;
FILE: tgui/packages/tgui/interfaces/ColorPickerModal.tsx
type ColorPickerData (line 45) | type ColorPickerData = {
type HexColorInputProps (line 348) | interface HexColorInputProps extends Omit<
type ColorInputBaseProps (line 384) | interface ColorInputBaseProps {
class ColorInput (line 396) | class ColorInput extends Component {
method constructor (line 400) | constructor(props: ColorInputBaseProps) {
method componentDidUpdate (line 437) | componentDidUpdate(prevProps, prevState): void {
method render (line 444) | render() {
FILE: tgui/packages/tgui/interfaces/CommandTablet.tsx
type Data (line 5) | type Data = {
FILE: tgui/packages/tgui/interfaces/ComsEncryption.tsx
type Data (line 16) | type Data = {
type DecoderData (line 23) | type DecoderData = {
type EncoderData (line 27) | type EncoderData = {
function startLoading (line 51) | function startLoading() {
function handleInput (line 182) | function handleInput(index: number, value: number) {
function handleOffset (line 193) | function handleOffset(adjustment: number) {
function getOutputValue (line 202) | function getOutputValue(index: number) {
function getOutputASCII (line 206) | function getOutputASCII(index: number) {
function getOutput (line 215) | function getOutput() {
function handleInput (line 361) | function handleInput(index: number, value: number) {
function startLoading (line 374) | function startLoading() {
function performPing (line 392) | function performPing() {
function confirmResult (line 415) | function confirmResult() {
FILE: tgui/packages/tgui/interfaces/CrewConsole.tsx
constant HEALTH_COLOR_BY_LEVEL (line 8) | const HEALTH_COLOR_BY_LEVEL = [
constant HEALTH_ICON_BY_LEVEL (line 17) | const HEALTH_ICON_BY_LEVEL = [
type SensorData (line 95) | type SensorData = {
type Data (line 110) | type Data = { sensors: SensorData[]; link_allowed: number };
FILE: tgui/packages/tgui/interfaces/CrewManifest.tsx
type ManifestData (line 7) | type ManifestData = {
type Crew (line 15) | type Crew = {
FILE: tgui/packages/tgui/interfaces/CrtPanel.tsx
type CrtPanelProps (line 4) | interface CrtPanelProps extends ComponentProps<typeof Box> {
FILE: tgui/packages/tgui/interfaces/Cryo.tsx
type Data (line 33) | type Data = {
FILE: tgui/packages/tgui/interfaces/DemoSim.tsx
type DemoSimData (line 13) | interface DemoSimData {
FILE: tgui/packages/tgui/interfaces/Disposals.tsx
type Data (line 6) | type Data = { pressure: number; mode: number; flush: BooleanLike };
FILE: tgui/packages/tgui/interfaces/DrawnMap.tsx
type DrawMapRrops (line 4) | type DrawMapRrops = {
class DrawnMap (line 17) | class DrawnMap extends Component<DrawMapRrops> {
method constructor (line 25) | constructor(props) {
method componentDidMount (line 39) | componentDidMount() {
method parseSvgData (line 60) | parseSvgData(svgDataArray) {
method getSize (line 80) | getSize() {
method render (line 88) | render() {
FILE: tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
type DoorStatusEnums (line 32) | type DoorStatusEnums = (typeof DoorStatusEnum)[keyof typeof DoorStatusEn...
type DoorStatus (line 34) | interface DoorStatus {
type AutomatedControl (line 39) | interface AutomatedControl {
type ShuttleRef (line 45) | type ShuttleRef = {
type DropshipNavigationProps (line 50) | interface DropshipNavigationProps extends NavigationProps {
type DestinationProps (line 201) | interface DestinationProps {
FILE: tgui/packages/tgui/interfaces/DropshipWeaponsConsole.tsx
type DropshipProps (line 18) | interface DropshipProps {
type MedevacTargets (line 29) | type MedevacTargets = {
type LazeTarget (line 44) | type LazeTarget = {
type DropshipEquipment (line 49) | type DropshipEquipment = {
FILE: tgui/packages/tgui/interfaces/ElevatorControl.tsx
type Destination (line 6) | interface Destination {
type ElevatorContext (line 11) | interface ElevatorContext {
type ElevatorButtonProps (line 88) | interface ElevatorButtonProps {
FILE: tgui/packages/tgui/interfaces/Emotes.tsx
type Emote (line 15) | type Emote = {
type BackendContext (line 22) | type BackendContext = {
FILE: tgui/packages/tgui/interfaces/EscapePodConsole.tsx
type EscapePodProps (line 6) | interface EscapePodProps {
FILE: tgui/packages/tgui/interfaces/FaxMachine.tsx
type Data (line 14) | type Data = {
FILE: tgui/packages/tgui/interfaces/Filteriffic.tsx
type MasterFilter (line 19) | type MasterFilter = {
type ActiveFilters (line 165) | type ActiveFilters = { type: string; priority: number } & Partial<Master...
type FilterEntryProps (line 167) | type FilterEntryProps = {
type Data (line 175) | type Data = {
FILE: tgui/packages/tgui/interfaces/FiltrationControl.tsx
type Data (line 5) | type Data = { filt_on: boolean };
FILE: tgui/packages/tgui/interfaces/FlavorTextEditor.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/HairPicker.tsx
type HairPickerData (line 21) | type HairPickerData = {
FILE: tgui/packages/tgui/interfaces/HealthScan.tsx
type LimbData (line 18) | type LimbData = {
type HumanData (line 37) | type HumanData = {
type Data (line 70) | type Data = {
FILE: tgui/packages/tgui/interfaces/HiveFaction.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/HiveLeaders.tsx
type HiveEntry (line 6) | type HiveEntry = { designation: string; caste_type: string };
type Data (line 8) | type Data = { queens: HiveEntry[]; leaders: HiveEntry[] };
FILE: tgui/packages/tgui/interfaces/HiveStatus.tsx
type XenoEntry (line 102) | type XenoEntry = {
type XenoKey (line 115) | type XenoKey = {
type TierSlot (line 123) | type TierSlot = { open_slots: string; guaranteed_slots: string };
type XenoInfo (line 124) | type XenoInfo = { name: string; straing: string; ref: string };
type XenoVitals (line 125) | type XenoVitals = {
type Data (line 132) | type Data = {
FILE: tgui/packages/tgui/interfaces/IcMedalsPanel.tsx
type Data (line 14) | type Data = {
FILE: tgui/packages/tgui/interfaces/KeyBinds.tsx
constant KEY_MODS (line 19) | const KEY_MODS = {
constant KEY_CODE_TO_BYOND (line 25) | const KEY_CODE_TO_BYOND = {
type Keybind (line 46) | type Keybind = {
type Data (line 53) | type Data = {
type CustomKeybind (line 64) | type CustomKeybind = {
type KeyBindButtonProps (line 717) | type KeyBindButtonProps = ButtonProps & {
class ButtonKeybind (line 727) | class ButtonKeybind extends Component<KeyBindButtonProps> {
method constructor (line 730) | constructor(props) {
method preventPassthrough (line 738) | preventPassthrough(key) {
method doFinish (line 742) | doFinish() {
method handleKeyPress (line 755) | handleKeyPress(e) {
method finishTimerStart (line 783) | finishTimerStart(time) {
method doFocus (line 788) | doFocus() {
method doBlur (line 799) | doBlur() {
method render (line 809) | render() {
FILE: tgui/packages/tgui/interfaces/KillPanel.tsx
type Data (line 5) | type Data = {
FILE: tgui/packages/tgui/interfaces/LanguageMenu.tsx
type Data (line 7) | type Data = {
FILE: tgui/packages/tgui/interfaces/ListInputWindow/ListInputModal.tsx
type ListInputModalProps (line 15) | type ListInputModalProps = {
FILE: tgui/packages/tgui/interfaces/ListInputWindow/index.tsx
type ListInputData (line 7) | type ListInputData = {
FILE: tgui/packages/tgui/interfaces/LoadoutPicker.tsx
type LoadoutPickerData (line 16) | type LoadoutPickerData = {
type Category (line 33) | type Category = {
type LoadoutItem (line 38) | type LoadoutItem = {
FILE: tgui/packages/tgui/interfaces/LobbyMenu.tsx
type LobbyData (line 28) | type LobbyData = {
type LobbyContextType (line 49) | type LobbyContextType = {
constant SMALL_BUTTON_DELAY (line 285) | const SMALL_BUTTON_DELAY = 3;
type LobbyButtonProps (line 617) | type LobbyButtonProps = ComponentProps<typeof Box> & {
FILE: tgui/packages/tgui/interfaces/LootPanel/GroupedContents.tsx
type Props (line 8) | type Props = {
function GroupedContents (line 13) | function GroupedContents(props: Props) {
FILE: tgui/packages/tgui/interfaces/LootPanel/IconDisplay.tsx
type Props (line 5) | type Props = {
function IconDisplay (line 9) | function IconDisplay(props: Props) {
FILE: tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx
type Props (line 8) | type Props =
function LootBox (line 16) | function LootBox(props: Props) {
FILE: tgui/packages/tgui/interfaces/LootPanel/RawContents.tsx
type Props (line 7) | type Props = {
function RawContents (line 12) | function RawContents(props: Props) {
FILE: tgui/packages/tgui/interfaces/LootPanel/index.tsx
type Data (line 12) | type Data = {
function LootPanel (line 17) | function LootPanel(props) {
FILE: tgui/packages/tgui/interfaces/LootPanel/types.ts
type SearchItem (line 1) | type SearchItem = {
type SearchGroup (line 10) | type SearchGroup = {
FILE: tgui/packages/tgui/interfaces/MarkMenu.tsx
type MarkProps (line 7) | interface MarkProps {
type Mark (line 16) | interface Mark {
type PlacedMark (line 24) | interface PlacedMark extends Mark {
type HivePosition (line 33) | type HivePosition = 0 | 1 | 2;
FILE: tgui/packages/tgui/interfaces/MedalsPanel.tsx
constant PAGES (line 6) | const PAGES = [
type Data (line 19) | type Data = {
FILE: tgui/packages/tgui/interfaces/MedalsViewer.tsx
type MedalProps (line 6) | interface MedalProps {
type Medal (line 10) | interface Medal {
FILE: tgui/packages/tgui/interfaces/MedicalRecords.tsx
type RecordEntry (line 17) | type RecordEntry = {
type Data (line 45) | type Data = {
FILE: tgui/packages/tgui/interfaces/MfdPanels/FiremissionPanel.tsx
type GimbalInfo (line 168) | interface GimbalInfo {
FILE: tgui/packages/tgui/interfaces/MfdPanels/MultifunctionDisplay.tsx
type MfdProps (line 10) | interface MfdProps {
FILE: tgui/packages/tgui/interfaces/MfdPanels/WeaponPanel.tsx
type EquipmentContext (line 19) | interface EquipmentContext {
FILE: tgui/packages/tgui/interfaces/MfdPanels/types.ts
type ButtonProps (line 5) | interface ButtonProps {
type LazeTarget (line 10) | type LazeTarget = {
type TargetContext (line 15) | type TargetContext = {
type FultonProps (line 19) | type FultonProps = {
type MedevacTargets (line 24) | type MedevacTargets = {
type CameraProps (line 39) | type CameraProps = {
type EquipmentContext (line 43) | type EquipmentContext = {
type MedevacContext (line 47) | type MedevacContext = {
type FiremissionContext (line 52) | type FiremissionContext = {
type SentrySpec (line 56) | type SentrySpec = {
type SpotlightSpec (line 74) | type SpotlightSpec = {
type ParadropSpec (line 78) | type ParadropSpec = {
type MGSpec (line 83) | type MGSpec = {
type CasFiremissionStage (line 93) | type CasFiremissionStage = {
type CasFiremission (line 98) | type CasFiremission = {
type MapProps (line 105) | type MapProps = {
FILE: tgui/packages/tgui/interfaces/Microwave.tsx
type Ingredient (line 6) | type Ingredient = {
type BackendContext (line 12) | type BackendContext = {
FILE: tgui/packages/tgui/interfaces/ModifiersPanel.tsx
type ModifiersList (line 6) | type ModifiersList = {
FILE: tgui/packages/tgui/interfaces/Mortar.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/NavigationShuttle.tsx
type DockingPort (line 15) | interface DockingPort {
type NavigationProps (line 22) | interface NavigationProps {
FILE: tgui/packages/tgui/interfaces/NoticeBoard.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/NuclearBomb.tsx
type Data (line 13) | type Data = {
FILE: tgui/packages/tgui/interfaces/NumberInputModal.tsx
type NumberInputData (line 10) | type NumberInputData = {
FILE: tgui/packages/tgui/interfaces/Orbit/helpers.ts
type HEALTH (line 5) | enum HEALTH {
FILE: tgui/packages/tgui/interfaces/Orbit/index.tsx
type search (line 32) | type search = {
FILE: tgui/packages/tgui/interfaces/Orbit/types.ts
type OrbitData (line 3) | type OrbitData = {
type Observable (line 36) | type Observable = {
type SquadObservable (line 55) | type SquadObservable = {
type splitter (line 73) | type splitter = (members: Array<Observable>) => Array<SquadObservable>;
type groupSorter (line 74) | type groupSorter = (a: Observable, b: Observable) => number;
FILE: tgui/packages/tgui/interfaces/OrbitalCannonConsole.tsx
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/OverwatchConsole.tsx
type MarineData (line 21) | type MarineData = {
type Data (line 33) | type Data = {
FILE: tgui/packages/tgui/interfaces/PartFabricator.tsx
type DataEntry (line 6) | type DataEntry = {
type Data (line 14) | type Data = {
FILE: tgui/packages/tgui/interfaces/ParticleEdit/data.ts
constant P_DATA_GENERATOR (line 14) | const P_DATA_GENERATOR = 'generator';
constant P_DATA_ICON_ADD (line 15) | const P_DATA_ICON_ADD = 'icon_add';
constant P_DATA_ICON_REMOVE (line 16) | const P_DATA_ICON_REMOVE = 'icon_remove';
constant P_DATA_ICON_WEIGHT (line 17) | const P_DATA_ICON_WEIGHT = 'icon_edit';
constant P_DATA_GRADIENT (line 18) | const P_DATA_GRADIENT = 'gradient';
type ParticleUIData (line 59) | type ParticleUIData = {
type ParticleData (line 64) | type ParticleData = {
type EntryFloatProps (line 93) | type EntryFloatProps = {
type EntryCoordProps (line 100) | type EntryCoordProps = {
type EntryGradientProps (line 107) | type EntryGradientProps = {
type EntryTransformProps (line 114) | type EntryTransformProps = {
type EntryIconStateProps (line 121) | type EntryIconStateProps = {
type FloatGeneratorProps (line 128) | type FloatGeneratorProps = {
type FloatGeneratorColorProps (line 135) | type FloatGeneratorColorProps = {
type GeneratorProps (line 142) | type GeneratorProps = {
type EntryGeneratorNumbersListProps (line 148) | type EntryGeneratorNumbersListProps = {
FILE: tgui/packages/tgui/interfaces/PhoneMenu.tsx
type Data (line 8) | type Data = {
FILE: tgui/packages/tgui/interfaces/PingRelaysPanel.tsx
constant RED (line 8) | const RED = '#dc2828';
class PingResult (line 10) | class PingResult {
method update (line 16) | update(desc: string, url: string, ping: number, error: string | null) {
type PingAppProps (line 24) | type PingAppProps = {
type State (line 30) | type State = {
class PingApp (line 36) | class PingApp extends Component<PingAppProps> {
method constructor (line 41) | constructor(props: PingAppProps) {
method startTest (line 53) | startTest(index: number, desc: string, pingURL: string, connectURL: st...
method handleConfirmChange (line 119) | handleConfirmChange(index: number, newState: boolean) {
method componentDidMount (line 126) | componentDidMount() {
method componentWillUnmount (line 139) | componentWillUnmount() {
method render (line 151) | render() {
type PingRelaysPanelData (line 249) | type PingRelaysPanelData = {
FILE: tgui/packages/tgui/interfaces/PlayerPanel.tsx
constant PAGES (line 17) | const PAGES = [
type ClientData (line 75) | type ClientData = {
type StatusFlags (line 86) | type StatusFlags = {
type MobLimbs (line 97) | type MobLimbs = {
type TransformEntry (line 105) | type TransformEntry = { name: String; key: string; color: string };
type Data (line 107) | type Data = {
FILE: tgui/packages/tgui/interfaces/Playtime.tsx
type PlaytimeRecord (line 8) | interface PlaytimeRecord {
type PlaytimeData (line 16) | interface PlaytimeData {
FILE: tgui/packages/tgui/interfaces/PodLauncher.tsx
type Data (line 27) | type Data = {
constant TABPAGES (line 136) | const TABPAGES = [
constant DELAYS (line 151) | const DELAYS = [
constant EFFECTS_LOAD (line 192) | const EFFECTS_LOAD = [
constant EFFECTS_NORMAL (line 263) | const EFFECTS_NORMAL = [
constant EFFECTS_ALL (line 299) | const EFFECTS_ALL = [
type StateData (line 554) | type StateData = {
class PresetsPage (line 562) | class PresetsPage extends Component {
method constructor (line 564) | constructor(props) {
method componentDidMount (line 575) | async componentDidMount() {
method saveDataToPreset (line 583) | saveDataToPreset(id, data) {
method loadDataFromPreset (line 587) | async loadDataFromPreset(id) {
method newPreset (line 594) | newPreset(presetName, hue, data) {
method getPresets (line 606) | async getPresets() {
method deletePreset (line 614) | deletePreset(deleteID) {
method render (line 626) | render() {
FILE: tgui/packages/tgui/interfaces/Poll.tsx
type PollType (line 12) | type PollType = {
type ConcludedPoll (line 19) | type ConcludedPoll = {
type PollData (line 25) | type PollData = {
FILE: tgui/packages/tgui/interfaces/PortableVendor.tsx
type PortableVendorProduct (line 5) | interface PortableVendorProduct {
type PortableVendorProps (line 14) | interface PortableVendorProps {
type RecordEntryProps (line 22) | interface RecordEntryProps {
FILE: tgui/packages/tgui/interfaces/PredPicker.tsx
type PredData (line 24) | type PredData = {
type ModalOptions (line 82) | type ModalOptions =
FILE: tgui/packages/tgui/interfaces/Proximity.tsx
type Data (line 5) | type Data = {
FILE: tgui/packages/tgui/interfaces/PublishedDocsHud.tsx
type TerminalProps (line 11) | interface TerminalProps {
FILE: tgui/packages/tgui/interfaces/Radar.tsx
type Data (line 16) | type Data = {
type Object (line 23) | type Object = {
type Target (line 29) | type Target = {
FILE: tgui/packages/tgui/interfaces/Radio.tsx
type Data (line 14) | type Data = {
FILE: tgui/packages/tgui/interfaces/ReagentGrinder.tsx
type ReagentGrinderData (line 5) | type ReagentGrinderData = {
type ChamberItem (line 14) | type ChamberItem = {
type BeakerReagent (line 19) | type BeakerReagent = {
FILE: tgui/packages/tgui/interfaces/ResearchDoorDisplay.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/ResearchMemories.tsx
type ClueData (line 6) | type ClueData = { text: string };
type Data (line 8) | type Data = {
FILE: tgui/packages/tgui/interfaces/ResearchTerminal.tsx
type DocumentLog (line 16) | interface DocumentLog {
type Chemical (line 19) | interface Chemical {
type DocumentRecord (line 27) | interface DocumentRecord {
type TerminalProps (line 34) | interface TerminalProps {
type ConfirmationProps (line 53) | interface ConfirmationProps extends ComponentProps<typeof Box> {
type CompoundRecordProps (line 88) | interface CompoundRecordProps extends ComponentProps<typeof Box> {
type DocInfo (line 172) | interface DocInfo {
type CompoundData (line 178) | interface CompoundData {
type CompoundTableProps (line 230) | interface CompoundTableProps extends ComponentProps<typeof Box> {
FILE: tgui/packages/tgui/interfaces/STUI.tsx
type STUIData (line 16) | type STUIData = {
FILE: tgui/packages/tgui/interfaces/SecurityRecords.tsx
type RecordEntry (line 17) | type RecordEntry = {
type Scanner (line 36) | type Scanner = {
type Data (line 42) | type Data = {
FILE: tgui/packages/tgui/interfaces/SelfDestructConsole.tsx
type Data (line 5) | type Data = { dest_status: number };
FILE: tgui/packages/tgui/interfaces/Sentencing.tsx
constant PAGES (line 6) | const PAGES = {
type Law (line 12) | type Law = {
type IncidentData (line 21) | type IncidentData = {
type Data (line 35) | type Data = {
FILE: tgui/packages/tgui/interfaces/SentryGunUI.tsx
type SelectedState (line 20) | type SelectedState = [string, string];
type SelectionState (line 21) | type SelectionState = [string, string[]];
type ElectricalSpec (line 23) | interface ElectricalSpec {
type SentrySpec (line 28) | interface SentrySpec {
type SentryData (line 46) | interface SentryData {
FILE: tgui/packages/tgui/interfaces/ShuttleManipulator.tsx
type ShuttleData (line 14) | interface ShuttleData {
type ShuttleTemplate (line 27) | interface ShuttleTemplate {
type TemplateGroup (line 35) | interface TemplateGroup {
type ShuttleManipulatorData (line 40) | interface ShuttleManipulatorData {
FILE: tgui/packages/tgui/interfaces/Signaller.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/SkillsMenu.tsx
type Data (line 15) | type Data = {
FILE: tgui/packages/tgui/interfaces/Sleeper.tsx
type HumanData (line 45) | type HumanData = {
type OccupantData (line 52) | type OccupantData = {
type ChemicalData (line 73) | type ChemicalData = {
type Data (line 84) | type Data = {
FILE: tgui/packages/tgui/interfaces/SlotMachine.tsx
type IconInfo (line 5) | type IconInfo = {
type BackendData (line 11) | type BackendData = {
type SlotsTileProps (line 22) | type SlotsTileProps = {
type SlotsReelProps (line 28) | type SlotsReelProps = {
FILE: tgui/packages/tgui/interfaces/SmartFridge.tsx
type SmartFridgeData (line 18) | interface SmartFridgeData {
type StorageItem (line 29) | interface StorageItem {
FILE: tgui/packages/tgui/interfaces/Smes.tsx
constant POWER_MUL (line 16) | const POWER_MUL = 1e3;
type Data (line 18) | type Data = {
FILE: tgui/packages/tgui/interfaces/SquadInfo.tsx
type SquadLeadEntry (line 7) | interface SquadLeadEntry {
type SquadMarineEntry (line 12) | interface SquadMarineEntry {
type FireTeamEntry (line 22) | interface FireTeamEntry {
type FireTeams (line 29) | interface FireTeams {
type SquadProps (line 35) | interface SquadProps {
type FireteamBoxProps (line 108) | interface FireteamBoxProps extends ComponentProps<typeof Box> {
FILE: tgui/packages/tgui/interfaces/SquadMod.tsx
type Data (line 6) | type Data = {
FILE: tgui/packages/tgui/interfaces/StackReceipts.tsx
type Receipt (line 14) | type Receipt = {
type StackData (line 29) | type StackData = {
FILE: tgui/packages/tgui/interfaces/StaffWho.tsx
type AdminPayload (line 5) | type AdminPayload = {
type Data (line 11) | type Data = {
FILE: tgui/packages/tgui/interfaces/StationAlertConsole.tsx
type Data (line 15) | type Data = {
FILE: tgui/packages/tgui/interfaces/StripMenu.tsx
constant ROWS (line 8) | const ROWS = 5;
constant COLUMNS (line 9) | const COLUMNS = 6;
constant BUTTON_DIMENSIONS (line 11) | const BUTTON_DIMENSIONS = '64px';
type GridSpotKey (line 13) | type GridSpotKey = string;
type AlternateAction (line 38) | type AlternateAction = {
constant ALTERNATE_ACTIONS (line 43) | const ALTERNATE_ACTIONS: Record<string, AlternateAction> = {
type Slot (line 65) | type Slot = {
constant SLOTS (line 73) | const SLOTS: Record<string, Slot> = {
type ObscuringLevel (line 191) | enum ObscuringLevel {
type Interactable (line 196) | type Interactable = {
type StripMenuItem (line 210) | type StripMenuItem =
type StripMenuData (line 228) | type StripMenuData = {
FILE: tgui/packages/tgui/interfaces/SupplyComputer.tsx
type SupplyComputerData (line 28) | type SupplyComputerData = {
type Pack (line 57) | type Pack = {
type OrderPack (line 67) | type OrderPack = {
type Order (line 71) | type Order = {
type Item (line 79) | type Item = {
type Icon (line 85) | type Icon = {
type MenuOptions (line 90) | enum MenuOptions {
FILE: tgui/packages/tgui/interfaces/SupplyDropConsole.tsx
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/TacmapAdminPanel.tsx
constant PAGES (line 8) | const PAGES = [
type Data (line 23) | type Data = {
FILE: tgui/packages/tgui/interfaces/TacmapViewer.tsx
constant PAGES (line 8) | const PAGES = [
type Data (line 21) | type Data = {
FILE: tgui/packages/tgui/interfaces/TacticalMap.tsx
type TacMapProps (line 7) | interface TacMapProps {
constant PAGES (line 13) | const PAGES = [
FILE: tgui/packages/tgui/interfaces/Tank.tsx
type Data (line 22) | type Data = {
FILE: tgui/packages/tgui/interfaces/TechControl.tsx
type DataEntry (line 9) | type DataEntry = { name: string; job: string; paygrade: string; rank: st...
type Data (line 11) | type Data = {
FILE: tgui/packages/tgui/interfaces/TechMemories.tsx
type Clue (line 6) | type Clue = {
type ClueCategory (line 16) | type ClueCategory = {
type ObjectiveData (line 22) | type ObjectiveData = {
type TechProps (line 29) | type TechProps = {
FILE: tgui/packages/tgui/interfaces/TechNode.tsx
type Tech (line 6) | type Tech = { content: string; color: string; icon: string; tooltip: str...
type Data (line 8) | type Data = {
FILE: tgui/packages/tgui/interfaces/TeleporterConsole.tsx
type Data (line 16) | type Data = {
FILE: tgui/packages/tgui/interfaces/TextInputModal.tsx
type TextInputData (line 10) | type TextInputData = {
FILE: tgui/packages/tgui/interfaces/Timer.tsx
type Data (line 5) | type Data = {
FILE: tgui/packages/tgui/interfaces/TraitsPicker.tsx
type TraitsPickerData (line 7) | type TraitsPickerData = {
type Trait (line 18) | type Trait = {
FILE: tgui/packages/tgui/interfaces/TutorialMenu.tsx
type Tutorial (line 7) | type Tutorial = {
type TutorialCategory (line 15) | type TutorialCategory = {
type BackendContext (line 20) | type BackendContext = {
FILE: tgui/packages/tgui/interfaces/UnauthenticatedMenu.tsx
constant MAX_TIMEOUT (line 7) | const MAX_TIMEOUT = 10800000;
type AuthOption (line 9) | type AuthOption = {
type MenuData (line 14) | type MenuData = {
FILE: tgui/packages/tgui/interfaces/UnbanPanel.tsx
type UnbanData (line 5) | type UnbanData = {
type Ban (line 10) | type Ban = {
FILE: tgui/packages/tgui/interfaces/VehicleStatus.tsx
type Data (line 15) | type Data = {
FILE: tgui/packages/tgui/interfaces/Vending.tsx
type VendingData (line 19) | type VendingData = {
type Category (line 32) | type Category = {
type ProductRecord (line 36) | type ProductRecord = {
type CoinRecord (line 45) | type CoinRecord = ProductRecord & {
type HiddenRecord (line 49) | type HiddenRecord = ProductRecord & {
type UserData (line 53) | type UserData = {
type StockItem (line 59) | type StockItem = {
constant CATEGORY_COLORS (line 289) | const CATEGORY_COLORS = {
FILE: tgui/packages/tgui/interfaces/VendingSorted.tsx
constant THEME_COMP (line 20) | const THEME_COMP = 0;
constant THEME_USCM (line 21) | const THEME_USCM = 1;
constant THEME_CLF (line 22) | const THEME_CLF = 2;
constant THEME_UPP (line 23) | const THEME_UPP = 3;
constant THEME_YAUTJA (line 24) | const THEME_YAUTJA = 4;
constant VENDOR_ITEM_REGULAR (line 26) | const VENDOR_ITEM_REGULAR = 1;
constant VENDOR_ITEM_MANDATORY (line 27) | const VENDOR_ITEM_MANDATORY = 2;
constant VENDOR_ITEM_RECOMMENDED (line 28) | const VENDOR_ITEM_RECOMMENDED = 3;
type VendingRecord (line 30) | interface VendingRecord {
type VendingCategory (line 40) | interface VendingCategory {
type VendingData (line 45) | interface VendingData {
type VenableItem (line 58) | interface VenableItem {
type RecordNameProps (line 62) | interface RecordNameProps extends ComponentProps<typeof Box> {
type VendButtonProps (line 98) | interface VendButtonProps extends ComponentProps<typeof Box> {
type VendingCategoryProps (line 239) | interface VendingCategoryProps {
type DescriptionProps (line 244) | interface DescriptionProps {
FILE: tgui/packages/tgui/interfaces/VoteMenu.tsx
constant PAGES (line 6) | const PAGES = [
type VoteEntry (line 29) | type VoteEntry = {
type Data (line 37) | type Data = {
FILE: tgui/packages/tgui/interfaces/VoxPanel.tsx
constant PAGES (line 17) | const PAGES = [
type Data (line 32) | type Data = { glob_vox_types: string[]; factions: string[] };
FILE: tgui/packages/tgui/interfaces/VultureScope.tsx
type ScopeData (line 14) | type ScopeData = {
type Direction (line 26) | enum Direction {
FILE: tgui/packages/tgui/interfaces/WYComputer.tsx
constant PAGES (line 12) | const PAGES = {
type Data (line 19) | type Data = {
FILE: tgui/packages/tgui/interfaces/WeaponStats.tsx
type Data (line 26) | type Data = {
FILE: tgui/packages/tgui/interfaces/WhitelistPanel.tsx
type BitFlagData (line 5) | type BitFlagData = { name: String; bitflag: number; permission: number };
type Data (line 7) | type Data = {
constant PAGES (line 20) | const PAGES = {
FILE: tgui/packages/tgui/interfaces/Who.tsx
type PlayerPayload (line 15) | type PlayerPayload = {
type FactionPayload (line 20) | type FactionPayload = { content: string; color: string; text: string };
type Data (line 22) | type Data = {
FILE: tgui/packages/tgui/interfaces/Wires.tsx
type Wire (line 5) | type Wire = { number: number; cut: boolean; attached?: boolean };
type Data (line 7) | type Data = {
FILE: tgui/packages/tgui/interfaces/WorkingJoe.tsx
type Data (line 7) | type Data = DataCoreData & {
constant PAGES (line 16) | const PAGES = {
FILE: tgui/packages/tgui/interfaces/XenomorphExtractor.tsx
type Upgrade (line 16) | type Upgrade = {
type Queue (line 26) | type Queue = {
type Data (line 31) | type Data = {
FILE: tgui/packages/tgui/interfaces/common/AccessList.tsx
type Access (line 20) | type Access = { desc: string; ref: string };
type Regions (line 22) | type Regions = {
FILE: tgui/packages/tgui/interfaces/common/BeakerContents.tsx
type BeakerProps (line 4) | type BeakerProps = { name: string; volume: number }[];
FILE: tgui/packages/tgui/interfaces/common/ElectricalPanel.tsx
type ElectricalData (line 7) | interface ElectricalData {
type MachineElectrical (line 11) | interface MachineElectrical {
type WireSpec (line 18) | interface WireSpec {
FILE: tgui/packages/tgui/interfaces/common/InputButtons.tsx
type InputButtonsData (line 5) | type InputButtonsData = {
type InputButtonsProps (line 10) | type InputButtonsProps = {
FILE: tgui/packages/tgui/interfaces/common/InterfaceLockNoticeBox.tsx
type Data (line 20) | type Data = {
FILE: tgui/packages/tgui/interfaces/common/TimedCallback.tsx
type TimedCallbackProps (line 3) | interface TimedCallbackProps {
type TimedCallbackState (line 8) | interface TimedCallbackState {
class TimedCallback (line 12) | class TimedCallback extends Component<
method constructor (line 17) | constructor(props: TimedCallbackProps) {
method componentDidMount (line 21) | componentDidMount() {
method componentWillUnmount (line 25) | componentWillUnmount() {
method render (line 30) | render() {
FILE: tgui/packages/tgui/interfaces/common/commonTypes.ts
type DataCoreData (line 1) | type DataCoreData = {
type MaintTicketRecord (line 31) | type MaintTicketRecord = {
type AccessTicketRecord (line 44) | type AccessTicketRecord = {
type VentRecord (line 57) | type VentRecord = { vent_tag: string; ref: string; available: boolean };
type DiscussionRecord (line 59) | type DiscussionRecord = BasicRecord & {
type TechRecord (line 64) | type TechRecord = {
type BasicRecord (line 72) | type BasicRecord = {
type CustomRecord (line 78) | type CustomRecord = BasicRecord & {
type CustomUserRecord (line 82) | type CustomUserRecord = CustomRecord & {
FILE: tgui/packages/tgui/interfaces/helpers.tsx
function replaceRegexChars (line 1) | function replaceRegexChars(string_to_clean) {
FILE: tgui/packages/tgui/interfaces/port_gen.tsx
type Data (line 14) | type Data = {
FILE: tgui/packages/tgui/layouts/Layout.tsx
type Props (line 16) | type Props = Partial<{
function Layout (line 21) | function Layout(props: Props) {
type ContentProps (line 41) | type ContentProps = Partial<{
function LayoutContent (line 46) | function LayoutContent(props: ContentProps) {
FILE: tgui/packages/tgui/layouts/NtosWindow.tsx
type NTOSData (line 14) | type NTOSData = {
type Program (line 39) | type Program = {
type Login (line 48) | type Login = {
FILE: tgui/packages/tgui/layouts/Pane.tsx
type Props (line 15) | type Props = Partial<{
function Pane (line 20) | function Pane(props: Props) {
type ContentProps (line 34) | type ContentProps = Partial<{
function PaneContent (line 40) | function PaneContent(props: ContentProps) {
FILE: tgui/packages/tgui/layouts/Window.tsx
constant DEFAULT_SIZE (line 33) | const DEFAULT_SIZE: [number, number] = [400, 600];
type Props (line 35) | type Props = Partial<{
type ContentProps (line 153) | type ContentProps = Partial<{
type TitleBarProps (line 191) | type TitleBarProps = Partial<{
FILE: tgui/packages/tgui/logging.ts
constant LEVEL_DEBUG (line 9) | const LEVEL_DEBUG = 0;
constant LEVEL_LOG (line 10) | const LEVEL_LOG = 1;
constant LEVEL_INFO (line 11) | const LEVEL_INFO = 2;
constant LEVEL_WARN (line 12) | const LEVEL_WARN = 3;
constant LEVEL_ERROR (line 13) | const LEVEL_ERROR = 4;
type Logger (line 15) | interface Logger {
FILE: tgui/packages/tgui/renderer.ts
function resumeRenderer (line 14) | function resumeRenderer() {
function suspendRenderer (line 19) | function suspendRenderer() {
type Render (line 23) | enum Render {
function render (line 28) | function render(component: ReactNode) {
FILE: tgui/packages/tgui/routes.tsx
function SuspendedWindow (line 35) | function SuspendedWindow() {
function RefreshingWindow (line 44) | function RefreshingWindow() {
function getRoutedComponent (line 55) | function getRoutedComponent() {
FILE: tgui/packages/tgui/store.ts
type ConfigureStoreOptions (line 22) | type ConfigureStoreOptions = {
type StackAugmentor (line 31) | type StackAugmentor = (stack: string, error?: Error) => string;
type StoreProviderProps (line 33) | type StoreProviderProps = {
FILE: tgui/packages/tgui/stories/Blink.stories.tsx
function Story (line 14) | function Story() {
FILE: tgui/packages/tgui/stories/BlockQuote.stories.tsx
function Story (line 16) | function Story() {
FILE: tgui/packages/tgui/stories/Box.stories.tsx
function Story (line 14) | function Story() {
FILE: tgui/packages/tgui/stories/Button.stories.tsx
constant COLORS_SPECTRUM (line 14) | const COLORS_SPECTRUM = [
constant COLORS_STATES (line 29) | const COLORS_STATES = ['good', 'average', 'bad', 'black', 'white'];
function Story (line 31) | function Story() {
FILE: tgui/packages/tgui/stories/ByondUi.stories.tsx
function Story (line 17) | function Story() {
FILE: tgui/packages/tgui/stories/Collapsible.stories.tsx
function Story (line 16) | function Story() {
FILE: tgui/packages/tgui/stories/Flex.stories.tsx
function Story (line 15) | function Story() {
FILE: tgui/packages/tgui/stories/Input.stories.tsx
function Story (line 25) | function Story() {
FILE: tgui/packages/tgui/stories/LabeledList.stories.tsx
function Story (line 14) | function Story() {
FILE: tgui/packages/tgui/stories/Popper.stories.tsx
function Story (line 8) | function Story() {
FILE: tgui/packages/tgui/stories/ProgressBar.stories.tsx
function Story (line 22) | function Story() {
FILE: tgui/packages/tgui/stories/Stack.stories.tsx
function Filler (line 14) | function Filler() {
function SmallStackItems (line 22) | function SmallStackItems() {
function Story (line 36) | function Story() {
FILE: tgui/packages/tgui/stories/Tabs.stories.tsx
constant TAB_RANGE (line 15) | const TAB_RANGE = ['Tab #1', 'Tab #2', 'Tab #3', 'Tab #4'] as const;
type TabProps (line 17) | type TabProps = Partial<{
function Story (line 26) | function Story() {
function TabsPrefab (line 120) | function TabsPrefab(props) {
FILE: tgui/packages/tgui/stories/Themes.stories.tsx
function Story (line 17) | function Story(props: {
FILE: tgui/packages/tgui/stories/Tooltip.stories.tsx
function Story (line 24) | function Story() {
FILE: tgui/packages/tgui/stories/common.tsx
function BoxWithSampleText (line 9) | function BoxWithSampleText(props) {
FILE: tgui/rspack.config.ts
function createStats (line 6) | function createStats(verbose: boolean): StatsOptions {
FILE: tools/GenerateChangelog/ss13_genchangelog.py
function dictToTuples (line 76) | def dictToTuples(inp):
FILE: tools/MapTileImageTool/MapTileImageTool.py
function func_exportfullimage (line 69) | def func_exportfullimage(name, export):
FILE: tools/Runtime Condenser/Main.cpp
type runtime (line 41) | struct runtime {
type harddel (line 50) | struct harddel {
function string (line 72) | inline string safe_substr(string * S, size_t start = 0, size_t end = str...
function string (line 79) | inline string * readline(FILE * f) {
function forward_progress (line 116) | inline void forward_progress(FILE * inputFile) {
function string_send (line 128) | inline void string_send(string * &from, string * &to) {
function printprogressbar (line 132) | inline void printprogressbar(unsigned short progress /*as percent*/) {
function readFromFile (line 139) | bool readFromFile() {
function runtimeComp (line 258) | bool runtimeComp(const runtime &a, const runtime &b) {
function hardDelComp (line 262) | bool hardDelComp(const harddel &a, const harddel &b) {
function writeToFile (line 265) | bool writeToFile() {
function main (line 360) | int main() {
FILE: tools/UpdatePaths/__main__.py
function props_to_string (line 39) | def props_to_string(props):
function string_to_props (line 43) | def string_to_props(propstring, verbose = False):
function parse_rep_string (line 55) | def parse_rep_string(replacement_string, verbose = False):
function update_path (line 67) | def update_path(dmm_data, replacement_string, verbose=False):
function update_map (line 157) | def update_map(map_filepath, updates, verbose=False):
function update_all_maps (line 167) | def update_all_maps(map_directory, updates, verbose=False):
function main (line 175) | def main(args):
FILE: tools/autowiki/autowiki.js
constant PAGE_EDIT_FILENAME (line 16) | const PAGE_EDIT_FILENAME = process.argv[2];
constant FILE_EDIT_FILENAME (line 23) | const FILE_EDIT_FILENAME = process.argv[3];
function main (line 30) | async function main() {
FILE: tools/build/build.ts
constant TGS_MODE (line 18) | const TGS_MODE = process.env.CBT_BUILD_MODE === "TGS";
constant DME_NAME (line 20) | const DME_NAME = "colonialmarines";
FILE: tools/build/juke/index.d.ts
type ParameterType (line 24) | type ParameterType = (string | string[] | number | number[] | boolean | ...
type StringType (line 25) | type StringType = ("string" | "string[]" | "number" | "number[]" | "bool...
type TypeByString (line 26) | type TypeByString<T extends StringType> = (T extends "string" ? string :...
type ParameterConfig (line 27) | type ParameterConfig<T extends StringType> = {
type Parameter (line 47) | interface Parameter<T extends ParameterType = ParameterType> {
type ParameterCtor (line 60) | type ParameterCtor = {
type ParameterCreator (line 64) | type ParameterCreator = <T extends StringType>(config: ParameterConfig<T...
type ExecutionContext (line 66) | type ExecutionContext = {
type BooleanLike (line 71) | type BooleanLike = boolean | null | undefined;
type WithExecutionContext (line 72) | type WithExecutionContext<R> = (context: ExecutionContext) => R | Promis...
type WithOptionalExecutionContext (line 73) | type WithOptionalExecutionContext<R> = R | WithExecutionContext<R>;
type DependsOn (line 74) | type DependsOn = WithOptionalExecutionContext<(Target | BooleanLike)[]>;
type ExecutesFn (line 75) | type ExecutesFn = WithExecutionContext<unknown>;
type OnlyWhenFn (line 76) | type OnlyWhenFn = WithExecutionContext<BooleanLike>;
type FileIo (line 77) | type FileIo = WithOptionalExecutionContext<(string | BooleanLike)[]>;
type TargetConfig (line 78) | type TargetConfig = {
class Target (line 121) | class Target {
type TargetCreator (line 131) | type TargetCreator = (target: TargetConfig) => Target;
type RunnerConfig (line 133) | type RunnerConfig = {
class Worker (line 147) | class Worker {
class ExitCode (line 164) | class ExitCode extends Error {
type ExecOptions (line 169) | type ExecOptions = SpawnOptionsWithoutStdio & {
type ExecReturn (line 181) | type ExecReturn = {
type RmOptions (line 206) | type RmOptions = {
type SetupConfig (line 231) | type SetupConfig = {
FILE: tools/build/juke/index.js
method "pnp:color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-name/index.js" (line 59) | "pnp:color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-n...
method "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/color-convert/conversions.js" (line 216) | "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/colo...
method "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/color-convert/route.js" (line 887) | "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/colo...
method "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/color-convert/index.js" (line 955) | "pnp:color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip/node_modules/colo...
method "pnp:ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip/node_modules/ansi-styles/index.js" (line 1016) | "pnp:ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip/node_modules/ansi-s...
method "pnp:has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/index.js" (line 1155) | "pnp:has-flag-npm-4.0.0-32af9f0536-261a135703.zip/node_modules/has-flag/...
method "pnp:supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip/node_modules/supports-color/index.js" (line 1168) | "pnp:supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip/node_modules/sup...
method "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source/util.js" (line 1270) | "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source...
method "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source/templates.js" (line 1309) | "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source...
method "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source/index.js" (line 1423) | "pnp:chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip/node_modules/chalk/source...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/lowercase.js" (line 1597) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/uppercase.js" (line 1615) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/camelcase.js" (line 1633) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/capitalcase.js" (line 1666) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/snakecase.js" (line 1682) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/constcase.js" (line 1726) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/cramcase.js" (line 1745) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/decapitalcase.js" (line 1757) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/dotcase.js" (line 1773) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/enumcase.js" (line 1785) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/pascalcase.js" (line 1797) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/pathcase.js" (line 1810) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/trimcase.js" (line 1822) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/sentencecase.js" (line 1833) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/spacecase.js" (line 1853) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/spinalcase.js" (line 1865) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/titlecase.js" (line 1877) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringcase/lib/index.js" (line 1900) | "pnp:stringcase-npm-4.3.1-2f1c329337-741a448632.zip/node_modules/stringc...
method "pnp:fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.realpath/old.js" (line 1960) | "pnp:fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.rea...
method "pnp:fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.realpath/index.js" (line 2172) | "pnp:fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.rea...
method "pnp:concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip/node_modules/concat-map/index.js" (line 2231) | "pnp:concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip/node_modules/concat-...
method "pnp:balanced-match-npm-1.0.0-951a2ad706-9b67bfe558.zip/node_modules/balanced-match/index.js" (line 2251) | "pnp:balanced-match-npm-1.0.0-951a2ad706-9b67bfe558.zip/node_modules/bal...
method "pnp:brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/brace-expansion/index.js" (line 2308) | "pnp:brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/b...
method "pnp:minimatch-npm-3.0.4-6e76f51c23-66ac295f8a.zip/node_modules/minimatch/minimatch.js" (line 2453) | "pnp:minimatch-npm-3.0.4-6e76f51c23-66ac295f8a.zip/node_modules/minimatc...
method "pnp:inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/inherits_browser.js" (line 3021) | "pnp:inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/...
method "pnp:inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/inherits.js" (line 3053) | "pnp:inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip/node_modules/inherits/...
method "pnp:path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/path-is-absolute/index.js" (line 3068) | "pnp:path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/p...
method "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/common.js" (line 3088) | "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/common.j...
method "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/sync.js" (line 3279) | "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/sync.js"...
method "pnp:wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/wrappy.js" (line 3630) | "pnp:wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/wrap...
method "pnp:once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/once.js" (line 3661) | "pnp:once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/once.js"...
method "pnp:inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip/node_modules/inflight/inflight.js" (line 3706) | "pnp:inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip/node_modules/inflight/...
method "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/glob.js" (line 3753) | "pnp:glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/glob.js"...
method constructor (line 4384) | constructor(code, signal) {
method constructor (line 4480) | constructor(config) {
method isString (line 4485) | isString() {
method isNumber (line 4488) | isNumber() {
method isBoolean (line 4491) | isBoolean() {
method isArray (line 4494) | isArray() {
method toKebabCase (line 4497) | toKebabCase() {
method toConstCase (line 4502) | toConstCase() {
method toCamelCase (line 4507) | toCamelCase() {
method constructor (line 4681) | constructor(path2) {
method stat (line 4684) | get stat() {
method exists (line 4694) | exists() {
method mtime (line 4697) | get mtime() {
method touch (line 4700) | touch() {
method constructor (line 4710) | constructor(path2) {
method toFiles (line 4714) | toFiles() {
method constructor (line 4787) | constructor() {
method configure (line 4793) | configure(config) {
method start (line 4798) | async start() {
method constructor (line 4913) | constructor(target, context, dependsOn) {
method resolveDependency (line 4922) | resolveDependency(target) {
method rejectDependency (line 4927) | rejectDependency(target) {
method start (line 4933) | start() {
method onFinish (line 4937) | onFinish(fn) {
method onFail (line 4940) | onFail(fn) {
method debugLog (line 4943) | debugLog(...args) {
method process (line 4946) | async *process() {
method constructor (line 5029) | constructor(target) {
FILE: tools/build/lib/bun.ts
function bun (line 6) | function bun(...args: any[]): Promise<Juke.ExecReturn> {
FILE: tools/build/lib/byond.ts
function getDmPath (line 10) | async function getDmPath(namedVersion?: string | null): Promise<string> {
function getNamedByondVersionPath (line 61) | async function getNamedByondVersionPath(namedVersion: string): Promise<s...
function getDefaultNamedByondVersionPath (line 73) | async function getDefaultNamedByondVersionPath(): Promise<string[]> {
type NamedDmVersion (line 80) | type NamedDmVersion = {
function getAllNamedDmVersions (line 89) | async function getAllNamedDmVersions(
type Option (line 115) | type Option = Partial<{
function DreamMaker (line 122) | async function DreamMaker(
type DDOptions (line 224) | type DDOptions = {
function DreamDaemon (line 229) | async function DreamDaemon(
FILE: tools/build/lib/download.ts
function downloadFile (line 5) | function downloadFile(url: string, file: string): Promise<string> {
FILE: tools/build/lib/helpers.ts
function formatDeps (line 1) | function formatDeps(text: string): Record<string, string> {
FILE: tools/build/lib/tgs.ts
function prependDefines (line 8) | async function prependDefines(...defines: string[]): Promise<void> {
FILE: tools/build/lib/winreg.ts
function regQuery (line 14) | async function regQuery(
FILE: tools/ci/validate_dme.py
function compare_lines (line 73) | def compare_lines(a, b):
FILE: tools/dmi/__init__.py
class Dmi (line 38) | class Dmi:
method __init__ (line 41) | def __init__(self, width, height):
method from_file (line 47) | def from_file(cls, fname):
method state (line 113) | def state(self, *args, **kwargs):
method default_state (line 119) | def default_state(self):
method get_state (line 122) | def get_state(self, name):
method _assemble_comment (line 128) | def _assemble_comment(self):
method to_file (line 155) | def to_file(self, filename, *, palette=False):
class State (line 179) | class State:
method __init__ (line 180) | def __init__(self, dmi, name, *, loop=LOOP_UNLIMITED, rewind=False, mo...
method framecount (line 194) | def framecount(self):
method frame (line 200) | def frame(self, image, *, delay=1):
method hotspot (line 205) | def hotspot(self, first_frame, x, y):
method _frame_index (line 211) | def _frame_index(self, frame=0, dir=None):
method get_frame (line 217) | def get_frame(self, *args, **kwargs):
function escape (line 221) | def escape(text):
function unescape (line 227) | def unescape(text, quote='"'):
function parse_num (line 238) | def parse_num(value):
function parse_bool (line 244) | def parse_bool(value):
FILE: tools/dmi/merge_driver.py
function images_equal (line 7) | def images_equal(left, right):
function states_equal (line 21) | def states_equal(left, right):
function key_of (line 38) | def key_of(state):
function index_of (line 42) | def index_of(state, list):
function determine_insert_index (line 51) | def determine_insert_index(state, old_sheet, new_sheet):
function dictify (line 61) | def dictify(sheet):
function three_way_merge (line 71) | def three_way_merge(base, left, right):
class DmiDriver (line 177) | class DmiDriver(MergeDriver):
method merge (line 180) | def merge(self, base, left, right):
method to_file (line 187) | def to_file(self, outfile, merge_result):
method post_announce (line 190) | def post_announce(self, success, merge_result):
FILE: tools/dmi/test.py
function green (line 6) | def green(text):
function red (line 10) | def red(text):
function _self_test (line 14) | def _self_test():
function _usage (line 56) | def _usage():
function _main (line 62) | def _main():
FILE: tools/dmitool/dmitool.py
function _dmitool_call (line 12) | def _dmitool_call(*dmitool_args, **popen_args):
function parse_prop (line 16) | def parse_prop(dict, key, deferred_value):
function version (line 24) | def version():
function help (line 30) | def help():
function info (line 36) | def info(filepath):
function extract_state (line 80) | def extract_state(input_path, output_path, icon_state, direction=None, f...
function import_state (line 93) | def import_state(target_path, input_path, icon_state, replace=False, del...
FILE: tools/dmitool/src/main/java/dmitool/DMI.java
class DMI (line 27) | public class DMI implements Comparator<IconState> {
method DMI (line 34) | public DMI(int w, int h) {
method DMI (line 42) | public DMI(String f) throws DMIException, FileNotFoundException {
method DMI (line 46) | public DMI(File f) throws DMIException, FileNotFoundException {
method getIconState (line 238) | public IconState getIconState(String name) {
method addIconState (line 250) | public void addIconState(String name, IconState is) {
method removeIconState (line 262) | public boolean removeIconState(String name) {
method setIconState (line 273) | public boolean setIconState(IconState is) {
method fixChunks (line 289) | private static void fixChunks(DataInputStream in, DataOutputStream out...
method compare (line 321) | @Override public int compare(IconState arg0, IconState arg1) {
method writeDMI (line 325) | public void writeDMI(OutputStream os) throws IOException {
method writeDMI (line 328) | public void writeDMI(OutputStream os, boolean sortStates) throws IOExc...
method getDescriptor (line 405) | private String getDescriptor() {
method printInfo (line 422) | public void printInfo() {
method printStateList (line 426) | public void printStateList() {
method equals (line 432) | @Override public boolean equals(Object obj) {
FILE: tools/dmitool/src/main/java/dmitool/DMIDiff.java
class DMIDiff (line 9) | public class DMIDiff {
method DMIDiff (line 14) | DMIDiff() {
method DMIDiff (line 19) | public DMIDiff(DMI base, DMI mod) {
method applyToDMI (line 54) | public void applyToDMI(DMI dmi) {
method mergeDiff (line 74) | public Set<String> mergeDiff(DMIDiff other, DMI conflictDMI, DMIDiff m...
method toString (line 170) | @Override public String toString() {
FILE: tools/dmitool/src/main/java/dmitool/DMIException.java
class DMIException (line 3) | public class DMIException extends Exception {
method DMIException (line 6) | public DMIException(String[] descriptor, int line, String what) {
method DMIException (line 11) | public DMIException(String what) {
method DMIException (line 14) | public DMIException(String what, Exception cause) {
method getMessage (line 18) | @Override public String getMessage() {
FILE: tools/dmitool/src/main/java/dmitool/IconState.java
class IconState (line 12) | public class IconState {
method getInfoLine (line 23) | public String getInfoLine() {
method clone (line 38) | @Override public IconState clone() {
method IconState (line 46) | public IconState(String name, int dirs, int frames, Image[] images, fl...
method setDelays (line 62) | void setDelays(float[] delays) {
method setRewind (line 65) | void setRewind(boolean b) {
method equals (line 68) | @Override public boolean equals(Object obj) {
method infoStr (line 86) | public String infoStr() {
method getDescriptorFragment (line 89) | public String getDescriptorFragment() {
method delayArrayToString (line 114) | private static String delayArrayToString(float[] d) {
method dumpToPNG (line 125) | public void dumpToPNG(OutputStream outS, int minDir, int maxDir, int m...
method importFromPNG (line 166) | public static IconState importFromPNG(DMI dmi, InputStream inS, String...
method getIndex (line 217) | public int getIndex(int dir, int frame) {
method _getIndex (line 221) | private static int _getIndex(int dir, int frame, int totalDirs) {
method insertDir (line 225) | public void insertDir(int dir, Image[] splice) {
method insertFrame (line 232) | public void insertFrame(int frame, Image[] splice) {
method insertImage (line 239) | public void insertImage(int dir, int frame, Image splice) {
FILE: tools/dmitool/src/main/java/dmitool/IconStateDiff.java
class IconStateDiff (line 6) | public class IconStateDiff {
class ISAddress (line 7) | static class ISAddress {
method ISAddress (line 11) | public ISAddress(int dir, int frame) {
method infoStr (line 16) | public String infoStr(int maxDir, int maxFrame) {
method IconStateDiff (line 45) | public IconStateDiff(IconState base, IconState mod) {
method toString (line 84) | @Override public String toString() {
FILE: tools/dmitool/src/main/java/dmitool/Image.java
class Image (line 6) | public abstract class Image {
method getPixel (line 9) | abstract RGBA getPixel(int x, int y);
method Image (line 11) | public Image(int w, int h) {
method equals (line 16) | @Override public boolean equals(Object obj) {
FILE: tools/dmitool/src/main/java/dmitool/Main.java
class Main (line 11) | public class Main {
method main (line 65) | public static void main(String[] args) throws FileNotFoundException, I...
method parseDir (line 460) | static int parseDir(String s, IconState is) {
method parseFrame (line 486) | static int parseFrame(String s, IconState is) {
method doDMILoad (line 501) | static DMI doDMILoad(String file) {
FILE: tools/dmitool/src/main/java/dmitool/NonPalettedImage.java
class NonPalettedImage (line 3) | public class NonPalettedImage extends Image {
method NonPalettedImage (line 6) | public NonPalettedImage(int w, int h, RGBA[][] pixels) {
method getPixel (line 11) | RGBA getPixel(int x, int y) {
FILE: tools/dmitool/src/main/java/dmitool/PNGChunk.java
class PNGChunk (line 7) | public class PNGChunk {
method PNGChunk (line 13) | public PNGChunk(DataInputStream in) throws IOException {
method write (line 21) | void write(DataOutputStream out) throws IOException {
FILE: tools/dmitool/src/main/java/dmitool/PalettedImage.java
class PalettedImage (line 3) | public class PalettedImage extends Image {
method PalettedImage (line 7) | public PalettedImage(int w, int h, int[][] pixels, RGBA[] palette) {
method getPixel (line 13) | RGBA getPixel(int x, int y) {
FILE: tools/dmitool/src/main/java/dmitool/RGBA.java
class RGBA (line 3) | public class RGBA {
method RGBA (line 6) | public RGBA(int r, int g, int b, int a) {
method toString (line 13) | @Override
method equals (line 21) | @Override public boolean equals(Object obj) {
method toRGBA8888 (line 30) | public long toRGBA8888() {
FILE: tools/expand_filedir_paths.py
function read_filedirs (line 20) | def read_filedirs(filename):
function index_files (line 37) | def index_files(file_dirs):
function rewrite_sources (line 56) | def rewrite_sources(resources):
FILE: tools/hooks/install.py
function write_hook (line 20) | def write_hook(fname, command):
function _find_stuff (line 31) | def _find_stuff(target=None):
function uninstall (line 40) | def uninstall(target=None, keep=()):
function install (line 66) | def install(target=None):
function main (line 102) | def main(argv):
FILE: tools/hooks/merge_frontend.py
class MergeReturn (line 13) | class MergeReturn(typing.NamedTuple):
class MergeDriver (line 18) | class MergeDriver:
method pre_announce (line 21) | def pre_announce(self, path: str):
method merge (line 27) | def merge(self, base: typing.BinaryIO, left: typing.BinaryIO, right: t...
method to_file (line 39) | def to_file(self, output: typing.BinaryIO, merge_result: object):
method post_announce (line 52) | def post_announce(self, success: bool, merge_result: object):
method main (line 63) | def main(self, args: typing.List[str] = None):
function _main (line 67) | def _main(driver: MergeDriver, args: typing.List[str]):
function _driver_main (line 74) | def _driver_main(driver: MergeDriver, args: typing.List[str]):
function _posthoc_main (line 102) | def _posthoc_main(driver: MergeDriver, args: typing.List[str]):
function _applies_to (line 163) | def _applies_to(repo: pygit2.Repository, driver: MergeDriver, path: str):
FILE: tools/localhost-asset-webroot-server.py
class CORSRequestHandler (line 5) | class CORSRequestHandler(SimpleHTTPRequestHandler):
method end_headers (line 6) | def end_headers(self):
FILE: tools/maplint/source/__main__.py
function green (line 10) | def green(text):
function red (line 13) | def red(text):
function process_dmm (line 16) | def process_dmm(map_filename, lints: dict[str, lint.Lint]) -> list[Mapli...
function print_error (line 40) | def print_error(message: str, filename: str, line_number: int, github_er...
function print_maplint_error (line 46) | def print_maplint_error(error: MaplintError, github_error_style: bool):
function print_maplint_suggestions (line 54) | def print_maplint_suggestions(all_suggestions: dict[str, MaplintError], ...
function main (line 81) | def main(args):
FILE: tools/maplint/source/common.py
class Typepath (line 8) | class Typepath:
method __init__ (line 12) | def __init__(self, path):
method __eq__ (line 19) | def __eq__(self, other):
method __str__ (line 25) | def __str__(self) -> str:
class Filename (line 29) | class Filename:
class Null (line 33) | class Null:
FILE: tools/maplint/source/dmm.py
class Content (line 16) | class Content:
class DMM (line 23) | class DMM:
method size (line 29) | def size(self):
method turfs_for_pop (line 32) | def turfs_for_pop(self, key: str):
class DMMParser (line 39) | class DMMParser:
method __init__ (line 43) | def __init__(self, reader: IO):
method parse (line 47) | def parse(self):
method next_line (line 62) | def next_line(self):
method parse_pop (line 70) | def parse_pop(self):
method parse_var_edit (line 110) | def parse_var_edit(self):
method parse_constant (line 122) | def parse_constant(self, constant):
method parse_row (line 143) | def parse_row(self):
method safe_float (line 181) | def safe_float(self, value):
method expect (line 187) | def expect(self, condition, message):
method raise_error (line 191) | def raise_error(self, message):
function parse_dmm (line 194) | def parse_dmm(reader: IO):
FILE: tools/maplint/source/error.py
class MaplintError (line 3) | class MaplintError(Exception):
method __init__ (line 30) | def __init__(self, message: str, file_name: str, line_number = 1, path...
class MapParseError (line 39) | class MapParseError(Exception):
FILE: tools/maplint/source/lint.py
function expect (line 8) | def expect(condition, message):
function fail_content (line 12) | def fail_content(content: Content, message: str, path_suggestion = "", d...
class TypepathExtra (line 16) | class TypepathExtra:
method __init__ (line 21) | def __init__(self, typepath):
method matches_path (line 32) | def matches_path(self, path: Typepath):
class BannedNeighbor (line 44) | class BannedNeighbor:
method __init__ (line 49) | def __init__(self, typepath, data = {}):
method matches (line 67) | def matches(self, identified: Content, neighbor: Content):
function extract_choices (line 89) | def extract_choices(data, key) -> Optional[Choices]:
class BannedVariable (line 116) | class BannedVariable:
method __init__ (line 121) | def __init__(self, variable, data = {}):
method run (line 132) | def run(self, identified: Content) -> str:
class Rules (line 156) | class Rules:
method __init__ (line 161) | def __init__(self, data):
method run (line 192) | def run(self, identified: Content, contents: list[Content], identified...
method parse_suggestion (line 220) | def parse_suggestion(self, identified):
method parse_direction (line 276) | def parse_direction(self, number):
class Lint (line 299) | class Lint:
method __init__ (line 303) | def __init__(self, data):
method run (line 316) | def run(self, map_data: DMM) -> list[MaplintError]:
FILE: tools/mapmerge2/dmm.py
class DMM (line 13) | class DMM:
method __init__ (line 16) | def __init__(self, key_length, size):
method from_file (line 25) | def from_file(fname):
method from_file_bytes (line 30) | def from_file_bytes(fname):
method from_bytes (line 35) | def from_bytes(bytes):
method to_file (line 38) | def to_file(self, fname, *, tgm = True):
method to_bytes (line 43) | def to_bytes(self, *, tgm = True):
method get_or_generate_key (line 51) | def get_or_generate_key(self, tile):
method get_tile (line 59) | def get_tile(self, coord):
method set_tile (line 62) | def set_tile(self, coord, tile):
method generate_new_key (line 66) | def generate_new_key(self):
method overwrite_key (line 79) | def overwrite_key(self, key, fixed, bad_keys):
method reassign_bad_keys (line 89) | def reassign_bad_keys(self, bad_keys):
method remove_unused_keys (line 96) | def remove_unused_keys(self, modified_keys = None):
method _presave_checks (line 105) | def _presave_checks(self):
method _ensure_free_keys (line 128) | def _ensure_free_keys(self, desired):
method coords_zyx (line 139) | def coords_zyx(self):
method coords_z (line 146) | def coords_z(self):
method coords_yx (line 150) | def coords_yx(self):
method __repr__ (line 155) | def __repr__(self):
function key_to_num (line 168) | def key_to_num(key):
function num_to_key (line 174) | def num_to_key(num, key_length, allow_overflow=False):
function max_key_for (line 186) | def max_key_for(key_length):
class KeyTooLarge (line 191) | class KeyTooLarge(Exception):
function parse_map_atom (line 197) | def parse_map_atom(atom):
function is_bad_atom_ordering (line 236) | def is_bad_atom_ordering(key, atoms):
function split_atom_groups (line 260) | def split_atom_groups(atoms):
function fix_atom_ordering (line 271) | def fix_atom_ordering(atoms):
function save_tgm (line 280) | def save_tgm(dmm, output):
function save_dmm (line 329) | def save_dmm(dmm, output):
function _parse (line 356) | def _parse(map_raw_text):
FILE: tools/mapmerge2/dmm_test.py
function green (line 8) | def green(text):
function red (line 11) | def red(text):
function has_tgm_header (line 14) | def has_tgm_header(fname):
class LintException (line 19) | class LintException(Exception):
function _self_test (line 22) | def _self_test():
function _usage (line 107) | def _usage():
function _main (line 113) | def _main():
FILE: tools/mapmerge2/fixup.py
function walk_tree (line 24) | def walk_tree(tree, *, _prefix=''):
function insert_into_tree (line 32) | def insert_into_tree(repo, tree_builder, path, blob_oid):
function main (line 43) | def main(repo : pygit2.Repository):
FILE: tools/mapmerge2/frontend.py
function string_to_num (line 11) | def string_to_num(s):
function read_settings (line 17) | def read_settings():
function pretty_path (line 35) | def pretty_path(settings, path_str):
function prompt_maps (line 41) | def prompt_maps(settings, verb):
function process (line 79) | def process(settings, verb, *, modify=True, backup=None):
FILE: tools/mapmerge2/mapmerge.py
function merge_map (line 7) | def merge_map(new_map, old_map, delete_unused=True, suppress_notices=Fal...
function main (line 87) | def main(settings):
FILE: tools/mapmerge2/merge_driver.py
function select (line 11) | def select(base, left, right, *, debug=None):
function three_way_merge (line 34) | def three_way_merge(base, left, right):
class DmmDriver (line 103) | class DmmDriver(MergeDriver):
method merge (line 106) | def merge(self, base, left, right):
method to_file (line 113) | def to_file(self, outfile, merge_result):
method post_announce (line 116) | def post_announce(self, success, merge_result):
FILE: tools/mapmerge2/precommit.py
function main (line 9) | def main(repo, *, use_workdir=False):
FILE: tools/pull_request_hooks/autoChangelog.js
function changelogToYml (line 6) | function changelogToYml(changelog, login) {
function processAutoChangelog (line 23) | async function processAutoChangelog({ github, context }) {
FILE: tools/pull_request_hooks/changelogConfig.js
constant CHANGELOG_ENTRIES (line 10) | const CHANGELOG_ENTRIES = [
constant CHANGELOG_OPEN_TAGS (line 156) | const CHANGELOG_OPEN_TAGS = [":cl:", "??"];
constant CHANGELOG_CLOSE_TAGS (line 159) | const CHANGELOG_CLOSE_TAGS = ["/:cl:", "/ :cl:", ":/cl:", "/??", "/ ??"];
constant CHANGELOG_AUTHOR_PLACEHOLDER_NAME (line 162) | const CHANGELOG_AUTHOR_PLACEHOLDER_NAME = "optional name here";
FILE: tools/pull_request_hooks/changelogParser.js
constant REGEX_CHANGELOG_LINE (line 3) | const REGEX_CHANGELOG_LINE = /^(\w+): (.+)$/;
constant CHANGELOG_KEYS_TO_ENTRY (line 5) | const CHANGELOG_KEYS_TO_ENTRY = {};
function parseChangelogBody (line 17) | function parseChangelogBody(lines, openTag) {
function parseChangelog (line 66) | function parseChangelog(text) {
FILE: tools/pull_request_hooks/removeGuideComments.js
constant REGEX_COMMENT (line 3) | const REGEX_COMMENT = /<!--.+?-->/g;
function escapeRegex (line 14) | function escapeRegex(string) {
function removeGuideComments (line 18) | async function removeGuideComments({ github, context }) {
FILE: tools/pull_request_hooks/rerunFlakyTests.js
constant LABEL (line 1) | const LABEL = "🤖 Flaky Test Report";
constant TITLE_BOT_HEADER (line 2) | const TITLE_BOT_HEADER = "title: ";
constant CONSIDERED_JOBS (line 6) | const CONSIDERED_JOBS = ["Unit Tests"];
function getFailedJobsForRun (line 8) | async function getFailedJobsForRun(github, context, workflowRunId, runAt...
function rerunFlakyTests (line 25) | async function rerunFlakyTests({ github, context }) {
function extractDetails (line 54) | function extractDetails(log) {
function getExistingIssueId (line 155) | async function getExistingIssueId(graphql, context, title) {
function createBody (line 204) | function createBody({ title, failures }, runUrl) {
function reportFlakyTests (line 225) | async function reportFlakyTests({ github, context }) {
FILE: tools/runtimes/post_runtime.py
function handle_issue (line 27) | def handle_issue(pid, pat, repo_path):
FILE: tools/runtimes/runtime.py
class Runtime (line 5) | class Runtime:
method __init__ (line 40) | def __init__(self, message, file, line, desc):
method set_branch (line 46) | def set_branch(self, branch):
method get_msg (line 49) | def get_msg(self):
method get_file (line 56) | def get_file(self):
method get_line (line 63) | def get_line(self):
method get_desc (line 70) | def get_desc(self):
method get_title (line 77) | def get_title(self):
method get_body (line 84) | def get_body(self):
Copy disabled (too large)
Download .json
Condensed preview — 9097 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (76,989K chars).
[
{
"path": ".dockerignore",
"chars": 177,
"preview": "/.git\n/.gitlab-ci.yml\n/.github\n/.vscode\n/*.txt\n/bin\n/tmp\n/data\n/cfg\n/scripts\n/.gitlab\n/.vscode\n/tools/dmitool\n/tools/run"
},
{
"path": ".editorconfig",
"chars": 238,
"preview": "[*]\nindent_style = tab\nindent_size = 4\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nend_o"
},
{
"path": ".gitattributes",
"chars": 803,
"preview": "* text=auto\n\n## Enforce text mode and LF line breaks\n*.bat text eol=lf\n*.cjs text eol=lf\n*.css text eol=lf\n*.dm text eol"
},
{
"path": ".github/CODEOWNERS",
"chars": 1258,
"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/CONTRIBUTING.md",
"chars": 17845,
"preview": "# CONTRIBUTING TO CM-SS13\n\n- [CONTRIBUTING TO CM-SS13](#contributing-to-cm-ss13)\n\t- [Reporting Issues](#reporting-issues"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1909,
"preview": "name: Bug Report\ndescription: File a bug report\nlabels: [\"Bug\"]\nbody:\n - type: input\n id: current-tms\n attributes"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 369,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: PR Feedback\n url: https://forum.cm-ss13.com/w/pr-feedback\n ab"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 3045,
"preview": "<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. -->\n\n# About the pull request\n\n"
},
{
"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_bun/action.yml",
"chars": 514,
"preview": "# This action is a wrapper around `oven-sh/setup-bun` to use the version specified in\n# `dependencies.sh`.\nname: Setup B"
},
{
"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/add_labels.py",
"chars": 3863,
"preview": "import os, re\nfrom github import Auth, Github, GithubIntegration, GithubException\n\n# Format - Key: Array[Label, [Strings"
},
{
"path": ".github/alternate_byond_versions.txt",
"chars": 311,
"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/AUTODOC.md",
"chars": 3955,
"preview": "# dmdoc\n[DOCUMENTATION]: https://docs.cm-ss13.com/\n\n[BYOND]: https://secure.byond.com/\n\n[DMDOC]: https://github.com/Spac"
},
{
"path": ".github/guides/STANDARDS.md",
"chars": 26575,
"preview": "# Code Standards\n\nThese are our code standards. They include information about how to properly work with our code, rules"
},
{
"path": ".github/guides/STYLES.md",
"chars": 12742,
"preview": "# Style Guide\nThis is the style you must follow when writing code. It's important to note that large parts of the codeba"
},
{
"path": ".github/maps_to_ignore.txt",
"chars": 47,
"preview": "chinook\ncorsat\nice_colony_v2\nprison_station_fop"
},
{
"path": ".github/ss13_genchangelog.py",
"chars": 5434,
"preview": "'''\nUsage:\n $ python ss13_genchangelog.py html/changelogs/\n\nss13_genchangelog.py - Generate changelog from YAML.\n\nCop"
},
{
"path": ".github/workflows/auto_changelog.yml",
"chars": 1038,
"preview": "# Creates an entry in html/changelogs automatically, to eventually be compiled by compile_changelogs\nname: Auto Changelo"
},
{
"path": ".github/workflows/autowiki.yml",
"chars": 1564,
"preview": "name: Autowiki\non:\n schedule:\n - cron: \"5 4 * * *\"\n workflow_dispatch:\npermissions:\n contents: read\n\njobs:\n autowik"
},
{
"path": ".github/workflows/ci_suite.yml",
"chars": 7559,
"preview": "name: CI Suite\non:\n pull_request:\n branches:\n - master\n merge_group:\njobs:\n run_linters:\n if: ( !contains(gi"
},
{
"path": ".github/workflows/compile_changelogs.yml",
"chars": 2512,
"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/conflicts.yml",
"chars": 629,
"preview": "name: 'Check for merge conflicts'\non:\n push:\n branches:\n - master\n pull_request_target:\n types: [ready_for_"
},
{
"path": ".github/workflows/generate_web_assets.yml",
"chars": 1058,
"preview": "name: Generate web assets\non:\n push:\n branches:\n - master\njobs:\n generate_static_assets:\n if: ( !contains(git"
},
{
"path": ".github/workflows/labeler.yml",
"chars": 2479,
"preview": "name: Labeling and Verification\non:\n pull_request_target:\n types: [opened, reopened, synchronize, edited]\njobs:\n la"
},
{
"path": ".github/workflows/release.yml",
"chars": 1436,
"preview": "name: Build and Release\n\non:\n push:\n branches:\n - master\n\nconcurrency:\n group: build-and-release\n cancel-in-p"
},
{
"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/rerun_flaky_tests.yml",
"chars": 1104,
"preview": "name: Rerun/Report Flaky Tests\non:\n workflow_run:\n workflows: [CI Suite]\n types:\n - completed\njobs:\n rerun_fl"
},
{
"path": ".github/workflows/run_approval.yml",
"chars": 638,
"preview": "name: Automatic Approve Workflows\non:\n schedule:\n - cron: \"*/10 * * * *\"\njobs:\n automatic-approve:\n name: Automa"
},
{
"path": ".github/workflows/run_unit_tests.yml",
"chars": 1343,
"preview": "# This is a reusable workflow to run unit tests on a single map.\n# This is run for every single map in ci_suite.yml. You"
},
{
"path": ".github/workflows/stale.yml",
"chars": 1468,
"preview": "name: Mark stale issues and pull requests\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n workflow_dispatch:\n\njobs:\n stale:\n\n "
},
{
"path": ".github/workflows/update_tgs_dmapi.yml",
"chars": 1712,
"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": 540,
"preview": "#ignore misc BYOND files\nThumbs.db\n*.log\n*.int\n*.rsc\n*.m.dme\n*.rej\n*.dmb\n*.lk\n*.backup\n*.db\n*.db-shm\n*.db-wal\ndata/\ncfg/"
},
{
"path": ".prettierignore",
"chars": 208,
"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": ".tgs.yml",
"chars": 333,
"preview": "version: 1\nbyond: \"515.1627\"\nstatic_files:\n - name: config\n - name: data\nlinux_scripts:\n PreCompile.sh: tools/tgs_scr"
},
{
"path": ".vscode/extensions.json",
"chars": 68,
"preview": "{\n \"recommendations\": [\n \"cmss13-devs.cm-extpack\"\n ]\n}\n"
},
{
"path": ".vscode/launch.json",
"chars": 4578,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"type\": \"byond\",\n \"request\": \"launch\""
},
{
"path": ".vscode/settings.json",
"chars": 4138,
"preview": "{\n\t\"eslint.workingDirectories\": [\"./tgui\"],\n\t\"search.exclude\": {\n\t\t\"**/node_modules\": true\n\t},\n\t\"editor.codeActionsOnSav"
},
{
"path": ".vscode/tasks.json",
"chars": 7271,
"preview": "{\n \"version\": \"2.0.0\",\n \"tasks\": [\n {\n \"type\": \"process\",\n \"command\": \"tools/build/bu"
},
{
"path": "BUILD.cmd",
"chars": 70,
"preview": "@echo off\ncall \"%~dp0\\tools\\build\\build.bat\" --wait-on-error build %*\n"
},
{
"path": "Dockerfile",
"chars": 3717,
"preview": "# TODO: Use an .envfile and make everyone use it instead\nARG BYOND_BASE_IMAGE=ubuntu:focal\nARG UTILITY_BASE_IMAGE=alpine"
},
{
"path": "LICENSE-AGPLv3.txt",
"chars": 34503,
"preview": " GNU AFFERO GENERAL PUBLIC LICENSE\n Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software"
},
{
"path": "LICENSE-CC-BY-SA-3.0.txt",
"chars": 22240,
"preview": "Creative Commons Legal Code\n\nAttribution-ShareAlike 3.0 Unported\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND"
},
{
"path": "LICENSE-GPLv3.txt",
"chars": 35140,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 5726,
"preview": "<p align=\"center\">\n\t<a href=\"#\"><img src=\".github/assets/logo.png\" alt=\"CM-SS13\" align=\"center\"></a>\n</p>\n<hr />\n\n<p ali"
},
{
"path": "SpacemanDMM.toml",
"chars": 313,
"preview": "[display]\nerror_level = \"hints\"\n\n[code_standards]\ndisallow_relative_type_definitions = true\ndisallow_relative_proc_defin"
},
{
"path": "bin/build.cmd",
"chars": 73,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error build %*\n"
},
{
"path": "bin/clean.cmd",
"chars": 77,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error clean-all %*\n"
},
{
"path": "bin/server.cmd",
"chars": 74,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error server %*\n"
},
{
"path": "bin/test.cmd",
"chars": 75,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error dm-test %*\n"
},
{
"path": "bin/tgfont.cmd",
"chars": 75,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error tg-font %*\n"
},
{
"path": "bin/tgui-build.cmd",
"chars": 92,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error tgui tgui-lint tgui-test %*\n"
},
{
"path": "bin/tgui-dev.cmd",
"chars": 76,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error tgui-dev %*\n"
},
{
"path": "bin/tgui-fix.cmd",
"chars": 76,
"preview": "@echo off\ncall \"%~dp0\\..\\tools\\build\\build.bat\" --wait-on-error tgui-fix %*\n"
},
{
"path": "cfg/.keep",
"chars": 0,
"preview": ""
},
{
"path": "code/__DEFINES/ARES.dm",
"chars": 3301,
"preview": "#define ARES_ACCESS_LOGOUT 0\n/// Generic access for 1:1 conversations with ARES and unrestricted commands.\n#define ARES_"
},
{
"path": "code/__DEFINES/MC.dm",
"chars": 5860,
"preview": "#define MC_TICK_CHECK ( ( TICK_USAGE > Master.current_ticklimit || src.state != SS_RUNNING ) ? pause() : 0 )\n\n#define MC"
},
{
"path": "code/__DEFINES/STUI.dm",
"chars": 227,
"preview": "#define STUI_LOG_ATTACK 1\n#define STUI_LOG_ADMIN 2\n#define STUI_LOG_STAFF_CHAT 4\n#define STUI_LOG_OOC_CHAT 8\n#defin"
},
{
"path": "code/__DEFINES/__game.dm",
"chars": 20116,
"preview": "//Admin perms are in global.dm.\n\n/// To make it even more clear that something is a bitfield.\n#define NO_FLAGS 0\n\n#defin"
},
{
"path": "code/__DEFINES/__rust_g.dm",
"chars": 30480,
"preview": "// rust_g.dm - DM API for rust_g extension library\n//\n// To configure, create a `rust_g.config.dm` and set what you care"
},
{
"path": "code/__DEFINES/__rust_g_redis-pubsub.dm",
"chars": 487,
"preview": "#define RUSTG_REDIS_ERROR_CHANNEL \"RUSTG_REDIS_ERROR_CHANNEL\"\n\n#define rustg_redis_connect(addr) RUSTG_CALL(RUST_G, \"red"
},
{
"path": "code/__DEFINES/__spacemandmm.dm",
"chars": 1543,
"preview": "// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter\n// is not in use.\n\n// The SPACEMAN_DMM def"
},
{
"path": "code/__DEFINES/_bitfields.dm",
"chars": 124,
"preview": "#define DEFINE_BITFIELD(_variable, _flags) /datum/bitfield/##_variable { \\\n\tflags = ##_flags; \\\n\tvariable = #_variable; "
},
{
"path": "code/__DEFINES/_click.dm",
"chars": 1685,
"preview": "//Defines file for click related parameters\n//this is mostly for ease of use and for finding all the things that use say"
},
{
"path": "code/__DEFINES/_globals.dm",
"chars": 4941,
"preview": "//See also controllers/globals.dm\n\n/// Creates a global initializer with a given InitValue expression, do not use\n#defin"
},
{
"path": "code/__DEFINES/_macros.dm",
"chars": 661,
"preview": "\n//CPU lag shit\n\n/// Converts your ticks to proper tenths.\n#define calculateticks(x) x * world.tick_lag\n/// Shorthand of"
},
{
"path": "code/__DEFINES/_math.dm",
"chars": 1227,
"preview": "/**\n * Get the turf that `A` resides in, regardless of any containers.\n *\n * Use in favor of `A.loc` or `src.loc` so tha"
},
{
"path": "code/__DEFINES/_protect.dm",
"chars": 196,
"preview": "#define GENERAL_PROTECT_DATUM(Path)\\\n##Path/can_vv_get(var_name){\\\n\treturn FALSE;\\\n}\\\n##Path/vv_edit_var(var_name, var_v"
},
{
"path": "code/__DEFINES/_tick.dm",
"chars": 1028,
"preview": "#define MAPTICK_LAST_INTERNAL_TICK_USAGE (world.map_cpu)\n\n/// Tick limit while running normally\n#define TICK_BYOND_RESER"
},
{
"path": "code/__DEFINES/access.dm",
"chars": 7040,
"preview": "\n/*Access levels. Changed into defines, since that's what they should be.\nIt's best not to mess with the numbers of the "
},
{
"path": "code/__DEFINES/admin.dm",
"chars": 5532,
"preview": "#define WRAP_STAFF_LOG(X, M) \"[key_name(X)] [M]\"\n\n#define DMM_COORDINATE_COMMAND \"//coord\"\n\n///Max length of a keypress "
},
{
"path": "code/__DEFINES/alerts.dm",
"chars": 292,
"preview": "#define ALERT_BUCKLED \"buckled\"\n#define ALERT_HANDCUFFED \"handcuffed\"\n#define ALERT_LEGCUFFED \"legcuffed\"\n#define ALERT_"
},
{
"path": "code/__DEFINES/assert.dm",
"chars": 391,
"preview": "#undef ASSERT\n\n/// Override BYOND's native ASSERT to optionally specify a message\n#define ASSERT(condition, message...) "
},
{
"path": "code/__DEFINES/atmospherics.dm",
"chars": 2754,
"preview": "/// This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature da"
},
{
"path": "code/__DEFINES/autofire.dm",
"chars": 359,
"preview": "// Controls how many buckets should be kept, each representing a tick. Max is ten seconds, to have better perf.\n#define "
},
{
"path": "code/__DEFINES/autolathe.dm",
"chars": 1845,
"preview": "/// CATEGORY DEFINES\n\n#define AUTOLATHE_CATEGORY_ALL \"All\"\n\n///standard lathe\n#define AUTOLATHE_STANDARD_CATEGORIES_LIST"
},
{
"path": "code/__DEFINES/autowiki.dm",
"chars": 208,
"preview": "#ifdef AUTOWIKI\n\t#define AUTOWIKI_SKIP(skip) autowiki_skip = skip\n\t#define IS_AUTOWIKI_SKIP(datum) datum.autowiki_skip\n#"
},
{
"path": "code/__DEFINES/blood.dm",
"chars": 499,
"preview": "// blood_flags\n#define BLOOD_BODY (1<<0)\n#define BLOOD_HANDS (1<<1)\n#define BLOOD_FEET (1<<2)\n\n#define BLOOD_ALL (BLOOD_"
},
{
"path": "code/__DEFINES/bsql.config.dm",
"chars": 337,
"preview": "#define BSQL_EXTERNAL_CONFIGURATION\n#define BSQL_DEL_PROC(path) ##path/Destroy()\n#define BSQL_DEL_CALL(obj) qdel(##obj)\n"
},
{
"path": "code/__DEFINES/bullet_traits.dm",
"chars": 929,
"preview": "// The way bullet traits are added to projectiles, you pass an assoc list\n// where they key is the trait typepath or an "
},
{
"path": "code/__DEFINES/callback.dm",
"chars": 354,
"preview": "#define CALLBACK new /datum/callback\n#define DYNAMIC new /datum/callback/dynamic\n#define INVOKE_ASYNC ImmediateInvokeAsy"
},
{
"path": "code/__DEFINES/camera.dm",
"chars": 1070,
"preview": "// Networks\n#define CAMERA_NET_ALMAYER \"Almayer\"\n#define CAMERA_NET_CONTAINMENT \"Containment\"\n#define CAMERA_NET_CONTAIN"
},
{
"path": "code/__DEFINES/chat.dm",
"chars": 1695,
"preview": "/*!\n * Copyright (c) 2020 Aleksej Komarov\n * SPDX-License-Identifier: MIT\n */\n\n/// How many chat payloads to keep in his"
},
{
"path": "code/__DEFINES/chemistry.dm",
"chars": 15183,
"preview": "/*\n * Chemistry defines\n */\n\n/// Amount of bottle icon variations in total\n#define BOTTLE_ICON_CHOICES 4\n/// Amount of r"
},
{
"path": "code/__DEFINES/clans.dm",
"chars": 4029,
"preview": "#define CLAN_PERMISSION_USER_VIEW 1\n\n/// Modify ranks within clan\n#define CLAN_PERMISSION_USER_MODIFY 2\n\n#define CLAN_PE"
},
{
"path": "code/__DEFINES/client.dm",
"chars": 383,
"preview": "#define CLIENT_VERB(verb_name, args...)\\\n/client/collect_client_verbs(){\\\n\t. = ..();\\\n\t. += /client/proc/##verb_name;\\\n}"
},
{
"path": "code/__DEFINES/client_prefs.dm",
"chars": 6055,
"preview": "//=================================================\n#define BE_ALIEN (1<<0)\n// 1<<1 was BE_AGENT\n#define BE_KING (1<<2)\n"
},
{
"path": "code/__DEFINES/colours.dm",
"chars": 5460,
"preview": "// tg port thing\n\n//different types of atom colorations\n/// Only used by rare effects like greentext coloring mobs and w"
},
{
"path": "code/__DEFINES/combat.dm",
"chars": 1136,
"preview": "#define MELEE_FORCE_TIER_1 5\n#define MELEE_FORCE_TIER_2 10\n#define MELEE_FORCE_TIER_3 15\n#define MELEE_FORCE_TIER_4 20\n#"
},
{
"path": "code/__DEFINES/configuration.dm",
"chars": 531,
"preview": "//config files\n#define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X)\n#define CONFIG_SET(X, Y) global.config.S"
},
{
"path": "code/__DEFINES/conflict.dm",
"chars": 10536,
"preview": "//Grab levels\n#define GRAB_PASSIVE 0\n#define GRAB_AGGRESSIVE 1\n#define GRAB_CARRY 2\n#define GRAB_CHOKE 3\n\n//Ammo def"
},
{
"path": "code/__DEFINES/cooldowns.dm",
"chars": 3763,
"preview": "#define COOLDOWN_MOB_AUDIO \"mob_audio_cooldown\"\n#define COOLDOWN_IDLOCK_TEXTALERT \"mob_idlock_textalert\"\n#define COOLDOW"
},
{
"path": "code/__DEFINES/db_defs.dm",
"chars": 5252,
"preview": "// MIT License\n\n// Copyright (c) 2020 Neth Iafin\n\n// Permission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "code/__DEFINES/dcs/flags.dm",
"chars": 1729,
"preview": "/// Return this from `/datum/component/Initialize` or `datum/component/OnTransfer` to have the component be deleted if i"
},
{
"path": "code/__DEFINES/dcs/helpers.dm",
"chars": 1330,
"preview": "/// Used to trigger signals and call procs registered for that signal\n/// The datum hosting the signal is automaticaly a"
},
{
"path": "code/__DEFINES/dcs/signals/atom/mob/living/signals_human.dm",
"chars": 4442,
"preview": "///from /mob/living/carbon/human/proc/force_say(): ()\n#define COMSIG_HUMAN_FORCESAY \"human_forcesay\"\n\n/// From /mob/livi"
},
{
"path": "code/__DEFINES/dcs/signals/atom/mob/living/signals_living.dm",
"chars": 2721,
"preview": "/// From /mob/living/verb/resist()\n#define COMSIG_MOB_RESISTED \"mob_resist\"\n/// From /mob/living/verb/resist()\n#define C"
},
{
"path": "code/__DEFINES/dcs/signals/atom/mob/living/signals_xeno.dm",
"chars": 4556,
"preview": "/// from /mob/living/carbon/xenomorph/attack_alien()\n#define COMSIG_XENO_ALIEN_ATTACK \"xeno_alien_attack\"\n\n#define COMSI"
},
{
"path": "code/__DEFINES/dcs/signals/atom/mob/signals_mind.dm",
"chars": 159,
"preview": "///from mind/transfer_to. Sent after the mind has been transferred to a different body: (mob/previous_body)\n#define COMS"
},
{
"path": "code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm",
"chars": 8413,
"preview": "///from base of mob/set_stat(): (new_stat, old_stat)\n#define COMSIG_MOB_STATCHANGE \"mob_statchange\"\n/// From /obj/struct"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_area.dm",
"chars": 95,
"preview": "/// From /area/proc/purge_weeds()\n#define COMSIG_AREA_RESIN_DISALLOWED \"area_weeds_disallowed\"\n"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_atom.dm",
"chars": 3090,
"preview": "/// From /atom/proc/Decorate\n#define COMSIG_ATOM_DECORATED \"atom_decorated\"\n//from SSatoms InitAtom - Only if the atom "
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_cell.dm",
"chars": 789,
"preview": "/// (charge_amount)\n#define COMSIG_CELL_USE_CHARGE \"cell_use_charge\"\n\t#define COMPONENT_CELL_NO_USE_CHARGE (1<<0)\n\n/// ("
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_gun.dm",
"chars": 1691,
"preview": "#define COMSIG_GUN_FIRE \"gun_fire\"\n#define COMSIG_GUN_STOP_FIRE \"gun_stop_fire\"\n#define COMSIG_GUN_FIRE_MODE_TOGGLE \"gun"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_item.dm",
"chars": 2881,
"preview": "#define COMSIG_ITEM_ATTACK \"item_attack\" //Triggered on the item.\n#define COMSIG_ITEM_ATTEMPT_ATTACK \"item_attempt_attac"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_movable.dm",
"chars": 2092,
"preview": "//from base of atom/movable/onTransitZ(): (old_z, new_z)\n#define COMSIG_MOVABLE_Z_CHANGED \"movable_ztransit\"\n\n/// From /"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_obj.dm",
"chars": 3404,
"preview": "// From obj/limb/proc/take_damage()\n// Sent after the limb has taken damage\n#define COMSIG_LIMB_TAKEN_DAMAGE \"limb_taken"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_projectile.dm",
"chars": 1727,
"preview": "/// Called when a bullet hits a living mob\n#define COMSIG_BULLET_ACT_LIVING \"bullet_act_living\"\n/// Called when a bullet"
},
{
"path": "code/__DEFINES/dcs/signals/atom/signals_turf.dm",
"chars": 1400,
"preview": "///from /turf/Entered\n#define COMSIG_MOVABLE_TURF_ENTERED \"movable_turf_entered\"\n\n/// from base of turf/ChangeTurf(): (p"
},
{
"path": "code/__DEFINES/dcs/signals/signals_admin.dm",
"chars": 309,
"preview": "/// Called on the /datum/admin_help when the player replies. From /client/proc/cmd_admin_pm().\n#define COMSIG_ADMIN_HELP"
},
{
"path": "code/__DEFINES/dcs/signals/signals_client.dm",
"chars": 2247,
"preview": "#define COMSIG_CLIENT_LMB_DOWN \"client_lmb_down\"\n#define COMSIG_CLIENT_LMB_UP \"client_lmb_up\"\n#define COMSIG_CLIENT_LMB_"
},
{
"path": "code/__DEFINES/dcs/signals/signals_datum.dm",
"chars": 3388,
"preview": "/// when a component is added to a datum: (/datum/component)\n#define COMSIG_COMPONENT_ADDED \"component_added\"\n/// before"
},
{
"path": "code/__DEFINES/dcs/signals/signals_global.dm",
"chars": 4160,
"preview": "// Format:\n// When the signal is called: (signal arguments)\n// All signals send the source datum of the signal as the fi"
},
{
"path": "code/__DEFINES/dcs/signals/signals_subsystem.dm",
"chars": 297,
"preview": "// Subsystem signals. Format:\n// When the signal is called: (signal arguments)\n// All signals send the source datum of t"
},
{
"path": "code/__DEFINES/defenses.dm",
"chars": 1283,
"preview": "// Defines for wall states\n#define WALL_STATE_WELD 0\n#define WALL_STATE_SCREW 1\n#define WALL_STATE_WIRECUTTER 2\n#define "
},
{
"path": "code/__DEFINES/dropships.dm",
"chars": 617,
"preview": "// Legacy identifiers of dropship hardpoint/equipment types\n#define DROPSHIP_WEAPON \"dropship_weapon\"\n#define DROPSHIP_C"
},
{
"path": "code/__DEFINES/emote_panels.dm",
"chars": 742,
"preview": "#define JOE_EMOTE_CATEGORY_GREETING \"Greeting\"\n#define JOE_EMOTE_CATEGORY_TASK_UPDATE \"Task Update\"\n#define JOE_EMOTE_CA"
},
{
"path": "code/__DEFINES/equipment.dm",
"chars": 25415,
"preview": "//FLAGS BITMASK\n\n\n//==========================================================================================\n\n//flags_"
},
{
"path": "code/__DEFINES/events.dm",
"chars": 101,
"preview": "#define EVENT_CANT_RUN 0\n#define EVENT_READY 1\n#define EVENT_CANCELLED 2\n#define EVENT_INTERRUPTED 3\n"
},
{
"path": "code/__DEFINES/fire.dm",
"chars": 155,
"preview": "#define FIRE_DAMAGE_PER_LEVEL 3\n#define FIRE_DAMAGE_PER_LEVEL_MOB 1.5\n\n#define IGNITE_FAILED 0\n#define IGNITE_ON_FIRE (1"
},
{
"path": "code/__DEFINES/flags.dm",
"chars": 1432,
"preview": "#define HAS_FLAG(variable, flag) ((variable) & (flag))\n\n// better bitfield macros\n#define ENABLE_BITFIELD(variable, flag"
},
{
"path": "code/__DEFINES/fonts.dm",
"chars": 55,
"preview": "/// Emoji icon set\n#define EMOJI_SET 'icons/emoji.dmi'\n"
},
{
"path": "code/__DEFINES/gamemode.dm",
"chars": 922,
"preview": "#define QUEEN_DEATH_COUNTDOWN 10 MINUTES\n\n#define MODE_INFESTATION_X_MAJOR \"Xenomorph Major Victory\"\n#define MODE_INFEST"
},
{
"path": "code/__DEFINES/generators.dm",
"chars": 444,
"preview": "//generator types\n#define GEN_NUM \"num\"\n#define GEN_VECTOR \"vector\"\n#define GEN_BOX \"box\"\n#define GEN_COLOR \"color\"\n#def"
},
{
"path": "code/__DEFINES/gradient.dm",
"chars": 344,
"preview": "// spacemandmm doesn't really implement gradient() right, so let's just handle that here yeah?\n#define rgb_gradient(inde"
},
{
"path": "code/__DEFINES/guns.dm",
"chars": 2753,
"preview": "#define FIRE_DELAY_GROUP_SHOTGUN \"fdg_shtgn\"\n\n#define TASER_MODE_P \"precision\"\n#define TASER_MODE_F \"free\"\n\n#define MOU_"
},
{
"path": "code/__DEFINES/hijack.dm",
"chars": 572,
"preview": "#define EVACUATION_TYPE_NONE 0\n#define EVACUATION_TYPE_ADDITIVE 1\n#define EVACUATION_TYPE_MULTIPLICATIVE 2\n\n#define HIJA"
},
{
"path": "code/__DEFINES/html.dm",
"chars": 581,
"preview": "#define SET_CLASS(text, class) \"<span class='[class]'>[text]</span>\"\n\n// Color defines to use (easier variants on the ey"
},
{
"path": "code/__DEFINES/html_assistant.dm",
"chars": 392,
"preview": "#define HTML_SKELETON_INTERNAL(head, body) \\\n\"<!DOCTYPE html><html><head><meta http-equiv='Content-Type' content='text/h"
},
{
"path": "code/__DEFINES/hud.dm",
"chars": 1034,
"preview": "#define HUD_MIDNIGHT \"midnight\"\n#define HUD_DARK \"dark\"\n#define HUD_BRONZE \"bronze\"\n#define HUD_GLASS \"glass\"\n#define HU"
},
{
"path": "code/__DEFINES/human.dm",
"chars": 6704,
"preview": "//Life variables\n\n/// Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applie"
},
{
"path": "code/__DEFINES/ipcheck.dm",
"chars": 431,
"preview": "#define IPCHECK_RATE_LIMIT_DAY \"day\"\n\n/// An internal error occurred and the query cannot be processed\n#define IPCHECK_U"
},
{
"path": "code/__DEFINES/job.dm",
"chars": 27605,
"preview": "#define get_job_playtime(client, job) (client.player_data? LAZYACCESS(client.player_data.playtimes, job)? client.player_"
},
{
"path": "code/__DEFINES/keybinding.dm",
"chars": 14855,
"preview": "#define KEYBIND_TYPE_SAY \"say\"\n#define KEYBIND_TYPE_ME \"me\"\n#define KEYBIND_TYPE_PICKSAY \"picksay\"\n\n#define COMSIG_KB_CU"
},
{
"path": "code/__DEFINES/language.dm",
"chars": 1763,
"preview": "#define LANGUAGE_ENGLISH \"English\"\n#define LANGUAGE_JAPANESE \"Japanese\"\n#define LANGUAGE_CHINESE \"Chinese\"\n#define LANGU"
},
{
"path": "code/__DEFINES/layers.dm",
"chars": 8131,
"preview": "\n//Defines for atom layers and planes\n\n//the hardcoded ones are AREA_LAYER = 1, TURF_LAYER = 2, OBJ_LAYER = 3, MOB_LAYER"
},
{
"path": "code/__DEFINES/lighting.dm",
"chars": 5779,
"preview": "///Object doesn't use any of the light systems. Should be changed to add a light source to the object.\n#define NO_LIGHT_"
},
{
"path": "code/__DEFINES/machinery.dm",
"chars": 1173,
"preview": "// defines related to machinery\n\n// power defines\n\n#define USE_POWER_NONE 0\n#define USE_POWER_IDLE 1\n#define USE_POWER_A"
},
{
"path": "code/__DEFINES/maps.dm",
"chars": 4788,
"preview": "/*\nThe /tg/ codebase allows mixing of hardcoded and dynamically-loaded z-levels.\nZ-levels can be reordered as desired an"
},
{
"path": "code/__DEFINES/marine.dm",
"chars": 99,
"preview": "#define SPEC_NOT_PRIMARY_ACTION -1\n#define SPEC_PRIMARY_ACTION_1 0\n#define SPEC_PRIMARY_ACTION_2 1\n"
},
{
"path": "code/__DEFINES/math_physics.dm",
"chars": 1309,
"preview": "#define PI 3.141592653\n\n// The TRUE circle constant!\n#define TAU (PI * 2)\n\n//\"fancy\" math for calculating time in ms fro"
},
{
"path": "code/__DEFINES/matrices.dm",
"chars": 756,
"preview": "/// Identity transform matrix (2d) with 6 values\n/// list(ax,by,c, dx,dy,f)\n#define TRANSFORM_MATRIX_IDENTITY list(1,0,0"
},
{
"path": "code/__DEFINES/minimap.dm",
"chars": 4368,
"preview": "#define MINIMAP_FLAG_XENO (1<<0)\n#define MINIMAP_FLAG_USCM (1<<1)\n#define MINIMAP_FLAG_WY (1<<2)\n#define MINIMAP_FLAG_UP"
},
{
"path": "code/__DEFINES/misc.dm",
"chars": 11571,
"preview": "//for all defines that doesn't fit in any other file.\n\n//Fullscreen overlay resolution in tiles.\n#define FULLSCREEN_OVER"
},
{
"path": "code/__DEFINES/mob.dm",
"chars": 78,
"preview": "#define DEFAULT_MOB_STATUS_FLAGS CANKNOCKDOWN|CANPUSH|STATUS_FLAGS_DEBILITATE\n"
},
{
"path": "code/__DEFINES/mob_hud.dm",
"chars": 4466,
"preview": "// for secHUDs and medHUDs and variants.\n//The number is the location of the image on the list hud_list of humans.\n// /d"
},
{
"path": "code/__DEFINES/mobs.dm",
"chars": 14940,
"preview": "/// Multiplier for Stun/KD/KO/etc durations in new backend, due to old system being based on life ticks\n#define GLOBAL_S"
},
{
"path": "code/__DEFINES/mode.dm",
"chars": 20012,
"preview": "//=================================================\n//Self-destruct, nuke, evacuation, and round start miasma.\n\n/// At w"
},
{
"path": "code/__DEFINES/movement.dm",
"chars": 3598,
"preview": "#define BLOCKED_MOVEMENT (NORTH|SOUTH|EAST|WEST)\n#define NO_BLOCKED_MOVEMENT 0\n\n#define LOW_LAUNCH 0\n#define NORMAL_LA"
},
{
"path": "code/__DEFINES/nightmare.dm",
"chars": 1304,
"preview": "// Built-in Nightmare contexts\n\n/// Global Nightmare context: Performs any global game setup\n#define NIGHTMARE_CTX_GLOBA"
},
{
"path": "code/__DEFINES/objects.dm",
"chars": 7863,
"preview": "// Doors!\n#define DOOR_CRUSH_DAMAGE 10\n\n/*\n\tAtmos Machinery\n*/\n#define MAX_SIPHON_FLOWRATE 2500 //L/s This can be used t"
},
{
"path": "code/__DEFINES/origins.dm",
"chars": 1130,
"preview": "// Base\n#define ORIGIN_BASE \"Base\"\n\n// Civilian / CLF\n#define ORIGIN_CIVILIAN \"Colony-Born\"\n\n// USCM\n#define ORIGIN_USCM"
},
{
"path": "code/__DEFINES/pain.dm",
"chars": 870,
"preview": "// Pain\n\n// How slow we go from losing a limb\n#define MOVE_REDUCTION_LIMB_DESTROYED 4\n#define MOVE_REDUCTION_LIMB_BROKEN"
},
{
"path": "code/__DEFINES/paperwork.dm",
"chars": 526,
"preview": "#define PAPER_CATEGORY_USCM \"USCM\"\n#define PAPER_CATEGORY_USCM_HC \"USCM HC\"\n\n#define PAPER_CATEGORY_MP \"Military Police\""
},
{
"path": "code/__DEFINES/paygrade_defs/army.dm",
"chars": 1607,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// US Army Soldiers\n/// AE1, Private\n#define PAY_SHORT_AE1"
},
{
"path": "code/__DEFINES/paygrade_defs/civilian.dm",
"chars": 1030,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// Civilians\n/// CIV, Civilian\n#define PAY_SHORT_CIV \"CIV\""
},
{
"path": "code/__DEFINES/paygrade_defs/cmb.dm",
"chars": 835,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// Colonial Marshal Bureau\n/// IHRO, Interstellar Human Ri"
},
{
"path": "code/__DEFINES/paygrade_defs/dutch.dm",
"chars": 409,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// Dutches Dozen\n/// DTC, Dutch's Dozen Standard Mercenary"
},
{
"path": "code/__DEFINES/paygrade_defs/marines.dm",
"chars": 1714,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// USCM MARINES\n/// ME1, Private\n#define PAY_SHORT_ME1 \"ME"
},
{
"path": "code/__DEFINES/paygrade_defs/mercs.dm",
"chars": 867,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// MERCENARIES\n/// FL-S, Standard\n#define PAY_SHORT_FL_S \""
},
{
"path": "code/__DEFINES/paygrade_defs/navy.dm",
"chars": 1471,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// USCM NAVY\n/// NE1, Seaman Recruit\n#define PAY_SHORT_NE1"
},
{
"path": "code/__DEFINES/paygrade_defs/nspa.dm",
"chars": 591,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// NSPA - (Neroid Sector Policing Authority) - TWE style P"
},
{
"path": "code/__DEFINES/paygrade_defs/pap.dm",
"chars": 644,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// PAP - (People's Armed Police) - UPP style Police, like "
},
{
"path": "code/__DEFINES/paygrade_defs/paygrade.dm",
"chars": 255,
"preview": "/// Paygrade is equivalent to or is an enlisted position.\n#define GRADE_ENLISTED 0\n/// Paygrade is equivalent to or is a"
},
{
"path": "code/__DEFINES/paygrade_defs/provost.dm",
"chars": 498,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// PROVOST OFFICE\n/// PvI, Provost Advisor\n#define PAY_SHO"
},
{
"path": "code/__DEFINES/paygrade_defs/twe.dm",
"chars": 2232,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// THREE WORLD EMPIRE\n/// RMC1, Marine\n#define PAY_SHORT_R"
},
{
"path": "code/__DEFINES/paygrade_defs/upp.dm",
"chars": 1381,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// Union of Progressive Peoples\n/// UE,\n#define PAY_SHORT_"
},
{
"path": "code/__DEFINES/paygrade_defs/weyland.dm",
"chars": 3258,
"preview": "// Paygrade shorthand defines, to allow clearer designation.\n\n// Weyland Yutani Corporate\n/// WYC1, Trainee\n#define PAY_"
},
{
"path": "code/__DEFINES/pred.dm",
"chars": 1283,
"preview": "#define PRED_TECH_MODERN \"Modern\"\n#define PRED_TECH_RETRO \"Retro\"\n#define PRED_TECH_COMBO \"Combo\"\n\n#define PRED_MATERIAL"
},
{
"path": "code/__DEFINES/procpath.dm",
"chars": 1208,
"preview": "/// Represents a proc or verb path.\n///\n/// Despite having no DM-defined static type, proc paths have some variables,\n//"
},
{
"path": "code/__DEFINES/qdel.dm",
"chars": 3782,
"preview": "//! Defines that give qdel hints.\n//!\n//! These can be given as a return in [/atom/proc/Destroy] or by calling [/proc/qd"
},
{
"path": "code/__DEFINES/radio.dm",
"chars": 3216,
"preview": "#define WIRE_SIGNAL 1 //sends a signal, like to set off a bomb or electrocute someone\n#define WIRE_RECEIVE 2\n#define WIR"
},
{
"path": "code/__DEFINES/redis.dm",
"chars": 398,
"preview": "#define REDIS_PUBLISH(channel, data...) SSredis.publish(channel, json_encode(list(\"source\" = SSredis.instance_name, \"rou"
},
{
"path": "code/__DEFINES/regex.dm",
"chars": 1711,
"preview": "/*\n\tREGEX System Ported from Aurorastation, includes chat-markup like bolding and italicizing, as well as converting url"
},
{
"path": "code/__DEFINES/sentry_laptop_configurations.dm",
"chars": 286,
"preview": "#define SENTRY_FACTION_WEYLAND \"WY\"\n#define SENTRY_FACTION_HUMAN \"HUMAN\"\n#define SENTRY_FACTION_COLONY \"COLONY\"\n\n#define"
},
{
"path": "code/__DEFINES/shuttles.dm",
"chars": 5597,
"preview": "//shuttle mode defines\n#define SHUTTLE_IDLE \"idle\"\n#define SHUTTLE_IGNITING \"igniting\"\n#define SHUTTLE_RECALL \"rec"
},
{
"path": "code/__DEFINES/skills.dm",
"chars": 8051,
"preview": "\n//skill defines\n#define SKILL_CQC \"cqc\"\n#define SKILL_MELEE_WEAPONS \"melee_weapons\"\n#define SKILL_FIREARMS \"firearms\"\n#"
},
{
"path": "code/__DEFINES/sounds.dm",
"chars": 10238,
"preview": "#define FALLOFF_SOUNDS 1\n\n#define FREE_CHAN_END 1016\n#define INITIAL_SOUNDSCAPE_COOLDOWN 20\n\n#define EAR_DEAF_MUTE 1\n\n#d"
},
{
"path": "code/__DEFINES/speech_channels.dm",
"chars": 271,
"preview": "// Used to direct channels to speak into.\n#define SAY_CHANNEL \"Say\"\n#define COMMS_CHANNEL \"Comms\"\n#define WHISPER_CHANNE"
},
{
"path": "code/__DEFINES/stamina.dm",
"chars": 411,
"preview": "#define STAMINA_LEVEL_1 /datum/effects/stamina/human/tier1\n#define STAMINA_LEVEL_2 /datum/effects/stamina/human/tier2\n#d"
},
{
"path": "code/__DEFINES/stats.dm",
"chars": 447,
"preview": "#define get_client_stat(client, stat) (client.player_data ? LAZYACCESS(client.player_data.stats, stat) ? client.player_d"
},
{
"path": "code/__DEFINES/status_effects.dm",
"chars": 1176,
"preview": "///if it allows multiple instances of the effect\n#define STATUS_EFFECT_MULTIPLE 0\n///if it allows only one, preventing n"
},
{
"path": "code/__DEFINES/strippable.dm",
"chars": 1080,
"preview": "// All of these must be matched in StripMenu.js.\n#define STRIPPABLE_ITEM_HEAD \"head\"\n#define STRIPPABLE_ITEM_BACK \"back\""
},
{
"path": "code/__DEFINES/structure.dm",
"chars": 188,
"preview": "//! Defines for all obj/structure atoms.\n\n/// How much health the structure has.\n#define STRUCTURE_HEALTH_WEAK 50\n#defin"
},
{
"path": "code/__DEFINES/subsystems.dm",
"chars": 8078,
"preview": "//! Defines for subsystems and overlays\n//!\n//! Lots of important stuff in here, make sure you have your brain switched "
},
{
"path": "code/__DEFINES/supply.dm",
"chars": 799,
"preview": "//We use the cost to determine the spawn chance this equals out the crates that spawn later in the round.\n#define ASRS_H"
},
{
"path": "code/__DEFINES/surgery.dm",
"chars": 10438,
"preview": "///checks if the item has a path that can be specifically used in a surgery step.\n#define is_surgery_tool(W) (is_type_in"
},
{
"path": "code/__DEFINES/techtree.dm",
"chars": 1803,
"preview": "#define TREE_ACCESS_MODIFY 1\n#define TREE_ACCESS_VIEW 2\n\n// Tree Flags\n#define TREE_FLAG_MARINE (1<<0)\n#define TREE_FLAG"
},
{
"path": "code/__DEFINES/text.dm",
"chars": 1226,
"preview": "/// Prepares a text to be used for maptext. Use this so it doesn't look hideous.\n#define MAPTEXT(text) {\"<span class='ma"
},
{
"path": "code/__DEFINES/tgs.config.dm",
"chars": 721,
"preview": "#define TGS_EXTERNAL_CONFIGURATION\n#define TGS_V3_API\n#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##N"
},
{
"path": "code/__DEFINES/tgs.dm",
"chars": 24018,
"preview": "// tgstation-server DMAPI\n// The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\","
},
{
"path": "code/__DEFINES/tgui.dm",
"chars": 2183,
"preview": "/// Green eye; fully interactive\n#define UI_INTERACTIVE 2\n/// Orange eye; updates but is not interactive\n#define UI_UPDA"
},
{
"path": "code/__DEFINES/traits.dm",
"chars": 21151,
"preview": "#define SIGNAL_ADDTRAIT(trait_ref) \"addtrait [trait_ref]\"\n#define SIGNAL_REMOVETRAIT(trait_ref) \"removetrait [trait_ref]"
},
{
"path": "code/__DEFINES/turf_flags.dm",
"chars": 891,
"preview": "//turf_flags values\n/// Marks a turf as organic. Used for alien wall and membranes.\n#define TURF_ORGANIC (1<<0)\n/// If a"
},
{
"path": "code/__DEFINES/turfs.dm",
"chars": 1782,
"preview": "/// Returns a list of turfs within H_RADIUS tiles horizontally and V_RADIUS tiles vertically of CENTER.\n#define RECT_TUR"
},
{
"path": "code/__DEFINES/tutorial.dm",
"chars": 434,
"preview": "#define TUTORIAL_ATOM_FROM_TRACKING(path, varname) var##path/##varname = tracking_atoms[##path]\n#define IS_TUTORIAL_COMP"
},
{
"path": "code/__DEFINES/typecheck/assemblers.dm",
"chars": 471,
"preview": "#define isassembly(O) (istype(O, /obj/item/device/assembly))\n#define isigniter(O) (istype(O, /obj/item/device/assembly/i"
},
{
"path": "code/__DEFINES/typecheck/datums.dm",
"chars": 288,
"preview": "#define isNegativeProperty(A) (istype(A, /datum/chem_property/negative))\n#define isNeutralProperty(A) (istype(A, /datum/"
},
{
"path": "code/__DEFINES/typecheck/generic_types.dm",
"chars": 1095,
"preview": "#define isdatum(X) (istype(X, /datum))\n#define istypestrict(D, typepath) D.type == typepath\n#define ismind(X) (is"
},
{
"path": "code/__DEFINES/typecheck/humanoids.dm",
"chars": 2483,
"preview": "//Typechecks should be AVOIDED whenever possible. Instead of using them, try properties of what you're checking, such as"
}
]
// ... and 8897 more files (download for full content)
About this extraction
This page contains the full source code of the cmss13-devs/cmss13 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 9097 files (67.2 MB), approximately 17.9M tokens, and a symbol index with 1820 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.