Vou tentar brincar de novo de criar jogos, mas dessa vez é mais sério. Eu cresci.
E aí pessoal, Moveto falando.
É a primeira vez que faço um script e mando para algum lugar, é algo bem simples, há melhores, mas talvez eu possa ir atualizando esse de alguma maneira né? hehehe.
Descrição Simples
Bem, este é meu sistema de mensagens simples, ele vai mostrando letra por letra e soltando uns blips a cada letra, também é possível mudar o pitch do som selecionado, tem como usar pausas e cores personalizadas (Cores personalizadas você já adiciona no Window_Base).
Os comandos deixarei no inicio do script, para caso alguém se perca no caminho
Aviso
No meu projeto não houve nenhum erro até agora, mas pode ser que algumas coisas não funcionem do jeito que seja, se houver algum problema, me mandem que tentarei arrumar.
O Que Diabos Tem No Script?
O script conta com os seguintes sistemas (além do que ele normalmente já é):
Mudança de pitch na mensagem; use \p[n] para mudar de pitch (n é o valor do pitch, 100 é o normal)
Mudança do som na letra; use \s[n] para mudar o som (n é o nome do arquivo do som na pasta SE)
Mudança de cores; use \c[n] para mudar a cor (n é o número da cor correspondente de Window_Base)
Pausa do texto por 1 segundo; use \. para pausar por 1 segundo
Mudança de local do botão pause na mensagem; no script, mexa apenas
em PAUSE_ICON_X_OFFSET = 0 ou no Y para mudar o ícone de pause da mensagem
Reset das modificações na mensagem; use \r para a mensagem voltar ao normal.
Condições do Uso
Você pode modificar do jeito que quiser, usar para seus projetos comerciais e públicos (obvio).
Se quiser e puder, dê os devidos créditos, não é obrigado, mas melhora o reconhecimento
Como Usar e Instalar?
Apenas coloque o script acima de Main, de resto, apenas modificações básicas e pessoais.
É a primeira vez que faço um script e mando para algum lugar, é algo bem simples, há melhores, mas talvez eu possa ir atualizando esse de alguma maneira né? hehehe.
Descrição Simples
Bem, este é meu sistema de mensagens simples, ele vai mostrando letra por letra e soltando uns blips a cada letra, também é possível mudar o pitch do som selecionado, tem como usar pausas e cores personalizadas (Cores personalizadas você já adiciona no Window_Base).
Os comandos deixarei no inicio do script, para caso alguém se perca no caminho
Aviso
No meu projeto não houve nenhum erro até agora, mas pode ser que algumas coisas não funcionem do jeito que seja, se houver algum problema, me mandem que tentarei arrumar.
O Que Diabos Tem No Script?
O script conta com os seguintes sistemas (além do que ele normalmente já é):
Mudança de pitch na mensagem; use \p[n] para mudar de pitch (n é o valor do pitch, 100 é o normal)
Mudança do som na letra; use \s[n] para mudar o som (n é o nome do arquivo do som na pasta SE)
Mudança de cores; use \c[n] para mudar a cor (n é o número da cor correspondente de Window_Base)
Pausa do texto por 1 segundo; use \. para pausar por 1 segundo
Mudança de local do botão pause na mensagem; no script, mexa apenas
em PAUSE_ICON_X_OFFSET = 0 ou no Y para mudar o ícone de pause da mensagem
Reset das modificações na mensagem; use \r para a mensagem voltar ao normal.
Condições do Uso
Você pode modificar do jeito que quiser, usar para seus projetos comerciais e públicos (obvio).
Se quiser e puder, dê os devidos créditos, não é obrigado, mas melhora o reconhecimento
Como Usar e Instalar?
Apenas coloque o script acima de Main, de resto, apenas modificações básicas e pessoais.
Ruby:
#==============================================================================
# ** Moveto Message System 1.0 **
# - Esse é um sistema simples de mensagem feito por mim, para um
# projeto pequeno que estou desenvolvendo, futuramente irei atualizar isso
# para uso maior.
#==============================================================================
# ** Como Usar **
# \p[valor do pitch] 100 é normal, 50 é grave e 150 é agudo.
# \s[nome do áudio] o arquivo de áudio deve estar na pasta SE
# \c[número da cor] a cor fica no Window_Base original ou em outro custom
# \. dá uma pequena pausa entre o texto
# \r reseta a caixa de diálogo (tira os efeitos)
#==============================================================================
class Game_System
attr_accessor :talk_pitch
attr_accessor :text_speed
end
class Window_Message < Window_Selectable
TALK_SE_NAME = "Talk" # Coloca o nome só do arquivo do áudio da pasta SE
TALK_SE_VOL = 80 # Volume principal do blip de texto
# Local do ícone de pausa da mensagem
PAUSE_ICON_X_OFFSET = 220 # Aqui muda horizontalmente
PAUSE_ICON_Y_OFFSET = 0 # Aqui muda verticalmente
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
@text = ""
@text_chars = []
@text_index = 0
@wait_count = 0
@x = 0
@y = 0
@cursor_width = 0
$game_system.talk_pitch ||= 100
$game_system.text_speed ||= 2
self.active = false
self.index = -1
create_pause_sprite
end
#--------------------------------------------------------------------------
def create_pause_sprite
@pause_sprite = Sprite.new
@pause_sprite.bitmap = Bitmap.new(16, 16)
@pause_sprite.z = self.z + 1
@pause_sprite.visible = false
@pause_frame = 0
end
#--------------------------------------------------------------------------
def update_pause_sprite
return if @pause_sprite.nil?
if @contents_showing && @text_index >= @text_chars.size
@pause_sprite.visible = true
base_x = self.x + self.width / 2 - 8
base_y = self.y + self.height - 16
@pause_sprite.x = base_x + PAUSE_ICON_X_OFFSET
@pause_sprite.y = base_y + PAUSE_ICON_Y_OFFSET
@pause_frame = (@pause_frame + 1) % 40
frame = @pause_frame / 10
sx = 160 + (frame % 2) * 16
sy = 64 + (frame / 2) * 16
@pause_sprite.bitmap.clear
@pause_sprite.bitmap.blt(0, 0, self.windowskin, Rect.new(sx, sy, 16, 16))
else
@pause_sprite.visible = false
end
end
#--------------------------------------------------------------------------
def terminate_message
self.active = false
self.pause = false
self.index = -1
self.contents.clear
self.cursor_rect.empty
@contents_showing = false
@pause_sprite.visible = 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_proc = nil
end
#--------------------------------------------------------------------------
def start_message
@text = $game_temp.message_text.clone
@text.gsub!(/\\\\/) { "\000" }
@text_chars = @text.split(//)
self.contents.clear
self.contents.font.color = normal_color
@text_index = 0
@wait_count = 0
@x = 0
@y = 0
@cursor_width = 0
@contents_showing = true
end
#--------------------------------------------------------------------------
def play_talk_se
return if TALK_SE_NAME == ""
pitch = $game_system.talk_pitch || 100
se = RPG::AudioFile.new(TALK_SE_NAME, TALK_SE_VOL, pitch)
$game_system.se_play(se)
end
#--------------------------------------------------------------------------
def current_speed
return 0 if Input.press?(Input::C)
return $game_system.text_speed
end
#--------------------------------------------------------------------------
def current_text
@text_chars[@text_index..-1].join
end
#--------------------------------------------------------------------------
def process_character
return if @text_index >= @text_chars.size
text = current_text
if text =~ /\A\\[pP]\[(\d+)\]/
$game_system.talk_pitch = $1.to_i
@text_index += $&.size
return
end
if text =~ /\A\\[sS]\[(\d+)\]/
$game_system.text_speed = $1.to_i
@text_index += $&.size
return
end
if text =~ /\A\\[cC]\[(\d+)\]/
self.contents.font.color = text_color($1.to_i)
@text_index += $&.size
return
end
if text =~ /\A\\[rR]/
self.contents.font.color = normal_color
$game_system.talk_pitch = 100
$game_system.text_speed = 2
@text_index += 2
return
end
if text =~ /\A\\\./
@wait_count = 10
@text_index += 2
return
end
c = @text_chars[@text_index]
@text_index += 1
c = "\\" if c == "\000"
if c == "\n"
if @y >= $game_temp.choice_start
@cursor_width = [@cursor_width, @x].max
end
@y += 1
@x = ($game_temp.choice_start <= @y) ? 8 : 0
return
end
self.contents.draw_text(@x, @y * 32, 40, 32, c)
@x += self.contents.text_size(c).width
play_talk_se
@wait_count = current_speed
end
#--------------------------------------------------------------------------
#Vou pedir pra você voltar
#Vou pedir pra você ficar
#Eu te amo
#Eu te quero bem
def update
super
update_cursor_rect
update_pause_sprite
if @fade_in
self.contents_opacity += 24
@fade_in = false if self.contents_opacity >= 255
return
end
if @contents_showing
if @wait_count > 0
@wait_count -= 1
return
end
if @text_index < @text_chars.size
process_character
return
end
self.pause = false
if $game_temp.choice_max > 0
@item_max = $game_temp.choice_max
self.active = true
self.index = 0 if self.index < 0
else
self.active = false
self.index = -1
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
end
return
end
if $game_temp.message_text != nil
reset_window
start_message
self.visible = true
self.contents_opacity = 0
@fade_in = true
return
end
if self.visible
@fade_out = true
self.opacity -= 48
if self.opacity <= 0
self.visible = false
@fade_out = false
$game_temp.message_window_showing = false
end
end
end
#--------------------------------------------------------------------------
def update_cursor_rect
if $game_temp.choice_max > 0 && @index >= 0
n = $game_temp.choice_start + @index
width = (@cursor_width > 0) ? @cursor_width : (self.width - 32)
self.cursor_rect.set(8, n * 32, width, 32)
else
self.cursor_rect.empty
end
end
#--------------------------------------------------------------------------
def reset_window
# Aqui muda a posição da mensagem em relação à tela do jogo de forma vertical
case $game_system.message_position
when 0 then self.y = 16 # Cima
when 1 then self.y = 160 # Meio
when 2 then self.y = 304 # Baixo
end
self.opacity = ($game_system.message_frame == 0) ? 255 : 0
self.back_opacity = 255
end
end
