soul-symphony-ling
↓ 0 downloadsSoul Symphony — Ling Edition. A spiritual 3D adventure in the soul realm: collect the letters of the world-song, clear the monster lattice, and duel in the arcade arena. Wind Waker-style toon renderer with volumetric light pools, SSAO, bloom and oil-slick tilt-shift — all ling-lang vectors.
Keywords game, 3d, toon, music, soul-symphony
lingfu install soul-symphony-lingCode / Files (1947)
game/scenes/chapter5.ling
# Chapter 5 cutscene module — "the song against the light"
# Returns [state, shouldExit] · state = lineIdx*1000 + marker (+900 = Antarctica เริ่มแล้ว)
#
# ศึกสหาย vs แสงเย็น — เร็วจัด DBZ/Gatchaman/Kamen Rider + ทริปหนัก:
# สโตรบพื้นหลัง · หมุนสีเมชคู่สหายตลอด (หมุนสีเมช เกนแฟลชตอนปะทะ) · เส้นสปีด
# ล้อรัศมี henshin · ปะทะ 3 ครั้ง = ฟรีซเฟรม (เวลารบหยุด คลื่นกระแทกวิ่งต่อเรียลไทม์)
# ท่อนท้าย = สโลว์โมชัน 0.25× → หมัดสุดท้ายผ่ากลางแสงเย็น
# จบ: บทสรุป ~15 วิ (บรรทัด 12-13 + หาง 10 วิเต็ม) — Bassline ตัดที่อิมแพกต์
# → เงียบ 1.6 วิ → Antartica.wav ลอยเข้า · หิมะตกขึ้นฟ้า · แสงเย็นลืมชื่อ
# สกอร์: Bassline.wav (ศึก) → Antartica.wav (บทสรุป)
ฟังก์ชัน ฉากบทห้า_บทพูดกลิฟ(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
[10, 15, 8, 22, 26, 25, 8, -1, 13, 8, 16, 9, 26, 5, -1, 18, 21, 23, 26, 11, 21, -1, 23, 8, 16, 25, 21, 3, -1, 19, 21, -1, 28, 12, 16, 25, 21, -1, 24, 15, 16, 20, 8, 18, 8, 25, 25, 8, 5],
[28, 8, 23, 12, 28, 8, 23, 12, -1, 20, 21, -1, 26, 24, 15, 16, 23, 21, -1, 24, 26, 25, 12, 16, 5, -1, 20, 21, -1, 4, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 20, 21, -1, 24, 21, 9, 8, 5],
[16, 25, 24, 26, 19, 21, -1, 8, 20, 8, 25, 8, -1, 20, 21, -1, 24, 21, 9, 8, 5, -1, 24, 15, 8, 22, 26, -1, 24, 15, 16, 20, 14, 26, 3, -1, 9, 26, 23, 8, 16, 25, 21, -1, 24, 26, 25, 21, 23, 8, 16, 18, 26, 0],
[1, 13, 8, 24, 26, 25, 21, -1, 18, 26, 23, 8, 24, 24, 15, 26, 3, -1, 11, 8, 18, 26, 4, 21, -1, 15, 8, 13, 26, 4, 20, 16, -1, 25, 12, 8, 5, 2],
[24, 21, 23, 12, -1, 28, 8, 23, 12, 28, 8, 23, 12, 4, 20, 21, -1, 20, 12, 19, 26, -1, 24, 15, 16, 25, 25, 12, -1, 16, 23, 26, 5, -1, 13, 21, 14, 12, 25, 25, 21, -1, 24, 8, 24, 12, 29, 21, 0],
[8, 14, 12, 16, 20, 0, -1, 24, 21, 20, 21, -1, 23, 8, 16, 25, 21, -1, 20, 21, -1, 24, 15, 16, 19, 26, 4, 21, -1, 12, 16, 19, 26, 0],
[1, 28, 21, 25, 8, -1, 25, 21, -1, 13, 8, 16, 8, 3, -1, 18, 8, 23, 12, 23, 8, -1, 23, 16, 19, 12, 19, 9, 8, 5, -1, 21, 23, 26, 11, 21, -1, 10, 15, 8, 19, 26, 3, -1, 18, 8, 23, 12, 4, 20, 21, -1, 28, 12, 16, 18, 26, 4, 11, 12, -1, 9, 8, 20, 5, 2],
[16, 19, 8, 0, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 23, 29, 21, 15, 21, -1, 4, -1, 28, 8, 20, -1, 20, 21, 25, 21, 3, -1, 28, 8, 20, -1, 9, 26, 23, 12, 16, 11, 21, 0],
[11, 16, 22, 26, -1, 8, 20, 8, 25, 8, -1, 23, 16, 19, 12, 19, 9, 8, 3, -1, 23, 16, 25, 21, 23, 26, -1, 9, 12, 8, 23, 8, 5, -1, 24, 21, 24, 15, 16, 25, 12, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 19, 21, 5],
[1, 24, 21, 24, 15, 16, 25, 12, -1, 28, 8, 20, -1, 13, 26, 23, 21, 30, 26, 20, -1, 9, 26, 23, 12, 24, 26, -1, 20, 21, -1, 8, 16, 11, 8, 3, -1, 21, 23, 26, -1, 24, 26, 18, 8, 16, -1, 15, 21, 23, 26, 11, 21, -1, 24, 26, 25, 16, 23, 26, 5, 2],
[18, 21, 23, 12, 3, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 18, 29, 8, 23, 16, -1, 24, 15, 16, 25, 8, -1, 24, 21, 20, 14, 26, 0],
[23, 8, 16, 25, 21, 4, 11, 12, -1, 12, 20, 11, 21, -1, 24, 8, 24, 12, 29, 21, 0],
[1, 18, 21, 23, 26, 11, 21, -1, 23, 8, 16, 25, 21, -1, 18, 26, 23, 8, 18, 18, 26, 5, -1, 24, 21, 24, 15, 16, 25, 12, -1, 24, 21, 13, 26, 25, 21, 4, 20, 16, 5, 5, 5, -1, 18, 8, 23, 12, 4, 20, 21, -1, 20, 12, 19, 26, -1, 13, 21, 14, 12, 25, 25, 21, 5, 2],
[1, 24, 26, 20, 21, -1, 8, 22, 22, 26, 4, 20, 16, -1, 13, 21, 23, 26, 5, -1, 20, 8, 14, 8, 16, -1, 20, 8, 16, 25, 21, 3, -1, 13, 8, 16, 20, 8, 23, 16, -1, 9, 26, 23, 12, 24, 26, -1, 8, 26, 25, 21, 5, 2],
]
}
ถ้า ภาษา == 1 {
คืน [
[15, 20, 13, 28, 32, 17, 30, -1, 18, 21, 34, 17, 6, -1, 32, 20, 17, -1, 15, 27, 24, 16, -1, 24, 21, 19, 20, 32, -1, 16, 21, 16, -1, 26, 27, 32, -1, 35, 13, 21, 32, -1, 13, 26, 37, -1, 24, 27, 26, 19, 17, 30, 6],
[31, 32, 13, 37, -1, 14, 17, 20, 21, 26, 16, -1, 25, 17, 6, -1, 26, 27, -1, 5, -1, 14, 17, 31, 21, 16, 17, -1, 25, 17, 6],
[13, 24, 35, 13, 37, 31, -1, 14, 17, 31, 21, 16, 17, -1, 37, 27, 33, 6, -1, 31, 21, 26, 19, -1, 31, 20, 13, 30, 28, 4, -1, 31, 32, 30, 21, 23, 17, -1, 14, 30, 21, 19, 20, 32, 0],
[2, 32, 20, 17, -1, 18, 21, 30, 31, 32, -1, 15, 24, 13, 31, 20, -1, 32, 27, 30, 17, -1, 32, 20, 17, -1, 16, 13, 30, 23, -1, 21, 26, -1, 20, 13, 24, 18, 6, 3],
[21, 32, -1, 23, 26, 27, 35, 31, -1, 27, 33, 30, -1, 26, 13, 25, 17, 31, 6, -1, 25, 13, 23, 17, -1, 21, 32, -1, 18, 27, 30, 19, 17, 32, 0],
[13, 19, 13, 21, 26, 0, -1, 13, 21, 25, -1, 18, 27, 30, -1, 32, 20, 17, -1, 31, 17, 13, 25, -1, 27, 18, -1, 21, 32, 31, -1, 24, 21, 19, 20, 32, 0],
[2, 35, 13, 32, 17, 30, -1, 13, 26, 16, -1, 18, 21, 30, 17, -1, 30, 17, 25, 17, 25, 14, 17, 30, 17, 16, -1, 32, 20, 17, 25, 6, -1, 32, 20, 17, -1, 27, 24, 16, -1, 15, 20, 13, 30, 25, 31, -1, 14, 33, 30, 26, 17, 16, -1, 21, 26, -1, 32, 20, 17, 21, 30, -1, 35, 13, 23, 17, 6, 3],
[26, 27, 35, 0, -1, 14, 27, 32, 20, -1, 27, 18, -1, 33, 31, -1, 5, -1, 27, 26, 17, -1, 26, 27, 32, 17, 4, -1, 27, 26, 17, -1, 14, 24, 13, 16, 17, 0],
[32, 20, 17, -1, 16, 17, 17, 28, -1, 30, 17, 25, 17, 25, 14, 17, 30, 31, -1, 37, 27, 33, 4, -1, 24, 21, 32, 32, 24, 17, -1, 14, 17, 13, 30, 17, 30, 31, 6, -1, 13, 26, 16, -1, 31, 27, -1, 16, 27, -1, 35, 17, 6],
[2, 13, 26, 16, -1, 18, 27, 30, -1, 27, 26, 17, -1, 18, 30, 27, 38, 17, 26, -1, 14, 30, 17, 13, 32, 20, 4, -1, 32, 20, 17, -1, 35, 20, 27, 24, 17, -1, 31, 23, 37, -1, 20, 17, 24, 16, -1, 31, 32, 21, 24, 24, 6, 3],
[12, 9, 10, 11, -1, 21, 31, -1, 32, 20, 17, -1, 31, 27, 26, 19, -1, 35, 17, -1, 15, 13, 30, 30, 21, 17, 16, 0],
[24, 17, 32, -1, 21, 32, -1, 17, 26, 16, -1, 21, 26, -1, 24, 21, 19, 20, 32, 0],
[2, 32, 20, 17, -1, 15, 27, 24, 16, -1, 24, 21, 19, 20, 32, -1, 15, 30, 13, 15, 23, 17, 16, 6, -1, 13, 26, 16, -1, 31, 27, 18, 32, 24, 37, 6, 6, 6, -1, 21, 32, -1, 18, 27, 30, 19, 27, 32, -1, 32, 20, 17, 21, 30, -1, 26, 13, 25, 17, 31, 6, 3],
[2, 31, 26, 27, 35, -1, 18, 17, 24, 24, -1, 33, 28, 35, 13, 30, 16, 6, -1, 32, 20, 17, -1, 24, 27, 26, 19, -1, 26, 21, 19, 20, 32, -1, 18, 21, 26, 13, 24, 24, 37, -1, 14, 30, 17, 13, 32, 20, 17, 16, -1, 27, 33, 32, 6, 3],
]
}
ถ้า ภาษา == 2 {
คืน [
[62, 51, 51, 139, 121, 133, -1, 150, 113, 20, 149, 88, 155, 57, 149, 88, 138, 88, 62, 153, 86, 93, 123, 13, 123, 88, 123, 138, 6, 45, 123, 153, 65],
[123, 90, 12, 133, 20, 119, 101, 130, 20, 26, 130, 57, 57, 129, -1, 153, 86, 113, 135, 4, 4, 4, -1, 123, 90, 12, 133, 20, 154, -1, 26, 130, 57],
[123, 90, 12, 133, 20, 154, -1, 149, 56, 123, 149, 113, 84, 123, -1, 10, 130, 62, 10, 133, 57, 152, 121, 150, 119, 101, 84, 13, 84, -1, 151, 21, 84, 42, 138, 152, 121, 114, 6, 113, 108, 133, 20, 0],
[2, 6, 133, 93, 65, 129, 51, 129, 13, 93, 132, 20, 150, 93, 6, 26, 138, 6, 13, 107, 133, 84, 84, 146, 38, 123, 123, 6, 149, 65, 155, 57, 113, 123, 20, 117, 107, 57, 3],
[84, 130, 57, 97, 21, 130, 6, 27, 147, 123, 10, 123, 20, 149, 93, 133, -1, 51, 134, 152, 121, 84, 130, 57, 101, 146, 84, 30, 129, 0],
[123, 138, 6, 13, 93, 132, 20, 0, -1, 149, 101, 155, 20, 153, 65, 51, 139, 93, 123, 88, 45, 123, 10, 123, 20, 150, 113, 20, 84, 130, 57, 0],
[2, 113, 133, 88, 61, 134, 150, 101, 129, 149, 65, 101, 107, 153, 79, 21, 38, 21, 134, 76, 107, 6, 149, 10, 133, 153, 41, -1, 149, 13, 93, 147, 123, 20, 93, 133, 20, 151, 62, 93, 133, 37, 102, 6, 153, 119, 87, 42, 133, 84, 93, 123, 88, 51, 133, 20, 10, 123, 20, 76, 107, 6, 149, 10, 133, 3],
[149, 123, 133, 105, 129, 0, -1, 76, 99, 123, 84, 6, 130, 57, 51, 132, 20, 16, 149, 101, 88, -1, 151, 61, 42, 149, 38, 138, 88, 107, -1, 38, 133, 62, 149, 38, 138, 88, 107, 0],
[121, 107, 20, 101, 143, 6, 21, 38, 21, 134, 149, 25, 133, 153, 41, -1, 71, 150, 62, 6, 62, 51, 149, 76, 101, 20, 42, 130, 107, 61, 123, 88, -1, 150, 101, 129, 149, 93, 133, 6, 155, 21, 38, 21, 134, 149, 28, 57, 6, 130, 57],
[2, 150, 101, 129, 152, 57, 101, 84, 119, 133, 88, 152, 21, 51, 139, 150, 10, 155, 20, 18, 133, 20, 153, 65, 119, 57, 144, 20, 13, 93, 132, 20, -1, 55, 123, 20, 81, 133, 51, 132, 20, 68, 146, 57, 6, 155, 119, 89, 38, 57, 136, 20, 3],
[57, 139, 150, 119, 101, 129, 13, 146, 123, 62, 51, 149, 76, 101, 20, 51, 139, 149, 93, 133, 150, 62, 6, 84, 133, 0],
[152, 121, 84, 130, 57, 21, 62, 101, 20, 41, 107, 88, 150, 113, 20, 113, 108, 133, 20, 149, 47, 135, 38, 0],
[2, 150, 113, 20, 149, 88, 155, 57, 149, 88, 138, 88, 62, 150, 42, 6, 99, 133, 107, -1, 150, 101, 129, 150, 72, 107, 149, 62, 133, 4, 4, 4, -1, 84, 130, 57, 101, 146, 84, 27, 147, 123, 10, 123, 20, 76, 107, 6, 149, 10, 133, 153, 65, 150, 106, 107, 3],
[2, 119, 135, 84, 129, 151, 65, 93, 88, 65, 93, 133, 88, 10, 145, 57, 116, 149, 62, 148, 123, 20, 62, 57, -1, 93, 133, 42, 93, 138, 123, 130, 57, 88, 133, 107, 57, 133, 57, 153, 41, 72, 123, 57, 101, 84, 119, 133, 88, 152, 21, 123, 123, 6, 84, 133, 152, 57, 51, 139, 114, 38, 3],
]
}
ถ้า ภาษา == 3 {
คืน [
[11, 402, 6, -1, 439, 17, 370, -1, 276, 382, -1, 128, -1, 386, 288, -1, 65, 120, 206, 427, -1, 331, 333, 120],
[93, -1, 148, 349, -1, 393, 340, 174, 6, -1, 327, 118, 4, -1, 93, -1, 41, 349],
[342, 411, 86, -1, 60, 127, -1, 41, 349, 6, -1, 88, 464, 199, 33, -1, 105, 179, 502, 43, 4, -1, 250, 33, -1, 93, 206, 451, 174, 0],
[2, 448, -1, 459, 136, 386, -1, 340, 146, 383, -1, 247, 381, 197, -1, 438, 348, 120, 3],
[60, 32, 382, -1, 369, 206, -1, 386, 204, 383, -1, 329, 120, 6, -1, 395, 33, -1, 213, 153, 340, 174, 0],
[120, 317, 0, -1, 60, -1, 276, 385, -1, 386, 384, 289, 203, -1, 105, 192, 174, 0],
[2, 240, 49, -1, 270, 386, -1, 60, 153, 383, -1, 65, 341, 509, 120, 6, -1, 359, 179, 141, -1, 267, 405, 153, 386, -1, 60, 153, 386, -1, 427, 86, 19, -1, 396, 206, 349, 292, -1, 477, 361, 177, 120, 3],
[427, 64, 386, 120, 0, -1, 369, 206, -1, 145, -1, 120, -1, 5, -1, 502, 86, 385, -1, 384, 495, 4, -1, 502, 86, 385, -1, 465, 88, 197, 0],
[69, 382, -1, 47, 382, -1, 60, 127, 153, 383, -1, 65, 341, 503, 120, 4, -1, 340, 207, -1, 406, 124, 396, 153, 386, 351, 6, -1, 369, 206, 134, -1, 60, 190, 120],
[2, 60, 206, 43, -1, 344, 340, 271, 382, -1, 503, 308, 19, 4, -1, 360, -1, 502, 116, 386, -1, 222, 460, -1, 296, 120, 3],
[386, 32, 386, -1, 245, 197, -1, 369, 206, 17, -1, 427, 103, 360, -1, 105, 179, 120, 0],
[276, -1, 303, 349, 292, -1, 84, 86, 33, -1, 502, 174, 0],
[2, 439, 17, 370, -1, 276, 386, -1, 64, 386, -1, 22, 120, 6, -1, 60, 206, 43, -1, 414, 368, 537, 6, 6, 6, -1, 60, 32, 382, -1, 60, 153, 385, -1, 386, 204, 383, -1, 395, 348, 120, 3],
[2, 111, 386, -1, 378, 197, -1, 167, 340, 413, 120, 6, -1, 66, -1, 251, 386, -1, 211, 463, 93, -1, 309, 383, -1, 93, 310, 348, 120, 3],
]
}
ถ้า ภาษา == 4 {
คืน [
[476, 139, 472, 7, 174, 35, 12, 167, 50, 6, 63, 50, 65, 24, 72, 145, 128, 300, 35, 45, 16, 38, 35],
[462, 49, 302, 73, 46, 12, 73, 7, 12, 65, 5, 5, 462, 49, 33, 51, 46],
[12, 39, 63, 11, 45, 35, 49, 33, 51, 46, 7, 579, 20, 393, 12, 6, 550, 20, 68, 13, 46, 357, 70, 45, 26, 12, 0],
[1, 372, 181, 49, 522, 469, 17, 6, 588, 75, 449, 38, 138, 39, 46, 179, 70, 524, 12, 35, 2],
[244, 50, 322, 8, 49, 199, 75, 453, 38, 41, 12, 71, 7, 309, 72, 26, 31, 41, 65, 72, 0],
[63, 13, 123, 288, 0, -1, 33, 49, 167, 49, 489, 19, 448, 75, 431, 38, 41, 0],
[1, 401, 43, 424, 50, 299, 69, 75, 528, 14, 41, 12, 35, 7, 195, 49, 15, 254, 70, 50, 6, 299, 69, 49, 563, 38, 35, 543, 42, 426, 14, 128, 17, 38, 35, 2],
[143, 36, 0, -1, 138, 142, 123, 492, 46, 6, 123, 39, 49, 605, 6, 123, 39, 49, 177, 42, 0],
[411, 18, 500, 50, 15, 182, 35, 37, 75, 528, 14, 41, 12, 71, 6, 268, 26, 18, 568, 53, 326, 68, 7, 322, 8, 63, 59, 35, 198, 28, 36],
[1, 33, 27, 41, 6, 175, 70, 39, 12, 35, 123, 39, 49, 315, 49, 587, 6, 468, 169, 150, 17, 603, 394, 27, 35, 2],
[24, 72, 24, 33, 17, 6, 462, 35, 37, 49, 568, 76, 42, 18, 35, 393, 42, 29, 0],
[167, 49, 134, 42, 486, 74, 69, 31, 68, 0],
[1, 174, 35, 12, 167, 46, 52, 53, 17, 168, 38, 35, 7, 33, 27, 41, 603, 16, 46, 5, 5, 33, 72, 50, 299, 69, 49, 199, 75, 309, 72, 35, 2],
[1, 598, 50, 128, 55, 43, 589, 38, 35, 7, 583, 12, 235, 50, 6, 39, 12, 46, 315, 75, 200, 18, 176, 27, 35, 2],
]
}
ถ้า ภาษา == 5 {
คืน [
[617, 43, 612, 8, 272, 93, 17, 104, 619, 330, 38],
[569, 216, 367, 739, 163, 8, 17, 6, 6, 216, 367, 739, 751],
[494, 757, 216, 78, 739, 751, 8, 480, 228, 706, 788, 121, 850, 111, 112, 706, 433, 46, 0],
[848, 617, 11, 478, 592, 411, 275, 842, 441, 410, 366, 38, 23, 141, 8, 849],
[255, 588, 769, 367, 57, 573, 162, 252, 8, 713, 255, 339, 715, 170, 0],
[104, 457, 11, 478, 0, -1, 586, 108, 255, 93, 685, 573, 403, 654, 0],
[848, 493, 18, 532, 715, 333, 54, 57, 8, 155, 662, 573, 384, 616, 216, 54, 57, 739, 163, 546, 540, 8, 849],
[278, 436, 556, 216, 0, -1, 367, 57, 40, 48, 160, 130, 850, 11, 24, 819, 616, 850, 11, 462, 121, 113, 0],
[514, 516, 715, 333, 78, 57, 850, 276, 276, 573, 701, 663, 8, 367, 57, 36, 436],
[848, 216, 773, 109, 210, 573, 11, 349, 32, 797, 850, 421, 548, 237, 607, 775, 815, 481, 38, 8, 849],
[755, 850, 278, 436, 367, 57, 407, 296, 678, 50, 573, 480, 0],
[713, 255, 216, 93, 685, 25, 639, 641, 170, 0],
[848, 272, 93, 704, 315, 38, 8, 746, 746, 217, 6, 6, 255, 339, 715, 38, 54, 57, 573, 162, 252, 8, 849],
[848, 811, 165, 15, 829, 695, 8, 529, 792, 573, 234, 437, 639, 41, 164, 111, 38, 11, 154, 492, 8, 849],
]
}
คืน []
}
ฟังก์ชัน ฉากบทห้า_บทพูด(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
"chaputa faibu. korudo raito, mo weito shinakatta.",
"wareware no ushiro sutei. no - wareware no soba.",
"itsumo anata no soba. shapu shingu, buraito sutoraiku!",
"(fasuto kurasshu, daku-o hafu-ni tea.)",
"sore wareware-no nemu shitte iru. fogetto saseyo!",
"agein! sono raito no shimu-o eimu!",
"(wota to faia, karera rimemba. orudo chamu, kare-no weiku-de ban.)",
"ima! wareware ryoho - wan noto, wan bureido!",
"dipu anata rimemba, ritoru beara. soshite wareware mo.",
"(soshite wan furozun buresu no aida, oru sukai horudo sutiru.)",
"kore, wareware kyari shita songu!",
"raito-de endo saseyo!",
"(korudo raito kurakku. soshite sofuto-ni... kare-no nemu fogetto.)",
"(suno appu-ni foru. nagai naito, fainari buresu auto.)"
]
}
ถ้า ภาษา == 2 {
คืน [
"บทที่ห้า แสงเย็นเยียบไม่รอคอยอีกต่อไป",
"อยู่ข้างหลังฉันนะ ไม่สิ... อยู่ข้างๆ ฉัน",
"อยู่ข้างๆ เธอเสมอ ขับขานให้แหลมคม โจมตีให้สุกสว่าง!",
"(การปะทะครั้งแรกฉีกความมืดออกเป็นสองส่วน)",
"มันรู้จักชื่อของเรา ทำให้มันลืมซะ!",
"อีกครั้ง! เล็งไปที่รอยต่อของแสงมัน!",
"(สายน้ำและเปลวไฟจดจำพวกเขาได้ เครื่องรางโบราณลุกไหม้ตามรอยทางของพวกเขา)",
"เอาล่ะ! พร้อมกันทั้งคู่เลย โน้ตเดียว ดาบเดียว!",
"ห้วงลึกจดจำเจ้าได้ ผู้แบกบทเพลงตัวน้อย และเราก็จดจำเช่นกัน",
"(และในลมหายใจที่แข็งค้างไปหนึ่งครั้ง ท้องฟ้าทั้งผืนก็หยุดนิ่ง)",
"นี่แหละคือบทเพลงที่เราแบกมา!",
"ให้มันจบลงด้วยแสงสว่างเถิด!",
"(แสงเย็นเยียบแตกร้าว และแผ่วเบา... มันลืมชื่อของพวกเขาไปแล้ว)",
"(หิมะโปรยปรายขึ้นสู่เบื้องบน ราตรีอันยาวนานได้ผ่อนลมหายใจออกมาในที่สุด)"
]
}
ถ้า ภาษา == 3 {
คืน [
"5장. 차가운 빛은 더 이상 기다리지 않았다",
"내 뒤에 있어라. 아니, 내 곁에",
"언제나 그대 곁에. 날카롭게 노래하고, 밝게 내리쳐라!",
"(첫 충돌이 어둠을 반으로 찢었다)",
"그것은 우리 이름을 안다. 잊게 만들어라!",
"다시! 그 빛의 이음새를 노려라!",
"(물과 불이 그들을 기억했다. 오래된 부적들이 그들이 지나간 자리에서 타올랐다)",
"지금이다! 우리 둘 다 - 하나의 음표, 하나의 칼날로!",
"깊은 곳은 그대들을 기억한다, 어린 전달자들이여. 우리도 그렇다",
"(그리고 얼어붙은 한순간, 온 하늘이 멈춰 섰다)",
"이것이 바로 우리가 지녀온 노래다!",
"빛 속에서 끝나게 하라!",
"(차가운 빛이 금이 갔다. 그리고 조용히... 그것은 그들의 이름을 잊었다)",
"(눈이 위로 떨어졌다. 긴 밤이 마침내 숨을 내쉬었다)"
]
}
ถ้า ภาษา == 4 {
คืน [
"第五章。冷たい光は、もはやこれ以上待たなかった",
"私の後ろにいろ。いや……私のそばに",
"いつもあなたのそばに。鋭く歌い、輝くように斬りなさい!",
"(最初の衝突が、闇を真っ二つに切り裂いた)",
"奴は我々の名を知っている。忘れさせてやれ!",
"もう一度! その光の継ぎ目を狙って!",
"(水と炎は彼らを覚えていた。古のお守りは、彼らの通った跡で燃え上がった)",
"今だ! 二人一緒に、一つの音、一つの刃で!",
"深き者はお前たちを覚えている、小さき運び手よ。我々もまた同じだ",
"(そして、凍りついた一つの息の間、空全体が静止した)",
"これこそが、私たちの運んできた歌です!",
"光の中で終わらせよ!",
"(冷たい光にひびが入った。そして静かに……それは彼らの名を忘れた)",
"(雪は上へと降った。長い夜は、ついに息を吐き出した)"
]
}
ถ้า ภาษา == 5 {
คืน [
"第五章。寒光不再等待了",
"留在我身后。不……在我身边",
"永远在你身边。歌声要锐利,出击要明亮!",
"(第一次碰撞将黑暗撕成了两半。)",
"它知道我们的名字。让它忘记吧!",
"再来一次! 瞄准它光芒的接缝!",
"(水与火记得他们。古老的护符在他们身后燃烧。)",
"就是现在! 我们二人合力,一个音符,一柄利刃!",
"深渊记得你们,小小的行者。我们也是",
"(在那凝固的一息之间,整片天空都静止了。)",
"这,就是我们携带至今的歌!",
"让它在光芒中终结吧!",
"(寒光裂开了。轻轻地……它忘记了他们的名字。)",
"(雪向上飘落。漫长的夜晚终于吐出了一口气。)"
]
}
คืน [
"chapter five. the cold light did not wait any longer.",
"stay behind me. no - beside me.",
"always beside you. sing sharp, strike bright!",
"(the first clash tore the dark in half.)",
"it knows our names. make it forget!",
"again! aim for the seam of its light!",
"(water and fire remembered them. the old charms burned in their wake.)",
"now! both of us - one note, one blade!",
"the deep remembers you, little bearers. and so do we.",
"(and for one frozen breath, the whole sky held still.)",
"THIS is the song we carried!",
"let it end in light!",
"(the cold light cracked. and softly... it forgot their names.)",
"(snow fell upward. the long night finally breathed out.)"
]
}
ฟังก์ชัน ฉากบทห้า_ผู้พูด() {
คืน [0, 1, 2, 0, 1, 2, 0, 1, 0, 0, 2, 1, 0, 0]
}
# รหัสผู้พูดสำหรับพากย์เสียง (ต้องตรงกับ tools/voiceover/manifest.py ทุกตัวอักษร)
ฟังก์ชัน ฉากบทห้า_ผู้พูดรหัส() {
คืน ["narrator", "king", "queen", "narrator", "king", "queen", "narrator", "king", "narrator", "narrator", "queen", "king", "narrator", "narrator"]
}
# ระยะเวลาเล่นต่อบรรทัด (วิ) ตามภาษาพากย์เสียงจริง (วัดจาก tools/voiceover/
# progress.json ตอนอัด) — ให้ฉากรอเสียงพากย์จบก่อนตัดบรรทัด แทนจังหวะตายตัว
# 2.7 วิ/บรรทัด เดิม ภาษาที่ยังไม่มีเสียงพากย์ (ทุกภาษายกเว้น en ตอนนี้) ใช้
# จังหวะเดิมไปก่อน — คงพฤติกรรมเดิมทุกอย่างจนกว่าจะอัดเสียงภาษานั้นเสร็จ
ฟังก์ชัน ฉากบทห้า_ระยะเวลา(lang) {
ถ้า lang == "ko" { คืน [5.46, 4.26, 6.58, 4.26, 5.78, 3.30, 8.82, 7.30, 6.74, 4.82, 3.94, 2.98, 8.90, 6.42] }
ถ้า lang == "ja" { คืน [6.02, 5.38, 6.34, 3.86, 4.58, 3.30, 7.46, 4.74, 6.42, 6.18, 4.10, 4.98, 7.86, 5.06] }
ถ้า lang == "zh" { คืน [2.90, 3.54, 4.98, 4.42, 3.22, 3.54, 4.74, 7.54, 4.02, 5.38, 3.30, 2.58, 6.74, 5.62] }
ถ้า lang == "daemon" { คืน [4.10, 5.62, 5.06, 2.98, 4.50, 3.06, 5.62, 4.34, 5.14, 5.62, 2.98, 1.70, 5.78, 4.90] }
ถ้า lang == "th" { คืน [3.76, 3.34, 4.28, 3.68, 3.20, 3.68, 5.56, 3.68, 4.84, 4.72, 3.02, 2.92, 4.46, 5.20] }
ถ้า lang == "en" { คืน [3.70, 3.94, 4.26, 2.42, 4.90, 3.06, 5.22, 6.58, 4.34, 3.94, 2.10, 2.02, 5.14, 5.14] }
คืน [2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70, 2.70]
}
ฟังก์ชัน ฉากบทห้า_สีวน(h) {
คืน [floor((ไซน์(h)*0.5+0.5)*205+50), floor((ไซน์(h+2.094)*0.5+0.5)*205+50), floor((ไซน์(h+4.189)*0.5+0.5)*205+50)]
}
# เวลารบ (bt): เวลาจริง ct หัก "ฟรีซเฟรม" 3 หน้าต่าง + สโลว์โมชันท้าย 0.25×
# ฟรีซ: บรรทัด 3/5/7 (+0.3) นาน 0.55 วิ — ท่าค้าง แต่กล้อง/คลื่นกระแทกวิ่งเรียลไทม์
# c5cum = ตารางเวลาสะสมของฉาก (c5cum[i] = เวลาเริ่มบรรทัด i) แทน C5SEC ตายตัวเดิม
ฟังก์ชัน ฉากบทห้า_เวลารบ(ct, c5cum) {
bind ตรึง = 0.55
bind ลบ = 0.0
bind fi = 0
ขณะที่ fi < 3 {
bind ff = list_get(c5cum, 3 + fi*2) + 0.3
ถ้า ct > ff {
bind dfi = ct - ff
ถ้า dfi > ตรึง { bind dfi = ตรึง }
bind ลบ = ลบ + dfi
}
bind fi = fi + 1
}
bind bt = ct - ลบ
bind ts0 = list_get(c5cum, 10) + 0.3; bind ts1 = list_get(c5cum, 12) # สโลว์โม 0.25× (ยาว ~5 วิ)
ถ้า ct > ts0 {
bind ds = ct - ts0
ถ้า ds > ts1 - ts0 { bind ds = ts1 - ts0 }
bind bt = bt - ds*0.75
}
คืน bt
}
# พารามิเตอร์ทั้งหมดส่งจาก main · เพลงฉาก=Bassline · เพลงจบ=Antartica
# สามเหลี่ยมสองหน้า (เวกเตอร์ขวาของระนาบหน้าพลิกเครื่องหมายเมื่อกล้องข้ามฝั่ง)
ฟังก์ชัน ฉากบทห้า_สองหน้า(ax, ay, az, bx, by, bz, cx, cy, cz) {
วาดสามเหลี่ยม3มิติ(ax, ay, az, bx, by, bz, cx, cy, cz)
วาดสามเหลี่ยม3มิติ(bx, by, bz, ax, ay, az, cx, cy, cz)
}
ฟังก์ชัน เล่นฉากบทห้า(t, บทห้าเริ่ม, บทห้าสถานะ, musicOn, ปริมาณBGM, ปริมาณSFX, เพลงฉาก, ยาวเพลงฉาก, เพลงจบ, kCutMesh, qCutMesh, liq, ภาษา, แสดงบทพูด, ภาษาบทพูด, ระยะเวลาไดนามิก) {
bind บทพูด = ฉากบทห้า_บทพูด(ภาษาแสดงผล(ภาษา))
bind บทพูดกลิฟ = ฉากบทห้า_บทพูดกลิฟ(ภาษาบทพูด)
bind ผู้พูด = ฉากบทห้า_ผู้พูด()
bind ผู้พูดรหัส = ฉากบทห้า_ผู้พูดรหัส()
bind บทห้าระยะเวลา = ระยะเวลาไดนามิก
bind c5t = t - บทห้าเริ่ม
bind C5N = ความยาว(บทพูด)
# ── ตารางเวลาสะสม: c5cum[i] = เวลาเริ่มบรรทัด i (แทนสูตร i*C5SEC ตายตัวเดิม) ──
bind c5cum = [0.0]
bind cci = 0
ขณะที่ cci < C5N {
bind c5cum = list_push(c5cum, list_get(c5cum, cci) + list_get(บทห้าระยะเวลา, cci))
bind cci = cci + 1
}
bind C5TOTAL = list_get(c5cum, C5N)
bind C5END = C5TOTAL + 10.0 # บทสรุปเต็ม 10 วิหลังบรรทัดสุดท้าย
bind c5i = 0
bind c5scan = 1
ขณะที่ c5scan == 1 {
ถ้า c5i >= C5N - 1 { bind c5scan = 0 }
มิฉะนั้น { ถ้า c5t < list_get(c5cum, c5i + 1) { bind c5scan = 0 }
มิฉะนั้น { bind c5i = c5i + 1 } }
}
bind C5SEC = list_get(บทห้าระยะเวลา, c5i) # ระยะเวลาบรรทัดปัจจุบัน (ยังใช้เป็นค่าประมาณจังหวะทั่วไปด้านล่าง)
bind t12 = list_get(c5cum, 12)
bind t10s = list_get(c5cum, 10) + 0.3 # จุดเริ่มสโลว์โม (แทน 10*C5SEC+0.3 ตายตัวเดิม)
bind C5FADE = 0.0
ถ้า c5t > C5END - 3.0 { bind C5FADE = (c5t - (C5END - 3.0)) / 3.0 }
ถ้า C5FADE > 1.0 { bind C5FADE = 1.0 }
bind ดำ = 1.0 - C5FADE
# ── ถอดสถานะ ──
bind บรรทัดก่อน = 0.0 - 1.0
bind มาร์ก = 0.0
ถ้า บทห้าสถานะ >= 0.0 {
bind บรรทัดก่อน = ปัดลง(บทห้าสถานะ / 1000.0)
bind มาร์ก = บทห้าสถานะ - บรรทัดก่อน*1000.0
}
bind bt = ฉากบทห้า_เวลารบ(c5t, c5cum)
bind ศึกจบ = 0.0; ถ้า c5t >= t12 { bind ศึกจบ = 1.0 }
bind resP = 0.0
ถ้า ศึกจบ > 0.5 { bind resP = (c5t - t12) / (C5END - t12) }; ถ้า resP > 1.0 { bind resP = 1.0 }
bind อินเทน = c5t / list_get(c5cum, 2); ถ้า อินเทน > 1.0 { bind อินเทน = 1.0 }
ถ้า ศึกจบ > 0.5 { bind อินเทน = 0.0 }
# ── ดนตรี: Bassline วนระหว่างศึก · ตัดที่อิมแพกต์ (บรรทัด 12) · Antartica เริ่มหลัง 1.6 วิ ──
ถ้า musicOn == 1 { ถ้า ศึกจบ < 0.5 {
ถ้า ยาวเพลงฉาก > 1.0 {
ถ้า ตำแหน่งเพลง() >= ยาวเพลงฉาก - 0.5 { ค้นหาเพลง(0); เล่นเพลง(เพลงฉาก) }
}
bind จางสโลว์ = 0.0 # เฟดเพลงศึกนุ่ม ๆ ตลอดช่วงสโลว์โม
ถ้า c5t > t10s { bind จางสโลว์ = (c5t - t10s) / (t12 - t10s) }
ถ้า จางสโลว์ > 1.0 { bind จางสโลว์ = 1.0 }
ระดับเพลง(ปริมาณBGM * 0.33 * (0.95 - จางสโลว์*0.87)) # หรี่ BGM เหลือ 1/3 — เสียงพากย์ต้องเด่นกว่า
} }
ถ้า c5t >= t12 + 1.6 { ถ้า มาร์ก < 900.0 { # Antartica ลอยเข้า (ครั้งเดียว)
ถ้า musicOn == 1 { เล่นเพลง(เพลงจบ); ระดับเพลง(ปริมาณBGM * 0.6 * 0.33) }
bind มาร์ก = มาร์ก + 900.0
} }
ถ้า มาร์ก >= 900.0 { ถ้า musicOn == 1 { ระดับเพลง(ปริมาณBGM * 0.6 * 0.33 * ดำ) } }
# ── ฟรีซ/แฟลชตรวจจับ (เรียลไทม์ — ใช้คุมคลื่นกระแทก + สโตรบขาว) ──
bind ฟรีซแฟลช = 0.0; bind ฟรีซศูนย์ = 0.0 - 1.0
bind fj = 0
ขณะที่ fj < 3 {
bind ffj = list_get(c5cum, 3 + fj*2) + 0.3
ถ้า c5t > ffj { ถ้า c5t < ffj + 0.55 {
bind ฟรีซแฟลช = 1.0 - (c5t - ffj)/0.55
bind ฟรีซศูนย์ = c5t - ffj
} }
bind fj = fj + 1
}
# ── สโตรบพื้นหลัง (~7Hz) + สีวนหมุนตลอดศึก ──
bind สโตรบ = 0.0
ถ้า อินเทน > 0.0 { ถ้า ไซน์(c5t*44.0) > 0.3 { bind สโตรบ = อินเทน } }
bind bgh = ฉากบทห้า_สีวน(c5t*1.6)
bind bgR = 8.0 + list_get(bgh,0)*0.16*สโตรบ + 120.0*ฟรีซแฟลช
bind bgG = 6.0 + list_get(bgh,1)*0.16*สโตรบ + 130.0*ฟรีซแฟลช
bind bgB = 16.0 + list_get(bgh,2)*0.16*สโตรบ + 150.0*ฟรีซแฟลช
ถ้า ศึกจบ > 0.5 { bind bgR = 6.0*ดำ; bind bgG = 8.0*ดำ; bind bgB = 15.0*ดำ }
เบลอเฟรม(0.958) # หางแสงค้าง ~1.25 วิ (decay+max)
เติม(floor(bgR), floor(bgG), floor(bgB))
# ── ตำแหน่ง: แสงเย็น (ศัตรู) กลางเวหา · คู่สหายพุ่งวนสลับเข้า-ออก ──
bind ex = 0.0; bind ey = 0.0 - 6.5; bind ez = 10.0
bind eR = 4.6 * (1.0 - resP*0.85) # บทสรุป: หดเล็กจนเกือบดับ
bind dashP = bt / 1.35 - ปัดลง(bt / 1.35)
bind orbR = 9.5 - ไซน์(dashP*3.1416)*6.8 # สวูปเข้า-ออกทุก 1.35 วิ (เวลารบ)
ถ้า c5t > t10s { ถ้า ศึกจบ < 0.5 { bind orbR = 2.2 } } # สโลว์โม: ประชิด
bind ka = bt * 2.6
bind kx = ex + โคไซน์(ka) * orbR
bind ky = ey + ไซน์(bt*3.1) * 2.2
bind kz = ez + ไซน์(ka) * orbR * 0.7
bind qx = ex + โคไซน์(ka + 3.1416) * orbR
bind qy = ey + ไซน์(bt*3.1 + 1.6) * 2.2
bind qz = ez + ไซน์(ka + 3.1416) * orbR * 0.7
ถ้า ศึกจบ > 0.5 { # บทสรุป: ลอยเคียงกัน มองแสงดับ
bind kx = 0.0 - 3.2; bind ky = 0.0 - 5.5 + ไซน์(c5t*0.8)*0.5; bind kz = 0.0 - 1.0
bind qx = 3.2; bind qy = 0.0 - 5.5 + ไซน์(c5t*0.8 + 1.3)*0.5; bind qz = 0.0 - 1.0
}
bind กายสูง = 6.0
# ── แสง ──
ล้างแสง()
ตั้งแสงรอบข้าง(0.22*ดำ + 0.06 + สโตรบ*0.12 + ฟรีซแฟลช*0.25)
เพิ่มแสง(ex, ey - 4.0, ez, 0.85, 0.92, 1.0, (1.6 - resP*1.1)*ดำ, 90.0)
เพิ่มแสง(kx, ky - 5.0, kz, 0.35, 0.55, 1.0, 1.0*ดำ, 30.0)
เพิ่มแสง(qx, qy - 5.0, qz, 1.0, 0.45, 0.65, 1.0*ดำ, 30.0)
# ── กล้อง: คัตทุกบรรทัด 4 มุมวน + สั่นตอนปะทะ · สโลว์โมดันเข้า · บทสรุปถอยกว้าง ──
bind shot = c5i - ปัดลง(c5i/4.0)*4.0
bind camX = 0.0; bind camY = 0.0 - 7.0; bind camZ = 0.0 - 12.0
bind lookX = ex; bind lookY = ey; bind lookZ = ez
ถ้า shot == 0 { bind camX = โคไซน์(c5t*0.5)*13.0; bind camZ = ez - ไซน์(c5t*0.5)*13.0; bind camY = 0.0 - 6.5 }
ถ้า shot == 1 { bind camX = kx - 4.5; bind camY = ky + 2.2; bind camZ = kz - 5.0 } # มุมต่ำชิดราชา
ถ้า shot == 2 { bind camX = qx + 4.0; bind camY = qy - 6.0; bind camZ = qz - 5.5 } # มุมสูงเหนือราชินี
ถ้า shot == 3 { bind camX = ไซน์(c5t*0.7)*2.0; bind camY = 0.0 - 5.0; bind camZ = 0.0 - 15.0 }
ถ้า c5t > t10s { ถ้า ศึกจบ < 0.5 { # สโลว์โม: ดอลลี่เข้าใกล้สุด
bind sp5 = (c5t - t10s) / (t12 - t10s)
bind camX = 7.0 - sp5*4.0; bind camY = 0.0 - 5.6; bind camZ = 1.0 - sp5*3.0
} }
ถ้า ศึกจบ > 0.5 {
bind camX = ไซน์(c5t*0.1)*2.0; bind camY = 0.0 - 6.0 - resP*2.0; bind camZ = 0.0 - 12.0 - resP*6.0
bind lookY = ey + resP*1.5
}
bind ชคช = ฟรีซแฟลช*0.7
bind camX = camX + ไซน์(c5t*61.0)*0.5*ชคช
bind camY = camY + โคไซน์(c5t*53.0)*0.4*ชคช
ตั้งกล้องมอง(camX, camY, camZ, lookX, lookY, lookZ)
ตั้งระยะห่าง(1.85 + ฟรีซแฟลช*0.22)
# ── ล้อรัศมี henshin (บรรทัด 1-2 + ทุกปะทะ): ซี่แสงหมุนจากศูนย์ศัตรู ──
โหมดผสม(1)
bind ล้อOn = 0.0
ถ้า c5i >= 1 { ถ้า c5i <= 2 { bind ล้อOn = 0.7 } }
ถ้า ฟรีซแฟลช > 0.0 { bind ล้อOn = ฟรีซแฟลช }
ถ้า ล้อOn > 0.0 {
bind ซี่ = 0
ขณะที่ ซี่ < 14 {
bind za = ซี่ * 0.4488 + c5t*3.2
bind zc = ฉากบทห้า_สีวน(ซี่*0.9 + c5t*4.0)
สีดินสอ(floor(list_get(zc,0)*ล้อOn), floor(list_get(zc,1)*ล้อOn), floor(list_get(zc,2)*ล้อOn))
วาดเส้น3มิติ(ex + โคไซน์(za)*eR*1.3, ey + ไซน์(za)*eR*1.3, ez + 1.0,
ex + โคไซน์(za)*22.0, ey + ไซน์(za)*22.0, ez + 3.0)
bind ซี่ = ซี่ + 1
}
}
# ── คลื่นกระแทกฟรีซเฟรม: วงแหวนขยายเรียลไทม์ระหว่างท่าค้าง ──
ถ้า ฟรีซศูนย์ >= 0.0 {
bind รัศมีคลื่น = 2.0 + ฟรีซศูนย์ * 34.0
bind sgw = 0
ขณะที่ sgw < 24 {
bind wa0 = sgw*0.2618; bind wa1 = (sgw+1)*0.2618
สีดินสอ(floor(240*ฟรีซแฟลช), floor(250*ฟรีซแฟลช), 255)
วาดเส้น3มิติ(ex + โคไซน์(wa0)*รัศมีคลื่น, ey + ไซน์(wa0)*รัศมีคลื่น*0.6, ez,
ex + โคไซน์(wa1)*รัศมีคลื่น, ey + ไซน์(wa1)*รัศมีคลื่น*0.6, ez)
bind sgw = sgw + 1
}
}
# ── เส้นสปีด: หางพุ่งตามหลังคู่สหายตอนสวูปเข้า ──
ถ้า ศึกจบ < 0.5 { ถ้า dashP < 0.5 {
bind sl = 0
ขณะที่ sl < 3 {
bind slo = sl * 0.5 + 0.4
สีดินสอ(120, 180, 255)
วาดเส้น3มิติ(kx, ky - slo, kz, kx + (kx-ex)*0.45, ky - slo, kz + (kz-ez)*0.45)
สีดินสอ(255, 140, 190)
วาดเส้น3มิติ(qx, qy - slo, qz, qx + (qx-ex)*0.45, qy - slo, qz + (qz-ez)*0.45)
bind sl = sl + 1
}
} }
flush_3d(); โหมดผสม(0)
# ── แสงเย็น (ศัตรู): ทรงกลมหมึกแบน + ตาจ้อง + รังสีหมุน · บทสรุป: ร้าว + หรี่ ──
set_flat_shade(1.0)
bind eBright = 226.0*ดำ - resP*60.0; ถ้า eBright < 40.0 { bind eBright = 40.0 }
สีดินสอ(floor(eBright), floor(eBright + 8.0), floor(eBright + 20.0))
sphere(ex, ey, ez, eR, eR, eR, 0.0, 0.0, 0.0, 0, 16, 12)
flush_3d()
# ── ดวงตาแสงเย็น: ระนาบหน้าหันตามกล้อง ────────────────────────────────────
# เดิม efz = ez - eR*0.82 ตรึงไว้ฝั่ง -z แต่ช็อตวนรอบ (กล้องโคจรรอบลูกแสงเย็นเอง)
# พากล้องไปได้ถึง z≈+23 หลังลูก ตาเลยหันหนีและกลับซ้าย-ขวา ~12 วิของฉาก
bind ตนx = camX - ex; bind ตนz = camZ - ez
bind ตนl = รากที่สอง(ตนx*ตนx + ตนz*ตนz); ถ้า ตนl < 0.001 { bind ตนl = 0.001 }
bind enx = ตนx/ตนl; bind enz = ตนz/ตนl
bind erx = 0.0 - enz; bind erz = enx
bind ebx = ex + enx*eR*0.82; bind efz = ez + enz*eR*0.82
สีดินสอ(24, 14, 30)
ฉากบทห้า_สองหน้า(ebx - erx*eR*0.34, ey - eR*0.16, efz - erz*eR*0.34,
ebx - erx*eR*0.08, ey - eR*0.08, efz - erz*eR*0.08,
ebx - erx*eR*0.21, ey + eR*0.02, efz - erz*eR*0.21)
ฉากบทห้า_สองหน้า(ebx + erx*eR*0.34, ey - eR*0.16, efz + erz*eR*0.34,
ebx + erx*eR*0.08, ey - eR*0.08, efz + erz*eR*0.08,
ebx + erx*eR*0.21, ey + eR*0.02, efz + erz*eR*0.21)
flush_3d()
set_flat_shade(0.0)
ถ้า ศึกจบ > 0.5 { # รอยร้าวหลังหมัดสุดท้าย
โหมดผสม(1)
bind ครก = 0
ขณะที่ ครก < 7 {
bind cka = ครก * 0.897 + 0.35
bind ckr = eR * (0.25 + (ครก - ปัดลง(ครก/2.0)*2.0)*0.3)
สีดินสอ(floor(90*(1.0-resP)), floor(150*(1.0-resP)), floor(255*(1.0-resP)))
วาดเส้น3มิติ(ebx + erx*โคไซน์(cka)*ckr, ey + ไซน์(cka)*ckr, efz + erz*โคไซน์(cka)*ckr,
ebx + erx*โคไซน์(cka + 0.5)*eR*0.95, ey + ไซน์(cka + 0.5)*eR*0.95, efz + erz*โคไซน์(cka + 0.5)*eR*0.95)
bind ครก = ครก + 1
}
# หิมะตกขึ้น: เกล็ดลอยขึ้นจากแสงที่แตก (บทสรุป)
bind หมะ = 0
ขณะที่ หมะ < 16 {
bind sfa = หมะ * 2.4 + 0.7
bind sfr = 2.0 + (หมะ - ปัดลง(หมะ/4.0)*4.0) * 2.6
bind sfp = (c5t*0.55 + หมะ*0.37) - ปัดลง((c5t*0.55 + หมะ*0.37)/6.0)*6.0 # 0..6 วนขึ้น
bind sfy = ey + 3.0 - sfp * 4.5
สีดินสอ(floor(200*ดำ), floor(220*ดำ), floor(255*ดำ))
วาดเส้น3มิติ(ex + โคไซน์(sfa)*sfr, sfy, ez + ไซน์(sfa)*sfr*0.6,
ex + โคไซน์(sfa)*sfr, sfy - 0.5, ez + ไซน์(sfa)*sfr*0.6)
bind หมะ = หมะ + 1
}
flush_3d(); โหมดผสม(0)
}
มิฉะนั้น { # รังสีหมุนของศัตรูระหว่างศึก
โหมดผสม(1)
bind รง = 0
ขณะที่ รง < 8 {
bind ra5 = รง * 0.785 + c5t*1.9
สีดินสอ(150, 190, 235)
วาดเส้น3มิติ(ex + โคไซน์(ra5)*eR, ey + ไซน์(ra5)*eR*0.8, ez,
ex + โคไซน์(ra5)*(eR + 6.0 + ไซน์(c5t*7.0 + รง)*2.0), ey + ไซน์(ra5)*(eR + 6.0)*0.8, ez)
bind รง = รง + 1
}
bind exCol = วนสีอ่อน(190, 220, 255, c5t*1.8, 0.28)
อนุภาคทรงกลม(ex, ey, ez, eR*1.5, 12, c5t*2.0, list_get(exCol,0), list_get(exCol,1), list_get(exCol,2))
flush_3d(); โหมดผสม(0)
}
# ── คู่สหาย: ริกเนทีฟ ท่าพุ่ง/ฟัน + หมุนสีเมชทริป (เกนแฟลชตอนปะทะ/สโตรบ) ──
bind kyaw5 = atan2(ex - kx, ez - kz) # หันเข้าศัตรูเสมอ
bind qyaw5 = atan2(ex - qx, ez - qz)
bind แขนรบ = 0.12 + ไซน์(dashP*3.1416)*0.72
bind ทัค = ไซน์(dashP*3.1416)*0.4
bind เอน = 0.24
ถ้า ศึกจบ > 0.5 { bind แขนรบ = 0.08 + ไซน์(c5t*1.1)*0.05; bind ทัค = 0.1; bind เอน = 0.05 }
set_flat_shade(0.0)
set_material("roughness", 0.5)
set_material("specular", 0.4)
set_material("subsurface", 0.25)
bind เกนรบ = 1.0 + สโตรบ*0.35 + ฟรีซแฟลช*1.4
หมุนสีเมช(c5t*2.3, เกนรบ) # ราชา: สีไหลทั้งตัว (ทริป)
mesh_draw(kCutMesh, kx, ky, kz, กายสูง, kyaw5, ไซน์(bt*5.0)*0.08, แขนรบ, เอน, 0.0, ทัค)
หมุนสีเมช(c5t*2.3 + 2.6, เกนรบ) # ราชินี: เฟสสีต่าง
mesh_draw(qCutMesh, qx, qy, qz, กายสูง, qyaw5, 0.0-ไซน์(bt*5.0)*0.08, แขนรบ*0.95, เอน, 0.0, ทัค)
หมุนสีเมช(0.0, 1.0)
flush_3d()
reset_material()
โหมดผสม(1)
liquid_step(liq, 0.016)
liquid_splat(liq, 28.0 + ไซน์(c5t*2.1)*13.0, 28.0 + โคไซน์(c5t*1.6)*13.0, 1.0, 0.2, 3.6)
liquid_splat(liq, 28.0 + โคไซน์(c5t*1.4)*11.0, 28.0 + ไซน์(c5t*1.9)*11.0, 0.0, 0.2, 3.2)
liquid_draw_surface(liq, 1.0, kx, ky - กายสูง*0.52, kz, กายสูง*0.6, กายสูง*0.6)
liquid_draw_surface(liq, 1.0, qx, qy - กายสูง*0.52, qz, กายสูง*0.6, กายสูง*0.6)
flush_3d(); โหมดผสม(0)
# ── SFX ต่อเนื่อง: วูชทุกสวูปเข้า (เวลารบ — เงียบตอนฟรีซ/สโลว์อัตโนมัติ) ──
ถ้า ศึกจบ < 0.5 { ถ้า dashP < 0.035 {
เสียงเอฟเฟกต์(kx, ky, kz, 1.0, 180.0 + ไซน์(bt)*60.0, 0.16*ปริมาณSFX*อินเทน, 0.22, "saw")
เสียงเอฟเฟกต์(qx, qy, qz, 1.0, 240.0 + โคไซน์(bt)*60.0, 0.13*ปริมาณSFX*อินเทน, 0.2, "noise")
} }
# ── เหตุการณ์ครั้งเดียวต่อบรรทัด ──
ถ้า c5i > บรรทัดก่อน {
ถ้า c5i < C5N {
bind whoN = list_get(ผู้พูด, c5i)
เล่นเสียงพากย์("chapter5", c5i, list_get(ผู้พูดรหัส, c5i), ภาษา, ปริมาณSFX)
ถ้า whoN < 0.5 { เล่นไชม์ใหญ่(0.0, 0.0, 0.0, 261.6, 0.2 * ปริมาณSFX) }
ถ้า whoN > 0.5 { ถ้า whoN < 1.5 { เล่นกาเมลัน(0.0, 0.0, 0.0, 220.0, 0.3 * ปริมาณSFX) } }
ถ้า whoN > 1.5 { เล่นแฟนแฟร์(0.0, 0.0, 0.0, 196.0, 0.24 * ปริมาณSFX) }
ถ้า c5i == 1 { # henshin!
เล่นแฟนแฟร์(0.0, 0.0, 0.0, 392.0, 0.34 * ปริมาณSFX)
เสียงเอฟเฟกต์(0.0, 0.0-6.0, 5.0, 1.0, 880.0, 0.2*ปริมาณSFX, 0.5, "square")
}
ถ้า c5i == 3 { เล่นฆ้อง(ex, ey, ez, 98.0, 0.4*ปริมาณSFX); เสียงเอฟเฟกต์(ex, ey, ez, 1.0, 2400.0, 0.26*ปริมาณSFX, 0.06, "square") }
ถ้า c5i == 5 { เล่นฆ้อง(ex, ey, ez, 110.0, 0.42*ปริมาณSFX); เสียงเอฟเฟกต์(ex, ey, ez, 1.0, 2700.0, 0.26*ปริมาณSFX, 0.06, "square") }
ถ้า c5i == 7 { เล่นฆ้อง(ex, ey, ez, 87.3, 0.46*ปริมาณSFX); เสียงเอฟเฟกต์(ex, ey, ez, 1.0, 3000.0, 0.28*ปริมาณSFX, 0.07, "square") }
ถ้า c5i == 9 { # ลมหายใจค้างก่อนท่อนจบ
เสียงเอฟเฟกต์(0.0, 0.0-10.0, 5.0, 1.0, 1560.0, 0.14*ปริมาณSFX, 1.8, "sine")
}
ถ้า c5i == 10 { # สโลว์โมเริ่ม: เสียงดิ่งต่ำ
เสียงเอฟเฟกต์(0.0, 0.0-6.0, 5.0, 1.0, 66.0, 0.3*ปริมาณSFX, 2.4, "saw")
}
ถ้า c5i == 12 { # อิมแพกต์สุดท้าย: เพลงตัด + ร้าว + ฆ้องลึก
หยุดเพลง()
เสียงเอฟเฟกต์(ex, ey, ez, 1.0, 36.0, 0.6*ปริมาณSFX, 2.6, "saw")
เสียงเอฟเฟกต์(ex, ey, ez, 1.0, 3200.0, 0.3*ปริมาณSFX, 0.09, "square")
เล่นฆ้อง(0.0, 0.0, 0.0, 49.0, 0.5 * ปริมาณSFX)
}
ถ้า c5i == 13 { เล่นไชม์ใหญ่(ex, ey, ez, 523.25, 0.22 * ปริมาณSFX) }
}
bind บรรทัดก่อน = c5i
}
# ── ฮัมบทสรุป (อุ่น เบา) ──
bind humR = 0.0
ถ้า ศึกจบ > 0.5 { bind humR = 0.05 * ปริมาณSFX * ดำ }
เสียงโทน(15, 0.0, 0.0, 0.0, 1.0, 82.4, humR, 0.0, 0.0)
# ── ตัวหนังสือ ──
ตั้งกล้องมอง(0.0, 0.0, -22.0, 0.0, 0.0, 0.0)
ตั้งระยะห่าง(2.8)
สีดินสอ(floor(200*ดำ+20), floor(210*ดำ+18), floor(240*ดำ+20))
วาดสตริง("chapter 5 : the song against the light", 0.0, 10.0, 0.0, 0.62, 1)
ถ้า c5i < C5N {
bind line5 = list_get(บทพูด, c5i)
bind line5กลิฟ = list_get(บทพูดกลิฟ, c5i)
bind who5 = list_get(ผู้พูด, c5i)
bind lt = c5t - list_get(c5cum, c5i)
bind laf = 1.0
ถ้า lt < 0.4 { bind laf = lt / 0.4 }
ถ้า lt > C5SEC - 0.5 { bind laf = (C5SEC - lt) / 0.5 }
ถ้า laf < 0.0 { bind laf = 0.0 }
bind lr = floor(230.0 * laf); bind lg = floor(240.0 * laf); bind lb = floor(255.0 * laf)
ถ้า who5 > 0.5 { ถ้า who5 < 1.5 { bind lr = floor(255.0*laf); bind lg = floor(218.0*laf); bind lb = floor(128.0*laf) } }
ถ้า who5 > 1.5 { bind lr = floor(255.0*laf); bind lg = floor(170.0*laf); bind lb = floor(210.0*laf) }
ถ้า แสดงบทพูด == 1 {
วาดสตริงบทพูดบากขอบ(line5กลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.60)
สีดินสอ(lr, lg, lb)
วาดสตริงบทพูดบาก(line5กลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.60)
}
}
สีดินสอ(floor(170*ดำ), floor(180*ดำ), floor(205*ดำ))
วาดสตริง("[enter/space] continue [esc] skip", 0.0, 10.9, 0.0, 0.42, 1)
flush_3d()
แสดงผล()
bind outC5 = 0.0
ถ้า c5t >= C5END { bind outC5 = 1.0 }
# กันข้ามโดยไม่ตั้งใจ: ไม่รับปุ่มข้าม (คีย์บอร์ด+จอย) ช่วง 5 วิแรกของฉาก
ถ้า c5t > 5.0 {
ถ้า กดปุ่ม("enter") { bind outC5 = 1.0 }
ถ้า กดปุ่ม("space") { bind outC5 = 1.0 }
ถ้า กดปุ่ม("escape") { bind outC5 = 1.0 }
ถ้า จอยปุ่ม("a") { bind outC5 = 1.0 }
ถ้า จอยปุ่ม("start") { bind outC5 = 1.0 }
}
ถ้า outC5 > 0.5 {
เบลอเฟรม(0.0)
เสียงโทน(15, 0.0, 0.0, 0.0, 1.0, 82.4, 0.0, 0.0, 0.0)
}
คืน [บรรทัดก่อน*1000.0 + มาร์ก, outC5]
}