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/chapter1.ling
# Chapter 1 cutscene module
# Keeps script/data out of main.ling and returns [updatedPrevLine, shouldExit]
#
# ราชา/ราชินี = โมเดล .lmesh ความละเอียดสูง (mesh_draw — ริกเนทีฟ: sway/arm/lean/leg/tuck)
# ลอยอยู่ "ในลูกของเหลว" แบบสหาย · ราชินีมีริกเส้นเรืองทับตัว (วาดQueenริก)
# กำกับเป็น 4 ช็อตตัดสลับ (แพนข้าง → แพนโค้งรอบราชินี → เครนกดลง → ช็อตประตู)
# บล็อกกิ้ง: ยืนคุย → ราชาเดินวน → เดินเข้าหากัน → หันเข้าประตู → หมุนวนโดนดูด + สีวนรุ้ง
ฟังก์ชัน ฉากบทหนึ่ง_บทพูดกลิฟ(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
[10, 15, 8, 22, 26, 25, 8, -1, 28, 8, 20, 5, -1, 15, 21, 28, 8, 16, 25, 21, -1, 24, 8, 16, 23, 12, 20, 24, 26, -1, 20, 21, -1, 8, 25, 21, 3, -1, 18, 26, 16, 20, -1, 19, 8, 11, 8, -1, 14, 8, 23, 8, 24, 26, 4, 20, 16, -1, 24, 26, 23, 16, 22, 26, 5],
[18, 16, 20, 14, 26, -1, 16, 26, 3, -1, 24, 26, 18, 8, 16, -1, 21, 20, 23, 16, -1, 24, 26, 30, 26, -1, 9, 8, 16, -1, 25, 21, 23, 26, -1, 23, 8, 23, 8, 9, 8, 16, 5],
[11, 12, 19, 21, -1, 23, 8, 23, 8, 9, 8, 16, 3, -1, 19, 12, 11, 21, -1, 14, 8, 18, 18, 16, -1, 20, 8, 24, 15, 16, 4, 11, 12, -1, 22, 26, 23, 12, 16, -1, 11, 12, 18, 16, 20, 8, 16, 5],
[24, 21, 23, 12, 3, -1, 18, 26, 23, 12, 16, 11, 21, 23, 26, -1, 23, 16, 11, 21, -1, 25, 21, -1, 29, 21, 9, 8, 23, 12, 23, 26, 3, -1, 19, 8, 10, 15, 16, 20, 14, 26, -1, 19, 12, 11, 21, -1, 20, 21, -1, 19, 26, 18, 21, 4, 20, 16, -1, 15, 8, 16, 11, 11, 21, 5],
[24, 21, 23, 12, -1, 15, 21, 19, 26, 4, 20, 16, -1, 9, 26, 23, 16, 20, 14, 26, 3, -1, 24, 21, 24, 15, 16, 25, 12, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 28, 8, 23, 26, 11, 21, -1, 28, 12, 16, 18, 26, -1, 11, 12, 18, 16, 23, 26, 3, -1, 8, 14, 12, 16, 20, -1, 9, 26, 23, 12, 16, 18, 26, -1, 20, 8, 24, 15, 16, 4, 11, 12, 5],
[16, 19, 8, -1, 14, 21, 21, 5, -1, 13, 8, 24, 26, 25, 21, -1, 20, 21, 25, 21, -1, 28, 12, 16, 25, 21, 3, -1, 14, 26, 23, 16, 20, -1, 28, 16, 20, 11, -1, 14, 21, 23, 26, 11, 21, 4, 20, 16, -1, 25, 8, 20, -1, 24, 26, 23, 26, -1, 25, 21, 18, 21, 23, 21, 5],
[19, 12, 11, 21, -1, 14, 12, 25, 21, 3, -1, 28, 8, 23, 12, 28, 8, 23, 12, 4, 20, 21, -1, 25, 8, 19, 12, -1, 21, 22, 26, 20, 5, -1, 28, 8, 23, 12, 28, 8, 23, 12, 3, -1, 19, 21, 20, 16, 20, 14, 26, -1, 24, 21, 20, 14, 26, -1, 20, 21, -1, 20, 8, 18, 8, -1, 28, 12, 16, 25, 21, 5],
[24, 21, 24, 15, 16, 25, 12, -1, 18, 16, 20, 14, 26, -1, 25, 21, -1, 18, 26, 16, 20, 3, -1, 25, 24, 26, -1, 9, 26, 23, 8, 16, 25, 21, -1, 20, 21, 25, 21, -1, 20, 16, -1, 20, 8, 23, 26, 3, -1, 15, 21, 19, 26, 4, 20, 16, -1, 23, 8, 16, 25, 21, -1, 20, 21, -1, 20, 8, 18, 8, 4, 20, 16, -1, 11, 21, 23, 21, 5],
]
}
ถ้า ภาษา == 1 {
คืน [
[15, 20, 13, 28, 32, 17, 30, -1, 27, 26, 17, 6, -1, 13, 18, 32, 17, 30, -1, 32, 20, 17, -1, 35, 20, 21, 32, 17, -1, 31, 21, 24, 17, 26, 15, 17, 4, -1, 32, 20, 17, -1, 29, 33, 17, 17, 26, -1, 31, 32, 21, 24, 24, -1, 31, 24, 17, 17, 28, 31, -1, 21, 26, -1, 19, 24, 13, 31, 31, 6],
[32, 20, 17, -1, 23, 21, 26, 19, -1, 31, 13, 37, 31, -1, 32, 20, 17, -1, 31, 23, 37, -1, 15, 13, 26, -1, 27, 26, 24, 37, -1, 14, 17, -1, 31, 27, 27, 32, 20, 17, 16, -1, 14, 37, -1, 13, -1, 32, 30, 33, 17, -1, 24, 33, 24, 24, 13, 14, 37, 6],
[14, 33, 32, -1, 32, 20, 17, -1, 24, 33, 24, 24, 13, 14, 37, -1, 15, 13, 26, 26, 27, 32, -1, 14, 17, -1, 28, 24, 13, 37, 17, 16, -1, 35, 21, 32, 20, 27, 33, 32, -1, 32, 20, 17, -1, 25, 17, 13, 16, 27, 35, -1, 21, 26, 31, 32, 30, 33, 25, 17, 26, 32, 6],
[21, 32, -1, 21, 31, -1, 15, 13, 24, 24, 17, 16, -1, 32, 20, 17, -1, 15, 30, 13, 16, 24, 17, -1, 30, 17, 17, 16, 4, -1, 20, 21, 16, 16, 17, 26, -1, 14, 17, 37, 27, 26, 16, -1, 32, 20, 17, -1, 25, 13, 30, 15, 20, 21, 26, 19, -1, 25, 17, 13, 16, 27, 35, 6],
[14, 30, 21, 26, 19, -1, 21, 32, -1, 20, 27, 25, 17, 4, -1, 13, 26, 16, -1, 35, 17, -1, 15, 13, 26, -1, 35, 13, 23, 17, -1, 32, 20, 17, -1, 35, 27, 30, 24, 16, -1, 35, 21, 32, 20, 27, 33, 32, -1, 14, 30, 17, 13, 23, 21, 26, 19, -1, 21, 32, -1, 13, 19, 13, 21, 26, 6],
[19, 27, -1, 26, 27, 35, 6, -1, 32, 20, 17, -1, 18, 21, 30, 31, 32, -1, 26, 27, 32, 17, -1, 21, 31, -1, 35, 13, 21, 32, 21, 26, 19, -1, 35, 20, 17, 30, 17, -1, 32, 20, 17, -1, 19, 30, 17, 17, 26, -1, 35, 21, 26, 16, 31, -1, 32, 33, 30, 26, -1, 19, 27, 24, 16, 6],
[32, 20, 17, -1, 25, 17, 13, 16, 27, 35, -1, 19, 13, 32, 17, -1, 27, 28, 17, 26, 31, -1, 18, 27, 30, -1, 33, 31, 6, -1, 35, 17, -1, 35, 21, 24, 24, -1, 35, 13, 21, 32, -1, 21, 26, 31, 21, 16, 17, -1, 32, 20, 17, -1, 25, 27, 30, 26, 21, 26, 19, -1, 31, 27, 26, 19, 6],
[13, 26, 16, -1, 32, 20, 17, -1, 23, 21, 26, 19, -1, 13, 26, 16, -1, 29, 33, 17, 17, 26, -1, 14, 17, 15, 13, 25, 17, -1, 32, 35, 27, -1, 14, 30, 21, 19, 20, 32, -1, 26, 27, 32, 17, 31, 4, -1, 16, 30, 13, 35, 26, -1, 20, 27, 25, 17, -1, 21, 26, 32, 27, -1, 32, 20, 17, -1, 24, 21, 19, 20, 32, 6],
]
}
ถ้า ภาษา == 2 {
คืน [
[62, 51, 51, 139, 119, 57, 144, 20, -1, 119, 101, 130, 20, 13, 107, 133, 84, 149, 20, 138, 88, 62, 113, 138, 10, 133, 107, -1, 93, 133, 27, 135, 57, 138, 88, 130, 20, 13, 20, 119, 101, 130, 62, 152, 119, 101, 123, 90, 152, 57, 150, 9, 107],
[93, 133, 27, 133, 42, 93, 130, 113, 108, 133, 55, 123, 20, 81, 133, 21, 129, 113, 20, 62, 101, 20, 153, 41, 6, 155, 41, 107, 88, 149, 76, 101, 20, 6, 105, 123, 84, 51, 139, 150, 55, 21, 93, 135, 20, 149, 54, 133, 57, 132, 57],
[150, 45, 149, 76, 101, 20, 6, 105, 123, 84, 57, 132, 57, 21, 129, 62, 93, 93, 149, 101, 20, 153, 86, 153, 41, 119, 133, 6, 65, 93, 133, 110, 21, 133, 6, 149, 13, 93, 147, 123, 20, 38, 57, 42, 93, 138, 150, 120, 20, 53, 20, 119, 34, 133],
[84, 130, 57, 48, 6, 149, 93, 138, 88, 6, 108, 133, 65, 139, 149, 65, 101, 6, 105, 123, 84, -1, 31, 123, 57, 123, 90, 78, 57, 53, 20, 119, 34, 133, 149, 38, 135, 57, 10, 62, 107, 57],
[57, 134, 84, 130, 57, 6, 101, 130, 62, 64, 133, 57, 149, 47, 135, 38, -1, 150, 106, 107, 149, 93, 133, 21, 129, 65, 102, 6, 151, 101, 6, 151, 38, 88, 153, 86, 51, 134, 101, 133, 88, 84, 130, 57, 123, 138, 6, 13, 93, 132, 20],
[153, 65, 149, 47, 135, 38, 152, 57, 62, 130, 38, 57, 140, -1, 151, 61, 42, 150, 93, 6, 6, 134, 101, 130, 20, 93, 123, -1, 37, -1, 51, 139, 30, 144, 20, 101, 84, 149, 10, 138, 88, 107, 6, 101, 133, 88, 149, 65, 155, 57, 113, 138, 51, 123, 20],
[65, 93, 129, 44, 53, 20, 119, 34, 133, 149, 65, 135, 38, 152, 121, 149, 93, 133, 150, 106, 107, -1, 149, 93, 133, 21, 129, 93, 123, 6, 130, 57, 123, 90, 152, 57, 62, 51, 149, 76, 101, 20, 88, 133, 84, 149, 29, 133],
[150, 106, 107, 93, 133, 27, 133, 150, 101, 129, 93, 133, 27, 135, 57, 138, 6, 155, 6, 101, 133, 88, 149, 65, 155, 57, 113, 123, 20, 151, 61, 42, 123, 130, 57, 114, 6, 113, 108, 133, 20, -1, 48, 6, 38, 143, 20, 6, 101, 130, 62, 64, 133, 57, 116, 150, 113, 20, 113, 108, 133, 20],
]
}
ถ้า ภาษา == 3 {
คืน [
[7, 402, 6, -1, 502, 338, -1, 463, 237, 386, -1, 427, 87, -1, 526, 4, -1, 351, 365, 382, -1, 351, 406, 537, -1, 379, 206, -1, 303, 349, 292, -1, 400, 153, 340, -1, 393, 120],
[365, 382, -1, 429, 410, 503, -1, 396, 402, 17, 213, 386, -1, 502, 116, 383, -1, 124, 181, -1, 307, -1, 393, 120, 43, -1, 215, 503, 120],
[502, 427, 213, -1, 60, -1, 396, 402, 17, 115, -1, 453, 375, 385, -1, 328, 65, -1, 346, 386, 115, -1, 352, 420, 504, -1, 307, -1, 346, 120],
[60, 32, 382, -1, 367, 176, -1, 20, 127, 174, -1, 270, 206, 225, 4, -1, 510, 429, 502, 115, -1, 453, 375, -1, 98, 218, 349, -1, 309, 35, 412, -1, 393, 120],
[60, 32, 383, -1, 433, 381, 197, -1, 17, 412, 359, 226, 4, -1, 369, 206, 115, -1, 298, 288, 383, -1, 120, 317, -1, 267, 307, 427, -1, 331, 43, -1, 73, 371, -1, 307, -1, 393, 120],
[386, 411, -1, 17, 174, 6, -1, 448, -1, 384, 495, 115, -1, 453, 198, 276, -1, 245, 176, 386, -1, 64, 276, 381, 197, -1, 259, 502, 115, -1, 47, 349, 292, -1, 65, 120, 206, 43, -1, 393, 120],
[453, 375, 385, -1, 239, 386, -1, 369, 206, 203, -1, 378, 508, -1, 353, 207, 120, 6, -1, 369, 206, 115, -1, 327, 463, 385, -1, 105, 179, -1, 329, 349, 292, -1, 65, 120, 206, 34, 120],
[60, 206, 502, 351, -1, 365, 49, -1, 351, 365, 382, -1, 143, -1, 27, 385, -1, 250, 382, -1, 384, 495, 17, -1, 140, 340, 4, -1, 276, -1, 303, 385, -1, 433, 381, 197, -1, 386, 82, 192, -1, 22, 120],
]
}
ถ้า ภาษา == 4 {
คืน [
[476, 123, 472, 7, 445, 12, 402, 624, 49, 302, 63, 6, 433, 246, 50, 59, 36, 84, 114, 91, 49, 134, 42, 450, 38, 41, 12, 71],
[433, 50, 531, 13, 6, 468, 50, 378, 430, 49, 249, 254, 209, 46, 68, 38, 41, 27, 16, 6, 45, 36, 62, 69, 72, 45, 12, 43],
[36, 17, 33, 49, 249, 254, 209, 50, 6, 516, 191, 49, 386, 213, 45, 20, 27, 41, 50, 242, 42, 69, 72, 45, 12],
[33, 72, 50, 9, 66, 70, 16, 25, 49, 518, 474, 10, 43, 205, 51, 72, 6, 521, 567, 29, 71, 516, 191, 49, 299, 359, 46, 594, 26, 72, 41, 12, 71],
[33, 72, 75, 337, 37, 281, 72, 51, 6, 322, 8, 50, 132, 441, 75, 173, 53, 230, 29, 24, 43, 45, 20, 448, 528, 62, 26, 31, 69, 72, 71],
[26, 11, 6, 521, 18, 45, 26, 12, 7, 372, 181, 49, 605, 475, 50, 6, 491, 49, 614, 17, 622, 576, 46, 233, 74, 71, 226, 324, 42, 300, 38, 41, 12, 71],
[516, 191, 49, 584, 17, 322, 8, 49, 35, 62, 46, 586, 20, 7, 322, 8, 50, 375, 49, 393, 49, 134, 42, 300, 43, 13],
[33, 27, 41, 433, 43, 433, 246, 50, 6, 138, 39, 49, 550, 20, 605, 475, 43, 45, 70, 6, 167, 49, 134, 49, 262, 55, 43, 290, 18, 265, 31, 69, 72, 41, 12, 38, 35],
]
}
ถ้า ภาษา == 5 {
คืน [
[617, 11, 612, 8, 216, 773, 548, 572, 683, 573, 270, 815, 32, 163, 850, 554, 163, 51, 543, 499, 585, 216, 557, 562, 32, 25],
[211, 554, 722, 850, 157, 449, 11, 833, 580, 482, 573, 408, 624, 443, 373, 673, 258, 383, 237, 607],
[69, 500, 449, 773, 58, 691, 145, 34, 202, 850, 408, 624, 443, 80, 428, 504, 528, 245],
[255, 703, 602, 27, 408, 624, 686, 615, 850, 698, 41, 773, 548, 701, 756, 573, 691, 145, 32, 232],
[380, 255, 296, 205, 267, 850, 367, 57, 80, 673, 188, 777, 20, 567, 850, 664, 17, 104, 275, 100, 374, 591],
[556, 216, 278, 146, 170, 8, 617, 11, 24, 819, 616, 482, 216, 650, 828, 137, 27, 782, 683, 573, 217, 424, 619, 330, 582],
[691, 145, 32, 793, 27, 367, 57, 417, 315, 8, 367, 57, 275, 216, 438, 443, 32, 25, 619, 84],
[41, 436, 211, 554, 18, 554, 163, 137, 77, 23, 24, 433, 46, 573, 819, 616, 850, 703, 93, 685, 317, 824, 582, 205, 123, 38, 267],
]
}
คืน []
}
ฟังก์ชัน ฉากบทหนึ่ง_บทพูด(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
"chaputa wan. howaito sairensu no ato, kuin mada garasu-ni suripu.",
"kingu iu, sukai onri suzu bai toru rarabai.",
"demo rarabai, medo gakki nashi-de purei dekinai.",
"sore, kureidoru rido to yobareru, machingu medo no muko-ni haiddo.",
"sore homu-ni buringu, soshite wareware warudo weiku dekiru, agein bureiku nashi-de.",
"ima goo. fasuto noto weito, gurin wind gorudo-ni tan suru tokoro.",
"medo geto, wareware-no tame opun. wareware, moningu songu no naka weito.",
"soshite kingu to kuin, tsu buraito noto ni naru, homu-ni raito no naka-ni doro."
]
}
ถ้า ภาษา == 2 {
คืน [
"บทที่หนึ่ง หลังความเงียบสีขาว ราชินียังคงหลับใหลอยู่ในแก้ว",
"ราชาตรัสว่าท้องฟ้าจะสงบลงได้ก็ด้วยเพลงกล่อมที่แท้จริงเท่านั้น",
"แต่เพลงกล่อมนั้นจะบรรเลงไม่ได้หากปราศจากเครื่องดนตรีแห่งทุ่งหญ้า",
"มันถูกเรียกว่าปี่เปลกล่อม ซ่อนอยู่พ้นทุ่งหญ้าเดินขบวน",
"นำมันกลับบ้านเถิด แล้วเราจะปลุกโลกโดยไม่ทำลายมันอีกครั้ง",
"ไปเถิดในบัดนี้ โน้ตแรกกำลังรอ ณ ที่ซึ่งลมเขียวกลายเป็นสีทอง",
"ประตูทุ่งหญ้าเปิดให้เราแล้ว เราจะรอกันอยู่ในบทเพลงยามเช้า",
"แล้วราชาและราชินีก็กลายเป็นสองโน้ตอันสุกสว่าง ถูกดึงกลับบ้านสู่แสงสว่าง"
]
}
ถ้า ภาษา == 3 {
คืน [
"1장. 하얀 침묵이 지난 후, 여왕은 여전히 유리 속에서 잠들어 있다",
"왕은 진정한 자장가만이 하늘을 달랠 수 있다고 말한다",
"하지만 그 자장가는 초원의 악기 없이는 연주할 수 없다",
"그것은 요람 갈대라 불리며, 행진하는 초원 너머에 숨겨져 있다",
"그것을 집으로 가져오면, 우리는 세상을 다시 부수지 않고 깨울 수 있다",
"이제 가라. 첫 음표는 초록빛 바람이 금빛으로 변하는 곳에서 기다리고 있다",
"초원의 문이 우리를 위해 열린다. 우리는 아침의 노래 안에서 기다리겠다",
"그리하여 왕과 여왕은 두 개의 밝은 음표가 되어, 빛 속의 집으로 이끌려 갔다"
]
}
ถ้า ภาษา == 4 {
คืน [
"第一章。白い沈黙の後も、王妃はまだガラスの中で眠っている",
"王は言う、空は本物の子守唄によってしか、なだめられないと",
"だがその子守唄は、草原の楽器なくしては奏でられない",
"それは『ゆりかごの葦笛』と呼ばれ、行進する草原の彼方に隠されている",
"それを持ち帰れば、我々は世界を再び壊すことなく目覚めさせられる",
"さあ、行きなさい。最初の音符は、緑の風が黄金に変わる場所で待っている",
"草原の門が我々のために開く。我々は朝の歌の中で待とう",
"そして王と王妃は、二つの輝く音符となり、光の中の家へと引き寄せられていった"
]
}
ถ้า ภาษา == 5 {
คืน [
"第一章。在那片白色的寂静之后,王后仍然沉睡在玻璃之中",
"国王说,只有一首真正的摇篮曲才能安抚天空",
"但没有那件草原乐器,摇篮曲便无法演奏",
"它被称为摇篮芦笛,藏于那片行进的草原之外",
"把它带回家,我们便能唤醒世界,而不再将其打碎",
"现在就去吧。第一个音符正在绿风化为金色的地方等待着",
"草原之门为我们敞开。我们将在晨曲之中等候",
"于是国王与王后化作两个明亮的音符,被光芒引领着回到了家"
]
}
คืน [
"chapter one. after the white silence, the queen still sleeps in glass.",
"the king says the sky can only be soothed by a true lullaby.",
"but the lullaby cannot be played without the meadow instrument.",
"it is called the cradle reed, hidden beyond the marching meadow.",
"bring it home, and we can wake the world without breaking it again.",
"go now. the first note is waiting where the green winds turn gold.",
"the meadow gate opens for us. we will wait inside the morning song.",
"and the king and queen became two bright notes, drawn home into the light."
]
}
ฟังก์ชัน ฉากบทหนึ่ง_โน้ต() {
คืน [293.66, 329.63, 392.00, 440.00, 523.25, 587.33, 392.00, 659.25]
}
ฟังก์ชัน ฉากบทหนึ่ง_ผู้พูด() {
คืน [0, 1, 1, 2, 1, 2, 1, 0] # 0 narrator, 1 king, 2 queen
}
# รหัสผู้พูดสำหรับพากย์เสียง (ต้องตรงกับ tools/voiceover/manifest.py ทุกตัวอักษร)
ฟังก์ชัน ฉากบทหนึ่ง_ผู้พูดรหัส() {
คืน ["narrator", "king", "king", "queen", "king", "queen", "king", "narrator"]
}
# ระยะเวลาเล่นต่อบรรทัด (วิ) ตามภาษาพากย์เสียงจริง (วัดจาก tools/voiceover/
# progress.json ตอนอัด) — ให้ฉากรอเสียงพากย์จบก่อนตัดบรรทัด แทนจังหวะตายตัว
# 3.55 วิ/บรรทัด เดิม ภาษาที่ยังไม่มีเสียงพากย์ (ทุกภาษายกเว้น en ตอนนี้) ใช้
# จังหวะเดิมไปก่อน — คงพฤติกรรมเดิมทุกอย่างจนกว่าจะอัดเสียงภาษานั้นเสร็จ
ฟังก์ชัน ฉากบทหนึ่ง_ระยะเวลา(lang) {
ถ้า lang == "ko" { คืน [8.82, 5.78, 4.90, 6.26, 7.94, 6.18, 5.86, 8.98] }
ถ้า lang == "ja" { คืน [6.98, 6.34, 5.06, 6.82, 6.18, 6.42, 8.26, 8.10] }
ถ้า lang == "zh" { คืน [6.58, 5.06, 3.86, 4.74, 5.54, 5.46, 5.30, 5.62] }
ถ้า lang == "daemon" { คืน [6.34, 3.86, 5.30, 6.74, 7.38, 6.18, 7.06, 5.94] }
ถ้า lang == "th" { คืน [4.56, 5.06, 4.76, 4.10, 4.68, 4.92, 4.76, 5.74] }
ถ้า lang == "en" { คืน [6.46, 4.38, 3.02, 5.02, 5.10, 5.42, 5.02, 5.10] }
คืน [3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55]
}
# สีรุ้งวน (hue h เรเดียน) → [r,g,b] 0-255
ฟังก์ชัน ฉากบทหนึ่ง_สีวน(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)]
}
# ฟังก์ชันมองไม่เห็น local ใน do-block ของ main → รับทุกอย่างเป็นพารามิเตอร์
# (แพตเทิร์นเดียวกับ เล่นโพสต์เลเวล1) — บท/โน้ต/ผู้พูดดึงจากฟังก์ชันของโมดูลเอง
ฟังก์ชัน เล่นฉากบทหนึ่ง(t, บทหนึ่งเริ่ม, บทหนึ่งบรรทัดก่อน, musicOn, ปริมาณBGM, ปริมาณSFX, เพลงบทหนึ่ง, ยาวเพลงบทหนึ่ง, kCutMesh, qCutMesh, liq, ภาษา, แสดงบทพูด, ภาษาบทพูด, ระยะเวลาไดนามิก) {
bind บทหนึ่งพูด = ฉากบทหนึ่ง_บทพูด(ภาษาแสดงผล(ภาษา))
bind บทหนึ่งพูดกลิฟ = ฉากบทหนึ่ง_บทพูดกลิฟ(ภาษาบทพูด)
bind บทหนึ่งโน้ต = ฉากบทหนึ่ง_โน้ต()
bind บทหนึ่งผู้พูด = ฉากบทหนึ่ง_ผู้พูด()
bind บทหนึ่งผู้พูดรหัส = ฉากบทหนึ่ง_ผู้พูดรหัส()
bind บทหนึ่งระยะเวลา = ระยะเวลาไดนามิก
bind c1t = t - บทหนึ่งเริ่ม
bind C1N = ความยาว(บทหนึ่งพูด)
# ── ตารางเวลาสะสม: c1cum[i] = เวลาเริ่มบรรทัด i (แทนสูตร i*C1SEC ตายตัวเดิม) ──
bind c1cum = [0.0]
bind cci = 0
ขณะที่ cci < C1N {
bind c1cum = list_push(c1cum, list_get(c1cum, cci) + list_get(บทหนึ่งระยะเวลา, cci))
bind cci = cci + 1
}
bind C1TOTAL = list_get(c1cum, C1N)
bind C1END = C1TOTAL + 3.0 # หาง 3 วิ: เล่นค้าง + เฟดดำ + กล้องถอย
bind C1FADE = 0.0
ถ้า c1t > C1END - 3.2 { bind C1FADE = (c1t - (C1END - 3.2)) / 3.2 }
ถ้า C1FADE > 1.0 { bind C1FADE = 1.0 }
bind c1i = 0
bind c1scan = 1
ขณะที่ c1scan == 1 {
ถ้า c1i >= C1N - 1 { bind c1scan = 0 }
มิฉะนั้น { ถ้า c1t < list_get(c1cum, c1i + 1) { bind c1scan = 0 }
มิฉะนั้น { bind c1i = c1i + 1 } }
}
bind C1SEC = list_get(บทหนึ่งระยะเวลา, c1i) # ระยะเวลาบรรทัดปัจจุบัน (ยังใช้เป็นค่าประมาณจังหวะทั่วไปด้านล่าง)
# BGM loop + gentle fade near cut
ถ้า musicOn == 1 {
ถ้า ยาวเพลงบทหนึ่ง > 1.0 {
ถ้า ตำแหน่งเพลง() >= ยาวเพลงบทหนึ่ง - 0.5 { ค้นหาเพลง(0); เล่นเพลง(เพลงบทหนึ่ง) }
}
ระดับเพลง(ปริมาณBGM * 0.33 * (1.0 - C1FADE)) # หรี่ BGM เหลือ 1/3 ระหว่างคัตซีน — เสียงพากย์ต้องเด่นกว่า
}
bind cR = floor(14.0 + ไซน์(c1t*0.28)*10.0)
bind cG = floor(16.0 + ไซน์(c1t*0.22 + 1.2)*11.0)
bind cB = floor(28.0 + ไซน์(c1t*0.19 + 2.7)*14.0)
เบลอเฟรม(0.958) # หางแสงค้าง ~1.25 วิ (decay+max)
เติม(cR, cG, cB)
# ── จังหวะฉาก: ช็อต A (บรรทัด 0-1) · B (2-3) · C (4-5) · D (6-7) — ขอบเขตตาม
# เวลาสะสมจริงของแต่ละบรรทัด (c1cum) ไม่ใช่ตัวคูณ C1SEC ตายตัวอีกต่อไป ──
bind tA = list_get(c1cum, 2); bind tB = list_get(c1cum, 4); bind tC = list_get(c1cum, 6); bind tD = list_get(c1cum, 7)
bind pOn = 0.0
ถ้า c1t > tC - 0.8 { bind pOn = (c1t - (tC - 0.8)) / 2.2 }
ถ้า pOn > 1.0 { bind pOn = 1.0 }
bind ps = 0.0 # ความคืบหน้าโดนดูด 0..1
ถ้า c1t > tD { bind ps = (c1t - tD) / (C1SEC * 0.82) }
ถ้า ps > 1.0 { bind ps = 1.0 }
bind px = 0.0; bind py = 0.0 - 6.0; bind pz = 16.0 # ศูนย์ประตู (ลอยเหนือพื้น)
bind pHue = c1t * 2.4
bind pCol = ฉากบทหนึ่ง_สีวน(pHue)
# ── บล็อกกิ้งตัวละคร ──
# A: ยืนคุยสองฝั่ง · B: ราชาเดินวนครุ่นคิด · C: เดินเข้าหากัน · D: หันหา/เดินเข้า/โดนดูดเข้าประตู
bind กายสูง = 6.4
bind kx = 0.0 - 7.5; bind kz = 0.0 - 1.0; bind ky = 0.0
bind qx = 7.5; bind qz = 0.0 - 1.0; bind qy = 0.0
bind kyaw = 1.5708; bind qyaw = 0.0 - 1.5708 # หันเข้าหากัน
bind kเดิน = 0.0; bind qเดิน = 0.0 # 0..1 = กำลังเดิน (คุมสวิงแขนขา)
ถ้า c1t >= tA { ถ้า c1t < tB {
# ราชาเดินวนซ้าย-ขวาแบบครุ่นคิด ระหว่างพูดบรรทัด 2-3
bind wp = (c1t - tA) * 0.75
bind kx = 0.0 - 7.5 + ไซน์(wp) * 2.6
bind kz = 0.0 - 1.0 + (โคไซน์(wp) - 1.0) * 1.5
bind kเดิน = โคไซน์(wp); ถ้า kเดิน < 0.0 { bind kเดิน = 0.0 - kเดิน }
bind kyaw = 1.5708 + ไซน์(wp) * 0.45 # หันตามจังหวะเดิน แต่ยังชำเลืองหาราชินี
} }
ถ้า c1t >= tB { ถ้า c1t < tC {
# เดินเข้าหากันช้า ๆ ระหว่างบรรทัด 4-5 แล้วหยุดประจันหน้า
bind cvp = (c1t - tB) / (tC - tB)
bind cv = cvp * cvp * (3.0 - 2.0*cvp) # smoothstep
bind kx = 0.0 - 7.5 + 4.3 * cv
bind qx = 7.5 - 4.3 * cv
bind kเดิน = 1.0 - cv; bind qเดิน = 1.0 - cv # สวิงตอนขยับ จางเมื่อใกล้หยุด
ถ้า cvp > 0.85 { bind kเดิน = 0.0; bind qเดิน = 0.0 }
} }
ถ้า c1t >= tC {
bind kx = 0.0 - 3.2; bind qx = 3.2 # จุดที่เดินมาหยุด
# หันเข้าหาประตู แล้วค่อย ๆ ลอยเข้าใกล้ระหว่างบรรทัด 6
bind fp = (c1t - tC) / C1SEC; ถ้า fp > 1.0 { bind fp = 1.0 }
bind fs2 = fp * fp * (3.0 - 2.0*fp)
bind kyaw = 1.5708 * (1.0 - fs2) # → 0 = หันหา +z (ประตู)
bind qyaw = (0.0 - 1.5708) * (1.0 - fs2)
bind kz = 0.0 - 1.0 + 7.0 * fs2; bind qz = kz # ลอยเข้าหาประตูด้วยกัน
bind kเดิน = fs2 * (1.0 - fs2) * 4.0; ถ้า kเดิน > 1.0 { bind kเดิน = 1.0 }
bind qเดิน = kเดิน
}
bind kสเกล = กายสูง; bind qสเกล = กายสูง
ถ้า ps > 0.0 {
# เกลียวดูดเข้า: เบลนด์จากจุดยืน → วงเกลียวรัศมีหด (กันภาพกระโดด)
bind spN = 1.0 - ps
bind bs = ps / 0.25; ถ้า bs > 1.0 { bind bs = 1.0 }
bind ang = ps * 7.5
bind rad = spN * 11.0
bind skx = px + โคไซน์(ang + 3.1416) * rad
bind skz = pz - 8.0*spN + ไซน์(ang + 3.1416) * rad * 0.35
bind sqx = px + โคไซน์(ang) * rad
bind sqz = pz - 8.0*spN + ไซน์(ang) * rad * 0.35
bind sy = py*ps + ไซน์(ang*1.3) * 1.5 * spN
bind kx = kx*(1.0-bs) + skx*bs; bind kz = kz*(1.0-bs) + skz*bs
bind qx = qx*(1.0-bs) + sqx*bs; bind qz = qz*(1.0-bs) + sqz*bs
bind ky = sy*bs; bind qy = (py*ps + ไซน์(ang*1.3 + 3.0)*1.5*spN)*bs
bind kyaw = ang * 2.6; bind qyaw = 0.0 - ang * 2.6 # หมุนคว้าง
bind kสเกล = กายสูง * (0.25 + 0.75*spN) # หดเล็กเข้าหาประตู
bind qสเกล = กายสูง * (0.25 + 0.75*spN)
}
bind หายแล้ว = 0.0; ถ้า ps > 0.93 { bind หายแล้ว = 1.0 }
# ── แสงจริง: คีย์อุ่น + ฟิลเย็น + ไฟประจำตัว (น้ำเงิน/กุหลาบ) + ไฟประตูวนรุ้ง ──
ล้างแสง()
ตั้งแสงรอบข้าง(0.30)
เพิ่มแสง(0.0-14.0, 0.0-26.0, 0.0-8.0, 1.0, 0.9, 0.76, 1.35, 110.0) # คีย์อุ่นบน-ซ้าย
เพิ่มแสง(15.0, 0.0-16.0, 9.0, 0.42, 0.55, 1.0, 0.85, 90.0) # ฟิลเย็นขวา
ถ้า หายแล้ว < 0.5 {
เพิ่มแสง(kx, ky - 7.0, kz, 0.35, 0.55, 1.0, 1.15, 42.0) # ราชา: น้ำเงิน
เพิ่มแสง(qx, qy - 7.0, qz, 1.0, 0.45, 0.65, 1.15, 42.0) # ราชินี: กุหลาบ
}
ถ้า pOn > 0.0 {
เพิ่มแสง(px, py, pz, list_get(pCol,0)/255.0, list_get(pCol,1)/255.0, list_get(pCol,2)/255.0, 1.7*pOn, 95.0)
}
# ── กล้อง 4 ช็อต ตัดสลับ (แต่ละช็อตแพนของตัวเอง) ──
bind camX = 0.0; bind camY = 0.0 - 7.0; bind camZ = 0.0 - 14.0
bind lookX = 0.0; bind lookY = 0.0 - 4.4; bind lookZ = 0.0
ถ้า c1t < tA {
# ช็อต A: แทร็กข้างต่ำ เลื่อนซ้าย→ขวา ผ่านหน้าทั้งคู่ (สถาปนาฉาก)
bind sp1 = c1t / tA
bind se1 = sp1 * sp1 * (3.0 - 2.0*sp1)
bind camX = 0.0 - 15.0 + 27.0 * se1
bind camY = 0.0 - 5.0
bind camZ = 0.0 - 13.5
bind lookX = (0.0 - 3.0) + 6.0 * se1
bind lookY = 0.0 - 4.8
}
ถ้า c1t >= tA { ถ้า c1t < tB {
# ช็อต B: แพนโค้งรอบราชินี (ราชาเดินวนอยู่ฉากหลัง)
bind sp2 = (c1t - tA) / (tB - tA)
bind ag = 2.35 - sp2 * 1.15
bind camX = 4.6 + โคไซน์(ag) * 11.5
bind camZ = 0.0 - 2.0 - ไซน์(ag) * 9.5
bind camY = 0.0 - 6.2 - ไซน์(sp2*3.1416)*0.9
bind lookX = 2.2 - sp2 * 3.4 # กวาดสายตาราชินี → ราชา
bind lookY = 0.0 - 4.6
bind lookZ = 0.0 - 1.0
} }
ถ้า c1t >= tB { ถ้า c1t < tC {
# ช็อต C: เครนสูงกดลงช้า ๆ ขณะทั้งคู่เดินเข้าหากัน
bind sp3 = (c1t - tB) / (tC - tB)
bind se3 = sp3 * sp3 * (3.0 - 2.0*sp3)
bind camX = โคไซน์(0.9 + sp3*0.55) * (18.5 - 5.5*se3)
bind camZ = 0.0 - 10.5 + se3 * 2.0
bind camY = 0.0 - 14.5 + se3 * 7.3 # เครนจากสูงลงต่ำ
bind lookY = 0.0 - 4.0
} }
ถ้า c1t >= tC {
# ช็อต D: จากหลังทั้งคู่ มองเข้าประตู · ดอลลี่ตาม + เชิดขึ้นตอนดูด
bind sp4 = (c1t - tC) / (C1TOTAL - tC); ถ้า sp4 > 1.0 { bind sp4 = 1.0 }
bind camX = ไซน์(c1t*0.14) * 3.6
bind camY = 0.0 - 6.6 - sp4 * 2.6
bind camZ = 0.0 - 9.0 + sp4 * 7.5
bind lookX = px; bind lookY = py + 1.2; bind lookZ = pz * 0.85
}
ถ้า c1t > C1TOTAL { # หางเฟด: กล้องลอยขึ้น-ถอยช้า
bind หลังฉาก = c1t - C1TOTAL
bind camY = camY - หลังฉาก*0.6; bind camZ = camZ - หลังฉาก*1.4
}
ตั้งกล้องมอง(camX, camY, camZ, lookX, lookY, lookZ)
ตั้งระยะห่าง(1.85)
# ── พื้นเวที: จานเช็คเกอร์มืด (ให้เงา/แอ่งแสงมีที่เกาะ) ──
โหมดผสม(0)
set_flat_shade(0.0)
bind fs = 0
ขณะที่ fs < 16 {
bind fa0 = fs * 0.3927; bind fa1 = (fs + 1) * 0.3927
ถ้า fs - ปัดลง(fs/2.0)*2.0 == 0 { สีดินสอ(22, 26, 46) } มิฉะนั้น { สีดินสอ(16, 19, 36) }
วาดสามเหลี่ยม3มิติ(0.0, 0.2, 2.0, โคไซน์(fa0)*36.0, 0.2, 2.0+ไซน์(fa0)*36.0, โคไซน์(fa1)*36.0, 0.2, 2.0+ไซน์(fa1)*36.0)
bind fs = fs + 1
}
flush_3d()
# ── แอ่งแสงใต้ตัวละคร + ใต้ประตู (โวลูเมตริกเกาะพื้น) ──
ถ้า หายแล้ว < 0.5 {
แอ่งแสง(kx, 0.2, kz, 10.0, 90, 140, 255, 0.5)
แอ่งแสง(qx, 0.2, qz, 10.0, 255, 115, 165, 0.5)
}
ถ้า pOn > 0.0 {
แอ่งแสง(px, 0.2, pz, 14.0*pOn, list_get(pCol,0), list_get(pCol,1), list_get(pCol,2), 0.65*pOn)
ลำแสงไฟ(px, py - 9.0, pz, 0.2, 7.0*pOn, list_get(pCol,0), list_get(pCol,1), list_get(pCol,2), 0.5*pOn)
}
# ── ท่าทาง: เดิน = สวิงแขนขา · ผู้พูดโบกแขน/โน้มตัว · โดนดูด = ขดตัวหมุน ──
bind who = 0.0
ถ้า c1i < C1N { bind who = list_get(บทหนึ่งผู้พูด, c1i) }
bind หายใจ0 = ไซน์(c1t*1.35)*0.05
bind kArm = ไซน์(c1t*1.1)*0.06 + ไซน์(c1t*7.2)*0.38*kเดิน
bind kLeg = ไซน์(c1t*7.2)*0.30*kเดิน
bind kSway = หายใจ0 + ไซน์(c1t*3.6)*0.10*kเดิน
bind kLean = 0.10*kเดิน; bind kTuck = 0.0
bind qArm = ไซน์(c1t*1.2+1.0)*0.06 + ไซน์(c1t*7.0+2.0)*0.36*qเดิน
bind qLeg = ไซน์(c1t*7.0+2.0)*0.28*qเดิน
bind qSway = (0.0-หายใจ0) + ไซน์(c1t*3.5+1.0)*0.10*qเดิน
bind qLean = 0.10*qเดิน; bind qTuck = 0.0
ถ้า who > 0.5 { ถ้า who < 1.5 { ถ้า kเดิน < 0.4 {
bind kArm = ไซน์(c1t*3.1)*0.45 # ราชาพูด: โบกแขน
bind kSway = ไซน์(c1t*1.7)*0.12
bind kLean = 0.14
bind kLeg = ไซน์(c1t*1.55)*0.08
} } }
ถ้า who > 1.5 { ถ้า qเดิน < 0.4 {
bind qArm = ไซน์(c1t*2.9)*0.42 # ราชินีพูด
bind qSway = ไซน์(c1t*1.6)*0.11
bind qLean = 0.14
bind qLeg = ไซน์(c1t*1.5)*0.07
} }
ถ้า ps > 0.0 {
bind kTuck = ps*0.7; bind qTuck = ps*0.7 # ขดตัวตอนโดนดูด
bind kArm = ไซน์(c1t*9.0)*0.5*ps; bind qArm = ไซน์(c1t*9.0+1.5)*0.5*ps
bind kLean = 0.3*ps; bind qLean = 0.3*ps
}
# ── ราชา/ราชินี: โมเดลไฮเรส + ริกเนทีฟ + วัสดุผิวจริง + ลูกของเหลว + ริกเส้นราชินี ──
ถ้า หายแล้ว < 0.5 {
bind kkCol = ฉากบทหนึ่ง_สีวน(pHue)
set_flat_shade(0.0)
set_material("roughness", 0.55)
set_material("specular", 0.35)
set_material("subsurface", 0.28)
set_material("sheen", 0.15)
set_material("clearcoat", 0.20)
ถ้า ps > 0.0 {
set_material("emission", list_get(kkCol,0)*65536.0 + list_get(kkCol,1)*256.0 + list_get(kkCol,2))
set_material("emission_strength", 0.28*ps)
}
mesh_draw(kCutMesh, kx, ky, kz, kสเกล, kyaw, kSway, kArm, kLean, kLeg, kTuck)
mesh_draw(qCutMesh, qx, qy, qz, qสเกล, qyaw, qSway, qArm, qLean, qLeg, qTuck)
flush_3d()
reset_material()
# (ริกเส้นของราชินีเลิกวาดทับ — เห็นโครงลวดชัดเกิน; แอนิเมชันมาจากริกเนทีฟของ mesh_draw อยู่แล้ว)
# ลูกของเหลวหุ้มตัว (แบบสหาย) — ศูนย์กลางลำตัว
โหมดผสม(1)
liquid_step(liq, 0.016)
liquid_splat(liq, 28.0 + ไซน์(c1t*1.7)*13.0, 28.0 + โคไซน์(c1t*1.2)*13.0, 1.0, 0.18, 3.4)
liquid_splat(liq, 28.0 + โคไซน์(c1t*1.1)*11.0, 28.0 + ไซน์(c1t*1.5)*11.0, 0.0, 0.19, 3.0)
liquid_draw_surface(liq, 1.0, kx, ky - kสเกล*0.52, kz, kสเกล*0.62, kสเกล*0.62)
liquid_draw_surface(liq, 1.0, qx, qy - qสเกล*0.52, qz, qสเกล*0.62, qสเกล*0.62)
flush_3d(); โหมดผสม(0)
# ออร่าวนรุ้งตอนโดนดูด
ถ้า ps > 0.0 {
โหมดผสม(1)
อนุภาคทรงกลม(kx, ky - kสเกล*0.5, kz, kสเกล*0.75, 14, c1t*3.0, list_get(kkCol,0), list_get(kkCol,1), list_get(kkCol,2))
bind qqCol = ฉากบทหนึ่ง_สีวน(pHue + 3.1416)
อนุภาคทรงกลม(qx, qy - qสเกล*0.5, qz, qสเกล*0.75, 14, c1t*3.0+2.0, list_get(qqCol,0), list_get(qqCol,1), list_get(qqCol,2))
flush_3d(); โหมดผสม(0)
}
}
มิฉะนั้น {
# เข้าไปแล้ว: ประกายแตกกระจายที่ประตู
โหมดผสม(1)
อนุภาคทรงกลม(px, py, pz, 6.5, 26, c1t*4.0, list_get(pCol,0), list_get(pCol,1), list_get(pCol,2))
flush_3d(); โหมดผสม(0)
}
# ── ประตูมิติ: วงแหวนซ้อนหมุนวนรุ้ง + อนุภาคไหลเข้า ──
ถ้า pOn > 0.0 {
โหมดผสม(1)
bind วง = 0
ขณะที่ วง < 3 {
bind pr = (5.2 - วง*1.3) * pOn
bind spin = c1t * (1.1 + วง*0.55)
bind rc = ฉากบทหนึ่ง_สีวน(pHue + วง*1.3)
สีดินสอ(list_get(rc,0), list_get(rc,1), list_get(rc,2))
bind sgp = 0
ขณะที่ sgp < 18 {
bind a0 = sgp*0.3491 + spin; bind a1 = (sgp+1)*0.3491 + spin
วาดเส้น3มิติ(px+โคไซน์(a0)*pr, py+ไซน์(a0)*pr, pz, px+โคไซน์(a1)*pr, py+ไซน์(a1)*pr, pz)
bind sgp = sgp + 1
}
bind วง = วง + 1
}
อนุภาคทรงกลม(px, py, pz, 2.6*pOn, 12, c1t*2.2, list_get(pCol,0), list_get(pCol,1), list_get(pCol,2))
flush_3d(); โหมดผสม(0)
}
# ── โน้ตประกอบบรรทัด (ครั้งเดียวต่อบรรทัด) ──
ถ้า c1i > บทหนึ่งบรรทัดก่อน {
ถ้า c1i < C1N {
bind n = list_get(บทหนึ่งโน้ต, c1i)
bind whoN = list_get(บทหนึ่งผู้พูด, c1i)
เล่นเสียงพากย์("chapter1", c1i, list_get(บทหนึ่งผู้พูดรหัส, c1i), ภาษา, ปริมาณSFX)
ถ้า whoN < 0.5 {
เล่นไชม์ใหญ่(0.0, 0.0, 0.0, n, 0.33 * ปริมาณSFX)
}
ถ้า whoN > 0.5 { ถ้า whoN < 1.5 {
เล่นกาเมลัน(0.0, 0.0, 0.0, n, 0.42 * ปริมาณSFX)
เล่นฮังแพน(0.0, 0.0, 0.0, n*0.5, 0.20 * ปริมาณSFX)
} }
ถ้า whoN > 1.5 {
เล่นแฟนแฟร์(0.0, 0.0, 0.0, n*0.75, 0.30 * ปริมาณSFX)
เล่นฮังแพน(0.0, 0.0, 0.0, n*0.62, 0.16 * ปริมาณSFX)
}
}
bind บทหนึ่งบรรทัดก่อน = c1i
}
# ── ตัวหนังสือ ──
ตั้งกล้องมอง(0.0, 0.0, -22.0, 0.0, 0.0, 0.0)
ตั้งระยะห่าง(2.8)
สีดินสอ(255, 210, 120)
วาดสตริง("chapter 1 : marching meadow", 0.0, 10.0, 0.0, 0.72, 1)
ถ้า c1i < C1N {
bind c1line = list_get(บทหนึ่งพูด, c1i)
bind c1lineกลิฟ = list_get(บทหนึ่งพูดกลิฟ, c1i)
bind who2 = list_get(บทหนึ่งผู้พูด, c1i)
bind lt = c1t - list_get(c1cum, c1i)
bind laf = 1.0
ถ้า lt < 0.6 { bind laf = lt / 0.6 }
ถ้า lt > C1SEC - 0.7 { bind laf = (C1SEC - lt) / 0.7 }
ถ้า 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)
ถ้า who2 > 0.5 { ถ้า who2 < 1.5 { bind lr = floor(255.0*laf); bind lg = floor(218.0*laf); bind lb = floor(128.0*laf) } }
ถ้า who2 > 1.5 { bind lr = floor(212.0*laf); bind lg = floor(222.0*laf); bind lb = floor(255.0*laf) }
ถ้า แสดงบทพูด == 1 {
วาดสตริงบทพูดบากขอบ(c1lineกลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.62)
สีดินสอ(lr, lg, lb)
วาดสตริงบทพูดบาก(c1lineกลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.62)
}
}
สีดินสอ(170, 180, 205)
วาดสตริง("[enter/space] continue [esc] skip", 0.0, 10.9, 0.0, 0.42, 1)
flush_3d()
แสดงผล()
bind outC1 = 0.0
ถ้า c1t >= C1END { bind outC1 = 1.0 }
# กันข้ามโดยไม่ตั้งใจ: ไม่รับปุ่มข้าม (คีย์บอร์ด+จอย) ช่วง 5 วิแรกของฉาก
ถ้า c1t > 5.0 {
ถ้า กดปุ่ม("enter") { bind outC1 = 1.0 }
ถ้า กดปุ่ม("space") { bind outC1 = 1.0 }
ถ้า กดปุ่ม("escape") { bind outC1 = 1.0 }
ถ้า จอยปุ่ม("a") { bind outC1 = 1.0 }
ถ้า จอยปุ่ม("start") { bind outC1 = 1.0 }
}
ถ้า outC1 > 0.5 { เบลอเฟรม(0.0) }
คืน [บทหนึ่งบรรทัดก่อน, outC1]
}