Jump to content
Rpg²S Forum
  • 0

Caterpillar e Fuki compatibili?


ThePiranha
 Share

Question

Buongiorno ragazzi, allora vi espongo il mio problema.. Nel mio progetto volevo usare lo script per i face nei messaggi, ma in mancanza di un Facemaker valido (con cappucci, facce di mostro e altro) ho abbandonato l'idea, pensando cosi di usare il fuki message. Qui sorge il dilemma..

Vorrei fare in modo, dato che uso il caterpillar(script che fa vedere tutti i pg sul terreno di gioco), che quando parli un pg la vignetta sia sotto di esso e non sempre solo al primo cosi, da far capire chi sta parlando.. dite che è possibile?

Edited by Dilos
Eliminazione Link errati.
Guè Pequeno.
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Intanto sarebbe utile sapere cos'è il fuki message...

 

Per quanto riguarda il face maker... Mai pensato a disegnarteli da te? :)

Link to comment
Share on other sites

  • 0

Intanto sposto in Supporto RGSS, la sezione è sbagliata...

 

Ehm devi linkare i due script script...non possiamo rispondere a vuoto.

 

...E che cosa sono quei collegamenti sotto a Makerando?


EDIT: ma LOL Macha, bella questa contemporanea!

Edited by Dilos
Link to comment
Share on other sites

  • 0

Per i collegamenti a makerando non lo so, me li ha dati da se.. Ah, forse perche prima ho postato la domanda in makerando e ho fatto copia e incolla qui. Il fuki è uno script che permette di inserire delle vignette stile fumetto sotto il pg e gli eventi, per gli eventi è facile: basta inserire l'id, ma per i pg quando usi il caterpillar è un'altra storia.

 

CATERPILLAR

 

 

# train_actor
=begin
Caterpillar walking script
Copyright © 2005 fukuyama
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
http://www.gnu.org/licenses/lgpl.html
http://www.opensource.gr.jp/lesser/lgpl.ja.html
=end
# Config.rb
#==============================================================================
# ■ Train_Actor::Config
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
# ●Switch setup for transparent status
# When true, switch control is used
# TRANSPARENT_SWITCH = true
TRANSPARENT_SWITCH = false
# ●Switch number for transparent status
# When TRANSPARENT_SWITCH is true, transparency will be activated when the switch of this number is on
TRANSPARENT_SWITCHES_INDEX = 20
# ●Maximum number of actors
# There will be support for a large number of people in a party in the future...
TRAIN_ACTOR_SIZE_MAX = 4
# Constants
DOWN_LEFT = 1
DOWN_RIGHT = 3
UP_LEFT = 7
UP_RIGHT = 9
JUMP = 5
end
# rgss
# Spriteset_Map_Module.rb
#==============================================================================
# ■ Spriteset_Map_Module
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
module Spriteset_Map_Module
def setup_actor_character_sprites?
return @setup_actor_character_sprites_flag != nil
end
def setup_actor_character_sprites(characters)
if !setup_actor_character_sprites?
for character in characters.reverse
@character_sprites.unshift(
Sprite_Character.new(@viewport1, character)
)
end
@setup_actor_character_sprites_flag = true
end
end
end
end
class Spriteset_Map
include Train_Actor::Spriteset_Map_Module
end
# Scene_Map_Module.rb
#==============================================================================
# ■ Scene_Map_Module
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
module Scene_Map_Module
def setup_actor_character_sprites(characters)
@spriteset.setup_actor_character_sprites(characters)
end
end
end
class Scene_Map
include Train_Actor::Scene_Map_Module
end
# Game_Party_Module.rb
#==============================================================================
# ■ Game_Party_Module
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
module Game_Party_Module
attr_reader :characters
def actors_dead?
for actor in actors
if actor.dead?
return true
end
end
return false
end
def update_party_order
if not actors_dead?
return actors
end
alive_actors = []
dead_actors = []
for actor in actors
if actor.dead?
dead_actors.push actor
else
alive_actors.push actor
end
end
return alive_actors + dead_actors
end
def setup_actor_character_sprites
if @characters.nil?
@characters = []
for i in 1 ... TRAIN_ACTOR_SIZE_MAX
@characters.push(Game_Party_Actor.new)
end
end
setup_actors = update_party_order
for i in 1 ... TRAIN_ACTOR_SIZE_MAX
@characters[i - 1].setup(setup_actors[i])
end
if $scene.class.method_defined?('setup_actor_character_sprites')
$scene.setup_actor_character_sprites(@characters)
end
end
def update_party_actors
update_party_order
setup_actor_character_sprites
transparent = $game_player.transparent
if transparent == false
if TRANSPARENT_SWITCH
transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
end
end
for character in @characters
character.transparent = transparent
character.move_speed = $game_player.move_speed
character.step_anime = $game_player.step_anime
character.update
end
end
def moveto_party_actors( x, y )
setup_actor_character_sprites
for character in @characters
character.moveto( x, y )
end
if @move_list == nil
@move_list = []
end
move_list_setup
end
def move_party_actors
if @move_list == nil
@move_list = []
move_list_setup
end
@move_list.each_index do |i|
if @characters[i] != nil
case @move_list[i].type
when Input::DOWN
@characters[i].move_down(@move_list[i].args[0])
when Input::LEFT
@characters[i].move_left(@move_list[i].args[0])
when Input::RIGHT
@characters[i].move_right(@move_list[i].args[0])
when Input::UP
@characters[i].move_up(@move_list[i].args[0])
when DOWN_LEFT
@characters[i].move_lower_left
when DOWN_RIGHT
@characters[i].move_lower_right
when UP_LEFT
@characters[i].move_upper_left
when UP_RIGHT
@characters[i].move_upper_right
when JUMP
@characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
end
end
end
end
class Move_List_Element
def initialize(type,args)
@type = type
@args = args
end
def type() return @type end
def args() return @args end
end
def move_list_setup
for i in 0 .. TRAIN_ACTOR_SIZE_MAX
@move_list[i] = nil
end
end
def add_move_list(type,*args)
@move_list.unshift(Move_List_Element.new(type,args)).pop
end
def move_down_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::DOWN,turn_enabled)
end
def move_left_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::LEFT,turn_enabled)
end
def move_right_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::RIGHT,turn_enabled)
end
def move_up_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::UP,turn_enabled)
end
def move_lower_left_party_actors
move_party_actors
add_move_list(DOWN_LEFT)
end
def move_lower_right_party_actors
move_party_actors
add_move_list(DOWN_RIGHT)
end
def move_upper_left_party_actors
move_party_actors
add_move_list(UP_LEFT)
end
def move_upper_right_party_actors
move_party_actors
add_move_list(UP_RIGHT)
end
def jump_party_actors(x_plus, y_plus)
move_party_actors
add_move_list(JUMP,x_plus, y_plus)
end
end
end
class Game_Party
include Train_Actor::Game_Party_Module
end
# Game_Player_Module.rb
#==============================================================================
# ■ Game_Player_Module
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
module Game_Player_Module
attr_reader :move_speed
attr_reader :step_anime
def update_party_actors
$game_party.update_party_actors
$game_party.actors.each do |actor|
if actor.dead?
next
end
@character_name = actor.character_name
@character_hue = actor.character_hue
break
end
end
def update
update_party_actors
super
end
def moveto( x, y )
$game_party.moveto_party_actors( x, y )
super( x, y )
end
def move_down(turn_enabled = true)
if passable?(@x, @y, Input::DOWN)
$game_party.move_down_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_left(turn_enabled = true)
if passable?(@x, @y, Input::LEFT)
$game_party.move_left_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_right(turn_enabled = true)
if passable?(@x, @y, Input::RIGHT)
$game_party.move_right_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_up(turn_enabled = true)
if passable?(@x, @y, Input::UP)
$game_party.move_up_party_actors(turn_enabled)
end
super(turn_enabled)
end
def move_lower_left
# When possible to move from down→left or from left→down
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
$game_party.move_lower_left_party_actors
end
super
end
def move_lower_right
# When possible to move from down→right or from right→down
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
$game_party.move_lower_right_party_actors
end
super
end
def move_upper_left
# When possible to move from up→left or from left→up
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
$game_party.move_upper_left_party_actors
end
super
end
def move_upper_right
# When possible to move from up→right or from right→up
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
$game_party.move_upper_right_party_actors
end
super
end
def jump(x_plus, y_plus)
# New coordinates are calculated
new_x = @x + x_plus
new_y = @y + y_plus
# When addition values are (0,0), it is possible to jump to the destination
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
$game_party.jump_party_actors(x_plus, y_plus)
end
super(x_plus, y_plus)
end
end
end
class Game_Player
include Train_Actor::Game_Player_Module
end
# Game_Event_Module.rb
#==============================================================================
# ■ Game_Event_Module
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
module Game_Event_Module
#--------------------------------------------------------------------------
# ● Judgement determined
# x : X coordinates
# y : Y coordinates
# d : Direction (0,2,4,6,8) ※ 0 = Checks if all directions are not able to be passed (for a jump)
# return : Passing is impossible (false), possible (true)
#--------------------------------------------------------------------------
def passable?(x, y, d)
result = super(x, y, d)
if result
# New coordinates are searched for
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# Loops for actor in train
for actor in $game_party.characters
# When displayed
if not actor.character_name.empty?
# When actor's coordinates correspond to the destination
if actor.x == new_x and actor.y == new_y
# When event
if self != $game_player
# Passing is impossible
return false
end
end
end
end
end
return result
end
end
end
class Game_Event
include Train_Actor::Game_Event_Module
end
# Game_Party_Actor.rb
#==============================================================================
# ■ Game_Party_Actor
#------------------------------------------------------------------------------
# Caterpillar movement of actor is carried out on map
#==============================================================================
module Train_Actor
class Game_Party_Actor < Game_Character
attr_writer :move_speed
attr_writer :step_anime
def initialize
super()
@through = true
end
def setup(actor)
# The file name and hue of the character are set
if actor != nil and (not actor.dead?) # When dead, it is erased for the time being...
@character_name = actor.character_name
@character_hue = actor.character_hue
else
@character_name = ""
@character_hue = 0
end
# Opacity and blending method are initialized
@opacity = 255
@blend_type = 0
end
def screen_z(height = 0)
if $game_player.x == @x and $game_player.y == @y
return $game_player.screen_z(height) - 1
end
super(height)
end
#--------------------------------------------------------------------------
# ● Move down
# turn_enabled : Flag that permits direction change on the spot
#--------------------------------------------------------------------------
def move_down(turn_enabled = true)
# Face down
if turn_enabled
turn_down
end
# When possible to pass
if passable?(@x, @y, Input::DOWN)
# Face down
turn_down
# Update coordinates
@y += 1
end
end
#--------------------------------------------------------------------------
# ● Move left
# turn_enabled : Flag that permits direction change on the spot
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
# Face left
if turn_enabled
turn_left
end
# When possible to pass
if passable?(@x, @y, Input::LEFT)
# Face left
turn_left
# Update coordinates
@x -= 1
end
end
#--------------------------------------------------------------------------
# ● Move right
# turn_enabled : Flag that permits direction change on the spot
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
# Face right
if turn_enabled
turn_right
end
# When possible to pass
if passable?(@x, @y, Input::RIGHT)
# Face right
turn_right
# Update coordinates
@x += 1
end
end
#--------------------------------------------------------------------------
# ● Move up
# turn_enabled : Flag that permits direction change on the spot
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
# Face up
if turn_enabled
turn_up
end
# When possible to pass
if passable?(@x, @y, Input::UP)
# Face up
turn_up
# Update coordinates
@y -= 1
end
end
#--------------------------------------------------------------------------
# ● Move lower left
#--------------------------------------------------------------------------
def move_lower_left
# When no direction fixation
unless @direction_fix
# Turn left when facing right, turn down when facing up
@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
end
# When possible to move from down→left or from left→down
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
# Update coordinates
@x -= 1
@y += 1
end
end
#--------------------------------------------------------------------------
# ● Move lower right
#--------------------------------------------------------------------------
def move_lower_right
# When no direction fixation
unless @direction_fix
# Turn right when facing left, turn down when facing up
@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
end
# When possible to move from down→right or from right→down
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
# Update coordinates
@x += 1
@y += 1
end
end
#--------------------------------------------------------------------------
# ● move upper left
#--------------------------------------------------------------------------
def move_upper_left
# When no direction fixation
unless @direction_fix
# Turn left when facing right, turn up when facing down
@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
end
# When possible to move from up→left or from left→up
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
(passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
# Update coordinates
@x -= 1
@y -= 1
end
end
#--------------------------------------------------------------------------
# ● move upper right
#--------------------------------------------------------------------------
def move_upper_right
# When no direction fixation
unless @direction_fix
# Turn right when facing left, turn up when facing down
@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
end
# When possible to move from up→right or from right→up
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
(passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
# Update coordinates
@x += 1
@y -= 1
end
end
end
end

 

 

 

fuki MESSAGE

 

 

 

#==============================================================================
# ++ メッセージふきだし表示 ver. 1.16 ++
#  Script by パラ犬
#------------------------------------------------------------------------------
# ふきだし表示をするには、
# テール用画像「(スキン名)-top」「(スキン名)-under」を
# 「Graphics/Windowskins」フォルダにインポートしておく必要があります。
#------------------------------------------------------------------------------
#
# [ふきだし表示の使い方]
# イベントコマンド「スクリプト」で「$mes_id」にイベントIDを代入することで
# そのイベントにふきだしがポップするようになります。
# (記述例: $mes_id=4 )
# IDに-1を代入するとプレイヤー、0でそのイベント自身。
# nilまたは""を代入すると、通常のメッセージ表示に戻ります。
# 表示位置はイベント「文章オプション」で変更できます。
# 表示位置に「中央」を指定すると、イベントの位置に関係なく
# 画面中央に表示されます。
#
# [名前ウインドウの使い方]
# イベントコマンド「スクリプト」で「$mes_name」に文字列を代入することで
# 名前ウインドウを表示します。
# (記述例: $mes_name="アルシェス" )
# ""またはnilを代入すると、非表示になります。
#
# 二つの機能は独立していますので、それぞれ単体で使えます。
#  $mes_id=(ID) + $mes_name="名前"  :ふきだし表示 + 名前ウインドウ
#  $mes_id=(ID) + $mes_name=""	:ふきだし表示 (名前なし)
#  $mes_id=nil + $mes_name="名前"   :デフォルトウインドウ + 名前ウインドウ
#  $mes_id=nil + $mes_name=""	  :デフォルトウインドウ (名前なし)
#
# [メッセージ表示スピードの変更法]
# イベントコマンド「スクリプト」で「$mes_speed」に数値を代入します。
# (記述例: $mes_speed=1 )
#==============================================================================
module FUKI

# スキンの設定
# ウインドウスキンと同じものを使うときは「""」
FUKI_SKIN_NAME = "001-Blue01"   # ふきだし用スキン
NAME_SKIN_NAME = "001-Blue01"   # 名前表示用スキン

# フォントサイズ
MES_FONT_SIZE = 20   # メッセージウインドウとふきだし
NAME_FONT_SIZE = 20   # 名前ウインドウ

# ウインドウの透明度
FUKI_OPACITY = 255	 # ふきだしウインドウ
MES_OPACITY = 255	   # 通常のメッセージウインドウ
NAME_OPACITY = 255	 # 名前ウインドウ

# 名前ウインドウの相対位置
NAME_SHIFT_X = 0	   # 横位置
NAME_SHIFT_Y = 16   # 縦位置
# 画面の一番端ではふきだしを少しずらす
# 角の丸いスキンを使っていて、枠の角がふきだしと重なる場合に true にする
CORNER_SHIFT = false
SHIFT_PIXEL = 4  # trueの時にずらすピクセル数

# キャラクターの縦のサイズ
CHARACTOR_HEIGHT = 48
# ふきだしの相対位置(縦位置)
POP_SHIFT_TOP = 0	   # 表示位置が上のとき
POP_SHIFT_UNDER = -16   # 表示位置が下のとき

# メッセージ表示速度(数字が小さいほど速い。0で瞬間表示)
# $mes_speedに数値を代入することで、ゲーム中に変更可。
MES_SPEED = 1
end

#==============================================================================
# □ Window_FukiMessage
#==============================================================================
class Window_FukiMessage < Window_Selectable
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
  super(80, 304, 480, 160)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.visible = false
  self.z = 9998
  @fade_in = false
  @fade_out = false
  @contents_showing = false
  @cursor_width = 0
  self.active = false
  self.index = -1
  self.contents.font.name = "Arial"
  @w = 0
  @h = 0
  @wait = 0
  @dx = 0
  @dy = 0
  $mes_speed = FUKI::MES_SPEED
end
#--------------------------------------------------------------------------
# ○ サイズを決定してウインドウを作成
#--------------------------------------------------------------------------
def refresh_create
  self.contents.clear
  self.contents.font.color = normal_color
  self.contents.font.size = FUKI::MES_FONT_SIZE
  self.contents.font.name = "Arial"
  # ウインドウサイズを取得
  get_windowsize
  w = @w + 32 + 8
  h = @h * (self.contents.font.size + 10) + 26
  # ふきだしウインドウを作成
  set_fukidasi(self.x, self.y, w, h)
  # 名前ウインドウを作成
  set_namewindow
  # メッセージ表示用変数の初期化
  @dx = @dy = 0
  @cursor_width = 0
  @contents_drawing = true
  # 瞬間表示の場合、ここで表示処理
  if $mes_speed == 0
	 # 描画処理をループ
	 while $game_temp.message_text != ""
	   draw_massage
	 end
	 draw_opt_text
	 @contents_showing_end = true
	 @contents_drawing = false
  else
	 # 一文字ずつ描画
	 refresh_drawtext
  end
end
#--------------------------------------------------------------------------
# ○ 一文字ずつ描画
#--------------------------------------------------------------------------
def refresh_drawtext
  if $game_temp.message_text != nil
	 if @wait > 0
	   @wait -= 1
	 elsif @wait == 0
	   # 描画処理
	   draw_massage
	   @wait = $mes_speed
	 end
  end
  # 描画終了
  if $game_temp.message_text == ""
	 draw_opt_text
	 @contents_showing_end = true
	 @contents_drawing = false
  end
end
#-----------------------------------
if @face != nil
 @face_win.visible = true if @face_win.visible == false
 @face_win.contents.clear
  pic_x = @face_win.contents.width - @pic_width
  pic_y = @face_win.contents.height / 2 - @pic_height / 2
  dest = Rect.new(pic_x, pic_y, @pic_width, @pic_height)
  src = Rect.new(0, 0, @face.width, @face.height)
  @face_win.contents.stretch_blt(dest, @face, src)
end
#-----------------------------------------------------------------------

#--------------------------------------------------------------------------
# ○ ウインドウサイズを取得
#--------------------------------------------------------------------------
def get_windowsize
  x = y = 0
  @h = @w = 0
  @cursor_width = 0
  # 選択肢なら字下げを行う
  if $game_temp.choice_start == 0
	 x = 8
  end
  # 表示待ちのメッセージがある場合
  if $game_temp.message_text != nil
  text = $game_temp.message_text.clone
	 # 制御文字処理
	 begin
	   last_text = text.clone
	   text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
	 end until text == last_text
	 text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
	   $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
	 end
	 # 便宜上、"\\\\" を "0" に変換
	 text.gsub!(/\\\\/) { "0" }
	 # "\\C" を "1" に、"\\G" を "2" に変換
	 text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "1[#{$1}]" }
	 text.gsub!(/\\[Gg]/) { "2" }
	 # c に 1 文字を取得 (文字が取得できなくなるまでループ)
	 while ((c = text.slice!(/./m)) != nil)
	   # \\ の場合
	   if c == "0"
			 # 本来の文字に戻す
			 c = "\\"
	   end
	   # \C[n] または \G の場合
	   if c == "1"  or c == "2"
			 # 次の文字へ
			 next
	   end
	   # 改行文字の場合
	   if c == "\n"
			 # y に 1 を加算
			 y += 1
			 # 縦横サイズを取得
			 @h = y
			 @w = x > @w ? x : @w
			 if y >= $game_temp.choice_start
			   @w = x + 8 > @w ? x + 8 : @w
			 end
			 x = 0
			 # 選択肢なら字下げを行う
			 if y >= $game_temp.choice_start
			   x = 8
			 end
			 # 次の文字へ
			 next
	   end
	   # x に描画した文字の幅を加算
	   x += self.contents.text_size(c).width
	 end
  end
  # 数値入力の場合
  if $game_temp.num_input_variable_id > 0
	 digits_max = $game_temp.num_input_digits_max
	 number = $game_variables[$game_temp.num_input_variable_id]
	 @h += 1
	 x = digits_max * self.contents.font.size + 16
	 self.contents.font.name = "Arial"
	 @w = x > @w ? x : @w
  end
end
#--------------------------------------------------------------------------
# ○ 描画処理
#--------------------------------------------------------------------------
def draw_massage
  # 表示待ちのメッセージがある場合
  if $game_temp.message_text != nil
	 text = $game_temp.message_text
	 # 制御文字処理
	 begin
	   last_text = text.clone
	   text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
	 end until text == last_text
	 text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
	   $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
	 end
	 # 便宜上、"\\\\" を "0" に変換
	 text.gsub!(/\\\\/) { "0" }
	 # "\\C" を "1" に、"\\G" を "2" に変換
	 text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "1[#{$1}]" }
	 text.gsub!(/\\[Gg]/) { "2" }
	 # c に 1 文字を取得
	 if ((c = text.slice!(/./m)) != nil)
	   # 選択肢の場合
	   if @dy >= $game_temp.choice_start
			 # 字下げを行う
			 @dx = 8
			 # 文字を描画
			 self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
			 self.contents.font.name = "Arial"
			 # x に描画した文字の幅を加算
			 @dx += self.contents.text_size(c).width
			 self.contents.font.name = "Arial"
			 # ループ
			 while ((c = text.slice!(/./m)) != "\n")
			   # 文字を描画
			   self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
			   self.contents.font.name = "Arial"
			   # x に描画した文字の幅を加算
			   @dx += self.contents.text_size(c).width
			 end
			 if c == "\n"
			   # カーソルの幅を更新
			   @cursor_width = [@cursor_width, @dx].max
			   # y に 1 を加算
			   @dy += 1
			   @dx = 0
			 end
			 return
	   end
	   # \\ の場合
	   if c == "0"
			 # 本来の文字に戻す
			 c = "\\"
	   end
	   # \C[n] の場合
	   if c == "1"
			 # 文字色を変更
			 text.sub!(/\[([0-9]+)\]/, "")
			 color = $1.to_i
			 if color >= 0 and color <= 7
			   self.contents.font.color = text_color(color)
			   self.contents.font.name = "Arial"
			 end
	   end
	   # \G の場合
	   if c == "2"
			 # ゴールドウィンドウを作成
			 if @gold_window == nil
			   @gold_window = Window_Gold.new
			   @gold_window.x = 560 - @gold_window.width
			   if $game_temp.in_battle
					 @gold_window.y = 192
			   else
					 @gold_window.y = self.y >= 128 ? 32 : 384
			   end
			   @gold_window.opacity = self.opacity
			   @gold_window.back_opacity = self.back_opacity
			   self.contents.font.name = "Arial"
			 end
	   end
	   # 改行文字の場合
	   if c == "\n"
			 # y に 1 を加算
			 @dy += 1
			 @dx = 0
	   end
	   # 文字を描画
	   self.contents.font.size = FUKI::MES_FONT_SIZE
	   font_size = self.contents.font.size
	   self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
	   self.contents.font.name = "Arial"
	   # x に描画した文字の幅を加算
	   @dx += self.contents.text_size(c).width
	   self.contents.font.name = "Arial"
	 end
  end
end
#--------------------------------------------------------------------------
# ○ 選択肢と数値入力を有効に
#--------------------------------------------------------------------------
def draw_opt_text
  # 選択肢の場合
  if $game_temp.choice_max > 0
	 @item_max = $game_temp.choice_max
	 self.active = true
	 self.index = 0
	 self.contents.font.name = "Arial"
  end
  # 数値入力の場合
  if $game_temp.num_input_variable_id > 0
	 digits_max = $game_temp.num_input_digits_max
	 number = $game_variables[$game_temp.num_input_variable_id]
	 @input_number_window = Window_InputNumber.new(digits_max)
	 @input_number_window.number = number
	 @input_number_window.x = self.x + 8
	 @input_number_window.y = self.y + $game_temp.num_input_start * 32
  end
end
#--------------------------------------------------------------------------
# ○ ふきだしを表示
#--------------------------------------------------------------------------
def set_fukidasi(x, y, width, height)
  # $mes_id が空のときはふきだしを表示しない
  if $mes_id == nil or $mes_id == ""
	 del_fukidasi
	 reset_window
  else
	 # ポーズサインを非表示
	 self.pause = false
	 self.contents.font.name = "Arial"
	 # キャラクターを取得
	 character = get_character($mes_id)
	 if character == nil
	   # キャラクターが存在しないときは通常のメッセージウインドウに
	   del_fukidasi
	   reset_window
	   return
	 end
	 # マップがスクロールされていないときの座標処理
	 if $game_map.display_x == 0
	   x = character.x * 32 - (width / 2) + 16
	 elsif $game_map.display_x == ($game_map.width - 20) * 128
	   x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32 - (width / 2) + 16
	 else
	   x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32 - (width / 2)
	 end
	 # はみ出すときは画面内に収まるように移動
	 if x + width > 640
	   x = 640 - width
	 elsif x < 0
	   x = 0
	 end
	 # ウインドウの位置を決定
	 case $game_system.message_position
	   when 0  # 上
			 y = ( (character.real_y - $game_map.display_y + 64) / 128) * 32 - height + 16 - FUKI::CHARACTOR_HEIGHT + FUKI::POP_SHIFT_TOP
	   when 1  # 中
			 y = (480 - height) / 2
			 x = (640 - width) / 2
	   when 2  # 下
			 y =  ( (character.real_y - $game_map.display_y + 64) / 128) * 32 + 48 + FUKI::POP_SHIFT_UNDER
	 end
	 skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
	 # ふきだし用メッセージウインドウを作成
	 self.windowskin = RPG::Cache.windowskin(skin)
	 self.x = x
	 self.y = y
	 self.height = height
	 self.width = width
	 self.contents.dispose
	 self.contents = Bitmap.new(width - 32, height - 32)
	 self.back_opacity = FUKI::FUKI_OPACITY
	 self.contents.clear
	 self.contents.font.color = normal_color
	 self.contents.font.size = FUKI::MES_FONT_SIZE
	 self.contents.font.name = "Arial"
	 # ふきだしのテールを描画
	 if $game_system.message_frame == 0
	   @fuki = Sprite.new
	   case $game_system.message_position
			 when 0  # 上
			   @fuki.bitmap = RPG::Cache.windowskin(skin + "-top")
			   # マップがスクロールされていないときの座標処理
			   if $game_map.display_x == 0
					 @fuki.x = character.x * 32
			   elsif $game_map.display_x == ($game_map.width - 20) * 128
					 @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32
			   else
					 @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32 - 16
			   end
			   # 画面端では位置をずらす
			   if FUKI::CORNER_SHIFT
					 if @fuki.x == 0
					   @fuki.x = FUKI::SHIFT_PIXEL
					 elsif @fuki.x == 640 - 32
					   @fuki.x = 640 - 32 - FUKI::SHIFT_PIXEL
					 end
			   end
			   @fuki.y = y + height - 16
			   @fuki.z = self.z + 1
			 when 1  # 中
			   @fuki.dispose
			   @fuki = nil
			 when 2  # 下
			   @fuki.bitmap = RPG::Cache.windowskin(skin + "-under")
			   # マップがスクロールされていないときの座標処理
			   if $game_map.display_x == 0
					 @fuki.x = character.x * 32
			   elsif $game_map.display_x == ($game_map.width - 20) * 128
					 @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32
			   else
					 @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128  * 32 - 16
			   end
			   # 画面端では位置をずらす
			   if FUKI::CORNER_SHIFT
					 if @fuki.x == 0
					   @fuki.x = FUKI::SHIFT_PIXEL
					 elsif @fuki.x == 640 - 32
					   @fuki.x = 640 - 32 - FUKI::SHIFT_PIXEL
					 end
			   end
			   @fuki.y = y - 16
			   @fuki.z = self.z + 1
	   end
	 end
  end
end
#--------------------------------------------------------------------------
# ○ 名前ウインドウを表示
#--------------------------------------------------------------------------
def set_namewindow
  # $mes_name が空のときは名前ウインドウを表示しない
  if $mes_name == nil or $mes_name == ""
	 return
  else
	 # 変数をセット
	 mes_name = $mes_name
	 name_width = mes_name.size / 2 * FUKI::NAME_FONT_SIZE
	 name_height = FUKI::NAME_FONT_SIZE
	 name_x = x + FUKI::NAME_SHIFT_X
	 name_y = y - name_height - 16 + FUKI::NAME_SHIFT_Y
	 # 名前ウインドウ(枠のみ)を作成
	 @name_win = Window_Base.new(name_x, name_y, name_width + 16, name_height + 16)
	 skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
	 @name_win.windowskin = RPG::Cache.windowskin(skin)
	 @name_win.back_opacity = FUKI::NAME_OPACITY
	 @name_win.z = self.z + 1
	 # 余白をwindowクラスの限界よりも小さくするため、二重構造に
	 viewport = Viewport.new(name_x+12, name_y+8, name_width, name_height)
	 viewport.z = @name_win.z + 1
	 @name_contents = Sprite.new(viewport)
	 @name_contents.bitmap = Bitmap.new(name_width, name_height)
	 @name_contents.z = @name_win.z + 2
	 @name_contents.bitmap.font.color = normal_color
	 @name_contents.bitmap.font.size = FUKI::NAME_FONT_SIZE
	 # ウインドウサイズを調整
	 rect = @name_contents.bitmap.text_size(mes_name)
	 @name_win.width = rect.width + 32
	 # 名前を描画
	 @name_contents.bitmap.draw_text(rect, mes_name)
  end
end
#--------------------------------------------------------------------------
# ○ ふきだしと名前ウインドウを破棄
#--------------------------------------------------------------------------
def del_fukidasi
  if @fuki != nil
	 @fuki.dispose
	 @fuki = nil
  end
  if @name_win != nil
	 @name_win.dispose
	 @name_win = nil
	 @name_contents.dispose
	 @name_contents = nil
  end
  self.opacity = 0
  self.x = 80
  self.width = 480
  self.height = 160
  self.contents.dispose
  self.contents = Bitmap.new(width - 32, height - 32)
  self.pause = true
  self.contents.font.name = "Arial"
end
#--------------------------------------------------------------------------
# ○ キャラクターの取得
#	   parameter : パラメータ
#--------------------------------------------------------------------------
def get_character(parameter)
  # パラメータで分岐
  case parameter
  when -1  # プレイヤー
	 return $game_player
  when 0  # このイベント
	 events = $game_map.events
	 return events == nil ? nil : events[$active_event_id]
  else  # 特定のイベント
	 events = $game_map.events
	 return events == nil ? nil : events[parameter]
  end
end
#--------------------------------------------------------------------------
# ○ ウィンドウの位置と不透明度の設定
#--------------------------------------------------------------------------
def reset_window
  if $game_temp.in_battle
	 self.y = 16
	 self.contents.font.name = "Arial"
  else
	 case $game_system.message_position
	 when 0  # 上
	   self.y = 16
	   self.contents.font.name = "Arial"
	 when 1  # 中
	   self.y = 160
	   self.contents.font.name = "Arial"
	 when 2  # 下
	   self.y = 304
	   self.contents.font.name = "Arial"
	 end
  end
  if $game_system.message_frame == 0
	 self.opacity = 255
	 self.contents.font.name = "Arial"
  else
	 self.opacity = 0
	 self.contents.font.name = "Arial"
  end
  self.back_opacity = FUKI::MES_OPACITY
  self.contents.font.name = "Arial"
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
  super
  # フェードインの場合
  if @fade_in
	 self.contents_opacity += 24
	 self.contents.font.name = "Arial"
	 if @name_win != nil
	   @name_win.opacity += 24
	 end
	 if @fuki != nil
	   @fuki.opacity += 24
	 end
	 if @input_number_window != nil
	   @input_number_window.contents_opacity += 24
	 end
	 if self.contents_opacity == 255
	   @fade_in = false
	 end
	 return
  end
  # メッセージ表示中の場合
  if @contents_drawing
	 refresh_drawtext
	 return
  end
  # 数値入力中の場合
  if @input_number_window != nil
	 @input_number_window.update
	 # 決定
	 if Input.trigger?(Input::C)
	   $game_system.se_play($data_system.decision_se)
	   $game_variables[$game_temp.num_input_variable_id] =
			 @input_number_window.number
	   $game_map.need_refresh = true
	   # 数値入力ウィンドウを解放
	   @input_number_window.dispose
	   @input_number_window = nil
	   terminate_message
	 end
	 return
  end
  # メッセージ表示終了の場合
  if @contents_showing_end
	 # 選択肢の表示中でなければポーズサインを表示
	 # ふきだしモードでは非表示
	 if $game_temp.choice_max == 0 and @fuki == nil
	   self.pause = true
	   self.contents.font.name = "Arial"
	 else
	   self.pause = false
	   self.contents.font.name = "Arial"
	 end
	 # キャンセル
	 if Input.trigger?(Input::B)
	   if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
			 $game_system.se_play($data_system.cancel_se)
			 $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
			 terminate_message
	   end
	 end
	 # 決定
	 if Input.trigger?(Input::C)
	   if $game_temp.choice_max > 0
			 $game_system.se_play($data_system.decision_se)
			 $game_temp.choice_proc.call(self.index)
	   end
	   terminate_message
	   # ふきだしを破棄
	   del_fukidasi
	 end
	 return
  end
  # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合
  if @fade_out == false and $game_temp.message_text != nil
	 @contents_showing = true
	 $game_temp.message_window_showing = true
	 reset_window
	 refresh_create
	 if @name_win != nil
	   @name_win.opacity = 0
	 end
	 if @fuki != nil
	   @fuki.opacity = 0
	 end
	 Graphics.frame_reset
	 self.visible = true
	 self.contents_opacity = 0
	 self.contents.font.name = "Arial"
	 if @input_number_window != nil
	   @input_number_window.contents_opacity = 0
	 end
	 @fade_in = true
	 return
  end
  # 表示すべきメッセージがないが、ウィンドウが可視状態の場合
  if self.visible
	 @fade_out = true
	 self.opacity -= 48
	 self.contents.font.name = "Arial"
	 if @name_win != nil
	   @name_win.opacity -= 48
	 end
	 if @fuki != nil
	   @fuki.opacity -= 48
	 end
	 if self.opacity == 0
	   self.visible = false
	   self.contents.font.name = "Arial"
	   @fade_out = false
	   $game_temp.message_window_showing = false
	   del_fukidasi
	 end
	 return
  end
end
#--------------------------------------------------------------------------
# ○ 解放
#--------------------------------------------------------------------------
def dispose
  terminate_message
  $game_temp.message_window_showing = false
  if @input_number_window != nil
	 @input_number_window.dispose
  end
  super
end
#--------------------------------------------------------------------------
# ○ メッセージ終了処理
#--------------------------------------------------------------------------
def terminate_message
  self.active = false
  self.pause = false
  self.index = -1
  self.contents.clear
  self.contents.font.name = "Arial"
  # 表示中フラグをクリア
  @contents_showing = false
  @contents_showing_end = false
  # メッセージ コールバックを呼ぶ
  if $game_temp.message_proc != nil
	 $game_temp.message_proc.call
  end
  # 文章、選択肢、数値入力に関する変数をクリア
  $game_temp.message_text = nil
  $game_temp.message_proc = nil
  $game_temp.choice_start = 99
  $game_temp.choice_max = 0
  $game_temp.choice_cancel_type = 0
  $game_temp.choice_proc = nil
  $game_temp.num_input_start = 99
  $game_temp.num_input_variable_id = 0
  $game_temp.num_input_digits_max = 0
  # ゴールドウィンドウを開放
  if @gold_window != nil
	 @gold_window.dispose
	 @gold_window = nil
  end
end
#--------------------------------------------------------------------------
# ○ カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
  if @index >= 0
	 n = $game_temp.choice_start + @index
	 self.cursor_rect.set(8, n * 32, @cursor_width, 32)
	 self.contents.font.name = "Arial"
  else
	 self.cursor_rect.empty
	 self.contents.font.name = "Arial"
  end
end
end
#==============================================================================
# ■ Interpreter
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ● イベントのセットアップ
#	   event_id : イベント ID
#--------------------------------------------------------------------------
alias setup_fuki setup
def setup(list, event_id)
  setup_fuki(list, event_id)
  # 戦闘中でなければ
  if !($game_temp.in_battle)
	 # イベントIDを記録
	 $active_event_id = event_id
  end
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
  # スプライトセットを作成
  @spriteset = Spriteset_Map.new
  # メッセージウィンドウを作成
  @message_window = Window_FukiMessage.new
  # トランジション実行
  Graphics.transition
  # メインループ
  loop do
	 # ゲーム画面を更新
	 Graphics.update
	 # 入力情報を更新
	 Input.update
	 # フレーム更新
	 update
	 # 画面が切り替わったらループを中断
	 if $scene != self
	   break
	 end
  end
  # トランジション準備
  Graphics.freeze
  # スプライトセットを解放
  @spriteset.dispose
  # メッセージウィンドウを解放
  @message_window.dispose
  # タイトル画面に切り替え中の場合
  if $scene.is_a?(Scene_Title)
	 # 画面をフェードアウト
	 Graphics.transition
	 Graphics.freeze
  end
end
end
#==============================================================================
# ■ Window_InputNumber
#==============================================================================
class Window_InputNumber < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#	   digits_max : 桁数
#--------------------------------------------------------------------------
def initialize(digits_max)
  @digits_max = digits_max
  @number = 0
  # 数字の幅からカーソルの幅を計算 (0~9 は等幅と仮定)
  dummy_bitmap = Bitmap.new(32, 32)
  dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
  @cursor_width = dummy_bitmap.text_size("0").width + 8
  dummy_bitmap.dispose
  super(0, 0, @cursor_width * @digits_max + 32, 64)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.contents.font.size = FUKI::MES_FONT_SIZE
  self.z += 9999
  self.opacity = 0
  self.contents.font.name = "Arial"
  @index = 0
  refresh
  update_cursor_rect
end
end
#==============================================================================
# ■ Window_Gold
#==============================================================================
class Window_Gold < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
  height = FUKI::MES_FONT_SIZE + 32
  super(0, 0, 160, height)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.back_opacity = FUKI::MES_OPACITY
  self.contents.font.size = FUKI::MES_FONT_SIZE
  self.contents.font.name = "Arial"
  refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  cx = contents.text_size($data_system.words.gold).width
  self.contents.font.color = normal_color
  self.contents.draw_text(4, 0, 120-cx-2, FUKI::MES_FONT_SIZE, $game_party.gold.to_s, 2)
  self.contents.font.color = system_color
  self.contents.draw_text(124-cx, 0, cx, FUKI::MES_FONT_SIZE, $data_system.words.gold, 2)
  self.contents.font.name = "Arial"
end
end

 

 

 

Per quanto riguarda il face maker... Mai pensato a disegnarteli da te? :)

 

Ciò pensato, ma è un lavoro che richiederebbe troppo tempo, e il mio ruolo non è esattamente quello di grafico ;)

Edited by Dilos
Inseriti Spoiler.
Guè Pequeno.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...