diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7f5d1fc43..f87528bff 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -192,6 +192,11 @@ Version 1.4.0 (Lupin): Released Aug-25-2026 - Reduce latency on continuous fire weapons by sending an object update immediately when one starts or stops firing instead of waiting for the next scheduled send - Add `spectate_povcomp` command for ping compensation while following a player in spectate mode - delays other players to approximate what the followed player saw when they aimed +[@jyh9521](https://github.com/jyh9521) +- Add subtitles for spoken voice lines and for the in-engine cutscenes, neither of which had any in the original game + - Driven by optional TOML tables in a packfile, looked up per language, so a translation can supply its own + - English tables included: the level dialogue text the game already ships but never displays, plus transcriptions of the ambient lines that have no text anywhere + ### Bug fixes [@GooberRF](https://github.com/GooberRF) - Fix team balance not properly randomizing the distribution order of equal-scoring human players diff --git a/game_patch/CMakeLists.txt b/game_patch/CMakeLists.txt index 1997655bc..82da2fb4d 100644 --- a/game_patch/CMakeLists.txt +++ b/game_patch/CMakeLists.txt @@ -109,6 +109,8 @@ set(SRCS hud/hud_internal.h hud/hud.cpp hud/hud.h + hud/subtitles.cpp + hud/subtitles.h hud/hud_world.cpp hud/hud_world.h hud/remote_server_cfg_ui.cpp diff --git a/game_patch/hud/multi_hud.cpp b/game_patch/hud/multi_hud.cpp index 15c12f375..ce217f158 100644 --- a/game_patch/hud/multi_hud.cpp +++ b/game_patch/hud/multi_hud.cpp @@ -46,6 +46,7 @@ #include "../os/console.h" #include "hud_internal.h" #include "hud.h" +#include "subtitles.h" #include "multi_scoreboard.h" #include "remote_server_cfg_ui.h" #include "../misc/player.h" @@ -2004,12 +2005,14 @@ CallHook control_config_get_mouse_delta_hook{ } }; + FunHook hud_msg_render_hook{ 0x004382D0, [] { if (!g_remote_server_cfg_popup.is_active() && !vote_panel_is_gameplay_overlay_active()) { hud_msg_render_hook.call_target(); } + subtitles_render(); }, }; diff --git a/game_patch/hud/subtitles.cpp b/game_patch/hud/subtitles.cpp new file mode 100644 index 000000000..bf6d7d2b0 --- /dev/null +++ b/game_patch/hud/subtitles.cpp @@ -0,0 +1,458 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "subtitles.h" +#include "../misc/vpackfile.h" // LANG_GR / LANG_FR +#include "../sound/sound.h" // is_cutscene_music_playing +#include "../rf/file/file.h" +// gr_font.h, not gr.h: split_str / string_aligned / get_font_height / load_font +// live there, and rf/hud.h only pulls in gr/gr.h. +#include "../rf/gr/gr_font.h" +#include "../rf/hud.h" +#include "../rf/misc.h" +#include "../rf/os/frametime.h" +#include "../rf/sound/sound.h" + +// ---- NPC voice subtitles ---------------------------------------------------- +// Ambient NPC barks have no subtitles in the original game, so a deaf player +// misses them entirely and a translation has nothing to translate. The text is +// data rather than code: an optional TOML table in a packfile maps a wav name to +// the line that should appear on screen. +// +// [lines] +// "admf_alert_01.wav" = "Help! Help!" +// +// With no table present the feature is off and behaviour is identical to stock. +constexpr const char* npc_subtitle_base_name = "alpine_npc_subtitles"; + +// ---- Localized subtitle tables ---------------------------------------------- +// Subtitle content is language-specific, so each table is looked up per language +// first and only then by its bare name: +// alpine_npc_subtitles_en.toml -> alpine_npc_subtitles.toml +// The suffixes match the stock language codes (en/gr/fr). The bare name is what a +// translation for a language the stock game has no code for should ship, and is +// also the natural place for a single-language mod to put its table. +static const char* subtitle_lang_suffix() +{ + switch (rf::get_language()) { + case LANG_GR: return "gr"; + case LANG_FR: return "fr"; + default: return "en"; + } +} + +// Reads the whole of a packfile entry into content_out. +static bool subtitle_read_file(const char* filename, std::string& content_out) +{ + rf::File file; + if (file.open(filename) != 0) { + return false; + } + const int file_size = file.size(); + if (file_size < 0) { + file.close(); + return false; + } + // An empty file is still a table, and an empty TOML document parses fine. Treating + // it as missing would fall through to the next candidate and quietly ignore the + // localized table the author actually shipped. + content_out.assign(static_cast(file_size), '\0'); + const int bytes_read = file_size == 0 ? 0 : file.read(content_out.data(), file_size); + file.close(); + if (bytes_read != file_size) { + return false; + } + content_out.resize(static_cast(bytes_read)); + return true; +} + +// Parses the best available table for base_name. Returns nullopt when neither +// candidate exists, which is the normal "no subtitles installed" case. +static std::optional subtitle_parse_table(const char* base_name, std::string& name_out) +{ + const std::string candidates[] = { + std::format("{}_{}.toml", base_name, subtitle_lang_suffix()), + std::format("{}.toml", base_name), + }; + for (const std::string& filename : candidates) { + std::string content; + if (!subtitle_read_file(filename.c_str(), content)) { + continue; + } + try { + toml::table root = toml::parse(content, filename); + name_out = filename; + return root; + } + catch (const toml::parse_error& err) { + xlog::error("Failed to parse {}: {}", filename, err.description()); + return std::nullopt; // present but broken: do not fall back and hide it + } + } + return std::nullopt; +} + +static std::string npc_sub_lower(const char* s) +{ + std::string out; + for (; s && *s; ++s) { + out += static_cast(std::tolower(static_cast(*s))); + } + return out; +} + +static const std::unordered_map& npc_subtitle_table() +{ + static std::unordered_map table; + static bool loaded = false; + if (loaded) { + return table; + } + loaded = true; + + std::string filename; + auto root = subtitle_parse_table(npc_subtitle_base_name, filename); + if (!root) { + // Log it: a silent empty table is indistinguishable from a hook that never ran. + xlog::info("No {}*.toml found, NPC subtitles are off", npc_subtitle_base_name); + return table; + } + const auto* lines = root->get_as("lines"); + if (!lines) { + xlog::warn("{} has no [lines] table, NPC subtitles are off", filename); + return table; + } + for (const auto& [key, value] : *lines) { + const auto* text = value.as_string(); + if (!text || text->get().empty()) { + continue; + } + // foley.tbl spells these "Grd_Alert_01.wav" but the packfile index has them + // upper case, so the key is always lowered on both sides. + std::string wav = npc_sub_lower(std::string{key.str()}.c_str()); + if (!wav.empty()) { + table.emplace(std::move(wav), text->get()); + } + } + xlog::info("Loaded {} NPC subtitles from {}", table.size(), filename); + return table; +} + +static int g_npc_subtitle_debug = 30; // log the first N lookups, then go quiet + +// ---- Independent subtitle channel ------------------------------------------- +// rf::hud_msg is shared with pickup notices ("Picked up ...") and holds at most 8 +// entries, so voice subtitles and item pickups keep pushing each other out. This is +// a separate queue with its own render pass: it cannot be stepped on, and position, +// lifetime and styling are ours to set. +constexpr int npc_subtitle_max_lines = 3; + +struct NpcSubtitleLine +{ + std::string text; + int expire_ms = 0; +}; + +static NpcSubtitleLine g_npc_subtitle_queue[npc_subtitle_max_lines]; + +static void npc_subtitle_push(const std::string& text, int duration_ms) +{ + for (int i = 0; i + 1 < npc_subtitle_max_lines; ++i) { + g_npc_subtitle_queue[i] = std::move(g_npc_subtitle_queue[i + 1]); + } + auto& slot = g_npc_subtitle_queue[npc_subtitle_max_lines - 1]; + slot.text = text; + slot.expire_ms = rf::frametime_total_milliseconds + duration_ms; +} + +// Same font the message log body uses (0x006C66F0 is set when the log UI is created). +// Cached rather than loaded per call: the .vf redirect logs a line every time. +static auto& npc_subtitle_msglog_font = addr_as_ref(0x006C66F0); + +static int npc_subtitle_font() +{ + if (npc_subtitle_msglog_font) { + return npc_subtitle_msglog_font; + } + static int fallback = rf::gr::load_font("rfpc-medium.vf"); + return fallback; +} + +// ---- Cutscene subtitles ------------------------------------------------------ +// In-engine cutscenes do not play their dialogue through snd_play/snd_play_3d at +// all: the whole scene is one pre-mixed track (RFCS_*_FinalMix.wav) streamed via +// snd_music_play, so there is no per-line filename to look up. The engine also +// ships no text for these lines -- they were transcribed and translated by hand. +// So this is a plain timed track: remember when playback started, then show +// whichever phrase covers the elapsed time. +constexpr const char* cutscene_subtitle_base_name = "alpine_cutscene_subtitles"; + +struct CutscenePhrase +{ + int start_ms; + int end_ms; + std::string text; +}; + +static const std::unordered_map>& cutscene_subtitle_table() +{ + static std::unordered_map> table; + static bool loaded = false; + if (loaded) { + return table; + } + loaded = true; + + std::string filename; + auto root = subtitle_parse_table(cutscene_subtitle_base_name, filename); + if (!root) { + xlog::info("No {}*.toml found, cutscene subtitles are off", cutscene_subtitle_base_name); + return table; + } + const auto* tracks = root->get_as("track"); + if (!tracks) { + xlog::warn("{} has no [[track]] entries, cutscene subtitles are off", filename); + return table; + } + + size_t n_lines = 0; + for (const auto& track_node : *tracks) { + const auto* track = track_node.as_table(); + if (!track) { + continue; + } + const auto* name = track->get_as("name"); + const auto* lines = track->get_as("lines"); + if (!name || name->get().empty() || !lines) { + continue; + } + std::vector phrases; + for (const auto& line_node : *lines) { + const auto* line = line_node.as_table(); + if (!line) { + continue; + } + const auto start = line->get_as("start"); + const auto end = line->get_as("end"); + const auto* text = line->get_as("text"); + if (!start || !end || !text || text->get().empty()) { + continue; + } + // Offsets from the start of the track, so negative is meaningless, and + // anything past INT_MAX would wrap on the way into CutscenePhrase and + // produce timings unrelated to what the file says. + if (start->get() < 0 || end->get() <= start->get() + || end->get() > std::numeric_limits::max()) { + continue; + } + phrases.push_back(CutscenePhrase{ + static_cast(start->get()), + static_cast(end->get()), + text->get(), + }); + } + if (phrases.empty()) { + continue; + } + // Consumers walk the phrases in order and stop at the first match. + std::sort(phrases.begin(), phrases.end(), + [](const CutscenePhrase& a, const CutscenePhrase& b) { + return a.start_ms < b.start_ms; + }); + n_lines += phrases.size(); + table.emplace(npc_sub_lower(name->get().c_str()), std::move(phrases)); + } + xlog::info("Loaded {} cutscene subtitles across {} tracks from {}", + n_lines, table.size(), filename); + return table; +} + +static const std::vector* g_cutscene_phrases = nullptr; +static int g_cutscene_started_ms = 0; + +void subtitles_cutscene_begin(const char* track) +{ + g_cutscene_phrases = nullptr; + if (!track) { + return; + } + const auto& table = cutscene_subtitle_table(); + const auto it = table.find(npc_sub_lower(track)); + if (it == table.end()) { + return; + } + g_cutscene_phrases = &it->second; + g_cutscene_started_ms = rf::frametime_total_milliseconds; + xlog::info("Cutscene subtitles armed for '{}' ({} lines)", track, it->second.size()); +} + +// Returns the phrase covering the current playback position, or nullptr. +static const std::string* cutscene_subtitle_current(int now) +{ + if (!g_cutscene_phrases || !is_cutscene_music_playing()) { + // The track stops when the player skips the cutscene; these are timed + // against it, so they stop too. + return nullptr; + } + const int elapsed = now - g_cutscene_started_ms; + for (const auto& p : *g_cutscene_phrases) { + if (elapsed < p.start_ms) { + break; // sorted, so nothing later can match either + } + if (elapsed < p.end_ms) { + return &p.text; + } + } + return nullptr; +} + +void subtitles_render() +{ + const int now = rf::frametime_total_milliseconds; + + // Two paths drive this: the HUD message render hook during normal gameplay, and + // the cutscene per-frame hook (the HUD is not drawn at all during cutscenes). + // Both can run in the same frame, and drawing twice would double the drop shadow, + // so the second call in a frame is a no-op. + // + // Keyed on the frame counter rather than the clock: at a high framerate two frames + // can land in the same millisecond, and a paused frame does not advance the clock + // at all, either of which would drop the text from a frame that needs it. + static int last_drawn_frame = -1; + if (rf::frame_count == last_drawn_frame) { + return; + } + last_drawn_frame = rf::frame_count; + + const int font = npc_subtitle_font(); + const int line_h = rf::gr::get_font_height(font); + const int clip_w = rf::gr::clip_width(); + const int clip_h = rf::gr::clip_height(); + const int max_w = clip_w * 4 / 5; + + // Cutscene line first, then the ordinary queue. During a cutscene the queue is + // normally empty anyway, but a sound started just before the cutscene began can + // still be expiring, and stacking them is better than one hiding the other. + std::vector sources; + if (const std::string* cut = cutscene_subtitle_current(now)) { + sources.push_back(*cut); + } + for (const auto& slot : g_npc_subtitle_queue) { + if (!slot.text.empty() && now < slot.expire_ms) { + sources.push_back(slot.text); + } + } + + std::vector lines; + for (const auto& src : sources) { + // gr_split_str is our CJK aware replacement, so this wraps Chinese correctly + std::string buf = src; + int len_array[8] = {}; + int off_array[8] = {}; + const int n = rf::gr::split_str(len_array, off_array, buf.data(), max_w, 8, 0, font); + if (n <= 0) { + lines.push_back(buf); + } + else { + for (int i = 0; i < n; ++i) { + lines.emplace_back(buf, static_cast(off_array[i]), + static_cast(len_array[i])); + } + } + } + if (lines.empty()) { + return; + } + + // Sit above the engine's own message line so the two never overlap. + const int center_x = clip_w / 2; + int y = clip_h * 84 / 100 - static_cast(lines.size()) * line_h; + for (const auto& line : lines) { + rf::gr::set_color(0, 0, 0, 170); + rf::gr::string_aligned(rf::gr::ALIGN_CENTER, center_x + 2, y + 2, line.c_str(), font); + rf::gr::set_color(255, 255, 255, 255); + rf::gr::string_aligned(rf::gr::ALIGN_CENTER, center_x, y, line.c_str(), font); + y += line_h; + } +} + + +void subtitles_on_sound_play(int handle, const rf::Vector3* pos) +{ + const auto& table = npc_subtitle_table(); + if (table.empty() || handle < 0 || handle >= 2600) { + return; + } + const rf::Sound& snd = rf::sounds[handle]; + const auto it = table.find(npc_sub_lower(snd.filename)); + + // Diagnostics first, before any of the early returns below. Logging after them + // means a line skipped by the persona check leaves no trace at all, which makes + // "no subtitle" and "hook never saw it" look identical in the log. + // Only level dialogue names (LS_...) are logged, so gunfire and footsteps + // do not burn the budget. + if (g_npc_subtitle_debug > 0) { + const char* fn = snd.filename; + // Level dialogue is named LS_..., e.g. L6S3_GRYN_01.wav. + // Checking the first two chars avoids needing for strchr. + const bool is_dialogue = fn && (fn[0] == 'L' || fn[0] == 'l') + && fn[1] >= '0' && fn[1] <= '9'; + if (is_dialogue || it != table.end()) { + --g_npc_subtitle_debug; + const int pidx = rf::hud_persona_current_idx; + const bool persona_owns = pidx >= 0 && pidx < 10 + && rf::hud_personas_info[pidx].sound_handle == handle; + xlog::info("[npc-sub] '{}' {} in_table={} persona_owns={} alpha={:.2f}", + fn ? fn : "(null)", pos ? "3D" : "2D", it != table.end(), persona_owns, + rf::hud_persona_alpha); + } + } + + // Skip only the one line the engine is itself subtitling in the persona box. + // HudPersonaInfo::sound_handle and hud_persona_current_idx are both set before the + // sound is started (0x0043957C sets the index, the play call reads +0x20 after it), + // so this comparison is reliable at the moment we run. + // + // Do NOT gate on hud_persona_alpha alone: the box stays up for several seconds and + // world conversations happen underneath it. In the level 1 opening the box is + // visible while a guard and a miner argue in front of the player, and gating on + // visibility would drop exactly the lines that have no captions anywhere else. + const int persona_idx = rf::hud_persona_current_idx; + if (persona_idx >= 0 && persona_idx < 10 + && rf::hud_personas_info[persona_idx].sound_handle == handle) { + return; + } + + float dist = -1.0f; + if (pos) { + const float dx = pos->x - rf::sound_listener_pos.x; + const float dy = pos->y - rf::sound_listener_pos.y; + const float dz = pos->z - rf::sound_listener_pos.z; + dist = std::sqrt(dx * dx + dy * dy + dz * dz); + } + + if (it == table.end()) { + return; + } + // Out of earshot: the engine plays it inaudibly, no reason to subtitle it. + // Only trust max_range when it is actually set -- snd_get_handle takes min_range + // but no max_range, so for dynamically loaded sounds it can be left at zero, and + // a naive "dist > max_range" then rejects everything. + if (dist >= 0.0f && snd.max_range > 0.0f && dist > snd.max_range) { + return; + } + // Duration follows the clip: long lines stay up long enough to read. + const float secs = rf::snd_pc_get_duration(handle); + int ms = static_cast(secs * 1000.0f) + 900; + ms = std::clamp(ms, 2500, 9000); + npc_subtitle_push(it->second, ms); +} diff --git a/game_patch/hud/subtitles.h b/game_patch/hud/subtitles.h new file mode 100644 index 000000000..ed026e41e --- /dev/null +++ b/game_patch/hud/subtitles.h @@ -0,0 +1,20 @@ +#pragma once + +#include "../rf/math/vector.h" + +// Subtitles for ambient NPC voice lines and for the in-engine cutscenes, neither +// of which the original game captions at all. Driven by optional TOML tables in a +// packfile; with no table present the feature is off entirely. + +// Called from the snd_play / snd_play_3d hooks. Alpine already hooks both, so the +// feature calls into them rather than installing a second FunHook on the same +// address -- two hooks on one function means whichever installs last silently wins. +void subtitles_on_sound_play(int handle, const rf::Vector3* pos); + +// Called from the snd_music_play hook: a cutscene streams one pre-mixed track per +// scene, so its subtitles are timed against the start of playback. +void subtitles_cutscene_begin(const char* track); + +// Called from both hud_msg_render and cutscene_do_frame -- the HUD is not drawn +// during cutscenes. Repeat calls within one frame are ignored. +void subtitles_render(); diff --git a/game_patch/object/cutscene.cpp b/game_patch/object/cutscene.cpp index 4a94bc4b5..8f683b161 100644 --- a/game_patch/object/cutscene.cpp +++ b/game_patch/object/cutscene.cpp @@ -16,6 +16,9 @@ #include "../main/main.h" #include "../misc/alpine_settings.h" #include "../sound/sound.h" +#include "../hud/subtitles.h" + +// Defined in sound.cpp static constexpr rf::ControlConfigAction default_skip_cutscene_ctrl = rf::CC_ACTION_MP_STATS; @@ -47,6 +50,11 @@ FunHook cutscene_do_frame_hook{ if (!skip_cutscene) { cutscene_do_frame_hook.call_target(dlg_open); render_skip_cutscene_hint_text(skip_cutscene_ctrl); + // HUD is not drawn during cutscenes, so the voice subtitle channel + // has to be driven from here as well. subtitles_render() skips + // repeat calls within the same frame, so this is safe even if the + // HUD path happens to run too. + subtitles_render(); } else { xlog::info("Skipping cutscene..."); diff --git a/game_patch/sound/sound.cpp b/game_patch/sound/sound.cpp index 088cfe81b..42f6cba35 100644 --- a/game_patch/sound/sound.cpp +++ b/game_patch/sound/sound.cpp @@ -16,6 +16,7 @@ #include "../main/main.h" #include "../os/console.h" #include "../misc/vpackfile.h" +#include "../hud/subtitles.h" static int g_cutscene_bg_sound_sig = -1; static int g_custom_sound_entry_start = -1; @@ -103,11 +104,17 @@ CallHook cutscene_play_music_hook{ FunHook snd_music_play_cutscene_hook{ 0x00505D70, [](const char *filename, float volume) { + subtitles_cutscene_begin(filename); g_cutscene_bg_sound_sig = snd_music_play_cutscene_hook.call_target(filename, volume); return g_cutscene_bg_sound_sig; }, }; +bool is_cutscene_music_playing() +{ + return g_cutscene_bg_sound_sig != -1; +} + void disable_sound_before_cutscene_skip() { if (g_cutscene_bg_sound_sig != -1) { @@ -198,6 +205,10 @@ FunHook snd_play_hook{ return -1; } + // Only once the sound is actually playing: a saturated channel pool returns + // -1, and a subtitle for a line nobody heard is worse than none. + subtitles_on_sound_play(handle, nullptr); + instance.sig = sig; instance.handle = handle; instance.group = group; @@ -261,7 +272,6 @@ FunHook snd_play_3 return -1; } - bool looping = rf::sounds[handle].is_looping; int instance_index = snd_get_free_instance(); if (instance_index < 0) { @@ -294,6 +304,8 @@ FunHook snd_play_3 return -1; } + subtitles_on_sound_play(handle, &pos); + instance.sig = sig; instance.handle = handle; instance.group = group; @@ -821,6 +833,8 @@ void play_chat_sound(const std::string_view msg, const bool is_taunt) { extern void snd_ds_apply_patch(); extern void sound_foley_apply_patches(); + + void apply_sound_patches() { // Sound loop fix in snd_music_play diff --git a/game_patch/sound/sound.h b/game_patch/sound/sound.h index 908a52b24..5563dc381 100644 --- a/game_patch/sound/sound.h +++ b/game_patch/sound/sound.h @@ -14,6 +14,9 @@ struct CustomSoundEntry float rolloff; }; +// False once the player skips the cutscene, which stops the pre-mixed track. The +// subtitles are timed against that track, so they have to stop with it. +bool is_cutscene_music_playing(); void disable_sound_before_cutscene_skip(); void enable_sound_after_cutscene_skip(); void set_sound_enabled(bool enabled); diff --git a/resources/CMakeLists.txt b/resources/CMakeLists.txt index 6fc17ba56..c475e25d1 100644 --- a/resources/CMakeLists.txt +++ b/resources/CMakeLists.txt @@ -23,6 +23,8 @@ add_packfile(alpinefaction.vpp tables/maps_af.txt tables/events.tbl tables/af_level_quirks.tbl + tables/alpine_npc_subtitles_en.toml + tables/alpine_cutscene_subtitles_en.toml # waypoint files waypoints/dm01.awp diff --git a/resources/tables/alpine_cutscene_subtitles_en.toml b/resources/tables/alpine_cutscene_subtitles_en.toml new file mode 100644 index 000000000..cbf35af97 --- /dev/null +++ b/resources/tables/alpine_cutscene_subtitles_en.toml @@ -0,0 +1,103 @@ +# Subtitles for the in-engine cutscenes. +# +# Each scene streams one pre-mixed track, so these are timed phrases rather than +# one entry per sound. Times are milliseconds from the start of the track. +# +# Transcribed from the audio - the game ships no text for these scenes - so +# corrections are welcome. + +[[track]] +name = "rfcs_02_finalmix.wav" +lines = [ + { start = 0, end = 2140, text = "Stop. Don't shoot. I can help you." }, + { start = 4080, end = 5260, text = "You're Gryphon, right?" }, + { start = 6360, end = 8240, text = "Deputy Administrator Gryphon? Yes." }, + { start = 8240, end = 10720, text = "Why do I need your help? I'm the one with the gun." }, + { start = 10940, end = 14340, text = "I have vital information. You must take me to Eos." }, + { start = 14720, end = 16360, text = "What do you know about Eos?" }, + { start = 16740, end = 20480, text = "Ultor knows all about her. They set this whole thing up." }, + { start = 21440, end = 22800, text = "You must take me to her." }, + { start = 23360, end = 25280, text = "What do you mean they set this whole thing up?" }, + { start = 25660, end = 28120, text = "No time to explain. Take me to Eos." }, + { start = 28120, end = 30100, text = "I'll tell her everything I know." }, + { start = 30150, end = 31420, text = "Explain it to me first." }, + { start = 32520, end = 36520, text = "I'll tell you what I can on the way, but more guards are going to show up soon." }, + { start = 40080, end = 44500, text = "I'm right behind you. Betray me or try to run, and you'll be the first to die." }, + { start = 45300, end = 49120, text = "Put that gun away. If the guards see you with it, we're both dead." }, +] + +[[track]] +name = "rfcs_03_finalmix.wav" +lines = [ + { start = 3740, end = 8480, text = "Yeah, yeah, Parker, great job. You can pose for pictures later. We gotta keep moving." }, + { start = 10560, end = 15600, text = "Shut up, Weasel! If Eos didn't want you, you'd be dead by now. I'll decide when it's time to go." }, + { start = 19940, end = 21180, text = "Okay, let's go." }, + { start = 23540, end = 26000, text = "Hoof it! I'm not carrying your sorry butt anymore." }, + { start = 34620, end = 40080, text = "Parker! Gryphon! Over here! We're here to take Gryphon to Eos." }, + { start = 41320, end = 42180, text = "Thank God." }, + { start = 43460, end = 46980, text = "Well, whatever. Let's get moving before security shows up." }, + { start = 51360, end = 55380, text = "And not you, Parker. Just the weasel here. Eos will contact you." }, + { start = 60000, end = 67780, text = "Well, thanks Parker, and good luck. And hey, don't you start calling me Weasel too." }, + { start = 70540, end = 72460, text = "Great. Screwed again." }, +] + +[[track]] +name = "rfcs_04_finalmix.wav" +lines = [ + { start = 0, end = 8800, text = "Parker, how nice to see you. I must thank you for starting this little diversion. It has made my work so much easier." }, + { start = 9900, end = 11900, text = "What's that mean, you half-human freak?" }, + { start = 12340, end = 23720, text = "These troubles have given me the perfect excuse to accelerate my experiments. Who will notice a few more vanished miners in all this confusion?" }, + { start = 24860, end = 27720, text = "To hell with orders! Die, Capek!" }, + { start = 32460, end = 37820, text = "Congratulations, Parker. You were the first to see my nanotech shield in action." }, + { start = 40140, end = 46980, text = "Now I must return to my work. Enjoy what little time you have left, you and your friends." }, +] + +[[track]] +name = "rfcs_05_finalmix.wav" +lines = [ + { start = 2800, end = 4960, text = "Parker, stop! Don't kill him!" }, + { start = 8420, end = 11420, text = "Don't kill him? He's killed hundreds of miners." }, + { start = 12720, end = 15720, text = "And hundreds more will die unless we find a cure for the plague." }, + { start = 18440, end = 24040, text = "We can't save the miners who are dead already, but we might save those who are dying. He's their only hope." }, + { start = 27520, end = 30220, text = "Hope? Who has hope?" }, + { start = 33520, end = 37500, text = "If you have hope, you just don't understand yet." }, + { start = 40100, end = 43460, text = "My work... all gone." }, + { start = 44320, end = 47580, text = "Capek, the plague, there's got to be a cure." }, + { start = 48440, end = 49400, text = "Simple, really." }, + { start = 50460, end = 51820, text = "Stop the replicators." }, + { start = 51820, end = 56180, text = "But how? How do you stop them?" }, + { start = 56880, end = 58500, text = "Antidote, of course." }, + { start = 58500, end = 61720, text = "Come on, Eos. Let's finish him and get out of here." }, + { start = 61980, end = 65900, text = "We need that antidote, Parker. If you're not going to help, shut up." }, + { start = 67380, end = 68800, text = "Where is the antidote?" }, + { start = 70420, end = 75320, text = "Why help you? Hope you all die." }, + { start = 77880, end = 78280, text = "Damn!" }, + { start = 80720, end = 85000, text = "The formula's got to be in his computer files. Maybe Hendrix can help." }, + { start = 86400, end = 90480, text = "Parker, you've got to get out of here. One of us has to live through this." }, + { start = 90680, end = 92260, text = "No! I'm not gonna leave!" }, + { start = 92340, end = 98880, text = "No time to argue. Go out the way I came in. If I don't make it, you must tell people there's a cure for the plague." }, +] + +[[track]] +name = "rfcs_06_finalmix.wav" +lines = [ + { start = 3320, end = 5680, text = "Sure hope this works." }, + { start = 11640, end = 13700, text = "Come on, come on..." }, + { start = 14700, end = 16240, text = "Hold it right there!" }, +] + +[[track]] +name = "rfcs_07_finalmix.wav" +lines = [ + { start = 4120, end = 6100, text = "Mom said I'd come to a bad end." }, + { start = 7000, end = 8000, text = "This one's for you, Mom." }, + { start = 14480, end = 16540, text = "Manual launch override engaged." }, + { start = 17060, end = 18660, text = "Thirty seconds until launch." }, +] + +[[track]] +name = "rfcs_09_finalmix.wav" +lines = [ + { start = 6060, end = 10680, text = "Escape pod number two, detaching in five seconds." }, + { start = 11420, end = 15880, text = "Four, three, two, one, detach." }, +] diff --git a/resources/tables/alpine_npc_subtitles_en.toml b/resources/tables/alpine_npc_subtitles_en.toml new file mode 100644 index 000000000..19d5e9a07 --- /dev/null +++ b/resources/tables/alpine_npc_subtitles_en.toml @@ -0,0 +1,1093 @@ +# Subtitles for spoken voice lines. +# +# Keys are wav filenames as they appear in the packfile; lookup lowercases both +# sides, so case here does not matter. A line with no entry has no subtitle. +# +# Level dialogue is the text the game already ships in its L*S*_text.tbl files - +# it is authored, not transcribed, but nothing ever puts it on screen. Ambient NPC +# barks have no text anywhere, so those were transcribed from the audio and are the +# lines most likely to contain a mistake. + +[lines] +"admf_alert_01.wav" = "Help! Help!" +"admf_alert_02.wav" = "Hey, you don't belong here." +"admf_alert_03.wav" = "Security! We need help now!" +"admf_alert_04.wav" = "A miner! Call for help!" +"admf_alert_05.wav" = "Call security now!" +"admf_cower_01.wav" = "You wouldn't hurt a woman, would you?" +"admf_cower_02.wav" = "Don't shoot me." +"admf_cower_03.wav" = "Just go away." +"admf_cower_04.wav" = "Let me live, and I'll put you in for a promotion." +"admf_cower_05.wav" = "I had nothing to do with any of this." +"admf_timeo_01.wav" = "Last week I told them to call in a negotiator. But did they listen?" +"admf_timeo_02.wav" = "A little respect is all I've ever asked for." +"admf_timeo_03.wav" = "I know they're going to find a way to blame this all on me." +"admf_timeo_04.wav" = "You're making me uncomfortable." +"admf_timeo_05.wav" = "Don't you have someplace else to be?" +"admf_ulert_01.wav" = "You're Parker!" +"admf_ulert_02.wav" = "I saw you on the wanted posters." +"admf_ulert_03.wav" = "You're the one they're after." +"admf_ulert_04.wav" = "That's a lousy disguise, Parker." +"admf_use_01.wav" = "Go away. You're not my type." +"admf_use_02.wav" = "Keep your distance, please." +"admf_use_03.wav" = "Sorry, I have a report to finish." +"admf_use_04.wav" = "Do you think I'm your secretary?" +"admf_use_05.wav" = "Sorry, I'm busy." +"admm_alert_01.wav" = "Guards, come quickly!" +"admm_alert_02.wav" = "How'd you get in here?" +"admm_alert_03.wav" = "We're under attack!" +"admm_alert_04.wav" = "Security on the double!" +"admm_alert_05.wav" = "Someone sound the alarm!" +"admm_alert_06.wav" = "Guards, there's a miner here!" +"admm_alert_07.wav" = "Call security now!" +"admm_cower_01.wav" = "Please, can't we work this out?" +"admm_cower_02.wav" = "You've no right to do this." +"admm_cower_03.wav" = "How can you treat me this way?" +"admm_cower_04.wav" = "I'm only doing my job." +"admm_cower_05.wav" = "I'm a big supporter of the labor movement." +"admm_cower_06.wav" = "Shoot me and you're fired!" +"admm_panic_01.wav" = "Oh no! Oh! Oh!" +"admm_panic_03.wav" = "No! No! No!" +"admm_timeo_02.wav" = "Time to start updating my resume." +"admm_timeo_03.wav" = "I should have taken that seminar on conflict negotiation." +"admm_timeo_04.wav" = "Only miners would create this kind of mess." +"admm_timeo_05.wav" = "Miners have no idea what pressure management is under." +"admm_ulert_01.wav" = "Help, someone! It's Parker!" +"admm_ulert_02.wav" = "The Red Faction's here!" +"admm_ulert_03.wav" = "It's the guy on the wanted posters!" +"admm_ulert_04.wav" = "Guards! Parker's in here!" +"admm_ulert_05.wav" = "I know you! Guards!" +"admm_use_01.wav" = "That's not my job." +"admm_use_02.wav" = "That's not my job. I'm a busy man and you're wasting my time." +"admm_use_03.wav" = "Put it in writing and I'll consider it." +"admm_use_04.wav" = "I'm not interested in your problems." +"admm_use_05.wav" = "Go away, I'm busy." +"grd_alert_01.wav" = "Stop!" +"grd_alert_02.wav" = "Drop your weapons!" +"grd_alert_03.wav" = "Die, miner!" +"grd_alert_04.wav" = "Halt!" +"grd_alert_05.wav" = "You're dead, traitor!" +"grd_alert_06.wav" = "Give up, miner!" +"grd_alert_07.wav" = "Die, scum!" +"grd_alert_08.wav" = "Hold it, miner!" +"grd_alert_09.wav" = "Stop right there!" +"grd_alert_10.wav" = "Hey!" +"grd_batt1_01.wav" = "Help! Help!" +"grd_batt1_02.wav" = "Where's my backup?!" +"grd_batt1_03.wav" = "Better run, miner!" +"grd_batt1_04.wav" = "Party time!" +"grd_batt1_05.wav" = "Just you and me, miner!" +"grd_batt1_06.wav" = "Need help here?" +"grd_batt1_07.wav" = "Try it, miner!" +"grd_batt1_08.wav" = "Scum!" +"grd_batt1_09.wav" = "Come on, tough guy!" +"grd_batt2_01.wav" = "Get him!" +"grd_batt2_02.wav" = "Cover me!" +"grd_batt2_03.wav" = "Get over here!" +"grd_batt2_04.wav" = "Go, go, go!" +"grd_batt2_05.wav" = "Heads up!" +"grd_batt2_06.wav" = "Come on!" +"grd_batt2_07.wav" = "Follow me!" +"grd_batt2_08.wav" = "Attack! Attack!" +"grd_batt2_09.wav" = "Move in!" +"grd_batt2_10.wav" = "Let's get him!" +"grd_cower_01.wav" = "I was just following orders." +"grd_cower_02.wav" = "Don't shoot, I'm unarmed!" +"grd_cower_03.wav" = "I'll join the Red Faction, I promise!" +"grd_cower_04.wav" = "I'm on your side!" +"grd_cower_05.wav" = "Ultor sucks! Don't shoot me!" +"grd_cower_06.wav" = "I was only doing my job!" +"grd_cower_07.wav" = "Don't do it, please!" +"grd_cower_08.wav" = "Mercy, please!" +"grd_cower_09.wav" = "I'm sorry! Really, really sorry!" +"grd_cower_10.wav" = "I don't deserve to die!" +"grd_panic_04.wav" = "No! Ahh!" +"grd_panic_05.wav" = "Oh no! Ahh!" +"grd_ulert_02.wav" = "Stop right there, Parker!" +"grd_ulert_03.wav" = "You're that miner!" +"grd_ulert_04.wav" = "You're Parker!" +"grd_ulert_05.wav" = "You're the guy everyone's after!" +"grdc_alert_01.wav" = "Hey you! Stop right there!" +"grdc_alert_02.wav" = "Game's over, scum!" +"grdc_alert_03.wav" = "You're terminated, miner!" +"grdc_alert_04.wav" = "Busted, mine rat!" +"grdc_alert_05.wav" = "You're gonna die, miner!" +"grdc_alert_06.wav" = "Surrender or die!" +"grdc_alert_07.wav" = "Hold it, lowlife!" +"grdc_alert_08.wav" = "Traitor!" +"grdc_alert_09.wav" = "Say your prayers, miner." +"grdc_batt1_01.wav" = "Rebel scum!" +"grdc_batt1_02.wav" = "Prepare to die!" +"grdc_batt1_03.wav" = "Protest this, miner!" +"grdc_batt1_04.wav" = "You're a dead man!" +"grdc_batt1_05.wav" = "Try and take me, miner." +"grdc_batt1_06.wav" = "Stand still and die like a man!" +"grdc_batt1_07.wav" = "Scum!" +"grdc_batt1_08.wav" = "Come get some!" +"grdc_batt1_09.wav" = "Payback time!" +"grdc_batt1_10.wav" = "Time to die, miner!" +"grdc_batt2_01.wav" = "Move it!" +"grdc_batt2_02.wav" = "Go! Go! Go!" +"grdc_batt2_03.wav" = "Watch the flanks!" +"grdc_batt2_04.wav" = "Take point!" +"grdc_batt2_05.wav" = "Heads up!" +"grdc_batt2_06.wav" = "Flank him!" +"grdc_batt2_07.wav" = "Stay together!" +"grdc_batt2_08.wav" = "Attack!" +"grdc_batt2_09.wav" = "Hit him hard!" +"grdc_batt2_10.wav" = "No mercy!" +"grdc_cower_01.wav" = "Wait, I have a family on Earth." +"grdc_cower_02.wav" = "Let me live and I'll never shoot another miner. I promise." +"grdc_cower_03.wav" = "I'm really a miner, undercover." +"grdc_cower_04.wav" = "I give up!" +"grdc_cower_05.wav" = "I didn't ask for this promotion." +"grdc_cower_06.wav" = "Man, I hate Mars." +"grdc_cower_07.wav" = "You win, you win." +"grdc_cower_09.wav" = "No, don't!" +"grdc_cower_10.wav" = "I surrender." +"grdc_ulert_01.wav" = "Hey, this is my lucky day, Parker." +"grdc_ulert_02.wav" = "You! You're one of the ringleaders." +"grdc_ulert_03.wav" = "You there! Parker!" +"grdc_ulert_05.wav" = "You there, Parker! I know you! You're a dead man!" +"grdc_ulert_06.wav" = "You're a dead man, Parker!" +"l10s1_capk_01.wav" = "You have arrived at an excellent time, Parker. Feeding time!" +"l10s1_capk_02.wav" = "Not to worry, Parker. Those specimens were a failed batch anyway." +"l10s1_capk_03.wav" = "I have plenty of scientists to assist me, Parker. A few less matter not at all." +"l10s1_capk_04.wav" = "Look closely, Parker. Do you recognize any old friends?" +"l10s1_capk_05.wav" = "Not every specimen reacts favorably to nanotech injections." +"l10s1_capk_06.wav" = "But, no matter, even the failures teach us something." +"l10s1_capk_07.wav" = "In the advancement of science, anyone, even you, Parker, can serve a useful purpose." +"l10s2_capk_01.wav" = "I must be going now, Parker. Enjoy your stay among my exhibits." +"l10s2_capk_02.wav" = "Maybe you will have the honor of joining them someday soon." +"l10s2_capk_03.wav" = "Perhaps we will meet again, Parker. You should hope not." +"l10s3_capk_01.wav" = "Ah, I see you have reached my submarine bay. Go ahead, Parker. Take a ride." +"l10s3_hen_01.wav" = "Parker! I did it! I cracked into the security network for Capek's secret labs." +"l10s3_hen_02.wav" = "That's where he's heading, Parker. There's a huge research facility down there." +"l10s3_hen_03.wav" = "I contacted Eos. She's headed that way too." +"l10s3_hen_04.wav" = "I can't reach Eos. I left a message with Orion, in case she checks in." +"l10s4_capk_01.wav" = "This is the feeding chute, Parker. Something is hungry." +"l10s4_capk_02.wav" = "Come, Parker. I am waiting for you." +"l10s4_capk_03.wav" = "No, Parker, I will not make it that easy." +"l10s4_capk_04.wav" = "Keep pressing the button, Parker. Perhaps it will suddenly work." +"l10s4_capk_05.wav" = "I weary of this, Parker. Perhaps you should find another way." +"l10s4_hen_01.wav" = "You won't believe the things that've been going on in this lab, Parker." +"l10s4_hen_02.wav" = "This is the source of the Plague, that's for sure." +"l10s4_hen_03.wav" = "Capek's been working on nanotechnology, testing its effects on living beings." +"l10s4_hen_04.wav" = "Animals or humans -- Capek doesn't care. The Plague is his creation. Be very careful, Parker." +"l11s1_capk_01.wav" = "Welcome to my domain, Parker." +"l11s1_capk_02.wav" = "I trust you will find it to your liking...." +"l11s1_capk_03.wav" = "You will pay for every iota of damage you cause, Parker. You will pay dearly." +"l11s1_grd_01.wav" = "You sure he's coming?" +"l11s1_grd_02.wav" = "Why bother? No one's gonna come this way." +"l11s1_grd_03.wav" = "I dunno. Somethin's spooked Capek, the way he flew through the main gate." +"l11s1_grd_04.wav" = "But it's cold and I'm tired. There's no one coming." +"l11s1_grdc_01.wav" = "Just keep your eyes open. You don't wanna be the guy who let someone into Capek's labs. Wouldn't be healthy." +"l11s1_grdc_02.wav" = "Just shut up and keep your eyes open. You're gonna get us both killed." +"l11s1_sci_01.wav" = "Please don't hurt me. I just work here." +"l11s1_sci_02.wav" = "Don't go in there. He's waiting for you." +"l11s2_capk_01.wav" = "Step inside, Parker. Some of my most promising specimens reside within." +"l11s2_capk_02.wav" = "Perhaps you would like a closer look?" +"l11s2_capk_03.wav" = "[cut] I have arranged some entertainment for you, Parker. Watch." +"l11s2_capk_04.wav" = "Who knows, Parker? These might have once been friends of yours." +"l11s2_capk_05.wav" = "So hard to tell now, is it not?" +"l11s2_capk_06.wav" = "Ah, I see I have another uninvited guest. I need to make arrangements for her as well." +"l11s2_doc_01.wav" = "Get out of here, you fool! Don't you see what happens to miners Capek gets his hands on?" +"l11s2_min_01.wav" = "Run! Now! Or you'll end up like those, those...things." +"l11s2_sci_01.wav" = "Don't shoot me. Capek told us you were coming." +"l11s2_sci_02.wav" = "He's in the central research chamber. He's the one you want." +"l11s2_sci_03.wav" = "You'll never get through his nanotech shield, though. Get away, while you still can!" +"l11s3_capk_01.wav" = "You are entering my inner sanctum now, Parker. Enjoy your last few minutes of normal life." +"l11s3_capk_02.wav" = "Ah, together again, Parker. This time, I shall not be so merciful." +"l11s3_capk_03.wav" = "And Eos here as well. Let us invite your friend Hendrix to join us, shall we?" +"l11s3_capk_04.wav" = "Alas, my dear, you have no say in who lives or dies here." +"l11s3_capk_05.wav" = "Fools! You cannot begin to understand the forces I control!" +"l11s3_capk_06.wav" = "No! You will die for that, Parker!" +"l11s3_eos_01.wav" = "Capek! Give us the antidote for the Plague and we'll let you live!" +"l11s3_eos_02.wav" = "Good idea, Parker! I'll keep him busy. You go after his power source!" +"l11s3_eos_04.wav" = "Parker, go out the way I came in. Someone's waiting outside for you." +"l11s3_eos_05.wav" = "There's something you need to do for me. He'll explain; I don't have the time!" +"l11s3_eos_06.wav" = "You're wasting my time and yours. Just go!" +"l11s3_eos_07.wav" = "Don't be a fool. If you don't go, we'll both die here!" +"l11s3_eos_08.wav" = "There's no time now. Run!" +"l11s3_paa_01.wav" = "Self-destruct sequence initiated. Personnel have 75 seconds to evacuate." +"l11s3_paa_02.wav" = "Self-destruct sequence initiated. Personnel have 60 seconds to evacuate." +"l11s3_paa_03.wav" = "Self-destruct sequence initiated. Personnel have 45 seconds to evacuate." +"l11s3_paa_04.wav" = "Self-destruct sequence initiated. Personnel have 30 seconds to evacuate." +"l11s3_paa_05.wav" = "Self-destruct sequence initiated. Personnel have 15 seconds to evacuate." +"l11s3_paa_06.wav" = "60 seconds to self-destruct." +"l11s3_paa_07.wav" = "45 seconds to self-destruct." +"l11s3_paa_08.wav" = "30 seconds to self-destruct." +"l11s3_paa_09.wav" = "15 seconds to self-destruct." +"l11s3_paa_10.wav" = "10 seconds to self-destruct." +"l11s3_paa_11.wav" = "5 . . . 4 . . . 3 . . . 2 . . . 1 . . . Detonate." +"l12s1_hen_03.wav" = "Parker, Orion says Eos was planning to bring a computer disk to Ultor's Communications Center." +"l12s1_hen_04.wav" = "Eos had contacts in the Earth Defense Force. She thought they'd send a rescue fleet if we put out a distress call." +"l12s1_hen_05.wav" = "The message and transmission codes are on the disk. All you have to do is get it to a communications console." +"l12s1_hen_06.wav" = "The Comm Center's at the end of this canyon. Let's deal with the canyon first, then look for a way up to the Comm Center." +"l12s1_hen_07.wav" = "Somewhere down there is a natural tunnel that Ultor used as an outflow pipe for the sewage system." +"l12s1_hen_08.wav" = "That's the only way up from the canyon floor." +"l12s1_hen_10.wav" = "It was blocked by a landslide about six months ago, but Ultor cleared it off." +"l12s1_min_01.wav" = "Are you Parker? Eos said that if she didn't come out, you would." +"l12s1_min_02.wav" = "She said to give you this computer disk. I dunno why." +"l12s1_min_03.wav" = "We need to go to the far end of the canyon." +"l12s1_min_04.wav" = "I'll drive. You hop in back and man the gun." +"l12s1_min_05.wav" = "It was rough getting here, and I don't expect it'll be any easier getting back." +"l12s1_min_06.wav" = "Keep them off us or we'll never make it through!" +"l12s2_hen_01.wav" = "Still no word from Eos. I don't think she made it." +"l12s2_hen_03.wav" = "First Eos is lost, and now Ultor's sent in reinforcements." +"l12s2_hen_04.wav" = "They've kept a regiment of mercenaries in reserve. Now they're coming out." +"l12s2_hen_05.wav" = "The mercs are led by Colonel Masako, a real nasty piece of work." +"l12s2_hen_06.wav" = "They're all butchers, and she's the worst of them." +"l12s2_hen_08.wav" = "Got some more bad news for you, Parker." +"l12s2_hen_09.wav" = "Orion still hasn't heard from Eos, but that's not the really bad news." +"l12s2_hen_10.wav" = "Once you've sent the message from the Comm Center, we still have to get the fleet in here." +"l12s2_hen_11.wav" = "Ultor has a system of laser satellites orbiting Mars. They'll tear the fleet apart unless we disable them somehow." +"l12s2_hen_13.wav" = "There's a space station that controls the satellites. We've got to get you up there." +"l12s2_hen_15.wav" = "But let's get that message out first." +"l12s2_tech_01.wav" = "I don't know how much longer I can deal with this crap." +"l12s2_tech_02.wav" = "Hey, I'd rather be down here where it's quiet than up top where all hell's breaking loose." +"l12s2_tech_03.wav" = "I guess, but it really stinks down here." +"l12s2_tech_04.wav" = "In a couple more months, you won't even notice." +"l12s2_tech_05.wav" = "That's what I'm afraid of." +"l12s2_tech_06.wav" = "Hey, I've been down here for years, and it hasn't affected me none." +"l12s2_tech_07.wav" = "I notice you don't get invited to a lot of parties...." +"l12s2_tech_08.wav" = "Yeah, yeah. Get back to work, wiseass." +"l13s1_hen_01.wav" = "You're in, Parker. Now for the hard part." +"l13s1_hen_02.wav" = "The console you need to reach is at the highest level of the Comm Center." +"l13s1_hen_05.wav" = "Parker! There are mercenaries in the Communications Center!" +"l13s1_hen_06.wav" = "They're starting to appear all over the complex, taking over from the security guards." +"l13s1_hen_07.wav" = "They're killing every miner and guard they see." +"l13s1_paa_01.wav" = "Code Yellow Alert. Intruder in Communications Center. Apprehend or neutralize immediately." +"l13s1_tech_01.wav" = "Did you hear gunfire? Something's going on." +"l13s1_tech_02.wav" = "Just stay here and do your job. Let the guards and mercs handle it. That's their job." +"l13s3_hen_02.wav" = "If you're going to do this, do it now!" +"l13s3_hen_03.wav" = "That's the way out, but it's locked. I'm working on it." +"l13s3_hen_04.wav" = "Keep moving! You've got to reach the top level." +"l13s3_hen_05.wav" = "The console you want is under the windows that look out onto the transmission dish." +"l13s3_hen_07.wav" = "The airlock at the tower's base is open now. I hacked into the security system and overrode its locks." +"l13s3_paa_01.wav" = "Code Red Alert. Intruder in Communications Tower." +"l14s1_hen_01.wav" = "Remember the miners on the shuttle that got blown up?" +"l14s1_hen_02.wav" = "To get you to the space station safely, we need to take out Ultor's missile defense system." +"l14s1_hen_03.wav" = "The tram tunnels go to Missile Command. There's an entrance to the tunnels through this canyon." +"l14s1_hen_04.wav" = "The mercs have fortified this area. Keep moving and keep your head down!" +"l14s2_eos_01.wav" = "Parker, Eos here." +"l14s2_eos_02.wav" = "I found the antidote formula and got out of there. Glad to see you made it too." +"l14s2_eos_03.wav" = "We've got people synthesizing the antidote now. Then we'll see if it works." +"l14s2_eos_04.wav" = "But you've gotta get up to that space station and disable the laser satellite network." +"l14s2_eos_05.wav" = "If that defense system is still working when the EDF fleet shows up, they'll get blown out of the sky." +"l14s2_hen_01.wav" = "This tram should take you to the Missile Command Center." +"l14s2_hen_02.wav" = "Once you've disabled the missile systems, we can get you onto the next shuttle up to the space station." +"l14s2_hen_03.wav" = "If those missiles are still active, Ultor will shoot the shuttle out of the sky." +"l14s2_hen_07.wav" = "Don't get off here! This isn't the Missile Command Center." +"l14s2_hen_08.wav" = "Get back on the tram! If it leaves without you, you'll never reach the shuttle in time!" +"l14s2_paa_01.wav" = "Code Yellow Alert. Intruder in tramway system. Security response level 2." +"l14s3_hen_01.wav" = "The Command Center's at the back of this building. Hurry!" +"l14s3_hen_02.wav" = "I've jammed the missile bay doors closed. All you have to do is send the launch signal." +"l14s3_hen_03.wav" = "The missiles will explode in their launch bays and destroy that part of the complex." +"l14s3_hen_04.wav" = "Run, Parker! Get to the tram and get out of there!" +"l14s3_hen_05.wav" = "That whole area's gonna blow!" +"l14s3_paa_01.wav" = "Code Red Alert. Intruder in Missile Command Center. Security response level 1." +"l14s3_paa_02.wav" = "Unauthorized missile launch sequence in progress. Abort immediately." +"l14s3_paa_03.wav" = "30 seconds until missile launch." +"l14s3_paa_04.wav" = "20 seconds until missile launch." +"l14s3_paa_05.wav" = "10 seconds until missile launch." +"l14s3_paa_06.wav" = "5...4...3...2...1...Launch." +"l14s3_paa_07.wav" = "Missile launch aborted." +"l14s3_tech_01.wav" = "Out of my way, you fool! I have to stop that launch or we'll all die!" +"l15s1_eos_02.wav" = "The mercs are coming out hard. My squads are pinned down all over the complex." +"l15s1_eos_03.wav" = "Most of the miners outside our base are dead or hiding." +"l15s1_hen_01.wav" = "Parker, are you still there? Stop standing around and get going!" +"l15s1_hen_02.wav" = "I'm putting a countdown timer for the shuttle liftoff on your HUD." +"l15s1_hen_03.wav" = "That's how much time you have to reach it. You can still make it, if you hurry." +"l15s1_hen_05.wav" = "This looks like some kind of motor pool. Check around -- a vehicle would get you to the shuttle a lot faster." +"l15s2_eos_01.wav" = "Parker, please hurry. Our outlying guard posts are reporting skirmishes with merc squads." +"l15s2_eos_03.wav" = "If the EDF doesn't get here soon, there's going to be nothing left." +"l15s2_hen_01.wav" = "Don't stop for anything, Parker. You don't have much time left." +"l15s2_hen_02.wav" = "The merc commander, Masako, is sending out a heavy weapons squad to stop you." +"l15s4_hen_01.wav" = "Hurry, Parker! They're starting to seal up the shuttle bay." +"l15s4_hen_02.wav" = "That door's been sealed for launch. Look for another way in." +"l15s4_hen_03.wav" = "This is the cargo loading system." +"l15s4_hen_04.wav" = "You might be able to sneak in through the loading docks." +"l15s4_hen_06.wav" = "Hurry, they're sealing the doors into the loading dock!" +"l15s4_hen_07.wav" = "Move it! The shuttle's sealing up!" +"l15s4_hen_08.wav" = "Parker -- find a place to hide before the shuttle takes off. Hurry!" +"l15s4_paa_01.wav" = "Shuttle liftoff in one minute." +"l15s4_paa_02.wav" = "Shuttle liftoff in 30 seconds." +"l15s4_paa_03.wav" = "Shuttle liftoff in 5...4...3...2...1...Liftoff." +"l15s4_paa_04.wav" = "Shuttle liftoff in 15 seconds." +"l17s1_hen_02.wav" = "You've gotta disable Ultor's planetary defense system before the fleet reaches Mars, or they'll be toast." +"l17s1_hen_03.wav" = "Parker, the mercs are all over the mining complex now." +"l17s1_hen_06.wav" = "You're in the reactor section now, Parker." +"l17s1_hen_11.wav" = "The command center is up this shaft. The escape pods and labs are down the shaft." +"l17s1_hen_12.wav" = "You have to open this from the command center." +"l17s1_paa_01.wav" = "Intruder alert. Sector lockdowns in effect. Code Red Emergency." +"l17s1_paa_02.wav" = "Reactor overload in 90 seconds." +"l17s1_paa_03.wav" = "Reactor overload in 60 seconds." +"l17s1_paa_04.wav" = "Reactor overload in 45 seconds." +"l17s1_paa_05.wav" = "Reactor overload in 30 seconds." +"l17s1_paa_06.wav" = "Reactor overload in 20 seconds." +"l17s1_paa_07.wav" = "Reactor overload in 15 seconds." +"l17s1_paa_08.wav" = "Reactor overload in 10 seconds...8...7...6...5...4...3...2...1...Overload." +"l17s2_eos_01.wav" = "Parker, are the defenses down yet? The mercs are in our base, coming from all directions!" +"l17s2_eos_02.wav" = "Parker, Hendrix...base overrun...fighting retreat...falling apart...." +"l17s2_hen_01.wav" = "That did it! The station's lower section should be open now." +"l17s2_hen_02.wav" = "Parker, Ultor has received a message from the incoming EDF fleet." +"l17s2_hen_03.wav" = "It was encoded, so I don't know what it said, but they're panicking down here." +"l17s2_hen_04.wav" = "They're destroying documents and computer systems. And the merc docking bays are swarming with activity." +"l17s2_hen_06.wav" = "Look for overrides to open the station's doors." +"l17s2_hen_07.wav" = "That should open up the lower section of the station." +"l17s2_hen_08.wav" = "The laser satellites are controlled from this room and the next one." +"l17s2_hen_09.wav" = "Each computer controls part of the defensive grid. Take out all eight computers to disable the system." +"l17s2_hen_11.wav" = "The defense system is down temporarily. The only way to permanently disable it is to destroy the station." +"l17s2_hen_13.wav" = "Now overload the reactor and get out!" +"l17s2_paa_01.wav" = "Reactor overload in 60 seconds." +"l17s2_paa_02.wav" = "Reactor overload in 45 seconds." +"l17s2_paa_03.wav" = "Reactor overload in 30 seconds." +"l17s2_paa_04.wav" = "Reactor overload in 20 seconds." +"l17s2_paa_05.wav" = "Reactor overload in 15 seconds." +"l17s2_paa_06.wav" = "Reactor overload in 10 seconds...8...7...6...5...4...3...2...1...Overload." +"l17s3_hen_01.wav" = "That's it, Parker. Now get out of there before the whole place blows!" +"l17s3_hen_02.wav" = "Great! Now overload the reactor and get out of there!" +"l17s3_hen_03.wav" = "Good, Parker. Now find the control room and shut down the satellite defenses." +"l17s3_hen_05.wav" = "Parker, I've lost contact with the Red Faction base." +"l17s3_hen_06.wav" = "I can't raise Eos, Orion, or anyone else there." +"l17s3_hen_07.wav" = "There are miners scattered all over the complex. I'm trying to contact them and gather them together." +"l17s3_paa_01.wav" = "Reactor overload in 60 seconds." +"l17s3_paa_02.wav" = "Reactor overload in 45 seconds." +"l17s3_paa_03.wav" = "Reactor overload in 30 seconds." +"l17s3_paa_04.wav" = "Reactor overload in 20 seconds." +"l17s3_paa_05.wav" = "Reactor overload in 15 seconds." +"l17s3_paa_06.wav" = "Reactor overload in 10 seconds...8...7...6...5...4...3...2...1...Overload." +"l18s1_hen_01.wav" = "Parker, you still alive? I've sent some miners to the crash site to find you." +"l18s1_hen_02.wav" = "They'll try to guide you to the merc base. We're in big trouble." +"l18s1_hen_03.wav" = "The mercs have orders to evacuate the base and destroy the entire mining complex." +"l18s1_hen_04.wav" = "The mercs didn't have to go after the Red Faction base. That was Colonel Masako's idea -- payback for all the trouble the miners caused." +"l18s1_hen_05.wav" = "She led the assault. I overheard her radioing the merc base, reporting complete success." +"l18s1_hen_06.wav" = "The mercs have a bomb, Parker. Some kind of nuclear device. They're going to set it to blow after they've left." +"l18s1_hen_07.wav" = "It's going to wipe out the entire complex, destroying all evidence of Ultor's experiments on Mars, and all of us." +"l18s1_hen_08.wav" = "I'm leading a group of miners to attack the merc base now. Might as well die there as here...." +"l18s1_hen_09.wav" = "At least Orion's still alive. I contacted him and he's leading a group to the merc base too." +"l18s1_hen_10.wav" = "I'll see you there, if we both make it." +"l18s1_min_01.wav" = "Parker -- follow me! We've got an assault team waiting for us." +"l18s1_min_02.wav" = "Ambush!" +"l18s1_min_03.wav" = "We're pinned down!" +"l18s1_min_04.wav" = "Almost there. Our assault team is just ahead." +"l18s2_min_01.wav" = "Their snipers are wiping us out!" +"l18s2_min_02.wav" = "We'll try to hold here and cover you, Parker. You need to meet Hendrix inside the merc base. Good luck!" +"l18s3_paa_01.wav" = "Evacuation Notice: All companies prepare for loading into evac transports." +"l19s1_hen_01.wav" = "Parker! I found your cell and sent down some miners to free you." +"l19s1_hen_02.wav" = "Once you're out, head up to the mercs' HQ. We need your help!" +"l19s1_min_01.wav" = "Hey, buddy. You awake over there?" +"l19s1_min_02.wav" = "You were a sight when they brought you in, all blood and puke." +"l19s1_min_03.wav" = "The medics worked you over and cleaned you up." +"l19s1_min_04.wav" = "Don't know why they bothered. They're just gonna kill us all anyway." +"l19s1_min_05.wav" = "Something big is happening. Lots of mercs running around, movin' stuff." +"l19s1_min_06.wav" = "Don't know what it is, but I bet...." +"l19s1_min_07.wav" = "Red Faction!" +"l19s1_min_08.wav" = "Whichever of you is Parker, come with us -- now!" +"l19s1_min_09.wav" = "C'mon, Parker. We've gotta get out of here!" +"l19s1_paa_01.wav" = "Unauthorized prisoner release in Cell Block 19. Reinforcements needed." +"l19s1_paa_02.wav" = "Evacuation Notice: F Company should now be in evac transports." +"l19s2a_hen_01.wav" = "Parker, I'm in the merc command center. I can see you on the monitors." +"l19s2a_hen_02.wav" = "There's a squad of miners with me, but the whole base is crawling with mercs." +"l19s2a_paa_01.wav" = "Code Red Alert. Intruder in mercenary barracks. Security team respond." +"l19s2a_paa_02.wav" = "Evacuation Notice: E Company should now be in evac transports." +"l19s2b_hen_01.wav" = "Parker! I didn't think you'd make it. Things look really bad." +"l19s2b_hen_02.wav" = "I've got just a few miners left with me. Orion has some more, but I lost contact with him." +"l19s2b_hen_03.wav" = "We're trying to reach Masako before she sets off the bomb, but the doors to the merc docking bay are sealed." +"l19s2b_hen_04.wav" = "I need access to these mainframes to unlock the doors, but I can't hack into them." +"l19s2b_hen_05.wav" = "If you shut down their power sources, I can hack into the mainframes as they're re-booting." +"l19s2b_hen_06.wav" = "Take the elevator in the hall. Once you're on the upper level, the generators are to the left." +"l19s2b_min_01.wav" = "Parker, Hendrix sent us. C'mon, he's in here!" +"l19s2b_min_02.wav" = "We'll watch the door. You go talk to Hendrix." +"l19s2b_min_03.wav" = "Red Faction!" +"l19s2b_paa_01.wav" = "Barracks perimeter compromised. Battalion security team respond." +"l19s2b_paa_02.wav" = "Code Red Alert. Mainframe systems compromised. Security team respond." +"l19s2b_paa_03.wav" = "Evacuation Notice: D Company should now be in evac transports." +"l19s3_hen_01.wav" = "The emergency shutoff should be on the lowest level of the generator room." +"l19s3_hen_03.wav" = "Good work, Parker. The mainframes have powered down. They should come back up when the emergency generators kick in." +"l19s3_hen_04.wav" = "Here they go...I'm hacking in...." +"l19s3_hen_05.wav" = "Got it! I overrode the door locks. We're coming up -- wait outside the generator room for us." +"l19s3_hen_07.wav" = "You've gotta clear the way, Parker. I have to reach an access panel by the door!" +"l19s3_hen_08.wav" = "OK, let's go!" +"l19s3_merc_01.wav" = "Move it! Get your butts in gear!" +"l19s3_paa_01.wav" = "Code Red Alert. Generator facility compromised. Security team respond." +"l19s3_paa_02.wav" = "Main power shut down. Emergency generator on-line. Technician to generator facility." +"l19s3_paa_03.wav" = "Evacuation Notice: C Company should now be in evac transports." +"l1s1_eos_01.wav" = "Miners! This is Eos, leader of the Red Faction. Our time has come!" +"l1s1_eos_02.wav" = "Workers in Mine M-4 have started the rebellion. They're fighting and dying for you as I speak!" +"l1s1_eos_03.wav" = "Find the Red Faction members among you. Join us and strike back at Ultor!" +"l1s1_eos_04.wav" = "Together, we can..." +"l1s1_grd_01.wav" = "Hey, where do you think you're goin'?" +"l1s1_grd_02.wav" = "It's about to get a little longer, mine scum!" +"l1s1_grd_03.wav" = "You threatenin' me? Well, threaten this!" +"l1s1_grd_04.wav" = "Need help! Gotta berserk miner here!" +"l1s1_grd_05.wav" = "What're you lookin' at, miners?" +"l1s1_min_01.wav" = "Leave me alone, jerk. It's been a long day." +"l1s1_min_02.wav" = "Just let me go, or else." +"l1s1_min_03.wav" = "Help, someone! Please help me!" +"l1s1_min_04.wav" = "Hey, get over here! We're with the Red Faction!" +"l1s1_min_05.wav" = "Help! Help!" +"l1s1_min_06.wav" = "Thanks! Hey, come with me." +"l1s1_min_07.wav" = "A buncha miners are heading up to the docking bay to steal a shuttle." +"l1s1_min_08.wav" = "They're gonna get off Mars and back to Earth." +"l1s1_min_09.wav" = "You help me reach the shuttle, and I'll make sure they take you along." +"l1s1_min_10.wav" = "C'mon, Parker! Shift's over." +"l1s1_min_11.wav" = "Grab that guard's gun if you need one. He sure doesn't." +"l1s1_min_12.wav" = "Stick with us. We're heading to the Red Faction base." +"l1s1_min_13.wav" = "Damn guards. I hate 'em, I hate 'em, I hate 'em!" +"l1s1_paa_01.wav" = "Second work shift has ended. Miners return to barracks." +"l1s1_paa_02.wav" = "Disturbance in Mine Sector M-4. Code Yellow Alert." +"l1s1_paa_03.wav" = "Additional security required in Mine Sector M-4." +"l1s1_paa_04.wav" = "All miners are required to return to their barracks until further notice." +"l1s1_paa_05.wav" = "Additional security required in Mine Sector M-4." +"l1s1_paa_06.wav" = "Code Red Alert. Additional security required in Mine Sector M-4." +"l1s1_paa_07.wav" = "All miners are ordered to ignore unauthorized announcements and return to their barracks immediately." +"l1s2_eos_01.wav" = "Remember every dead miner, every injustice, and strike back!" +"l1s2_eos_02.wav" = "The Red Faction will lead you to freedom." +"l1s2_grd_01.wav" = "He went this way!" +"l1s2_min_01.wav" = "Red Faction!" +"l1s2_paa_01.wav" = "Code Red Alert in Mine M-4. Security level 2 response required." +"l1s2_paa_02.wav" = "Code Red Emergency in Mine M-4. Security level 1 response required." +"l1s2_paa_03.wav" = "Unauthorized vehicle usage in M-4 Driller Bay. Security respond." +"l1s3_hen_01.wav" = "Parker, you don't know me, but my name's Hendrix and I want to help you." +"l1s3_hen_02.wav" = "I'm a security technician with Ultor. I have my own reasons for hating them and wanting to help you." +"l1s3_hen_03.wav" = "I've been watching the riots on security monitors. You're the only miner from M-4 to make it this far." +"l1s3_hen_04.wav" = "Be careful, Parker. Ultor's rushing forces in to block the mines and keep the rebellion from spreading." +"l1s3_min_01.wav" = "Run! They're killing everyone in the barracks!" +"l1s3_paa_01.wav" = "Attention all personnel. Mine M-4 will be sealed in five minutes. All personnel are required to evacuate immediately." +"l1s3_paa_02.wav" = "Code Yellow Alert. Disturbance in Barracks C-2. Security respond." +"l20s1_hen_01.wav" = "Hurry, Parker -- run for the far doors. I'm going into the control room to help open things up for you." +"l20s1_hen_02.wav" = "Parker...stop them...don't let Ultor get away with...it all...." +"l20s1_mas_01.wav" = "Well, look at this -- Hendrix has finally come out of hiding!" +"l20s1_mas_02.wav" = "Here's what mercs do to traitors, Hendrix!" +"l20s1_mas_03.wav" = "You seem to be almost out of friends, Parker." +"l20s1_mas_04.wav" = "Here come some of my friends to entertain you." +"l20s1_mas_05.wav" = "I'd stay myself, but I have other matters to attend to." +"l20s1_merc_01.wav" = "He's in the ventilation system! Flush him out!" +"l20s1_merc_02.wav" = "Fan out and secure the hangar!" +"l20s1_paa_01.wav" = "Evacuation Notice: B Company should now be in evac transports." +"l20s2_eos_01.wav" = "Parker, don't just stand there gawking -- hurry up!" +"l20s2_eos_02.wav" = "Masako set the timer on the bomb before she went up after you. There may be only seconds left." +"l20s2_eos_03.wav" = "No time to untie me. Grab the circuit analyzer in my front pocket and attach it to the bomb." +"l20s2_eos_04.wav" = "Masako didn't bother taking it from me. See if you can use it to figure out the bomb's deactivation sequence." +"l20s2_mas_01.wav" = "Parker, I'm going to be the last person to see you alive." +"l20s2_mas_02.wav" = "Maybe I'll pay a visit to your parents when I get back to Earth." +"l20s2_mas_03.wav" = "There won't even be a body for them to sob over. You and the rest of the scum will be vaporized in the blast!" +"l20s2_paa_01.wav" = "Evacuation Notice: A Company should now be in evac transports." +"l20s2_paa_02.wav" = "First wave of transports is underway." +"l20s2_paa_03.wav" = "Second wave of transports is underway." +"l20s2_paa_04.wav" = "Final wave of transports is underway." +"l20s3_eos_01.wav" = "Hurry, Parker!" +"l20s3_eos_02.wav" = "What's taking so long, Parker?" +"l20s3_eos_03.wav" = "C'mon, Parker, c'mon!" +"l20s3_paa_01.wav" = "One minute until detonation." +"l20s3_paa_02.wav" = "30 seconds until detonation." +"l20s3_paa_03.wav" = "Ten seconds until detonation." +"l20s3_paa_04.wav" = "Detonation." +"l2s1_paa_01.wav" = "Attention all personnel. Mine M-4 has been sealed." +"l2s1_paa_02.wav" = "Code Red Alert. Security emergency in Barracks C-2. All available personnel respond." +"l2s2a_grd_01.wav" = "Damn miners!" +"l2s2a_grd_02.wav" = "There'll be one fewer of you rats when I'm done!" +"l2s2a_grd_03.wav" = "There's another one. Get him!" +"l2s2a_grd_04.wav" = "Too late for that, mine scum!" +"l2s2a_hen_02.wav" = "That elevator's been destroyed. You'll have to find another way up." +"l2s2a_hen_03.wav" = "I think I can still get you to the docking bay, Parker." +"l2s2a_hen_06.wav" = "If I can reach someone in the Red Faction, I'll ask how you can link up with them. I'll let you know...." +"l2s2a_min_01.wav" = "Get me out of here! There's a keycard on the desk." +"l2s2a_min_02.wav" = "I think the guards forgot about me. Let me out before they come back!" +"l2s2a_min_03.wav" = "I can help you escape. Some miners are grabbing a shuttle and getting off Mars." +"l2s2a_min_04.wav" = "Thanks! Follow me!" +"l2s2a_min_05.wav" = "Help! Help! Can anyone hear me? Help!" +"l2s2a_min_06.wav" = "Stop, please! I surrender!" +"l2s2a_min_07.wav" = "No, stop, please! I'll go back to work!" +"l2s2a_min_08.wav" = "Dark...so dark...can't see. I can hear you...sound like a miner. Get up to the docking bay...ship leaving...." +"l2s2a_paa_01.wav" = "Security to Miner Barracks C-2. Security to Barracks C-2." +"l2s2a_paa_02.wav" = "Additional security needed in Miner Barracks C-2." +"l2s2a_paa_03.wav" = "All miners are ordered to lay down their weapons and report to the nearest security checkpoint. You will not be harmed." +"l2s2a_paa_04.wav" = "Intruder in Guard Training Facility. Security response required." +"l2s3_grd_01.wav" = "You're hearin' things." +"l2s3_grd_02.wav" = "Johnson? Farris? Are you OK?" +"l2s3_grdc_01.wav" = "Shut up, idiot. I heard shots, and they're not answering their comm sets." +"l2s3_hen_01.wav" = "There's a back route into the docking bay up ahead, if it's not blocked." +"l2s3_hen_02.wav" = "The escaping miners came this way too. The elevators ahead were destroyed in the fighting. You'll have to climb up." +"l2s3_paa_01.wav" = "Security team needed in docking bay processing area." +"l2s3_paa_02.wav" = "Intruders in C-2 maintenance tunnels. Security response required." +"l3s2_grd_01.wav" = "I hear we're getting wiped out in the mines. Where are the mercs who're supposed to back us up?" +"l3s2_grd_02.wav" = "Forget 'em. We can handle these miners." +"l3s2_hen_01.wav" = "The trams aren't running anymore, Parker. Ultor's cutting off the miners every way they can." +"l3s2_hen_03.wav" = "Don't panic, Parker. I should be able to hack the doors open in a minute or two." +"l3s2_hen_04.wav" = "OK, now you can panic. There are guards coming...." +"l3s2_hen_05.wav" = "Hold on, I've almost got it.... There!" +"l3s2_paa_01.wav" = "Code Red Alert. Disturbance in Docking Bay 2. Security response required." +"l3s2_paa_02.wav" = "Security to Registration tramway. Intruder apprehended and awaiting escort." +"l3s2_paa_03.wav" = "Code Yellow Alert. Intruder in Miner Registration. Security respond." +"l3s2_paa_04.wav" = "Code Yellow Alert. Intruder in Registration Medical Facility. Security respond." +"l3s3_grdc_01.wav" = "Security Unit 27 responding. Over." +"l3s3_grdc_02.wav" = "Let's go, let's go!" +"l3s3_hen_02.wav" = "Hurry, Parker. The miners are at the shuttle." +"l3s3_hen_03.wav" = "There they go. If only you'd been faster...." +"l3s3_hen_04.wav" = "Maybe being slow isn't such a bad thing." +"l3s3_hen_06.wav" = "The docking bay's unpressurized now. You have to shut its emergency doors before this door will open." +"l3s3_hen_08.wav" = "That did it. Once the docking bay's pressurized, the containment door will retract." +"l3s3_hen_10.wav" = "That explosion blew out the docking bay door. Before you can enter, you need to activate the emergency doors from the control room." +"l3s3_paa_01.wav" = "Intruders in Docking Bay 2. Security to Docking Bay 2." +"l3s3_paa_02.wav" = "Security breach in Geothermal Plant #4. Additional units requested." +"l3s4_grd_01.wav" = "I don't see anyone." +"l3s4_grd_02.wav" = "Someone triggered the alarms. Split up and check all the storerooms." +"l3s4_hen_03.wav" = "There should be a control panel somewhere to open the containment door." +"l3s4_paa_01.wav" = "Intruder in Docking Bay 4. Security to Docking Bay 4." +"l3s4_paa_02.wav" = "Intruder in Docking Bay 4 maintenance facility. Security respond." +"l4s1a_eos_03.wav" = "If you can stay alive until we fight our way back up, we'll find you." +"l4s1a_eos_04.wav" = "There are squads of miners somewhere ahead of you, Parker. Try to link up with them." +"l4s1a_grdc_02.wav" = "Who's there? Drop your weapon and show yourself!" +"l4s1a_hen_02.wav" = "Careful down here, Parker. The guards are sweeping all the mines, killing everyone." +"l4s1a_hen_03.wav" = "The door's jammed. Blast around it, if you can." +"l4s1a_hen_04.wav" = "I'm trying to override the door's circuitry to force it open for you, Parker. Give me a minute...." +"l4s1a_hen_06.wav" = "The elevator ahead should take you down to Level N-17, fairly close to the Red Faction base." +"l4s1a_paa_01.wav" = "All non-security personnel are required to return to their barracks for the duration of the disturbances." +"l4s1b_hen_01.wav" = "Careful down here, Parker. This mine section was abandoned years ago and it's none too stable." +"l4s1b_hen_02.wav" = "There are more groups of miners moving ahead of you. Eos must be after something important." +"l4s2_egrd_01.wav" = "Wait, I'm on your side! Ultor has ambushes all over this area. They're slaughtering the miners ahead of you. They're..." +"l4s2_eos_01.wav" = "Parker, we need your help. We're trying to knock out an Ultor geothermal power plant in this sector." +"l4s2_eos_02.wav" = "If the power's knocked out, we can launch a major attack. But our squads are running into stiff resistance." +"l4s2_eos_03.wav" = "If you can help them take out the power plant, I can send more miners up to join you." +"l4s2_hen_01.wav" = "There should be a ventilation opening in here that'll take you to the miners I spotted." +"l4s2_min_01.wav" = "C'mon, before those guards catch up!" +"l4s3_eos_01.wav" = "Parker! One of my squads is pinned down inside the ventilation system. Can you help them out?" +"l4s4_hen_04.wav" = "I just overrode the controls for the bridge, Parker. Hurry across!" +"l4s4_min_01.wav" = "...tell Eos we tried...but...sniper on crusher..." +"l4s4_paa_01.wav" = "All miners report to the nearest guard station. You will not be harmed." +"l4s5_eos_01.wav" = "Parker? I've lost touch with everyone else up there. I think you're all we have left." +"l4s5_eos_03.wav" = "Until the power's cut to Ultor's monitoring systems, they know every move we make. We're getting mowed down. I hope you can do it, Parker." +"l4s5_hen_02.wav" = "There's a route past the old rock crusher that should get you to the power plant, Parker." +"l4s5_min_02.wav" = "Help! Help!" +"l4s5_min_03.wav" = "Red Faction!" +"l5s1_grd_01.wav" = "Nah, you'll see. Ultor knows what they're doing. This'll all be over soon." +"l5s1_grd_02.wav" = "Who's there? Show yourself, hands in the air!" +"l5s1_grdc_01.wav" = "Sorry, my bad!" +"l5s1_paa_01.wav" = "All miners report to the nearest guard station. You will not be harmed." +"l5s1_tech_01.wav" = "That's not what I heard. Things're goin' bad all over." +"l5s2_eos_01.wav" = "Hendrix says you made it into the geothermal plant." +"l5s2_eos_02.wav" = "There are five facilities to sabotage -- turbines, water control, water reclamation, lava control, and the main controls." +"l5s2_eos_03.wav" = "The tech in the main control room is on our side. Once you've sabotaged the other four systems, get in there and he'll know what to do." +"l5s2_grd_01.wav" = "Who's down there? Throw down your weapons and come out!" +"l5s2_grd_02.wav" = "At 100 bucks a head, I'm gonna shoot every miner I see!" +"l5s2_grd_03.wav" = "Forget the miners. It's the mercs I'm worried about. They give me the creeps." +"l5s2_grdc_01.wav" = "Cut the chatter and keep sharp. Shoot anything that moves." +"l5s2_grdc_02.wav" = "Stop them! Turn off those overrides!" +"l5s2_hen_04.wav" = "Destroy both pump stations. That'll force even more water into the system." +"l5s2_hen_06.wav" = "Wait, Parker! Hit the main control room last, after sabotaging the other systems." +"l5s2_paa_01.wav" = "All units are now on Code Red. Repeat. Code Red conditions are in effect." +"l5s2_paa_02.wav" = "Geothermal plant turbines overloading. Shut down all systems immediately." +"l5s2_paa_03.wav" = "Lava flow exceeding safe operational parameters." +"l5s2_paa_04.wav" = "Steam pressure approaching dangerous levels." +"l5s2_paa_05.wav" = "Water intake exceeding outflow. Turbine chambers flooding." +"l5s2_paa_06.wav" = "Backpressure building in water reclamation system. Immediate technician attention required." +"l5s2_paa_07.wav" = "Turbine chamber pressure at critical levels. Anomalous event imminent." +"l5s2_paa_08.wav" = "Additional security needed in Geothermal Plant #4." +"l5s2_paa_09.wav" = "Turbine chamber pressure returning to operational parameters. Code Red canceled." +"l5s2_paa_10.wav" = "Intruder in Geothermal Plant 4. Apprehend or neutralize immediately." +"l5s2_paa_11.wav" = "Geothermal plant inoperative. Containment shields in place." +"l5s2_tech_01.wav" = "Don't shoot, I'm on your side! C'mon down here." +"l5s2_tech_02.wav" = "Go to the other control panel and find the override button." +"l5s2_tech_03.wav" = "You see that button? You have to press it while I press this one." +"l5s2_tech_04.wav" = "Ready? 3..2..1..Go!" +"l5s2_tech_06.wav" = "The rest of the plant is probably rubble. You'll have to go out through the sub bay." +"l5s2_tech_07.wav" = "Hurry up, guards will be here soon." +"l5s2_tech_08.wav" = "Didn't work. Let's try again. Don't press until I say 'go!'" +"l5s3_eos_04.wav" = "Ultor has an underwater lab somewhere down there. If you can get inside, I've got a job for you." +"l5s3_grd_01.wav" = "I dunno what it was. Why don't you go check it out?" +"l5s3_grd_02.wav" = "I'm not goin' anywhere. You go and I'll watch the sub." +"l5s3_grdc_01.wav" = "Let's just wait. Command'll tell us if they want it checked out." +"l5s3_hen_02.wav" = "Hurry up, Parker. There should be a release button in the control room and a manual release on the winch." +"l5s4_eos_01.wav" = "Parker, I want you to grab someone. I need you to go into Admin and kidnap Gryphon, Ultor's Deputy Administrator." +"l5s4_eos_02.wav" = "There's a miner waiting for you by the stairs to Admin. Put on the suit he gives you; it's the only way you'll reach Gryphon." +"l5s4_eos_03.wav" = "I think Gryphon knows all about the Plague. Once we have him, we can wring some answers out of him." +"l5s4_grd_01.wav" = "Sarge? You there, Sarge?" +"l5s4_grdc_01.wav" = "Let's go -- get your butts down here!" +"l5s4_hen_01.wav" = "You should see the research center in the cavern ahead." +"l5s4_min_01.wav" = "Parker, over here, behind the stairs!" +"l5s4_min_02.wav" = "Got a monkey suit for you, Parker. Put it on and keep it on." +"l5s4_min_03.wav" = "Give me your weapons. They're too bulky to carry beneath the suit." +"l5s4_min_04.wav" = "Take this silenced pistol. Keep it holstered under your suit. Use it only when you absolutely have to." +"l5s4_min_05.wav" = "Parker, come back! You'll never make it!" +"l5s4_paa_01.wav" = "You are not authorized for entry to this area. Access denied." +"l5s4_tech_01.wav" = "Up, down, up, down. I hate ladders." +"l5s4_tech_02.wav" = "...concern. Do your job and Ultor'll take care of us." +"l5s4_tech_03.wav" = "Why haven't we been relieved yet? The second shift should have been here by now." +"l5s4_tech_04.wav" = "They'll be here. Just get your work done." +"l6s1_admf_01.wav" = "I don't know, but something's up." +"l6s1_admf_02.wav" = "No, that's under control. It's something else..." +"l6s1_admm_01.wav" = "What's been eating Gryphon lately?" +"l6s1_admm_02.wav" = "Think it's the miner strike?" +"l6s1_eos_01.wav" = "Remember, Parker, we want Gryphon alive." +"l6s1_eos_02.wav" = "Miners are dying of the Plague down here. If Gryphon knows anything about it, we have to get it out of him." +"l6s1_hen_01.wav" = "This is a high-security area. Be careful." +"l6s1_hen_02.wav" = "Keep your weapon hidden and don't get too close to anyone." +"l6s1_hen_03.wav" = "Posters of you are everywhere. Guards might recognize you if you get too close." +"l6s1_hen_04.wav" = "And if you have to kill someone, hide the body!" +"l6s1_hen_05.wav" = "Gryphon's office is on the third floor of the Admin area, Parker." +"l6s1_hen_07.wav" = "This elevator's not usually locked. Must be an additional security measure." +"l6s1_hen_08.wav" = "You'll need to take a passcard off an exec. Whatever you do, don't cap him out in the open!" +"l6s1_hen_11.wav" = "Watch out for cameras. If you get too close, a tech might recognize you." +"l6s1_paa_01.wav" = "Security breach in Administration. Additional units requested." +"l6s1_tech_01.wav" = "Hey, you're that miner they're looking for!" +"l6s2_admf_01.wav" = "It's creepy having all these guards around. When will they go away?" +"l6s2_admm_01.wav" = "As soon as the miners go back to work. Not long now." +"l6s2_eos_01.wav" = "Parker, do you have Gryphon yet?" +"l6s2_eos_02.wav" = "I'm sending a squad to meet you and bring Gryphon down here." +"l6s2_hen_01.wav" = "Take the lower hallway that leads to the left. I have a surprise for you, but hurry up!" +"l6s2_hen_02.wav" = "Go through the door to your right." +"l6s2_hen_03.wav" = "Go through the door to your left." +"l6s2_hen_04.wav" = "Hi, Parker. Just wanted to see you in person for a change." +"l6s2_hen_05.wav" = "I have to stay here, where I can do the most good." +"l6s2_paa_01.wav" = "Security breach in Administration. Additional units requested." +"l6s3_admf_01.wav" = "Excuse me, sir. Do you have an appointment?" +"l6s3_admf_02.wav" = "Wait! You can't go in there!" +"l6s3_admf_03.wav" = "I'm sorry, but Mr. Gryphon is busy now. Would you like to make an appointment?" +"l6s3_admf_04.wav" = "All right, Mr. Gryphon. Have a nice tour, Mr. Smith." +"l6s3_grdc_01.wav" = "Going for a swim, sir?" +"l6s3_grdc_02.wav" = "Lose your way, sir?" +"l6s3_gryn_01.wav" = "Sandy, I have to show Mr. Smith here around. Be back in a couple of hours." +"l6s3_gryn_02.wav" = "Stay calm and we'll be fine. Don't make the guards suspicious." +"l6s3_gryn_03.wav" = "And don't take that gun out again, whatever you do." +"l6s3_gryn_04.wav" = "Come on. This is the quickest way out of here." +"l6s3_gryn_05.wav" = "Hey, I could get $25,000 for turning you in. Wow!" +"l6s3_gryn_06.wav" = "Just kidding, Parker." +"l6s3_gryn_07.wav" = "Follow my lead and we'll be OK." +"l6s3_gryn_08.wav" = "You lead the way." +"l6s3_gryn_09.wav" = "Quit fooling around. I'm risking my life here!" +"l6s3_gryn_10.wav" = "Hurry up, Parker." +"l6s3_gryn_11.wav" = "Not the elevator. This way." +"l6s3_gryn_12.wav" = "That's a dead end. We need to take the ramp down." +"l6s3_gryn_13.wav" = "This door leads to storage and maintenance. We can escape that way." +"l6s3_gryn_14.wav" = "Run! They're on to us!" +"l6s3_gryn_15.wav" = "You might want that envirosuit, Parker." +"l6s3_gryn_16.wav" = "It'll be more protection than that badly fitting thing you're wearing now." +"l6s3_gryn_17.wav" = "You shouldn't have done that. Good secretaries are hard to find." +"l6s3_hen_01.wav" = "This is exec land. Be extra careful in here. Security is very tight." +"l6s3_hen_04.wav" = "Parker, I don't trust Gryphon. It's too easy. Watch for a trap." +"l6s3_paa_01.wav" = "Security breach in Administration. Additional units requested." +"l7s1_eos_01.wav" = "My squad's almost reached the maintenance area, Parker. Keep Gryphon alive until you meet them." +"l7s1_eos_02.wav" = "Orion, my best lieutenant, is leading the squad." +"l7s1_gryn_01.wav" = "The fence can't be turned off from this side." +"l7s1_gryn_02.wav" = "I can't open the door. The lock on the other side ate my passcard." +"l7s1_gryn_03.wav" = "You get me to Eos, Parker. I've got enough dirt on Ultor to bury them forever." +"l7s1_gryn_04.wav" = "Ultor's been causing the Plague. Some sort of experiment." +"l7s1_gryn_05.wav" = "It's all Capek's fault. He's the head of Ultor's science and medical labs on Mars." +"l7s1_gryn_06.wav" = "I'll tell Eos all about it." +"l7s1_gryn_07.wav" = "Do you have to kill everyone you meet?" +"l7s1_gryn_08.wav" = "They wouldn't have hurt you!" +"l7s1_gryn_09.wav" = "Stay here, I'll wave us in." +"l7s1_gryn_10.wav" = "Okay, move!" +"l7s1_gryn_11.wav" = "I'll wait here. You secure the way ahead." +"l7s1_hen_02.wav" = "This guy's playing some angle, Parker. Don't let your guard down." +"l7s1_hen_03.wav" = "You're in the bot repair shops now, Parker. Eos's squad should meet you soon." +"l7s2_eos_01.wav" = "Parker, Orion's squad has hit heavy resistance and is pinned down." +"l7s2_eos_02.wav" = "You'll need to bring Gryphon to them, if you can." +"l7s2_eos_03.wav" = "Hendrix told me about the Aesir, Parker. If you can get one, we could sure use it." +"l7s2_gryn_01.wav" = "This way." +"l7s2_gryn_02.wav" = "Um, wait. My mistake. Took a wrong turn." +"l7s2_gryn_03.wav" = "Follow me. There's a hidden door over here." +"l7s2_gryn_04.wav" = "You open the door, Parker. You're the one with the gun." +"l7s2_gryn_05.wav" = "I just remembered. The techs have been working on a flying vehicle for the mercenaries." +"l7s2_gryn_06.wav" = "They call it the Aesir. It's just a prototype, but the techs claim it's fully functional." +"l7s2_gryn_07.wav" = "The testing grounds aren't far. If we can grab one, it'll be a lot safer than walking." +"l7s2_gryn_08.wav" = "You first, Parker." +"l7s2_gryn_09.wav" = "My leg!" +"l7s2_gryn_10.wav" = "I can't walk, you'll have to carry me." +"l7s2_gryn_11.wav" = "Wait, Parker, you can't just leave me here. Eos and the Red Faction need me!" +"l7s2_gryn_12.wav" = "The launch bay is just down this elevator." +"l7s2_gryn_13.wav" = "Hurry, head for the fighter!" +"l7s2_gryn_14.wav" = "There's a checkpoint ahead. I'll wave us through." +"l7s2_gryn_15.wav" = "Looks like you'll have to blast through." +"l7s2_gryn_16.wav" = "Did you disable the turrets on the far side?" +"l7s2_hen_01.wav" = "I don't like this, Parker. Keep an eye on him." +"l7s2_hen_02.wav" = "Go for it, Parker. But watch for traps." +"l7s2_hen_03.wav" = "Looks like there's a connection in the ceiling to some sort of natural cavern, Parker." +"l7s2_hen_04.wav" = "The weasel's right, Parker. We need him." +"l7s2_paa_01.wav" = "Security response required in maintenance and storage facility." +"l7s2_paa_02.wav" = "Additional security needed in maintenance and storage facility." +"l7s3_gryn_01.wav" = "I've never been down here before. I have no idea which way to go." +"l7s3_gryn_02.wav" = "Watch out!" +"l7s3_gryn_03.wav" = "You're going to get me killed!" +"l7s3_gryn_04.wav" = "Don't push your luck, Parker. Remember, you've got valuable cargo -- me!" +"l7s3_gryn_05.wav" = "Move faster, Parker!" +"l7s3_gryn_06.wav" = "You want me to drive?" +"l7s3_gryn_07.wav" = "We can't get out here." +"l7s3_hen_03.wav" = "The opening in the cavern wall should lead toward Orion's position." +"l7s3_hen_04.wav" = "Parker, clear out this area before you try to land." +"l7s3_paa_01.wav" = "Intruder in Aesir maintenance facility. Code Red Alert." +"l7s3_paa_02.wav" = "Intruder in Aesir testing grounds. Security respond." +"l7s4_eos_02.wav" = "Parker, you're not far from Ultor's science and medical labs." +"l7s4_gryn_01.wav" = "That thing's your problem, Parker, not mine!" +"l7s4_hen_01.wav" = "This is Ultor's main trash disposal facility, Parker." +"l7s4_hen_02.wav" = "I can't see Orion's group on my monitors anymore." +"l7s4_hen_04.wav" = "That's an Ultor Personnel Suppression combot. I didn't know they had any on Mars!" +"l7s4_hen_06.wav" = "There's a disposal pit at the lowest point of this level." +"l7s4_hen_07.wav" = "Try to lure the bot out onto the pit's covering, then open the doors from the control room." +"l7s4_hen_09.wav" = "If you decide to go after Dr. Capek, be very careful, Parker." +"l7s4_hen_10.wav" = "The labs are heavily guarded, and Capek is a very nasty creature." +"l7s4_hen_12.wav" = "There's a vent that leads to the labs, but you're not going to like it." +"l7s4_hen_13.wav" = "It's inside the disposal pit. There's an access ladder that leads down to it." +"l7s4_paa_01.wav" = "Security team required in trash disposal facility." +"l8s1_doc_01.wav" = "Let me take a look at your charts." +"l8s1_doc_02.wav" = "Who made these notations? I can't even read them!" +"l8s1_doc_03.wav" = "Not enough for Capek. The man is fanatical." +"l8s1_doc_04.wav" = "We'll see, once the organs are delivered to the science labs." +"l8s1_doc_05.wav" = "No, keep him here on life support in case we need to harvest more." +"l8s1_doc_06.wav" = "You're late. The organs are already on the specimen ward." +"l8s1_doc_07.wav" = "Take them to the labs right away." +"l8s1_doc_08.wav" = "I'll be in my office if his condition changes." +"l8s1_doc_09.wav" = "Actually, compared to just a year ago, our failure rate is much lower." +"l8s1_eos_01.wav" = "Parker, Gryphon's told us a lot more than we ever wanted to know about the Plague." +"l8s1_eos_02.wav" = "You have to grab Capek. He's the key to the whole thing." +"l8s1_eos_03.wav" = "Don't kill him -- hundreds of miners' lives depend on it!" +"l8s1_hen_01.wav" = "You're somewhere above the med labs now, Parker." +"l8s1_hen_02.wav" = "Try to pick a quiet spot to come down out of the vent." +"l8s1_hen_03.wav" = "You need a lab coat or you'll have every guard in here down on you." +"l8s1_hen_04.wav" = "There's a doctor's office right next to this room." +"l8s1_hen_05.wav" = "Don't count on that disguise too much though." +"l8s1_hen_06.wav" = "Anyone who gets a good look at you could recognize you." +"l8s1_hen_07.wav" = "Capek'll be in the science labs, past the med labs." +"l8s1_hen_08.wav" = "Go along with this, Parker. It might help you slip past checkpoints easier." +"l8s1_med_01.wav" = "But the results seem promising, you must admit." +"l8s1_med_02.wav" = "This specimen has developed nicely, perhaps enough to satisfy even Capek." +"l8s1_med_03.wav" = "I know, but the wasted resources still bother me." +"l8s1_min_01.wav" = "Unnnhhhh..." +"l8s1_min_02.wav" = "Doc? You've gotta give me something for the pain..." +"l8s1_min_03.wav" = "Oooooh [low, wordless moan of pain]" +"l8s1_min_04.wav" = "Arrrr [low, wordless moan of pain]" +"l8s1_nur_01.wav" = "Hmm. He's fading fast. I'd better get the doctor." +"l8s1_nur_02.wav" = "I just need some air." +"l8s1_nur_03.wav" = "It's almost as sickening out here as it is in there." +"l8s1_nur_04.wav" = "Shall we bring him back to the ward, doctor?" +"l8s1_nur_05.wav" = "Yes, doctor." +"l8s1_nur_06.wav" = "You'd better hurry. The organs won't keep for long. It'll be your fault if they're unusable." +"l8s1_nur_07.wav" = "They're over here." +"l8s1_nur_08.wav" = "Good. Now hurry up -- don't keep them waiting in the lab." +"l8s1_paa_01.wav" = "Security breach in Medical Labs. Additional units requested." +"l8s2_doc_01.wav" = "...transplating fresh organs to replace those lost to the ravages of nanotech..." +"l8s2_grd_01.wav" = "Sorry, sir. This area is restricted to authorized personnel only." +"l8s2_grd_02.wav" = "We've been expecting you, doctor. They're waiting for the sample in the operating room." +"l8s2_hen_07.wav" = "Parker, I've been studying the labs' security system." +"l8s2_hen_09.wav" = "There's a security door you have to pass to reach Capek's lab." +"l8s2_hen_10.wav" = "The medical lab administrator should have a passcard." +"l8s2_hen_12.wav" = "That's OK, Parker. Take your time. The miners dying of the Plague won't mind." +"l8s2_nur_01.wav" = "Can I help you, doctor?" +"l8s2_nur_02.wav" = "This specimen's paperwork needs the administrator's signature before I can accept it." +"l8s2_nur_03.wav" = "All the paperwork's in order. Go on in, doctor." +"l8s2_nur_04.wav" = "There you go. You'd better get that to Cryo right away." +"l8s2_nur_05.wav" = "That needs to be brought to the OR, sir. This is the Cryo Lab." +"l8s2_paa_01.wav" = "Security breach in Science Labs. Additional units requested." +"l8s3_doc_01.wav" = "Ah, at last, the replacement brainstem has arrived." +"l8s3_doc_02.wav" = "Thank you. Please take this one to Cryo." +"l8s3_doc_03.wav" = "...transplating fresh organs to replace those lost to the ravages of nanotech..." +"l8s3_hen_01.wav" = "The OR is up this ramp." +"l8s3_hen_02.wav" = "Parker, I've been studying the labs' security system." +"l8s3_hen_03.wav" = "There's a security door you have to pass to reach Capek's lab." +"l8s3_hen_04.wav" = "The medical lab administrator should have a passcard." +"l8s3_hen_05.wav" = "His office is in the middle of the complex." +"l8s3_hen_06.wav" = "You have to kill the administrator to get a passcard." +"l8s3_nur_01.wav" = "I'll buzz you through to the administrator, doctor, so he can sign those." +"l8s3_nur_02.wav" = "Doctor, you can't go in there!" +"l8s3_nur_03.wav" = "I'm sorry, doctor. The administrator is very busy." +"l8s3_nur_04.wav" = "The administrator is just upstairs, doctor." +"l8s3_paa_01.wav" = "Security breach in Science Labs. Additional units requested." +"l9s1_capk_01.wav" = "I see you, Parker. I will deal with you later." +"l9s1_capk_02.wav" = "Perhaps you might even be persuaded to join one of my experiments?" +"l9s1_hen_01.wav" = "Capek headed out that way, Parker." +"l9s1_hen_02.wav" = "I can't see into this area. There aren't any security cameras here." +"l9s2_capk_01.wav" = "Still there, Parker? Your persistence is beginning to annoy me." +"l9s2_capk_02.wav" = "No matter. Very soon you will be irrelevant." +"l9s2_capk_03.wav" = "'Where could we be going?' I hear you wonder. Soon you will know, Parker." +"l9s2_hen_01.wav" = "Orion got Gryphon to the Red Faction base, Parker." +"l9s2_hen_02.wav" = "Eos should be picking his brain right now." +"l9s3_eos_01.wav" = "Parker, Gryphon says Capek knows how to cure the Plague." +"l9s3_eos_03.wav" = "I'm coming up there to help you." +"l9s4_capk_01.wav" = "Ah, Parker. So you made it past my little guards." +"l9s4_capk_02.wav" = "Welcome to my zoo, Parker. Feel free to pet the animals. They won't bite." +"l9s4_hen_01.wav" = "Parker, I have an idea where Capek is headed." +"l9s4_hen_02.wav" = "For years, there've been rumors of some sort of secret facility deep underground." +"l9s4_hen_03.wav" = "It's not in the main Ultor security network, so I don't know what's there." +"l9s4_hen_04.wav" = "I'm going to try to hack into the facility's systems from here." +"med_alert_01.wav" = "I can't help you unless you put that weapon away." +"med_alert_02.wav" = "Put that weapon away." +"med_alert_03.wav" = "If you want help, don't threaten me." +"med_alert_04.wav" = "I can't work with a weapon in my face." +"med_alert_05.wav" = "Weapons make me nervous." +"med_cower_01.wav" = "Don't kill me, I'm a medic." +"med_cower_02.wav" = "Don't shoot me, I can help you." +"med_cower_03.wav" = "Wait, I'm unarmed." +"med_cower_04.wav" = "I'm here to help you." +"med_cower_05.wav" = "I don't have a weapon." +"med_cower_06.wav" = "I'm not your enemy." +"med_gone_01.wav" = "Sorry, I've run out of supplies." +"med_gone_02.wav" = "I can't help you, my supplies are gone." +"med_gone_03.wav" = "Sorry, but my med kit's empty." +"med_gone_04.wav" = "Find someone else to heal you. I can't do anymore." +"med_gone_05.wav" = "I'd help you if I could, but I've used up my supplies." +"med_panic_03.wav" = "No, no, no!" +"med_panic_05.wav" = "Ahh!" +"med_timeo_01.wav" = "This won't hurt a bit, that's my motto." +"med_timeo_02.wav" = "Between you and me, I hate Ultor." +"med_timeo_03.wav" = "Believe it or not, I used to faint at the sight of blood." +"med_timeo_04.wav" = "This is nothing compared to the last ER I worked in." +"med_timeo_05.wav" = "I could really go for a roast beef sandwich right now." +"med_timeo_06.wav" = "I'm getting really sick of this place." +"med_timeo_07.wav" = "Ever have one of those days?" +"med_timeo_08.wav" = "Death cures all woes. That's my motto." +"med_ulert_01.wav" = "You're with the Red Faction." +"med_ulert_02.wav" = "Hey, you're Parker." +"med_ulert_03.wav" = "Guards, guards!" +"med_ulert_04.wav" = "It's him, hit the alarm!" +"med_ulert_05.wav" = "He's a miner!" +"med_use_01.wav" = "Let me help you with that." +"med_use_02.wav" = "Hold still and I'll see what I can do." +"med_use_03.wav" = "I'll give you something for that wound." +"med_use_04.wav" = "I can fix you up." +"med_use_05.wav" = "You'll feel better in no time." +"med_use_06.wav" = "Here, let me take a look at that." +"med_use_07.wav" = "Nasty wound you have there." +"med_use_08.wav" = "Nasty wound you have there. This will take just a second. I'll fix you up, but don't tell my boss." +"med_use_09.wav" = "I'll fix you up, but don't tell my boss." +"med_usenw_01.wav" = "Just be happy you're not hurt." +"med_usenw_02.wav" = "Move on, I have wounded to attend to." +"med_usenw_03.wav" = "You're as healthy as a horse." +"med_usenw_04.wav" = "You don't need my help." +"med_usenw_05.wav" = "Come back when you've got a wound for me to heal." +"med_usenw_06.wav" = "Can't help you unless you're hurt." +"merc_alert_01.wav" = "Halt or die." +"merc_alert_02.wav" = "Surrender!" +"merc_alert_03.wav" = "Retreat or die." +"merc_alert_04.wav" = "Die, miner!" +"merc_alert_05.wav" = "Die, miner. Die, scum. Got you, miner." +"merc_alert_06.wav" = "Got you, miner!" +"merc_alert_07.wav" = "Death to miners." +"merc_batt1_01.wav" = "Say your prayers, miner. You don't have a chance." +"merc_batt1_02.wav" = "You don't have a chance!" +"merc_batt1_03.wav" = "Give up now!" +"merc_batt1_04.wav" = "You're dead." +"merc_batt1_05.wav" = "Come on, miner!" +"merc_batt1_06.wav" = "Try me, miner!" +"merc_batt1_07.wav" = "Eat this!" +"merc_batt2_01.wav" = "Watch the flanks!" +"merc_batt2_02.wav" = "Heads up!" +"merc_batt2_03.wav" = "Report!" +"merc_batt2_04.wav" = "Fire!" +"merc_batt2_05.wav" = "Attack!" +"merc_batt2_06.wav" = "Stand your ground!" +"merc_batt2_07.wav" = "Hold your ground, men!" +"merc_batt2_08.wav" = "Fire at will!" +"merc_batt2_09.wav" = "Shoot to kill!" +"merc_cower_01.wav" = "Did I ask for mercy?" +"merc_cower_02.wav" = "Go ahead. Kill me." +"merc_cower_03.wav" = "I'm not gonna beg for my life." +"merc_cower_04.wav" = "You wouldn't dare." +"merc_cower_05.wav" = "Go ahead, I can take it." +"merc_cower_06.wav" = "Stuff it, miner!" +"min_alert_01.wav" = "Reinforcements!" +"min_alert_02.wav" = "Glad you could make it." +"min_alert_03.wav" = "It's about time!" +"min_alert_04.wav" = "About time you got here." +"min_batt2_01.wav" = "Attack! Attack!" +"min_batt2_02.wav" = "Watch your backs, miners!" +"min_batt2_03.wav" = "Work together, miners!" +"min_batt2_04.wav" = "Stay together!" +"min_batt2_05.wav" = "Make every shot count!" +"min_batt2_06.wav" = "Red Faction!" +"min_batt2_07.wav" = "Freedom!" +"min_cower_01.wav" = "Please, let me live!" +"min_cower_02.wav" = "Please, don't shoot!" +"min_cower_03.wav" = "I'll go back to work, I promise." +"min_cower_04.wav" = "I'm a peaceful man." +"min_cower_05.wav" = "Don't shoot, I give up." +"min_cower_06.wav" = "Don't hurt me, please!" +"min_panic_03.wav" = "Ahh!" +"min_timeo_01.wav" = "Well, I did ask for adventure." +"min_timeo_02.wav" = "I suppose I'll be looking for a new job soon." +"min_timeo_03.wav" = "If I survive this, I'm moving to the asteroid belt." +"min_timeo_05.wav" = "Maybe we should just give up." +"min_timeo_06.wav" = "It's quiet out there. Too quiet." +"min_ulert_01.wav" = "Hey, aren't you one of us?" +"min_ulert_02.wav" = "Hey Parker, glad you're here." +"min_ulert_03.wav" = "Glad to meet you, Parker." +"min_ulert_04.wav" = "Doing a great job, Parker." +"min_ulert_05.wav" = "Sure glad you're on our side, Parker." +"min_ulert_06.wav" = "Parker!" +"min_use_01.wav" = "You go ahead." +"min_use_02.wav" = "I'll stay here and hold this position." +"min_use_03.wav" = "My orders are to stay here." +"min_use_04.wav" = "I'm sorry, I can't help you." +"min_use_05.wav" = "I have my orders." +"minf_alert_01.wav" = "Hi." +"minf_alert_02.wav" = "Sure glad to see you." +"minf_alert_03.wav" = "Hey, over here." +"minf_alert_04.wav" = "Are you here to relieve me?" +"minf_batt2_01.wav" = "Red Faction!" +"minf_batt2_02.wav" = "Die, Ultor!" +"minf_batt2_03.wav" = "Help me!" +"minf_batt2_04.wav" = "Let's get him!" +"minf_batt2_05.wav" = "Freedom or death!" +"minf_cower_01.wav" = "Don't hurt me." +"minf_cower_02.wav" = "Don't shoot, please!" +"minf_cower_03.wav" = "I don't wanna die!" +"minf_cower_04.wav" = "I'll go back to work." +"minf_timeo_01.wav" = "Live free or die, that's my motto." +"minf_timeo_02.wav" = "Working on Mars was supposed to build my character." +"minf_timeo_03.wav" = "Where else can we make this kind of money?" +"minf_timeo_04.wav" = "Eos is my inspiration." +"minf_timeo_05.wav" = "I'm going back to Earth when this is over." +"minf_ulert_01.wav" = "Aren't you Parker?" +"minf_ulert_02.wav" = "Parker, I almost didn't recognize you." +"minf_ulert_03.wav" = "Don't worry, I won't give you away, Parker." +"minf_use_01.wav" = "I'm busy, ask someone else." +"minf_use_02.wav" = "You just stay out of my way, buddy." +"minf_use_03.wav" = "I'm staying right here." +"minf_use_04.wav" = "I hope this is all over soon." +"minf_use_05.wav" = "I hate Mars!" +"nur_alert_01.wav" = "Put your weapon away so I can help you." +"nur_alert_02.wav" = "Put the weapon away or bleed, your choice." +"nur_alert_03.wav" = "Quit waving that thing in my face." +"nur_alert_04.wav" = "You want help? Then holster it." +"nur_alert_05.wav" = "Don't threaten me!" +"nur_alert_06.wav" = "Weapons make me nervous." +"nur_cower_01.wav" = "Don't kill me. I'm a nurse." +"nur_cower_02.wav" = "No, please!" +"nur_cower_03.wav" = "I'm no threat to you!" +"nur_cower_04.wav" = "I can't help you if I'm dead!" +"nur_cower_05.wav" = "Wait! I'm on your side!" +"nur_cower_06.wav" = "You wouldn't shoot a woman, would you?" +"nur_gone_01.wav" = "Go find a doctor. I can't help anyone right now." +"nur_gone_02.wav" = "My med kit's empty. Sorry." +"nur_gone_03.wav" = "I can't heal you. No more supplies." +"nur_gone_04.wav" = "I'm out of medical supplies. Would you like a lollipop?" +"nur_gone_05.wav" = "My supplies are all gone. Maybe someone else can help you." +"nur_timeo_01.wav" = "Patch them up and send them back. That's my motto." +"nur_timeo_02.wav" = "Ugh, the doctors here are such pompous jerks." +"nur_timeo_03.wav" = "This place makes me sick." +"nur_timeo_04.wav" = "Ugh, this is nothing compared to the last ER I worked in." +"nur_timeo_05.wav" = "Six more hours until my shift is over." +"nur_timeo_06.wav" = "And I thought I had it tough at the nursing home." +"nur_timeo_07.wav" = "If I survive this, I'm going to vet school." +"nur_timeo_08.wav" = "It was this or an ER back on Earth." +"nur_timeo_09.wav" = "I'm working here to pay off my student loans." +"nur_timeo_10.wav" = "Okay, you're starting to creep me out." +"nur_ualert_01.wav" = "You're with the Red Faction!" +"nur_ualert_02.wav" = "Hey, you're Parker!" +"nur_ualert_03.wav" = "You're the guy who started all this." +"nur_ualert_04.wav" = "Hey, I recognize you. Guards!" +"nur_use_01.wav" = "You want me to patch that for you?" +"nur_use_02.wav" = "Let's take a look at that." +"nur_use_03.wav" = "This will do the trick." +"nur_use_04.wav" = "A little antibiotic and you're on your way." +"nur_use_05.wav" = "That'll hold you." +"nur_use_06.wav" = "Hold still and let me do my job." +"nur_use_07.wav" = "Oh, that looks nasty, but I can handle it." +"nur_use_08.wav" = "I'll fix you up, but don't tell anyone." +"nur_usenw_01.wav" = "If you're not wounded, you're in the wrong place." +"nur_usenw_02.wav" = "Come back when you're wounded." +"nur_usenw_03.wav" = "If you're healthy, you don't belong here." +"nur_usenw_04.wav" = "Move on, I have wounded to attend to." +"nur_usenw_05.wav" = "I'm not wasting supplies on healthy people." +"nur_usenw_06.wav" = "I don't see any blood." +"tech_alert_01.wav" = "Guards! A miner!" +"tech_alert_02.wav" = "Over here! Help!" +"tech_alert_03.wav" = "You don't belong in here." +"tech_alert_04.wav" = "Go away or I'll call the guards." +"tech_alert_05.wav" = "Sound the alarm!" +"tech_alert_06.wav" = "Get out of here! Now!" +"tech_alert_07.wav" = "This is a classified area! Guards!" +"tech_cower_01.wav" = "Please, leave me alone!" +"tech_cower_02.wav" = "I'm unarmed!" +"tech_cower_03.wav" = "I haven't done anything wrong!" +"tech_cower_04.wav" = "Don't hurt me! Please!" +"tech_cower_05.wav" = "Go away! Leave me alone!" +"tech_cower_06.wav" = "I'm just doing my job!" +"tech_cower_07.wav" = "Wait! I'm on your side!" +"tech_cower_08.wav" = "Some of my best friends are miners." +"tech_cower_09.wav" = "I didn't do anything!" +"tech_cower_10.wav" = "Wait! I hate Ultor too!" +"tech_timeo_01.wav" = "I can't wait to get back to Earth." +"tech_timeo_02.wav" = "I love it here on Mars." +"tech_timeo_03.wav" = "I don't have time for this." +"tech_timeo_04.wav" = "I just want to work in peace." +"tech_timeo_05.wav" = "This job sucks." +"tech_timeo_06.wav" = "If I live through this, I'm going back to Earth." +"tech_timeo_07.wav" = "Those miners are never happy." +"tech_timeo_08.wav" = "Why does there have to be so much killing?" +"tech_timeo_09.wav" = "When my shift's over, I'm gonna go play video games." +"tech_timeo_10.wav" = "You should get out of here before you get in trouble." +"tech_ulert_01.wav" = "Say, aren't you Parker?" +"tech_ulert_02.wav" = "Hey, you're with the Red Faction." +"tech_ulert_03.wav" = "That's you on those posters." +"tech_ulert_04.wav" = "I know you. You're Parker." +"tech_ulert_05.wav" = "You're not one of us." +"tech_ulert_06.wav" = "You're Parker." +"tech_use_01.wav" = "I'm not taking sides in this conflict." +"tech_use_02.wav" = "My place is here with my work." +"tech_use_03.wav" = "Please, don't ask me to interfere." +"tech_use_04.wav" = "There's nothing for you here. Please leave." +"tech_use_05.wav" = "Come back later. I have no time now." +"tech_use_06.wav" = "Ultor has been very good to me." +"tech_use_07.wav" = "Just let me do my work, okay?" +"tech_use_08.wav" = "Sorry, I'm too busy." +"tech_use_09.wav" = "Don't you have somewhere else to be?" +"tech_use_10.wav" = "Leave, please. Guards will be here soon." +"training_ps2_01_inst_01.wav" = "OK, Parker, this is the training phase of your Red Faction probationary period." +"training_ps2_01_inst_02.wav" = "If you survive, you'll be ready to help lead the miner rebellion against Ultor, when the time comes." +"training_ps2_01_inst_03.wav" = "Some doors open as you approach." +"training_ps2_01_inst_04.wav" = "Others, like this airlock door, require you to press a button to open." +"training_ps2_01_inst_05.wav" = "If the button doesn't work, the door's locked. You'll have to find the access card or control to unlock it." +"training_ps2_01_inst_06.wav" = "Keep an eye on your suit's gauges, which are in the upper left corner of your HUD. The outer ring is your suit's integrity. If it gets to zero, you suffer damage when you're outside." +"training_ps2_01_inst_07.wav" = "Practice climbing on the fence, girders, and ladder in your envirosuit." +"training_ps2_01_inst_08.wav" = "When you're done, climb up the ladder and go through the door." +"training_ps2_01_inst_09.wav" = "Get used to that sound. You'll hear alarms a lot once we strike back at Ultor." +"training_ps2_01_inst_10.wav" = "Step into the security control room to learn how to use a monitor." +"training_ps2_01_inst_11.wav" = "Monitors let you see through security cameras in other locations. So we can turn Ultor's surveillance systems against them." +"training_ps2_01_inst_12.wav" = "Pretend the barrels are guards and take them out with this turret." +"training_ps2_01_inst_13.wav" = "If you've been injured or your suit's been damaged, check containers, medical cabinets, and lockers for medpacks and suit repair kits." +"training_ps2_01_inst_14.wav" = "If you ever need to hide a body, pick it up, carry it somewhere out of the way, and dump it." +"training_ps2_01_inst_15.wav" = "Looks like this door is broken. Crouch to get underneath it." +"training_ps2_01_inst_16.wav" = "Practice jumping across this small gap." +"training_ps2_01_inst_17.wav" = "Nothing more to shoot here, Parker. Keep moving." +"training_ps2_01_inst_18.wav" = "This gap is wider. Get a running start and don't jump until you're right at the edge." +"training_ps2_01_inst_19.wav" = "There's a medic in the room to your right. Medics are sworn to heal anyone, even rebels." +"training_ps2_01_inst_20.wav" = "Go to the medic and he'll bandage your wounds." +"training_ps2_01_inst_21.wav" = "Hey! If you destroy the cameras, I can't see you and I'll have a hard time helping you through training." +"training_ps2_01_inst_22.wav" = "You need to learn how to use security monitors before progressing to the next training stage." +"training_ps2_01_inst_23.wav" = "You have to destroy all the barrels to advance to the next section of training." +"training_ps2_01_inst_24.wav" = "You need to let the medic heal you before moving on to the next section of training." +"training_ps2_01_inst_25.wav" = "You must dump the body in the storage room before you can advance to the next training stage." +"training_ps2_01_inst_26.wav" = "You need to open some of the containers before you can progress to the next section of training." +"training_ps2_01_inst_27.wav" = "If those barrels were guards, you'd be dead. Move along to the next area." +"training_ps2_01_inst_28.wav" = "The inner ring is your health. When it gets to zero, you're dead." +"training_ps2_02_inst_01.wav" = "Ask nicely, and the miner will open the door for you." +"training_ps2_02_inst_02.wav" = "Like the sub? We stole it from Ultor." +"training_ps2_02_inst_03.wav" = "Climb in and take it for a ride, in case you have to drive a vehicle after we launch the revolt." +"training_ps2_02_inst_04.wav" = "Fire some torpedoes to get a feel for it." +"training_ps2_02_inst_05.wav" = "Head for the other tunnel when you're ready to continue." +"training_ps2_02_inst_06.wav" = "Climb out of the sub and go up the stairs." +"training_ps2_02_inst_07.wav" = "Open the gun cabinet and grab the pistol and sniper rifle." +"training_ps2_02_inst_08.wav" = "Take some target practice here. Be sure to destroy all the bottles." +"training_ps2_02_inst_09.wav" = "Open up your message log and scroll through the messages I've sent you." +"training_ps2_02_inst_10.wav" = "This log automatically records messages that you receive." +"training_ps2_02_inst_11.wav" = "Reinforced glass is unbreakable. Go ahead -- shoot it." +"training_ps2_02_inst_12.wav" = "Normal glass can be shattered by weapon fire, allowing you into the room beyond." +"training_ps2_02_inst_13.wav" = "The containers inside the room hold a rocket launcher and some remote charges." +"training_ps2_02_inst_14.wav" = "Use these to blow a hole in the wall at the 'X.'" +"training_ps2_02_inst_15.wav" = "Once the hole's big enough, go through it. Then get onto the elevator back to the mines." +"training_ps2_02_inst_16.wav" = "Congratulations, you've passed the Red Faction training session!" +"training_ps2_02_inst_17.wav" = "Nothing more to shoot here, Parker. Keep moving." +"training_ps2_02_inst_18.wav" = "This door's locked. You'll have to find another way around." +"training_ps2_02_inst_19.wav" = "The gauge in the upper right of your HUD shows how much ammo you have left." +"training_ps2_02_inst_20.wav" = "The first number shows the rounds in your weapon. The second shows the extra rounds you're carrying." +"training_ps2_02_inst_21.wav" = "Go through the door on your left to enter the target range." +"training_ps2_02_inst_22.wav" = "Sometimes it pays to be inconspicuous. Holstering your weapon will help you blend in, since guns make people jumpy." +"training_ps2_02_inst_23.wav" = "Explosive weapons damage only softer materials, such as concrete, cement, or rock, not harder materials, such as metal or steel." +"training_ps2_02_inst_24.wav" = "You must ask the miner to open the door before moving on to the next stage of training." +"training_ps2_02_inst_25.wav" = "You have to shoot all the bottles before advancing to the next section of training." +"training_ps2_02_inst_26.wav" = "You must take the weapons from the cabinet before progressing on to the next training stage." +"training_ps2_02_inst_27.wav" = "OK, Parker -- time to go. Get back to the barracks before you're missed." +"training_ps2_02_min_01.wav" = "Go right on through, Parker."