kuzu/NULL

▼コレクティブル・ダイスゲームの特徴を残した非コレクティブル・ダイスゲーム、 "D!ce F!ght" を頒布します。
▼また、ちょっと視点を変えたゲームマーケット2022秋に初頒布したプログラミング学習用・教育用アナログゲーム「Flap!」も頒布します。 ▼加えて、TRPG用の System Development Kit である "SYDEKICK" の "BASIC GUIDES" モジュールのDraft 9.0を無料配布いたします。

Flap! 頒布、SYDEKICK BASIC GUIDES無料配布
2022/9/17 10:45
ブログ

ゲームマーケット2022秋では、これまでお知らせしたとおり、"Flap!" の頒布と "SYDEKICK BASIC GUIDES"の無料配布を行ないます。いずれも予約受付中です。ブース出展日は10月 30日です。

"Flap!" をご予約いただいた場合、空白トランプを取り置きして封入させていただきます。

"SYDEKICK" は、TTRPG用のSystem Development Kitであり、"BASIC GUIDES" は "SYDEKICK" の利用にあたってのガイドです。こちらをご予約いただいた場合、SYDEKICKのロゴ的なものが印刷されたクリアフォルダ (A5判) を取り置き、および "SYDEKICK" についてのお話をする時間を取りたいと考えています。

なお "SYXDEKICK" は、現在、平文のモジュールにおいてモジュールの組み合わせ方法がわかるように改定作業中です。また、それとは別に "SYDEKICK/F" として "BASIC BASIC" を形式言語にて記述する方法についてアイディアを出しているところです。 "SYDEKICK/F" で用いる形式言語については、当然そのSyntaxとSemanticsの定義が必要になります。 "SYDEKICK/F" をとりあえず想定上の言語で書き出した後に、そのSyntaxを記述した "SYDEKCK/L SYNTAX" と、Semanticsを記述した "SYDEKICK/L SEMANTICS"  を記述し公開する予定です。ちなみに、 "SYDEKICK/F" の現状がどのようなものかというと、次のようにすこし書いています:

# SYDEKICK/F v. 0.0.0.2
# "FRAME" is reserved and special word for frame of SYDEKICK.
# "module" is a reserved name name for types.
# : means set or define something as provided name(s).
# Quoted string can be a word.

"1. kN-SYDEKICK-0-1-0 BASIC BASIC" : module/dummy [
#   nop means no operation
    nop

#   ###[ means start position of block comment.
#   ###] means end position of block comment.
    ###[
 “System Development Kit with module Complex for ttrpg by
Kuzu/null” (“SYDEKICK”) とは、TTRPG用の簡略かつモジュール化された
System Development Kit です。ユーザ — GMとプレイヤー — が様々な世界
観とシステムを作り、そしてそれを遊ぶことの手助けとなるように構築してい
ます。
 このモジュールはBASICグループに属する “kN-SYDEKICK-0-1-0 BASIC 
BASIC” モジュールであり、いくつかのスロット の設置位置の例示と、それ
ぞれのスロット に対応するフィラー の内容の例示を行ないます。同時に、部
分と全体の module Complex の例示でもあります。以下には、 “2. キャラク
ター・メイキング”、 “3. 判定方法”、 “4. 運プール”、 “5. 行動の順
番と移動可能距離”、 “6. ダメージと消耗”、 “7. PCの成長” を含みま
す。
    ###]
]

# Example of FRAME module
FRAME : module [

#   place slots on the FRAME
#   { x y z } is multiple-name-structure. Each multiple-name-structure has
#   same body but has multiple names.
#   Example of below, { "2. キャラクター・メイキング" "2. Character Making" }, 
#   "2. キャラクター・メイキング", and "2. Character Making" will refer
#   same body.
    place [ { "2. キャラクター・メイキング" "2. Character Making" } ]
    place [ { "3. 判定方法" "3. Challenges" } ]
    place [ { "4. 運プール" "4. Luck Pool" } ]
    place [ { "5. 行動の順番と移動可能距離" "5. Initiative, Movement, and Support Action" } { "6. ダメージと消耗" "6. Damage/Exhaustion" } { "7. PCの成長 "7. Advancement" } ]
]


##   connect modules (fillers) with interface on the FRAME bidirectional
#    connect [ "2. キャラクター・メイキング" with "3. 判定方法"
#    connect/share [ "2. キャラクター・メイキング" with [
#        "4. 運プール" 
#        "5. 行動の順番と移動家の距離"
#        "6. ダメージと消耗"
#        "7. PCの成長"
#    ]
#    [omit others]
#]

#   Example other module
# Quoted string can be a word, again I will say.

#   This is an fully dummy module definition.
#   In this case, there is name(s) only.
#   This module exist for sameness of module or section composition
#   on text document.
#
#   { "2. キャラクター・メイキング" "2. Character Making" } is 
#   multiple-name-structure
#   module/dummy is refined module. / makes composit words.
#   For example, mother/daughter/granddaughter...
#   In this case, daughter must be defined in mother.
#   / likes something . in many object oriented programming languages.
{ "2. キャラクター・メイキング" "2. Character Making" } : module/dummy [
#   transparent makes channels for interface and connect, automaticaly.
    transparent
]

#   module means type of this structure is a module.
{ "2.1 キャラクターをイメージする" "2.1 Imaging Your Character" } : module [

#   Users must write down concepts of his/her character.
    { "キャラクターのイメージ" "Concepts of character"} : text [

#       This means write down concepts as the same name of this structure. 
#       name is another reserved word.
        writedown/byUSER name this
    ]

#   read and eval itemize.
#   text/itemize is another reserved name for a type.
#   text/itemize type means just imaginary and itemize.
#   In this case, text/itemizes are read and evaled by User.
#   eval/byUSER and read are functional words.
#   First, read will read { "キャラクターのイメージ" "Concepts of character" } .
#   Then, eval/byUSER will eval contents of  { "キャラクターのイメージ" 
#   "Concepts of character" } .
#   This means textual information must be transformed some more clear image
#   as itemize.
    { "キャラクターのイメージ Itemize" 
      "Concepts of Character Itemize" } : text/itemize [
            eval/byUSER read { "キャラクターのイメージ" "Concepts of character" }
        ]

#   interface will make connection in bidirectional with upper and lower layers.
#   But the lowest layer is the first layer. Never to access FRAME.
#   Each variables, structs, and maybe consts are refered by pointers.
#   receiver will be made automatically, based on transparent and place.
    interface { "キャラクターのイメージ Itemize" "Concepts of Character Itemize" }

    place [ "2.2 能力" ]
    place [ "2.3 技能" ]
    [omit rest of here]
]

#   Example other module
"2.2 能力" : module [

#   functin is a name of types of structure.
#   function define function/procedure.
    method1 : function [
    ]

    method2 : function [
    ]

    method3 : function [
    ]


    # "struct" is a name of types
    能力 : struct [
        # You can access this as 能力/心 or "能力/心.
        # "integer" is a name of type. 
        [ 心 : integer [ 5 ... 9 ] ]
        [ 体 : integer [ 5 ... 9 ] ]
        [ 技 : integer [ 5 ... 9 ] ]
        [ 魂 : integer [ 5 ... 9 ] ]
    ]

#   How to treat Attributes Points?

    

    能力/心 : set/byUSER
    cond [
        [ [ ( 能力/心 < 5 ) ] [ alart "ERROR" ] ]
        [ [ ( 能力/心 > 9 ) ] [ alart "ERROR" ] ]
    ]

    能力/体 : set/byUSER
    cond [
        [ [ ( 能力/体 < 5 ) ] [ alart "ERROR" ] ]
        [ [ ( 能力/体 > 9 ) ] [ alart "ERROR" ] ]
    ]

    能力/技 : set/byUSER
    cond [
        [ [ ( 能力/技 < 5 ) ] [ alart "ERROR" ] ]
        [ [ ( 能力/技 > 9 ) ] [ alart "ERROR" ] ]
    ]

    能力/魂 : set/byUSER
    cond [
        [ [ ( 能力/魂 < 5 ) ] [ alart "ERROR" ] ]
        [ [ ( 能力/魂 > 9 ) ] [ alart "ERROR" ] ]
    ]

    interface 能力

#   Each variables, structs, and maybe consts are refered by pointers.
#   receiver will be made automatically, based on transparent or place.
#   connect will make channel to other fillers except upper layers.
#   connect can make channel through FRAME.
    connect 能力

]

[omit others]

========================================
 

この形式言語はFORTH、REBOL、LISPなどなどを参考にしているとともに、宣言型と手続き型の融合として想定しています。もちろん、まだ想定段階であり、"SYDEKICK BASIC BASIC" の内容をすべて "SYDEKICK/F" として書き出すまでに大きな仕様変更があるかもしれません。現状において大きな特徴と言えるだろうものは、「文字列も変数名、モジュール名、関数名などとして使える」 (宣言されていない文字列が持つ内容は、その文字列と同じものとする)、「変数名、モジュール名、関数名などが複数の名前を持つことができる」 ( { 名前A 名前B } など)  というところがあるかと思います。特に後者は、翻訳の手間を少なくする方法として採用しています。

"SYDEKICK BASIC GUIDES" をご予約いただいた方には、 "SYDEKICK/F" の記述の原則としているものなども含めて紹介できればと考えています。

"Flap!" と "SYDEKICK BASIC GUIDES" のご予約をお待ちしています。ただし、予約を受け付けられる数には上限があることにご注意ください。"Flap!" は25個程度、 "SYDEKICK BASIC GUIDES" は50個程度となっています。