『愛とはあなたを破壊する魔法』制作記録四

2023年3月11日

目次
  1. 進捗状況
  2. オートモード通知について
  3. 立ち絵システムについて

進捗状況

UIを作ったり立ち絵システムのデバッグをしたりしていました。
OP曲も作りました。本来はタイトル画面で流れますが、現在はテスト用音源として本編でも使用しています。

オートモード通知について

オートモード中にオートモードであることを通知する機能を作りました。

Ren’pyのチュートリアルゲームでは、オートモード中クイックメニューの文字色が変化します。
しかし本作のクイックメニューにその演出はあまり合わないかもと思い、スキップなどと同じ通知方式を採用しました。

作り方解説

あくまでも私なりの作り方なので、もっとよりよい方法があるかもしれません。一例として見てください。
Ren’pyのバージョンは8.0.3です。

まずオートモード通知用のスクリーンを用意します。今回はスキップスクリーンを改変したものを使用します。

screen afm():
    zorder 100
    style_prefix "auto"

    frame:

        hbox:
            spacing 9

            text _("Auto")

            text "." at delayed_blink(0.0, 1.0) style "skip_triangle"
            text "." at delayed_blink(0.2, 1.0) style "skip_triangle"
            text "." at delayed_blink(0.4, 1.0) style "skip_triangle"

transform delayed_blink(delay, cycle):
    alpha .5

    pause delay

    block:
        linear .2 alpha 1.0
        pause .2
        linear .2 alpha 0.5
        pause (cycle - .4)
        repeat

style auto_frame is empty
style auto_text is gui_text
style auto_triangle is skip_text

style auto_frame:
    xsize 176
    ypos 250
    background Frame("gui/skip.png", gui.skip_frame_borders, tile=gui.frame_tile)
    padding (32, 8, 16, 8)

style auto_text:
    font font__sabu
    size 24
    color color__gray2

style auto_triangle:
    ## 小さな黒い矢印型のグリフが入ったフォントが必要になります。
    font font__sabu2
    color color__gray2

次に物語中常に表示されるスクリーンに以下のコードを追加します。今回はsayスクリーンに追加しました。
「use afm」部分は、使用するオートモード用スクリーンの名称で記入します(例:スクリーン名が「hoge」なら「use hoge」)。

if preferences.afm_enable:
    use afm

「preferences.afm_enable」はTrueでオートモードを有効化し、Falseで無効化する変数です。逆に考えると、オートモード中かどうか判定する変数としても使用できます。

Ren'Py Documentation
Preference変数

この変数を使用し、オートモード中だけオートモード通知スクリーンが表示されるようにしています。

立ち絵システムについて

前回の記事で、ロールバック中の立ち絵表示が上手くいかないと書きました。
具体的には、「あるセリフ時点で表示されている立ち絵が表示されていなかったり、その逆であったりする」という現象が起きていました。
今回の改修でロールバック中も意図した挙動をするようになりました。

またセリフを高速でスキップするとトランスフォームが最後まで表示されず、立ち絵が暗いまま(登場途中の状態のまま)物語が進行してしまうという現象も発生していましたが、これも解消しました。

本作品の立ち絵の表示・消去にはトランジョンではなく、ATLを使用してます。

Ren'Py Documentation
ATL

おそらくRen’py制ゲームの立ち絵表示・消去にはトランジョンがよく使用されていると思います。本作品ではどうしてもやりたい表示・消去アニメーションがあり、その表現はトランジョンではできないだろうということになったため、ATLを使用しています。

トランジョンの場合は演出が省略される(中途半端に終わる)ということが無いため上記のような問題は発生しません。本作品特有の問題だと言えます。
トランジョンをATLで記述できるという話も聞きましたが、今回はそれ以外の手法で解決しました。でもATLのトランジョン化も便利そうなので、本作品のシステムと噛み合いそうなら試してみたいと思います。

ちなみに立ち絵の表示・消去演出はブルーアーカイブを参考にしました。今まで立ち絵はフェードイン・アウトで演出することしか考えていなかったため、初めて見たときはとても感心しました。もっと色々なゲームに触れて色々な演出を知りたいです。