개요

쉘에 움직임을 주려는 시도가 Seriko이다. 여러가지 기술을 사용해, 눈 깜박임부터 전신 이동까지 여러가지 애니메이션을 보여줄 수 있다.

home
  +-ghost
      +-seriko
          +-surfaces.txt
          +-surface0.png
          +-surface50.png
          +-surface51.png

SERIKO/1.2

모든f 애니메이션은 surface 의 편성으로 만들어진다. 애니메이션에 이용하는 surface 도 화상을 만드는 방법 자체는 다른 surface 와 다르지 않다.

애니메이션 패턴은 surfaces.txt 로 정의된다. surfaces.txt 의 기본적인 포맷에 대해서는 쉘 사양서(SpecShell)를 참조.

애니메이션 패턴 정의 엔트리의 포맷은 다음과 같다.

0interval, sometimes
0pattern0, 100,5, overlay, 0,0
0pattern1, 101,5, overlay, 0,0
0pattern2, 100,5, overlay, 0,0
0pattern3,-1, 5, overlay, 0,0

1interval, always
1pattern0, 50,20, overlay, 10,0
1pattern1, 51,20, overlay, 10,0
1pattern2, 52,20, overlay, 10,0
1pattern3, 53,20, overlay, 10,0
1pattern4, 54,20, overlay, 10,0
1pattern5, 53,20, overlay, 10,0
1pattern6, 52,20, overlay, 10,0
1pattern7, 51,20, overlay, 10,0

2interval, runonce
2pattern0, 60,20, overlay
2pattern1, 61,20, overlay
2pattern2, 62,20, overlay
2pattern3, 63,20, overlay
2pattern4, 64,20, overlay
2pattern5,-1, 20, overlay

3interval, always
3pattern0, 0,15, move, 0,-1
3pattern1, 0,15, move, 0,-2
3pattern2, 0,15, move, 0,-3
3pattern3, 0,15, move, 0,-3
3pattern4, 0,15, move, 0,-2
3pattern5, 0,15, move, 0,-1
3pattern6, 0,15, move, 0,0
3pattern7, 0,15, move, 0,1
3pattern8, 0,15, move, 0,2
3pattern9, 0,15, move, 0,3
3pattern10, 0,15, move, 0,3
3pattern11, 0,15, move, 0,2
3pattern12, 0,15, move, 0,1
3pattern13, 0,15, move, 0,0

엔트리명 선두의 수치는 애니메이션 그룹 ID 를 나타낸다. 각각의 그룹은 독립되어 있어, 비동기적으로 애니메이션을 발생시켜, 비동기적으로 정지한다. 즉 각 액션 마다 그룹을 만들지 않으면 안 된다. 위의 예에서는, 0번을 눈 깜박임, 1번을 움직이는 문자, 2번을 surface 변환시의 애니메이션, 3번을 상하로 떨리는 애니메이션에 사용하고 있다.

interval

interval 엔트리는 그 애니메이션 그룹이 자동 발생하는 간격을 나타낸다.

pattern

pattern 엔트리로 실제로 1 컷씩 애니메이션 패턴을 정의한다. 정의문은 다음의 인수 리스트를 가진다.

?pattern?,[surfaceid],[interval],[method],[offsetx],[offsety]

패턴의 갯수

현재, 1개의 베이스 표면이 가질 수 있는 애니메이션 패턴은 최대로 128(0 ~ 127 interval 까지).

SERIKO/1.3 (MAYUNA/1.0)

SERIKO/1.3(MAYUNA/1.0)은 갈아입히기 사양을 실현하기 위한 사양이다. 이것은 내용상으로는 동영상 사양은 아니고 정지화면 사양이므로 이 점에 주의.

bind

0interval, bind
0pattern0, 200,2, bind, 0,0

1interval, bind
1pattern0, 150,2, bind, 0,0

인터벌 메소드 bind 는 지극히 특수한 동작을 합니다. bind 로 지정된 표면은 베이스 표면에 완전하게 달라붙어 마치 베이스 표면의 일부인것 같이 행동합니다. 이 특성은 「표면=옷」이라고 하는 개념에 최적화된 것이고, 이 특성을 이용해 이른바 「갈아입히기」를 할 수 있습니다.

bind 는 복수 정의가 가능합니다. 그것들은 번호가 빠른 순서로 겹쳐집니다.

bind 는 1 개의 패턴만을 바인드 합니다. 2 패턴 이후 (?pattern1 이후)는 무시됩니다.

xpos 및 ypos 는 유효합니다. method 및 interval 는 무시됩니다.

bind의 descript.txt 설정

bind 애니메이션 그룹은 메뉴로부터 자유롭게 ON/OFF(즉 옷을 입히거나 벗게 하거나) 할 수가 있습니다만, 그것을 위해서는 descript.txt 를 적절히 편집해 줄 필요가 있습니다. (SpecShell 참조)

home
  +-ghost
      +-kisekaesan
          +-thumbnail
            +-apron.png
            +-ribbonwhite.png
          +-descript.txt

{{{ descript.txt 의 bindgroup 예:

sakura.bindgroup0.name, 옷, 에이프런 드레스, apron sakura.bindgroup1.name, 리본, 흰색 리본, ribbonwhite sakura.bindgroup2.name, 옷, 상복, black sakura.bindgroup3.name, 리본, 검정 리본, ribbonblack

sakura.bindgroup0.default, 1 sakura.bindgroup1.default, 1

kero.bindgroup0.name, 넥타이, 넥타이 kero.bindgroup1.name, 완장, 검은 완장 kero.bindgroup2.name, 팔, 드릴

kero.bindgroup0.default, 1 kero.bindgroup1.default, 1

sakura.menuitem0, 2 sakura.menuitem1, 3 sakura.menuitem2,- sakura.menuitem3, 0 sakura.menuitem4, 1

kero.menuitem0, 0 kero.menuitem1, 1 kero.menuitem2,- kero.menuitem3, 2 }}}

위와 같이 기술하는 것으로 사쿠라측의 「갈아입히기」메뉴에 「에이프런 드레스」 「상복」 「흰색 리본」 「검정 리본」, 우뉴측의 메뉴에 「넥타이」 「완장」 「팔」이 출현해, 그것들을 자유롭게 착탈할 수가 있게 됩니다.

인수는 왼쪽부터 순서대로 카테고리명, 파트명, 미리보기 파일명입니다.

같은 종류의 그룹에 항상 같은 ID를 붙일 필요가 있는 것에 주의해 주시기 바랍니다. 예를 들면 위의 예에서는 모든 베이스 표면에 대해 애니메이션 그룹 0번이 반드시 「옷」으로서 설정되어 있지 않으면 안됩니다(어떤 그림에서는 0번이 옷, 어떤 그림에서는 2번이 옷‥‥과 같은 일관성이 없는 설정은 안된다는 말입니다).

*.bindgroup[id].default 는 그 쉘의 기본 모습을 설정합니다. 이 설정에서는 기본으로 에이프런 드레스와 흰색 리본, 넥타이와 검은 완장이 됩니다. 0을 지정 혹은 생략 하면 OFF가 됩니다.

*.menuitem[id] 는 메뉴 항목의 구조를 나타내고 있습니다. 이 예에서 갈아입히기 아이템은 위로부터 순서에 상복, 흑리본, separator(가로줄), 에이프런 드레스, 흰색 리본이 됩니다.

미리보기 파일은 thumbnail 메뉴 선택시의 가이드로서 표시됩니다. 필요 없는 경우 지정하지 않아도 상관없습니다.

SERIKO/1.4

SERIKO/1. 4 는 복수 애니메이션의 연결사용 및 동기화를 하기 위한 사양입니다.

start

?pattern?,0,0, start,[patternid]

start 메소드를 사용하는 것으로 애니메이션 그룹에서 다른 애니메이션 그룹을 실행시킬 수 있습니다.

0pattern0, 100,5, ovrelay, 0,0
0pattern1, 101,5, ovrelay, 0,0
0pattern2, 0,0, start, 1
0pattern3,-1, 5, overlay, 0,0

위의 스크립트에서는, 애니메이션 그룹 0은 끝나기 직전에 애니메이션 그룹 1을 실행시킵니다.

이 때 개개의 애니메이션 패턴은 멈춰있지 않는 데 주의해 주세요. Seriko 에서 각각의 애니메이션 패턴은 독립한 thread와 같은 존재이며, start 메소드가 불려져도 부른 쪽이나 불린 쪽 모두 정지하지 않습니다. (곧, 두개의 애니메이션이 동시에 움직이게 됩니다.)

-2 에 의한 전체 애니메이션 종료

-1 은 현 애니메이션 그룹의 종료를 나타냅니다만, SERIKO/1.4 에서는 -2 로 전 애니메이션의 종료 (전 애니메이션 즉시 정지)를 지시할 수 있습니다.

0pattern0, 100,5, ovrelay, 0,0
0pattern1, 101,5, ovrelay, 0,0
0pattern2, 0,0, start, 1

1pattern0, 150,100, ovrelay, 0,0
1pattern1,-2, 5, overlay, 0,0

그룹 0은 그룹 1을 실행시키고 끝납니다만, 종료를 하지 않기 때문에 애니메이션 정지후에도 surface 101 이 화면에 계속 표시됩니다. 그러나 이어지는 그룹 1이 -2 로 종료 하고 있기 때문에 그룹 1이 종료하는 것과 동시에 surface 101 도 소멸합니다.

alternativestart

alternativestart 는 복수의 후보 중 무작위로 start 를 실시합니다.

0pattern2, 0,0, alternativestart,[1.2]

이와 같이 기술하는 것으로 그룹 1 혹은 2 에 각각 50% 의 확률로 점프 합니다.

SERIKO/1.5

SERIKO/1. 5 는 「말하기」액션을 하기 위한 사양입니다.

talk

?interval, talk,[interval]

인터벌 메소드 talk 는 문자가 표시될 때마다(고스트가 말할 때마다) 불립니다. 빈도는 자수 단위로 지정할 수 있습니다.

4interval, talk, 4
4pattern0, 0,0, alternativestart,[28.29. 30.31]

28interval, never
28pattern0, 1000,10, overlay, 109,119
28pattern1,-1, 10, overlay, 0,0

29interval, never
29pattern0, 1001,10, overlay, 109,119
29pattern1,-1, 10, overlay, 0,0

30interval, never
30pattern0, 1000,10, overlay, 109,119
30pattern1,-1, 10, overlay, 0,0

31interval, never
31pattern0, 1001,10, overlay, 109,119
31pattern1,-1, 10, overlay, 0,0

위의 스크립트는 4 문자 말할 때마다 입이 움직이는 애니메이션 패턴인 1000 혹은 1001 을 표시합니다.

SERIKO/1.6

SERIKO/1.6 은 클린 업 액션을 실현하기 위한 사양입니다.

yen-e

?interval, yen-e

인터벌 메소드 yen-e 는 사쿠라스크립트의 \e 가 나온 순간에 불립니다.

27interval, yen-e
27pattern0,-2, 0, overlay

위의 스크립트는 \e 와 동시에 모든 애니메이션 그룹을 강제 정지시킵니다.

SERIKO/1.7 (MAYUNA/1.1)

SERIKO/1.7(MAYUNA/1.1)은 복수 표면의 동시 바인드 및 영역 감소 첨부 갈아입히기를 실현하기 위한 사양입니다.

add / reduce

0interval, bind
0pattern0, 100,2, add, 0,0
0pattern1, 101,2, add, 0,0
0pattern2, 102,2, reduce, 0,0
0pattern3, 103,2, add, 0,0

MAYUNA/1.0 에서는 애니메이션 패턴은 갈아입히는 물건 그 자체를 나타내는 0번 밖에 유효성을 가지고 있지 않았습니다만, MAYUNA/1.1 에서는 오브젝트수는 제한 없습니다. 또 종래 bind 고정으로 구체적인 의미를 가지고 있지 않았던 애니메이션 메소드에 add 와 reduce 가 추가되어 각각 다른 동작을 실시하게 되어 있습니다.

add 는 MAYUNA/1.0 의 상당한 영역 증가 bind 처리입니다. base surface + binded surface 의 영역이 보이는 영역이 됩니다. 새롭게 추가된 reduce 는 영역 감소 bind 처리로, 현재의 가시 상태로부터 특정 영역을 명시적으로 삭제합니다.

reduce 의 구체적인 예

상기와 같은 스크립트로 surface 102 가

http://sakura.mikage.to/image/reducingbind.png

이러한 비트 맵이었던 경우, 캐릭터의 가슴팍에 바람구멍이 열립니다.

레이어 순서

애니메이션 패턴 0부터 차례로 처리됩니다. 0번 위에 1번이, 1번 위에 2번이 겹쳐집니다. 따라서, 예를 들면 위와 같은 형태로 102 가 캐릭터에 구멍을 뚫었다고 해도, 그것이 103 으로 다시 채워질 수 있으면 표시상으로 구멍은 열리지 않게 됩니다.

SERIKO/1.8 (MAYUNA/1.2)

SERIKO/1.8(MAYUNA/1.2)는 복잡하게 겹치는 순서를 가진 바인드를 해결하기 위한 사양입니다.

이것은 「원래 2D 인 표면에 가상적인 Z 치를 부여하기 위한 사양」이라고도 말할 수 있습니다. 이것이 문제가 되는 것은 갈아입히는 물건으로 긴소매의 옷과 에이프런이 존재해, 한쪽 팔이 신체의 앞으로 나와 있는 것 같은 표면이 있었을 경우, 긴소매 옷의 팔의 부분은 에이프런보다 앞에 나오며(에이프런이 옷에 가리고), 긴소매 옷의 몸통의 부분은 에이프런보다 밑에 있는(에이프런에 옷이 가려진다)것 같은 케이스입니다. MAYUNA/1.1 은 「0번으로부터 순서대로 표시한다」는 지극히 단순한 Z 축컨트롤 구조 밖에 가지고 있지 않았기 때문에, 에이프런은 반드시 옷의 앞이나 뒤의 어딘가에 밖에 표시되지 않고, 이러한 복잡하게 겹치게 하기는 불가능했습니다.

insert

//옷 1, 무녀 의복
0interval, bind
0pattern0, 3,0, add, 0,0
0pattern1, 0,0, insert, 1
0pattern2, 1,0, add, 0,0

//옷 2, 에이프런
1interval, bind
1pattern0, 2,0, bind, 0,0

insert 는 다른 바인드 그룹의 삽입을 나타냅니다. 상기의 예에서는 그룹 0이 옷, 그룹 1이 에이프런이며, 그룹 0의 옷은 몸통의 부분(에이프런에 가리는 부분)과 소매의 부분(에이프런에 가려지지 않는 부분)의 2개의 파트로 나누어져 있습니다. 이것이 MAYUNA/1.2 의 기본이라고 할 수 있는 형태입니다.

구체적인 동작은 이하와 같은 것입니다. 우선 표면 3(옷의 몸통)이 바인드 됩니다. 다음에 insert 에 의해 그룹 1이 불려져 표면 2(에이프런)가 바인드 됩니다. 그리고 마지막에 표면 1(옷의 팔)이 바인드 됩니다. 이상의 동작에 의해 에이프런은 팔보다 뒤, 몸통보다 앞의 Z 치를 가지게 되어, 3 차원적으로 완전하게 보이게됩니다.

가장 중요한 것은 에이프런이 무녀 의복과는 관계없는 독립된 물건이며, 에이프런이 있어도 없어도 완전하게 보이는 뷰의 완전성이 유지된다는 점입니다. 이 오브젝트 독립성에 의해 에이프런의 높은 재이용성이 보증됩니다.

insert 는 겹쳐질 수 있습니다. insert 로 불려진 그룹내에서 또 insert 가 있었을 경우에서도 기대된 대로의 동작을 합니다.

SERIKO/1.9

SERIKO/1. 9 는 배타적인 애니메이션을 실현하기 위한 사양입니다.

option 엔트리

0interval, never
0option, exclusive
0pattern0, 500,0, base, 0,0
0pattern1, 501,0, base, 0,0
0pattern2, 502,0, base, 0,0

interval, pattern 에 더해서 option 엔트리가 추가되고 있습니다. 이 엔트리는 생략 할 수 있습니다. 생략 했을 경우는 기본값이 사용됩니다.

exclusive

0interval, never
0option, exclusive
0pattern0, 500,0, base, 0,0
0pattern1, 501,0, base, 0,0
0pattern2, 502,0, base, 0,0

위와 같이 지정하면, 애니메이션 그룹 0 은 반드시 배타적으로 애니메이션을 실시하게 됩니다. 즉, 그룹 0 이 발동한 시점에서 다른 모든 애니메이션 그룹이 즉석에서 일시정지하며, 또 그룹 0 이 정지할 때까지 다른 애니메이션 그룹은 절대로 발동하지 않게 됩니다.

SERIKO/1.10

SERIKO/1. 10 은 구체적인 수치로 무작위 애니메이션을 하게 하기 위한 사양입니다.

random

0interval, random, 8
0pattern0, 500,0, base, 0,0
0pattern1, 501,0, base, 0,0
0pattern2, 502,0, base, 0,0

위와 같이 지정하면, 애니메이션 그룹 0 은 매초 1/8 의 확률로 발동합니다.

(참고)

sometimes 는 random, 2 와 동일합니다. rarely 는 random, 4 와 동일합니다.


CategorySpec


Nanika: SpecSerikoMayuna (2008-08-10 19:56:16에 localhost가(이) 마지막으로 수정)