PETROOM大改造
【萌え萌えキャラクターズと遊ぼー。】

応用:時刻と好感度による訪問時のキャラの変化

プログラム自体はそんなに難しくありませんです。
構造を理解してしまえば、他の改造にも役立つと思いますので。

大変なのは、キャラ画像とメッセージの用意だったりします(^^;
通常の訪問時は、24時間分ありますので、
きめ細かく設定される方は、24枚の画像と、24種類のメッセージを用意することになります。
それを昼と夜に分けただけで、48個、
さらに好感度で2つに分ければ、96個(^^;
・・・気が遠くなりますね・・・(笑)
(と言いつつ「あかりと一緒」は、時刻で5段階、好感度で8段階だったりします(爆))

今回は、時刻で4段階、好感度でも4段階に分けてみましょう。
ではまず、それぞれの画像とメッセージの設定から。
ペットの設定に下記のように追記してください。

# ↓一日の予定を組みます(餌を与えられてから24時間のスケジュール)
# 上から順に0〜1時間、1〜2時間となっています。
# その間に表示させたい画像を以下に指定します。
# ただし、画像は全て同じ大きさのものを使用してください。
# 変更する場合は→'画像ファイル名',でワンセットですので、
# 点を間違って削除したりしないよう注意してください。
# かならず24時間分指定してください。
# 24時間以上経つとペットはお腹を空かせ、後はずっと鳴いた画像が表示されます。
@scheduleimg_1_1 = (    # 好感度ランク1の時刻1の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_1_2 = (    # 好感度ランク1の時刻2の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_1_3 = (    # 好感度ランク1の時刻3の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_1_4 = (    # 好感度ランク1の時刻4の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_2_1 = (    # 好感度ランク2の時刻1の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_2_2 = (    # 好感度ランク2の時刻2の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_2_3 = (    # 好感度ランク2の時刻3の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_2_4 = (    # 好感度ランク2の時刻4の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_3_1 = (    # 好感度ランク3の時刻1の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_3_2 = (    # 好感度ランク3の時刻2の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_3_3 = (    # 好感度ランク3の時刻3の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_3_4 = (    # 好感度ランク3の時刻4の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_4_1 = (    # 好感度ランク4の時刻1の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_4_2 = (    # 好感度ランク4の時刻2の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_4_3 = (    # 好感度ランク4の時刻3の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

@scheduleimg_4_4 = (    # 好感度ランク4の時刻4の画像
                'name.gif',
                # 全部で24個
                'maru.gif',
);

# ↓上の画像のリストと対になっています。
# 画像が表示される時の説明文です。
# かならず24個用意してください。
@schedulemsg_1_1 = (    # 好感度ランク1の時刻1のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_1_2 = (    # 好感度ランク1の時刻2のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_1_3 = (    # 好感度ランク1の時刻3のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_1_4 = (    # 好感度ランク1の時刻4のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_2_1 = (    # 好感度ランク2の時刻1のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_2_2 = (    # 好感度ランク2の時刻2のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_2_3 = (    # 好感度ランク2の時刻3のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_2_4 = (    # 好感度ランク2の時刻4のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_3_1 = (    # 好感度ランク3の時刻1のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_3_2 = (    # 好感度ランク3の時刻2のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_3_3 = (    # 好感度ランク3の時刻3のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_3_4 = (    # 好感度ランク3の時刻4のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_4_1 = (    # 好感度ランク4の時刻1のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_4_2 = (    # 好感度ランク4の時刻2のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_4_3 = (    # 好感度ランク4の時刻3のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);

@schedulemsg_4_4 = (    # 好感度ランク4の時刻4のメッセージ
                '自分の体をなめています',
                # 全部で24個
                'テーブルの上で丸まっています',
);


では、プログラムに改造を加えましょう。
改造を加えるのは、ペットのコンディション(sub condition)のみです。

    # 食後の経過時間を$timeafterに代入
    $timeafter = int((time - $lastfeed)/3600);

    # ラブポイントがある基準以下の場合、威嚇画像を表示
    if ($bad - $good - $love > 5) {
        &petnow($angry_img,"$petname$enemy_msg");
        $swfurl = $img . 'catvoicerage.swf';
        if ($voice == 1) { &flash($swfurl); }
        return;
    }
    # スペシャル画像1
    if ($love > $special1) {
        if ($timeafter == $specialtime1a || $timeafter == $specialtime1b) {
            &petnow($delight_img,$delight_msg);
            return;
        }
    }
    # スペシャル画像2
    if ($love > $special2) {
        if ($timeafter == $specialtime2a || $timeafter == $specialtime2b) {
            &petnow($friend_img,$friend_msg);
            return;
        }
    }

# イベント用現在の日付取得 すでに別の改造で追加している方は必要ありません。
    ($isec,$imin,$ihour,$iday,$imon,$iyear) = localtime(time);
    $iyear += 1900;
    $imon++;

    # ラブポイントが一定以上でノーマル画像
    if ( $love >= $bad - $good ) {
#       &petnow($scheduleimg[$timeafter],$schedulemsg[$timeafter]);
        if ($love < 0) {                                                            # 好感度がランク1で、
            if ($ihour < 6) {                                                       # 時刻が1なら、
                &petnow($scheduleimg_1_1[$timeafter],$schedulemsg_1_1[$timeafter]);
            }
            elsif ($ihour >= 6 && $ihour < 12) {                                    # 時刻が2なら、
                &petnow($scheduleimg_1_2[$timeafter],$schedulemsg_1_2[$timeafter]);
            }
            elsif ($ihour >= 12 && $ihour < 18) {                                   # 時刻が3なら、
                &petnow($scheduleimg_1_3[$timeafter],$schedulemsg_1_3[$timeafter]);
            }
            else {                                                                  # 時刻が4なら、
                &petnow($scheduleimg_1_4[$timeafter],$schedulemsg_1_4[$timeafter]);
            }
        }
        elsif ($love < 5) {                                                         # 好感度がランク2で、
            if ($ihour < 6) {                                                       # 時刻が1なら、
                &petnow($scheduleimg_2_1[$timeafter],$schedulemsg_2_1[$timeafter]);
            }
            elsif ($ihour >= 6 && $ihour < 12) {                                    # 時刻が2なら、
                &petnow($scheduleimg_2_2[$timeafter],$schedulemsg_2_2[$timeafter]);
            }
            elsif ($ihour >= 12 && $ihour < 18) {                                   # 時刻が3なら、
                &petnow($scheduleimg_2_3[$timeafter],$schedulemsg_2_3[$timeafter]);
            }
            else {                                                                  # 時刻が4なら、
                &petnow($scheduleimg_2_4[$timeafter],$schedulemsg_2_4[$timeafter]);
            }
        }
        elsif ($love < 10) {                                                        # 好感度がランク3で、
            if ($ihour < 6) {                                                       # 時刻が1なら、
                &petnow($scheduleimg_3_1[$timeafter],$schedulemsg_3_1[$timeafter]);
            }
            elsif ($ihour >= 6 && $ihour < 12) {                                    # 時刻が2なら、
                &petnow($scheduleimg_3_2[$timeafter],$schedulemsg_3_2[$timeafter]);
            }
            elsif ($ihour >= 12 && $ihour < 18) {                                   # 時刻が3なら、
                &petnow($scheduleimg_3_3[$timeafter],$schedulemsg_3_3[$timeafter]);
            }
            else {                                                                  # 時刻が4なら、
                &petnow($scheduleimg_3_4[$timeafter],$schedulemsg_3_4[$timeafter]);
            }
        }
        else {                                                                      # 好感度がランク4で、
            if ($ihour < 6) {                                                       # 時刻が1なら、
                &petnow($scheduleimg_4_1[$timeafter],$schedulemsg_4_1[$timeafter]);
            }
            elsif ($ihour >= 6 && $ihour < 12) {                                    # 時刻が2なら、
                &petnow($scheduleimg_4_2[$timeafter],$schedulemsg_4_2[$timeafter]);
            }
            elsif ($ihour >= 12 && $ihour < 18) {                                   # 時刻が3なら、
                &petnow($scheduleimg_4_3[$timeafter],$schedulemsg_4_3[$timeafter]);
            }
            else {                                                                  # 時刻が4なら、
                &petnow($scheduleimg_4_4[$timeafter],$schedulemsg_4_4[$timeafter]);
            }
        }
        return;
    }

    # どれにも当てはまらない場合、警戒画像を表示
    &petnow($caution_img,"$petname$caution_msg");
}

好感度や時刻の数値は、お好きなように変更して下さい。
上から好感度が低い順になっています、時刻は1日を四分割して、早い順です。

2項目以上の条件で細かく分けるときは、上記のように、if文の中に、さらにif文を書いていくとよいでしょう。
よく見ると、好感度別に分けた中の、時刻のif文の条件は、全部一緒ですよね?
同じようなことをしていて、何かもったいないような気もしますが、
この方法が一番見やすく、メンテもしやすいでしょう。

もっとメンテを簡単にしたい方は、それぞれの数字を変数に置き換えて、
ペットの設定で一括に管理できるようにしましょう。
詳しくは述べませんが、こんな感じに。

# ペットの設定

$koukando1 = 0;
$koukando2 = 5;
$koukando3 = 10;

$jikoku1 = 6;
$jikoku1 = 12;
$jikoku1 = 18;


# ペットのコンディション

    # ラブポイントが一定以上でノーマル画像
    if ( $love >= $bad - $good ) {
#       &petnow($scheduleimg[$timeafter],$schedulemsg[$timeafter]);
        if ($love < $koukando1) {                                                   # 好感度がランク1で、
            if ($ihour < $jikoku1) {                                                # 時刻が1なら、
                &petnow($scheduleimg_1_1[$timeafter],$schedulemsg_1_1[$timeafter]);
            }
            elsif ($ihour >= $jikoku1 && $ihour < $jikoku2) {                       # 時刻が2なら、
                &petnow($scheduleimg_1_2[$timeafter],$schedulemsg_1_2[$timeafter]);
            }
            elsif ($ihour >= $jikoku2 && $ihour < $jikoku3) {                       # 時刻が3なら、
                &petnow($scheduleimg_1_3[$timeafter],$schedulemsg_1_3[$timeafter]);
            }
            else {                                                                  # 時刻が4なら、
                &petnow($scheduleimg_1_4[$timeafter],$schedulemsg_1_4[$timeafter]);
            }
        }