岩運び


今回は岩を動かして全てのボタン(目的地)のところまで移動したら
ゲームクリア(もしくは色々なこと)になる
倉庫内作業ゲーがわりかし簡単に作れるプラグインを作ったので
公開してみるよ~

動画だと分かり易いかも



肝心のソースはこちら
http://strawberrygohan.com/iPhone/tkool/CarryRock.js

ソースは最後に全文載せています。


使い方

useSoukoNai


今回は岩を全てボタンパネルの上に置くと扉が開くゲームを
作ってみようと思います。

図のようにマップを適当に作って岩とパネルと扉のイベントを作ります。


carryRockPlugin


CarryRockをプラグインに追加します。
各パラメータはそのままで。

各パタメータの説明

StepOnNewPanelFlagNo
岩を目的地(ボタンパネル)に置いた瞬間に
オンになるスイッチの番号
初期値は1で、1番のスイッチがtrueになります。

ClearFlagNo
全ての目的地(ボタンパネル)に岩を置くと
オンになるスイッチの番号
初期値は2で、2番のスイッチがtrueになります。

RockName
ここに書かれた文字をイベントのメモに入力すると
そのイベントが岩扱いになる
初期値は岩で、イベントのメモを岩にすると
そのイベントが岩扱いになります

DestinationName
ここに書かれた文字をイベントのメモに入力すると
そのイベントが目的地(ボタンパネル)扱いになる
初期値は目的地で、イベントのメモを岩にすると
そのイベントが目的地(ボタンパネル)扱いになります

SelfSwitchSortWhenSteppingOnPanel
目的地(ボタンパネル)のイベントに岩イベントを置いた時に
Onとなるセルフスイッチの種類

PlayerIsRock
プレイヤーを目的地(ボタンパネル)に移動すると
岩が置かれたのと同じように各スイッチが処理される
初期値はfalseで
ボタンパネルにプレイヤーが移動しても何も起こらない



で、まず岩イベントを作ります。

rockEvent


岩のイベントのメモに「岩」という文字を入れます
これでプログラム上でこのイベントを岩のイベントと認識してくれます。

トリガー「プレイヤーから接触」
イベント内容「移動ルートの設定
       このイベント:プレイヤーから遠ざかる」
(あとはウェイトを入れたりSEを鳴らしたり)


DestEvent0


動かすゴール、目的地のボタンのメモに「目的地」という文字を入力します。
オプションですり抜け状態にしておきます。


destEvent2


このパネルの上に岩が乗るとセルフスイッチBがONになるので
(セルフスイッチの種類はプラグイン管理で変更可能)
岩が乗った時のページを追加して画像部分を押されているものに変更


あとはこの岩イベントとパネルボタンイベントを適当な場所に置いたり
コピー&ペーストさせて増やします。

全てのパネルボタンに岩が置かれたらプラグイン管理で設定された
「ClearFlagNo」に入っている数字のパラメータのスイッチがONになります。
(初期値は2)


door1Event

扉を作ります。
全てのパネルボタンに岩を置くとスイッチ番号2がONになるので
その場合、自動的に始まるで自動的に扉が開くようにしましょう。

セルフスイッチをONにして


door2Event


セルフスイッチONの時に画像なしのページを追加します。
これでパネルボタンに岩を全て置くと
自動的に扉が消えます。



useSoukoNai


これだけではプラグインコマンドを一切使っていないので
初期イベントと常時更新するイベントを追加します。

1stEvent


初期イベントを作ります。
トリガーは自動実行で
内容はプラグインコマンド
『CarryRock setData』と入力。

イベントの一時消去で初期イベントを繰り返さないようにします。

すみません!!
これ以上書こうとするとなぜか
webが落ちるので今回はここまでです。
ものすごい中途半端ですみません!!



//=============================================================================
// CarryRock.js
//=============================================================================

/*:
 * @plugindesc 岩を目的地に運ぶあのゲームが作れます。
 * 各パラメータはヘルプ参照
 * @author mokumoku
 *
 * @param StepOnNewPanelFlagNo
 * @desc 新たに岩が目的地の上に移動できたらこの番号のスイッチがOnになります
 * @default 1
 *
 * @param ClearFlagNo
 * @desc 全ての岩を目的地に移動できたらこの番号のスイッチがOnになります
 * @default 2
 *
 * @param RockName
 * @desc イベントのメモにこの名前を入れるとそのイベントがを岩として認識
 * @default 岩
 *
 * @param DestinationName
 * @desc イベントのメモにこの名前を入れるとそのイベントを移動した岩の目的地として認識
 * @default 目的地
 *
 * @param SelfSwitchSortWhenSteppingOnPanel
 * @desc 目的地に岩を置いた時にOnとなるセルフスイッチの種類
 * @default B
 *
 * @param PlayerIsRock
 * @desc プレイヤーを目的地に移動すると岩が置かれたのと同じように各スイッチが処理される
 * @default false
 *
 * @help 岩を目的地に運ぶ、倉庫内作業ゲームが作れます。
 *
 *目的地に岩を運んだらその目的地のセルフスイッチがOnになります。
 *セルフスイッチの種類はSelfSwitchSortWhenSteppingOnPanelで
 *
 *岩のイベントのメモにRockNameの値(初期値は岩)にして、
 *目的地のイベントのメモにDestinationNameの値(初期値は目的地)にします。
 *
 *岩のイベントを1つでも目的地に運ぶとStepOnNewPanelFlagNoの番号のスイッチがOn
 *岩のイベントを全て目的地に運ぶとClearFlagNoの番号のスイッチがOnになる。
 *
 *プレイヤーが目的地に移動したら岩が目的地に移動するのと同じような処理をするには
 *PlayerIsRockをtrueに
 */

(function() {

var parameters = PluginManager.parameters('CarryRock');
    var stepOnNewPanelFlagNo = Number(parameters['StepOnNewPanelFlagNo'] );
    var rockClearFlagNo = Number(parameters['ClearFlagNo'] );
    //var rockName = String(parameters['RockName'] );
    //var destinationName = String(parameters['DestinationName'] );
    var rockName = String(parameters["RockName"] );
    var destinationName = String(parameters["DestinationName"] );
    var selfSwitchSortWhenSteppingOnPanel = String(parameters["SelfSwitchSortWhenSteppingOnPanel"] );
var playerIsRock = Boolean(parameters["PlayerIsRock"] === 'true' || false);
    
    var lockEventIDs = [];
    var destinationEventIDs = [];
//Hook Command
    var _Game_Interpreter_pluginCommand =
            Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function (command, args) {
        _Game_Interpreter_pluginCommand.call(this, command, args);
        if (command === 'CarryRock') {
         if (args[0] == 'setData') {
         lockEventIDs = [];
         destinationEventIDs = [];
                var events = $gameMap.events();
                
             for (var i = 0; i < events.length; i++){
             if(events[i].isRock() === true){
             lockEventIDs.push(i);
             }
             else if(events[i].isDestination() === true){
             destinationEventIDs.push(i);
             }
                }
       }
       else if (args[0] == 'update') {
         // 新しく目的地に岩がつくかのスイッチをOFFに
         $gameSwitches.setValue(stepOnNewPanelFlagNo,false);
        
        
                var events = $gameMap.events();
                // 岩が移動中は調査しない
                for (var i = 0; i < lockEventIDs.length; i++){
                 if( events[lockEventIDs[i]].isMoving() ){
                 return;
                 }
                }
                
                // キャラクターが移動中も調査しない
                if( $gamePlayer.isMoving() ){
                 return;
                }
        
         // ここから調査する
         $gameSwitches.setValue(rockClearFlagNo,true);
        
                var placeNumber =  $gameMap.mapId();
                
                
                
                
                
                for (var i = 0; i < destinationEventIDs.length; i++) {
                 var number = destinationEventIDs[i];
                 var dEvent = events[number];
                 var subFlag = $gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]);
                 $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], false);
                
                 for (var j = 0; j < lockEventIDs.length; j++){
                 var lEvent = events[lockEventIDs[j]];
                 if(dEvent.x == lEvent.x && dEvent.y == lEvent.y){
                 $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], true);
                 break;
                 }
                 }
                
                 if( playerIsRock && $gamePlayer.x == dEvent.x && $gamePlayer.y == dEvent.y ){
                 $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], true);
                 }
                
                 if (!subFlag && $gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]) ){
                 $gameSwitches.setValue(stepOnNewPanelFlagNo,true);
                 }
                 else if (!$gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]) ){
         $gameSwitches.setValue(rockClearFlagNo,false);
                 }
                }
                
                
                
       }
     }
    };
    
    
Game_Event.prototype.isRock = function() {
if (this.event().note === rockName){
return true;
}
return false;
};
Game_Event.prototype.isDestination = function() {
console.log(destinationName);
if (this.event().note === destinationName){
return true;
}
return false;
};
    
    })();