Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Ajustar la pasibilidad en el borde del mapa

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Ajustar la pasibilidad en el borde del mapa

Mensaje por AsFzKakarotto el 2018-01-30, 05:36

Bien eh aquí un Script bastante raro, pero puede ser de utilidad para alguien.

Este Script permite Limitar el movimiento del héroe o eventos en el mapa.

Todo el borde del mapa puede ser ampliado o reducido dependiente a el valor
de una variable.

En el Script podemos observar el siguiente código:

AreaExtendVarId = n

Aquí en "n" definimos la variable que llevará el valor.

Ahora si en "n" como ejemplo colocamos 10, mientras se va en el mapa cambiamos
la variable 10 por el valor 1 el mapa actual se despeja 1 baldosa por todo el borde del
mapa para que el héroe se pueda mover, en este caso el héroe o eventos caminaran
por fuera del mapa, ahora si la variable 10 la cambiamos a -1, el mapa se contrae con
1 baldosa menos por todo el borde del mapa permitiendo que nuestro héroe no alcance
a topar el borde del mapa como tal.
Si quieres dejar todo a la normalidad en nuestro caso la variable 10 la dejamos en 0.


Código:
=begin rdoc

= XP-034 画面外移動

マップの範囲外に移動できるように出来ます。また、マップ端周辺に移動制限をかけるこ
とも出来ます。
* このスクリプトを使用すると、画面の端から外側へ向かって移動した際に、移動制限を
  緩和して、マップの外に移動できるようになります。

== スクリプトの挿入位置
Scene_Debug と Main の間に挿入してください。
* #035「マップ端でイベント起動」と併用する場合、それよりも上に挿入してください。

== 設定・動作について
* まず、設定項目を設定して下さい。「設定項目」を検索すると便利です。
* 次に、ゲーム中でイベントコマンド「変数の設定」を利用し、さきほど設定したIDの
  変数に数値を設定して下さい。
  * 0 を指定した場合、このスクリプトを使用していない状態と同じになります。
  * 1 を指定すると、画面外の1マス目まで踏み出すことが出来るようになります。
  * 2 を指定すると、先程と同様に、今度は2マス目まで踏み出せます。
  * 負の整数を設定することも出来ます。
    * -1 を設定したときは、マップの周囲1マスが画面外の扱いとなり、移動できなく
      なります。
  * 動作はマップの端に向かって移動することで確認できます。

== このスクリプトの情報
バージョン:: 2.0.0 ( 2010-02-05 )
対応環境::  RPGツクールXP
配布元::    http://quiet-labs.net/scripts/034/
作成者::    Yumill=Claudia

== 更新履歴
[2.0.0] 2010-02-05
  スクリプトの書き直し。
=end

# サイトを特定するためのモジュール。
module QuietLabs
end

# スクリプト独自のクラスや定数を保持するモジュール。
module QuietLabs::XP034
  Version = 2010_02_05
end

# スクリプトの設定項目を保持するモジュール。
module QuietLabs::XP034::Settings
  # <設定項目>ここから
  
  # [参照先の変数ID]
  # この変数の値によって動作が変わります。変数IDを指定して下さい。
  AreaExtendVarId = 1
  
  # <設定項目>ここまで
  
  # 参照先変数の値を返します。
  # * <return> : この設定の現在の値。
  def added_width
    $game_variables[AreaExtendVarId]
  end
  
  module_function :added_width
end

# マップのゲームクラス。
class Game_Map
  
  # <上書き定義>
  # 有効な座標であれば真を返します。
  # * x, y : 確認する座標
  # * <return> : 有効な座標である場合に限り真を返します。
  def valid?(x, y)
    plus = QuietLabs::XP034::Settings.added_width
    return false unless x >= -plus and x < width + plus
    return false unless y >= -plus and y < height + plus
    true
  end
  
  # <上書き定義>
  # 通行可能判定を行います。
  # * x, y : 判定を行う座標。
  # * d : 方向。
  # * self_event : イベントが確認を行う場合、そのイベント。
  # * <return> : 通行可能な場合に限りtrue。
  def passable?(x, y, d, self_event = nil)
    # 与えられた座標がマップ外の場合、通行不可
    return false unless valid?(x, y)
    # 方向 (0,2,4,6,8,10) から 障害物ビット (0,1,2,4,8,0) に変換
    bit = (1 << (d / 2 - 1)) & 0x0f
    # すべてのイベントでループ
    for event in events.values
      # 自分以外のタイルと座標が一致した場合
      if event.tile_id >= 0 and event != self_event and
        event.x == x and event.y == y and not event.through
        # 障害物ビットがセットされている場合
        if @passages[event.tile_id] & bit != 0
          # 通行不可
          return false
        # 全方向の障害物ビットがセットされている場合
        elsif @passages[event.tile_id] & 0x0f == 0x0f
          # 通行不可
          return false
        # それ以外で プライオリティが 0 の場合
        elsif @priorities[event.tile_id] == 0
          # 通行可
          return true
        end
      end
    end
    # レイヤーの上から順に調べるループ
    for i in [2, 1, 0]
      # タイル ID を取得
      tile_id = data[x, y, i]
      # タイル ID 取得失敗
      if tile_id.nil?
        # 通行可(単に画面外であるだけ)
        return true
      # 障害物ビットがセットされている場合
      elsif @passages[tile_id] & bit != 0
        # 通行不可
        return false
      # 全方向の障害物ビットがセットされている場合
      elsif @passages[tile_id] & 0x0f == 0x0f
        # 通行不可
        return false
      # それ以外で プライオリティが 0 の場合
      elsif @priorities[tile_id] == 0
        # 通行可
        return true
      end
    end
    true
  end
end

#CommentFormat::2010-01-05R000

Espero haberme explicado bien, en si es algo raro el script pero le puede ser de util a alguien.
Puede usarse como para cambiar de mapa y dar un efecto de salida o algo por el estilo, en fin
puede ser útil para cualquier cosa que se les ocurra. Abran sus mentes XD
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 314

Gracias : 68

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.