이 내용은 2002/07/19 기준으로 쓰여졌습니다. 최신 내용은 본가에서 얻으실 수 있습니다.
차례
개요
쉘에 움직임을 주려는 시도가 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 엔트리는 그 애니메이션 그룹이 자동 발생하는 간격을 나타낸다.
- sometimes - 가끔(눈 깜박임 정도)
- rarely - 아주 가끔
random, [n] - 1초당 1/n 의 확률
- always - 베이스 표면이 보이는 한 계속
- runonce - 베이스 표면으로 바뀐 순간 1회만
- never - 수동으로 시작
pattern
pattern 엔트리로 실제로 1 컷씩 애니메이션 패턴을 정의한다. 정의문은 다음의 인수 리스트를 가진다.
?pattern?,[surfaceid],[interval],[method],[offsetx],[offsety]
- ?pattern? 에서 첫번째 ?에는 애니메이션 번호, 두번째 ?에는 패턴(컷) 번호가 들어간다.
- surface 는 해당 컷에 표시되는 표면의 ID 를 나타낸다(파일명은 아니다).
- interval 은 해당 컷이 보여지는 속도를 나타낸다. 지정된 값에 10ms 를 곱한 값 동안만 그 컷이 표시된다. 기준으로서 일반적인 눈 깜박임의 스피드는 5(50 ms).
- method 는 묘화 메소드를 나타낸다. SERIKO/1. 2 에서는 이하의 3개의 메소드를 사용할 수 있다.
- overlay - 오버레이(겹침)에 의한 부분 동영상. 지정 애니메이션 표면은 베이스 표면 위에 합성된다. surface 좌상 원점(0,0)의 색이 투명색으로서 사용된다. 합성한 결과 현재 보이는 영역을 넘어섰을 경우 실루엣도 변화한다. offsetx 및 offsety 로 파라미터로 합성하는 위치를 설정할 수 있다. 생략 불가. 마지막 컷에서 표면 ID 에 -1 을 지정하면, 애니메이션 이전 모습으로 돌아간다.
- base - 전 화면 변환에 의한 전신 동영상. 내부적으로는 단지 고속으로 그림을 바꾸고 있는 것 뿐이다. 동작의 성질상, base 애니메이션은 동시에 1개 밖에 발동하지 않는다(2개 이상 정의하는 것은 가능하지만, 그것들이 동시에 움직일 것은 없다). 마지막 컷에서는 표면 ID 에 -1 를 지정해, 애니메이션 개시 이전 상태로 되돌린다. offsetx 및 offsety 파라미터는 무시된다.
- move - 다시 그리지 않고 그림 전체를 이동. surface 는 변화하지 않고 좌표만이 움직인다. move 는 offsetx 및 offsety 파라미터에 따라 좌표를 움직인다. 값은 원래 위치에서의 상대 좌표로 해석된다. 예를 들면 위의 예에서는 표면은 천천히 상하로 흔들리게 된다. surfaceid 파라미터는 무시된다.
패턴의 갯수
현재, 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 가
이러한 비트 맵이었던 경우, 캐릭터의 가슴팍에 바람구멍이 열립니다.
레이어 순서
애니메이션 패턴 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 와 동일합니다.
