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

好感度によってキャラの反応を変えてみよう

今まで、特別なイベントを組んだりして、訪れたときのバリエーションはかなり豊富になりましたが、
そういえば、コマンドを選んだ後の通常の反応のバリエーションって、やってなかったですね(^^;

というわけで、今回は好感度を使って、コマンド選択後の反応を増やしてみようと思います。
仲が良くなるに連れて、反応もどんどん変わっていく・・・、そんな感じになります。

今回は、3段階にしてみます。

まずは、画像とメッセージを追加しましょう。
ペットの設定の良いとき、悪いとき、どっちでもないときの画像と、
良いとき、悪いとき、どっちでもないときのメッセージに、下記のように追記します。
ここでは全ての項目を3つに増やしていますが、必要ないところは追加しなくてもOKです。
ただし、ブロック単位でお願いします。一行だけ消すとかはダメです。

# もうすぐ終わりです。
# アクションを起こした後のそれぞれの反応を設定します。

# ↓良いときの画像。左辺は変更しないでください。
%good_img = (                 # ラブポイント大
    'feed' , 'esa.gif',
    'pat'  , 'jare.gif',
    'play' , 'fun.gif',
    'hit'  , 'keikai.gif',
    'out'  , 'dash.gif',
);

%good_imga = (                # ラブポイント中
    'feed' , 'esa.gif',
    'pat'  , 'jare.gif',
    'play' , 'fun.gif',
    'hit'  , 'keikai.gif',
    'out'  , 'dash.gif',
);

%good_imgb = (                # ラブポイント小
    'feed' , 'esa.gif',
    'pat'  , 'jare.gif',
    'play' , 'fun.gif',
    'hit'  , 'keikai.gif',
    'out'  , 'dash.gif',
);

# ↓悪い時の画像。
%bad_img = (                 # ラブポイント大
    'feed' , 'tukare.gif',
    'pat'  , 'bite.gif',
    'play' , 'tukare.gif',
    'hit'  , 'dash.gif',
    'out'  , 'soppo.gif',
);

%bad_imga = (                # ラブポイント中
    'feed' , 'tukare.gif',
    'pat'  , 'bite.gif',
    'play' , 'tukare.gif',
    'hit'  , 'dash.gif',
    'out'  , 'soppo.gif',
);

%bad_imgb = (                # ラブポイント小
    'feed' , 'tukare.gif',
    'pat'  , 'bite.gif',
    'play' , 'tukare.gif',
    'hit'  , 'dash.gif',
    'out'  , 'soppo.gif',
);

# ↓どっちでもないときの画像。
%else_img = (                 # ラブポイント大
    'feed' , 'soppo.gif',
    'pat'  , 'soppo.gif',
    'play' , 'boo.gif',
    'hit'  , 'bite.gif',
    'out'  , 'soppo.gif',
);

%else_imga = (                # ラブポイント中
    'feed' , 'soppo.gif',
    'pat'  , 'soppo.gif',
    'play' , 'boo.gif',
    'hit'  , 'bite.gif',
    'out'  , 'soppo.gif',
);

%else_imgb = (                # ラブポイント小
    'feed' , 'soppo.gif',
    'pat'  , 'soppo.gif',
    'play' , 'boo.gif',
    'hit'  , 'bite.gif',
    'out'  , 'soppo.gif',
);

# ↓良いときのメッセージ。
%good_msg = (                 # ラブポイント大
    'feed' , 'おいしそうに食べてます♪',
    'pat'  , 'お腹をみせて喜んでいます♪',
    'play' , 'とても楽しそうに遊んでいます♪',
    'hit'  , 'ちょっといじけてますが、大丈夫でしょう',
    'out'  , '喜んで外に飛び出していきました♪',
);

%good_msga = (                # ラブポイント中
    'feed' , 'おいしそうに食べてます♪',
    'pat'  , 'お腹をみせて喜んでいます♪',
    'play' , 'とても楽しそうに遊んでいます♪',
    'hit'  , 'ちょっといじけてますが、大丈夫でしょう',
    'out'  , '喜んで外に飛び出していきました♪',
);

%good_msgb = (                # ラブポイント小
    'feed' , 'おいしそうに食べてます♪',
    'pat'  , 'お腹をみせて喜んでいます♪',
    'play' , 'とても楽しそうに遊んでいます♪',
    'hit'  , 'ちょっといじけてますが、大丈夫でしょう',
    'out'  , '喜んで外に飛び出していきました♪',
);

# ↓悪いときのメッセージ。
%bad_msg = (                 # ラブポイント大
    'feed' , 'いくらなんでも与え過ぎですよ',
    'pat'  , '触れられるのを嫌がっています',
    'play' , 'とてもそんな気分じゃないようです',
    'hit'  , '脱兎のごとく逃げていきました',
    'out'  , '無理やり外に放り出しました',
);

%bad_msga = (                # ラブポイント中
    'feed' , 'いくらなんでも与え過ぎですよ',
    'pat'  , '触れられるのを嫌がっています',
    'play' , 'とてもそんな気分じゃないようです',
    'hit'  , '脱兎のごとく逃げていきました',
    'out'  , '無理やり外に放り出しました',
);

%bad_msgb = (                # ラブポイント小
    'feed' , 'いくらなんでも与え過ぎですよ',
    'pat'  , '触れられるのを嫌がっています',
    'play' , 'とてもそんな気分じゃないようです',
    'hit'  , '脱兎のごとく逃げていきました',
    'out'  , '無理やり外に放り出しました',
);

# ↓どっちでもないときのメッセージ。
%else_msg = (                 # ラブポイント大
    'feed' , 'あんまり食べたくないみたいです',
    'pat'  , 'ダルそうにあっちに行ってしまいました',
    'play' , '全く興味なさそうです',
    'hit'  , 'ムカついて噛み付いてきました',
    'out'  , 'しぶしぶ外へ出て行きました',
);

%else_msga = (                # ラブポイント中
    'feed' , 'あんまり食べたくないみたいです',
    'pat'  , 'ダルそうにあっちに行ってしまいました',
    'play' , '全く興味なさそうです',
    'hit'  , 'ムカついて噛み付いてきました',
    'out'  , 'しぶしぶ外へ出て行きました',
);

%else_msgb = (                # ラブポイント小
    'feed' , 'あんまり食べたくないみたいです',
    'pat'  , 'ダルそうにあっちに行ってしまいました',
    'play' , '全く興味なさそうです',
    'hit'  , 'ムカついて噛み付いてきました',
    'out'  , 'しぶしぶ外へ出て行きました',
);

次に、好感度を見て、処理を分岐させるところです。
アクション(sub action)を下記のように変更してください。

# ------------------------- #
# Sub Action
# アクション
# ------------------------- #
sub action {
    $playmsg = "$playtime時間" if $playtime != 0;
    $playmsg = "$playminute分" if $playtime == 0;

    &checkname;
    &error("まだ$playmsg経過していません") if $enter == 1;

    &header;
    &title;
    &bodytop("ペットデータ($num代目)");
    &petdata;
    srand(time);
    $rnd = int(rand(10) + 1);
    $fa = $FORM{'mode'};

    if ($fa eq 'play') { $lastplay = time; }
    if ($fa eq 'out')  { $out = 1; $outdate = time; }
    
    if ($rnd <= $rnd_border) {
        &petnow($rnd_img,$rnd_msg);
        $love--;
    }
    elsif ($FORM{'good'} =~ /$fa/) {
        if ($love < 0) {
            &petnow($good_imgb{$fa},$good_msgb{$fa});
        }
        elsif ($love < 7) {
            &petnow($good_imga{$fa},$good_msga{$fa});
        }
        else {
        &petnow($good_img{$fa},$good_msg{$fa});
        }
        $love++;$good++;
        if ($fa eq "feed") { $lastfeed = time; }
    }
    elsif ($FORM{'bad'} =~ /$fa/) {
        if ($love < 0) {
            &petnow($bad_imgb{$fa},$bad_msgb{$fa});
        }
        elsif ($love < 7) {
            &petnow($bad_imga{$fa},$bad_msga{$fa});
        }
        else {
        &petnow($bad_img{$fa},$bad_msg{$fa});
        }
        $love--;$bad++;
    }
    else {
        if ($love < 0) {
            &petnow($else_imgb{$fa},$else_msgb{$fa});
        }
        elsif ($love < 7) {
            &petnow($else_imga{$fa},$else_msga{$fa});
        }
        else {
        &petnow($else_img{$fa},$else_msg{$fa});
        }
    }

    &openoutpetdata;

    $goodbye = time - (60 * 60 * 24 * $goodbye);
    $newlove = $love;
    &openinuserdata('action');
    &openoutuserdata;
    $actionflag = 1; # 飼い主ランキングのリンクを表示
    &bodybottom;
    &footer;
}

ラブポイントが0未満だと、小の画像とメッセージを、
7未満だと、中の画像とメッセージを、
7以上なら、大の画像とメッセージを表示します。

問題は、キャラ画像の一致の改造をしている方です。
かなり複雑なことになります(^^;
両方をやる方は、あまりいらっしゃらないと思いますが、
もし、訳が分からなくなってしまいそうでしたら、ご連絡下さいませ。

分岐の条件は好感度でなくても大丈夫です。
例えば、ランダムにする場合は、$rndに1〜10の数字が入ってくるので、
このように、
if ($love < 0) → if ($rnd < 4)
elsif ($love < 7) → elsif ($love < 8)

条件式を変えてみてください。