Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

RPGMaker/2012년스터디

From ZeroWiki
Revision as of 11:20, 30 July 2012 by imported>ppparkje

스터디 소개

  • 그래픽스 엔진 등 공학적인 주제에 초점을 맞춤
  • RPG만들기 에뮬레이터 스마트폰 버전
  • 참고 위키: RPG만들기 한글, 영문
  • Java로 만든 3D 물리 엔진으로 2D 엔진 만들기
  • 툴이 아닌 에뮬레이터 위주
  • UDK로 뭔가 삽질 하다가 멘붕하고 선회한 스터디 -ㅅ-

참가자

진행 시간

  • 여름방학: 매 주 화, 목 저녁 7시 반 ~ 10시

목표

  • RPGMaker VX Version을 Java로 -> Android용으로 -> Windows용으로... (겨울 방학 끝날 때 쯤엔 완성 되겠지...)

여름방학

2012.07.26

한 것

  • jpct 설치 및 RPG 만들기가 어떻게 생겨 먹은 놈인지 확인
  • jpct 튜토리얼 보고 따라 해 보기 - Hello World!

프로젝트 설정

  1. 이클립스 프로젝트 생성은 생략. 게다가 이미 svn repository에 등록해놓았음
  1. PC용 jPCT 엔진을 받는다
  1. 받은 엔진 안에는 jpct에 해당하는 jpct.jar과 또다른 그래픽 라이브러리인 lwjgl이 있다. lwjgl.jar까지 라이브러리로 등록한다
  1. lwjgl.jar은 내부적으로 native 함수를 호출한다. 이 native함수는 dll파일에 담겨져 있는데 이클립스에서 Window -> preferences -> java/installed JREs 에서 vm 설정에 -Djava.library.path=D:\Workspace\rma\libs 형식으로 lwjgl.dll 또는 lwjgl64.dll의 폴더 경로를 입력함으로써 참조하게 한다. 이와 관련된 오류는 java.lang.UnsatisfiedLinkError이다.

참고

Simple rendering

직교투영 렌더링

  • jPCT에서는 명시적으로 Orthographic rendering(직교투영 렌더링)을 지원하지 않는다
  [1]
  따라서 근사적으로라로 직교투영을 만든다
  한줄요약: 카메라를 겁나 멀리 갖다두면 근사적으로 직교투영이 됨ㅋ

보정(Interpolation)

  • 이를 이용하면 직교투영 좌표가 된 것처럼 보이긴 하지만 depth에 해당하는 z값이 바뀌면 조금이라도 오차가 생기기 때문에 이를 보정하여야 한다
  특히 렌더링 순서를 z값을 조정함으로 결정시키기 때문에 정확한 렌더링을 위해서는 보정 테크닉을 아는 것이 필수이다.

Projection.png

  • 위 그림에서 볼 수 있듯이 실제 Object의 중점과 사람이 느끼는 Object의 위치는 다르다. 크기 역시 마찬가지이다.
  만약 위 그림처럼 Object가 스크린에서 delta만큼 떨어져 있다면 간단한 비례식으로 (length-delta)/length 만큼 크기가 조정되어야 한다
  중심의 이동은 Object의 중심을 O, Projection의 중심을 P라고 할 때 벡터 PO만큼을 이동시키면 된다. 벡터 PO는 카메라 위치와 Object 중심을 잇는 직선의 연장선상에 있다는 것을 생각하면 계산이 간편해진다.

오브젝트 그리기

직사각형(FillRect) 그리기

  • 왼쪽 위, 오른쪽 아래 좌표만 알면 그릴 수 있다.
  • 사각형은 2개의 삼각형으로 구성된다.
  • 실제 구현

직선(Line) 그리기

  • 직선도 실제로는 너비를 가져야 렌더링이 가능하기 때문에 다음과 같은 구조를 가져야 한다

Line.png

  • vLine = vEnd - vStart
  • normal(vLine과 수직인 벡터) = vLine × (-z방향 벡터) -> normalize하여 길이가 1인 벡터로 만듦.
  • (u1, v1)과 (u1, v2)는 vStart ± (normal/2)
  • (u2, v1)과 (u2, v2)는 vEnd ± (normal/2)
  • 실제 구현

RPG Maker VX 분석

Actors.rvdata

  • 툴에서 (데이터베이스/액터)에 해당
  • 오프셋 3은 액터의 숫자+6
  • (6F 3B)가 각 캐릭터 간 구분자의 역할을 하는 듯 보임
  • 정보 테이블의 입력 순서는 매번 바뀌며 첫번째 캐릭터에서 제공함(구분자 0x3A)
  두번째 캐릭터부터는 첫번째 캐릭터의 정보테이블 순서에 입각하여 입력하는 것으로 보임(구분자 0x3B)
  • 첫번째 캐릭터의 데이터는 ID - @NAME - {TYPE} - VALUE 식으로 저장되어 있음
  TYPE이 0x69(i)이면 정수(항상 +5되어 저장됨), (22 0B)이면 문자열이다
  그다음부터의 데이터는 INDEX - {TYPE} - VALUE 식으로 저장되어 있다
  • 정보 테이블
ID TYPE NAME 설명
0x08 int @id INDEX
0x0a str @name 이름
0x0a Table Table Parameter 테이블 (능력치 성장 곡선)
0x0e int @class_id 직업 ID
0x0f int @weapon_id 무기 ID
0x0f int @armor1_id 방패 ID
0x0f int @armor2_id 투구 ID
0x0f int @armor3_id 갑옷 ID
0x0f int @armor4_id 장신구 ID
0x0f int @exp_basis 경험치(기본)
0x0f str @face_name 얼굴 그래픽 그룹 이름(확장자 제외 파일명)
0x10 table @parameters 조사중
0x10 int @face_index 얼굴 그래픽 ID
0x11 bool @super_guard 강한 방어
0x11 bool @auto_battle 자동 행동
0x12 bool @pharmacology 회복약 효과 2배
0x13 int @initial_level 초기 레벨
0x13 int @exp_inflation 경험치 증가도
0x13 bool @fix_equipment 장비 고정
0x14 str @character_name 보행 그래픽 그룹 이름(확장자 제외 파일명)
0x14 bool @critical_bonus 잦은 크리티컬
0x15 int @character_index 보행 그래픽 ID
0x16 bool @two_swords_style 이도류
  • Actor Parameter table
    • 첫 4 * 8 = 32바이트는 조사중
    • 그 다음부터 12바이트씩 99묶음, 1080바이트가 있다.
   한 묶음은 short int형의 배열인데, 결국 short int [99][6]의 배열이 된다.
   각 배열은 각 레벨별로 최대HP - 최대MP - 공격력 - 방어력 - 정신력 - 민첩성의 값을 가진다.

2012년활동지도