이 내용은 2002/07/15 기준으로 쓰여졌습니다. 최신 내용은 본가에서 얻으실 수 있습니다.
차례
개요
home
+-ghost
+-naru
+-shell
+-master
+-surface0.png
+-surface0a.png
+-surface0s.png
....
..
+-ghost
기본 구성 파일
surface0.png surface10.png ........ .... .. descript.txt surfaces.txt readme.txt thumbnail.png *. png
특별히 생략 가능하다고 설명되어 있지 않으면 모든 파일은 필수이다.
surface[숫자ID].png가 쉘의 실체가 되는 비트맵 이미지가 된다. 최대 8192장 (surface8191 까지)을 사용할 수 있다. 어느 ID 에 어떤 표정을 할당할까는 제작자의 자유이지만, 유일한 예외는 예약된 번호 0 과 10 으로, 여기에는 각각 sakura 및 kero 의 가장 기본적인 모습을 설정해 둘 필요가 있다. 반대로 말하면, 이 2매의 이미지만 있다면 그 밖에 다른 이미지가 없어도 그것은 쉘로서 성립한다.
다음은 (전통적으로) 가장 일반적으로 설정되는 ID 이다.
- sakura 측
ID
표정
00
평상시
01
수줍음
02
놀라움
03
불안
04
낙심함
05
미소
06
눈을 감음
07
화남
08
냉소
09
수줍고 분노
25
노래하는 모습
- kero 측
ID
표정
10
평상시
11
눈이 커짐
19
노래하는 모습
surface 는 좌표 (0,0)의 색이 투명색으로 인식된다. 따라서 투명하게 보이고 싶은 색은 좌표 (0,0)과 같은 색으로 칠하면 된다. 화상의 크기 / 색 가지수등에 제한은 없다.
descript.txt 는 쉘 전체의 정의 파일이 된다. 내용은 후술.
surfaces.txt 는 각 surface 고유의 정의 파일이 된다. 내용에 대해서는 후술.
thumbnail.png 는 이 쉘의 미리보기 이미지를 나타낸다. 미리보기 이미지는 쉘 선택시에 가이드로서 표시된다. 포맷은 png 혹은 jpg. png는 확장자(extension)만 pnr 로 변경하면 좌표 (0,0)의 색이 투명하게 보이는 PNG 가 된다. 색 가지수나 크기에 제한은 없다. 생략 가능. 생략 했을 경우는 아무것도 표시되지 않는다.
readme.txt 는 쉘 메뉴에서 Read Me! 버튼을 선택했을 때에 표시되는 텍스트 파일이다. 쉘이 마스터 쉘인 경우는 고스트의 배포위치와 쉘의 배포위치가 일치하기 때문에 이 파일은 거의 필요없지만, 여분 쉘의 경우는 그것들이 따로 배포될 수 있기 때문에, 이 파일을 이용해 배포위치 URL 등을 사용자에게 알리는 것이 좋다.
나머지의 이미지 파일은 descript.txt 로 사용이 정의되는 실제 데이터가 된다.
descript.txt
home
+-ghost
+-naru
+-shell
+-master
+-descirpt.txtdescript.txt 는 쉘 하나 당 1개가 존재해, 그 쉘이 가지는 고유의 정보를 정의한다.
{{{ descript.txt 파일의 예:
name, 동복 type, shell
sakura.balloon.offsetx, 0 sakura.balloon.offsety, 80 kero.balloon.offsetx,-20 kero.balloon.offsety, 10 sakura.balloon.alignment, none kero.balloon.alignment, none
shiori.logo.filename, niseshiori_naru.png shiori.logo.x, 16 shiori.logo.y, 256
readme, readme.txt }}}
name은 이 쉘의 이름을 나타낸다. 복장, 혹은 사이즈(100%,80%등 ) 등을 나타내는 독특한 쉘의 이름을 적는다.
type은 파일 셋의 종류를 나타낸다. 쉘의 경우는 식별자 shell 을 적어야 한다.
balloon.offset* 는 말풍선의 위치 오프셋(offset) 정보를 나타낸다. 본체에 밀착한 위치로부터 계산해, x 는 양수값이 들어가 있으면 본체 측에 가까워지며, 음수값이 들어가 있으면 본체로부터 멀어진다. y 는 양수값이 들어가 있으면 아래로, 음수값이 들어가 있으면 위로 이동한다.
balloon.alignment 는 말풍선의 위치 정보를 나타낸다.
none
자동조정, shell 의 y축좌표가 화면 중앙보다 왼쪽이라면 오른쪽, 오른쪽이라면 왼쪽으로 표시
left
항상 왼쪽
right
항상 오른쪽
readme 는 Read Me! 버튼으로 열리는 이 쉘의 설명 파일의 이름을 나타낸다. 생략 가능. 생략시는 readme.txt 가 된다.
shiori.* 는 AI 정보 윈도우의 이미지 및 위치를 나타낸다. logo.x / logo.y 로 지정된 좌표에 logo.filename 로 지정된 화상이 표시된다. 생략 가능. 생략 했을 경우는 아무것도 표시되지 않는다.
명칭에 태그나 환경 변수등을 포함하면 그 명칭은 보안상의 문제로 모두 자동적으로 파기된다. \ 및 % 를 사용하고 싶을 때는 \\ 및 \% 로 표시한다.
surfaces.txt
surfaces.txt 에서는 각 surface 고유의 정보를 정의한다.
본파일의 정의 내용은 모두 생략 가능하다.
본파일은 다음과 같은 포맷을 가진다.
{{{ surfaces.txt의 포맷 예:
surface0 { collision0, 188,25,252,63, Head collision1, 190,92,236,118, Face collision2, 180,191,220,222, Bust collision3, 154,311,248,362, Skirt point.centerx, 212 point.centery, 198 point.kinoko.centerx, 214 point.kinoko.centery, 34
0interval, sometimes 0pattern0, 101,10, overlay, 168,67 0pattern1, 100,10, overlay, 168,67 0pattern2, 101,10, overlay, 168,67 0pattern3,-1, 10, overlay, 168,67 }
surface10 { collision0, 40,56,95,90, Head point.centerx, 70 point.centery, 66 sakura.balloon.offsetx, 80 sakura.balloon.offsety,-100 kero.balloon.offsetx,-30 kero.balloon.offsety, 20 }
.... .. . }}}
각 surface 의 정의 부분이 중괄호로 나뉘어지며 그 안에 해당 surface 의 정보 엔트리가 들어간다. 유효한 엔트리는 다음과 같다.
말풍선 오프셋(offset)
sakura.balloon.offsetx,-4 sakura.balloon.offsety, 0 kero.balloon.offsetx, 0 kero.balloon.offsety, 0
이러한 값은 descript.txt 에서 지정한 말풍선 오프셋(offset)값을 오버라이드(override;원래 값을 무시하고 정의된 값을 사용) 한다. 말풍선 오프셋(offset)치가 가지는 의미에 대해서는 descript.txt의 항을 참조. 생략 가능.
직사각형 영역 정의
collision0, 98,34,191,69, Head collision1, 105,103,178,150, Face collision2, 118,212,176,255, Bust point.centerx, 150 point.centery, 200 point.kinoko.centerx, 150 point.kinoko.centery, 200
collision[id] 는 마우스 이벤트 정의 데이터를 나타낸다. 왼쪽으로부터 순서대로 왼쪽/위/오른쪽/아래/식별자. 정의된 사각영역 안에서 마우스 이벤트가 발생하면 정의된 식별자를 수반해 Shiori에 이벤트가 통지되어 거기에 따라 Shiori는 쉘의 어느 부분에서 마우스 이벤트가 발생했는지를 판별한다. 위의 예에서는 Head, Face, Bust 의 판정 영역이 설정되어 있다. surface 하나당 최대 32 까지(collison31 까지) 정의 가능.
point.* 는 다른 프로세스와의 제휴를 위한 좌표 데이터를 나타낸다. centerx 는 캐릭터의 중심 x 좌표, centery 는 중심 y 좌표를 나타낸다. 생략 가능.
point.kinoko.* 는 절대버섯영역 중심점데이터를 나타낸다. centerx 는 버섯 뿌리의 중심 x 좌표, centery 는 중심 y 좌표를 나타낸다. 생략 가능.
알파 비트맵 이미지
surface0.png surface0.pna
alpha channel 정의 이미지 파일을 넣어주는 것으로써 surface 에 alpha값(투명도)를 부여할 수가 있다. alpha값이 주어진 surface 는 그 alpha값의 크기에 따라 그 배경의 색을 투과 해 표시된다. 이 구조에 의해 이른바 「반투명」효과를 얻을 수 있다.
alpha channel 정의 이미지 파일의 실체는 해당 surface 와 완전히 같은 사이즈의 그레이 스케일 png 파일 surface[id].pna 이다. 이 비트 맵의 각 픽셀의 휘도가 그대로 해당 surface 의 alpha값으로서 설정된다. 즉, 완전한 검정색(휘도 0)으로 칠해진 부분은 완전하게 투명이 되며, 완전한 흰색(휘도 255)으로 칠해진 부분은 완전하게 불투명이 된다.
(예)
위와 같은 surface 를 작성했을 경우, 이 surface 는 우측 윗꼭지점은 완전 불투명, 좌측 아랫꼭지점은 완전 투명인, 알파 그라데이션이 걸린 surface 가 된다.
제한 사항: 알파 블렌딩은 MAHORO GFX Engine Mode. ULW 모드에서 유효하다. 따라서 win9x 에서는 사용하지 못하고, pna 가 있었다고 해도 surface 는 항상 완전하게 불투명한 것으로 보이게 된다.
alias(이름지정)/다중지정
home
+-ghost
+-naru
+-shell
+-master
+-alias.txt앨리어스(alias;별명 지정) 파일을 작성하는 것으로 surface ID 를 추상화 할 수 있다. 이것은, 예를 들면 \s[smile]과 같은 상황 의존성이 낮은(구체성이 낮다) 지정으로 surface 를 바꾸는 것을 의미한다. 또, 그것보다 중요한 것은, 1개의 앨리어스(alias)에 복수의 ID 를 assign(지정) 하는 것으로써, 하나의 ID 지정에 대해서 복수의 ID 로 분기 할 수 있다고 하는 점이다. 이것은 예를 들면 「웃는 표정」의 surface 를 여러 장 준비해, 「웃어라」라는 지시에 대해서 그것들을 임의로 표시 하는 것을 의미한다.
앨리어스(alias)는 alias.txt 로 정의한다.
{{{ alias.txt의 예:
sakura.surface.alias { normal,[0] blush,[1] surprise,[2] anxious,[3] bum,[4] smile,[5] calm,[6] angry,[7] sneer,[8] sing,[25] }
kero.surface.alias { normal,[10] eyes,[11] sing,[19] } }}}
위와 같은 엔트리를 추가하면, \0\s[normal] 는 \0\s[0], \1\s[normal] 는 \1\s[10] 과 동일하게 표시 된다.
하지만 이러한 사용법은 실제 제작에는 거의 보이지 않는다. smile 등 일견 알기 쉬운 것 같은 식별자를 정의해도 현장에서 스크립트를 쓰고 있는 사람에게는 알기 힘든 것뿐이어, 실제로는 0,[0] 과 같이 실제 ID번호에 대해서 복수 번호를 assign 하는 경우가 많다.
각 스코프의 엔트리는 호흡 { .... } 그리고 적절히 둘러쌀 필요가 있다.
하나의 앨리어스(alias)에 복수의 ID 를 assign 하는 경우는 이하와 같이 기술한다.
sakura.surface.alias
{
0,[0,1000,2000]
}이 경우, \0\s0 로 surface 0, 1000, 2000 중 하나가 무작위로 표시된다.
보충
쉘과 일반적인 그림의 가장 큰 차이는 윤곽선의 안티-앨리어싱(anti-aliasing;해상도가 높게 보이게 하기 위해 색을 살짝 번지게 하는 기술)을 하면 안 된다는 점이다. 마스크로 투명색을 처리하기 때문에, 윤곽선과 마스크의 색이 섞이면, 그림으로서는 깨끗이 보여도, 마스크 되었을 때에 단지 어중간한 색으로서 투명화되지 않은 채 남는다. 따라서 surface 는 배경과의 안티-앨리어싱 처리 없이 완전하게 「도려낼」필요가 있다.
region (지역 정보) 데이터의 캐쉬에 대해
쉘을 실제로 사용하면 쉘의 홈 디렉토리에 region 이라는 폴더가 작성되어 거기에 리젼 데이터가 캐쉬된다. 이것은 언제 지워도 문제 없다(최종 배포 파일에 포함할 필요는 없다).
