设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 119|回复: 0

[转载发布] Saba Kan's Galge Conversation System 0.7

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    9071

    主题

    864

    回帖

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    58883
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    68848

    灌水之王

    发表于 2026-8-2 11:30:15 | 显示全部楼层 |阅读模式
    This script was not written by me! I simply translated it from Japanese and posted it here to share! Do NOT ask me for support, I'm not a scripter (I'll try, but most likely fail)!

    Now that that's over. The script I've got for you guys this time is:

    Galge Conversation System

    Version 0.7

    by Saba Kan of



    プチレア - PetitRare

    Updated: 2012/01/21



    Email asking for and being granted permission to translate and share:

    Spoilerkirinelf さんへわざわざメールありがとうございます。

    日本語ですみません。

    もちろん歓迎します、どうぞ翻訳なさってください。

    > http://www.rpgmakervxace.net

    > http://forums.rpgmakerweb.com

    おお! これからもチェックさせていただきます!

    2012年3月26日21:42 Kirin:

    > こんにちは、

    >

    > 僕は英語のRPGVXAのコッムニティからのkirinelf です。キリンで呼びますこと

    > もいいです。あの。。。日本語があまり上手でわありませんですから申し訳あり ません。よろしくおねがいします!

    >

    > 今回のメールの理由はRPGVXAのRGSS3スクリプトを翻訳したいことです。貴方様 のスクリプトを英語に翻訳してもいいでしょうか?もちろん

    > 貴方様の記載もあ ります。自分を書いた事も絶対言いません。

    >

    > 僕の目的は面白そうなスクリプトを翻訳して、このサイトにほかの英語のユーサ と分かち合います:

    >

    > http://www.rpgmakervxace.net

    > http://forums.rpgmakerweb.com

    >

    > そのサイトは英語RPGVXAの一番大きいコッムニティです。

    >

    > お返事を根気よくて待ています。

    >

    > kirinelf (キリン) より。



    The above, translated:

    SpoilerTo kirinelf:Thank you for going out of your way to send an email to me.

    Sorry for this being in Japanese.

    Please be my guest and translate them as you wish.

    > http://www.rpgmakervxace.net

    > http://forums.rpgmakerweb.com

    Oh! I'll be sure to check these sites from now on too!

    2012年3月26日21:42 Kirin:

    > Hello,

    >

    > I am kirinelf from the English speaking RMVXA community. You can call me Kirin.

    > I'm not very good at Japanese, so I apologize for that. Pleased to make your acquaintance!

    >

    > The purpose of this email is to ask about translating RMVXA's RGSS3 scripts. Is it alright

    > to translate your scripts into English? Of course, you will be credited. I will not claim

    > to have written any of your scripts.

    >

    > My aim is to translate scripts I find interesting and to share them with the rest of the

    > English speaking community, namely at these sites:

    >

    > http://www.rpgmakervxace.net

    > http://forums.rpgmakerweb.com

    >

    > These sites are the largest English RMVXA communities.

    >

    > I will await your reply patiently.

    >

    > From kirinelf (Kirin)



    So what does this script do? Well, ever played a visual novel? AIR or Clannad or Fate/Stay Night? Well, maybe not the latter; it uses a different message system, but. Most visual novels use this style of message system. Here're some screenshots so you can get the gist of it (Spoilered for size).

    Spoiler





    Message Log screen:






    Features

    Spoiler

    • Potraits! Have large character potraits ingame.
    • Dynamically adjusts emoticons so you can show them over the head of the character speaking.
    • Has a function that switches windowskins and speech balloon graphic colors so your characters can have their unique message window color.
    • Allows you to have a name display window at the cost of losing a line in message input, or you can turn it off and have four lines at once.
    • Can be set up through common events so you don't have to turn every switch on and off every time.
    • Easily choose whether the potrait is displayed on the left or the right.
    • You can use a key to fast forward through conversations!
    • Sub scripts allow you to hide the message window, access the save menu from within the message, and display a message log.






    There really are quite a few features and setting up shenanigans that you need to be aware of, and for that reason I've included a How to Use text file I wrote up myself after experimenting with the demo that I hope will help you guys.

    There are three scripts: A main script that handles the conversation details such as potrait placements and such, and two sub scripts. The first sub script allows you to have keys that let you hide the message window and/or access the save screen from within the message window. The second subscript lets you access a message log in the Visual Novel style as seen in the screenshots.

    Without further ado, here're the three scripts:

    1. Main script

    Spoiler                Code:       
    1. #==============================================================================
    2. # ■ Galge Conversation System
    3. #   @version 0.7 12/02/15 RGSS3
    4. #   @author Saba Kan
    5. #   @translator kirinelf (Made a small edit to picture IDs)
    6. #------------------------------------------------------------------------------
    7. #  
    8. #==============================================================================
    9. module Saba
    10.   module Gal
    11.     # --------------------Config---------------------
    12.     # Fine tuning of actor graphic positioning.
    13.     # {Actor ID=>pixels shifted} E.g. {1=>-4} (Actor ID 1's graphic shifted 4
    14.     # pixels to the left/up)
    15.     OFFSET_X = {1=>0, 2=>-30, 3=>-30, 6=>-40, 7=>-45, 8=>-40}
    16.     OFFSET_Y = {1=>0, 2=>10, 3=>40, 4=>10, 7=>-15, 8=>5}
    17.     # This only applies to OFFSET_X above, for displaying character graphics on
    18.     # the left.
    19.           # 座標に -1 をかける場合 true に設定します。
    20.     # If the coordinates above have '-1', set to true. <= ?
    21.     MIRROR_LEFT_OFFSET_X = false
    22.     # Speech balloon graphic coordinates.
    23.     BALLOON_LEFT_X = 210  # X Coordinate when it appears on the left.
    24.     BALLOON_RIGHT_X = 300 # X Coordinate when it appears on the right.
    25.     BALLOON_Y = 254       # Y Coordinate
    26.     # Name window width. Default of 114 is for a name 4 characters long.
    27.     NAME_WINDOW_WIDTH = 114
    28.     # For skipping text. A is Shift on the keyboard.
    29.     SKIP_BUTTON = Input::A
    30.     # This switch ID disables skipping of the text.
    31.     SKIP_DISABLE_SWITCH = 131
    32.     # This switch changes the message display mode.
    33.     MESSAGE_MODE_SWITCH = 132
    34.     # This switch ID toggles display of the name.
    35.     DISPLAY_NAME_SWITCH = 133
    36.     # This switch toggles display of speech balloon graphics.
    37.     DISPLAY_BALLOON_SWITCH = 134
    38.     # This switch clears all speech balloon graphics.
    39.     CLEAR_BALLOON_SWITCH = 135
    40.     # This switch toggles playing of message sound effects.
    41.     PLAY_MESSAGE_SE_SWITCH = 136
    42.     # Variable to determine speech balloon color.
    43.     # ※Will be automatically entered into the variable.
    44.     BALLOON_VARIABLE = 131
    45.     # Variable to determine speech balloon location.
    46.     # ※Will be automatically entered into the variable.
    47.     BALLOON_POSITION_VARIABLE = 132
    48.     # If you want character graphics displayed on the right to be mirrored,
    49.     # set to 'true'.
    50.     MIRROR_LEFT = false
    51.     # If you want character graphics displayed on the left to be mirrored,
    52.     # set to 'true'.
    53.     MIRROR_RIGHT = false
    54.     # This setting changes the base picture ID of the potraits. Generally
    55.     # speaking, the lower this is the better. However, some people might use
    56.     # a lot of pictures, and it's a hassle to remember which IDs the script uses.
    57.     # This setting allows you to define the base picture ID of the potraits.
    58.     # Potraits on the right will have this ID, and potraits on the left will have
    59.     # this ID + 2. For example, the default setting has the picture IDs of 10
    60.     # and 12.
    61.     BASE_PICTURE_ID = 10
    62.     # If you don't want different characters to have different windowskins,
    63.           # set to 'true'.
    64.     # Window1.png and Balloon1.png will be used if 'true'.
    65.     USE_SINGLE_WINDOW_SKIN = false
    66.     # Tone overlay of characters in conversation.
    67.     # Red, Green, Blue, Gray
    68.           # Active Character
    69.     ACTIVE_TONE = Tone.new(0, 0, 0, 0)
    70.     # Inactive Character (0, 0, 0, 0) <= No change.
    71.     INACTIVE_TONE = Tone.new(-104, -104, -104, 0)
    72.     # Frames to wait after tone change during character switching.
    73.     TONE_CHANGE_DURATION = 17
    74.     #  Event Command "Show Balloon Icon" Icon Positioning
    75.     OFFSET_EVENT_BALLOON_X = {1=>0, 2=>0, 3=>-30, 6=>-40, 7=>-45, 8=>-40}
    76.     OFFSET_EVENT_BALLOON_Y = {1=>0, 2=>10, 3=>40, 4=>10, 7=>-15, 8=>5}
    77.   end
    78. end
    79. #=========================================================================
    80. # Do not edit anything under this line unless you know what you're doing!
    81. #=========================================================================
    82. $imported = {} if $imported == nil
    83. $imported["GalGameTalkSystem"] = true
    84. # ピクチャ表示用
    85. class Game_Interpreter
    86.   def pic(name, index, position)
    87.     actor_id = name["actor".length..-1].to_i
    88.     $game_variables[Saba::Gal::BALLOON_POSITION_VARIABLE] = position
    89.     x = picture_base_x(position) + offset_x(position, actor_id)
    90.     y = picture_base_y(position) + offset_y(actor_id)
    91.     $game_variables[Saba::Gal::BALLOON_VARIABLE] = actor_id
    92.     picture = screen.pictures[position + Saba::Gal::BASE_PICTURE_ID]
    93.     name = name + "_" + (index + 1).to_s
    94.     @actor1_position = nil if @actor1_position == position
    95.     if Saba::Gal::MIRROR_LEFT && position == 1
    96.       picture.mirror_pic = true
    97.     elsif Saba::Gal::MIRROR_RIGHT && position == 2
    98.       picture.mirror_pic = true
    99.     else
    100.       picture.mirror_pic = false
    101.     end
    102.     picture.show(name, 0, x, y, 100, 100, 255, 0)
    103.     if @actor_id != actor_id
    104.       picture.start_tone_change(Saba::Gal::INACTIVE_TONE, 0)
    105.       deactivate_other_pictures(position)
    106.       activate(picture, position, actor_id)
    107.     end
    108.     @actor_id = actor_id
    109.   end
    110.   #--------------------------------------------------------------------------
    111.   # ● ピクチャのオフセット位置のx座標取得
    112.   #--------------------------------------------------------------------------
    113.   def offset_x(position, actor_id)
    114.     n = Saba::Gal::OFFSET_X[actor_id]
    115.     return 0 if n == nil
    116.     if position == 1 && Saba::Gal::MIRROR_LEFT_OFFSET_X
    117.       return -n
    118.     else
    119.       return n
    120.     end
    121.   end
    122.   #--------------------------------------------------------------------------
    123.   # ● ピクチャのオフセット位置のy座標取得
    124.   #--------------------------------------------------------------------------
    125.   def offset_y(actor_id)
    126.     n = Saba::Gal::OFFSET_Y[actor_id]
    127.     return 0 if n == nil
    128.     return n
    129.   end
    130.   #--------------------------------------------------------------------------
    131.   # ● イベントバルーンのオフセット位置のx座標取得
    132.   #--------------------------------------------------------------------------
    133.   def offset_event_balloon_x(position, actor_id)
    134.     n = Saba::Gal::OFFSET_EVENT_BALLOON_X[actor_id]
    135.     return 0 if n == nil
    136.     if position == 1 && Saba::Gal::MIRROR_LEFT_OFFSET_X
    137.       return -n
    138.     else
    139.       return n
    140.     end
    141.   end
    142.   #--------------------------------------------------------------------------
    143.   # ● イベントバルーンのオフセット位置のy座標取得
    144.   #--------------------------------------------------------------------------
    145.   def offset_event_balloon_y(actor_id)
    146.     n = Saba::Gal::OFFSET_EVENT_BALLOON_Y[actor_id]
    147.     return 0 if n == nil
    148.     return n
    149.   end
    150.   #--------------------------------------------------------------------------
    151.   # ● 指定のピクチャを明るく
    152.   #--------------------------------------------------------------------------
    153.   def activate(picture, position, actor_id)
    154.     if Input.press?(Saba::Gal::SKIP_BUTTON)
    155.       picture.start_tone_change(Saba::Gal::ACTIVE_TONE, 1)
    156.     else
    157.       picture.start_tone_change(Saba::Gal::ACTIVE_TONE, 25)
    158.     end
    159.     $game_temp.pic_actors[position] = actor_id
    160.   end
    161.   #--------------------------------------------------------------------------
    162.   # ● 指定のピクチャ以外を暗く
    163.   #--------------------------------------------------------------------------
    164.   def deactivate_other_pictures(position)
    165.     screen.pictures.size.times do |index|
    166.       next if screen.pictures[index].number == 1
    167.       next if index == position + 10
    168.       deactivate(screen.pictures[index])
    169.     end
    170.   end
    171.   #--------------------------------------------------------------------------
    172.   # ● 指定のピクチャを暗く
    173.   #--------------------------------------------------------------------------
    174.   def deactivate(picture)
    175.     unless Input.press?(Saba::Gal::SKIP_BUTTON)
    176.       picture.start_tone_change(Saba::Gal::INACTIVE_TONE, 25)
    177.     end
    178.   end
    179.   def picture_base_x(position)
    180.     case position
    181.     when 2
    182.       return 25
    183.     when 0
    184.       return Graphics.width - 244
    185.     when 3
    186.       return 200
    187.     end
    188.   end
    189.   def picture_base_y(position)
    190.     return 30
    191.   end
    192.   def act(position)
    193.     $game_variables[Saba::Gal::BALLOON_VARIABLE] = $game_temp.pic_actors[position]
    194.     if position < 3
    195.       $game_variables[Saba::Gal::BALLOON_POSITION_VARIABLE] = position
    196.     end
    197.     picture = screen.pictures[position + 10]
    198.     deactivate_other_pictures(position)
    199.     if Input.press?(Saba::Gal::SKIP_BUTTON)
    200.       picture.start_tone_change(Saba::Gal::ACTIVE_TONE, 1)
    201.       @wait_count = 0
    202.     else
    203.       picture.start_tone_change(Saba::Gal::ACTIVE_TONE, Saba::Gal::TONE_CHANGE_DURATION)
    204.      @wait_count = 0
    205.     end
    206.   end
    207.   def dis(position)
    208.     picture = screen.pictures[position + 10]
    209.     picture.erase
    210.   end
    211. end
    212. class Scene_Map
    213.   #--------------------------------------------------------------------------
    214.   # ● メッセージウィンドウの作成
    215.   #--------------------------------------------------------------------------
    216.   alias saba_gal_create_message_window create_message_window
    217.   def create_message_window
    218.     saba_gal_create_message_window
    219.     create_gal_window
    220.   end
    221.   #--------------------------------------------------------------------------
    222.   # ● フレーム更新
    223.   #--------------------------------------------------------------------------
    224.   alias saba_gal_update update
    225.   def update
    226.     create_gal_window
    227.     update_gal_event_balloon
    228.     saba_gal_update
    229.   end
    230.   #--------------------------------------------------------------------------
    231.   # ● ギャルゲーウィンドウ作成
    232.   #   ギャルゲーモードの時、ウィンドウを切り替えます。
    233.   #--------------------------------------------------------------------------
    234.   def create_gal_window
    235.     if $game_switches[Saba::Gal::MESSAGE_MODE_SWITCH]
    236.       if ! @message_window.is_a?(Window_MessageGal)
    237.         # ギャルゲーウィンドウにする
    238.         @message_window.dispose
    239.         @message_window = Window_MessageGal.new
    240.       end
    241.     else
    242.       if @message_window.is_a?(Window_MessageGal)
    243.         # 通常ウィンドウに戻す
    244.         @message_window.dispose
    245.         @message_window = Window_Message.new
    246.       end
    247.     end
    248.   end
    249.   def on_a
    250.     p 11
    251.   end
    252.   #--------------------------------------------------------------------------
    253.   # ● ギャルゲーウィンドウのフキダシアイコン作成
    254.   #--------------------------------------------------------------------------
    255.   def create_gal_event_balloon(character)
    256.     dispose_gal_event_balloon
    257.     @saba_balloon_sprite = Sprite_Character.new(@viewport, character)
    258.   end
    259.   #--------------------------------------------------------------------------
    260.   # ● ギャルゲーウィンドウのフキダシアイコン破棄
    261.   #--------------------------------------------------------------------------
    262.   def dispose_gal_event_balloon
    263.     if @saba_balloon_sprite
    264.       @saba_balloon_sprite.dispose
    265.       @saba_balloon_sprite = nil
    266.     end
    267.   end
    268.   #--------------------------------------------------------------------------
    269.   # ● ギャルゲーウィンドウのフキダシアイコン更新
    270.   #--------------------------------------------------------------------------
    271.   def update_gal_event_balloon
    272.     if @saba_balloon_sprite
    273.       if @saba_balloon_sprite.character.balloon_id == 0 || Input.press?(Saba::Gal::SKIP_BUTTON)
    274.         dispose_gal_event_balloon
    275.       else
    276.         @saba_balloon_sprite.update
    277.       end
    278.     end
    279.   end
    280.   #--------------------------------------------------------------------------
    281.   # ● スプライトセットの解放
    282.   #--------------------------------------------------------------------------
    283.   alias saba_gal_dispose_spriteset dispose_spriteset
    284.   def dispose_spriteset
    285.     saba_gal_dispose_spriteset
    286.     dispose_gal_event_balloon
    287.   end
    288. end
    289. class Window_MessageGal < Window_Message
    290.   #--------------------------------------------------------------------------
    291.   # ● オブジェクト初期化
    292.   #--------------------------------------------------------------------------
    293.   def initialize
    294.     super
    295.     self.x = 10
    296.     create_baloon_sprite
    297.     $game_temp.window_number = -1
    298.     update_balloon
    299.   end
    300.   #--------------------------------------------------------------------------
    301.   # ● ウィンドウ幅の取得
    302.   #--------------------------------------------------------------------------
    303.   def window_width
    304.     Graphics.width - 20
    305.   end
    306.   #--------------------------------------------------------------------------
    307.   # ● 表示行数の取得
    308.   #--------------------------------------------------------------------------
    309.   def visible_line_number
    310.     return 3
    311.   end
    312.   #--------------------------------------------------------------------------
    313.   # ● 改ページが必要か判定
    314.   #--------------------------------------------------------------------------
    315.   def need_new_page?(text, pos)
    316.     pos[:y]  > contents.height && !text.empty?
    317.   end
    318.   #--------------------------------------------------------------------------
    319.   # ● 通常文字の処理
    320.   #--------------------------------------------------------------------------
    321.   def process_normal_character(c, pos)
    322.     if Input.press?(Saba::Gal::SKIP_BUTTON) && skip_enabled?
    323.       @pause_skip = true
    324.     end
    325.     text_width = text_size(c).width
    326.     if display_name? && (pos[:y] == 0)
    327.       @name_sprite.bitmap.draw_text(pos[:x], 26, text_width * 2, pos[:height], c)
    328.       pos[:x] += text_width
    329.       return
    330.     end
    331.     if display_name?
    332.       draw_text(pos[:x], pos[:y] - pos[:height], text_width * 2, pos[:height], c)
    333.     else
    334.       draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
    335.     end
    336.     pos[:x] += text_width
    337.     unless Input.press?(Saba::Gal::SKIP_BUTTON) && skip_enabled?
    338.       wait_for_one_character
    339.     end
    340.   end
    341.   #--------------------------------------------------------------------------
    342.   # ● 制御文字によるアイコン描画の処理
    343.   #--------------------------------------------------------------------------
    344.   def process_draw_icon(icon_index, pos)
    345.     if display_name?
    346.       draw_icon(icon_index, pos[:x], pos[:y] - pos[:height])
    347.     else
    348.       draw_icon(icon_index, pos[:x], pos[:y])
    349.     end
    350.     pos[:x] += 24
    351.   end
    352.   #--------------------------------------------------------------------------
    353.   # ● 全ウィンドウの作成
    354.   #--------------------------------------------------------------------------
    355.   def create_all_windows
    356.     super
    357.     @name_window = Window_Base.new(20, Graphics.height - 126, Saba::Gal::NAME_WINDOW_WIDTH, 37)
    358.     @name_window.z = 480
    359.     @name_window.visible = false
    360.     @name_sprite = Sprite_Base.new(nil)
    361.     @name_sprite.z = 500
    362.     @name_sprite.x = 30
    363.     @name_sprite.y = Graphics.height - 146
    364.     @name_sprite.bitmap = Bitmap.new(230, 300)
    365.   end
    366.   #--------------------------------------------------------------------------
    367.   # ● フキダシスプライトを生成します。
    368.   #--------------------------------------------------------------------------
    369.   def create_baloon_sprite
    370.     @balloon_sprite = Sprite_Base.new
    371.     @balloon_sprite.z = 500
    372.     @balloon_sprite.y = Graphics.height - 384
    373.     @balloon_sprite.bitmap = Bitmap.new(400, 300)
    374.     @balloon_sprite.visible = false
    375.   end
    376.   #--------------------------------------------------------------------------
    377.   # ● 全ウィンドウの解放
    378.   #--------------------------------------------------------------------------
    379.   def dispose_all_windows
    380.     super
    381.     @name_window.dispose
    382.     @name_sprite.bitmap.dispose
    383.     @name_sprite.dispose
    384.     @balloon_sprite.dispose
    385.   end
    386.   #--------------------------------------------------------------------------
    387.   # ● ウィンドウの更新
    388.   #--------------------------------------------------------------------------
    389.   def update
    390.     super
    391.     update_name_visibility
    392.     update_balloon_visibility
    393.     update_balloon
    394.     update_opacity
    395.   end
    396.   #--------------------------------------------------------------------------
    397.   # ● 不透明度の更新
    398.   #--------------------------------------------------------------------------
    399.   def update_opacity
    400.     if @background != 0
    401.       self.opacity = 0
    402.       return
    403.     end
    404.     return if self.opacity == 255
    405.     self.opacity += 9
    406.   end
    407.   #--------------------------------------------------------------------------
    408.   # ● 入力待ち処理
    409.   #--------------------------------------------------------------------------
    410.   def input_pause
    411.     self.pause = true
    412.     wait(10)
    413.     Fiber.yield until Input.trigger?(: || Input.trigger?(:C) || (Input.press?(Saba::Gal::SKIP_BUTTON) && skip_enabled?)
    414.     if self.visible == false
    415.       self.visible = true
    416.       Sound.play_cursor
    417.       input_pause
    418.       return
    419.     end
    420.     Input.update
    421.     self.pause = false
    422.   end
    423.   #--------------------------------------------------------------------------
    424.   # ● ウィンドウを開き、完全に開くまで待つ
    425.   #--------------------------------------------------------------------------
    426.   def open_and_wait
    427.     open
    428.     update_picture
    429.     until open?
    430.       update_balloon
    431.       Fiber.yield
    432.     end
    433.   end
    434.   #--------------------------------------------------------------------------
    435.   # ● ウィンドウを閉じ、完全に閉じるまで待つ
    436.   #--------------------------------------------------------------------------
    437.   def close_and_wait
    438.     close
    439.     @name_window.visible = false
    440.     @name_sprite.visible = false
    441.     until all_close?
    442.       Fiber.yield
    443.     end
    444.   end
    445.   #--------------------------------------------------------------------------
    446.   # ● 改ページ処理
    447.   #--------------------------------------------------------------------------
    448.   def new_page(text, pos)
    449.     @name_sprite.bitmap.clear
    450.     contents.clear
    451.     reset_font_settings
    452.     pos[:x] = new_line_x
    453.     pos[:y] = 0
    454.     pos[:new_x] = new_line_x
    455.     pos[:height] = calc_line_height(text)
    456.     clear_flags
    457.   end
    458.   #--------------------------------------------------------------------------
    459.   # ● 立ち絵の更新
    460.   #--------------------------------------------------------------------------
    461.   def update_picture
    462.     return if $game_message.face_name.empty?
    463.     $game_map.interpreter.pic($game_message.face_name, $game_message.face_index, $game_message.position)
    464.   end
    465.   #--------------------------------------------------------------------------
    466.   # ● ウィンドウ位置の更新
    467.   #--------------------------------------------------------------------------
    468.   def update_placement
    469.     @position = 2
    470.     self.y = @position * (Graphics.height - height) / 2
    471.     @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height
    472.   end
    473.   #--------------------------------------------------------------------------
    474.   # ● 背景と位置の変更判定
    475.   #--------------------------------------------------------------------------
    476.   def settings_changed?
    477.     @background != $game_message.background
    478.   end
    479.   #--------------------------------------------------------------------------
    480.   # ● 改行位置の取得
    481.   #--------------------------------------------------------------------------
    482.   def new_line_x
    483.     return 0
    484.   end
    485.   #--------------------------------------------------------------------------
    486.   # ● 次の語を表示すべきかどうかを判定します。
    487.   #--------------------------------------------------------------------------
    488.   def show_next_message?
    489.     if skip_enabled?
    490.       return Input.trigger?(Input::C) || Input.trigger?(Input:: || Input.trigger?(Saba::Gal::SKIP_BUTTON)
    491.     else
    492.       return Input.trigger?(Input::C) || Input.trigger?(Input::
    493.     end
    494.   end
    495.   #--------------------------------------------------------------------------
    496.   # ● メッセージスキップが有効かどうかを判定します。
    497.   #--------------------------------------------------------------------------
    498.   def skip_enabled?
    499.     return $game_switches[Saba::Gal::SKIP_DISABLE_SWITCH] != true
    500.   end
    501.   #--------------------------------------------------------------------------
    502.   # ● スイッチに従って、名前ウィンドウの表示を切り替えます。
    503.   #--------------------------------------------------------------------------
    504.   def update_name_visibility
    505.     if @closing || close? || ! self.visible
    506.       @name_window.visible = false
    507.       @name_sprite.visible = false
    508.       return
    509.     end
    510.     if $game_switches[Saba::Gal::DISPLAY_NAME_SWITCH] != true
    511.       @name_window.visible = false
    512.       @name_sprite.visible = false
    513.     else
    514.        @name_window.visible = true
    515.       @name_sprite.visible = true
    516.     end
    517.   end
    518.   #--------------------------------------------------------------------------
    519.   # ● ふきだしの表示を切り替えます。
    520.   #--------------------------------------------------------------------------
    521.   def update_balloon_visibility
    522.     if self.openness < 255
    523.       @balloon_sprite.visible = false
    524.       return
    525.     end
    526.     if @balloon_sprite.visible != $game_switches[Saba::Gal::DISPLAY_BALLOON_SWITCH]
    527.       @balloon_sprite.visible = $game_switches[Saba::Gal::DISPLAY_BALLOON_SWITCH]
    528.       update_balloon
    529.     end
    530.   end
    531.   #--------------------------------------------------------------------------
    532.   # ● 名前を表示すべきかどうかを判定します。
    533.   #--------------------------------------------------------------------------
    534.   def display_name?
    535.     return $game_switches[Saba::Gal::DISPLAY_NAME_SWITCH] == true
    536.   end
    537.   #--------------------------------------------------------------------------
    538.   # ● フキダシをまっさらにします。
    539.   #--------------------------------------------------------------------------
    540.   def clear_balloon
    541.     @balloon_sprite.bitmap.clear_rect(100, 254, 300, 100)
    542.   end
    543.   #--------------------------------------------------------------------------
    544.   # ● ウィンドウの色が変わったかどうかを判定します。
    545.   #--------------------------------------------------------------------------
    546.   def window_color_changed?
    547.     if $game_temp.window_number != $game_variables[Saba::Gal::BALLOON_VARIABLE] || $game_switches[Saba::Gal::CLEAR_BALLOON_SWITCH]
    548.       $game_temp.window_number = $game_variables[Saba::Gal::BALLOON_VARIABLE]
    549.       return true
    550.     end
    551.     return false
    552.   end
    553.   #--------------------------------------------------------------------------
    554.   # ● フキダシを更新します。
    555.   #--------------------------------------------------------------------------
    556.   def update_balloon
    557.     return unless window_color_changed?
    558.     clear_balloon
    559.     if Saba::Gal::USE_SINGLE_WINDOW_SKIN
    560.       self.windowskin = Cache.system("Window1")
    561.     else
    562.       self.windowskin = Cache.system("Window" + $game_temp.window_number.to_s)
    563.       if openness == 255
    564.         self.opacity = 140 unless $game_switches[Saba::Gal::CLEAR_BALLOON_SWITCH]
    565.       end
    566.     end
    567.     $game_switches[Saba::Gal::CLEAR_BALLOON_SWITCH] = false
    568.     if $game_temp.window_number != nil && $game_temp.window_number > 0
    569.       if Saba::Gal::USE_SINGLE_WINDOW_SKIN
    570.         balloon = Cache.system("Balloon1")
    571.       else
    572.         balloon = Cache.system("Balloon" + $game_temp.window_number.to_s)
    573.       end
    574.       w = balloon.width / 2
    575.       h = balloon.height
    576.       if $game_variables[Saba::Gal::BALLOON_POSITION_VARIABLE] == 2
    577.         @balloon_sprite.bitmap.blt(Saba::Gal::BALLOON_LEFT_X, Saba::Gal::BALLOON_Y, balloon, Rect.new(w, 0, w, h))
    578.       else
    579.         @balloon_sprite.bitmap.blt(Saba::Gal::BALLOON_RIGHT_X, Saba::Gal::BALLOON_Y, balloon, Rect.new(0, 0, w, h))
    580.       end
    581.     end
    582.   end
    583. end
    584. class Game_Picture
    585.   attr_accessor:mirror_pic
    586.   alias saba_gal_initialze initialize
    587.   def initialize(number)
    588.     saba_gal_initialze(number)
    589.     @mirror_pic = false
    590.   end
    591. end
    592. class Sprite_Picture < Sprite
    593.   alias saba_gal_update update
    594.   def update
    595.     saba_gal_update
    596.     if @picture_name != ""
    597.       self.mirror = @picture.mirror_pic
    598.     end
    599.   end
    600. end
    601. class Game_Pictures
    602.   def size
    603.     return @data.size
    604.   end
    605. end
    606. class Game_Temp
    607.   attr_accessor :window_number
    608.   attr_accessor :pic_actors
    609.   alias saba_pic_initialize initialize
    610.   def initialize
    611.     saba_pic_initialize
    612.     @pic_actors = []
    613.   end
    614. end
    615. class Game_Interpreter
    616.   #--------------------------------------------------------------------------
    617.   # ● フキダシアイコンの表示
    618.   #--------------------------------------------------------------------------
    619.   alias saba_gal_command_213 command_213
    620.   def command_213
    621.     unless message_mode?
    622.       saba_gal_command_213
    623.       return
    624.     end
    625.     command = @list[@index + 1]
    626.     if command == nil || command.code != 101
    627.       p "イベントコマンドのフキダシアイコンの表示 の後にメッセージイベントを入れてください"
    628.       return
    629.     end
    630.     return if Input.press?(Saba::Gal::SKIP_BUTTON)
    631.     params = command.parameters
    632.     name = params[0]
    633.     actor_id = name["actor".length..-1].to_i
    634.     position = params[3]
    635.     x = (picture_base_x(position) + offset_event_balloon_x(position, actor_id) + 80) / 32.0 + $game_map.display_x
    636.     y = (picture_base_y(position) + offset_event_balloon_y(actor_id)) / 32.0 + $game_map.display_y
    637.     balloon_char = Game_Character.new
    638.     balloon_char.moveto(x, y)
    639.     balloon_char.balloon_id = @params[1]
    640.     SceneManager.scene.create_gal_event_balloon(balloon_char)
    641.   end
    642.   #--------------------------------------------------------------------------
    643.   # ● 会話モードかどうかを判定します。
    644.   #--------------------------------------------------------------------------
    645.   def message_mode?
    646.     return $game_switches[Saba::Gal::MESSAGE_MODE_SWITCH] == true
    647.   end
    648. end
    复制代码





    2. Sub script #1: Hide Message Window and Access Save Screen

    Spoiler                Code:       
    1. #==============================================================================
    2. # ■ Girl Game Message Window Expansion 4
    3. #   @version 0.4 11/12/27 RGSS3
    4. #   @author Saba Kan
    5. #   @translator kirinelf
    6. #------------------------------------------------------------------------------
    7. #  Adds Hide Message Window and Call Save Window from Message Window options.
    8. #==============================================================================
    9. module Saba
    10.   module GalEx
    11.     # Hide Message Window (R is W on the keyboard).
    12.     # To disable, use 'nil'.
    13.     HIDE_BUTTON = Input::R
    14.     # Save Button (L is Q on the keyboard).
    15.     # To disable, use 'nil'.
    16.     SAVE_BUTTON = Input::L
    17.   end
    18. end
    19. #=========================================================================
    20. # Do not edit anything under this line unless you know what you're doing!
    21. #=========================================================================
    22. class Scene_Map
    23.   alias saba_hide_window_update update
    24.   def update
    25.     saba_hide_window_update
    26.     return if @message_window.openness == 0
    27.     if Input.trigger?(Saba::GalEx::HIDE_BUTTON)
    28.       Sound.play_cursor
    29.       @message_window.visible = ! @message_window.visible
    30.     elsif Input.trigger?(Saba::GalEx::SAVE_BUTTON)
    31.       if @message_window.is_a?(Window_MessageGal)
    32.         Sound.play_cursor
    33.         SceneManager.call(Scene_Save)
    34.       end
    35.     end
    36.   end
    37. end
    38. class Window_MessageGal
    39.   def visible=(v)
    40.     super
    41.     if v
    42.       update_name_visibility
    43.     else
    44.       @name_sprite.visible = false
    45.       @name_window.visible = false
    46.     end
    47.   end
    48.   #--------------------------------------------------------------------------
    49.   # ● ふきだしの表示を切り替えます。
    50.   #--------------------------------------------------------------------------
    51.   alias saba_hide_window_update_balloon_visibility update_balloon_visibility
    52.   def update_balloon_visibility
    53.     unless self.visible
    54.       @balloon_sprite.visible = false
    55.       return
    56.     end
    57.     saba_hide_window_update_balloon_visibility
    58.   end
    59. end
    复制代码





    3. Sub script #2: Message Log

    Spoiler                Code:       
    1. #==============================================================================
    2. # ■ Message Log 4
    3. #   @version 0.5 11/12/30
    4. #   @author Saba Kan
    5. #   @translator kirinelf
    6. #------------------------------------------------------------------------------
    7. #  
    8. #==============================================================================
    9. module Saba
    10.   module MessageLog
    11.     # Display Message Log (X is A on the keyboard).
    12.     LOG_BUTTON = Input::X
    13.     # Space in pixels between each message in the log.
    14.     Y_SPACE = 10
    15.     # Maximum number of messages to save in log.
    16.     # ※If too high, will result in Bitmap Overflow errors.
    17.     MAX_HISTORY = 20
    18.     # Color of the background.
    19.     BG_COLOR = Color.new(0, 0, 0, 180)
    20.     # Scrolling speed.
    21.     SCROLL_SPEED = 5
    22.     # Size of the font.
    23.     FONT_SIZE = 20
    24.     # Height in pixels of each line.
    25.     LINE_HEIGHT = 22
    26.     # Width of the Name Column.
    27.     NAME_WIDTH = 100
    28.   end
    29. end
    30. #=========================================================================
    31. # Do not edit anything under this line unless you know what you're doing!
    32. #=========================================================================
    33. $imported = {} if $imported == nil
    34. $imported["MessageLog"] = true
    35. class Window_MessageLog < Window_Selectable
    36.   #--------------------------------------------------------------------------
    37.   # ● オブジェクト初期化
    38.   #--------------------------------------------------------------------------
    39.   def initialize
    40.     super(0, 0, window_width, window_height)
    41.     self.active = true
    42.     self.opacity = 0
    43.     create_back_sprite
    44.     refresh
    45.   end
    46.   #--------------------------------------------------------------------------
    47.   # ● ログに必要な高さを計算
    48.   #--------------------------------------------------------------------------
    49.   def calc_log_height
    50.     return @log_height if @log_height != nil
    51.     @log_height = 0
    52.     for log in $game_message_log.logs
    53.       log.texts.each_with_index do |text, i|
    54.         next if i == 0 && log.talk
    55.         @log_height += 24
    56.       end
    57.       @log_height += Saba::MessageLog::Y_SPACE
    58.     end
    59.     return @log_height
    60.   end
    61.   #--------------------------------------------------------------------------
    62.   # ● 背景スプライトの作成
    63.   #--------------------------------------------------------------------------
    64.   def create_back_sprite
    65.     @back_sprite = Sprite.new
    66.     @back_sprite.bitmap = Bitmap.new(window_width, window_height)
    67.     bg_color = Saba::MessageLog::BG_COLOR
    68.     @back_sprite.bitmap.fill_rect(Rect.new(0, 0, window_width, window_height), bg_color)
    69.     @back_sprite.visible = true
    70.   end
    71.   #--------------------------------------------------------------------------
    72.   # ● ウィンドウ幅の取得
    73.   #--------------------------------------------------------------------------
    74.   def window_width
    75.     Graphics.width
    76.   end
    77.   #--------------------------------------------------------------------------
    78.   # ● ウィンドウ高さの取得
    79.   #--------------------------------------------------------------------------
    80.   def window_height
    81.     Graphics.height
    82.   end
    83.   #--------------------------------------------------------------------------
    84.   # ● リフレッシュ
    85.   #--------------------------------------------------------------------------
    86.   def refresh
    87.     y = 0
    88.     for log in $game_message_log.logs
    89.       talk = false
    90.       log.texts.each_with_index do |text, i|
    91.         if i == 0 && log.talk
    92.           talk = true
    93.         end
    94.         x = (talk && i == 0) ? 0 : Saba::MessageLog::NAME_WIDTH
    95.         draw_text_ex(x-16, y, "「") if talk && i == 1
    96.         text += "」" if talk && log.texts.size - 1 == i
    97.         draw_text_ex(x, y, text)
    98.         y += Saba::MessageLog::LINE_HEIGHT if ! talk || i > 0
    99.       end
    100.       y += Saba::MessageLog::Y_SPACE
    101.     end
    102.     @max_oy = [0, calc_log_height - window_height + 32].max
    103.     self.oy = @max_oy
    104.   end
    105.   #--------------------------------------------------------------------------
    106.   # ● フォント設定のリセット
    107.   #--------------------------------------------------------------------------
    108.   def reset_font_settings
    109.     change_color(normal_color)
    110.     contents.font.size = Saba::MessageLog::FONT_SIZE
    111.     contents.font.bold = false
    112.     contents.font.italic = false
    113.   end
    114.   #--------------------------------------------------------------------------
    115.   # ● ウィンドウ内容の作成
    116.   #--------------------------------------------------------------------------
    117.   def create_contents
    118.     contents.dispose
    119.     self.contents = Bitmap.new(window_width-32, [window_height-32, calc_log_height-32].max)
    120.   end
    121.   def update
    122.     super
    123.     if Input.press?(Input::DOWN)
    124.       self.oy += Saba::MessageLog::SCROLL_SPEED
    125.     end
    126.     if Input.press?(Input::UP)
    127.       self.oy -= Saba::MessageLog::SCROLL_SPEED
    128.     end
    129.     self.oy = 0 if self.oy < 0
    130.     self.oy = @max_oy if self.oy > @max_oy
    131.   end
    132. end
    133. class Game_MessageLog
    134.   attr_reader :texts
    135.   attr_reader :talk
    136.   def initialize(texts)
    137.     @texts = texts
    138.     if $imported["GalGameTalkSystem"]
    139.       @talk = $game_switches[Saba::Gal::DISPLAY_NAME_SWITCH]
    140.     else
    141.       @talk = false
    142.     end
    143.   end
    144.   def ==(arg)
    145.     return arg.instance_of?(self.class) && @texts == arg.texts
    146.   end
    147. end
    148. class Game_MessageLogSet
    149.   attr_accessor:logs
    150.   def initialize
    151.     @logs = []
    152.   end
    153.   def push_log(texts)
    154.     return if texts == nil || texts.size == 0
    155.     log = Game_MessageLog.new(texts)
    156.     return if @logs[-1] == log
    157.     @logs.push(log)
    158.     @logs.shift if @logs.size > Saba::MessageLog::MAX_HISTORY
    159.   end
    160. end
    161. class Scene_Map
    162.   #--------------------------------------------------------------------------
    163.   # ● シーン遷移に関連する更新
    164.   #--------------------------------------------------------------------------
    165.   alias saba_msglog_update update
    166.   def update
    167.     saba_msglog_update
    168.     update_call_msg_log unless scene_changing?
    169.   end
    170.   #--------------------------------------------------------------------------
    171.   # ● メッセージログ呼び出し判定
    172.   #--------------------------------------------------------------------------
    173.   def update_call_msg_log
    174.     call_msglog if Input.trigger?(Saba::MessageLog::LOG_BUTTON)
    175.   end
    176.   def call_msglog
    177.     Sound.play_ok
    178.     SceneManager.call(Scene_MsgLog)
    179.   end
    180. end
    181. class Scene_MsgLog < Scene_MenuBase
    182.    #--------------------------------------------------------------------------
    183.   # ● 開始処理
    184.   #--------------------------------------------------------------------------
    185.   def start
    186.     super
    187.     create_command_window
    188.   end
    189.   #--------------------------------------------------------------------------
    190.   # ● コマンドウィンドウの作成
    191.   #--------------------------------------------------------------------------
    192.   def create_command_window
    193.     @log_window = Window_MessageLog.new
    194.     @log_window.set_handler(:cancel,    method(:return_scene))
    195.   end
    196. end
    197. class Window_Message
    198.   alias saba_msglog_process_all_text process_all_text
    199.   def process_all_text
    200.     $game_message_log.push_log($game_message.texts)
    201.     saba_msglog_process_all_text
    202.   end
    203. end
    204. class << DataManager
    205.   #--------------------------------------------------------------------------
    206.   # ● 各種ゲームオブジェクトの作成
    207.   #--------------------------------------------------------------------------
    208.   alias saba_msglog_create_game_objects create_game_objects
    209.   def create_game_objects
    210.     saba_msglog_create_game_objects
    211.     $game_message_log          = Game_MessageLogSet.new
    212.   end
    213.   #--------------------------------------------------------------------------
    214.   # ● セーブ内容の作成
    215.   #--------------------------------------------------------------------------
    216.   alias saba_msglog_make_save_contents make_save_contents
    217.   def make_save_contents
    218.     contents = saba_msglog_make_save_contents
    219.     contents[:message_log] = $game_message_log
    220.     contents
    221.   end
    222.   #--------------------------------------------------------------------------
    223.   # ● セーブ内容の展開
    224.   #--------------------------------------------------------------------------
    225.   alias saba_msglog_extract_save_contents extract_save_contents
    226.   def extract_save_contents(contents)
    227.     saba_msglog_extract_save_contents(contents)
    228.     $game_message_log        = contents[:message_log]
    229.   end
    230. end
    复制代码





    The script also requires a few images that need to be placed in the Graphics/System folder. This is a link to the images required for the script to run: [Link] I have also attached them to this post for easy access. Remember that you also need a bunch of potraits that are included in the demo but which I won't add for you guys.

    The demo can be found here: [Link] This is quite a simple script IF you know what you're doing, which takes a bit of playing around. So I've included a demo to save you the trouble of accidentally ruining your current project or having to start a new project just for this. Aren't I kind?

    For those of you who can't be bothered downloading the demo, I'm including a copy of the documentation here.

    How to Use

    SpoilerPlace the three scripts in the order I've numbered them above Main and under Materials. 1 - This is the main script. It has the bulk of the processing stuff in it.

    2 - This is a sub script. It makes it so that you can hide the message window completely or open the save screen from within the message.

    3 - This is a sub script. It adds a message log so you can reread messages in case you missed one.

    Place all the images in the System folder into your Graphics/System folder. You also need all potraits to go into the Graphics/Pictures folder. Refer to the demo for additional details.

    One thing to note here is that since this system can be used in conjunction with the default message system, I'm going to call this a Conversation system instead of a Message system.

    This script is NOT compatible with Yanfly's Ace Message System. I haven't tried any others yet. modern algebra's ATS: Formatting doesn't work with it either, which is sad.

    *******

    Full Use

    *******

    Full use of the script includes the following elements:

    Character Potrait Positioning

    Speech Balloon

    Windowskin Color

    Namebox

    Emoticons (Balloon Icons)

    as well as

    Message Logs

    Enter Save Screen from Conversation

    Hide Conversation Window

    The latter three are from sub scripts, and the last two can be disabled individually.

    *******

    Setting Up

    *******

    To use the script to its fullest extent, you will need to turn switches on and off, as well as tinting and erasing pictures. This is easily done by setting up two common events and calling them before and after each convo, as can be seen in the demo. The first common event, which I labelled Conversation Start, turns on the switches that toggle the Conversation Mode to begin with, Name Display and Speech Balloon Graphic Display. This is also the reason why I distinguish between Conversations and Messages; there's a bloody switch that toggles between the two. These switches can be assigned from within the script; the default IDs are 132, 133 and 134.

    The second common event, which is used for ending a conversation, tints the two character potraits (Which, by default, will take up Pictures ID 10 and 12) dark, turns off the three switches you turned on, then erases them to formally end the conversation. This is all you really have to do to set up the script. This and, of course, have the pictures in your System/Pictures folder.

    You call the first common event before setting up your convo messages, and call the second common event after you're done and want to stop the conversation.

    *******

    Assigning and Using Potraits

    *******

    By default, the script uses the actor face you picked to determine the potrait you use. Refer to this grid:

    0 1 2 3

    4 5 6 7

    Each face graphic in the Graphics/Faces folder fits that grid. The script looks at the face you choose for your message, adds 1 to it, then searches your Graphics/Pictures folder for the file that matches it. This is the filename it searches for:

    (FaceFilename)_(FaceID+1).png

    So for example, you picked Ralph's face. Ralph's face belongs to the file Actor1.png in the Graphics/Faces folder, and it's in the '0' section of the grid. This means the script will look for a potrait named Actor1_1.png in the Graphics/Pictures folder. I hope that makes sense.

    This has many uses, and the most typical way this is used in the gaming industry is to have a bunch of emotions on the characters. Due to the way the system works, it's easy to organize a set of 8 different emotions for each actor you have, and it'll organize them neatly by filename in your Pictures folder. So Actor1_1 will have a neutral Ralph, Actor1_2 will have a bored Ralph, Actor1_3 will have an angry Ralph, so on and so forth.

    Also note that if you select a face ID that doesn't have a corresponding potrait in the Pictures folder (For example, Actor1_8 when you only have 7 potraits), it'll spit an error out at you saying it can't find that image.

    The last bit of configuration comes from the message positioning. If you select 'Top', the potrait appears on the right. If you select 'Bottom', the potrait appears on the left. 'Middle' crashes the game. Be warned. Oh, this does not actually affect the message position. It will ALWAYS appear at the bottom, regardless of your setting.

    *******

    Balloon Icons

    *******

    Also known as emoticons. These are easy to use. Just have an event command as usual, but with the target set to Player. They will play over the head of the next character who has a line. This may not be ideal for some (For example, having a character be startled with an exclaimation icon, but having the character who startled him speak next), but it can be dealt with by having ellipsises in that character's message (Such as by having the aforementioned startled character 'say' "...!" while having the emoticon pop up on his head).

    *******

    Speech Balloon Graphic and Windowskin Color

    *******

    The speech balloon graphics are the little pointer things over the message box that point at the person speaking so you know who's actually talking at the moment. For the most part, this is automatically handled for you. What it does is get the ID of FaceFilename and searches Graphics/System for the matching files. For example, Actor1 = Balloon1 = Window1.

    This DOES mean that your FaceFilename has to have a unique number at the end of it. For example, Eric1, Natalie2 and so on. If you have Eric1 and Natalie1, both Eric and Natalie will share the same speech balloon graphic and windowskin color.

    The speech balloon graphic is also automatically placed. If your message is positioned at the 'Top' and the character thus appears on the right, the speech balloon graphic is automatically placed so it points towards him. There's no need to worry about this one.

    You can ignore windowskin color changes by changing line 70 in the main script. This will make everyone use the one windowskin and speech balloon graphic, regardless of filename ID.

    *******

    Message Input

    *******

    Not much to say here. Messages work like any other, simply type in the message and make sure to preview it to make sure it doesn't go over the boundaries. One thing to keep in mind; if you have the Name Display switch turned on, the messagebox only has three lines for text input. The first line is for name input, and should have the actor's name written in it (Or \n[x]).

    You can also use \i[x] to put icons in the text, where 'x' is the icon ID.

    You can also simulate a system message or a message from someone out of view by turning off the Name Display and Speech Balloon Graphic Display switches temporarily, which turns the message box back to four lines as well as defaulting to the Window0 windowskin.

    *******

    End

    *******

    And there we go. Any questions, pop me a line. I might not be able to answer it, but I'll do my best and hopefully we can solve it together, or with the help of someone who knows what he's doing.

    Kirin, out.



    FAQ

    Q: Where do I put these scripts?

    A: Above Main, under Materials. You really only need the main script; the other two are just bonuses.

    Q: How do I use this script?

    A: Read the 'How to Use.txt' file included in the demo, or refer to the same section in my post above.

    Q: Help! I'm getting an 'Unable to find file: Graphics/System/<Insert filename here>' error!

    A: The hint is in the error. Download the images from either this link or from the attachment and place them in the proper folder.

    Q: Help! I'm getting an 'Unable to find file: Graphics/Pictures/<Insert filename here>' error!

    A: You have selected a face that doesn't have a corresponding potrait in the Pictures folder. Either get one or change your face.

    Credit and Thanks

    - Saba Kan, for making this script.

    - Kirin (me), for translating this.

    - Kread-Ex, for giving me pointers as to how to modify the picture base ID.

    - Enterbrain, for once again making an awesome maker.

    - Google Translate, for helping me with minor translations.

    - The makers of the Rikai-chan addon for Mozilla and the Rikai-kun extension for Chrome, for giving us an awesome Japanese translator.

    Galge Conversation.zip


    本贴来自国际rpgmaker官方论坛作者:kirinelf处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/saba-kans-galge-conversation-system-0-7.1022/

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-17 11:39 , Processed in 0.126137 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表