Project KFS 將會暫停一陣子
上星期五 city 開到半夜
所以跑去 "伯德書店" 閒晃
隨便翻了幾本有關寫遊戲的書
發現都不太有用 -_O"
只有一本寫的還蠻不錯的
裡面開頭就講... ( 大概意思 )
很多人一開始就想寫出像 DOOM 的遊戲
但成功的機率不大... 因為不切實際
初學者應該先從一些簡單的小遊戲著手
如果幾個禮拜之內能寫出來就該偷笑了
沒錯... 寫程式都是這樣
應該要先有好的規畫
再從最基本的寫起...
等穩定後再照著規畫慢慢的加料
標準訂太高... 到頭來只是一場空 *咚~ 鏘!*
2007年12月24日 星期一
2007年12月20日 星期四
2007年8月13日 星期一
2007年7月1日 星期日
『 02.XX - PNG : 20070701 』
這幾天對於解無壓縮的 Indexed PNG 圖檔有了點進展。對於之前畫面會扭曲的原因,後來發現是因為每個讀到的資料區塊的第一個位元都要略過… (別問我為什麼,我只是發現它並非屬於在真正的資料裡頭) 結果就真的,每第一個位元都跳過後,解出來的資料就完全正確!
之後很快的就進行下一步… 解無壓縮的 24 bits RGB 格式圖檔,結果馬上在解資料上就錯了。當時還蠻火大的 ^%$#@! 因為代表之前寫好的解無壓縮的程式碼在 RGB 格式會有錯… 那會不會代表我要針對不同格式都要有一套解壓縮的方法?那哪寫的完…
後來靜下心來,看圖檔的資料… 慢慢的對照… 結果發現是 LEN 給的並不是真正所要讀的長度。天啊~ 之前要跳過每第一個位元,現在又要因為 RGB 而計算真正的資料長度… 為什麼不像 DEFLATE 規格裡寫的那麼簡單?看來我要再找一天來看看 libpng & zlib 的程式碼 (不好懂),看到底是要怎樣寫才對…
最後附上剛剛的成果:顯示一張 24 bits 的 PNG 圖檔。
之後很快的就進行下一步… 解無壓縮的 24 bits RGB 格式圖檔,結果馬上在解資料上就錯了。當時還蠻火大的 ^%$#@! 因為代表之前寫好的解無壓縮的程式碼在 RGB 格式會有錯… 那會不會代表我要針對不同格式都要有一套解壓縮的方法?那哪寫的完…
後來靜下心來,看圖檔的資料… 慢慢的對照… 結果發現是 LEN 給的並不是真正所要讀的長度。天啊~ 之前要跳過每第一個位元,現在又要因為 RGB 而計算真正的資料長度… 為什麼不像 DEFLATE 規格裡寫的那麼簡單?看來我要再找一天來看看 libpng & zlib 的程式碼 (不好懂),看到底是要怎樣寫才對…
最後附上剛剛的成果:顯示一張 24 bits 的 PNG 圖檔。
2007年6月27日 星期三
『 02.03 - PNG : PLTE 』
PLTE (0x50, 0x4C, 0x54, 0x45)
#define IX_8B5B(x) ((u8)(((u16)(x) <<>> 8))
以上的 macro 則是將 x 值 * 32 後再 / 256 用途就是把 0 ~ 255 (8 bits) 的數字轉換成 0 ~ 31 (5 bits) 但我也不確定我這做法是否正確,至少目前看起來還算正常。
- RGB (3 bytes)
Each palette's RGB (Red, Green, Blue) color value (0x00 ~ 0xFF).
For example:
0xFFFFFF = White
0x000000 = Black
0xFF0000 = Red
0x00FF00 = Green
0x0000FF = Blue
#define IX_8B5B(x) ((u8)(((u16)(x) <<>> 8))
以上的 macro 則是將 x 值 * 32 後再 / 256 用途就是把 0 ~ 255 (8 bits) 的數字轉換成 0 ~ 31 (5 bits) 但我也不確定我這做法是否正確,至少目前看起來還算正常。
2007年6月23日 星期六
『 02.XX - PNG : 20070623 』
今天下午終於又繼續寫程式了 (幾天前得重感冒) 但還是沒辦法靜下心來讀 LZ77 的壓縮規格。後來想說這樣下去也不是辦法,所以改向先從沒壓縮的資料下手…基本上還蠻容易的,只要反復的:讀區塊的資料長度,將這長度的資料直接複製到目標…直到最後一個區塊。但之後就開始遇到一些小曲折…
一開始先弄一張全白的 PNG 來試著顯示在畫面上,結果還算成功…
之後就把原本要擺的畫面放進來試著顯示,結果有點淒慘…

一開始先弄一張全白的 PNG 來試著顯示在畫面上,結果還算成功…
之後就把原本要擺的畫面放進來試著顯示,結果有點淒慘…

不知為何整個顏色都跑掉,圖本身也扭曲了一邊。之後就一直在看是不是程式哪裡沒寫對,還是解讀資料時有誤…到後來才發現顏色會跑掉都是 RGB15 這個 macro 搞的鬼。原因是原本的 PNG 是以 24 bits 為單位來儲存每個像素 (每個 RGB 分別為 8 bits) 但是在 NDS 的 Framebuffer 模式底下則是 15/16 bits 為單位 (每個 RGB 分別為 5 bits) 所以產生色素顏色顯示錯誤的問題。至於解決的方法很簡單…那就是讀 PLTE 時順便將每個 RGB 值 * 5 / 8 來換算成顯示的單位就行了。
至於扭曲的問題,應該跟寬度記算錯誤有關…目前還找不到真正的原因,先暫時偷改了一下正確的程式碼讓它寬度少一格來把圖案調正。
暫時先這樣了,明天有時間再好好研究問題所在…
至於扭曲的問題,應該跟寬度記算錯誤有關…目前還找不到真正的原因,先暫時偷改了一下正確的程式碼讓它寬度少一格來把圖案調正。
暫時先這樣了,明天有時間再好好研究問題所在…
2007年6月16日 星期六
『 環 境 畫 面 』
2007年6月7日 星期四
『 02.02 - PNG : IHDR 』
IHDR (0x49, 0x48, 0x44, 0x52)
- Width (4 bytes)
Image width in pixels. - Height (4 bytes)
Image height in pixels. - Bit Depth (1 byte)
Number of bits per sample or palette index. Valid values are 1, 2, 4, 8, 16. - Color Type (1 byte)
Defines PNG image type. Valid values are 0, 2, 3, 4, 6.
0 = Greyscale.
2 = Truecolor.
3 = Indexed-color.
4 = Greyscale with alpha.
6 = Truecolor with alpha. - Compression Type (1 byte)
0 = Deflate/inflate compression with a sliding window of at most 32768 bytes. - Filter Method (1 byte)
0 = Adaptive filtering with five basic filter types. - Interlace Method (1 byte)
0 = No interlace, 1 = Adam7 interlace.
2007年6月4日 星期一
『 00.01 - PNG : General 』
PNG File Header
大小:8 bytes
內容:0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
PNG Chunks
大小:8 bytes
內容:0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
PNG Chunks
- Chunk Length
4 bytes unsigned integer specifying "Chunk Data" size. Valid value = 0 ~ 2^31-1 - Chunk Type
4 bytes of uppercase and lowercase ASCII letters.
Byte 1: Uppercase = Critical, Lowercase = Ancillary.
Byte 2: Uppercase = Public, Lowercase = Private.
Byte 3: Reserved, must be uppercase.
Byte 4: Uppercase = Unsafe to copy, Lowercase = Safe to copy. - Chunk Data
Can be zero length. - Chunk CRC
4 bytes of CRC calculated on the preceding Chunk Type + Chunk Data.
- PNG Specification : 2nd Edition [http://www.w3.org/TR/PNG/]
- PNG - Wikipedia [http://en.wikipedia.org/wiki/PNG]
- PNG Specification: File Structure [http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html]
2007年6月1日 星期五
『 研 發 環 境 』
以下是我目前的研發環境…
基本環境
作業系統:Windows XP SP2
程式編寫:Programmers Notepad (DevKitPro)
繪圖軟體:Adobe Photoshop CS
軟體開發套件 (SDK)
名稱:DevKitPro
版本:1.4.3
網址:[http://www.devkitpro.org]
簡介:目前網路上最有人氣的免費套件,有支援 NDS/GBA、NGC 和 PSP。
模擬器 (Emulator)
名稱:iDeaS
版本:1.0.1.5
網址:[http://spazioinwind.libero.it/linoma/ideas.html]
簡介:相容性高也有在持續更新。最新版有修正 3D 顯示的問題,也支援遊戲儲存的功能。
基本環境
作業系統:Windows XP SP2
程式編寫:Programmers Notepad (DevKitPro)
繪圖軟體:Adobe Photoshop CS
軟體開發套件 (SDK)
名稱:DevKitPro
版本:1.4.3
網址:[http://www.devkitpro.org]
簡介:目前網路上最有人氣的免費套件,有支援 NDS/GBA、NGC 和 PSP。
模擬器 (Emulator)
名稱:iDeaS
版本:1.0.1.5
網址:[http://spazioinwind.libero.it/linoma/ideas.html]
簡介:相容性高也有在持續更新。最新版有修正 3D 顯示的問題,也支援遊戲儲存的功能。
2007年5月29日 星期二
『 前 序 』
當年…應該還是國中時代,跟兩位好友合買了「Ultima VIII Part 2: Serpent Isle」(創世紀七第二部:蛇島)。這遊戲算是我第一個最迷的電腦遊戲,也讓我們玩得沒天沒夜,從此我也開始好奇著寫遊戲的世界…當時每天坐在電腦前開著 QBASIC 就是想弄出個什麼東西,但都毫無結果。
高中畢業之後,因著網路漸漸普遍,我開始在網路上尋找別人分享出來的寫遊戲文章。就這樣自己一邊摸索,用 C 寫程式,用小畫家畫圖…很奇妙的我竟然寫出一小段在 DOS VGA 底下跑的遊戲!內容很簡單,由上往下的視角、方向鍵控制人物走動、背景捲動、還有搞笑的隱形牆。雖然只是很小的東西卻讓我高興的不得了。當然也有秀給我一些朋友看,他們也是蠻驚訝的!
然而夢想卻在這時暫停了…學業煩忙加上放假打工,一直都沒再有時間給自己。雖然之後的幾年也是有陸陸續續的寫些小程式 (WinCPK = 即時雪花產生器、etBIOS = 小飛機,DirectX Demo) 但總沒有一個是真正完成的遊戲…
2007 年 04 月很突然的親自玩到 NDS 後就被它迷上了…雖然主機已經推出來幾年了,硬體上也沒 PSP 來的強,但它的雙螢幕 + 觸碰功能卻能讓遊戲有了新的發展空間。之後這幾天就一直在網路上找著 NDS 的研發環境…腦海裡也有了一個遊戲的構想。為了這次不再半途而廢,決定開個部落格來記載進度與心得,也希望能藉此認識有共同興趣的來彼此交流。
我 會 努 力 邁 著 夢 想 前 進 !
高中畢業之後,因著網路漸漸普遍,我開始在網路上尋找別人分享出來的寫遊戲文章。就這樣自己一邊摸索,用 C 寫程式,用小畫家畫圖…很奇妙的我竟然寫出一小段在 DOS VGA 底下跑的遊戲!內容很簡單,由上往下的視角、方向鍵控制人物走動、背景捲動、還有搞笑的隱形牆。雖然只是很小的東西卻讓我高興的不得了。當然也有秀給我一些朋友看,他們也是蠻驚訝的!
然而夢想卻在這時暫停了…學業煩忙加上放假打工,一直都沒再有時間給自己。雖然之後的幾年也是有陸陸續續的寫些小程式 (WinCPK = 即時雪花產生器、etBIOS = 小飛機,DirectX Demo) 但總沒有一個是真正完成的遊戲…
2007 年 04 月很突然的親自玩到 NDS 後就被它迷上了…雖然主機已經推出來幾年了,硬體上也沒 PSP 來的強,但它的雙螢幕 + 觸碰功能卻能讓遊戲有了新的發展空間。之後這幾天就一直在網路上找著 NDS 的研發環境…腦海裡也有了一個遊戲的構想。為了這次不再半途而廢,決定開個部落格來記載進度與心得,也希望能藉此認識有共同興趣的來彼此交流。
我 會 努 力 邁 著 夢 想 前 進 !
訂閱:
意見 (Atom)








