대변 파이터 (CAANOO 이식作)

일전에 GP2X WIZ로 만들었던 대변 파이터 embedded 판을 CAANOO로 포팅을 하였다. CAANOO에 맞는 키 설정으로 바뀌었으며, 사용 버튼은 다음과 같다.

<1인용>
방향키: 캐릭터를 8 방향으로 움직임
B키: 일반 공격
A키: 특수 공격
Home키:종료

<2인용>
<player 1>
왼쪽방향키: 캐릭터를 8 방향으로 움직임
<자동> 일반 공격
L키: 특수 공격
Home키: 종료

<player 2>
오른쪽방향키:캐릭터를 8 방향으로 움직임
<자동> 일반 공격
R키: 특수 공격
Home키: 종료

사용자 삽입 이미지
CAANOO용 대변 파이터 (198K)

Posted by 안영기

2011/05/29 20:20 2011/05/29 20:20
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/32

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

또 다른 지식의 성전 (CAANOO 이식作)

일전에 GP2X WIZ로 만들었던 또 다른 지식의 성전 embedded 판을 CAANOO로 포팅을 하였다. 역시 Lore 성만 플레이 가능하며 사용 버튼은 다음과 같다.

방향키: 캐릭터를 4 방향으로 움직임
B키: 확인
A키: 취소
II 키: 메뉴
Home키:종료

사용자 삽입 이미지
CAANOO용 또 다른 지식의 성전 (309K)

(CAANOO 버전은 CAANOO의 LCD 특성상 윗 부분 몇 픽셀이 베젤에 가려집니다)

Posted by 안영기

2011/05/29 19:55 2011/05/29 19:55
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/31

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

GP2X WIZ의 libcastor 이용 프로젝트

항상 일과는 별개로 집에 와서는 개인 프로젝트를 하면서 여러 가지의 실험적인 일을 하곤 했다. 하지만 전부터는 그마저도 쉽지 않았고 실제 성공한 개인 프로젝트는 거의 없다시피 하였다. 대부분이 기술적인 난제라서가 아니라 개인적인 시간이 부족하여 흐지부지 것이 대부분이다. 

올해도 게임에서 sight of line 어떻게 빠르게 처리할 있을까 하는 주제로 연구(?)하였고 엄청난 처리 속도의 알고리즘이 만들어진 것인 알았지만 결국 초기의 아이디어에 헛점이 발견되어해결할 없는 경우 생기고 말았다. 그래서 폐기. 

다음에는 대변 파이터 1.0 버전을 만들기 위해 renewal 작업을 했었다. 효과음 부분을 집어 넣고, 소스 공개를 목적으로 했기에 구조를 최적화 하고, 프레임을 2 빠르게 만들었다. 프레임이 2배가 늘어 나게 되면서 디테일과 관련된 일부 버그가 발견되어 현재는 방치된 상태다. (언젠간 다시 것이라 생각한다) 

그리고 작년에 것이 바로 지금 공개하는 것이다. 원래 libcastor라는 것은 GP2X Wiz native 입출력 기능을 가진 라이브러리인데, 이것을 통해서 Wiz 고질 문제인 tearing 근본적으로 없애자는 아이디어로 시작한 것이다. 최초에는 Wiz 숨겨진 기능인 32-bit frame buffer mode double buffer flipping 기능을 사용하여 보았으나 실제로는 H/W 처리되지 않는 속도 저하가 있었다. 하여간 tearing 없애기 위해 Wiz 세로 모드로 놓고 가로 모드 좌표계로 모두 바꾸어서 출력하는 시뮬레이션 레이어를 만들었는데 그것이 flat experience 불리는 라이브러리다. (이것도 여러 플랫폼에 이식이 되어 있다) 

압축을 풀면 나오는 구조는 다음과 같고, 파일에 대한 설명으로 마무리 지으려 한다. (개인적인 성취감 또는 의무로서 올리는 것이라 다른 사람의 편의성은 생각하지 않았다) 

사용자 삽입 이미지

(233k)

dejadun
|  
|   Makefile
|
+---avej_util
|       avej_util_font12x12.cpp
|       avej_util_font12x12.h
|       avej_util_pascal_set.cpp
|       avej_util_pascal_set.h
|       avej_util_tile_map.cpp
|       avej_util_tile_map.h
|      
+---bin
|       deja512_1.png
|       deja512_2.png
|       font1bit_1024_512.png
|       Roperr.maf
|      
+---deja_dun
|       Makefile
|       pdm_chara.cpp
|       pdm_chara.h
|       pdm_config.h
|       pdm_item.h
|       pdm_main.cpp
|       pdm_res.cpp
|       pdm_res.h
|       pdm_type.h
|       pdm_window.cpp
|       pdm_window.h
|       pdm_window_map.cpp
|       pdm_window_map.h
|      
\---flat_experience
    |   Makefile.lib
    |  
    +---include
    |       flat_experience.h
    |       pixel_format.h
    |       sm_util.h
    |      
    +---lib
    \---src
        |   flat_board.h
        |   flat_experience_display.cpp
        |   flat_experience_input.cpp
        |   image_decoder_png.cpp
        |   image_decoder_png.h
        |   sm_util.cpp
        |  
        +---target_bada
        +---target_common
        |       file_io.cpp
        |       system.cpp
        |      
        +---target_win32
        \---target_wiz
                castor.c
                castor.h
                polluxregs.h 

Makefile

이 프로젝트를 빌드하기 위한 Makefile. 실제로 cygwin에서 사용하였다.

GPH에서 제공한 툴체인이 root에 설치되어 있다고 가정하고 만든 것이기에 실제 빌드할 때는 몇몇 디바이스 헤더를 못 찾는다는 메시지가 나올 수 있다. 그때는 자신의 툴체인이 설치된 위치를 CPPFLAGS 에 추가해 주면 된다. 

avej_util

일종의 utility 들을 모아 놓은 디렉토리다. 

avej_util/avej_util_font12x12

12x12 한글 폰트를 출력하기 위한 것이다. bin/font1bit_1024_512.png 폰트를 사용한다. 

avej_util/avej_util_pascal_set

pascal의 내장 set과 같은 기능을 c로 구현한 것이다. 그다지 중요하지 않으니 자세한 설명은 생략한다. 

avej_util/avej_util_tile_map

맵의 구조를 표현하기 위한 부분이다. DejaVu map 파일인 *.maf을 읽는 부분이 들어 가 있다. 

bin

최종 결과물이 들어가게 되는 디렉토리. 타일 이미지, 스프라이트 이미지, 폰트 이미지, 맵 파일, 그리고 실행 파일이 들어 간다. 

deja_dun/pdm_chara

DejaVu 캐릭터를 나타내기 위한 class들을 담고 있다. 

deja_dun/pdm_config.h

게임을 위한 configuration 들어 있다. 

deja_dun/pdm_item.h

Item 위한 기본 구조를 담고 있다. 

deja_dun/pdm_main.cpp

게임의 구조를 가지기 위한 초기화와 종료 코드를 가지고 있으며 실제 데모의 실행 루프를 가지고 있다. 

deja_dun/pdm_res

데모에 사용되는 리소스를 모아 놓은 구조체를 담고 있다. 

deja_dun/pdm_type.h

데모에 공통으로 사용하는 기본 자료형을 정의하였다. 

deja_dun/pdm_window

데모에서 사용되는 window 기본 구조를 정의하였다. 데모 자체는 따로 진행하는 다른 프로젝트에서 가져 왔으므로 필요 없는 정의가 많다. 정확하게 이야기 하면 Wiz같은 embedded device 스크린에서 window 구조는 그다지 필요 없긴 하다. 

deja_dun/pdm_window_map

게임의 형태를 띄기 위해 map 출력하는 목적의 window 재정의하였다. 실제 모든 출력은 window에서 일어나게 된다. 

flat_experience

libcastor 사용함과 동시에 WIZ tearing 현상을 없애기 위해 세로 모드에서 가로 모드를 시뮬레이션 해주는 플랫폼이다. 

flat_experience/Makefile.lib

데모에는 전체가 빌드되는 형식이지만 원래는 Makefile 이용해서 독리적인 라이브러리로 배포 가능하다. 

flat_experience/include

flat experience 라이브러리를 사용할 필요한 헤더가 정의 되어 있다. 

flat_experience/lib

독립적인 라이브러리로 빌드 때는 디렉토리에 *.a 생성된다. 

flat_experience/src

flat experience 라이브러리의 소스가 담겨 있다. 

flat_experience/src/flat_board.h

2D 버퍼를 표현하기 위한 기본 구조를 정의를 하고 있다. 

flat_experience/src/flat_experience_display.cpp

세로 모드에 대한 2D 버퍼를, 가로 모드처럼 보이게 하기 위한 시뮬레이션이 들어 있다. 실제로 libcastor 사용해서 출력을 하는 곳이다. HW Flip, 32-bit color, 다중 layer 같이 WIZ 숨겨진(?) 기능을 쓰는 코드가 들어 있긴 하나 실제로 적용 했을 문제점이 많아서 그냥 버퍼를 copy하는 코드로 최종 반영되어 있다. 

flat_experience/src/flat_experience_input.cpp

Wiz 입력을 일반화 시키기 위한 내용이 들어 있다. 역시 libcastor 사용하고 있으며 WIZ touch screen 입력 관련된 것도 포함되어 있다. 

flat_experience/src/image_decoder_png

libpng 사용하여 PNG 파일을 읽는 부분이 들어 있다. 데모의 리소스를 읽는데 사용한다. 

flat_experience/src/sm_util.cpp

Utility 함수의 집합이 되어야 하지만 지금은 PNG 읽어 오는 여러 방법에 대한 것이 정의 되어 있다. 

flat_experience/src/target_bada

삼성의 스마트폰 플랫폼인 bada 포팅 레이어이다. 배포에는 내용이 빠져 있다. 

flat_experience/src/target_common

타게팅과 관련되어 기능적으로 일반화 가능한 것이 정의된 디렉토리이다. 

flat_experience/src/target_common/file_io.cpp

파일 접근에 대한 기본 기능이 정의되어 있다. bada 같이 std 파일에 접근이 불가능 경우를 위해 포팅 레이어로 빠져 있다. 

flat_experience/src/target_common/system.cpp

플랫폼의 시스템 특성과 관련된 기능이 정의되어 있다. 지금은 클럭 관련 기능만 들어 있다. 

flat_experience/src/target_win32

MS Windows 포팅 레이어이다. 배포에는 내용이 빠져 있다. 

flat_experience/src/target_wiz

GP2X Wiz 포팅 레이어이다. 

flat_experience/src/target_wiz/castor

libcastor 원본이다. 라이선스에 의하면 자유롭게 수정 배포 가능하다고 한다. 

flat_experience/src/target_wiz/polluxregs.h

libcastor 포함된 내용으로, Wiz 사용하는 pollux 대한 레지스터가 정의되어 있다.

Posted by 안영기

2010/11/20 07:23 2010/11/20 07:23
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/27

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Wiz용 OpenGL ES 출력 샘플

이번에는 이전에 소개한 멀티플랫폼 라이브러리를 이용해 Wiz에서 OpenGL ES 1.1를 사용한 출력을 하는 샘플을 만들었다. (이 글은 OpenGL을 다룰 줄 알고 command 창에서 빌드 하는데 불편함을 없는 사람을 기준으로 작성되었다.)


다운 받기 (574KB)


사용자 삽입 이미지
빌드 방법등은 이전과 다름이 없기 때문에 추가된 내용에 대해서만 적자면,

- 고정소수점 방식과 부동 소수점 방식을 컴파일 시 선택하게 하여 동작
- 직교 좌표계를 이용한 2D 출력과 프럼스텀을 이용한 3D 원근 출력
- RGBA4444 포맷과 A8 포맷의 texture 만들기 (RGB565는 이미 이전에 테스트 되었음)
- vertex buffer 출력 방식 vs index buffer 출력 방식
- vertex color 적용 vs 고정 color 적용
- triangle list / triangle strip / triangle fan 출력
- 기타 속성
        back-face culling on/off
        Z-buffer 설정
        Fog 설정 및 on/off


이며, 이것들이 골고루 섞여서 만들어진 것의 모습이 위의 그림이다.

Posted by 안영기

2009/10/28 23:44 2009/10/28 23:44
Response
0 Trackbacks , 2 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/19

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

또 다른 지식의성전 (WIZ 이식作)

WIZ로 이식한 것이다. 하지만 첫 번째  성에서만 대화가 가능하다.

WIZ로 이식하는데야 별로 시간이 걸리 않았지만 실제로 2만 라인 가까이 되는 정상적(?)인 게임 코드이고, 개발 문서까지 포함해서 1년 반 정도 걸려서 만든 것이다. (2007년~2008년 초반) 여러가지 사정에 의해 일반 공개는 불가능 하지만 이것도 완전한 게임으로 간주를 해서 24번 째 게임이라는 꼬리표를 붙인다.

사용자 삽입 이미지

Posted by 안영기

2009/08/30 11:22 2009/08/30 11:22
Response
0 Trackbacks , 23518 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/18

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

대변 파이터 (WIZ 이식作)

12년 전에 Pascal로 만들었던 것을 원본 소스를 바탕으로 WIZ로 포팅을 한 것이다.

- Pascal + x86 Assembler 소스를 C++로 컨버팅
- DOS용 디바이스 제어 부분을 WIZ로 포팅
- 640*400 -> 320*240 출력을 위한 가상 해상도 제어

등에 시간을 할애 했으며, 아래 글에 있는 'Wiz용 game 제작 샘플'에 공개한 플랫폼을 이용해서 만든 것이다. 소스의 경우에는 이전의 pascal code를 그대로 번역했기 때문에 전혀 정리가 되지 않았다는 이유로 올리지는 않는다.

사용자 삽입 이미지

my_23rd_shitfigh_0.98.zip

GP2X Wiz용 대변 파이터


MS Windows용 대변 파이터 (아직 바이너리 없음)

Posted by 안영기

2009/08/16 09:31 2009/08/16 09:31
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/16

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Wiz용 game 제작 샘플

MS WindowsGP2X wiz에서 동시에 개발하는 방법 중 한 가지를 소개한다.

이 글은 OpenGL을 다룰 줄 알고 linux 빌드에 불편함을 없는 사람을 기준으로 작성되었다.

다운 받기 (643KB)

 

1. 디렉토리 설명

.

+---bin                  최종 결과물이 남는 디렉토리

+---external             외부 헤더와 라이브러리 모음

|   `---wiz              OpenGL ES 1.1용 라이브러리

|       `---GLES         OpenGL ES 1.1용 헤더 디렉토리

`---src                  게임 소스 디렉토리

    +---app              게임 디렉토리

    `---avej_lite        게임 플랫폼

        `---adaptation   게임 플랫폼의 포팅 영역

 

2. Win32용 빌드와 실행 방법

 

./manoeri_25th.dsw VC++ 6.0 work space 파일인데, VC++ 6.0, VC++ 2005, VC++ 2008에서 모두 읽을 수 있기 때문에 dsw로 배포를 하는 것이다. 이 파일을 읽은 후 별 다른 설정 없이 빌드를 하면 bin 디렉토리에 실행파일이 생긴다. 실행 후 화살표 키를 사용하여 움직이고 ESC 키로 종료하면 된다. Win32의 경우는 그래픽 카드의 특성을 타는 부분이 있기 때문에 모든 PC에서 정상 동작 한다고는 보장할 수 없다.

 

Win32용으로 실행에 필요한 파일은 다음과 같은데, 같은 디렉토리에 넣고 실행하면 된다.

 

bin/manoeri_25th.exe

bin/libgles_cm.dll

bin/deja_dun.tga


WIN32에서 MingW를 사용하는 사람들을 위한 Makefile.mingw32가 추가되었다. mingw32.exe에 대한 path가 지정되어 있다면 그냥 빌드 가능하고, 그렇지 않다면 컴파일러 path 부분만 수정하면 정상적으로 빌드하고 실행 가능 할 것이다. (Cygwin + MingW에서 테스트 하였음)

 

3. WIZ용 빌드와 실행 방법

 

./Makefile GNU make file이다. 자신이 사용하는 WIZ용 컴파일러의 이름이 arm-linux-g++ 이면서 path가 지정되어 있다면 아무런 설정 없이 ‘make’를 하면 bin 디렉토리에 실행 파일이 생긴다. 만약 위의 조건을 만족하지 못한다면 Makefile 3번 째 줄에 있는 ‘CROSS_COMPILE  = arm-linux-’ 를 자신의 환경에 맞게 수정하면 된다.

 

WIZ용으로 실행에 필요한 파일은 다음과 같은데, 같은 디렉토리에 넣고 실행하면 되는데, 실행 후 화살표 키를 사용하여 움직이고 MENU 키로 종료하면 된다.

 

bin/manoeri_25th.gpe

bin/libopengles_lite.so

bin/deja_dun.tga 


4.
라이선스 설명

 

OpenGL ES와 관련된 헤더와 라이브러리의 출처는 다음과 같다.

 

- external/wiz/libgles_cm.lib, libgles_cm.dll
PowerVR OpenGL ES 1.1 Win32 데모에 있던 것이다.

- external/wiz/libgles_port.a
아직 비공개인 아카이브에서 ES 포팅부만 추출해서 만든 것이다.

- external/wiz/libopengles_lite.so
지폐인
자료실에 공개된 것이다.

- external/wiz/GLES 의 헤더
공개된 quake 소스에서 가져 온 것을 조금 수정한 것이다.

 

나머지는 직접 구현한 것이며(외부 추출 코드의 경우는 코드에 출처를 명기했음) 게임 개발 참고용으로 누구나 사용 가능하다.

 


5.
기타, 개발 시 유의 사항

 

MS Windows에서의 빌드는 아무런 문제가 없을 것이다. 단지 WIZ OpenGL ES 1.1 full spec.아 아니라 업체에서 정의한 OpenGL ES 1.1 lite라는 spec.이다 여기서 제한되는 기능에 대해서는 지폐인에 공개된 문서를 숙지하는 방법 밖에는 없다. 예를 들어 스펜실 버퍼를 사용하여 Win32에서 개발을 하여 결과를 보았더라도 그것이 WIZ에서 빌드를 하여 실행을 하면 제대로 실행되지 않는다.

 

개발시 가장 큰 문제는 WIZ용 빌드에 있다. 현재 WIZapplication을 빌드 할 수 있는 툴체인은 3개 이상이 있다.

 

가장 먼저는 OpenWIZ로 공개된 비공식 컴파일러가 있다. 이것은 http://dl.openhandhelds.org/에서 구할 수 있으며 linux 상에서만 구동된다. 따라서 PC linux를 깔든지, VmWare 등의 방법으로만 개발이 가능하다. 이것으로 WIZ에서 OpenGL ES를 사용한 개발은 충분히 가능하다. 하지만 현재 공개되어 있는 libopengl_lite.so와는 floating point 관련되어 충돌이 나고 있다. 따라서 ‘quake for WIZ’에 포함된 nanoX와 같은 방법인 ‘shared object의 동적 로딩으로만 해결할 수 있을 것 같다.

 

두 번째는 GP2X용으로 공개된 Windows용 크로스 컴파일러가 있다. 이것은 이미 GP2X 시절에 공식 SDK로 릴리즈 된 것이며 SDL을 사용하는 수준의 게임은 GP2XWIZ에서 동시에 돌 수 있는 게임을 만들 수 있다는 것을 확인했다. 여기서의 목적은 WIZ OpenGL ES를 기반으로 개발하는 것이므로 이 컴파일러는 배제하도록 하겠다. (이 역시 libopengl_lite.so과는 빌드 당시의 libc의 버전이 달라서 문제가 발생한다)

 

마지막으로는 GPH가 공식적으로 배포 할(이 글을 쓰는 시점에는 공식 SDK가 공개되지 않았음) SDK에 포함된 크로스 컴파일러이다. 현재는 gcc 4.0.2glibc 버전은 2.3.6이며(EABI로 교체할 것이란 루머도 있기 때문에 공개 시 버전은 달라질 수 있음) 이 툴체인만이 현재로서는 일반 linux에서 하는 개발 방법과 동일하게 OpenGL ES link 할 수 있다.

 

그리고 WIZ에 사용된 pollux OpenGL ES는 표준과 동작이 다른 부분이 조금 보이는데, 그것은 embedded 개발자라면 적절히 피해 가야 하는 장애물이라 생각하면 될 것 같다. 이 글의 목적은 MS Windows에서 쉽게 개발한 후, 최소한의 노력으로 WIZ에 올리자는 것에 있으므로 중간 중간 WIZ에서 결과물이 동일하게 나오는지는 꾸준히 확인해봐야 한다.


Posted by 안영기

2009/07/26 12:33 2009/07/26 12:33
Response
0 Trackbacks , 0 Comments
RSS :
http://smgal.ismine.net/tc_191/blog1/rss/response/15

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


블로그 이미지

게임 개발을 기반으로 한, 잡다한 개발 기록 저장소

- 안영기

Notices

Archives

Authors

  1. 안영기

Recent Comments

Recent Trackbacks

Calendar

«   2024/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Site Stats

Total hits:
247390
Today:
32
Yesterday:
59