汝、述べぬこと無かれ

投稿者:   mini ___ 投稿日:2011/04/24 16:45

 
Q.どうしてノベルゲーム?
A.そこにノベルゲームがあるから

Q.どうして双子?
A.祝福の鐘が鳴り響いたから


そういうわけで、無事に後悔しました。
プレイして頂けるだけで感謝です。

さて、どうやって関数群を紹介しようかなーと考えていたわけですが、
シーンとして公開した場合、中身を見ることは叶うのでしょうか?

関数だけでなく、実際にどう使用しているのかを示さなければ、
若干格好がつかないような。そういう気持ちです。


とりあえず、実際の使用例はさておいて、
関数群だけを公開しておこうと思います。


とにかく考えれば誰でも作れるので、特に著作権の主張とかそういうのは考えていませんが、
そのかわり私から何かアクションを起こすようなことはしません。

どんなバグがあっても、どんな不具合が出ても、どう使えばいいか分からなくても、
そこはご自身で改変、改良、読み解いて頂きたい。
あんまりコメントを付けてはいないソースですが、全てここひと月の間に
私がWikiや掲示板を駆けまわって情報を集め、作った関数群ですので、
調べれば誰にでも理解できるはずなんです。
そういう訳で、使う方は是非自己責任でお願いしますね。
これを唯一の条件としておきます。

もっと気軽に →日本語ノベルえでぃた/aoihikawaさん
 
# 約5000文字(改行数:約200  空白数:約1100)

## キャラ初期化関数(キャラ名 , 画像ID , x座標 , y座標 , 画像幅 , 画像高さ)
def F_InitVariable(a , gID , x , y , w , h)
  setVariable(a , createArray())  # 配列作成 sとgをよく間違える
  getVariable(a)[0] = gID  # 画像ID
  getVariable(a)[1] = x  # x座標
  getVariable(a)[2] = y  # y座標
  getVariable(a)[3] = 0  # 反転
  getVariable(a)[4] = w  # 画像の幅(x)
  getVariable(a)[5] = h  # 画像の高さ(y)
  getVariable(a)[6] = 0  # 前回の表情を記憶する
  getVariable(a)[7] = createSprite(gID)  # スプライト番号 マップによって変化?
  setSpriteZOrder(getVariable(a)[7], 5)  # キャラクタは5の位置に
end

## キャラ再配置関数(キャラ名) # 反映なし
def F_ResetPict(a)
  F_InitVariable(a , getVariable(a)[0] , getVariable(a)[1] , getVariable(a)[2] , 
         getVariable(a)[4] , getVariable(a)[5])
end

## キャラ状態変更関数(キャラ名 , 表情 , 反転) # 反映なし
def F_SetStatePict(a , b , c)
  getVariable(a)[3] = c
  getVariable(a)[6] = b
  d = 1
  e = getVariable(a)[4]*c
  if(c == 1)
    d = -1
  end
  setSpriteRect(getVariable(a)[7] , getVariable(a)[4]*b , 0 , 
        getVariable(a)[4] , getVariable(a)[5] , getVariable(a)[1]+e , getVariable(a)[2] , 
        getVariable(a)[4]*d , getVariable(a)[5])
end

## キャラ位置変更関数(キャラ名 , x座標 , y座標 , 絶対位置) # 反映なし
def F_SetPosPict(a , x , y , b)
  if(b == 1)
    getVariable(a)[1] = x
    getVariable(a)[2] = y
  elsif(b == 0)
    getVariable(a)[1] = getVariable(a)[1]+x
    getVariable(a)[2] = getVariable(a)[2]+y
  end
  F_SetStatePict(a , getVariable(a)[6] , getVariable(a)[3])
end

## キャラ移動関数(キャラ名 , 移動幅(x) , 移動高さ(y) , 時間(ms)) # 反映あり
def F_MovePict(a , x , y , s)
  n = 30
  if(s < n)
    F_SetPosPict(a , x , y , 0)
    drawCanvas()
  else
    s = s/n
    xx = x/s
    yy = y/s
    while (s > 0)
      F_SetPosPict(a , xx , yy , 0)
      s = s-1
      drawCanvas()
      waitTime(n)
    end  # ここまでwhile
  end  # ここまでif
end

## キャラ身じろぎ関数(キャラ名 , 移動幅(x) , 移動高さ(y) , 時間(ms) , 回数) # 反映あり
def F_TwitchPict(a , x , y , s , n)
  if(n > 0)
    s = s/n  # 時間内にn回繰り返す
    s = s/2  # 1回に行き帰りする
    while(n > 0)
      F_MovePict(a ,  x ,  y , s)
      F_MovePict(a , -x , -y , s)
      n = n-1
    end  # ここまでwhile
  end  # ここまでif
end

## 背景描写関数(画像ID , x座標 , y座標 , 幅 , 高さ , モード) # 反映なし
def F_ShowBG(gID , x , y , w , h , mode)
  setVariable("BG" , createSprite(gID))
  if(mode == 0)  # (w,h)として中央に描画
    setSpriteRect(getVariable("BG") , 0 , 0 , w , h , (800-w)/2 , (600-h)/2 , w, h)
  elsif(mode == 1)  # (x,y)としてその位置に描画
    setSpriteRect(getVariable("BG") , 0 , 0 , w , h , x , h , w , h)
  end
  setSpriteZOrder(getVariable("BG") , 1)  # 背景は1の位置に(最下層)
end

## 背景消去関数() # 反映なし
def F_HideBG()
  deleteSprite(getVariable("BG"))
end

## メッセージ表示関数1(キャラ名 , 文章) # 反映あり
def F_Mes1(a , m)
  c = createSprite(46016)
  setSpriteRect(c , 0 , 0 , 800 , 160 , 0 , 600-160 , 800 , 160)
  setSpriteZOrder(c , 10)  # 10の位置に描写。(キャラクタは5)
  drawCanvas()
  tID = createText(100 , 480 , 200 , 100)
  setText(tID, a)
  setTextFontSize(getTextFontSize() - 4)
  speakFullScreen(false , "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n     " , m)
  setTextFontSize(getTextFontSize() + 4)
  deleteText(tID)
  deleteSprite(c)
  drawCanvas()
end

## メッセージ表示関数2(名前 , 文章) # 反映あり
def F_Mes2(a , m)
  c = createSprite(46016)  # mesboxの画像ID
  setSpriteRect(c , 0 , 0 , 800 , 160 , 0 , 600-160 , 800 , 160)
  setSpriteZOrder(c , 10)  # 10の位置に描写。(最上層)
  drawCanvas()
  nID = createText(100 , 470 , 200 , 100)
  tID = createText(130 , 500 , 660 , 100)
  setText(nID, a)
  setText(tID , m)
  flag = true
  startInput()
  while(flag)
    while(hasInput())
      takeInput()
      if(isKeyDown("SPACE") || isKeyDown("Z") || isMouseDown())  # スキップ出来ません
        flag = false
      end # キー入力検出終了
    end # 入力出しwhile終了
    waitTime(30)
  end
  endInput()
  deleteText(nID)
  deleteText(tID)
  deleteSprite(c)
  drawCanvas()
end

## フェードアウト関数(R , G , B , 時間(ms)) # 反映あり
def FadeOut(a , b , c , d)
  fadeOut(a , b , c)
  waitTime(d)
end

## クレジット表示関数(画像ID , 画像幅 , 高さ) # 反映なし
def F_Credit(a , w , h)
  FadeOut(0 , 0 , 0 , 800)
  deleteAllSprite()
  deleteTextAll()
  drawCanvas()
  if(!getCanvasVisible())
    setCanvasVisible(true)
  end
  cID = createSprite(a)
  setSpriteZOrder(cID , 10)
  y = 0
  speed = 1
  startInput()
  f_first = true
  while(h-600 > y)
    setSpriteRect(cID , 0 , y , w , 600 , (800-w)/2 , 0 , w , 600)
    drawCanvas()
    if(f_first)
      fadeIn()
      f_first = false
    end
    y = y+speed  # 基本の速さはここで変更
    if(y < 0)
      y = 0
      speed = 0
    end
    while(hasInput())
      takeInput()
      if(isKeyDown("UP"))
        speed = speed+1
      elsif(isKeyDown("DOWN"))
        speed = speed-1
      end # キー入力検出終了
    end # 入力出しwhile終了
    waitTime(30)
  end # クレジットループ終了
  ff = true # 後はユーザーのタイミングで終了させる
  while(ff)
    while(hasInput())
      takeInput()
      if((isKeyDown("Z")) || (isMouseDown()))
        ff = false
      end # キー入力検出終了
    end # 入力出しwhile終了
    waitTime(30)
  end # ここまで
  endInput()
  FadeOut(0 , 0 , 0 , 500)
  deleteSprite(cID)
  drawCanvas()
  fadeIn()
  goEnding()
end



お粗末様でした。

今回のゲーム作成で、多方面で皆様に協力を頂きました、ありがとうございました。
作成したゲーム 
関係する公開素材


■追記
 若干無理がある気がしつつも、ここからスクリプトを置いていきます。
 こういう風に作りました。よ。っていう。ね。あれですよ。
冒頭:姉妹登場シーン辺り
# system設定 保存される…ハズ
setSelectFontSize(getSelectFontSize()-2)
setFullScreenSelectLeftWidth(200, 800)

# chara設定
  # 微笑,目閉じ,普通,ジト目,演技
F_InitVariable("妹" , 48266 , 0 , 0 , 400 , 700)
  # 普通,笑顔,呆れ,驚き,泣き,ツッコミ
F_InitVariable("姉" , 48560 , 0 , 0 , 400 , 700)
  # 通常,焦り
F_InitVariable("やでー" , 46401 , 0 , 0 , 260 , 260)
  # 笑,怒,Σ,汗,ハート,?,!
F_InitVariable("漫符" , 48870 , 0 , 0 , 140 , 140)


setCanvasVisible(true)
F_ResetPict("妹")
F_SetPosPict("妹" , 800 , 0 , 1)
F_SetStatePict("妹" , 1 , 0)
F_ResetPict("姉")
F_SetPosPict("姉" , -400 , 0 , 1)
F_SetStatePict("姉" , 5 , 1)
F_ResetPict("やでー")
F_SetPosPict("やでー" , -260 , 260 , 1)
F_SetStatePict("やでー" , 0 , 0)
# ここまでマップを変えるごとに描き直す。
playBGM(11195)

F_MovePict("妹" , -400 , 0 , 500)
F_TwitchPict("妹" , 0 , 50 , 600 , 1)
waitTime(800)
F_SetStatePict("妹" , 4 , 0)
F_SetStatePict("漫符" , 4 , 1)
F_SetPosPict("漫符" , 400 , 130 , 1)
F_Mes2("妹" , "やっほーみんなっ!")
F_Mes2("妹" , "やっほーみんなっ!\nのべるげぃむ、はっじまっるよーっ♪")
F_MovePict("姉" , 300 , 0 , 200)
F_SetStatePict("漫符" , 2 , 1)
F_SetPosPict("漫符" , 220 , 100 , 1)
F_Mes2("姉" , "初っ端から媚び売り始めた!?")
F_SetPosPict("漫符" , -140 , 0 , 1)
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "そういう姉さんはツッコミスタートですが。")
F_MovePict("姉" , 100 , 0 , 400)
F_SetStatePict("姉" , 2 , 1)
F_Mes2("姉" , "いやいや、アンタが変なこと始めるから。")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "変なことて。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "変なことて。\nさておき、本編始めましょうか。")
F_SetStatePict("姉" , 1 , 1)
F_Mes2("姉" , "あいよー。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "ゲームと銘打ってはいますが、ぶっちゃけ中身はほとんどありません。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "ノベルゲーム作るのがほんの少しでも楽になったらな~\nなんていうへべれけな思いでモッサリと作った関数を、")
F_Mes2("妹" , "どうよ?これどうよ?\nと紹介していくだけのノベルとなっております。")
F_SetStatePict("姉" , 2 , 1)
F_Mes2("姉" , "へでれけて。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "故に、【ゲ ー ム 要 素 は 皆 無】!")
   # 特殊処理。しゃ-ないやん
ccc = createSprite(46016)
setSpriteRect(ccc , 0 , 0 , 800 , 160 , 0 , 600-160 , 800 , 160)
setSpriteZOrder(ccc , 10)
drawCanvas()
nnnID = createText(100 , 470 , 200 , 100)
tttID = createText(130 , 500 , 660 , 100)
F_SetStatePict("妹" , 2 , 0)
drawCanvas()
setText(nnnID, "妹")
setText(tttID , "故に、【ゲ ー ム 要 素 は 皆 無】!\nクリアしたいだけの方は、どうぞスキップボタンをお好きなだけ押してください。")
ffflag = true
startInput()
while(ffflag)
  waitTime(30)
  while(hasInput())
    takeInput()
    if(isKeyDown("Z") || isMouseDown())
      ffflag = false
      deleteText(nnnID)
      deleteText(tttID)
      deleteSprite(ccc)
    elsif(isKeyDown("SPACE"))
      deleteText(nnnID)
      deleteText(tttID)
      deleteSprite(ccc)
      F_SetStatePict("妹" , 1 , 0)
      drawCanvas()
      F_Mes2("妹" , "…と言いたいところですが、実際にはスキップできない『仕様』となっています。申し訳ありません。")
      F_SetStatePict("姉" , 1 , 1)
      F_Mes2("姉" , "これについてはまた後で説明するよ。")
      ffflag = false
    end # キー入力検出終了
  end # 入力出しwhile終了
end
endInput()
drawCanvas()
   # 特殊処理ここまで。
F_SetStatePict("妹" , 2 , 0)
F_SetStatePict("姉" , 0 , 1)
F_Mes2("妹" , "それでは、来賓のお客様をご紹介します。")
F_Mes2("妹" , "それでは、来賓のお客様をご紹介します。\nRmakeマスコットキャラ、まじたい様。")
F_MovePict("やでー" , (800-260)/2+260 , 0 , 800)
F_Mes2("まじたい?" , "やでー!")
F_SetStatePict("姉" , 3 , 1)
F_Mes2("姉" , "……。")
F_Mes2("まじたい?" , "……。")
# 一枚絵 投げる
F_SetStatePict("姉" , 5 , 1)
F_Mes2("姉" , "おらぁーーっ!")
F_Mes2("まじたい?" , "やーーーでーーー!")
F_SetPosPict("やでー" , -260 , 0 , 1)
F_SetStatePict("妹" , 3 , 0)
# 一枚絵 終わり
F_Mes2("妹" , "あー。ちょっ…何してくれるんですか姉さん…。")
F_SetStatePict("姉" , 4 , 1)
F_Mes2("姉" , "だって私あんなの知らないもん!危ない橋渡りたくないもん!!")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "『まじたいのみ』の一枚絵が見つからなかったので、\n徹夜で捏造しました。")
F_SetStatePict("姉" , 2 , 1)
F_Mes2("姉" , "なんでそんな事に無駄な労力を使うかなぁ!?")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "とまあ、こんな感じでRmake様に敬意を払った所で、\n説明に入りたいと思います。")
F_SetStatePict("姉" , 3 , 1)
F_Mes2("姉" , "敬意…?")
F_Mes2("妹" , "と行きたい所ではありますが、ぶっちゃけ長い上に大したことを書くつもりもありません。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "ここでゲームクリア。あるいはゲームオーバー。\nを、選んでいただこうと思います。")
F_SetStatePict("姉" , 1 , 1)
F_Mes2("姉" , "あ、私も教頭先生の話は嫌いだったなー。")
F_SetStatePict("妹" , 2 , 0)
F_SetStatePict("姉" , 0 , 1)
F_Mes2("妹" , "いかがなさいますか?")
case speakFullScreenWithSelect(true, 3,"折角だから俺はこのクリアの扉を選ぶぜ!","ゲームオーバーか。それもまた一興…","睡眠導入剤になるなら説明を聞く", 
    "選択してください")
  when 0
    F_Mes2("妹" , "成程。")
    F_SetStatePict("妹" , 0 , 0)
    F_Mes2("妹" , "成程。\nそれでは、お粗末様でした。")
    F_TwitchPict("妹" , 0 , 50 , 600 , 1)
    F_SetStatePict("姉" , 1 , 1)
    F_TwitchPict("姉" , 0 , -20 , 200 , 1)
    F_Mes2("姉" , "おつかれさまー!")
    goEnding()
  when 1
    F_Mes2("妹" , "敢えて修羅の道を行くと言うのですね…。")
    F_SetStatePict("妹" , 0 , 0)
    F_Mes2("妹" , "敢えて修羅の道を行くと言うのですね…。\nお粗末様でした。")
    F_TwitchPict("妹" , 0 , 50 , 600 , 1)
    F_SetStatePict("姉" , 1 , 1)
    F_TwitchPict("姉" , 0 , -20 , 200 , 1)
    F_Mes2("姉" , "おつかれさまー!")
    goBadEnding()
  when 2
    F_SetStatePict("姉" , 0 , 1)
    F_Mes2("姉" , "おお…!奇特な方もいるもんだ!")
    F_SetStatePict("妹" , 1 , 0)
    F_Mes2("妹" , "姉さん!『母危篤、スグ帰レ。』との連絡が!")
    F_SetStatePict("姉" , 1 , 1)
    F_Mes2("姉" , "ドッキリ率100%超な気はするけど、一応帰るね!")
    F_MovePict("姉" , 0-getVariable("姉")[4] , 0 , 300)
    changeScene(12892)
end

シーン2:グラフィック関数の説明を始めた辺り
setCanvasVisible(true)
F_ResetPict("妹")
F_SetPosPict("妹" , 400 , 0 , 1)
F_ResetPict("姉")
F_SetPosPict("姉" , -400 , 0 , 1)
F_InitVariable("いんじゅー" , 48819 , -260 , 260 , 260 , 260)
F_SetStatePict("いんじゅー" , 0 , 1)
F_ResetPict("漫符")
# ここまで定型文

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "さて、それでは僭越ながら説明を始めさせて頂きます。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "さて、それでは僭越ながら説明を始めさせて頂きます。\n『こんなことも出来るんだね。』あるいは、\n『知ってる知ってる。』の精神でお楽しみください。")

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "まずはグラフィック関連ですね。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "今回、キャラ、メッセージ欄、及び漫符の描写等、\nほぼ全ての画像表現において、拡張画像表示関数を使用しています。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "一枚絵から切りだして使用することが出来るため、\n表情をコロコロと変えることに向いているのと、")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "ダブルバッファリングによる描写が可能であるという、\nこの2つが主な理由ですかね。")
F_Mes2("妹" , "クルクルと表情が変わり、モソモソと動くキャラ。")
F_SetStatePict("妹" , 0 , 0)
F_Mes2("妹" , "クルクルと表情が変わり、モソモソと動くキャラ。\nどうでしたか?姉さんは可愛…")
F_MovePict("いんじゅー" , 400 , 0 , 400)
F_Mes2("QB" , "最強の魔法少女になるだろうね。")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "……。")
F_Mes2("QB" , "……。")
F_SetStatePict("妹" , 2 , 0)
F_SetStatePict("姉" , 5 , 1)
F_MovePict("姉" , 400 , 0 , 300)
F_Mes2("姉" , "どっせーーいっ!")
F_Mes2("QB" , "まどかああぁぁぁぁ!!")
F_MovePict("いんじゅー" , -400 , 0 , 0)
F_SetStatePict("姉" , 2 , 1)
F_Mes2("姉" , "時事ネタは後で見返したときに死にたくなるからやめて欲しいなぁ!")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "おや姉さん、お疲れさまでした。")
F_Mes2("妹" , "おや姉さん、お疲れさまでした。\n説明の邪魔になるので、そっちでジッとしてて頂けますか?")
F_SetStatePict("姉" , 1 , 1)
F_Mes2("姉" , "はーい。")
F_SetStatePict("姉" , 0 , 0)
F_MovePict("姉" , -150 , 0 , 500)
F_SetStatePict("姉" , 0 , 1)

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "さて、説明を再開しますね。")
F_Mes2("妹" , "画面に描写されるキャラ…つまりは私たちですが、\n現在6つのパラメータを持っています。")
F_SetStatePict("姉" , 0 , 1)
F_Mes2("姉" , "のちのち増減するってことだね。")
F_Mes2("妹" , "そのパラメータは、以下のとおりです。")
F_Mes2("妹" , "そのパラメータは、以下のとおりです。\n画像ID")
F_Mes2("妹" , "そのパラメータは、以下のとおりです。\n画像ID xy座標")
F_Mes2("妹" , "そのパラメータは、以下のとおりです。\n画像ID xy座標 反転か")
F_Mes2("妹" , "そのパラメータは、以下のとおりです。\n画像ID xy座標 反転か 立ち絵一枚分の幅と高さ")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "画像IDはスプライト生成のため。")
F_Mes2("妹" , "画像IDはスプライト生成のため。\n座標と反転は言わずもがな。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "幅と高さですが、これは表情を指定するときに使用しています。")
F_Mes2("妹" , "画像の仕様を揃えるなら、キャラ毎に保持する必要もなかったのですが、\nそこらへんは適当に自由さを追求したということで。")
F_ShowBG(48807 , 0 , 0 , 284 , 29 , 0)
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "ちなみに、私の場合はこんな感じになっています。")
F_HideBG()
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "これをキャラ毎に書くというのも面倒だということで、\n関数化して1行で一気に初期化しています。")

F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "それでは関数の紹介を始めますね。")
F_Mes2("妹" , "それでは関数の紹介を始めますね。\nまずは表情を変える関数です。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "それでは関数の紹介を始めますね。\nまずは表情を変える関数です。\n実際に姉さんに使用してみるとしましょう。")
F_MovePict("姉" , 150 , 0 , 500)
F_Mes2("妹" , "F_SetStatePict(\"姉\" , 1 , 0)!  姉 笑い 通常")
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "あはは、くすぐったいよ!")
F_Mes2("妹" , "F_SetStatePict(\"姉\" , 5 , 1)!  姉 怒り 反転")
F_SetStatePict("姉" , 5 , 1)
F_Mes2("姉" , "…っていい加減にやめれーー!")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "……。")
F_SetStatePict("姉" , 2 , 1)
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "setSpriteRect()に引数を渡す際、\n一枚絵の幅*表情番号を指定しています。")
F_Mes2("妹" , "爆発グラのキャラアニメが順に横に並んでいるアレが近いですかね。")
F_Mes2("妹" , "反転させるというのも、x座標+画像幅の位置に、-指定で描写する感じです。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "反転させるというのも、x座標+画像幅の位置に、-指定で描写する感じです。\n説明がめんどk…難しいので、ソースをご覧ください。")
F_ShowBG(48812 , 0 , 0 , 454 , 199 , 0)
F_Mes2("妹" , "だいたいこんな感じで作ってます。")
F_HideBG()

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "次に、キャラを置く関数ですね。")
F_Mes2("妹" , "次に、キャラを置く関数ですね。\n先程のが表情指定なら、こちらは座標指定になります。")
F_Mes2("妹" , "F_SetPosPict(\"姉\" , 200 , 100 , 1)! \n 姉 200,400 絶対位置")
F_SetPosPict("姉" , 200 , 100 , 1)
F_Mes2("妹" , "F_SetPosPict(\"姉\" ,    0 ,   50 , 0)! \n 姉 -50,+50 相対位置")
F_SetPosPict("姉" , 0 , 50 , 0)
F_SetStatePict("姉" , 1 , 1)
F_Mes2("姉" , "おおっ!?瞬間移動だ!")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "…おめでたい頭ですね。")
F_MovePict("姉" , 0 , -180 , 240)
F_MovePict("姉" , 0 , 30 , 40)
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "絶対位置なら、キャラ座標を=引数。")
F_Mes2("妹" , "絶対位置なら、キャラ座標を=引数。\n相対位置なら、キャラ座標を+引数として、")
F_Mes2("妹" , "絶対位置なら、キャラ座標を=引数。\n相対位置なら、キャラ座標を+引数として、\nsetSpritePosition()で画像位置を変更しています。")
F_SetStatePict("姉" , 0 , 0)
F_MovePict("姉" , -200 , 0 , 500)
F_SetStatePict("姉" , 0 , 1)

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "続いて、漫符についてです。")
F_Mes2("妹" , "キャラの関数とは別途用意するつもりでしたが、")
F_Mes2("妹" , "キャラの関数とは別途用意するつもりでしたが、\nどうも挙動がほぼ同じようなので、")
F_Mes2("妹" , "キャラの関数とは別途用意するつもりでしたが、\nどうも挙動がほぼ同じようなので、\n\"漫符\"というキャラを作る、という方向になりました。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "割と悩んでいる部分なので、\nその内がっつり仕様が変わることになると思います。")
F_SetStatePict("漫符" , 0 , 1)
F_SetPosPict("漫符" , 270 , 100 , 1)
F_SetStatePict("姉" , 1 , 1)
F_Mes2("妹" , "笑い、")
F_SetStatePict("漫符" , 1 , 0)
F_SetPosPict("漫符" , 80 , 100 , 1)
F_SetStatePict("姉" , 5 , 1)
F_Mes2("妹" , "笑い、怒り、")
F_SetStatePict("漫符" , 2 , 1)
F_SetPosPict("漫符" , 280 , 100 , 1)
F_SetStatePict("姉" , 3 , 1)
F_Mes2("妹" , "笑い、怒り、驚き、")
F_SetStatePict("漫符" , 3 , 0)
F_SetPosPict("漫符" , 60 , 100 , 1)
F_SetStatePict("姉" , 2 , 1)
F_Mes2("妹" , "笑い、怒り、驚き、呆れ、")
F_SetStatePict("漫符" , 4 , 0)
F_SetPosPict("漫符" , 300 , 150 , 1)
F_SetStatePict("姉" , 1 , 1)
F_Mes2("妹" , "笑い、怒り、驚き、呆れ、はぁと、")
F_SetStatePict("漫符" , 5 , 0)
F_SetPosPict("漫符" , 250 , 70 , 1)
F_SetStatePict("姉" , 3 , 1)
F_Mes2("妹" , "笑い、怒り、驚き、呆れ、はぁと、疑問、")
F_SetStatePict("漫符" , 6 , 0)
F_SetPosPict("漫符" , 250 , 70 , 1)
F_SetStatePict("姉" , 5 , 1)
F_Mes2("妹" , "笑い、怒り、驚き、呆れ、はぁと、疑問、気付き")
F_SetPosPict("漫符" , -140 , 0 , 1)
F_SetStatePict("姉" , 0 , 1)
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "笑い、怒り、驚き、呆れ、はぁと、疑問、気付き\nとりあえず例としてそんな感じのを用意してみました。")

F_Mes2("妹" , "ここまでの関数は言わば「準備段階」にあたりますので、")
F_Mes2("妹" , "ここまでの関数は言わば「準備段階」にあたりますので、\n画面へ反映するためにdrawCanvas()を別途使用する必要があります。")
F_Mes2("妹" , "キャラAの表情、座標をセット、キャラBも同様にセット、")
F_Mes2("妹" , "キャラAの表情、座標をセット、キャラBも同様にセット、\n背景もセットしてから漫符も置いて画面に反映。って感じですかね。")

F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "さて、まだまだ続きますが、\n流石にもう飽きたのではありませんか?")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "さて、まだまだ続きますが、\n流石にもう飽きたのではありませんか?\n退席なさる方は遠慮なく申し出てくださいね。")
case speakFullScreenWithSelect(true, 3,"ハンサムな俺は突如クリアのアイデアが思いつく","隕石が来てゲームオーバーにしてくれる","退席しない。現実は非情である", 
    "選択してください")
  when 0
    F_SetStatePict("妹" , 1 , 0)
    F_Mes2("妹" , "ハンサムの由来は女性を手で扱いやすい顔、だとか何とか。")
    F_SetStatePict("妹" , 1 , 0)
    F_Mes2("妹" , "ハンサムの由来は女性を手で扱いやすい顔、だとか何とか。\nともあれお粗末様でした。")
    F_TwitchPict("妹" , 0 , 50 , 600 , 1)
    F_SetStatePict("姉" , 1 , 1)
    F_TwitchPict("姉" , 0 , -20 , 200 , 1)
    F_Mes2("姉" , "おつかれさまっ!")
    goEnding()
  when 1
    F_SetStatePict("妹" , 1 , 0)
    F_Mes2("妹" , "きて、と言うより落ちて来て、と言うのが正しいとは思いますが、\nそこは元ネタとの兼ね合いが云々。")
    F_SetStatePict("姉" , 1 , 1)
    F_TwitchPict("姉" , 0 , -20 , 200 , 1)
    F_Mes2("姉" , "お粗末様でしたっ!")
    goBadEnding()
  when 2
    F_Mes2("妹" , "非情も何も、選んだのはそちらですからね?")
    changeScene(12893)
end

シーン3:動く関数について説明を始めた辺り
setCanvasVisible(true)
F_ResetPict("妹")
F_ResetPict("姉")
F_SetPosPict("姉", -400 , 0 , 1)

F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "続いて、画面に反映される「動く」関数になります。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "続いて、画面に反映される「動く」関数になります。\n姉さん、ちょっとこちらに来て頂けますか?")
F_Mes2("妹" , "F_MovePict(\"姉\" , 300 , 0 , 800)  姉 +200,+0 800msで")
F_SetStatePict("姉" , 5 , 1)
# 特殊処理こっから
  c = createSprite(46016)  # mesboxの画像ID
  setSpriteRect(c , 0 , 0 , 800 , 160 , 0 , 600-160 , 800 , 160)
  setSpriteZOrder(c , 10)  # 10の位置に描写。(キャラクタは5)
  drawCanvas()
  nID = createText(100 , 470 , 200 , 100)
  tID = createText(130 , 500 , 660 , 100)
  setText(nID, "姉")
  setText(tID , "わっとっと。")
  F_MovePict("姉" , 300 , 0 , 800)
  deleteText(nID)
  deleteText(tID)
  deleteSprite(c)
# 特殊処理ここまで
F_SetStatePict("姉" , 0 , 1)
F_Mes2("姉" , "わっとっと。\nそんな無理矢理にしなくても。")
F_MovePict("姉" , 100 , 0 , 400)
F_SetStatePict("姉" , 2 , 1)
F_Mes2("姉" , "呼ばれたらそっち行くってば。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "このように、指定したキャラを指定した時間内に動かすことが出来ます。")
F_SetStatePict("妹" , 2 , 0)
F_SetStatePict("姉" , 0 , 1)
F_Mes2("妹" , "中身はF_SetPosPict()を細かく実行しているだけですし、")
F_Mes2("妹" , "中身はF_SetPosPict()を細かく実行しているだけですし、\n指定時間というのも正確なものにはなりません。")
F_Mes2("妹" , "中身はF_SetPosPict()を細かく実行しているだけですし、\n指定時間というのも正確なものにはなりません。\n頷く、震える、などでも使用しています。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "ちなみに、指定時間を30以下にすると、一瞬で移動が終了、")
F_Mes2("妹" , "ちなみに、指定時間を30以下にすると、一瞬で移動が終了、\nすなわちF_SetPosPict()と同じ動きになります。")
F_Mes2("妹" , "F_MovePict(\"姉\" , 0-getVariable(\"姉\")[4] , 0 , 0)")
F_MovePict("姉" , 0-getVariable("姉")[4] , 0 , 0)
#画面揺らし 音鳴らし
F_Mes2("姉" , "わぁあ\"あ\"あ\"ぁあ\"あ\"っ!!?")
F_SetStatePict("妹" , 4 , 0)
F_Mes2("妹" , "画面外への移動もこの通りですね。")

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "さて、次にですが…")
F_SetStatePict("姉" , 0 , 1)
F_MovePict("姉" , 200 , 0 , 300)
F_Mes2("姉" , "あ、あのさ…")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "なんですか、姉さん。今忙しいんですから、\n遊ぶのは後にしてください。")
F_SetStatePict("姉" , 1 , 1)
F_Mes2("姉" , "いや…なんかずっと喋ってて疲れてるんじゃない?\n後は私がやるからさ。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "……。")
F_SetStatePict("妹" , 1 , 0)
F_TwitchPict("妹" , 10 , 0 , 300 , 1)
F_TwitchPict("妹" , -10 , 0 , 300 , 1)
F_Mes2("妹" , "……。アホですか、姉さんは。")
F_Mes2("妹" , "……。アホですか、姉さんは。\n私の心配などしなくてもいいのに…。")
waitTime(30)
F_SetStatePict("妹" , 0 , 0)
F_Mes2("妹" , "…少し、お願いしますね。")
F_TwitchPict("妹" , 0 , 30 , 300 , 1)
F_SetStatePict("妹" , 1 , 1)
F_MovePict("妹" , 400 , 0 , 600)
F_SetStatePict("姉" , 1 , 1)
F_TwitchPict("姉" , 0 , 20 , 200 , 2)
F_Mes2("姉" , "う…うん、わかった!超頑張る!")

F_SetStatePict("姉" , 0 , 1)
F_MovePict("姉" , 200-getVariable("姉")[1] , 0 , 200)
F_SetStatePict("姉" , 1 , 0)
F_TwitchPict("姉" , 50 , 0 , 200 , 1)
F_Mes2("姉" , "じゃあ、ここから先のメッセージ関連の関数は、\n私が紹介していくよ!")
F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "…の前に、そこのグッタリしてる人大丈夫?\n休まなくて平気?\n帰る人は遠慮しないでね!")
case speakFullScreenWithSelect(true, 3,"チェンジで。クリアで終わりますわ","姉とか…。俺の人生ゲームオーバーだわ","構わん、続けたまえ", 
    "選択してください")
  when 0
    F_SetStatePict("姉" , 4 , 0)
    F_Mes2("姉" , "あ、あは…。ごめんね。")
    F_SetStatePict("姉" , 1 , 0)
    F_Mes2("姉" , "お粗末様でした!")
    goEnding()
  when 1
    F_SetStatePict("姉" , 2 , 0)
    F_Mes2("姉" , "妹の人気にお姉ちゃん嫉妬!")
    F_SetStatePict("姉" , 1 , 0)
    F_Mes2("姉" , "お粗末様でした!")
    goBadEnding()
  when 2
    F_SetStatePict("姉" , 2 , 0)
    F_Mes2("姉" , "よし、じゃあ次行こう!")
    changeScene(12894)
end

シーン4:姉ひとりになったあたり
setCanvasVisible(true)
F_ResetPict("妹")
F_ResetPict("姉")

F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "えと…。メッセージの関数は、最も悩んだ部分です。")
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "えと…。メッセージの関数は、最も悩んだ部分です。\nspeak()以上に使い勝手のいい関数など無い気がしました。")
F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "しかし、折角の関数群ということで、")
F_SetStatePict("姉" , 5 , 0)
F_Mes2("姉" , "しかし、折角の関数群ということで、\n多少不便でもそれっぽい形のものを作ってみせる!")
F_SetStatePict("姉" , 2 , 0)
F_Mes2("姉" , "しかし、折角の関数群ということで、\n多少不便でもそれっぽい形のものを作ってみせる!\nそう思っていた時期が、私にもありました。")
F_SetStatePict("姉" , 4 , 0)
F_Mes2("姉" , "setSpeakWindowRect()関数の存在など、\nこの時はまだ知らなかったのです…。")

F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "まずはF_Mes1()関数。名称は某HSPからのぱk…オマージュです。")
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "最初に作ってみたメッセージ描写関数ということで、\n例文はこちら。")
F_Mes2("姉" , "F_Mes1(\"姉\" , \"体が軽い…。\")  名前 文章")
F_Mes1("姉" , "体が軽い…。")
F_Mes2("姉" , "内部では、まず画像の表示、\ncreateText()での名前欄作成の後、\n全画面テキストでの文章の表示を行っています。")
F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "その後名前欄も画像もちゃんと消すようになってるんだよ。")
F_Mes2("姉" , "なるべくspeak()のような表示を再現するために\n全画面テキストを選んだんだけど、大きな問題がありました。")
F_SetStatePict("姉" , 2 , 0)
F_Mes2("姉" , "それは、テキストエリアの制限上、1行しか使えないこと。")
F_Mes2("姉" , "それは、テキストエリアの制限上、1行しか使えないこと。改行しようものなら、こんな…こんなあられもない姿に!")
F_SetStatePict("姉" , 1 , 0)
F_Mes1("姉" , "こんな気持ち初めて…。\nもう何も怖くない…!")
F_SetStatePict("姉" , 2 , 0)
F_Mes2("姉" , "ということで、没。")
F_Mes2("姉" , "描写エリアを指定できないため、渡している引数も\n非常に汚くなってしまいました。")

F_SetStatePict("姉" , 0 , 0)
F_Mes2("姉" , "次いで、そのver.2となるF_Mes2()関数。")
F_Mes2("姉" , "次いで、そのver.2となるF_Mes2()関数。\n全画面テキストではなく、createText()と無限ループで\n擬似的にメッセージを表現しています。")
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "利点は、位置を指定できることと、文字を置くだけなので\n文章を表示しつつ画像の移動などが出来ること。")
F_SetStatePict("姉" , 2 , 0)
F_Mes2("姉" , "欠点は、%Wait%や%Shake AA%などが使えないこと。\nF_Mes1()もそうですが、いわゆる無限引数を使えないこと。\n一文字ずつ表示が出来ないこと、などなど。")
F_ShowBG(48828 , 0 , 0 , 449 , 167 , 0)
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "クリック待ちなんかは、こんな風に再現したよ。")
F_HideBG()
F_SetStatePict("姉" , 1 , 0)
F_Mes2("姉" , "ここらへんは、とにかくspeak()が\nspeakFullScreen()のように背景の指定ができたらな~と思いながらの作業でした。")
F_Mes2("姉" , "あと、setText()のフォントサイズの指定とかかな。")
F_SetStatePict("姉" , 5 , 0)
F_TwitchPict("姉" , 0 , -20 , 100 , 1)
F_Mes2("姉" , "いや、別に要望とかじゃないんだけどさ。")
F_SetStatePict("姉" , 2 , 0)
F_Mes2("姉" , "いや、別に要望とかじゃないんだけどさ。\n素直にspeak()使えってお話だもんね。")

F_SetStatePict("妹" , 2 , 0)
F_MovePict("妹" , -200 , 0 , 400)
F_Mes2("妹" , "お疲れ様です。")
F_SetStatePict("姉" , 3 , 1)
F_Mes2("姉" , "ん、もういいの?")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "ええ。\n姉さんに任せていると思うと、寝付きが悪くて。")
F_SetStatePict("姉" , 5 , 1)
F_MovePict("姉" , -20 , 0 , 60)
F_Mes2("姉" , "私の説明そんなに酷い!?")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "……。")
F_SetStatePict("姉" , 4 , 1)
F_Mes2("姉" , "傷ついたってレベルじゃねーぞ!覚えてやがれぇぇ!")
F_SetStatePict("姉" , 4 , 0)
F_MovePict("姉" , -400-getVariable("姉")[1] , 0 , 600)
F_Mes2("妹" , "……。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "……。まったく…。")
F_SetStatePict("妹" , 2 , 0)
F_MovePict("妹" , -400 , 0 , 600)

changeScene(12895)

最後:妹ひとりになった辺り
setCanvasVisible(true)
F_ResetPict("妹")

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "さて。")
F_Mes2("妹" , "さて。\nあとはまあ、紹介するほどのものでも無いですね。")
F_Mes2("妹" , "FadeOut()関数。")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "FadeOut()関数。\n通常のfadeOut()にwaitTime()を足しただけのものです。")
F_SetStatePict("妹" , 3 , 0)
F_Mes2("妹" , "fadeOut()実行直後に画像を配置した際、その様子がバッチリ見えてしまったもので、思わず作ってしまいました。")

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "F_Credit()関数は、読んでそのまま\nクレジットに向かう関数ですね。")
F_SetStatePict("妹" , 0 , 0)
F_Mes2("妹" , "用意した長いクレジット画像を、\nのんびりと上へ上へとスクロールさせながら\n")
F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "「ああ、終わったんだな」")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "「ああ、終わったんだな」と\nエンディングを実感させるような関数です。")
F_Mes2("妹" , "キーボードの↑↓で、\nスピードが変化するようになっています。")
F_Mes2("妹" , "今にして思えば、わざわざ関数にせずとも、\nシーンもしくはマップとして作れば良かったかなという気がしますが、")
F_Mes2("妹" , "エンディング前に読み込みが入るのはカッコ悪いだろうと言う事で、やっぱりこの形に収まりました。")

F_SetStatePict("妹" , 1 , 0)
F_Mes2("妹" , "各種演出の都合上、スキップが出来ない仕様の関数群ですが、そのうちキー入力検出などで\n擬似スキップを表現できたらなぁとは思います。")
F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "また、これらの関数では、どうしても表現しきれなかったものもありました。")
F_Mes2("妹" , "メッセージを表示させながらのキャラ移動とかは、\nその代表格ですね。")

F_SetStatePict("妹" , 2 , 0)
F_MovePict("妹" , -50 , 0 , 200) 
F_Mes2("妹" , "こんなの機能はどう?")
F_SetStatePict("妹" , 3 , 1)
F_MovePict("妹" ,  50 , 0 , 200) 
F_Mes2("妹" , "こんなの機能はどう?\nそれおかしいんじゃない?")
F_SetStatePict("妹" , 1 , 0)
F_TwitchPict("妹" , 0 , 20 , 200 , 1)
F_Mes2("妹" , "こんなの機能はどう?\nそれおかしいんじゃない?\nこうするべきだろ!")
F_SetStatePict("妹" , 0 , 0)
F_Mes2("妹" , "等々、皆様の意見をお待ちしております。\nといいますか、そっちの方が主な目的でした。")

F_SetStatePict("妹" , 2 , 0)
F_Mes2("妹" , "最後に、F_Credit()の例をお見せします。\nキーボード↑連打でスキップ余裕ですので、\n是非ご活用ください。")
F_SetStatePict("妹" , 0 , 0)
F_Mes2("妹" , "それでは、長い時間を割いて頂き、ありがとうございました。")
F_TwitchPict("妹" , 0 , 40 , 600 , 1)
playBGM(23231)
F_Credit(48924 , 400 , 1206)


改めて、お粗末様でした。
 

コメントする

コメントするには、ログインする必要があります。

コメント一覧

   mini ___(投稿日:2011/04/25 20:57, 履歴)
作ってみて分かったのですが、立ち絵を表情差分有りで作ること自体が面倒でした。
燃え尽きた感がありますねー。

ノベルゲは読ませるゲームですが、多少なら絵で魅せてもいいじゃないということで、
私がやりたかったので作ってみました。


# お姉ちゃんのセリフで一箇所誤字を見つけました
       mini @loveail(投稿日:2011/04/25 17:28, 履歴)
こんにちは^^
今回のノベルゲームは、とても勉強になりました^^
関数の説明のみならず、その関数達を どのように組み込んだのかまで公開して頂けるとは!!
キャラクターが場所移動をすると、表現の幅が一気に膨らみますね^^
私も、この記事を元に、頑張ってキャラクター達を動かせるようにしたいと思います^^
ゲーム作成並びに、ブログ更新お疲れ様でした^^