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/chapter3.ling
# Chapter 3 cutscene module — "the held breath"
# Returns [state, shouldExit] · state = lineIdx*1000 + soloNoteIdx (ช่องสถานะเดียว)
#
# ลึกลับ ยาวกว่าเดิม (14 บรรทัด + หางเฟด ~52 วิ) · สกอร์: Progress.wav (เฟดเงียบช่วงวงเล่น Seraph สดด้วยเครื่องมิดีล้วน)
# (ข้อมูลเพลงดัชนี 13) — ราชา/ราชินี "อำนวยเพลง" ลาย 4/4 · วงออร์เคสตราลอย 8 แท่น
# เร้าตามบีต · ช่วงโซโล่ (เพลงหรี่ ไล่โน้ต MIDI ทีละตัว) · ต่อเนื่องบทเก่า: ขลุ่ยทุ่ง (บท 1)
# เขาสมุทร (บท 2) ลอยเป็นวัตถุเรือง · ตาบนฟ้าหรี่ลงหนึ่งลมหายใจ
# จบแบบลาง: ดาวหางฟาด "ภูเขาเงียบ" → เพลงตัดทันที + เอฟเฟกต์กระแทก + ฮัมต่ำค้าง
# → วังอุ่นวาร์ปหาย: ชิ้นส่วนลอยขึ้น หมุนคนละทิศ สีวนรุ้ง จางโปร่งใสจนหาย
ฟังก์ชัน ฉากบทสาม_บทพูดไฮไลท์(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[58, 66, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 8, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
ถ้า ภาษา == 1 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[56, 63, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 7, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
ถ้า ภาษา == 2 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[39, 44, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 5, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
ถ้า ภาษา == 3 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[38, 42, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 6, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
ถ้า ภาษา == 4 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[38, 41, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 3, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
ถ้า ภาษา == 5 {
คืน [
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[17, 21, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
[0, 4, 70, 130, 240],
[-1, -1, 0, 0, 0],
[-1, -1, 0, 0, 0],
]
}
คืน [[-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0], [-1,-1,0,0,0]]
}
ฟังก์ชัน ฉากบทสาม_บทพูดกลิฟ(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
[10, 15, 8, 22, 26, 25, 8, -1, 24, 26, 23, 16, 5, -1, 23, 16, 11, 21, -1, 13, 8, 26, 20, 11, 21, 3, -1, 15, 21, 20, -1, 11, 21, 23, 8, 26, 20, 11, 21, -1, 9, 12, 23, 26, -1, 18, 8, 23, 8, -1, 23, 12, 16, 30, 26, 5],
[24, 21, 24, 15, 16, 25, 12, -1, 21, 23, 26, 11, 21, -1, 22, 8, 23, 8, 24, 26, -1, 20, 21, -1, 15, 8, 16, -1, 18, 21, 25, 21, -1, 11, 12, 3, -1, 24, 21, 20, 14, 26, -1, 17, 16, 9, 26, 20, -1, 23, 16, 19, 12, 19, 9, 8, -1, 9, 16, 14, 16, 20, 26, 5],
[28, 8, 23, 12, 28, 8, 23, 12, 4, 25, 21, -1, 24, 26, 25, 8, 20, 11, 21, 5, -1, 24, 26, 18, 8, 16, -1, 9, 12, 24, 26, 25, 21, -1, 23, 16, 24, 26, 20, 3, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 21, 23, 26, 11, 21, -1, 19, 12, 17, 8, -1, 18, 16, 22, 26, -1, 24, 26, 23, 26, -1, 25, 21, 18, 16, 5],
[28, 8, 20, 3, -1, 25, 24, 26, 3, -1, 24, 26, 23, 16, 3, -1, 13, 21, 5, -1, 28, 8, 23, 26, 11, 21, -1, 18, 21, 20, 21, -1, 9, 16, 25, 21, 4, 20, 16, -1, 28, 21, 18, 26, 3, -1, 20, 12, 19, 26, -1, 19, 21, 25, 24, 26, -1, 19, 8, 12, 5],
[18, 21, 25, 21, -1, 21, 18, 12, 24, 26, 25, 21, 23, 8, -1, 28, 12, 16, 18, 26, 3, -1, 24, 26, 25, 21, 23, 16, 20, 14, 26, -1, 9, 8, 16, -1, 24, 26, 25, 21, 23, 16, 20, 14, 26, 3, -1, 9, 12, 23, 26, -1, 9, 8, 16, -1, 9, 12, 23, 26, 3, -1, 9, 26, 23, 12, 24, 26, -1, 9, 8, 16, -1, 9, 26, 23, 12, 24, 26, 5],
[24, 21, 13, 26, 25, 21, 4, 20, 16, -1, 16, 19, 8, 5, -1, 19, 12, 11, 21, -1, 23, 16, 11, 21, 3, -1, 23, 8, 23, 8, 9, 8, 16, -1, 20, 21, -1, 13, 8, 24, 26, 25, 21, -1, 23, 8, 16, 25, 21, -1, 18, 29, 8, 23, 16, -1, 24, 8, 24, 12, 29, 21, 5],
[23, 16, 24, 26, 20, 5, -1, 24, 21, 23, 12, -1, 19, 21, 20, 16, 20, 14, 26, -1, 24, 21, 20, 14, 26, -1, 23, 16, 19, 12, 19, 9, 8, 5, -1, 24, 21, 23, 12, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 23, 16, 19, 12, 19, 9, 8, 3, -1, 19, 8, 16, -1, 23, 8, 9, 26, 5],
[24, 21, 24, 15, 16, 25, 12, -1, 28, 8, 20, -1, 15, 21, 23, 26, 11, 21, -1, 9, 26, 23, 12, 24, 26, -1, 20, 21, -1, 8, 16, 11, 8, 3, -1, 26, 12, -1, 20, 21, -1, 25, 12, 23, 16, 9, 26, 23, 26, -1, 8, 16, 3, -1, 15, 21, 25, 21, 20, 11, 21, -1, 18, 26, 23, 21, 30, 26, -1, 29, 21, 5],
[16, 19, 8, -1, 15, 21, 20, 5, -1, 11, 16, 22, 26, -1, 25, 8, 16, 11, 21, 3, -1, 19, 12, 11, 21, -1, 8, 20, 24, 8, -1, 24, 8, 24, 12, 29, 21, 3, -1, 28, 12, 9, 26, -1, 25, 26, -1, 23, 16, 11, 21, 5],
[24, 21, 20, 14, 26, 3, -1, 15, 21, 9, 21, -1, 15, 21, 23, 26, 5, -1, 28, 8, 20, -1, 19, 21, 8, -1, 14, 8, 18, 18, 16, 3, -1, 24, 21, 24, 15, 16, 25, 12, -1, 24, 26, 18, 8, 16, -1, 24, 26, 23, 16, 22, 26, 5],
[11, 12, 19, 21, -1, 15, 16, 23, 26, -1, 20, 21, -1, 15, 8, 23, 26, 18, 8, -1, 19, 26, 18, 21, 3, -1, 18, 21, 23, 26, 11, 21, -1, 23, 8, 16, 25, 21, 3, -1, 24, 26, 23, 21, -1, 20, 8, 16, 13, 26, -1, 20, 21, -1, 29, 21, 4, 20, 16, -1, 11, 8, 18, 26, -1, 25, 12, 8, 5],
[19, 8, 16, -1, 23, 8, 9, 26, 5, -1, 24, 26, 18, 8, 16, -1, 13, 21, 23, 26, -1, 24, 15, 16, 25, 12, 20, 8, 16, 5, -1, 20, 8, 20, 16, 18, 8, -1, 14, 8, -1, 24, 26, 23, 21, -1, 24, 8, 23, 12, 25, 12, -1, 16, 23, 26, 5],
[24, 21, 23, 12, -1, 24, 8, 16, 23, 12, 20, 25, 21, -1, 19, 8, 26, 20, 25, 12, 20, -1, 24, 26, 25, 21, 23, 8, 16, 18, 26, 5, -1, 28, 8, 23, 12, 28, 8, 23, 12, -1, 16, 18, 26, 4, 9, 12, 18, 16, 3, -1, 11, 8, 18, 26, -1, 14, 8, -1, 20, 8, 20, 16, -1, 24, 12, 20, 11, 21, -1, 19, 16, 4, 20, 16, 5],
[24, 21, 23, 12, 18, 8, 23, 8, -1, 19, 29, 26, 17, 16, 18, 18, 26, -1, 24, 26, 25, 21, 22, 22, 26, 5, -1, 24, 21, 24, 15, 16, 25, 12, -1, 21, 23, 26, 11, 21, -1, 22, 8, 23, 8, 24, 26, 3, -1, 23, 8, 16, 25, 21, -1, 20, 21, -1, 20, 8, 18, 8, 4, 20, 16, -1, 13, 21, 23, 26, 11, 21, -1, 17, 16, 9, 26, 20, 5],
]
}
ถ้า ภาษา == 1 {
คืน [
[15, 20, 13, 28, 32, 17, 30, -1, 32, 20, 30, 17, 17, 6, -1, 32, 20, 17, -1, 30, 17, 17, 16, -1, 35, 13, 31, -1, 18, 27, 33, 26, 16, 4, -1, 32, 20, 17, -1, 20, 27, 30, 26, -1, 35, 13, 31, -1, 30, 13, 21, 31, 17, 16, -1, 18, 30, 27, 25, -1, 32, 20, 17, -1, 16, 30, 27, 35, 26, 17, 16, -1, 14, 17, 24, 24, 6],
[13, 26, 16, -1, 21, 26, -1, 32, 20, 17, -1, 20, 21, 19, 20, -1, 15, 27, 33, 30, 32, -1, 27, 18, -1, 32, 20, 17, -1, 27, 24, 16, -1, 28, 13, 24, 13, 15, 17, 4, -1, 32, 20, 17, -1, 31, 27, 26, 19, -1, 14, 17, 19, 13, 26, -1, 32, 27, -1, 30, 17, 25, 17, 25, 14, 17, 30, -1, 21, 32, 31, 17, 24, 18, 6],
[31, 32, 13, 26, 16, -1, 35, 21, 32, 20, -1, 25, 17, 6, -1, 32, 20, 17, -1, 31, 23, 37, -1, 24, 21, 31, 32, 17, 26, 31, -1, 14, 17, 31, 32, -1, 35, 20, 17, 26, -1, 35, 17, -1, 23, 17, 17, 28, -1, 32, 20, 17, -1, 27, 24, 16, -1, 25, 17, 13, 31, 33, 30, 17, 6],
[27, 26, 17, 4, -1, 32, 35, 27, 4, -1, 32, 20, 30, 17, 17, 4, -1, 18, 27, 33, 30, 6, -1, 32, 20, 17, -1, 35, 27, 30, 24, 16, -1, 35, 13, 24, 23, 17, 16, -1, 32, 27, -1, 32, 20, 21, 31, -1, 14, 17, 13, 32, -1, 14, 17, 18, 27, 30, 17, -1, 21, 32, -1, 20, 13, 16, -1, 13, -1, 26, 13, 25, 17, 6],
[32, 20, 17, -1, 15, 27, 33, 30, 32, -1, 27, 30, 15, 20, 17, 31, 32, 30, 13, -1, 35, 27, 23, 17, 4, -1, 31, 32, 30, 21, 26, 19, -1, 14, 37, -1, 31, 32, 30, 21, 26, 19, 4, -1, 14, 17, 24, 24, -1, 14, 37, -1, 14, 17, 24, 24, 4, -1, 14, 30, 17, 13, 32, 20, -1, 14, 37, -1, 14, 30, 17, 13, 32, 20, 6],
[31, 27, 18, 32, 24, 37, -1, 26, 27, 35, 6, -1, 24, 17, 32, -1, 32, 20, 17, -1, 25, 17, 13, 16, 27, 35, -1, 30, 17, 17, 16, -1, 15, 13, 30, 30, 37, -1, 32, 20, 17, -1, 18, 21, 30, 31, 32, -1, 24, 21, 19, 20, 32, -1, 27, 18, -1, 32, 20, 17, -1, 24, 33, 24, 24, 13, 14, 37, 6],
[24, 21, 31, 32, 17, 26, 6, -1, 21, 32, -1, 30, 17, 25, 17, 25, 14, 17, 30, 31, -1, 32, 20, 17, -1, 25, 27, 30, 26, 21, 26, 19, -1, 31, 27, 26, 19, 6, -1, 21, 32, -1, 30, 17, 25, 17, 25, 14, 17, 30, 31, -1, 33, 31, 4, -1, 25, 37, -1, 24, 27, 34, 17, 6],
[13, 26, 16, -1, 18, 27, 30, -1, 27, 26, 17, -1, 20, 17, 24, 16, -1, 14, 30, 17, 13, 32, 20, 4, -1, 32, 20, 17, -1, 32, 17, 30, 30, 21, 14, 24, 17, -1, 17, 37, 17, -1, 13, 14, 27, 34, 17, -1, 31, 17, 17, 25, 17, 16, -1, 13, 24, 25, 27, 31, 32, -1, 32, 27, -1, 15, 24, 27, 31, 17, 6],
[26, 27, 35, -1, 32, 20, 17, -1, 20, 27, 30, 26, 6, -1, 24, 17, 32, -1, 32, 20, 17, -1, 16, 17, 17, 28, -1, 32, 21, 16, 17, -1, 13, 26, 31, 35, 17, 30, -1, 32, 20, 17, -1, 25, 17, 13, 16, 27, 35, 4, -1, 35, 13, 34, 17, -1, 32, 27, -1, 30, 17, 17, 16, 6],
[32, 20, 17, -1, 31, 27, 26, 19, -1, 21, 31, -1, 26, 17, 13, 30, 24, 37, -1, 35, 20, 27, 24, 17, 6, -1, 27, 26, 17, -1, 25, 27, 30, 17, -1, 21, 26, 31, 32, 30, 33, 25, 17, 26, 32, -1, 13, 26, 16, -1, 32, 20, 17, -1, 31, 23, 37, -1, 35, 21, 24, 24, -1, 31, 24, 17, 17, 28, 6],
[14, 33, 32, -1, 18, 13, 30, -1, 14, 17, 37, 27, 26, 16, -1, 32, 20, 17, -1, 20, 21, 24, 24, 31, 4, -1, 13, -1, 15, 27, 24, 16, -1, 24, 21, 19, 20, 32, -1, 32, 27, 30, 17, -1, 32, 20, 17, -1, 16, 13, 30, 23, -1, 24, 21, 23, 17, -1, 13, -1, 31, 24, 27, 35, -1, 23, 26, 21, 18, 17, 6],
[25, 37, -1, 24, 27, 34, 17, 6, -1, 32, 20, 17, -1, 31, 23, 37, -1, 21, 31, -1, 26, 27, 32, -1, 18, 13, 24, 24, 21, 26, 19, 6, -1, 31, 27, 25, 17, 32, 20, 21, 26, 19, -1, 21, 31, -1, 14, 17, 21, 26, 19, -1, 32, 20, 30, 27, 35, 26, 6],
[21, 32, -1, 31, 32, 30, 33, 15, 23, -1, 32, 20, 17, -1, 31, 21, 24, 17, 26, 32, -1, 25, 27, 33, 26, 32, 13, 21, 26, 6, -1, 35, 17, -1, 25, 33, 31, 32, -1, 19, 27, -1, 13, 26, 16, -1, 31, 17, 17, -1, 35, 20, 13, 32, -1, 32, 20, 17, -1, 16, 13, 30, 23, -1, 20, 13, 31, -1, 31, 17, 26, 32, 6],
[32, 20, 17, 26, -1, 32, 20, 17, -1, 25, 33, 31, 21, 15, -1, 31, 32, 27, 28, 28, 17, 16, 6, -1, 13, 26, 16, -1, 32, 20, 17, -1, 27, 24, 16, -1, 28, 13, 24, 13, 15, 17, -1, 18, 27, 24, 16, 17, 16, -1, 21, 32, 31, 17, 24, 18, -1, 21, 26, 32, 27, -1, 32, 20, 17, -1, 24, 21, 19, 20, 32, 6],
]
}
ถ้า ภาษา == 2 {
คืน [
[62, 51, 51, 139, 113, 133, 84, -1, 65, 139, 149, 65, 101, 48, 6, 76, 62, 150, 106, 107, -1, 150, 42, 93, 48, 6, 88, 6, 10, 145, 57, 21, 133, 6, 93, 129, 19, 130, 20, 51, 139, 21, 84, 61, 134],
[150, 101, 129, 152, 57, 55, 123, 20, 76, 93, 129, 151, 93, 20, 115, 20, 10, 123, 20, 65, 93, 133, 113, 133, 51, 149, 8, 133, -1, 62, 51, 149, 76, 101, 20, 149, 93, 136, 84, 21, 38, 21, 134, 42, 130, 107, 84, 130, 57, 149, 123, 20, 153, 41],
[88, 146, 57, 149, 13, 138, 88, 20, 12, 133, 20, 26, 130, 57, 149, 47, 135, 38, -1, 55, 123, 20, 81, 133, 21, 129, 79, 130, 20, 153, 41, 38, 138, 51, 139, 114, 38, 149, 84, 147, 123, 149, 93, 133, 93, 130, 6, 112, 133, 21, 130, 20, 119, 107, 129, 149, 8, 133, 153, 109],
[119, 57, 144, 20, -1, 113, 123, 20, -1, 113, 133, 84, -1, 113, 139, -1, 151, 101, 6, 149, 38, 135, 57, 42, 133, 84, 21, 130, 20, 119, 107, 129, 57, 140, 84, 133, 8, 123, 57, 51, 139, 84, 130, 57, 21, 129, 84, 138, 27, 147, 123, 149, 113, 138, 88, 123, 138, 6],
[107, 20, 123, 123, 93, 156, 149, 13, 113, 42, 93, 133, 150, 120, 20, 93, 133, 27, 113, 134, 57, 130, 6, 42, 147, 57, 10, 145, 57, -1, 51, 138, 101, 129, 113, 133, 88, -1, 51, 138, 101, 129, 93, 129, 19, 130, 20, -1, 51, 138, 101, 129, 101, 84, 119, 133, 88, 152, 21],
[149, 62, 133, 154, -1, 119, 60, 123, 88, 57, 129, -1, 152, 121, 65, 139, 149, 65, 101, 150, 120, 20, 53, 20, 119, 34, 133, 57, 134, 150, 113, 20, 150, 93, 6, 10, 123, 20, 149, 76, 101, 20, 6, 105, 123, 84, 84, 133],
[79, 130, 20, 113, 135, -1, 84, 130, 57, 21, 38, 21, 134, 149, 76, 101, 20, 88, 133, 84, 149, 29, 133, 153, 41, -1, 84, 130, 57, 21, 38, 21, 134, 149, 93, 133, 153, 41, -1, 51, 139, 93, 130, 6],
[150, 101, 129, 152, 57, 28, 107, 20, 51, 139, 6, 101, 132, 57, 101, 84, 119, 133, 88, 152, 21, 153, 109, 119, 57, 144, 20, 13, 93, 132, 20, -1, 38, 107, 20, 42, 133, 123, 130, 57, 60, 133, 113, 129, 76, 93, 143, 20, 6, 101, 130, 107, 149, 62, 148, 123, 20, 62, 57, 40, 93, 133, 107, 6, 130, 62, 21, 129, 65, 135, 38, 101, 20],
[13, 93, 133, 107, 57, 140, 150, 42, 93, 64, 133, 20, -1, 152, 121, 6, 93, 129, 150, 113, 61, 134, 101, 143, 6, 42, 123, 62, 53, 20, 119, 34, 133, -1, 13, 101, 147, 57, 42, 123, 62, 65, 139, 149, 65, 101],
[62, 51, 149, 76, 101, 20, 149, 6, 146, 123, 62, 113, 84, 63, 93, 37, 156, 150, 106, 107, -1, 123, 138, 6, 149, 13, 93, 147, 123, 20, 38, 57, 42, 93, 138, 149, 38, 138, 88, 107, 55, 123, 20, 81, 133, 6, 155, 21, 129, 119, 101, 130, 62, 152, 119, 101],
[150, 45, 153, 6, 101, 123, 123, 6, 153, 65, 78, 57, 149, 57, 135, 57, 149, 10, 133, -1, 150, 113, 20, 149, 88, 155, 57, 149, 88, 138, 88, 62, 72, 133, 13, 107, 133, 84, 84, 146, 38, 38, 131, 20, 84, 138, 38, 51, 139, 149, 27, 147, 123, 20, 29, 133],
[51, 139, 93, 130, 6, -1, 55, 123, 20, 81, 133, 153, 86, 153, 41, 6, 134, 101, 130, 20, 98, 107, 20, 119, 105, 57, 119, 93, 123, 6, -1, 84, 138, 62, 133, 20, 113, 136, 20, 6, 134, 101, 130, 20, 48, 6, 151, 88, 57, 101, 20, 84, 133, 45, 133, 20, 119, 133, 6],
[84, 130, 57, 77, 20, 27, 57, 83, 149, 10, 133, 123, 130, 57, 149, 20, 138, 88, 62, 20, 130, 57, -1, 149, 93, 133, 46, 123, 20, 153, 65, 40, 108, 133, 13, 107, 133, 84, 84, 146, 38, 117, 20, 123, 129, 153, 93, 84, 133],
[150, 106, 107, 38, 57, 42, 93, 138, 6, 155, 119, 89, 38, 101, 20, -1, 150, 101, 129, 65, 93, 133, 113, 133, 51, 149, 8, 133, 6, 155, 76, 130, 62, 42, 130, 107, 84, 130, 57, 149, 123, 20, 149, 12, 133, 116, 150, 113, 20, 113, 108, 133, 20],
]
}
ถ้า ภาษา == 3 {
คืน [
[9, 402, 6, -1, 20, 127, 203, -1, 444, 333, 43, 4, -1, 280, 500, 206, 115, -1, 240, 349, -1, 400, 66, -1, 418, 349, 292, -1, 29, 412, -1, 361, 192, 413, 120],
[60, 206, 43, -1, 358, -1, 57, 406, 385, -1, 107, 382, -1, 57, 410, 349, 292, 4, -1, 105, 179, 115, -1, 313, 313, 197, 203, -1, 65, 341, 502, 65, -1, 317, 397, 509, 120],
[86, 362, -1, 505, 75, -1, 292, 174, 6, -1, 502, 116, 382, -1, 369, 206, 17, -1, 358, -1, 246, 396, 203, -1, 427, 476, -1, 164, -1, 17, 402, -1, 399, -1, 152, 115, 120],
[502, 86, 4, -1, 145, 4, -1, 300, 4, -1, 102, 6, -1, 298, 288, 382, -1, 386, 204, 383, -1, 24, 65, 134, -1, 406, 349, -1, 386, -1, 246, 396, 349, -1, 217, 460, -1, 30, 348, 120],
[57, 410, -1, 359, 466, 313, 485, 174, 17, -1, 73, 340, 90, 120, 4, -1, 515, -1, 502, 86, 502, 86, 4, -1, 418, -1, 502, 86, 502, 86, 4, -1, 309, 38, -1, 502, 86, 502, 86, 326],
[386, 411, -1, 267, 149, 188, 33, 6, -1, 453, 375, 385, -1, 20, 127, 17, -1, 396, 402, 17, 385, -1, 448, -1, 276, 383, -1, 319, 340, -1, 86, 201, 33, -1, 502, 174],
[153, 340, 261, 174, 6, -1, 60, 32, 382, -1, 327, 463, 385, -1, 105, 179, 203, -1, 65, 341, 503, 120, 6, -1, 60, 32, 382, -1, 369, 206, 203, -1, 65, 341, 503, 120, 4, -1, 93, -1, 283, 178],
[60, 206, 43, -1, 309, 383, -1, 442, 382, -1, 503, 308, 19, 4, -1, 378, 385, -1, 83, 437, 503, -1, 111, 382, -1, 28, 385, -1, 21, 65, 115, -1, 155, 509, 120],
[386, 411, -1, 280, 500, 206, 120, 6, -1, 69, 382, -1, 414, 307, 17, -1, 453, 375, 349, -1, 125, 502, 33, -1, 502, 174, 4, -1, 489, 134, 17, -1, 20, 127, 349, 33],
[105, 179, 115, -1, 28, 385, -1, 363, 297, 140, 348, 120, 6, -1, 328, 65, -1, 502, 86, 213, -1, 128, -1, 393, 381, 226, -1, 502, 116, 382, -1, 400, 153, -1, 32, 386, 120],
[502, 427, 213, -1, 342, 129, -1, 404, -1, 98, 218, 4, -1, 439, 17, 370, -1, 276, 386, -1, 114, 207, -1, 465, 446, 187, -1, 340, 146, 383, -1, 438, 348, 120],
[93, -1, 283, 178, 386, 351, 6, -1, 502, 116, 386, -1, 167, 340, 427, 115, -1, 32, 386, -1, 327, 118, 120, 6, -1, 236, 342, 17, 17, -1, 130, 412, 427, 43, -1, 393, 115, -1, 32, 386, 120],
[60, 32, 382, -1, 43, 367, 503, -1, 285, 383, -1, 23, 477, 509, 120, 6, -1, 369, 206, 115, -1, 17, 292, -1, 340, 146, 386, -1, 236, 347, 383, -1, 261, 95, 115, 427, -1, 265, 336, -1, 503, 120],
[60, 184, 396, -1, 384, 328, 386, -1, 222, 455, 348, 120, 6, -1, 60, 206, 43, -1, 358, -1, 57, 406, 382, -1, 313, 313, 197, -1, 276, -1, 303, 381, 197, -1, 409, 514, -1, 153, 340, 22, 120],
]
}
ถ้า ภาษา == 4 {
คืน [
[476, 127, 472, 7, 518, 474, 50, 527, 39, 16, 70, 6, 529, 474, 50, 402, 76, 36, 582, 16, 69, 290, 18, 128, 23, 69, 72, 35],
[33, 27, 41, 195, 12, 261, 399, 49, 618, 18, 261, 289, 42, 6, 393, 50, 508, 69, 75, 312, 12, 176, 27, 248, 62, 35],
[462, 43, 172, 46, 471, 41, 7, 468, 50, 6, 322, 8, 17, 195, 49, 334, 249, 75, 254, 71, 366, 46, 372, 63, 68, 20, 501, 75, 162, 22, 71],
[12, 37, 6, 46, 6, 26, 76, 6, 27, 7, 132, 441, 50, 59, 36, 199, 75, 337, 35, 47, 608, 16, 69, 6, 24, 49, 334, 249, 42, 396, 76, 42, 12, 59, 27, 35],
[261, 289, 386, 217, 17, 448, 528, 62, 35, 6, 291, 50, 123, 378, 30, 39, 6, 582, 50, 123, 39, 30, 39, 6, 315, 50, 123, 39, 30, 39],
[33, 38, 43, 36, 7, 516, 191, 49, 518, 474, 46, 6, 249, 254, 209, 49, 372, 181, 49, 167, 75, 568, 51, 31, 68, 13],
[503, 12, 41, 20, 36, 26, 12, 7, 33, 72, 50, 375, 49, 393, 75, 528, 14, 41, 12, 59, 29, 7, 462, 35, 37, 49, 24, 43, 75, 528, 14, 41, 12, 71, 49, 42, 29, 6, 11, 45, 35],
[33, 27, 41, 6, 123, 39, 49, 394, 62, 35, 315, 49, 587, 6, 610, 128, 49, 314, 73, 27, 12, 448, 50, 585, 28, 16, 22, 35, 68, 13, 46, 527, 14, 35],
[26, 11, 529, 474, 36, 7, 411, 18, 418, 46, 516, 191, 55, 43, 310, 14, 26, 31, 68, 13, 6, 405, 17, 518, 474, 46, 310, 14, 71, 68, 13, 46],
[393, 50, 57, 43, 76, 44, 256, 321, 27, 41, 12, 59, 29, 7, 11, 43, 123, 39, 49, 386, 213, 42, 6, 468, 50, 450, 70, 46, 39, 20, 42, 27, 67, 13],
[36, 17, 133, 49, 50, 71, 16, 299, 359, 42, 6, 174, 35, 12, 167, 17, 6, 494, 65, 16, 45, 177, 49, 68, 13, 46, 588, 75, 179, 70, 524, 12, 35],
[11, 45, 35, 7, 468, 17, 517, 37, 41, 12, 71, 49, 42, 50, 11, 70, 59, 31, 76, 7, 151, 16, 17, 329, 23, 69, 72, 41, 12, 71, 49, 42, 29],
[33, 72, 50, 603, 264, 49, 276, 46, 420, 469, 27, 35, 7, 322, 8, 50, 521, 38, 41, 6, 588, 17, 151, 75, 559, 70, 554, 76, 36, 49, 16, 527, 45, 22, 72, 51, 45, 69, 45, 12],
[33, 27, 41, 605, 386, 50, 394, 59, 38, 35, 7, 195, 12, 261, 399, 50, 508, 69, 75, 167, 49, 134, 55, 43, 330, 70, 443, 76, 42, 12, 38, 35],
]
}
ถ้า ภาษา == 5 {
คืน [
[617, 14, 612, 8, 686, 615, 294, 703, 274, 205, 850, 159, 710, 36, 294, 52, 499, 500, 573, 783, 25, 374, 401, 664, 732],
[216, 155, 662, 265, 487, 573, 837, 223, 32, 15, 850, 773, 833, 480, 315, 250, 780, 423, 715, 732, 38, 677, 293],
[18, 367, 303, 671, 664, 610, 8, 323, 367, 57, 81, 395, 155, 662, 573, 684, 389, 432, 850, 237, 607, 171, 333, 447, 580, 115],
[11, 850, 40, 850, 14, 850, 204, 8, 20, 567, 216, 392, 449, 162, 252, 32, 126, 850, 80, 294, 738, 582, 755, 24, 684, 389, 126, 701],
[265, 313, 34, 207, 688, 777, 38, 850, 11, 468, 319, 403, 11, 468, 319, 850, 11, 154, 783, 403, 11, 154, 783, 850, 11, 349, 403, 11, 349],
[556, 216, 746, 11, 537, 8, 713, 691, 145, 686, 615, 379, 747, 732, 408, 624, 443, 573, 617, 11, 652, 93],
[171, 191, 8, 255, 715, 333, 773, 833, 438, 443, 8, 255, 715, 333, 367, 57, 850, 367, 573, 547, 48],
[216, 773, 283, 72, 573, 11, 349, 32, 797, 850, 241, 821, 773, 157, 158, 344, 573, 581, 584, 68, 33, 110, 33, 706, 795, 15, 38],
[556, 216, 743, 123, 159, 710, 38, 8, 713, 514, 511, 573, 530, 496, 205, 308, 691, 145, 850, 713, 506, 510, 205, 308, 686, 615],
[755, 833, 480, 110, 33, 259, 421, 38, 8, 104, 449, 11, 58, 34, 202, 850, 237, 607, 80, 65, 94, 585],
[69, 216, 757, 286, 32, 232, 850, 11, 769, 272, 93, 248, 651, 364, 573, 121, 113, 682, 410, 704, 38, 842, 441],
[367, 573, 547, 48, 8, 237, 607, 303, 816, 216, 220, 695, 8, 436, 449, 49, 31, 21, 705, 703, 381, 404, 38, 752, 457],
[255, 112, 25, 38, 773, 311, 270, 815, 32, 286, 8, 367, 57, 337, 822, 126, 146, 579, 579, 842, 441, 760, 457, 38, 49, 31],
[805, 163, 819, 34, 88, 481, 38, 8, 155, 662, 573, 265, 487, 275, 677, 293, 382, 153, 850, 806, 94, 38, 93, 25],
]
}
คืน []
}
ฟังก์ชัน ฉากบทสาม_บทพูด(ภาษา) {
ถ้า ภาษา == 0 {
คืน [
"chaputa suri. rido faundo, hon doraundo beru kara reizu.",
"soshite orudo parasu no hai koto de, songu jibun rimemba biginu.",
"wareware-to sutando. sukai besuto risun, wareware orudo meja kipu suru toki.",
"wan, tsu, suri, fo. warudo kono bito-ni woku, nemu motsu mae.",
"koto okesutora weiku, sutoringu bai sutoringu, beru bai beru, buresu bai buresu.",
"sofuto-ni ima. medo rido, rarabai no fasuto raito kyari saseyo.",
"risun. sore moningu songu rimemba. sore wareware rimemba, mai rabu.",
"soshite wan horudo buresu no aida, ue no teriburu ai, hotondo kurozu yo.",
"ima hon. dipu taido, medo ansa saseyo, webu tu rido.",
"songu, hobo horu. wan moa gakki, soshite sukai suripu.",
"demo hiru no haruka muko, korudo raito, suro naifu no yo-ni daku tea.",
"mai rabu. sukai foru shitenai. nanika ga suro sarete iru.",
"sore sairento maunten sutoraiku. wareware iku-beki, daku ga nani sendo mi-ni.",
"sorekara myujikku sutoppu. soshite orudo parasu, raito no naka-ni forudo jibun."
]
}
ถ้า ภาษา == 2 {
คืน [
"บทที่สาม ปี่เปลถูกพบแล้ว แตรถูกยกขึ้นจากระฆังที่จมน้ำ",
"และในท้องพระโรงสูงของปราสาทเก่า บทเพลงเริ่มจดจำตัวมันเองได้",
"ยืนเคียงข้างฉันเถิด ท้องฟ้าจะฟังได้ดีที่สุดเมื่อเรารักษาจังหวะเก่าไว้",
"หนึ่ง สอง สาม สี่ โลกเดินตามจังหวะนี้มาก่อนที่มันจะมีชื่อเสียอีก",
"วงออร์เคสตราแห่งราชสำนักตื่นขึ้น ทีละสาย ทีละระฆัง ทีละลมหายใจ",
"เบาๆ หน่อยนะ ให้ปี่เปลแห่งทุ่งหญ้านำแสงแรกของเพลงกล่อมมา",
"ฟังสิ มันจดจำเพลงยามเช้าได้ มันจดจำเราได้ ที่รัก",
"และในช่วงที่กลั้นลมหายใจไว้หนึ่งครั้ง ดวงตาอันน่าสะพรึงกลัวเบื้องบนดูราวกับจะปิดลง",
"คราวนี้แตรบ้าง ให้กระแสน้ำลึกตอบทุ่งหญ้า คลื่นตอบปี่เปล",
"บทเพลงเกือบสมบูรณ์แล้ว อีกเครื่องดนตรีเดียวท้องฟ้าก็จะหลับใหล",
"แต่ไกลออกไปพ้นเนินเขา แสงเย็นเยียบผ่าความมืดดั่งมีดที่เชื่องช้า",
"ที่รัก ท้องฟ้าไม่ได้กำลังร่วงหล่นหรอก มีบางสิ่งกำลังถูกโยนลงมาต่างหาก",
"มันพุ่งชนภูเขาอันเงียบงัน เราต้องไปดูว่าความมืดส่งอะไรมา",
"แล้วดนตรีก็หยุดลง และปราสาทเก่าก็พับตัวมันเองเข้าสู่แสงสว่าง"
]
}
ถ้า ภาษา == 3 {
คืน [
"3장. 갈대를 찾았고, 뿔피리는 물에 잠긴 종에서 건져 올려졌다",
"그리고 옛 궁전의 높은 궁정에서, 노래는 스스로를 기억하기 시작했다",
"나와 함께 서라. 하늘은 우리가 옛 박자를 지킬 때 가장 잘 듣는다",
"하나, 둘, 셋, 넷. 세상은 이름을 갖기도 전에 이 박자에 맞춰 걸었다",
"궁정 오케스트라가 깨어났다, 현 하나하나, 종 하나하나, 숨결 하나하나씩",
"이제 부드럽게. 초원의 갈대가 자장가의 첫 빛을 실어 나르게 하라",
"들어보라. 그것은 아침의 노래를 기억한다. 그것은 우리를 기억한다, 내 사랑",
"그리고 숨을 참은 한순간, 위의 끔찍한 눈은 거의 감기는 듯했다",
"이제 뿔피리다. 깊은 조수가 초원에 답하게 하라, 파도가 갈대에게",
"노래는 거의 완성되었다. 악기 하나만 더 있으면 하늘은 잠들 것이다",
"하지만 언덕 저 너머, 차가운 빛이 느린 칼처럼 어둠을 찢었다",
"내 사랑이여. 하늘이 떨어지는 것이 아니다. 무언가가 던져지고 있는 것이다",
"그것은 고요한 산을 강타했다. 우리는 가서 어둠이 무엇을 보냈는지 봐야 한다",
"그러자 음악이 멈추었다. 그리고 옛 궁전은 스스로 빛 속으로 접혀 들어갔다"
]
}
ถ้า ภาษา == 4 {
คืน [
"第三章。葦笛は見つかり、角笛は沈んだ鐘から引き上げられた",
"そして古い宮殿の高き宮廷で、歌は自らを思い出し始めた",
"私と共に立て。空は、我々が古の拍子を守る時に最もよく耳を傾ける",
"いち、に、さん、し。世界はまだ名を持たぬ頃から、この拍子で歩んでいました",
"宮廷楽団が目覚めた、弦は一本ずつ、鐘は一つずつ、息は一つずつ",
"そっとだ。草原の葦笛に、子守唄の最初の光を運ばせよう",
"聞いてください。それは朝の歌を覚えています。私たちのことを覚えているのです、あなた",
"そして、一つの止めた息の間、頭上の恐ろしい目は閉じかけたように見えた",
"さあ角笛だ。深き潮に草原へと応えさせよう、波が葦笛に応えるように",
"歌はほとんど完成しています。あと一つの楽器で、空は眠りにつくでしょう",
"だが丘のはるか彼方で、冷たい光が、緩やかな刃のように闇を切り裂いた",
"あなた。空が落ちているのではありません。何かが投げられているのです",
"それは静寂の山に激突した。我々は行って、闇が何を送り込んだのか見なければならない",
"そして音楽は止まった。古い宮殿は自らを光の中へと折り畳んでいった"
]
}
ถ้า ภาษา == 5 {
คืน [
"第三章。芦笛已被寻回,号角也已从沉没的钟中打捞而起",
"在古老宫殿的高堂之上,那首歌开始重新记起了自己",
"与我并肩而立。当我们保持古老的节拍时,天空听得最真切",
"一,二,三,四。世界在拥有名字之前,便已踏着这个节拍前行",
"宫廷乐团苏醒了,一根弦接一根弦,一口钟接一口钟,一息接一息",
"现在轻一点。让草原芦笛承载起摇篮曲的第一缕光",
"听啊。它记得那首晨曲。它记得我们,我的爱人",
"在那屏住的一息之间,头顶那只可怕的眼睛似乎几乎要闭上了",
"现在轮到号角了。让深海的潮汐回应草原,让波浪回应芦笛",
"这首歌几乎完整了。再有一件乐器,天空便会入睡",
"但在远山之外,一道寒光如缓慢的利刃般撕裂了黑暗",
"我的爱人。天空并非在坠落。是有什么东西被投掷了过来",
"它击中了那座寂静之山。我们必须前去看看黑暗送来了什么",
"随后音乐停止了。古老的宫殿将自己折叠,隐入了光中"
]
}
คืน [
"chapter three. the reed was found, the horn was raised from the drowned bell.",
"and in the high court of the old palace, the song began to remember itself.",
"stand with me. the sky listens best when we keep the old measure.",
"one, two, three, four. the world walked to this beat before it had a name.",
"the court orchestra woke, string by string, bell by bell, breath by breath.",
"softly now. let the meadow reed carry the first light of the lullaby.",
"listen. it remembers the morning song. it remembers us, my love.",
"and for one held breath, the terrible eye above seemed almost to close.",
"now the horn. let the deep tide answer the meadow, wave to reed.",
"the song is nearly whole. one more instrument and the sky will sleep.",
"but far beyond the hills, a cold light tore the dark like a slow knife.",
"my love. the sky is not falling. something is being thrown.",
"it struck the silent mountain. we must go and see what the dark has sent.",
"then the music stopped. and the old palace folded itself into the light."
]
}
ฟังก์ชัน ฉากบทสาม_ผู้พูด() {
คืน [0, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 2, 1, 0]
}
# รหัสผู้พูดสำหรับพากย์เสียง (ต้องตรงกับ tools/voiceover/manifest.py ทุกตัวอักษร)
ฟังก์ชัน ฉากบทสาม_ผู้พูดรหัส() {
คืน ["narrator", "narrator", "king", "queen", "narrator", "king", "queen", "narrator", "king", "queen", "narrator", "queen", "king", "narrator"]
}
# ระยะเวลาเล่นต่อบรรทัด (วิ) ตามภาษาพากย์เสียงจริง — ภาษาที่ยังไม่มีเสียงพากย์ใช้จังหวะเดิม 3.55 วิ/บรรทัด
ฟังก์ชัน ฉากบทสาม_ระยะเวลา(lang) {
ถ้า lang == "ko" { คืน [5.46, 7.54, 5.94, 5.38, 7.70, 6.02, 10.98, 7.54, 8.82, 5.78, 5.46, 7.70, 9.46, 8.74] }
ถ้า lang == "ja" { คืน [6.10, 7.70, 9.46, 10.74, 7.62, 6.82, 9.22, 8.10, 8.66, 7.14, 9.62, 6.26, 9.22, 7.78] }
ถ้า lang == "zh" { คืน [6.66, 5.54, 6.98, 9.14, 8.42, 6.58, 7.30, 5.46, 7.22, 5.14, 5.62, 5.62, 5.38, 4.98] }
ถ้า lang == "daemon" { คืน [4.98, 4.82, 6.26, 6.02, 6.50, 6.26, 10.10, 6.34, 4.42, 5.06, 5.30, 5.62, 7.06, 7.78] }
ถ้า lang == "th" { คืน [4.78, 5.06, 5.32, 4.94, 5.26, 4.54, 4.24, 5.74, 4.46, 4.58, 4.72, 5.08, 4.60, 4.88] }
ถ้า lang == "en" { คืน [5.46, 4.90, 4.58, 7.70, 5.06, 4.58, 6.18, 4.98, 6.18, 5.22, 5.14, 5.86, 5.54, 5.06] }
คืน [3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55, 3.55]
}
ฟังก์ชัน ฉากบทสาม_สีวน(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)]
}
# ลาย 4/4 ของวาทยกร: ค่าแขนต่อบีต (ลง-เข้า-ออก-ขึ้น) + เด้ง ictus ต้นบีต
ฟังก์ชัน ฉากบทสาม_มือวาทยกร(beat) {
bind bi = ปัดลง(beat) - ปัดลง(ปัดลง(beat)/4.0)*4.0 # บีต 0..3 ในห้อง
bind bf = beat - ปัดลง(beat) # เฟสในบีต
bind แขนบีต = [0.62, 0.16, 0.38, 0.80] # เป้าปลายแต่ละบีต
bind เอียงบีต = [0.0, 0.0-0.13, 0.13, 0.02]
bind a0 = list_get(แขนบีต, bi)
bind bi1 = bi + 1; ถ้า bi1 > 3 { bind bi1 = 0 }
bind a1 = list_get(แขนบีต, bi1)
bind s = bf * bf * (3.0 - 2.0*bf)
bind แขน = a0 + (a1 - a0) * s
ถ้า bf < 0.18 { bind แขน = แขน + (0.18 - bf) * 0.9 } # เด้งสั้นตอนตกบีต
bind e0 = list_get(เอียงบีต, bi)
bind e1 = list_get(เอียงบีต, bi1)
คืน [แขน, e0 + (e1 - e0) * s]
}
# พารามิเตอร์ทั้งหมดส่งจาก main · p0..p4 = ชิ้นวัง (เฟรมร่วม — วาดซ้อน = ประกอบร่าง)
ฟังก์ชัน เล่นฉากบทสาม(t, บทสามเริ่ม, บทสามสถานะ, musicOn, ปริมาณBGM, ปริมาณSFX, เพลงฉาก, ยาวเพลงฉาก, เพลงแทรก, kCutMesh, qCutMesh, p0, p1, p2, p3, p4, liq, ภาษา, แสดงบทพูด, ภาษาบทพูด, ระยะเวลาไดนามิก) {
bind บทพูด = ฉากบทสาม_บทพูด(ภาษาแสดงผล(ภาษา))
bind บทพูดกลิฟ = ฉากบทสาม_บทพูดกลิฟ(ภาษาบทพูด)
bind ไฮไลท์c3i = ฉากบทสาม_บทพูดไฮไลท์(ภาษาบทพูด)
bind ผู้พูด = ฉากบทสาม_ผู้พูด()
bind ผู้พูดรหัส = ฉากบทสาม_ผู้พูดรหัส()
bind ระยะเวลา = ระยะเวลาไดนามิก
bind c3t = t - บทสามเริ่ม
bind C3N = ความยาว(บทพูด)
# ── ตารางเวลาสะสม: c3cum[i] = เวลาเริ่มบรรทัด i (แทนสูตร i*C3SEC ตายตัวเดิม) ──
bind c3cum = [0.0]
bind cci = 0
ขณะที่ cci < C3N {
bind c3cum = list_push(c3cum, list_get(c3cum, cci) + list_get(ระยะเวลา, cci))
bind cci = cci + 1
}
bind C3TOTAL = list_get(c3cum, C3N)
bind C3END = C3TOTAL + 2.6 # หางเฟด (ฮัม + ความมืด)
bind C3FADE = 0.0
ถ้า c3t > C3TOTAL - 1.2 { bind C3FADE = (c3t - (C3TOTAL - 1.2)) / 3.8 }
ถ้า C3FADE > 1.0 { bind C3FADE = 1.0 }
bind c3i = 0
bind c3scan = 1
ขณะที่ c3scan == 1 {
ถ้า c3i >= C3N - 1 { bind c3scan = 0 }
มิฉะนั้น { ถ้า c3t < list_get(c3cum, c3i + 1) { bind c3scan = 0 }
มิฉะนั้น { bind c3i = c3i + 1 } }
}
bind C3SEC = list_get(ระยะเวลา, c3i) # ระยะเวลาบรรทัดปัจจุบัน (ยังใช้เป็นค่าประมาณจังหวะทั่วไปด้านล่าง)
# ── ถอดสถานะ: บรรทัดที่เล่นแล้ว + โน้ตโซโล่ที่เล่นแล้ว ──
bind บรรทัดก่อน = 0.0 - 1.0
bind โซโล่แล้ว = 0.0
ถ้า บทสามสถานะ >= 0.0 {
bind บรรทัดก่อน = ปัดลง(บทสามสถานะ / 1000.0)
bind โซโล่แล้ว = บทสามสถานะ - บรรทัดก่อน*1000.0
}
# ── การแสดง Seraph: วงเล่นโน้ตมิดีจริง 10 วิ เริ่มบรรทัด 4 ("the court orchestra woke")
# (Seraph.mid → midiconv ตัด track 10 กลองอัตโนมัติ · จังหวะ/พิตช์ตามไฟล์จริง) ──
bind tPerf0 = list_get(c3cum, 4)
bind tPerf1 = tPerf0 + 10.0
# ── ดนตรี: Progress เป็นสกอร์หลัก · ช่วงการแสดง = สลับไป Seraph.wav แล้วกลับ Progress
# (สลับครั้งเดียวด้วยบล็อกต่อบรรทัด + มาร์กเกอร์ +900 ในตัวนับโซโล่) · บรรทัด 12 เงียบ ──
bind หลังตัด = 0.0; ถ้า c3i >= 12 { bind หลังตัด = 1.0 }
bind ในหน้าต่าง = 0.0
ถ้า c3t >= tPerf0 { ถ้า c3t < tPerf1 { bind ในหน้าต่าง = 1.0 } }
ถ้า musicOn == 1 { ถ้า หลังตัด < 0.5 {
ถ้า ในหน้าต่าง > 0.5 {
ระดับเพลง(ปริมาณBGM * 0.9) # Seraph.wav เต็มเสียง
}
มิฉะนั้น {
ถ้า ยาวเพลงฉาก > 1.0 {
ถ้า ตำแหน่งเพลง() >= ยาวเพลงฉาก - 0.5 { ค้นหาเพลง(0); เล่นเพลง(เพลงฉาก) }
}
ระดับเพลง(ปริมาณBGM * 0.85 * 0.33) # หรี่ BGM เหลือ 1/3 นอกช่วงแสดงดนตรี — เสียงพากย์ต้องเด่นกว่า
}
} }
# กลับ Progress หลังจบการแสดง (ครั้งเดียว — มาร์กเกอร์ +900 ในตัวนับ)
ถ้า c3t >= tPerf1 { ถ้า โซโล่แล้ว < 900.0 {
หยุดเพลง()
ถ้า musicOn == 1 { ถ้า หลังตัด < 0.5 {
เล่นเพลง(เพลงฉาก); ค้นหาเพลง(tPerf1); ระดับเพลง(ปริมาณBGM * 0.85 * 0.33)
} }
bind โซโล่แล้ว = โซโล่แล้ว + 900.0
} }
# ── ฮัม: โดรนลึกลับตลอดฉาก · หลังกระแทกดังขึ้น + ค้างผ่านเฟด ("fade out with a hum") ──
bind humV = 0.05 * ปริมาณSFX
ถ้า หลังตัด > 0.5 { bind humV = 0.16 * ปริมาณSFX * (1.0 - C3FADE*0.55) }
เสียงโทน(15, 0.0, 0.0, 0.0, 1.0, 46.0 + หลังตัด*6.0, humV, 0.0, 0.0)
เสียงโทน(14, 0.0, 0.0, 0.0, 1.0, 46.6 + หลังตัด*6.0, humV*0.75, 0.0, 0.0)
# พื้นหลังราตรีน้ำเงินลึก มืดลงตอนเฟด
bind ดำ = 1.0 - C3FADE
เบลอเฟรม(0.958) # หางแสงค้าง ~1.25 วิ (decay+max)
เติม(floor(9.0*ดำ), floor(11.0*ดำ), floor(20.0*ดำ))
# ── บีต 4/4 (~96 BPM) + เลนโน้ต Progress (สติง/แอ็กเซนต์เข้าคีย์สกอร์หลัก) ──
bind beat = c3t * 1.6
bind sdP = ข้อมูลเพลงดัชนี(13) # Progress: [n, ไกลฟ, ความถี่, X, Z]
bind มโหรีถี่ = list_get(sdP, 2)
bind มโหรีN = list_get(sdP, 0)
# ── ดาวหาง (บรรทัด 10-11) → กระแทกภูเขาเงียบ (บรรทัด 12) ──
bind t10 = list_get(c3cum, 10); bind t12 = list_get(c3cum, 12); bind t13 = list_get(c3cum, 13)
bind cometP = 0.0
ถ้า c3t > t10 { bind cometP = (c3t - t10) / (t12 - t10) }
ถ้า cometP > 1.0 { bind cometP = 1.0 }
bind cmx = 0.0-70.0 + 122.0*cometP
bind cmy = 0.0-55.0 + 49.0*cometP
bind cmz = 62.0 - 14.0*cometP
bind shk = 0.0
ถ้า c3t > t12 { bind shk = 1.3 - (c3t - t12); ถ้า shk < 0.0 { bind shk = 0.0 } }
# ── วาร์ปวัง (บรรทัด 13 → หาง): ชิ้นลอย หมุนคนละทิศ จางหาย ──
bind wp = 0.0
ถ้า c3t > t13 { bind wp = (c3t - t13) / (C3END - t13) }
ถ้า wp > 1.0 { bind wp = 1.0 }
bind wps = wp * wp * (3.0 - 2.0*wp)
# ── ตำแหน่งคู่วาทยกร: หันหน้าหาวง (+z) บนแท่นหน้าวัง · หลังกระแทกหันหาแสง ──
bind กายสูง = 6.4
bind kx = 0.0 - 2.6; bind kz = 0.0 - 1.0; bind ky = 0.0
bind qx = 2.6; bind qz = 0.0 - 1.0; bind qy = 0.0
bind kyaw = 0.0; bind qyaw = 0.0
ถ้า c3t < list_get(c3cum, 2) {
bind kyaw = 1.5708; bind qyaw = 0.0 - 1.5708 # เปิดฉาก: หันเข้าหากัน
}
ถ้า c3t > t12 { bind kyaw = 2.4; bind qyaw = 2.2 } # หันไปทางจุดกระแทก (ขวาไกล)
# ── แสง (สไตล์บท 1-2): คีย์อุ่นเวที + ฟิลเย็น + ไฟตัวละคร + แสงเหตุการณ์ ──
ล้างแสง()
ตั้งแสงรอบข้าง(0.28 * ดำ + 0.06)
เพิ่มแสง(0.0-12.0, 0.0-24.0, 0.0-6.0, 1.0, 0.88, 0.72, 1.25*ดำ, 105.0)
เพิ่มแสง(14.0, 0.0-15.0, 8.0, 0.42, 0.55, 1.0, 0.8*ดำ, 85.0)
เพิ่มแสง(kx, ky - 7.0, kz, 0.35, 0.55, 1.0, 1.05*ดำ, 38.0)
เพิ่มแสง(qx, qy - 7.0, qz, 1.0, 0.45, 0.65, 1.05*ดำ, 38.0)
bind pHue = c3t * 1.9
ถ้า cometP > 0.0 { ถ้า หลังตัด < 0.5 {
เพิ่มแสง(cmx, cmy, cmz, 0.65, 0.85, 1.0, 1.6*cometP, 130.0) # แสงเย็นดาวหาง
} }
ถ้า shk > 0.0 {
เพิ่มแสง(52.0, 0.0-8.0, 46.0, 1.0, 0.75, 0.42, 2.2*shk, 160.0) # แฟลชจุดกระแทก
}
# ── กล้อง 5 ช็อต: เครนเปิด → หน้าตรงวาทยกร → ออร์บิตวง → ตามดาวหาง → ถอยกว้าง ──
bind tA = list_get(c3cum, 2); bind tB = list_get(c3cum, 5); bind tC = list_get(c3cum, 10)
bind camX = 0.0; bind camY = 0.0 - 7.0; bind camZ = 0.0 - 15.0
bind lookX = 0.0; bind lookY = 0.0 - 4.6; bind lookZ = 0.0
ถ้า c3t < tA {
bind s1 = c3t / tA; bind e1 = s1 * s1 * (3.0 - 2.0*s1)
bind camX = 0.0 - 14.0 + 8.0*e1
bind camY = 0.0 - 13.5 + 5.5*e1 # เครนกดลงช้า
bind camZ = 0.0 - 20.0 + 4.0*e1
bind lookX = 0.0; bind lookY = 0.0 - 6.5; bind lookZ = 14.0
}
ถ้า c3t >= tA { ถ้า c3t < tB {
bind s2 = (c3t - tA) / (tB - tA)
bind camX = ไซน์(c3t*0.1)*1.6
bind camY = 0.0 - 5.4
bind camZ = 0.0 - 10.5 + s2*1.8 # ดันเข้าหาวาทยกรช้า ๆ
bind lookX = 0.0; bind lookY = 0.0 - 4.8; bind lookZ = 0.0
} }
ถ้า c3t >= tB { ถ้า c3t < tC {
bind s3 = (c3t - tB) / (tC - tB)
bind ag = 3.6 - s3 * 2.1 # ออร์บิตยาวช้ารอบวง
bind camX = โคไซน์(ag) * 15.5
bind camZ = 4.0 - ไซน์(ag) * 12.5
bind camY = 0.0 - 6.8 - ไซน์(s3*3.1416)*1.4
bind lookX = 0.0; bind lookY = 0.0 - 4.8; bind lookZ = 5.0
} }
ถ้า c3t >= tC { ถ้า c3t < t12 {
bind camX = 0.0 - 4.0; bind camY = 0.0 - 5.2; bind camZ = 0.0 - 12.0
bind lookX = cmx * 0.8; bind lookY = cmy * 0.85; bind lookZ = cmz * 0.8 # ตามดาวหาง
} }
ถ้า c3t >= t12 {
bind s5 = (c3t - t12) / (C3END - t12); ถ้า s5 > 1.0 { bind s5 = 1.0 }
bind camX = 0.0 - 6.0 - s5*6.0
bind camY = 0.0 - 6.5 - s5*3.0
bind camZ = 0.0 - 14.0 - s5*7.0 # ถอยกว้าง: กระแทกขวา วังวาร์ปกลาง
bind lookX = 10.0 - s5*6.0; bind lookY = 0.0 - 7.0; bind lookZ = 20.0
}
bind camX = camX + ไซน์(c3t*57.0)*0.5*shk # สั่นตอนกระแทก
bind camY = camY + โคไซน์(c3t*49.0)*0.4*shk
ตั้งกล้องมอง(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 { สีดินสอ(20, 17, 34) } มิฉะนั้น { สีดินสอ(14, 12, 26) }
วาดสามเหลี่ยม3มิติ(0.0, 0.2, 2.0, โคไซน์(fa0)*38.0, 0.2, 2.0+ไซน์(fa0)*38.0, โคไซน์(fa1)*38.0, 0.2, 2.0+ไซน์(fa1)*38.0)
bind fs = fs + 1
}
bind ps2 = 0
ขณะที่ ps2 < 10 {
bind pa0 = ps2 * 0.6283; bind pa1 = (ps2 + 1) * 0.6283
สีดินสอ(46, 38, 66)
วาดสามเหลี่ยม3มิติ(0.0, 0.0-0.4, 0.0-1.0, โคไซน์(pa0)*5.4, 0.0-0.4, 0.0-1.0+ไซน์(pa0)*5.4, โคไซน์(pa1)*5.4, 0.0-0.4, 0.0-1.0+ไซน์(pa1)*5.4)
bind ps2 = ps2 + 1
}
flush_3d()
# ── วังเก่า 5 ชิ้น (เฟรมร่วม): ปกติซ้อนประกอบ · ตอนวาร์ป ลอย/หมุน/จางคนละจังหวะ ──
bind pcx = 0.0; bind pcz = 34.0; bind psc = 22.0
bind pi2 = 0
ขณะที่ pi2 < 5 {
bind ph = p0
ถ้า pi2 == 1 { bind ph = p1 }; ถ้า pi2 == 2 { bind ph = p2 }
ถ้า pi2 == 3 { bind ph = p3 }; ถ้า pi2 == 4 { bind ph = p4 }
bind ทิศ = 1.0; ถ้า pi2 - ปัดลง(pi2/2.0)*2.0 > 0.5 { bind ทิศ = 0.0 - 1.0 }
bind ลอย = wps * (5.0 + pi2 * 2.1)
bind หมุน = 3.1416 + wps * ทิศ * (0.5 + pi2 * 0.37) * 2.2
bind จาง = 1.0 - wps
ถ้า จาง > 0.02 {
set_alpha(จาง)
mesh_draw(ph, pcx, 0.2 - ลอย, pcz, psc * (1.0 + wps*0.12), หมุน, ไซน์(c3t*0.35)*0.01, 0.0, 0.0, 0.0, 0.0)
set_alpha(1.0)
ถ้า wps > 0.02 { # ออร่าสีวนรุ้งต่อชิ้นตอนวาร์ป
bind wCol = ฉากบทสาม_สีวน(pHue + pi2 * 1.26)
โหมดผสม(1)
อนุภาคทรงกลม(pcx, 0.0-6.0 - pi2*2.2 - ลอย, pcz, 4.5 + pi2*0.7, 10, c3t*2.0+pi2, list_get(wCol,0), list_get(wCol,1), list_get(wCol,2))
flush_3d(); โหมดผสม(0)
}
}
bind pi2 = pi2 + 1
}
flush_3d()
ถ้า wps > 0.02 { ถ้า wps < 0.98 {
แอ่งแสง(pcx, 0.2, pcz, 17.0*wps, list_get(ฉากบทสาม_สีวน(pHue),0), list_get(ฉากบทสาม_สีวน(pHue),1), list_get(ฉากบทสาม_สีวน(pHue),2), 0.55)
} }
ถ้า wps < 0.5 { # โคมวังอุ่น (ก่อนวาร์ปครึ่งทาง)
แอ่งแสง(0.0-5.0, 0.2, 31.0, 9.0, 255, 195, 115, 0.4*(1.0-wps*2.0))
แอ่งแสง(5.0, 0.2, 31.0, 9.0, 255, 195, 115, 0.4*(1.0-wps*2.0))
}
# ── ตาบนฟ้า (ต่อเนื่องบท 2): ไกล เล็ก · บรรทัด 7 หรี่ตาลงหนึ่งลมหายใจ ──
bind mr = 7.0; bind mx = 15.0; bind my = 0.0 - 42.0; bind mz = 60.0
set_flat_shade(1.0)
สีดินสอ(150, 154, 112)
sphere(mx, my, mz, mr, mr, mr, 0.0, 0.0, 0.0, 0, 18, 13)
flush_3d()
bind eyeO = 1.0
bind t7 = list_get(c3cum, 7); bind t8 = list_get(c3cum, 8)
ถ้า c3t > t7 - 1.0 { ถ้า c3t < t8 {
bind ec = (c3t - (t7 - 1.0)) / 2.3
bind eyeO = 1.0 - ไซน์(ec * 3.1416) * 0.85 # หรี่แล้วค่อยลืมอีกครั้ง
} }
bind fz3 = mz - mr*0.82
สีดินสอ(150, 38, 20)
วาดสามเหลี่ยม3มิติ(mx - mr*0.32, my - mr*0.18*eyeO, fz3, mx - mr*0.08, my - mr*0.10*eyeO, fz3, mx - mr*0.20, my - mr*0.01*eyeO, fz3)
วาดสามเหลี่ยม3มิติ(mx + mr*0.32, my - mr*0.18*eyeO, fz3, mx + mr*0.08, my - mr*0.10*eyeO, fz3, mx + mr*0.20, my - mr*0.01*eyeO, fz3)
flush_3d()
set_flat_shade(0.0)
# ── วงออร์เคสตราลอย 8 แท่น (โค้งหลังเวที) — ตื่นบรรทัด 4 · เต้นตามบีต · เงียบหลังตัด ──
bind วงOn = 0.0
ถ้า c3t > tPerf0 { bind วงOn = (c3t - tPerf0) / 2.0 }
ถ้า วงOn > 1.0 { bind วงOn = 1.0 }
ถ้า หลังตัด > 0.5 { bind วงOn = วงOn * (1.0 - (c3t - t12)/1.5); ถ้า วงOn < 0.0 { bind วงOn = 0.0 } }
ถ้า วงOn > 0.0 {
bind บีตแท่น = ปัดลง(beat) - ปัดลง(ปัดลง(beat)/8.0)*8.0
bind st = 0
ขณะที่ st < 8 {
bind sa = 0.62 + st * 0.27 # โค้ง 8 จุด radius 13
bind sx2 = โคไซน์(sa) * 13.0
bind sz2 = 3.0 + ไซน์(sa) * 11.0
bind rise = 0.0 - 3.0 * วงOn # ลอยขึ้นจากพื้นตอนตื่น
bind pulse = 0.0
ถ้า st == บีตแท่น { bind pulse = 1.0 - (beat - ปัดลง(beat)) }
bind sCol = ฉากบทสาม_สีวน(st * 0.785 + c3t*0.5)
สีดินสอ(list_get(sCol,0), list_get(sCol,1), list_get(sCol,2))
ถ้า st - ปัดลง(st/2.0)*2.0 < 0.5 {
torus(sx2, rise - 2.0 - pulse*0.7, sz2, 1.5,1.5,1.5, 1.5708, c3t*0.4+st, 0.0, 0, 18, 9, 0.3)
}
มิฉะนั้น {
cylinder(sx2, rise - 1.6 - pulse*0.7, sz2, 1.1, 1.9, 1.1, 0.0, c3t*0.3+st, 0.0, 0, 14)
}
ถ้า pulse > 0.4 {
แอ่งแสง(sx2, 0.2, sz2, 6.5, list_get(sCol,0), list_get(sCol,1), list_get(sCol,2), 0.5*pulse*วงOn)
}
bind st = st + 1
}
flush_3d()
# เพอร์คัสชันตามบีต (เฉพาะนอกช่วงการแสดง Seraph — กันตีกัน)
bind bf2 = beat - ปัดลง(beat)
ถ้า c3t > tPerf1 { ถ้า bf2 < 0.03 { ถ้า มโหรีN > 0.5 {
bind ni2 = ปัดลง(beat) - ปัดลง(ปัดลง(beat)/มโหรีN)*มโหรีN
bind nf2 = list_get(มโหรีถี่, ni2)
bind inst = ปัดลง(beat) - ปัดลง(ปัดลง(beat)/4.0)*4.0
ถ้า inst == 0 { เล่นฆ้อง(0.0, 0.0, 8.0, nf2*0.5, 0.14*ปริมาณSFX*วงOn) }
ถ้า inst == 1 { เล่นกาเมลัน(0.0, 0.0, 8.0, nf2, 0.16*ปริมาณSFX*วงOn) }
ถ้า inst == 2 { เล่นฮังแพน(0.0, 0.0, 8.0, nf2*0.5, 0.13*ปริมาณSFX*วงOn) }
ถ้า inst == 3 { เล่นไชม์ใหญ่(0.0, 0.0, 8.0, nf2, 0.11*ปริมาณSFX*วงOn) }
} } }
}
# ── วัตถุเรืองต่อเนื่องเรื่อง: ขลุ่ยทุ่ง (ซ้าย เขียวทอง) + เขาสมุทร (ขวา น้ำเงิน) ──
ถ้า หลังตัด < 0.5 {
โหมดผสม(1)
bind reedGlow = 0.5 + ไซน์(c3t*2.2)*0.2
ถ้า c3i == 5 { bind reedGlow = 1.0 } # เด่นตอนโซโล่ขลุ่ย
สีดินสอ(floor(170*reedGlow), floor(220*reedGlow), floor(90*reedGlow))
cylinder(0.0-7.5, 0.0-5.6 - ไซน์(c3t*1.1)*0.4, 2.0, 0.22, 1.7, 0.22, 0.35, c3t*0.7, 0.0, 0, 10)
bind hornGlow = 0.5 + ไซน์(c3t*2.0+1.3)*0.2
ถ้า c3i == 8 { bind hornGlow = 1.0 } # เด่นตอนท่อนเขาสมุทร
สีดินสอ(floor(90*hornGlow), floor(160*hornGlow), floor(255*hornGlow))
torus(7.5, 0.0-5.6 - ไซน์(c3t*1.1+1.5)*0.4, 2.0, 1.0, 1.0, 1.0, 0.6, c3t*0.6, 0.0, 0, 16, 8, 0.32)
flush_3d(); โหมดผสม(0)
แอ่งแสง(0.0-7.5, 0.2, 2.0, 5.0, 170, 220, 90, 0.35*reedGlow)
แอ่งแสง(7.5, 0.2, 2.0, 5.0, 90, 160, 255, 0.35*hornGlow)
}
# ── ดาวหาง + จุดกระแทก ──
ถ้า cometP > 0.0 { ถ้า cometP < 1.0 {
โหมดผสม(1)
bind tr = 0
ขณะที่ tr < 6 {
bind tf = tr / 6.0
bind tx = cmx - 122.0*0.06*tr; bind ty = cmy - 49.0*0.06*tr; bind tz = cmz + 14.0*0.06*tr
สีดินสอ(floor(200*(1.0-tf)), floor(230*(1.0-tf)), 255)
วาดเส้น3มิติ(tx, ty, tz, tx - 6.1, ty - 2.45, tz + 0.7)
bind tr = tr + 1
}
bind cmCol = วนสีอ่อน(210, 240, 255, c3t*1.5, 0.20) # แสงเย็น: ไล่เฉดเบา ๆ ยังอ่านว่าขาวอมฟ้า
อนุภาคทรงกลม(cmx, cmy, cmz, 1.6, 10, c3t*6.0, list_get(cmCol,0), list_get(cmCol,1), list_get(cmCol,2))
flush_3d(); โหมดผสม(0)
} }
ถ้า c3t > t12 {
bind emb = 1.0 - (c3t - t12) / (C3END - t12)
ถ้า emb > 0.0 {
โหมดผสม(1)
bind hitCol = วนสีอ่อน(255, 190, 110, c3t*1.3, 0.34)
อนุภาคทรงกลม(52.0, 0.0-7.0, 46.0, 4.5*shk + 2.0, 16, c3t*3.0, list_get(hitCol,0), list_get(hitCol,1), list_get(hitCol,2))
flush_3d(); โหมดผสม(0)
แอ่งแสง(46.0, 0.2, 40.0, 14.0*emb, 255, 170, 90, 0.5*emb)
}
}
# ── แอ่งแสงใต้คู่วาทยกร ──
แอ่งแสง(kx, 0.2, kz, 9.0, 90, 140, 255, 0.5*ดำ)
แอ่งแสง(qx, 0.2, qz, 9.0, 255, 115, 165, 0.5*ดำ)
# ── ท่าทาง: อำนวยเพลง 4/4 (บรรทัด 2-9) · ก่อนหน้า idle · หลังกระแทก แขนตก มองไกล ──
bind หายใจ0 = ไซน์(c3t*1.35)*0.05
bind kArm = ไซน์(c3t*1.1)*0.06; bind kSway = หายใจ0; bind kLean = 0.0; bind kLeg = 0.0; bind kTuck = 0.0
bind qArm = ไซน์(c3t*1.2+1.0)*0.06; bind qSway = 0.0-หายใจ0; bind qLean = 0.0; bind qLeg = 0.0; bind qTuck = 0.0
ถ้า c3i >= 2 { ถ้า c3i <= 9 {
bind มือ = ฉากบทสาม_มือวาทยกร(beat)
bind kArm = list_get(มือ, 0)
bind kSway = list_get(มือ, 1) + หายใจ0*0.4
bind kLean = 0.10
bind มือQ = ฉากบทสาม_มือวาทยกร(beat + 0.06) # ราชินีนำเสี้ยวบีต (คู่วาทยกร)
bind qArm = list_get(มือQ, 0) * 0.92
bind qSway = 0.0 - list_get(มือQ, 1) - หายใจ0*0.4
bind qLean = 0.10
ถ้า c3i == 5 { bind kArm = 0.16 + ไซน์(c3t*1.4)*0.05 } # โซโล่ขลุ่ย: ราชาลดมือ ราชินีนำ
ถ้า c3i == 6 { bind kArm = 0.16 + ไซน์(c3t*1.4)*0.05 }
} }
ถ้า c3t > t12 {
bind kArm = 0.05; bind qArm = 0.05 # แขนตกนิ่งงัน
bind kLean = 0.16; bind qLean = 0.16
}
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)
mesh_draw(kCutMesh, kx, ky, kz, กายสูง, kyaw, kSway, kArm, kLean, kLeg, kTuck)
mesh_draw(qCutMesh, qx, qy, qz, กายสูง, qyaw, qSway, qArm, qLean, qLeg, qTuck)
flush_3d()
reset_material()
โหมดผสม(1)
liquid_step(liq, 0.016)
liquid_splat(liq, 28.0 + ไซน์(c3t*1.7)*13.0, 28.0 + โคไซน์(c3t*1.2)*13.0, 1.0, 0.18, 3.4)
liquid_splat(liq, 28.0 + โคไซน์(c3t*1.1)*11.0, 28.0 + ไซน์(c3t*1.5)*11.0, 0.0, 0.19, 3.0)
liquid_draw_surface(liq, 1.0, kx, ky - กายสูง*0.52, kz, กายสูง*0.62, กายสูง*0.62)
liquid_draw_surface(liq, 1.0, qx, qy - กายสูง*0.52, qz, กายสูง*0.62, กายสูง*0.62)
flush_3d(); โหมดผสม(0)
# ── การแสดง Seraph (10 วิ): วงเล่นโน้ต Seraph.mid ตามเวลา/พิตช์จริง ──
# จ่ายเครื่องดนตรีตามย่านเสียง (ฆ้อง/ฮังแพน/กาเมลัน/ไชม์) = "ออร์เคสตรา"
# สถานะ โซโล่แล้ว = ดัชนีโน้ตที่เล่นไปแล้ว (กันซ้ำ) · ≤4 โน้ต/เฟรม (ไล่ทันคอร์ด)
ถ้า c3t >= tPerf0 { ถ้า c3t < tPerf1 + 0.3 {
bind srT = เวลาโน้ต_Seraph()
bind srF = ความถี่โน้ต_Seraph()
bind srN = จำนวนโน้ต_Seraph()
bind srT0 = list_get(srT, 0)
bind ยิง = 0
bind หยุดยิง = 0.0
ขณะที่ ยิง < 4 {
ถ้า หยุดยิง < 0.5 { ถ้า โซโล่แล้ว < srN { ถ้า โซโล่แล้ว < 900.0 {
bind nt = list_get(srT, โซโล่แล้ว) - srT0
ถ้า nt <= c3t - tPerf0 { ถ้า nt <= 10.0 {
bind nf = list_get(srF, โซโล่แล้ว)
# วงเล่นสด: เครื่องมิดีคือเสียงจริงทั้งหมด (เพลงหลักเงียบอยู่)
ถ้า nf < 180.0 { เล่นฆ้อง(0.0, 0.0, 8.0, nf, 0.34*ปริมาณSFX) }
มิฉะนั้น { ถ้า nf < 320.0 { เล่นฮังแพน(0.0, 0.0, 8.0, nf, 0.34*ปริมาณSFX) }
มิฉะนั้น { ถ้า nf < 540.0 { เล่นกาเมลัน(0.0, 0.0, 8.0, nf, 0.36*ปริมาณSFX) }
มิฉะนั้น { เล่นไชม์ใหญ่(0.0, 0.0, 8.0, nf, 0.30*ปริมาณSFX) } } }
bind โซโล่แล้ว = โซโล่แล้ว + 1.0
}
มิฉะนั้น { bind หยุดยิง = 1.0 } }
มิฉะนั้น { bind หยุดยิง = 1.0 }
} มิฉะนั้น { bind หยุดยิง = 1.0 } } มิฉะนั้น { bind หยุดยิง = 1.0 } }
bind ยิง = ยิง + 1
}
} }
# ── เหตุการณ์ครั้งเดียวต่อบรรทัด: โน้ตผู้พูด + ตัดเพลง/กระแทก (บรรทัด 12) ──
ถ้า c3i > บรรทัดก่อน {
ถ้า c3i < C3N {
bind whoN = list_get(ผู้พูด, c3i)
เล่นเสียงพากย์("chapter3", c3i, list_get(ผู้พูดรหัส, c3i), ภาษา, ปริมาณSFX)
bind nf3 = 220.0
ถ้า มโหรีN > 0.5 {
bind nIdx = c3i * 7.0 - ปัดลง(c3i * 7.0 / มโหรีN)*มโหรีN
bind nf3 = list_get(มโหรีถี่, nIdx)
}
ถ้า whoN < 0.5 { เล่นไชม์ใหญ่(0.0, 0.0, 0.0, nf3, 0.28 * ปริมาณSFX) }
ถ้า whoN > 0.5 { ถ้า whoN < 1.5 { เล่นกาเมลัน(0.0, 0.0, 0.0, nf3, 0.36 * ปริมาณSFX) } }
ถ้า whoN > 1.5 { เล่นแฟนแฟร์(0.0, 0.0, 0.0, nf3*0.75, 0.26 * ปริมาณSFX) }
ถ้า c3i == 4 { # วงตื่น: หายใจเข้าก่อนเล่นสด (เพลงหลักกำลังเฟดเงียบ)
เสียงเอฟเฟกต์(0.0, 0.0-6.0, 8.0, 1.0, 440.0, 0.10*ปริมาณSFX, 0.8, "sine")
}
ถ้า c3i == 10 { # ดาวหางปรากฏ: เสียงหวีดเย็น
เสียงเอฟเฟกต์(0.0-40.0, 0.0-40.0, 60.0, 1.0, 2200.0, 0.20*ปริมาณSFX, 2.2, "sine")
}
ถ้า c3i == 12 { # กระแทก: เพลงตัด + ระเบิดต่ำ + แคร็ก
หยุดเพลง()
เสียงเอฟเฟกต์(52.0, 0.0-8.0, 46.0, 1.0, 42.0, 0.62*ปริมาณSFX, 2.8, "saw")
เสียงเอฟเฟกต์(52.0, 0.0-8.0, 46.0, 1.0, 2600.0, 0.24*ปริมาณSFX, 0.07, "square")
เล่นฆ้อง(0.0, 0.0, 0.0, 49.0, 0.5 * ปริมาณSFX)
}
ถ้า c3i == 13 { # วังเริ่มวาร์ป: ระฆังแก้ว
เล่นไชม์ใหญ่(0.0, 0.0, 20.0, 392.0, 0.30 * ปริมาณSFX)
เสียงเอฟเฟกต์(0.0, 0.0-10.0, 34.0, 1.0, 880.0, 0.16*ปริมาณSFX, 1.8, "sine")
}
}
bind บรรทัดก่อน = c3i
}
# ── ตัวหนังสือ ──
ตั้งกล้องมอง(0.0, 0.0, -22.0, 0.0, 0.0, 0.0)
ตั้งระยะห่าง(2.8)
สีดินสอ(floor(196*ดำ+20), floor(186*ดำ+18), floor(235*ดำ+20))
วาดสตริง("chapter 3 : the held breath", 0.0, 10.0, 0.0, 0.72, 1)
ถ้า c3i < C3N {
bind line3 = list_get(บทพูด, c3i)
bind line3กลิฟ = list_get(บทพูดกลิฟ, c3i)
bind hlc3i = list_get(ไฮไลท์c3i, c3i)
bind who3 = list_get(ผู้พูด, c3i)
bind lt = c3t - list_get(c3cum, c3i)
bind laf = 1.0
ถ้า lt < 0.6 { bind laf = lt / 0.6 }
ถ้า lt > C3SEC - 0.7 { bind laf = (C3SEC - 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)
ถ้า who3 > 0.5 { ถ้า who3 < 1.5 { bind lr = floor(255.0*laf); bind lg = floor(218.0*laf); bind lb = floor(128.0*laf) } }
ถ้า who3 > 1.5 { bind lr = floor(212.0*laf); bind lg = floor(222.0*laf); bind lb = floor(255.0*laf) }
ถ้า แสดงบทพูด == 1 {
วาดสตริงบทพูดบากขอบ(line3กลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.62)
วาดสตริงบทพูดบากสี(line3กลิฟ, ภาษาบทพูด, 0.0, 8.3, 0.0, 0.62, lr, lg, lb, list_get(hlc3i,0), list_get(hlc3i,1), list_get(hlc3i,2), list_get(hlc3i,3), list_get(hlc3i,4))
}
}
สีดินสอ(floor(170*ดำ), floor(180*ดำ), floor(205*ดำ))
วาดสตริง("[enter/space] continue [esc] skip", 0.0, 10.9, 0.0, 0.42, 1)
flush_3d()
แสดงผล()
bind outC3 = 0.0
ถ้า c3t >= C3END { bind outC3 = 1.0 }
# กันข้ามโดยไม่ตั้งใจ: ไม่รับปุ่มข้าม (คีย์บอร์ด+จอย) ช่วง 5 วิแรกของฉาก
ถ้า c3t > 5.0 {
ถ้า กดปุ่ม("enter") { bind outC3 = 1.0 }
ถ้า กดปุ่ม("space") { bind outC3 = 1.0 }
ถ้า กดปุ่ม("escape") { bind outC3 = 1.0 }
ถ้า จอยปุ่ม("a") { bind outC3 = 1.0 }
ถ้า จอยปุ่ม("start") { bind outC3 = 1.0 }
}
ถ้า outC3 > 0.5 { # ปิดฮัมก่อนออกฉาก
เบลอเฟรม(0.0)
เสียงโทน(15, 0.0, 0.0, 0.0, 1.0, 46.0, 0.0, 0.0, 0.0)
เสียงโทน(14, 0.0, 0.0, 0.0, 1.0, 46.6, 0.0, 0.0, 0.0)
}
คืน [บรรทัดก่อน*1000.0 + โซโล่แล้ว, outC3]
}