Sufficiency Economy
Group Blog
 
All blogs
 

เขียนโปรแกรมบน DSi : ปฐมบท



หลังการหายหน้า ไปนานจากการเขียน Blog เพราะติดภาระกิจ(มัง) ตอนนี้พอมีเวลาและอีกทั้งเพิ่งได้ซื้อ NintendoDSi ตัวใหม่ สีดำสวย (คนขายก็น่ารัก )

เลยอยากจะลองเขียนโปรแกรมอีกสักครั้ง โดย spec. มีการปรับเปรียบนิดหน่อย เช่น จอใหญ่ขึ้น จาก 3 -> 3.25 นิ้ว แต่จำนวน Pixel เท่าเดิม
มีกล้องขนาด 3 แสน pixels ให้ 2 ตัว
มี RAM เพิ่ม 4 -> 16 MB
มี ที่เสียบ SD card แทน slot2 GBA

เครื่องมือที่ใช้ ก็เหมือนเดิมคือ devkitPro และ Tool อื่นๆ ตามที่เคยแนะนำในกระทู้
เก่าๆ ที่กลุ่ม NintendoDS Programming

โดยในส่วน libnds ได้มีการปรับเปรียบบางส่วน ทำให้ source code เก่า
อาจต้องปรับเปรียบบาง ถ้าต้องการมา compile ใน libnds version ใหม่ 1.6.3

ส่วนตลับcopy ใช้ R4i ซึ่งเห็นว่าตระกูลนี้มีหลายยี่ห้อมาก รวมทั้งมีของเลียนแบบด้วย (copy โดน copy เหมือนกงกรรมกงเกวียน) แต่ที่ซื้อคือ R4ultra ของแท้ (มัง) ซึ่งเป็นแบบ Slot1 (ก็ dsi slot2 ไม่มีนิน่า)




 

Create Date : 02 กรกฎาคม 2552    
Last Update : 4 พฤศจิกายน 2555 15:05:35 น.
Counter : 622 Pageviews.  

ทดลองสร้างไฟล์ cheat ของ Supercard Lite Micro SD



พอดีอยากเล่นเกมส์ Phantasy Star Zero ของ DS
แต่มีการเขียน Code ดักไว้คือเมื่อสร้างตัวละครเสร็จ แล้วSave ก็จะ
hang แต่มีคนเขียน cheat code แก้แล้วคือ
020C5690 E3A00000
020C5694 E12FFF1E
020C59F0 E3A00000
020C59F4 E12FFF1E

แล้วจะนำมาใช้ใน Supercard Lite MicroSD อย่างไร
Search แล้วได้วิธีจากที่ //www.scdev.org/forum/index.php/topic,14549.0.html
หลักการคือ สร้าง Action Replay (txt) แล้วแปลงเป็น .cht แล้วแปลงเป็น .scc
โดยใช้ Program จาก //eng.supercard.cn/soft_scl.htm
ar2cht.ext สำหรับ .txt -> .cht
cht2supercardcheat .cht->scc
ซึ่งต้องมี ไฟล์ Unicode ด้วยไม่งั้นเมื่อแปลเสร็จจะได้ O byte

รูปแบบ Action Replay คือ
หัวข้อหลักให้ใส่ @
หัวข้อรองให้ใส่ #
เช่น
@Phantasy Star Zero (J) Piracy Fix

020C5690 E3A00000
020C5694 E12FFF1E
020C59F0 E3A00000
020C59F4 E12FFF1E

ต่อไปถ้ามี code ก็นำไปสร้างเป็น scc ได้แว้วว




 

Create Date : 16 กุมภาพันธ์ 2552    
Last Update : 16 กุมภาพันธ์ 2552 20:58:14 น.
Counter : 1122 Pageviews.  

เขียนเกม บนเครื่อง Nintendo DS : การใช้ Touch Screen


ครั้งนี้เป็นเรื่องการใช้ Touch Screen ตอนแรกก็คิดว่าง่าย แต่ทำไปทำมา
ยากเหมือนกัน
sourcecode+nds กดโหลดได้เลยครับ

======================================
touch=touchReadXY(); เป็นการอ่านค่าข้อมูลการใช้ ปากกา
ซึ่งจะคล้ายๆการอ่านค่าการกดปุ่ม คือ scanKeys();

KEY_TOUCH สำหรับการตรวจสอบว่าปากกา กดบน หน้าจอหรือยัง
โดยใช้คู่กับ pressed = keysDown(); และถ้าสังเกตดีๆ จะมีการใช้
held = keysHeld(); ด้วย ข้อแตกต่างระหว่าง keysDown(); และ
keysHeld(); คือ เรื่องความต่อเนื่องของการกดปากกา ???

คำสั่งข้างล่าง นี้ถ้า เปลี่ยน held เป็น pressed จะเป็นเขียนเป็นจุดๆไป ?
if ( (held & KEY_TOUCH ) && ( touch.px >= stX ) && (touch.px <= stX +w) && ( touch.py >= stY ) && (touch.py <= stY +h))

คำสั่งนี้ มีหน้าที่ ไม่ให้เกิดการ ลงจุด ก่อน กดปากกา ?? งงเหมือนกัน 55
แต่ดูตามตัวอย่างของ libnds
if ( !(held & KEY_TOUCH) || touch.x == 0 || touch.y == 0) { continue;}

touch.px และ touch.py เป็นการบอกตำแหน่งปากกา สังเกต ดีๆ จะมีตัว p ด้วย

อีกอย่างเวลาเราเคลื่อนปากกาเร็วๆตำแหน่งของจุดจะไม่ต่อกัน ดังนั้นจึงต้องใช้ฟังก์ชั่นการเขียนเส้นตรง เข้ามาประกอบ โดย Modify จาก
//en.wikipedia.org/wiki/Bresenhams_line_algorithm

ที่เหลือ ก็ดูใน sourcecode ละกันครับ




 

Create Date : 09 พฤศจิกายน 2551    
Last Update : 9 พฤศจิกายน 2551 16:50:04 น.
Counter : 645 Pageviews.  

เขียนเกม บนเครื่อง Nintendo DS : การ Fade ระหว่าง 2 ภาพ และการเล่นเสียง MP3


.NDS + SourceCode โหลดได้เลยครับ

มาต่อกันเรื่อง ทำ Effect
คือการ Fade ระหว่างภาพสองภาพ
Register ที่เกี่ยวข้องคือ BLEND_CR และ BLEND_AB

การตั้งค่า
BLEND_CR= BLEND_ALPHA | BLEND_SRC_BG2 |BLEND_DST_BG3;
หมายถึง ให้ blend จาก BG2 ไปยัง BG3

การตั้งค่า
BLEND_AB = ข้อมูล 16 bit
bit 0-4 สำหรับ Source
และbit 8-12 สำหรับ Destination
โดยค่า 0 ไม่เห็นภาพ แต่ถ้าค่า 15 เห็นภาพชัดสุด
ดังนั้นค่าเรา set ค่า bit 0-4 ให้มีค่า 0xF และ set ค่า bit 8-12 ให้มีค่า 0
จะเห็นภาพผู้หญิงภาพเดียว ในทางตรงกันข้ามถ้ากำหนดค่า bit 0-4 เป็น 0 และ bit 8-14 เป็น 0xF จะเห็นภาพผู้ชายภาพเดียว
ซึ่งเราทำการ update ค่า BLEND_AB ในช่วง VBlank โดยฟังก์ชั่น UpdateBlend
และเนื่องจากครั้งนี้เรามีการเล่นเสียง mp3 ดังนั้น เราจึงจำเป็นต้องใส่ฟังก์ชั่น UpdateBlend ใน ฟังก์ชั่น AS_SoundVBL()

การเล่นเสียง MP3
ใช้ Libary As_Lib ซึ่งหาได้จากที่นี้
เบื้องต้น เราต้อง include
#include "as_lib9.h"
และกำหนด file เสียง
#include "test_mp3.h"
แล้วอย่าลืมนำไฟล์ mp3 ไปใส่ใน Folder "data" ด้วยนะครับ

ตั้งค่า Libary เบื้องต้นด้วย
AS_Init(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH);
AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);

เล่น Mp3 ด้วย
AS_MP3DirectPlay((u8*)test_mp3, (u32)test_mp3_size);
และ Loop เพลงด้วย
AS_SetMP3Loop(true);

และให้นำไฟล์ as_lib9 as_lib7 helix มาใส่ด้วย ดูใน code ประกอบล่ะกันครับ

สุดท้ายมีการปรับปรุงการแสดงภาษาไทยให้ใช้ memory น้อยลง โดยให้แสดงในMode 0 (คือการแสดงผลแบบ Text หรือ Tile) คือการปรับปรุงการ Putpixel โดยมีการ mark จุดที่ไม่เกี่ยวข้องก่อนใส่จุด ? ลองไล่ code ตามอีกที่นะครับจะเข้าใจมากขึ้น

ตอนนี้ก็น่าจะพอทำ Game Adventure ง่ายๆ สักเกมได้แล้ว ใครทำได้ส่งมาให้ดูด้วยนะครับ บอกอย่างนี้หลายครั้งแต่ไม่เห็นมีใครส่งมาเลยอ่ะหรือเราอธิบายไม่รู้เรื่องหว่า




 

Create Date : 11 ตุลาคม 2551    
Last Update : 11 ตุลาคม 2551 23:19:55 น.
Counter : 1144 Pageviews.  

เขียนเกม บนเครื่อง Nintendo DS : Fade In, Fade Out, Mosaic และการ Scroll ฉากหลัง


Download .NDS + Source Here

มาครั้งนี้จะทดลองเล่นพวก effect ต่างๆ ได้แก่ Fade In, Fade Out,
Mosaic และการ Scroll ฉากหลัง โดยมีหลักการง่ายดังนี้
Fade In และ Fade Out ทาง NDS มี Register ที่สำหรับจัดการในเรื่องนี้ 2 ตัวคือ BLEND_CR และ BLEND_Y
BLEND_CR =BLEND_FADE_BLACK|BLEND_SRC_BG0;
คำสั่งนี้เพื่อกำหนดให้มีการ Fade เป็นสีดำ(ถ้าเปลี่ยนเป็นBLEND_FADE_WHITE จะเป็นสีขาวมังไม่ได้ลอง)
และกำหนดให้แสดงที่ Background 0
โดยมีลำดับการ Fade จาก 0 -16 (0=ไม่fade ... 16 = เป็นสีดำ)
ดังนั้นใน Function จึงมีการไล่ระดับ จาก 0 ถึง 16 สำหรับ Fade Out
และไล่ระดับจาก 16 ถึง 0 สำหรับ Fade In

ส่วนการทำภาพMosaic จะใช้การเปลี่ยนค่าของ register MOSAIC_CR
สำหรับการทำภาพ Mosaic ของ Backgroud จะใช้ 8 bit ล่าง ซึ่งจะแบ่งเป็น
4 bit บน (ขนาดในแกนY)และ 4 bit ล่าง(ขนาดในแกนX)
ดังนั้นค่าของขนาด Pixel จะไล่จาก 0 ถึง 15 โดยถ้าเป็น 0 ขนาดจะไม่เปลี่ยนแปลง และถ้าเป็น 15 จะทำให้pixel มีขนาดใหญ่สุด แล้วเราต้องไป enable Mosaic ที่ BACKGROUND.control[0] ด้วยค่าBG_MOSAIC_ON

สุดท้ายเป็นส่วนการ Scroll ฉากหลัง โดยการ ปรับค่า SUB_BG0_X0 สำหรับการ Scroll ในแนวแกน X และกำหนด BACKGROUND_SUB.control[0] ให้เป็นแบบ BG_WRAP_ON เพราะเมื่อ scroll จนสุดภาพ ระบบจะนำภาพทางซ้ายมาต่อ ?
ส่วนการ ปรับค่า SUB_BG0_X0 ต้องทำตลอด เราจึงใช้ Interrupt VBLANK เพื่อเรียก function UpdateScroll() ที่เราสร้างขึ้นมา

เพิ่มเติมสักนิด ถ้าสังเกต ใน code ดีๆ จะพบว่าการแสดงผลภาษาไทยมีการปรับเปลี่ยนนิดหน่อย ตรงการ putpixel เนื่องจากแต่ก่อนกำหนด Background เป็น BMP16bit ทำให้ต้องใช้หน่วยความจำมากคือ
2 byte x 256 x 192 = 96 kBytes เราเลยทดลองเปลี่ยนเป็น BMP8bit ทำให้ลดการใช้หน่วยความจำ VRAM = 1 byte x 256 x 192 = 48 kBytes แต่ต้องมีการปรับเปลี่ยนนิดหน่อย ในการเข้าถึงหน่วยความจำ เพราะระบบ NDS จะเขียนอ่านในรูปแบบ 16 bit (ทำไมไม่ทำแบบ 8 bit หว่า) จึงต้องมีการคงค่า จุดเก่าที่เขียนไปแล้ว
ลองไล่ code ดูละกัน ครับ

ครั้งหน้าคงหา effect อีกสักหน่อย เพื่อทำเกมพวก Adventure แบบ เกม Metal Slader Glory แต่ตอนนี้หา Font ไทย สวยๆ ไม่ได้เลยอ่ะ แบบ 8x16 น่า




 

Create Date : 03 ตุลาคม 2551    
Last Update : 3 ตุลาคม 2551 20:20:01 น.
Counter : 952 Pageviews.  

1  2  3  4  5  6  7  8  

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.