Tower block (Stack) — รูปสำหรับฉาก / FTP
========================================
โหมดเกม **stack** (สลับจังหวะลงตึก) — ถ้าอัปโหลดรูปผ่าน **FTP** ให้ใช้โฟลเดอร์นี้เท่านั้น:
**`/Game/public/img/TowerBlock`** (ตัวพิมพ์ใหญ่ T และ B — **ไม่มีช่องว่าง**)
อย่าใช้ชื่อ **`Tower block`** (มีช่องว่าง) — บนเซิร์ฟหลายแบบคำสั่ง FTP `MKD "Tower block"` จะได้ **550 Create directory operation failed** เหมือนกรณีโฟลเดอร์ "Violent Crime" / ชื่อมี space อื่น ๆ
English: Upload Stack / tower assets under **`TowerBlock`** (no spaces). **`Tower block`** often fails with FTP **550**.
โฟลเดอร์นี้ถูกสร้างตอนรัน `scripts/deploy-www.sh` (mkdir + www-data + setgid 2775) เพื่อให้อัปโหลดได้ทันที
ถ้า FTP ยัง 550: ตรวจว่าเชื่อมที่โฟลเดอร์ **public/img** ใต้ document root (เช่น `/var/www/html/Game/public/img/TowerBlock`) ไม่ใช่ chroot คนละระดับกับ `/Game/...`
---
ฉากภารกิจ Stack (editor id **mnn93hpi**) — `play.js` โหลดจาก `/Game/img/TowerBlock/` พร้อม fallback ไป `/Game/img/gauntlet-assets/` ถ้าไฟล์หาย
| ไฟล์ | ใช้ |
|------|------|
| `popup-Howto.png` | แผง HOW TO PLAY + พื้นหลังช่วงนับถอยหลัง |
| `popup-result.png` | แผงสรุปภารกิจ (GCM) |
| `result-check.png` (ถ้ามี) | ไอคอนติ๊ก «ภารกิจสำเร็จ» บนสรุป — ไม่มีจะใช้ของ gauntlet |
| `sling.png` | เชือกเหวี่ยงบล็อกในเกม (ยืดจากจุดแขวนถึงบล็อก) — แนวตั้งในไฟล์ = แนวสาย; ไม่มีไฟล์จะใช้เส้นประแทน |
| `heart-1.png` | โชว์กลางเหนือกองเมื่อ **พลาด** (Tower live) — ไม่มีจะ fallback ข้อความ `♥ −1` |
| `life-full.png` | HUD มุมขวา: หัวใจ **เต็ม** ในแถบชีวิต (คู่ `life-hit.png`) — ไม่มีจะ fallback เป็น `heart-1.png` |
| `life-bar.png` | HUD: ใช้เฉพาะ **ครึ่งบน** (~38%) เป็นหัวข้อ SYSTEM INTEGRITY — แถวหัวใจวาดแยกใต้ + วงเล็บ `[` `]` จากโค้ด (ไม่ทับขอบใน PNG) · ปรับ `STACK_TOWER_LIFE_BAR_TITLE_FRAC` ใน `play.js` ถ้า art เปลี่ยน |
| `life-hit.png` | หัวใจ **หาย / โดนตี** ในแถบชีวิต (คู่ `life-full.png`) |
| `btn-drop.png` | ปุ่ม **DROP** มุมขวาล่างใน `play.html` (เทียบ Space / Enter) |
| `score+10.png` | Tower live: โชว์เหนือบล็อกเมื่อได้ **+10** |
| `score+20.png` | Tower live: เหนือบล็อกเมื่อ **×2 (+20)** หรือ **progress ถึง ~100%**; ถ้า perfect คู่ (support เต็ม) จะโชว์บนชั้นบน **และ** ชั้นก่อนหน้า |
| `score-light.png` | คู่กับ **+20 / perfect full** — แสงข้างชั้นบน (mock รูป2) |
| `scorex2.png` | กราฟิก **×2** ข้างชั้นบน — ใช้คู่ `score-light.png` |
| `result-timeup.png` | หมดเวลาก่อน decrypt ครบ 100% → แฟลชเต็มจอ **5 วิ** ก่อนหน้า GCM |
| `result-gameover.png` | พลาดจนหมด **team misses** (เช่น เกิน 3 ครั้งตามตั้งค่า) → แฟลช 5 วิ ก่อน GCM |
| `result-complete.png` | decrypt ถึง **100%** ภายในเวลา → แฟลช 5 วิ ก่อน GCM |
English: **`score+10.png`** / **`score+20.png`** — score popups above blocks; dual **+20** on perfect “full support” pair. **`result-timeup.png`**, **`result-gameover.png`**, **`result-complete.png`** — 5s fullscreen flash before the mission summary (GCM). Missing images fall back to opening GCM immediately for the flash layer.