surfaces_yaml

Yet another surfaces.txt - surfaces.yaml

surfaces_yaml

Yet another surfaces.txt - surfaces.yaml

this requires js-yaml

npm install -g surfaces_yaml
surfaces_yaml surfaces.yaml surfaces.txt

or use this on your program ...

var fs = require('fs');
var SurfacesYaml = require('surfaces_yaml');
var yaml_str = fs.readFileSync('surfaces.yaml', 'utf8');
var txt = SurfacesYaml.yaml_to_txt(yaml_str);
fs.writeFileSync('surfaces.txt', txt, 'utf8');

or use this on the browsers ...

<script src="js-yaml.min.js"></script>
<script src="surfaces_yaml.js"></script>
...
var txt = SurfacesYaml.yaml_to_txt(yaml_str);

surfaces_yaml command currently supports only utf-8 output (because shift_jis support requires iconv, but sometimes problems will occur when installing it to Windows under some environments).

surfaces.yaml is a structured replacement of the "surfaces.txt", component of 伺か(Ukagaka) ghost.

surfaces.yaml is YAML but surfaces_yaml allows tabs.

examples/surfaces.yaml

this will be converted to examples/surfaces.txt

charset : UTF-8

descript :
    # SERIKO/2.0
    version : 1
    maxwidth : 300
    collision-sort : ascend
    animation-sort : ascend

surfaces :
    # 継承のためidで管理
    素 :
        # isの番号がsurface*に記述される
        # isがある場合のみエントリは記述される(is無しは継承元としてのみ機能)
        is : 0
        # trueのキャラクターにaliasを作る
        characters :
            # sakura.surface.aliasに追加
            sakura : true
        # point.*
        points :
            centerx : 0
            centery : 0
            kinoko :
                centerx : 0
                centery : 0
            basepos :
                x : 0
                y : 0
        # balloon.*
        balloons :
            sakura :
                # sakura.balloon.*
                offsetx : 0
                offsety : 0
            # balloon.*
            offsetx : 0
            offsety : 0
        # element*
        elements :
            # 継承のためidで管理
            ベース :
                # isの番号がelement*に記述される
                # isがある場合のみエントリは記述される(is無しは継承元としてのみ機能)
                is : 0
                # element*,type,file,x,y
                type : overlay
                file : surface0.png
                x : 0
                y : 0
            表情 :
                is : 1
                type : overlayfast
                file : surface1000.png
                x : 30
                y : 50
        # collision*
        regions :
            # 継承のためidで管理
            胸 :
                # isの番号がcollision*に記述される
                # isがある場合のみエントリは記述される(is無しは継承元としてのみ機能)
                is : 0
                # 領域のID
                name : bust
                # type=rectならcollision、それ以外ならcollisionexとして出力
                type : rect
                # collision*,left,top,right,bottom,ID
                left : 20
                top : 110
                right : 100
                bottom : 130
            顔 :
                is : 1
                name : face
                type : polygon
                # collisionex*,ID,polygon,coordinates[0].x,coordinates[0].y,...
                coordinates :
                    - {x : 30, y : 50}
                    - {x : 80, y : 55}
                    - {x : 80, y : 85}
                    - {x : 30, y : 85}
            肩 :
                is : 2
                name : kata
                type : ellipse
                # collisionex*,ID,ellipse,top,right,bottom
                left : 80
                top : 100
                right : 90
                bottom : 110
        # animation*
        animations :
            # 継承のためidで管理
            目パチ :
                # isの番号がanimation*に記述される
                # isがある場合のみエントリは記述される(is無しは継承元としてのみ機能)
                is : 0
                # animation*.interval
                interval : random,10
                # animation*.option
                option : exclusive
                # animation*.pattern*
                patterns :
                    # 配列インデックスがpattern*に記述される
                    -
                        # animation*,pattern*,type,surface,wait,x,y
                        # うち場合によって後半必要でないものは記述しなくてよい
                        type : overlay
                        # surface番号(-1,-2等含む)かsurfacesでの定義id
                        surface : 1001
                        wait : 125
                        x : 40
                        y : 55
                    - {type : overlay, surface : 1002, wait : 125, x : 40, y : 55}
                    - {type : overlay, surface : -1}
                # animation*.collision*
                regions :
                    # regionsの定義と同一
                    まぶた :
                        is : 0
                        name : mabuta
                        type : rect
                        left : 40
                        top : 55
                        right : 75
                        bottom : 70
    エロ面 :
        is : 1
        # 継承元id
        base : 素
        elements :
            表情 :
                # 継承元から変更する属性のみを記述する
                file : surface1010.png
        animations :
            サンプル1 :
                is : 1
                interval : never
                patterns :
                    # start, stop, insertはanimation_idのみを指定
                    - {type : start, animation_id : 目パチ}
            サンプル2 :
                is : 2
                interval : never
                patterns :
                    # alternativestart, alternativestopはanimation_idsのみを指定
                    - {type : alternativestart, animation_ids : [目パチ,サンプル1]}
    驚き :
        is : 2
        base : 素
        elements :
            表情 :
                file : surface1020.png
        regions :
            # deleteキーワードで継承元のエントリを無効にする
            胸 : delete
    笑顔1 :
        is : 5
        base : 素
        elements :
            表情 :
                file : surface1050.png
    笑顔2 :
        is : 50
        # 多重継承可能 後に書いたほうの属性が優先される
        base : [素, 驚き]
        elements :
            表情 :
                file : surface1500.png

aliases :
    #sakura.surface.alias
    sakura :
        # 笑顔,[...]
        笑顔 :
            # surface番号かsurfacesでの定義id
            - 笑顔1
            - 笑顔2

regions :
    # *.cursorと*.tooltipsの定義
    sakura :
        # 領域ID
        bust :
            # sakura.tooltips
            # bust,むねだよ
            tooltip : むねだよ
            # sakura.cursor
            cursor :
                # mouseup*,bust,system:hand
                mouseup : system:hand
                mousedown : system:grip