灵符lingfu

soul-symphony-ling

↓ 0 downloads

Soul 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-ling
AuthorsLing Lin <taellinglin@gmail.com>
READMECode / FilesVersionsDependency GraphDependentsSecurityBuildsSettings

Code / Files (1947)

game/arena.ling
# ════════════════════════════════════════════════════════════════════════════
# arena.ling — สนามบอสวงกลมใหญ่ (พื้นเติม + กำแพงวงแหวน + ชนขอบเป็นวงกลม)
# ════════════════════════════════════════════════════════════════════════════
bind ARENA_R     = 240.0
bind ARENA_FLOOR = 6.0
bind ARENA_CEIL  = 0.0 - 160.0

ฟังก์ชัน ความสูงอารีนา(x, z) { คืน ARENA_FLOOR }

# ชนขอบวงกลม → [pen, qx, qz] (รูปแบบเดียวกับ หากล่อง)
ฟังก์ชัน หากล่องอารีนา(x, z, R) {
    bind d = รากที่สอง(x*x + z*z)
    bind lim = ARENA_R - R
    ถ้า d > lim { ถ้า d > 0.01 {
        คืน [1.0, x/d*lim, z/d*lim]
    } }
    คืน [0.0, x, z]
}

# วาดสนาม: พื้นเช็คเกอร์บอร์ดเชิงรัศมี (วงซ้อน × เสี้ยว) + เอดจ์ลูปเรืองแสง + กำแพงวงแหวน
ฟังก์ชัน วาดอารีนา(t, lvl, hue) {
    โหมดผสม(0)
    bind N = 28
    bind RINGS = 6
    bind tr = ไซน์(hue*6.2832)*0.5+0.5;  bind tg = ไซน์(hue*6.2832+2.094)*0.5+0.5;  bind tb = ไซน์(hue*6.2832+4.189)*0.5+0.5   # สีสเตจ
    # ── พื้น: เช็คเกอร์บอร์ดเชิงรัศมี (วงซ้อน ri × เสี้ยว k) ย้อมตามสเตจ ──
    bind ri = 0
    ขณะที่ ri < RINGS {
        bind r0 = ri * ARENA_R / RINGS;  bind r1 = (ri+1) * ARENA_R / RINGS
        bind k = 0
        ขณะที่ k < N {
            bind a0 = k * 6.2832 / N;  bind a1 = (k+1) * 6.2832 / N
            bind c0=โคไซน์(a0); bind s0=ไซน์(a0); bind c1=โคไซน์(a1); bind s1=ไซน์(a1)
            ถ้า (ri+k) - ปัดลง((ri+k)/2.0)*2.0 == 0.0 { สีดินสอ(floor(16+tr*26), floor(20+tg*26), floor(36+tb*40)) }  มิฉะนั้น { สีดินสอ(floor(34+tr*58), floor(40+tg*58), floor(64+tb*80)) }
            draw_quad_3d(c0*r0, ARENA_FLOOR, s0*r0,  c1*r0, ARENA_FLOOR, s1*r0,  c1*r1, ARENA_FLOOR, s1*r1,  c0*r1, ARENA_FLOOR, s0*r1)
            bind k = k + 1
        }
        bind ri = ri + 1
    }
    flush_3d()
    # ── เอดจ์ลูป: เส้นวงซ้อน + เส้นรัศมี เรืองแสง (เน้นกริด) ย้อมตามสเตจ ──
    โหมดผสม(1);  สีดินสอ(floor(45+tr*150), floor(80+tg*140), floor(120+tb*120))
    bind ri = 1
    ขณะที่ ri < RINGS + 1 {
        bind rr = ri * ARENA_R / RINGS
        bind k = 0
        ขณะที่ k < N {
            bind a0 = k * 6.2832 / N;  bind a1 = (k+1) * 6.2832 / N
            วาดเส้น3มิติ(โคไซน์(a0)*rr, ARENA_FLOOR-0.06, ไซน์(a0)*rr,  โคไซน์(a1)*rr, ARENA_FLOOR-0.06, ไซน์(a1)*rr)
            bind k = k + 1
        }
        bind ri = ri + 1
    }
    bind k = 0
    ขณะที่ k < N {
        bind a0 = k * 6.2832 / N;  bind ca=โคไซน์(a0); bind sa=ไซน์(a0)
        วาดเส้น3มิติ(0.0, ARENA_FLOOR-0.06, 0.0,  ca*ARENA_R, ARENA_FLOOR-0.06, sa*ARENA_R)
        bind k = k + 1
    }
    flush_3d();  โหมดผสม(0)
    # ── กำแพงวงแหวน (จากพื้น → เพดาน) สีเปลี่ยนตามเลเวล ──
    bind k = 0
    ขณะที่ k < N {
        bind a0 = k * 6.2832 / N;  bind a1 = (k+1) * 6.2832 / N
        bind c0=โคไซน์(a0); bind s0=ไซน์(a0); bind c1=โคไซน์(a1); bind s1=ไซน์(a1)
        bind wr = floor((ไซน์(lvl*1.1+k*0.2)*0.5+0.5)*55+25)
        สีดินสอ(floor(wr*(0.5+tr*1.1)), floor(wr*(0.4+tg*1.1)), floor(wr*(0.5+tb*1.1)))   # ย้อมกำแพงตามสเตจ
        draw_quad_3d(c0*ARENA_R, ARENA_FLOOR, s0*ARENA_R,  c1*ARENA_R, ARENA_FLOOR, s1*ARENA_R,  c1*ARENA_R, ARENA_CEIL, s1*ARENA_R,  c0*ARENA_R, ARENA_CEIL, s0*ARENA_R)
        bind k = k + 1
    }
    flush_3d()
}

ฟังก์ชัน ตั้งแสงอารีนา(t, lvl) {
    ล้างแสง()
    เพิ่มแสง(0.0, ARENA_CEIL+30.0, 0.0,
        0.6+ไซน์(lvl*1.1)*0.4, 0.6+ไซน์(lvl*1.1+2.0)*0.4, 0.6+ไซน์(lvl*1.1+4.0)*0.4, 1.8, 600.0)
    เพิ่มแสง(0.0, 0.0-40.0, 0.0, 1.0, 0.4, 0.7, 1.2, 420.0)
}

← Back to index