"""
FreeExile Canonical Storyline and Beggar's Chronicle Catalog.
Contains act descriptions, journal entries, and narrative monologues.
Decoupled from storyline execution logic.
"""

from __future__ import annotations
from typing import Dict, List
from server.world.storyline_types import (
    StoryAct,
    BeggarAscentStage,
    JournalEntry,
    StoryActDefinition,
    StoryCutscene,
)


def get_canonical_acts() -> Dict[StoryAct, StoryActDefinition]:
    """Returns definitions for the 5 Narrative Acts of the Beggar's Journey."""
    return {
        StoryAct.ACT_I_HUNGER: StoryActDefinition(
            act=StoryAct.ACT_I_HUNGER,
            title="Hồi I: Đáy Vực Đói Rét",
            subtitle="The Dregs of Hunger",
            description=(
                "Bị kẻ quyền quý vu oan, tước đoạt thân phận và ném xuống Hoang Vực Lưu Đày. "
                "Tỉnh dậy bên xác tàu đắm với chiếc bát vỡ và manh áo rách, gã hành khất phải "
                "tranh từng miếng thịt thối với bầy thi cẩu để giành lấy quyền được thở."
            ),
            recommended_level_range="Cấp 1 - 10",
            primary_zone_id="zone_tang_kiem_nhai",
            climax_boss_id="boss_strand_executioner",
            climax_boss_name="Đao Phủ Bến Tàu Tàn Xương",
            stage_unlocked=BeggarAscentStage.MENDICANT,
            completion_reward_title="Hoang Giới Kẻ Sống Sót",
            journal_ids=["journal_01_chiec_bat_vo", "journal_02_khuc_cui_kho", "journal_03_mau_am_trong_tuy"],
        ),
        StoryAct.ACT_II_MIASMA: StoryActDefinition(
            act=StoryAct.ACT_II_MIASMA,
            title="Hồi II: Vũng Bùn Nhục Nhã",
            subtitle="The Putrid Humiliation",
            description=(
                "Băng qua Đầm Lầy Thối Rữa ngập ngang ngực trong làn chướng khí ăn mòn thịt xương. "
                "Đối mặt với lũ đỉa khổng lồ, heo rừng gai sắt và tên cai ngục tàn bạo năm xưa. "
                "Kẻ ăn mày nhận ra: ở chốn bùn nhơ này, cúi đầu là chết, chỉ có nanh vuốt mới giữ được mạng."
            ),
            recommended_level_range="Cấp 10 - 25",
            primary_zone_id="zone_ancient_sword_barrow",
            climax_boss_id="boss_putrid_ancient_corpse",
            climax_boss_name="Cổ Thi Ngàn Năm Đầm Lầy",
            stage_unlocked=BeggarAscentStage.SCAVENGER,
            completion_reward_title="Kẻ Mót Xương Bùn Độc",
            journal_ids=["journal_04_bun_ngap_ngang_nguc", "journal_05_gap_lai_cai_nguc", "journal_06_doan_truy_co_thi"],
        ),
        StoryAct.ACT_III_CRUCIBLE: StoryActDefinition(
            act=StoryAct.ACT_III_CRUCIBLE,
            title="Hồi III: Bão Cát Nung Thể",
            subtitle="The Sandstorm Crucible",
            description=(
                "Cơn khát cháy khô cổ họng giữa Sa Cốt Hoang Mạc. Bão cát rách toạc da thịt nung nấu "
                "bản năng dã tính. Tay không xé toạc mai giáp Bọ Cạp Sa Cốt Khổng Lồ, rèn đúc Song Binh, "
                "đập tan sào huyệt sa tặc và trở thành thủ lĩnh của những kẻ cùng khổ."
            ),
            recommended_level_range="Cấp 25 - 45",
            primary_zone_id="zone_boundless_sandstorm",
            climax_boss_id="boss_dune_bone_scorpion",
            climax_boss_name="Bọ Cạp Sa Cốt Khổng Lồ",
            stage_unlocked=BeggarAscentStage.BONE_WARRIOR,
            completion_reward_title="Cuồng Cốt Chiến Giả",
            journal_ids=["journal_07_con_khat_sa_mac", "journal_08_bo_cap_khong_lo", "journal_09_nhung_ke_cung_kho"],
        ),
        StoryAct.ACT_IV_TITAN_HUNT: StoryActDefinition(
            act=StoryAct.ACT_IV_TITAN_HUNT,
            title="Hồi IV: Trảm Sát Thú Vương",
            subtitle="The Primal Titan Hunt",
            description=(
                "Bước vào Phế Tích Xẻ Thịt và Tế Đàn Man Hoang cổ xưa. Từ kẻ đi săn mồi trở thành nỗi khiếp sợ "
                "của muôn loài. Đơn thương độc mã trảm sát Cổ Huyết Cự Viên và Quỷ Mãng, dung hợp Tà Ấn "
                "Dị Biến cực hạn vào tủy sống, biến cơ thể thành cỗ máy chiến tranh man dại."
            ),
            recommended_level_range="Cấp 45 - 65",
            primary_zone_id="zone_blood_scale_ruins",
            climax_boss_id="boss_primal_blood_ape",
            climax_boss_name="Cổ Huyết Cự Viên",
            stage_unlocked=BeggarAscentStage.PRIMAL_HUNTER,
            completion_reward_title="Thợ Săn Cự Thú Cổ Đại",
            journal_ids=["journal_10_dau_truong_xe_thit", "journal_11_ha_guc_cuong_vien", "journal_12_khac_an_nghich_menh"],
        ),
        StoryAct.ACT_V_SOVEREIGN: StoryActDefinition(
            act=StoryAct.ACT_V_SOVEREIGN,
            title="Hồi V: Vinh Quang Đỉnh Phong",
            subtitle="The Sovereign of Deadlands",
            description=(
                "Khai mở Thiết Bị Astral 6 Cổng Hư Không dẫn vào sào huyệt tận cùng của bóng tối. "
                "Đè bẹp Chúa Tể Hoang Vực, thâu tóm bảo vật tối cao Huyết Ảnh Cổ Kính. "
                "Từ một kẻ hành khất áo rách nát đáy cùng xã hội, vươn lên thành Bá Chủ Tối Cao Cõi Lưu Đày."
            ),
            recommended_level_range="Cấp 65 - 100+",
            primary_zone_id="zone_abyssal_ice_pond",
            climax_boss_id="boss_forsaken_scourge_lord",
            climax_boss_name="Chúa Tể Hoang Vực",
            stage_unlocked=BeggarAscentStage.SOVEREIGN_OUTCAST,
            completion_reward_title="Vạn Giới Chí Tôn",
            journal_ids=["journal_13_sau_canh_cong_hu_khong", "journal_14_chua_te_quy_vuong", "journal_15_vinh_quang_dinh_phong"],
        ),
    }


def get_canonical_journals() -> Dict[str, JournalEntry]:
    """Returns the 15 chronicle journal entries capturing the Beggar's evolution."""
    return {
        # ACT I
        "journal_01_chiec_bat_vo": JournalEntry(
            journal_id="journal_01_chiec_bat_vo",
            act=StoryAct.ACT_I_HUNGER,
            stage=BeggarAscentStage.MENDICANT,
            chapter_index=1,
            title="Chiếc Bát Vỡ Bên Bờ Đá",
            narrator_monologue=(
                "Nước biển mặn chát tràn vào phổi khiến ta tỉnh giấc. Xung quanh là xác tàu đắm, "
                "mùi tanh tưởi của rong rêu và máu khô. Trong túi áo rách chỉ còn nửa mảnh bát mẻ "
                "và cái bụng lép kẹp réo lên đau quặn từng cơn. Một con Thi Cẩu đang gặm xác bên cạnh, "
                "mắt nó đỏ ngầu nhìn ta như một bữa ăn kế tiếp. Ta đói... đói đến phát điên!"
            ),
            unlock_quest_id="quest_norm_01_thuc_tinh_tang_kiem",
            location_name="Bờ Đá Tàn Xương",
            quote_highlight="Khi cơn đói vượt qua nỗi sợ, gã ăn mày cũng dám bóp cổ dã thú.",
        ),
        "journal_02_khuc_cui_kho": JournalEntry(
            journal_id="journal_02_khuc_cui_kho",
            act=StoryAct.ACT_I_HUNGER,
            stage=BeggarAscentStage.MENDICANT,
            chapter_index=2,
            title="Khúc Củi Khô & Đòn Đả Cẩu",
            narrator_monologue=(
                "Ta nhặt một khúc gỗ trôi dạt có gắn mảnh sắt rỉ, vót nhọn đầu gậy vào gờ đá sắc. "
                "Con chó hoang lao tới ngoạm lấy cánh tay trần của ta. Cơn đau thấu xương, nhưng ta "
                "không buông gậy. Ta vung củi đập nát sọ nó. Một đòn, hai đòn, ba đòn! "
                "Đây là đòn võ công đầu tiên ta học được nơi cõi chết: Đả Cẩu Sinh Tồn."
            ),
            unlock_quest_id="quest_norm_02_khai_thong_dan_dien",
            location_name="Bờ Đá Tàn Xương",
            quote_highlight="Không có bí kíp thần thánh nào cứu được ta, chỉ có gậy ăn mày vấy máu.",
        ),
        "journal_03_mau_am_trong_tuy": JournalEntry(
            journal_id="journal_03_mau_am_trong_tuy",
            act=StoryAct.ACT_I_HUNGER,
            stage=BeggarAscentStage.MENDICANT,
            chapter_index=3,
            title="Máu Ấm Trong Tủy Cốt",
            narrator_monologue=(
                "Bên trong tủy sống con Đao Phủ bến tàu vỡ vụn là một viên đá đỏ thẫm tỏa ra hơi nóng rực. "
                "Kẻ lưu đày gọi nó là Huyết Thạch. Ta dùng ngón tay run rẩy ấn viên đá vào vết thương "
                "hở trên ngực. Huyết quản ta sôi sục, xương cốt kêu răng rắc. Ta không còn là kẻ "
                "hấp hối nữa... một thứ dã tính man rợ đã cắm rễ vào tủy ta."
            ),
            unlock_quest_id="quest_norm_03_luyen_khi_hoa_thach",
            location_name="Doanh Trại Bến Lưu Đày",
            quote_highlight="Nỗi nhục nhã năm xưa bỗng hóa thành ngọn lửa thiêu đốt trong ngực.",
        ),

        # ACT II
        "journal_04_bun_ngap_ngang_nguc": JournalEntry(
            journal_id="journal_04_bun_ngap_ngang_nguc",
            act=StoryAct.ACT_II_MIASMA,
            stage=BeggarAscentStage.SCAVENGER,
            chapter_index=4,
            title="Bùn Ngập Ngang Ngục",
            narrator_monologue=(
                "Đầm Lầy Thối Rữa không có đường mòn, chỉ có bùn đen ngập đến tận thắt lưng và bầy đỉa "
                "khổng lồ bám chặt vào da thịt hút no máu. Chướng khí màu tím làm mắt ta cay xè, "
                "từng hơi thở như hít phải tro than. Nhưng so với ánh mắt khinh miệt của những kẻ "
                "từng tống ta vào ngục, vũng bùn này vẫn còn dịu dàng chán."
            ),
            unlock_quest_id="quest_norm_04_diet_u_hon_kiem_no",
            location_name="Đầm Lầy Thối Rữa",
            quote_highlight="Kẻ từng ngủ dưới rãnh nước bẩn không bao giờ sợ bùn lầy nuốt chửng.",
        ),
        "journal_05_gap_lai_cai_nguc": JournalEntry(
            journal_id="journal_05_gap_lai_cai_nguc",
            act=StoryAct.ACT_II_MIASMA,
            stage=BeggarAscentStage.SCAVENGER,
            chapter_index=5,
            title="Nợ Cũ Dưới Xích Sắt",
            narrator_monologue=(
                "Trong đám xác thối rữa dưới hầm mộ, ta nhận ra khuôn mặt méo mó của gã cai ngục năm xưa. "
                "Hắn cũng bị lưu đày, chân bị xích sắt kẹp chặt, đang run rẩy van xin ta mẩu xương thối. "
                "Ta không cứu hắn, cũng không giết hắn bằng kiếm. Ta bẻ gãy xích sắt lấy làm vũ khí, "
                "để mặc hắn tự gặm nhấm nỗi sợ giữa bầy dã thú. Báo thù ngọt ngào nhất là sự trơ trẽn của số phận."
            ),
            unlock_quest_id="quest_norm_05_khai_mo_van_gioi_cac",
            location_name="Hầm Mộ Tàn Binh",
            quote_highlight="Kẻ cầm roi ngày trước nay bò lê dưới chân kẻ ăn mày.",
        ),
        "journal_06_doan_truy_co_thi": JournalEntry(
            journal_id="journal_06_doan_truy_co_thi",
            act=StoryAct.ACT_II_MIASMA,
            stage=BeggarAscentStage.SCAVENGER,
            chapter_index=6,
            title="Đoản Trùy Róc Xương Cổ Thi",
            narrator_monologue=(
                "Con Cổ Thi Ngàn Năm gầm lên, móng vuốt xé toạc ngực ta trước khi bị ta dùng thanh đoản trùy "
                "bằng xích sắt nện lún sọ. Ta ngồi bệt trên vũng bùn máu, dùng dao cùn cạy từng đốt xương "
                "cứng như thép của nó để ghép thành giáp hộ tâm. Một kẻ mót xương chính hiệu "
                "không bỏ phí bất cứ thứ gì từ kẻ địch ngã xuống."
            ),
            unlock_quest_id="quest_hidden_01_huyen_anh_to_su",
            location_name="Đầm Lầy Thối Rữa",
            quote_highlight="Xương của kẻ thù là tấm khiên vững chãi nhất của ta.",
        ),

        # ACT III
        "journal_07_con_khat_sa_mac": JournalEntry(
            journal_id="journal_07_con_khat_sa_mac",
            act=StoryAct.ACT_III_CRUCIBLE,
            stage=BeggarAscentStage.BONE_WARRIOR,
            chapter_index=7,
            title="Cơn Khát Cháy Cổ Họng",
            narrator_monologue=(
                "Sa Cốt Hoang Mạc không có bóng râm. Mặt trời thiêu đốt như chảo lửa, gió rít từng cơn mang "
                "theo cát sắc cứa rách da mặt. Môi ta nứt nẻ rỉ máu, ta phải nuốt chính máu mình để không gục ngã. "
                "Nhiều kẻ lưu đày đã bỏ mạng vì ảo ảnh nước mát. Nhưng kẻ từng nhịn đói bảy ngày bảy đêm "
                "như ta biết rằng: chừng nào ý chí chưa tắt, tim vẫn sẽ đập!"
            ),
            unlock_quest_id="quest_hidden_02_tan_bi_than_tuong",
            location_name="Sa Cốt Hoang Mạc",
            quote_highlight="Cơn khát chỉ giết được kẻ yếu đuối, nó trui rèn kẻ bất khuất thành thép nguội.",
        ),
        "journal_08_bo_cap_khong_lo": JournalEntry(
            journal_id="journal_08_bo_cap_khong_lo",
            act=StoryAct.ACT_III_CRUCIBLE,
            stage=BeggarAscentStage.BONE_WARRIOR,
            chapter_index=8,
            title="Chiến Đao Vỏ Bọ Cạp",
            narrator_monologue=(
                "Bọ Cạp Sa Cốt Khổng Lồ to bằng gian nhà, kim độc của nó đâm thủng tảng đá lớn. "
                "Ta né nhát độc trong gang tấc, leo lên lưng nó và cắm phập lưỡi xà cừ vào khớp mắt. "
                "Khi quái thú đổ sập, ta dùng rìu lột toàn bộ lớp vỏ chitin đen bóng, gọt giũa thành cặp "
                "Song Binh Cốt Đao bén ngọt. Giờ đây, ta đã có nanh vuốt thật sự."
            ),
            unlock_quest_id="quest_epic_01_phong_ma_co_tran",
            location_name="Ốc Đảo Sa Cốt",
            quote_highlight="Từ chiếc gậy ăn mày đến cặp đao róc thịt quái thú: ta đã lột xác.",
        ),
        "journal_09_nhung_ke_cung_kho": JournalEntry(
            journal_id="journal_09_nhung_ke_cung_kho",
            act=StoryAct.ACT_III_CRUCIBLE,
            stage=BeggarAscentStage.BONE_WARRIOR,
            chapter_index=9,
            title="Bữa Tiệc Của Kẻ Hành Khất",
            narrator_monologue=(
                "Ta san bằng trại sa tặc, giải thoát cho hàng chục kẻ hành khất đang bị nhốt trong lồng sắt. "
                "Đêm đó, bên đống lửa trại rực sáng, chúng ta nướng thịt thú rừng hoang dã. "
                "Không còn kẻ xin, người cho — chỉ có những người anh em cùng cõi lưu đày chia nhau từng miếng tủy. "
                "Họ gọi ta là Cuồng Cốt Thủ Lĩnh. Một kẻ ăn mày... nay có những kẻ nguyện liều mạng đi theo!"
            ),
            unlock_quest_id="quest_hidden_03_ngu_hanh_tuong_sinh",
            location_name="Pháo Đài Cát Đổ",
            quote_highlight="Kẻ từng không có nổi một mái che đầu nay đã dựng nên thành lũy cho muôn người.",
        ),

        # ACT IV
        "journal_10_dau_truong_xe_thit": JournalEntry(
            journal_id="journal_10_dau_truong_xe_thit",
            act=StoryAct.ACT_IV_TITAN_HUNT,
            stage=BeggarAscentStage.PRIMAL_HUNTER,
            chapter_index=10,
            title="Mùi Máu Của Kẻ Mạnh",
            narrator_monologue=(
                "Phế Tích Xẻ Thịt là đấu trường cổ xưa nơi máu của hàng vạn chiến binh và quái thú ngấm sâu "
                "vào từng thớ đá. Không khí đặc quánh mùi tanh nồng. Bọn cuồng tướng lưu đày gầm thét vây hãm. "
                "Nhưng ta không còn lùi bước nữa. Máu sôi trong lồng ngực thúc giục ta lao vào giữa bầy đao kiếm. "
                "Càng chém giết, ta càng tỉnh táo lạ kỳ."
            ),
            unlock_quest_id="quest_hidden_04_u_hon_oan_kiem",
            location_name="Phế Tích Xẻ Thịt",
            quote_highlight="Ta từng là con mồi chạy trốn, nay ta là thợ săn đứng trên đỉnh xác chết.",
        ),
        "journal_11_ha_guc_cuong_vien": JournalEntry(
            journal_id="journal_11_ha_guc_cuong_vien",
            act=StoryAct.ACT_IV_TITAN_HUNT,
            stage=BeggarAscentStage.PRIMAL_HUNTER,
            chapter_index=11,
            title="Trảm Cự Viên Cổ Huyết",
            narrator_monologue=(
                "Cổ Huyết Cự Viên cao ba trượng, nắm đấm giáng xuống làm nứt toác mặt đất. "
                "Nó xé toạc vai trái của ta, nhưng đổi lại, đao cốt của ta đã cắt đứt toàn bộ gân gót chân nó. "
                "Khi con cự thú gầm lên tuyệt vọng và ngã quỵ, ta bước tới vung nhát đao quyết định. "
                "Khoác lên mình bộ da lông thú đẫm máu của nó, ta cảm nhận uy áp của thú vương chảy trong từng tế bào."
            ),
            unlock_quest_id="quest_epic_02_nghich_menh_dai_huyet",
            location_name="Tế Đàn Man Hoang",
            quote_highlight="Cự thú ngã xuống, để lại cho ta chiếc áo choàng của bậc vương giả.",
        ),
        "journal_12_khac_an_nghich_menh": JournalEntry(
            journal_id="journal_12_khac_an_nghich_menh",
            act=StoryAct.ACT_IV_TITAN_HUNT,
            stage=BeggarAscentStage.PRIMAL_HUNTER,
            chapter_index=12,
            title="Tà Ấn Rực Cháy Trong Xương",
            narrator_monologue=(
                "Ta dùng xương sọ quái thú khắc từng nét Tà Ấn Dị Biến trực tiếp lên Khung Cốt của chính mình. "
                "Đau đớn như bị xẻ thịt lột da ngàn lần, nhưng mỗi tà ấn cắm sâu là một lần sức mạnh nhân lên gấp bội. "
                "Kỳ kinh bát mạch của ta không còn theo lẽ thường, mà rực cháy theo quy luật sinh tồn man rợ. "
                "Nghịch mệnh... ta chính là kẻ nghịch mệnh!"
            ),
            unlock_quest_id="quest_epic_03_luyen_che_thai_hu_kinh",
            location_name="Tế Đàn Man Hoang",
            quote_highlight="Số phận muốn ta chết dưới đáy rãnh, ta khắc lên xương mình bản án nghịch thiên.",
        ),

        # ACT V
        "journal_13_sau_canh_cong_hu_khong": JournalEntry(
            journal_id="journal_13_sau_canh_cong_hu_khong",
            act=StoryAct.ACT_V_SOVEREIGN,
            stage=BeggarAscentStage.SOVEREIGN_OUTCAST,
            chapter_index=13,
            title="Sáu Ngả Đường Hư Không",
            narrator_monologue=(
                "Chiếc Bàn Trận Astral sáu cổng mở ra trước mắt ta, xoay chuyển không gian hư không thăm thẳm. "
                "Bên kia mỗi cánh cổng là những cõi đất chết tàn khốc nhất mà thế gian chưa từng biết tới: "
                "bão tuyết độc, khe nứt vực thẳm và bầy bọ ăn xác không đáy. Không ai ép ta bước vào. "
                "Nhưng đỉnh phong vinh quang đang vẫy gọi ở phía bên kia."
            ),
            unlock_quest_id="quest_epic_04_van_gioi_than_ma_tranh_ba",
            location_name="Vực Đầm Băng Độc",
            quote_highlight="Kẻ bắt đầu từ hư vô thì không có gì trên đời để mất.",
        ),
        "journal_14_chua_te_quy_vuong": JournalEntry(
            journal_id="journal_14_chua_te_quy_vuong",
            act=StoryAct.ACT_V_SOVEREIGN,
            stage=BeggarAscentStage.SOVEREIGN_OUTCAST,
            chapter_index=14,
            title="Gặp Mặt Chúa Tể Hoang Vực",
            narrator_monologue=(
                "Nó là hiện thân của đại nạn lưu đày ngàn năm, khổng lồ như một ngọn núi đen ngòm, "
                "hơi thở phả ra lửa độc thiêu rụi vạn vật. Nó nhìn ta như nhìn một hạt bụi vô danh. "
                "Nhưng nó không biết rằng, hạt bụi này đã từng ăn giòi bọ, bò qua bùn lầy, uống máu sa mạc "
                "và đập vỡ sọ từng con dã thú để đứng được ở đây. Hôm nay, một kẻ ăn mày sẽ kết liễu một vị thần!"
            ),
            unlock_quest_id="ms_tier_4_nghich_menh_chuyen_luan",
            location_name="Đền Thờ Hư Không Tối Cao",
            quote_highlight="Ngươi là thần của sự diệt vong, còn ta là kẻ sống sót vĩ đại nhất cõi này.",
        ),
        "journal_15_vinh_quang_dinh_phong": JournalEntry(
            journal_id="journal_15_vinh_quang_dinh_phong",
            act=StoryAct.ACT_V_SOVEREIGN,
            stage=BeggarAscentStage.SOVEREIGN_OUTCAST,
            chapter_index=15,
            title="Ngôi Vương Của Kẻ Không Nhà",
            narrator_monologue=(
                "Chúa Tể gục ngã dưới chân ta, vỡ tan thành muôn vàn mảnh Huyết Ảnh Cổ Kính rực rỡ vô song. "
                "Gió lạnh thổi bay tà áo choàng lông thú khổng lồ của ta. Phía dưới, hàng vạn người lưu đày "
                "đang reo hò cúi đầu tôn xưng. Ta đưa tay sờ vào ngực áo... mảnh bát vỡ năm xưa vẫn còn đó. "
                "Ta từng là kẻ hành khất không nhà, bị thế gian khinh rẻ. Giờ đây, ta là Bá Chủ Tối Cao của cõi đời này!"
            ),
            unlock_quest_id="ms_tier_5_van_gioi_chi_ton",
            location_name="Đỉnh Phong Vô Giới",
            quote_highlight="Vinh quang không sinh ra từ nhung lụa, vinh quang được đúc từ bùn lầy, máu và tàn cốt.",
        ),
    }


def get_canonical_cutscenes() -> Dict[str, StoryCutscene]:
    """Returns cinematic cutscenes for narrative milestone moments."""
    return {
        "cutscene_act_1_intro": StoryCutscene(
            cutscene_id="cutscene_act_1_intro",
            act=StoryAct.ACT_I_HUNGER,
            trigger_quest_id="quest_norm_01_thuc_tinh_tang_kiem",
            title="Tỉnh Giấc Trong Tuyệt Vọng",
            speaker_name="Kẻ Hành Khất",
            monologue_lines=[
                "Biển đêm lạnh buốt xé rách da thịt...",
                "Họ phế võ công, lột xiêm y, quẳng ta xuống chốn địa ngục này.",
                "Họ tưởng ta sẽ làm mồi cho súc sinh...",
                "Nhưng ta thề... chừng nào hơi thở này còn, ta sẽ khiến thế gian phải run rẩy!",
            ],
            ambiance_sound="ambient_shore_storm_howling",
            granted_exp=500,
        ),
        "cutscene_act_3_ascension": StoryCutscene(
            cutscene_id="cutscene_act_3_ascension",
            act=StoryAct.ACT_III_CRUCIBLE,
            trigger_quest_id="quest_epic_01_phong_ma_co_tran",
            title="Ngọn Lửa Sa Mạc",
            speaker_name="Kẻ Hành Khất",
            monologue_lines=[
                "Bão cát không thể chôn vùi ta, nó chỉ gột sạch bụi bặm hèn mọn.",
                "Đôi Song Binh rèn từ vỏ bọ cạp này khát máu hơn bất cứ thanh kiếm nào ở kinh kỳ.",
                "Hỡi những kẻ lưu đày cùng khổ, hãy đứng dậy theo ta!",
            ],
            ambiance_sound="ambient_sandstorm_war_drums",
            granted_exp=2500,
        ),
        "cutscene_act_5_epilogue": StoryCutscene(
            cutscene_id="cutscene_act_5_epilogue",
            act=StoryAct.ACT_V_SOVEREIGN,
            trigger_quest_id="ms_tier_5_van_gioi_chi_ton",
            title="Vương Tọa Tàn Xương",
            speaker_name="Kẻ Hành Khất - Bá Chủ Lưu Đày",
            monologue_lines=[
                "Máu đã khô trên vạn bậc thềm đá hư không.",
                "Chiếc gậy ăn mày ngày nào nay nâng đỡ cả một cõi trời.",
                "Nhìn lại chặng đường máu... ta mỉm cười.",
                "Ta đã thắng.",
            ],
            ambiance_sound="ambient_astral_apex_choir",
            granted_exp=10000,
        ),
    }
