スキン仕様

スキンの仕様について説明します。
オリジナルスキン作成の際に参考にしてください。

目次


概要

BombClickをインストールしたフォルダには skin というフォルダが既に存在しています。
新規にスキンを作成する場合は skin フォルダ直下に新しいスキン用のフォルダを作成し、画像ファイル、効果音ファイル、および設定ファイルを格納します。

インストールフォルダ\
skin\
スキン毎のフォルダ\

※ 「スキン毎のフォルダ」のフォルダ名は任意です(タスクトレーのメニューに表示されるスキン名は設定ファイル内で指定します)。


BombClickでは、左右のマウスボタンに異なるスキンを割り当てることができます。
1つのスキン内に、マウスボタン押下げ時、押上げ時の動作を記述します。


Ver.1.4以降、透過色を含むPNG形式ファイルによる描画が可能となりました(以下、Aero対応スキン)。
通常スキン Aero対応スキン
(Ver 1.4以降)

1つの設定ファイル内に、通常スキンとAero対応スキンの2種類の記述を行います。
Aeroが有効な場合に表示する画像と、Aeroが無効な場合に表示する画像、の両方(どちらか一方のみでもOK)を記述することができます。
記述内容による動作の違いは以下の通りです。

スキンの設定 Aeroが無効な環境 Aeroが有効な環境
通常画像:記述あり
Aero画像:記述あり
通常スキンで描画されます Aero対応スキンで描画されます
通常画像:記述あり
Aero画像:記述なし
通常スキンで描画されます
通常画像:記述なし
Aero画像:記述あり
描画されません Aero対応スキンで描画されます

※ 正確には、Aeroの有効/無効とは、デスクトップコンポジションのON/OFFを意味します



画像ファイル

クリック時に画面に表示する画像ファイルです。
複数の画像ファイルを連続して描画することでアニメーション表示を行います。

通常スキンの場合は、BMP画像でなければなりません。透過色は、座標(0, 0)の色を自動選択します(一連のアニメーションでは透過色は同一でなければなりません)。
一方、Aeroスキンの場合は、32Bit ARGB形式のPNG画像でなければなりません。透過色は、画像内の透過色で描画されます。

画像の縦横サイズは任意ですが、一連のアニメーションでは同一でなければなりません。

なお、オプションでのサイズ変更や、設定ファイルによってランダムにサイズ変更が可能なため、少し大き目のサイズを用意しておくと、拡大した際に綺麗に表示できます(大き目の画像を用意した場合でも、下記config.iniのImageScaleの値を調整して目的のサイズまで縮小できます)。




効果音ファイル

クリック時に再生する音声ファイルです。
WAV形式でなければなりません。

1つの効果音ファイルにつき同時8多重再生まで対応しています。
再生時間が長い効果音で連続してクリックした時など、9音以上の多重再生時は再生中の音声を1つ停止して新規に再生を開始するため、音声が途切れてしまいますので、なるべく再生時間の短いものを用意してください。




設定ファイル

スキン全体の設定を行うファイルです。
ファイル名は config.ini でなければなりません。
WindowsのINIファイル形式で記述します。

config.ini ファイルは以下のセクションで構成されます。

セクション名 内容
DATA 全般の設定を行います
IMAGE_DOWN クリック押下げ時に使用する画像を設定します
IMAGE_UP クリック押上げ時に使用する画像を設定します
SOUND_DOWN クリック押下げ時の効果音の再生方法について設定します
SOUND_UP クリック押上げ時の効果音の再生方法について設定します
FRAME_DOWN クリック押下げ時のアニメーションの表示方法について設定します
FRAME_UP クリック押上げ時のアニメーションの表示方法について設定します



[DATA] セクション

全般の設定を行います。

キー名 内容
Name タスクトレーの右クリックメニューに表示されるスキン名を指定します。
Aero スキン内にAeroスキン用の画像が含まれるか否かを指定します。
0 含まない
1 含まれる

Aeroスキン用の画像は [IMAGE_UP],[IMAGE_DOWN] セクションの AeroN キーで指定します(Nは連番)。
ForL
ForR
タスクトレーの右クリックメニューのスキン選択メニューに、スキンを追加するか否かを指定します。
0 表示しない
1 表示する

例) 左ボタン専用のスキンを作成した場合は、ForLを 1 に、ForRを 0 に指定します。
Enable_Down
Enable_Up
マウスボタン押下げ(上げ)時にアニメーション、効果音再生を行うか否かを指定します。
0 アニメーション、音声再生を行わない
1 アニメーション、音声再生を行う

例) ボタン押下げ時のみアニメーション、効果音再生を行う場合は、Enable_Downを 1 に、Enable_Upを 0 に指定します。
Probability クリック時の Probability / 10000 の確率で動作するようになります。

クリック時に毎回発生するのではなく、希に発生させたいという場合はこの値を調整してください。
省略時は 10000 が選択されます。

例) 平均して10クリックで1回動作させたい場合は 1000 を指定します。
PtnSelectType クリック毎に選択されるアニメーションパターンの選択アルゴリズムを指定します。
0 ランダム
1 連番

1を指定した場合は、SeqPtnShareType, SeqPtnClearTimer, SeqPtnLoopIndex で連番のカウント方法を制御できます。
省略時は 0 が選択されます。
SeqPtnShareType アニメーションパターンの選択アルゴリズムが1(連番)の場合、左右のマウスで連番を共有するか否かを指定します。
0 左右のマウスボタンで連番値を共有しない
1 左右のマウスボタンで連番値を共有しない + 逆側のマウスボタンをがクリックされた場合に連番を0にクリアする
2 左右のマウスボタンで連番値を共有する

左右のマウスで連番を共有する場合は、左右のボタンに割り当てるスキンの両方ともが PtnSelectType = 1(連番), かつ SeqPtnShareType = 2(共有する) でなければなりません。さらに両方のスキンのPatternの値が同じでなければなりません(これらの条件を満たさない場合は連番は共有されません)。

省略時は 0 が選択されます。

例) 初期状態から 左→右→左→左 とクリックした場合、次の左クリックまたは右クリック時に選択されるアニメーションパターンは以下のようになります。
SeqPtnShareType 左クリック 右クリック
0 3 1
1 2 0
2 4 4
SeqPtnClearTimer アニメーションパターンの選択アルゴリズムが1(連番)の場合、マウスクリック押上げから指定時間経過した時に連番を0にクリアするか否かを指定します。
0 クリアしない
1以上 クリアする(ミリ秒で指定)

SeqPtnShareTypeが 0 または 1 の場合は、左右のマウスボタン毎に時間を測定します。

省略時は 10000 (10秒) が選択されます。
SeqPtnLoopIndex アニメーションパターンの選択アルゴリズムが1(連番)の場合、アニメーションパターンが Pattern-1 に到達した時の、次のアニメーションパターンを指定します。

例) Pattern = 5, SeqPtnLoopIndex = 3 の場合は
0, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4 …… (連番クリアまで 3,4 を繰り返す)
となります。

省略時は 0 が選択されます。



[IMAGE_DOWN],[IMAGE_UP]セクション

クリック押下げ(上げ)時に使用する画像を設定します。


[IMAGE_DOWN],[IMAGE_UP]共通

キー名 内容
Num 使用する画像の枚数を指定します。
0 を指定することはできません。アニメーションを行わずに、音声再生のみ行う場合は透過色のみの画像を用意してください。

通常スキン用の画像数と、Aeroスキン用の画像数は同一でなければなりません。
0 〜 Num-1 Numキーで指定した枚数分の通常スキン用の画像のファイル名を指定します(ファイル名のみでパスは不要)。
キー名はインデックスとなり(以下、「Imageインデックス」)、0 から Num - 1 まで全て記述する必要があります。
Aero0 〜
AeroNum-1
Numキーで指定した枚数分のAeroスキン用の画像のファイル名を指定します(ファイル名のみでパスは不要)。
キー名の「Aero」以降の数値がImageインデックスとなり、0 から Num - 1 まで全て記述する必要があります。

[DATA]セクションの Aero キーが 0 の場合は記述不要です。
ImageScale 画像ファイルのサイズを指定した倍率(%)で調整します。

実際に画面に表示されるサイズは、
元のサイズ * ImageScale / 100
となります。



[SOUND_DOWN],[SOUND_UP]セクション

クリック押下げ(上げ)時の効果音の再生方法について設定します。


[SOUND_DOWN],[SOUND_UP]共通

キー名 内容
Play 効果音の再生を行うか否かを指定します。
0 再生しない
1 再生する

効果音の再生を行わずに、アニメーションのみ行う場合は 0 を指定します。
WavFile 効果音のファイル名を指定します。


[SOUND_DOWN] のみ

キー名 内容
Loop 効果音をループ再生するか否かを指定します。
0 ループ再生しない
1 ループ再生する

ループ再生を行った場合、マウスボタン押上げ時に音声は停止します(StopWhenUpの値が1に固定されます)。
StopWhenUp マウスボタン押上げ時に音声を停止するか否かを指定します。
0 停止しない
1 停止する

この値が 0 の場合、最後まで再生されるまで効果音は停止されません。



[FRAME_DOWN],[FRAME_UP]セクション

クリック押下げ(上げ)時のアニメーションの表示方法について設定します。

前提条件として、以下の変数を用います。
Xmd, Ymd マウスをクリック(押下げ)した座標
Ymu, Ymu マウスをクリック(押上げ)した座標
ImgSize トレーメニューの Image Size で選択された値(%)
X, Y 現在画像が表示されている座標
Xv, Yv 各フレームの横方向、縦方向の移動量
RAND??? ランダム値
クリック時に決定し、1アニメーション内では不変
PTN 選択されたアニメーションパターン
SIZE サイズ係数
クリックごとに画像サイズ、アニメーションの描画時間、効果音の音程を変化させることができます
XG XGainVal, XGainMinにより算出された係数
YG YGainVal, YGainMinにより算出された係数

また、演算子、関数については以下を用います。
* 乗算
/ 除算
% 剰余算
abs() 絶対値



[FRAME_DOWN],[FRAME_UP]共通

キー名 内容
Num アニメーションのフレーム数を指定します。
0 を指定することはできません。
0 〜 Num-1 Numで指定した各フレームの描画方法を指定します。
キー名はインデックスとなり(以下、「Frameインデックス」)、0 から Num - 1 まで全て指定する必要があります。

値は、
Imageインデックス, 透過率, 描画時間, Xv, Yv
の5つの値となります

Imageインデックス 描画に使用するImageインデックスを指定します
0 〜 [IMAGE_DOWN or IMAGE_UP] Num - 1 の範囲で指定します。

透過率 画像全体の透過率を指定します
0 〜 255の範囲で、0は透明、255は非透明です

描画時間 描画時間をミリ秒で指定します
ChangeSpeedが 1 の場合、描画時間は、
描画時間 * 100 / SIZE
に調整されます

Xv, Yv フレーム毎の画像の移動量(ピクセル)
座標(X, Y)からの相対位置を指定します

実際の移動量は
横方向移動量 = Xv * XG / 100
縦方向移動量 = Yv * YG / 100
となります
AdjustX
AdjustY
アニメーションの初期表示位置を、マウスクリック位置からAdjustX, Adjustで指定した量移動させます。

初期表示座標は、
X = Xmd or mu + Adust X * ImgSize / 100
Y = Ymd or mu + AdjustY * ImgSize / 100
となります
XGain
YGain
アニメーションのフレーム毎の移動量Xv, Yvに係数 XG, YG を使用するか否かを指定します。

毎回決まりきった移動ではなく、Starスキンの移動のようにクリックごとに毎回異なる移動を行う場合はこの値を1に指定し、XGainVal, YGainVal, XGainMin, YGainMinで移動量の係数 XG, YG をランダムに変化させます。
XGainVal
YGainVal
アニメーションのフレーム毎の移動量の係数(移動量Xv, Yvを何%に調整するか)の最大値を指定します。
XGainが 0 の場合はこの値は無視されます(YGainも同様)。

移動量を調整する係数 XGは、「XGainMin 〜 XGainVal」の範囲内でランダムに決定されます(YGも同様)。

また、XGainValの値が負の場合、逆方向(左右対称)にも範囲を設定することができ、このとき XG は「XGainVal 〜 -XGainMin」、または「XGainMin 〜 -XGainVal」の範囲内でランダムに決定されます(YGも同様)。
XG, YGの値は1アニメーション内では不変です。

各フレームの移動量は、
横方向移動量 = Xv * XG / 100
縦方向移動量 = Yv * YG / 100
となります。

例1) Xv = 10, XGainVal = 500, XGainMin = 100 の場合、横方向移動量 Xv は、「10〜50」の範囲内でランダムに決定されます
例2) Xv = 10, XGainVal = -500, XGainMin =80 の場合、横方向移動量 Xv は、「8〜50」または「-50 〜 -8」の範囲内でランダムに決定されます
XGainMin
YGainMin
XGの範囲の最小値を指定します。
0 〜 abs(XGainVal) の範囲で指定します。
Pattern アニメーションパターン数を指定します。

同じ動きをするが画像には複数のパターンを持たせたい時に使用します。

例えば、Heartスキンではパターンが13個あり、1アニメーションでは1つの画像しか使用しませんが、クリック時に13色の中からランダムに色を選択しています。また、Slapスキンでは、パターンが4個あり、クリックごとに異なるアニメーションを描画しています。

PtnSelectType = 0 (ランダム) の場合は、クリック時にパターン PTN はランダムに選択されます。
正確には、パターン PTN は、前回のパターンと重複しないよう、
iTemp = 1 + RANDptn % (Pattern - 1)
PTN = (前回使用したPTN + iTemp) % Pattern
で算出しています。

[IMAGE_DOWN]、[IMAGE_UP]では、Patternで指定した分の画像のセットが必要です。
例えば、マウス押下げ時に5つのパターンを指定するとき、[FRAME_DOWN] Pattern = 5となります。
そして、アニメーションで3枚の画像を使用する場合([FRAME_DOWN]の全フレームで 0, 1, 2 までの Imageインデックスを使用する場合)、計15枚の画像が必要となり、[IMAGE_DOWN] Numの値は 15 でなければなりません。
WrapImage 画像が画面外にはみ出したときに、反対側から表示するか否かを指定します。
0 表示しない
1 表示する
ChangeSize クリック毎に画像サイズをランダムに変更するか否かを指定します。
0 変更しない
1 変更する

この値が 0 のとき、SIZE = 100 となります。
この値が 1 のとき、SIZEの値は Range0〜Range3 により決定されます。

画面サイズは、
元のサイズ *100 / SIZE
となります。
係数 SIZE が小さいほど画面サイズは大きくなります。
ChangeSpeed 画像の描画時間を SIZE によって変化させるか否かを指定します。
0 変化させない
1 変化させる

この値が 1 の場合、描画時間は、
元の描画時間 * 100 / SIZE
となります。
係数 SIZE が小さいほど描画時間が長くなります。
ChangeFrequency 効果音の音程(周波数)を SIZE によって変化させるか否かを指定します。
0 変化させない
1 変化させる

この値が 1 の場合、効果音の音程は、
元の音程 * SIZE / 100
となります。
係数 SIZE が小さいほど音程は低くなります。
Range0 〜 Range3 係数 SIZE の算出ルールを設定します。

値は、
分配範囲, 基底値, ランダム範囲
の3つの値となります

係数 SIZE はRange0〜Range3を使用し、以下のように算出されます。

添え字 i を使用し、「Rangei=分配範囲i, 基底値i, ランダム範囲i」とした時、
RANDsize = rand() % 100
for(i=0; i<4; i++)
{
    if(RANDsize < 分配範囲i)
    {
        SIZE = 基底値i + RANDsize % ランダム範囲i
        break
    }
}


例)
Range0=20,100,1
Range1=70,80,21
Range2=97,70,31
Range3=100,40,31

のとき、

5回に1回は、SIZE = 100
2回に1回は、SIZE = 80〜100
4回に1回は、SIZE = 70〜100
100回に3回は、SIZE = 40〜70

が選択されます。
ChaseCursor 画像がマウスカーソルを追従するか否かを設定します。
0 追従しない
1 追従する


[FRAME_DOWN] のみ

キー名 内容
EndAction アニメーションが終了(FrameインデックスがNumに到達)した時の動作を指定します。
0 アニメーションを終了し、画像も非表示にします
1 アニメーションを終了しますが、最後の画像の表示したままにします
2 アニメーションをループさせます

この値が 2 のとき、Frameインデックスは LoopIndex で指定した値まで戻ります。
この値が 1, または 2 のとき、マウスボタン押上げ時に画像は非表示になります(HideWhenUpの値が1に固定されます)。

例)
EndAction = 2, Num = 5, LoopIndex = 3の場合、Frameインデックスは
0, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4 …… (マウス押上げまで 3,4 を繰り返す)
となります
LoopIndex アニメーションをループ再生する際に、Frameインデックスをどのインデックスに戻るかを指定します
0 〜 Num-1の範囲で指定します。
HideWhenUp マウスボタン押上げ時にアニメーションを停止するか否かを指定します。
0 停止しない
1 停止する


[FRAME_UP] のみ

キー名 内容
InitialPos マウス押上げ時のアニメーションの初期表示位置を指定します。
0 マウスの押上げ位置(Xmu, Ymu)とする
1 マウスの押下げ位置(Xmd, Ymd)とする
2 現在画像が表示されている位置(X, Y)とする
InheritPattern 押上げ時のパターンに、マウス押下げ時のパターン PTN を継承するか否かを指定します。
0 継承しない
1 継承する

この値が 1 のとき、Pattern の値は無視されます。
また、PtnSelectType = 1 (連番) の場合は、この値にかかわらず押し下げ時の PTN が継承されます。
InheritSize 押上げ時のサイズ係数に、マウス押下げ時のサイズ係数 SIZE を継承するか否かを指定します。
0 継承しない
1 継承する

この値が 1 のとき、Range0〜Range3 の値は無視されます。
また、PtnSelectType = 1 (連番) の場合は、この値にかかわらず押し下げ時の SIZE が継承されます。