Trick Shot II: ทำเกม Nokia 3310 จนรันบนเครื่องจริงด้วย Pi Pico
Game Jam ปกติอาจจบตอนกด Submit เกม แต่โปรเจกต์นี้ไปไกลกว่านั้น: Hoani สร้างเกม Trick Shot II ภายใต้ข้อจำกัดแบบ Nokia 3310 แล้วพัฒนา Game Engine และ Custom PCB เพื่อเอาเกมกลับไปรันกับจอ ปุ่ม และตัวเครื่อง Nokia 3310 จริง
จุดเริ่มต้นคือโจทย์ที่ดูเรียบง่าย: ทำเกมสำหรับ Interface แบบ Nokia 3310 ที่มีจอ monochrome ขนาดเล็ก, keypad และเสียงแบบจำกัด แต่เมื่อผู้สร้างพยายามให้เกม “รู้สึกเหมือนอยู่บน Nokia 3310 จริง” เรื่องจึงลามไปถึง Pixel Aspect Ratio, LCD Ghosting, Embedded Physics, TinyGo, PCB Thickness และพื้นที่ภายในเคสโทรศัพท์
สิ่งที่ได้จึงไม่ใช่แค่ Retro Game แต่เป็นตัวอย่างชัด ๆ ว่า Constraint สามารถผลักให้ Software, Electronics และ Mechanical Design ต้องคิดร่วมกันตั้งแต่ต้นได้อย่างไร
- Trick Shot II ได้อันดับ 1 Overall และอันดับ 1 ทั้ง Innovation, Completeness และ Quality ใน Nokia 3310 Jam 8
- จอ Nokia 3310 จริงคือ 84×48 pixels ไม่ใช่ 94×48 ตามที่ Hackaday พิมพ์ไว้
- Game Engine ถูกสร้างบน TinyGo + Ebitengine และออกแบบให้รันได้ทั้ง Microcontroller, Desktop และ Browser
- Physics ของ Trick Shot II จำลองแบบ Real-time ที่ 60Hz
- ผู้สร้างวัดสัดส่วน Pixel ของจอจริงแล้วปรับ Game Grid เป็น 5×4 pixels เพื่อให้มองเป็นสี่เหลี่ยมใกล้เคียงบน LCD
- จอ PCD8544 อัปเดตได้สูงสุดประมาณ 67Hz แต่ Pixel Response ช้ากว่านั้นมาก จึงเกิด Ghosting
- ผู้สร้างทดลองทำ Grayscale ด้วย Temporal Flicker แต่ผลไม่สม่ำเสมอจนไม่เหมาะใช้งาน
- Custom PCB ถูกออกแบบให้แทน Mainboard เดิมของ Nokia 3310/3315
- PCB เดิมหนา 1.0mm แต่ Prototype แรกสั่งมา 1.6mm ทำให้ตัวเครื่องปิดไม่สนิท
- Project ใช้ Hardware เดิมของโทรศัพท์หลายส่วน เช่น LCD, Keypad, Buzzer, LEDs และ Vibration Motor interface
Trick Shot II คืออะไร?
Trick Shot II เป็น Physics Puzzle ที่ Hoani Bryson สร้างสำหรับ Nokia 3310 Jam 8
Theme ของ Jam คือ:
ผู้สร้างจึงออกแบบเกม ที่ให้ผู้เล่นจัดตำแหน่งวัตถุ เพื่อทำให้ลูกบอลกระเด้งไปยังเป้าหมาย โดยเน้นผลลัพธ์จาก Geometry และ Physics มากกว่าความสุ่ม
Trick Shot II ได้อันดับ:
- อันดับ 1 Overall
- อันดับ 1 Innovation
- อันดับ 1 Completeness
- อันดับ 1 Quality
แต่ส่วนที่น่าสนใจที่สุด คือผู้สร้างไม่ได้หยุดอยู่ที่เวอร์ชัน Browser เพราะเขาตั้งใจทำให้เกม ใกล้เคียงกับประสบการณ์ของ Nokia 3310 จริงที่สุด
Nokia 3310 Game Jam จำกัดอะไรบ้าง?
Nokia 3310 Jam ใช้ข้อจำกัดของโทรศัพท์รุ่นนี้ เป็นกรอบในการออกแบบเกม
| ข้อจำกัด | แนวทางของ Jam |
|---|---|
| Resolution | 84 × 48 pixels |
| Display style | ใช้ Palette ตามข้อกำหนดของ Jam เพื่อเลียนแบบจอ Nokia |
| Audio | เล่นเสียงได้ทีละ 1 Channel / 1 Sound |
| Controls | สูงสุด 12 Game Controls |
| Movement | ไม่ใช้ Sub-pixel movement |
| Game Engine | ใช้ Engine ใดก็ได้ หากรักษาข้อจำกัด |
| Real Nokia Hardware | ไม่ได้บังคับให้เกมต้องรันบนโทรศัพท์จริง |
จอ Nokia 3310 จริงคือ 84×48 ไม่ใช่ 94×48
Hackaday ระบุในบทความว่า Interface ของ Nokia 3310 มีจอขนาด 94 × 48 pixels
แต่ข้อมูลนี้ขัดกับทั้ง:
- Nokia 3310 Jam 8
- Hardware Teardown ของ Hoani
- PCD8544 display configuration ที่ใช้ใน Project
ตัวเลข 94 × 48 ใน Hackaday จึงควรถูกมองเป็นความคลาดเคลื่อนของบทความรอง ไม่ใช่ Specification ที่ใช้สร้างเกม
Display ที่ Hoani ตรวจสอบ เป็น Monochrome LCD ที่ใช้ PCD8544 driver ซึ่งกลายเป็นข้อจำกัดหลัก ทั้งด้าน Graphics, Font, Physics presentation และ Animation
3310 Engine: Game Engine ที่รันได้ทั้ง Browser, Desktop และ MCU
แทนที่จะทำ Trick Shot II ผูกติดกับ Platform เดียว Hoani สร้าง Game Engine ของตัวเอง บน:
↓
Game Logic
↓
Desktop Browser Microcontroller
Architecture นี้ทำให้ Game Code และ Engine Concept หลัก ใช้ร่วมกันได้ แล้วแยก Platform layer สำหรับ Hardware หรือ Desktop ออกไป
ใน Source Code มี Interface สำหรับ:
- Game lifecycle
- Canvas / graphics
- Key input
- Sound
- Display
- Platform abstraction
นี่ทำให้ Project ไม่ได้เป็นแค่เกมหนึ่งเกม แต่เป็น Framework ที่ใช้สร้างเกมภายใต้ข้อจำกัดแบบ 3310 ได้
Graphics Engine แบบ 1-bit ทำงานอย่างไร?
จอ Nokia 3310 ไม่ต้องการ Pipeline แบบเกมสีสมัยใหม่
Canvas ใน Engine มอง Pixel หลัก ๆ เป็นสถานะ:
false → Pixel OFF
Source Code ของ Engine มี Method สำหรับ:
- Clear Canvas
- Set Pixel
- Read Pixel
- Access Buffer
- Draw Surface
- Overlay
type Canvas interface {
Set(x, y int, val bool)
}
ความเรียบง่ายนี้ เหมาะกับ Display ที่มีข้อจำกัดสูง เพราะ Engine ไม่ต้องแบก Color Buffer ขนาดใหญ่ หรือ Image Processing ที่เกินความจำเป็น
Tiny Font และ Embedded Assets ทำไมสำคัญเมื่อมีแค่ 84×48 Pixels?
ผู้สร้างต้องคิดเรื่อง Graphics Asset ในมุมของ Embedded System ด้วย ไม่ใช่แค่ความสวย
เป้าหมายของ Asset Pipeline คือ:
- ลด Flash usage
- รองรับ Monochrome
- รองรับ Transparency
- ลด Runtime Processing
- หลีกเลี่ยงการ Decode image format หนัก ๆ บน MCU
Hoani จึงเลือกแนวทาง Netpbm format เช่น:
- PBM สำหรับ Black/White
- PGM สำหรับ Grayscale/Dithering ในบางกรณี
- PBMX แนวทางของผู้สร้างที่แยก Pixel Data กับ Mask เพื่อ Transparency
ผู้สร้างระบุว่า Sprite ส่วนใหญ่ใน Trick Shot II มีขนาดเล็กมาก โดยหลายชิ้นอยู่ราว 10×8 pixels ทำให้ Format และ Overhead ของ File มีผลชัดกว่าที่คิด
Physics 60Hz บน Microcontroller ทำได้อย่างไร?
Trick Shot II ไม่ได้ใช้เพียง Animation ที่กำหนดไว้ล่วงหน้า แต่มีระบบ 2D Physics ทำงานแบบ Real-time:
โครงหลักที่ผู้สร้างอธิบายประกอบด้วย:
- Integrator
- Equations of motion
- Collision detection
- Collision handling
Simulation แยก Object เป็น:
- Dynamic — Object ที่เคลื่อนที่ได้
- Static — Object ที่ถือว่าไม่เคลื่อนที่และมีมวลไม่จำกัดในโมเดล
Collision ระหว่าง Dynamic Object ใช้วิธีที่มีความซับซ้อนเชิงจำนวนคู่สูงขึ้นตามจำนวน Object แต่ Hoani อธิบายว่า ในเกมจริงจำนวน Dynamic Object มีน้อย จึงยังเหมาะกับข้อจำกัดของ Platform
Pixel Nokia 3310 ไม่ได้เป็นสี่เหลี่ยมจัตุรัสจริง
สิ่งที่น่าสนใจมากคือ Hoani ไม่ได้ดูแค่ Resolution 84×48 แต่ไปวัดพื้นที่แสดงผลของ LCD จริง
เขาประเมินพื้นที่จอไว้ประมาณ:
เมื่อเทียบกับจำนวน Pixel จึงได้ Pixel pitch โดยประมาณ:
- แนวนอน ≈ 0.363 mm
- แนวตั้ง ≈ 0.448 mm
ผู้สร้างจึงมองว่า Pixel Aspect Ratio ใกล้เคียงกับ:
ทำไม Game Grid เป็น 5×4 pixels?
ถ้าวาด Square ด้วยจำนวน Pixel เท่ากันทั้ง X และ Y รูปร่างบน LCD จริงจะไม่รู้สึกเป็น Square เท่าไร
Trick Shot II จึงใช้ Logical Grid:
≈
Square บนจอจริง
Physics ก็ต้องรู้เรื่องนี้ด้วย
Hoani ปรับ Physics Scale ให้ 5 pixels ในแกน X และ 4 pixels ในแกน Y แทน 1 logical unit
ผลคือ Visual Geometry และ Physics Geometry ใช้ระบบสัดส่วนเดียวกัน แทนที่จะวาดให้ดู Square แต่คำนวณ Collision ด้วย Coordinate ที่ผิดสัดส่วน
LCD Ghosting ของ Nokia 3310 ช้าแค่ไหน?
PCD8544 LCD อัปเดตได้สูงสุดประมาณ:
แต่ Update Rate ของ Controller ไม่ได้แปลว่า Pixel เปลี่ยนสภาพได้ทันที
จากการวัดของ Hoani:
| Pixel Transition | เวลาประมาณ |
|---|---|
| Empty → Fill | ประมาณ 50 ms |
| Fill → Empty | ประมาณ 125 ms |
เมื่อ Object เคลื่อนที่เร็ว Pixel เก่าจึงยังไม่หายทันที เกิดรอยตามที่เรียกว่า:
นี่เป็นเหตุผลว่าทำไม การจำลอง Nokia 3310 ให้ “รู้สึกเหมือนจริง” ไม่ได้จบที่การตั้ง Canvas เป็น 84×48
ทำ Grayscale ด้วย Ghosting ได้ไหม?
แนวคิดคือ:
- Pixel ชุดหนึ่งเปิดตลอด
- Pixel ชุดหนึ่งปิดตลอด
- Pixel อีกชุดสลับ ON/OFF ระหว่าง Frame
ถ้า LCD ตอบสนองช้า ในทางทฤษฎี Pixel ที่สลับ อาจดูเหมือนมีความเข้มอยู่กึ่งกลาง
แต่ผลจาก Hardware จริง:
ดังนั้น Project นี้ ไม่ควรถูกอธิบายว่า “ทำให้ Nokia 3310 แสดง Grayscale ได้”
สิ่งที่ถูกต้องกว่าคือ: ผู้สร้างทดลองใช้ Temporal Flicker เพื่อสร้างเฉดกลาง แต่ผลบน LCD จริงไม่สม่ำเสมอ
จากเกมไปสู่ Custom Nokia 3310 Mainboard
ผู้สร้างไม่ได้พยายามใช้ Processor และ Proprietary IC เดิมของโทรศัพท์
เขาเลือกแนวทางใหม่:
↓
ถอด Mainboard เดิม
↓
ออกแบบ Custom PCB
↓
ใส่ Pico-family Board
↓
ขับ LCD / Keypad / Buzzer / Vibe / LEDs
Creator ระบุว่า Nokia 3310 และ 3315 ใช้ Hardware ที่เหมือนกัน ในบริบทที่เขาต้องการ Swap PCB
Interface หลายจุดในเครื่องเดิม ไม่ได้ใช้ Connector แบบสายเสียบ แต่ใช้:
เช่นบริเวณ:
- Battery
- LCD
- Buzzer
- Vibration Motor
นั่นหมายความว่า PCB ใหม่ต้องวาง Pad ให้ตรงตำแหน่งเดิมเชิง Mechanical ด้วย ไม่ใช่เพียงต่อ Circuit ถูก
PCB 1.6mm ทำไมใส่เคสไม่พอดี?
Mainboard เดิมของ Nokia 3310 หนาประมาณ:
แต่ Prototype รอบแรก ของ Custom PCB ถูกสั่งที่:
Circuit ทำงาน แต่ Assembly ทั้งหมด ไม่สามารถ Clip กลับเข้าหากันได้อย่างพอดี
นี่เป็นตัวอย่างที่ดีว่า PCB Design สำหรับอุปกรณ์เดิม มี Constraint มากกว่าการลาก Trace:
- Board thickness
- Component height
- Connector/contact position
- Mechanical stack-up
- Clearance กับ Housing
ข้อจำกัดด้าน Mechanical ของ Nokia 3310 หนักกว่าที่เห็น
ด้านหน้าของ PCB ต้องประกบกับชุดที่มี:
- LCD
- Keypad
- Speaker
- Light tunnels
Hoani ระบุว่า Surface ด้านหน้าของ Board ต้องแบนมาก เพราะแทบไม่มีพื้นที่ให้ Component ยื่นขึ้นมา
Component ส่วนใหญ่ ต้องมีความสูงต่ำกว่าโดยประมาณ:
มีพื้นที่มากขึ้นเล็กน้อย ใกล้ Power Button เนื่องจาก Housing เดิม มี Cavity สำหรับ Antenna
แม้แต่ LED ก็ต้องวางด้านหลังของ PCB แล้วหันแสงผ่านรูประมาณ 2 mm เพื่อส่งแสงไปยังด้านหน้า
Project นี้จึงเป็นตัวอย่างของ:
Keypad มี 16 ปุ่ม แต่ Game Jam ใช้ได้ 12 Controls
ใน Engine Hoani สร้าง Key model สำหรับปุ่ม:
- 0–9
- *
- #
- A
- B
- C
- D
รวมเป็น:
Engine ยังมี Alias ให้ปุ่มบางชุดทำหน้าที่เชิงเมนู เช่น:
- Cancel
- Confirm
- Prev
- Next
แต่กติกา Nokia 3310 Jam จำกัด Game Controls สูงสุดไว้ 12 เพราะไม่นับปุ่มเมนู 4 ปุ่ม เป็น Gameplay Controls หลัก
นี่เป็นตัวอย่างว่า Hardware Interface จริง กับ Rule ของ Game Jam ไม่จำเป็นต้องมีจำนวน Input เท่ากันทุกอย่าง
Buzzer และ Vibration Motor ต้องขับอย่างไรในระดับ Concept?
Hardware Teardown ระบุว่า Nokia buzzer ถูกขับด้วย Square Wave
แต่ Hoani เองก็ระบุว่า Documentation ของ Buzzer เดิม ไม่สมบูรณ์ เขาจึงเลือกปฏิบัติกับมัน ในลักษณะเดียวกับ Inductive Load เพื่อความระมัดระวัง
ฝั่ง Vibration Motor ผู้สร้างทดลองขับด้วย 3.3V square wave แต่เตือนชัดว่า:
ควรมี Switching Device เช่น FET/BJT และ Freewheeling Diode ตามหลักการขับ Inductive Load และตามแนวทางที่ผู้สร้างอ้างอิงจากวงจรเดิม
บทความนี้จะไม่กำหนด Transistor part number, resistor value หรือ wiring เพิ่มเอง เพราะ Source ไม่ได้ระบุเป็นวงจร Build Guide แบบตายตัว
Raspberry Pi Pico / RP2350 อยู่ตรงไหนใน Project?
Hackaday เรียก Controller ในภาพรวมว่า:
ขณะที่ Repository ของ Custom PCB ใช้ Raspberry Pi Pico-family footprint และ Current Design Files มีข้อมูลที่เกี่ยวข้องกับ Pico 2 / RP2350
อย่างไรก็ตาม Source ที่ตรวจไม่ได้ระบุอย่างชัดเจนว่า Prototype ทุก Revision ที่ปรากฏในภาพ ใช้ Pico รุ่นเดียวกันทั้งหมด
ถ้อยคำที่ปลอดภัยกว่าคือ: Custom Mainboard ถูกออกแบบรอบ Raspberry Pi Pico-family module และ Repository ปัจจุบันรองรับ Footprint ที่ใช้กับ Pico 2 ได้
Game Engine เดียว Build ไป Browser ได้อย่างไร?
Current Repository มี Build Script สำหรับ:
- WASM
- macOS
- Linux
- Windows
ทำให้เกมและ Engine สามารถมีเวอร์ชัน Browser/Desktop สำหรับพัฒนาและทดสอบ ขณะที่ Firmware path ถูกใช้กับ Microcontroller
./tools/build/build.sh wasm ./example/snd
./example/snd หาก Build เกมหรือ Package อื่น ต้องเปลี่ยน Package Path ให้ตรงกับ Source Tree ปัจจุบัน
Trick Shot II บนจอแบบ Nokia จริงหน้าตาเป็นอย่างไร?
สิ่งที่ดูเหมือนข้อจำกัด กลับกลายเป็นภาษาการออกแบบของเกม:
- รูปทรงต้องอ่านออกในพื้นที่เล็ก
- Font ต้องใช้ Pixel น้อย
- Animation ต้องคำนึงถึง LCD Response
- Physics ต้องเข้ากับ Pixel Aspect
- Controls ต้องพอดีกับ Keypad
อยากดู Hardware และ Engine จริง? Source เปิดไว้แล้ว
Project นี้มี Source แยกหลัก ๆ เป็นสอง Repository:
| Repository | เนื้อหาหลัก |
|---|---|
| 3310_engine | Game Engine, Graphics, Sound, Input, Firmware platform, examples และ build tools |
| 3310_pico | KiCad project, PCB design, fabrication files, footprints และ mechanical board files |
Project นี้สอนอะไรเรื่อง Constraint-driven Design?
สิ่งที่น่าสนใจของ Trick Shot II คือข้อจำกัดแต่ละชั้น บังคับให้เกิด Design Decision ชั้นถัดไป
↓
Tiny Font + Small Sprite
↓
Memory-efficient Asset
↓
60Hz Lightweight Physics
↓
Real LCD Ghosting
↓
Custom PCB + Mechanical Fit
ข้อจำกัดไม่ได้เกิดเฉพาะใน Software
เมื่อเอาเกมกลับเข้าตัวเครื่องจริง ผู้สร้างต้องเผชิญกับ:
- PCB Thickness
- Component Height
- Spring Contact Alignment
- Battery Contact
- LCD Timing
- Buzzer
- Vibration Motor
- Keypad Matrix
FAQ: Trick Shot II และ Nokia 3310 Custom PCB
1. Trick Shot II คืออะไร?
เป็น Physics Puzzle ที่ Hoani Bryson ทำสำหรับ Nokia 3310 Jam 8 และต่อยอดให้รันบน Hardware ที่ติดตั้งกลับเข้าไปใน Nokia 3310 จริง
2. Trick Shot II ชนะ Game Jam หรือไม่?
ใช่ Creator ระบุว่าได้อันดับ 1 Overall และอันดับ 1 ทั้ง Innovation, Completeness และ Quality
3. Nokia 3310 มีจอ 94×48 จริงไหม?
ไม่ตาม Source ต้นทางที่ใช้ใน Project ทั้ง Jam และ Creator ระบุ 84×48 pixels ส่วน Hackaday พิมพ์เป็น 94×48
4. Nokia 3310 ใช้ Display Driver อะไร?
Creator ระบุว่า LCD เป็น Monochrome 84×48 ที่ใช้ PCD8544 driver
5. Game Engine เขียนด้วยภาษาอะไร?
Engine ถูกสร้างบน Go/TinyGo และใช้ Ebitengine ในส่วนของ Platform สำหรับ Desktop/Browser
6. Engine รันบน Browser ได้ไหม?
ได้ Current Repository มี Build workflow สำหรับ WebAssembly รวมถึง Desktop target หลายระบบ
7. Physics ทำงานกี่ Hz?
Creator ระบุว่า Trick Shot II จำลอง Real-time 2D Physics ที่ 60Hz
8. LCD Refresh 67Hz หมายความว่า Pixel ตอบสนองใน 15ms หรือไม่?
ไม่ Update Rate และ Pixel Response Time เป็นคนละเรื่อง ผู้สร้างวัด Empty→Fill ราว 50ms และ Fill→Empty ราว 125ms
9. ทำไมภาพเคลื่อนไหวมี Ghosting?
เพราะ Pixel บน LCD ใช้เวลาเปลี่ยนสถานะค่อนข้างนาน เมื่อ Object เคลื่อนที่ Pixel จาก Frame ก่อนหน้าจึงยังคงมองเห็นอยู่ช่วงหนึ่ง
10. Nokia 3310 แสดง Grayscale ได้ไหม?
ผู้สร้างทดลองสร้างเฉดกลาง ด้วยการสลับ Pixel ON/OFF แต่ผลบนจอจริงไม่สม่ำเสมอ จึงไม่ควรอธิบายว่าเป็น Grayscale ที่ใช้งานได้ดี
11. ทำไม Grid ใช้ 5×4 pixels?
เพราะ Pixel จริงมีสัดส่วนไม่เป็น Square Hoani ประเมิน Pixel Aspect ใกล้ 4:5 จึงใช้ 5 pixels ในแนวนอน ต่อ 4 pixels ในแนวตั้ง เพื่อให้ Cell ดูใกล้ Square บนจอจริง
12. Custom PCB ใช้แทน Mainboard เดิมเลยหรือไม่?
ใช่ในแนวทางของ Project นี้ Creator ออกแบบ PCB ใหม่ เพื่อ Interface กับ LCD, keypad, buzzer, vibration motor, LEDs และ contact ภายในเครื่องเดิม
13. ทำไม PCB รอบแรกใส่เคสไม่พอดี?
Board เดิมหนา 1.0mm แต่ Prototype แรกถูกสั่งที่ 1.6mm แม้วงจรทำงาน แต่ Assembly ปิดกลับเข้าหากันไม่สนิท
14. Project ใช้ Raspberry Pi Pico รุ่นไหน?
Hackaday เรียกโดยรวมว่า Pi Pico และ Current PCB Repository ใช้ Pico-family footprint ที่รองรับ Pico 2 ได้ แต่ Source ที่ตรวจไม่ได้ยืนยันว่า Prototype ทุก Revision ใช้ MCU revision เดียวกัน
15. ใช้ RP2350 แน่นอนหรือไม่?
Current schematic/repository มี RP2350-related metadata และ Pico 2-compatible footprint แต่บทความนี้ไม่ฟันธงว่า Hardware ทุก Revision ในภาพ เป็น RP2350
16. Battery ใช้ได้นานเท่าไร?
Source ที่ใช้ในบทความนี้ ไม่ได้ระบุ Battery Runtime ของ Custom Nokia 3310
17. PCB มีไฟล์เปิดให้ดูหรือไม่?
มี Repository 3310_pico มี KiCad project, schematic, fabrication files และ mechanical board files
18. ต้องใช้ Nokia 3310 จริงเพื่อเล่นเกมไหม?
ไม่ Engine ถูกออกแบบให้รันบน Desktop และ Browser ได้ด้วย ส่วนการสร้าง Hardware จริง เป็นการต่อยอดของผู้สร้าง ไม่ใช่ Requirement ของ Game Jam
สรุป: Game Jam ที่เริ่มจาก 84×48 แล้วจบที่การออกแบบ Mainboard ใหม่
Trick Shot II แสดงให้เห็นว่า Constraint เล็ก ๆ สามารถเปลี่ยนทิศของ Project ได้มากแค่ไหน
เริ่มจาก:
ถ้าผู้สร้างหยุดแค่เกมบน Browser Trick Shot II ก็เป็น Game Jam entry ที่สำเร็จแล้ว
แต่การพยายามให้มันกลับไปอยู่ ใน Form Factor ของ Nokia 3310 จริง ทำให้ต้องเรียนเพิ่มทั้งเรื่อง LCD response, Pixel geometry, Hardware contact, PCB thickness และ Mechanical clearance
โปรเจกต์นี้มีทั้ง Game Engine, Physics และ PCB แนะนำอ่าน Source ต้นฉบับควบคู่กัน
โดยเฉพาะคนที่ต้องการสร้าง Hardware ตาม ควรตรวจ Creator documentation และ Repository ปัจจุบันโดยตรง เพราะ Board revision, firmware และ file structure สามารถเปลี่ยนได้
References / แหล่งข้อมูลต้นฉบับ
- Hackaday — Taking A Nokia 3310 Game Jam To The Nth Degree
- Hoani Bryson — Trick Shot II
- Hoani Bryson — Nokia 3310 Hardware Teardown
- Hoani Bryson — Lightweight Physics
- Hoani Bryson — Efficient Image Embedding in TinyGo
- Nokia 3310 Jam 8 — Game Jam Rules
- Nokia 3310 Jam 8 — Game Jam FAQ
- GitHub / Hoani — 3310 Engine
- GitHub / Hoani — 3310 Pico Custom PCB
อยากเริ่มทำเกมหรือ Embedded Project บน Raspberry Pi Pico?
Project แบบ Trick Shot II แสดงให้เห็นว่า Raspberry Pi Pico-family board ไม่ได้จำกัดอยู่แค่งาน Sensor หรือ Automation แต่สามารถเป็นฐานให้ Game, Custom Interface และ Embedded Device ที่ออกแบบเฉพาะทางได้
หากกำลังทำ Project ด้วย Raspberry Pi Pico, ESP32, Display, Sensor หรือ Development Board สามารถสอบถามทีม Globalbyte เรื่องบอร์ดและอุปกรณ์ที่เหมาะกับ Architecture ได้
Hackaday ระบุความละเอียดจอเป็น 94×48 pixels แต่ Nokia 3310 Jam 8 และ Creator documentation ระบุ Nokia 3310 LCD ที่ใช้ใน Project เป็น 84×48 pixels บทความนี้จึงยึด 84×48 ตาม Source ต้นทาง
ค่า LCD update สูงสุดประมาณ 67Hz, Empty→Fill ประมาณ 50ms และ Fill→Empty ประมาณ 125ms มาจากการตรวจและการวัดของผู้สร้างใน Hardware Teardown ไม่ควรตีความเป็น Specification ที่รับประกันกับ LCD ทุกชิ้นหรือทุกสภาพแวดล้อม
Pixel aspect ใกล้ 4:5, พื้นที่แสดงผลประมาณ 30.5×21.5mm และ Logical Grid 5×4 เป็นการวัดและ Design Decision ของผู้สร้างสำหรับ Project นี้ ไม่ใช่ Universal Specification สำหรับ Display PCD8544 ทุก Module
การทดลอง Grayscale ด้วยการสลับ Pixel ON/OFF ให้ผลไม่สม่ำเสมอบนจอจริง จึงไม่ควรอธิบายว่า Nokia 3310 รองรับ Grayscale แบบใช้งานทั่วไป
Physics 60Hz เป็น Simulation rate ของ Trick Shot II ส่วน LCD update rate เป็นอีก Parameter หนึ่ง และไม่ควรนำมาใช้แทนกัน
Prototype PCB รอบแรก ถูกสั่งหนา 1.6mm ขณะที่ Mainboard เดิมหนาประมาณ 1.0mm ทำให้ Assembly ปิดไม่พอดี ข้อมูลนี้เป็นประสบการณ์จาก Project ไม่ใช่คำยืนยันว่า Nokia 3310 ทุก Hardware Revision ใช้ Mechanical stack-up เหมือนกันทั้งหมด
Hackaday เรียก Controller โดยรวมว่า Pi Pico ขณะที่ Current Repository มี Pico-family footprint ที่รองรับ Pico 2 และมี RP2350-related metadata แต่ Source ที่ตรวจไม่ได้ยืนยันว่า Prototype ทุก Revision ใช้ RP2350 เหมือนกันทั้งหมด
Creator ระบุว่า Buzzer มี Documentation เดิมไม่สมบูรณ์ และเลือกขับแบบระมัดระวัง เสมือนเป็น Inductive Load ส่วน Vibration Motor ไม่ควรถูกขับตรงจาก GPIO โดยไม่มี Driver และ Freewheeling protection
บทความนี้ไม่ได้สร้าง Battery Runtime, Current Consumption, PCB BOM Cost, Buzzer Frequency Range, Vibration Current, Game Level Count, Playtime หรือ Performance Comparison ระหว่าง Nokia CPU เดิมกับ Raspberry Pi Pico เพราะ Source ไม่ได้ให้ข้อมูลเหล่านี้อย่างเพียงพอ
การแกะหรือดัดแปลงอุปกรณ์อิเล็กทรอนิกส์เก่า อาจทำให้ Hardware เสียหาย ควรตรวจ Schematic, Pinout, Polarity, Battery connection และ Power path จาก Source ต้นฉบับก่อนจ่ายไฟ