スクリプト/コツ/罠の作り方(履歴ID:216)

最終投稿者:      mini きゅうり 更新:2012/04/04 20:42:36
タクミ2310号です。
Wikiページを書くのは初めてです。
説明ヘタです。加筆、訂正をしてくれる人を募集しています。

それでは、本題の罠の作り方に入ろうと思います。
なお、基本的なマップの作り方はマスターしていることを前提としています。
まずは、サンプルの素材を用意したので、クリップをして、マップに登録してください。
キャラクタ




次に、開始スクリプトにこちらを記入してください。
  • 2DRPG用
def trap(NO,a)
  # 0 = HP減少, 1 = MP減少, 2 = お金減少
  case NO
    when 0
      setEventDirection("this",getLeftDirection())
      waitTime(1000); i = 0
      while i < a
         j = 0
        while (j < 4) && (getPartyMember(j) != -1)
          subPartyMemberHP(getPartyMember(j), 1)
          j = j + 1
        end
        waitTime(1);  i = i + 1
      end
      speak("HP減少の罠を踏んだ!\nHPが" + a + "減少してしまった!")
    when 1
      setEventDirection("this",getRightDirection())
      waitTime(1000); i = 0
      while i < a
         j = 0
        while (j < 4) && (getPartyMember(j) != -1)
          subPartyMemberMP(getPartyMember(j), 1)
          j = j + 1
        end
        waitTime(1);  i = i + 1
      end
      speak("MP減少の罠を踏んだ!\nMPが" + a + "減少してしまった!")
    when 2
      setEventDirection("this",getUpDirection())
      textId = createText(512 - 160, 16, 160, 64)
      setText(textId, getMoney() + getDenomination())
      A = floor(a / 20);  b = a
      waitTime(1000); i = 0
      while i < 20
          subMoney(A)
          b = b - A
        if getMoney() < 0
          addMoney(getMoney() * -1)
        end
          setText(textId, getMoney() + getDenomination())
          waitTime(1);  i = i + 1
      end
      if b > 0
        subMoney(b)
        if getMoney() < 0
          addMoney(getMoney() * -1)
        end
        setText(textId, getMoney() + getDenomination())
      end
      speak("所持金減少の罠を踏んだ!\n" + a + getDenomination() + "失ってしまった!")
      deleteText(textId)
  end
end

  • 2DACTRPG用
def trap(NO,a)
  # 0 = HP減少, 1 = MP減少, 2 = お金減少
  case NO
    when 0
      setEventDirection("this",getLeftDirection())
      waitTime(1000); i = 0
      while i < a
        subPlayerHP(1)
        waitTime(1);  i = i + 1
      end
      speak("HP減少の罠を踏んだ!\nHPが" + a + "減少してしまった!")
    when 1
      setEventDirection("this",getRightDirection())
      waitTime(1000); i = 0
      while i < a
        subPlayerMP(1)
        waitTime(1);  i = i + 1
      end
      speak("MP減少の罠を踏んだ!\nMPが" + a + "減少してしまった!")
    when 2
      setEventDirection("this",getUpDirection())
      textId = createText(512 - 160, 16, 160, 64)
      setText(textId, getMoney() + getDenomination())
      A = floor(a / 20);  b = a
      waitTime(1000); i = 0
      while i < 20
          subMoney(A)
          b = b - A
        if getMoney() < 0
          addMoney(getMoney() * -1)
        end
          setText(textId, getMoney() + getDenomination())
          waitTime(1);  i = i + 1
      end
      if b > 0
        subMoney(b)
        if getMoney() < 0
          addMoney(getMoney() * -1)
        end
        setText(textId, getMoney() + getDenomination())
      end
      speak("所持金減少の罠を踏んだ!\n" + a + getDenomination() + "失ってしまった!")
      deleteText(textId)
  end
end

最後に、罠を置きたいところに
trap(0,10) #HP10減少

などと記入し、先ほどのキャラクターを設定します。
移動方法は「固定(向きも固定)」にしてください。
当たり判定は「なし」、開始方法は「重なったとき」にするといいでしょう。


  • 解説
サンプルのキャラクターでは、
下向きが透明、左向きがHP減少、右向きがMP減少、上向きがお金減少になっています。
第1引数の値により、どれが減らされるかが決まります。
第2引数の値だけ引かれるのですが、
お金の場合は1ずつ減らすと時間がかかるので、
20で割って切り捨て、常に一定の速度で減るようにします。
(HPやMPはそれほど大きく減らす必要がないのでこの処理をいれてません)
そして最後に、切り捨てられた部分を引いて終了です。
が、引いた結果がマイナスになることもあるので、
        if getMoney() < 0
          addMoney(getMoney() * -1)
        end

ここでマイナスが生じるごとに0に戻します
(ここも、HPやMPの場合は何もしなくても0で止まるので不要です。)


  • 最後に
いかがだったでしょうか。
キャラクタアニメ、スクリプト共に微妙でしかないですが、
これを参考に、ご自分で様々な罠を作ってみてください。

サンプルゲームを作ってみました。
ここで作る罠はこんな感じで動作します。