Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # Script : Mugshots Manager v.3
- # Autor : Bezier
- #-------------------------------------------------------------------------------
- # Changelog v.3:
- # - Permite reducir la textbox cuando aparece el mugshot dando un valor a REDUCETEXTBOXWIDTH
- # * Mejora planteada a raíz de una conversación con Pira
- # Changelog v.2:
- # - Añade campos a la configuración para poder hacerlo mas personalizable
- # - Añade una función para poder tener mugshots animados mientras pasa el texto
- # - Cambia el término anterior animate por appear en la función load, ya que es más correcto
- # así no se confunde con la animación de mugshot, pues es una aparición por el lado derecho
- #-------------------------------------------------------------------------------
- # Muestra el mugshot asociado a un nombre en la posición indicada.
- # Si la imagen está compuesta por frames con las diferentes poses o rostros
- # del personaje, se podrá definir el tamaño del frame sobre la imagen.
- # -----------------------------------------
- # | | | | |
- # | Frame 0 | Frame 1 | Frame 2 | Frame 3 |
- # | | | | |
- # -----------------------------------------
- #
- # Tiene compatibilidad con el script NameBox para mostrar el cuadro de nombre
- # junto con el mugshot.
- #-------------------------------------------------------------------------------
- # Paso 1: ¿Cómo integrarlo?
- #
- # Añadir una línea en la función Kernel.pbMessageDisplay del script Messages:
- #
- # [...]
- # ########## Show text #############################
- # Mugshots.show(msgwindow) # <- Añadir esta línea para mostrar el Mugshot.
- # msgwindow.text=text
- # [...]
- #
- #-------------------------------------------------------------------------------
- # Paso 2: ¿Cómo se usa?
- #
- # Hacer el cambio del Paso 1.
- #
- # Para mostrar un mugshot desde un evento tan solo hay que llamar al script:
- # Mugshots.load('NAME', FRAME=0, APPEAR=false)
- #
- # 'NAME' : Nombre del gráfico en la carpeta Graphics/Pictures/FOLDER
- # FOLDER es el nombre de la carpeta definida más abajo, en configuración
- # FRAME : Frame que se mostrará de la imágen, si está compuesto por frames
- # El valor por defecto es 0
- # APPEAR : Si es true, el mugshot aparece desde la derecha con una transición
- # El valor por defecto es false
- #
- # Esto cargará la imagen 'NAME' encima del cuadro de texto.
- # Se mostrará hasta que se desactive llamando al script:
- # Mugshots.dispose
- #
- # v.2
- # Para mostrar un mugshot animado desde evento, hay que indicar qué frames
- # debe usar para la animación llamando al script:
- # Mugshots.loadAnim('NAME', [F1,F2,F3,...], FRAME_SKIP, REPITE, PAUSE_FRAMES=0)
- #
- # 'NAME' : Igual que con la función load, es el nombre del gráfico
- # [F1,F2,F3] : Índice de los frames del gráfico que componen la animación
- # FRAME_SKIP : Frames de espera entre cada cambio de frame.
- # REPITE : Si es true, la animación se repetirá en bucle
- # PAUSE_FRAMES : Frames de pausa antes de iniciar una nueva animación si se ha definido como bucle
- #
- #-------------------------------------------------------------------------------
- # Paso 3: Compatibilidades (Opcional)
- #
- # Si se está usando el script de comandos de JESS, que sobreescribe la función
- # Kernel.pbMessageDisplay, hay que editar este script en vez del de Messages.
- # Del mismo modo que en el Paso 1, hay que añadir la llamada a Mugshots
- # en la función Kernel.pbMessageDisplay.
- # Si no se encuentra el comentario:
- # ########## Show text #############################
- # habrá que buscar la línea:
- # msgwindow.text=text
- # y hacer la llamada:
- #
- # [...]
- # atTop=(msgwindow.y==0)
- # Mugshots.show(msgwindow) # <- Añadir esta línea para mostrar el Mugshot.
- # msgwindow.text=text
- # [...]
- #===============================================================================
- module Mugshots
- # ---------- CONFIRUGACIÓN ----------
- # Nombre de la carpeta que tiene los mugshots dentro de Graphics/Pictures
- FOLDER = "Mugshots"
- # Frames que tarda el Mugshot en entrar si se carga con animación de entrada
- APPEARFRAMES = 15
- # Si es true, activa la compatibilidad con el script NameBox para mostrar
- # el cuadro de nombre junto con el Mugshot con el que comparta dicho nombre
- AUTONAMEBOX = true
- # Define el ancho de frame de Mugshots compuesto por una secuencia de imagenes
- CHARACTERS = {
- # NAME => Ancho del frame
- "Candela" => 262
- }
- # Ancho, en píxeles, que se reducirá la textbox cuando se muestre un mugshot
- REDUCETEXTBOXWIDTH = 0
- # ---------- FUNCIONES DE USO ----------
- # Carga el mugshot con frame concreto
- # name : Nombre de la imagen en Graphics/Pictures/FOLDER
- # frame : Frame de la imagen a mostrar, solo si está dividida en frames
- # y se ha definido un ancho en CHARACTERS
- # appear : Si es true, el mugshot aparece por la derecha y sale igual cuando se destruye
- def self.load(name, frame=0, appear=false)
- # Antes de cargar un nuevo mugshot, quita el actual
- dispose
- @name = name
- @framewidth = 0
- @framewidth = CHARACTERS[name] if CHARACTERS[name]
- @frame = frame >= 0 ? frame : 0
- @appearIn = @appearOut = appear
- if defined?(NameBox) && AUTONAMEBOX
- NameBox.load(name)
- end
- end
- # Carga el mugshot con una animación definida
- # name : nombre de la imagen en Graphics/Pictures/FOLDER
- # frameRange : Array con los frames que componen la animación. Ej: [0, 1, 3, 2, 4]
- # frameWait : Tiempo de espera (en frames) antes de cambiar al siguiente frame.
- # repite : Si es true, la animación se repite en bucle hasta que se destruya
- # framePause : Tiempo de espera (en frames) antes de iniciar de nuevo la animación
- # Esto solo se usa si repite es true
- def self.loadAnim(name, frameRange, frameWait, repite, framePause=0)
- self.load(name, frameRange[0])
- @mugAnimated = true
- @frameRange = frameRange
- @frameIndex = 0
- @frameWait = frameWait
- @frameCountDown = frameWait
- @repiteAnimation = repite
- @framePause = framePause
- end
- def self.visible?
- return @mugshot && @mugshot.visible
- end
- # Muestra el mugshot de acuerdo a la configuración
- def self.show(msgwindow)
- if msgwindow && @name
- # Compatibilidad con el script NameBox para mostrar el nombre del personaje
- if defined?(NameBox) && AUTONAMEBOX
- NameBox.show(msgwindow)
- end
- @mugshot = Sprite.new(msgwindow.viewport) if !@mugshot
- @mugshot.z = msgwindow.z-1
- @mugshot.bitmap = Cache.picture("#{FOLDER}/#{@name}")
- if REDUCETEXTBOXWIDTH > 0
- msgwindow.width = Graphics.width - REDUCETEXTBOXWIDTH
- end
- if @framewidth == 0
- @framewidth = @mugshot.bitmap.width
- end
- # Calcula las coordenadas del mugshot en base a su tamaño
- x = Graphics.width - @framewidth
- y = Graphics.height - @mugshot.bitmap.height
- # Muestra el frame, si lo hay, en la posición indicada
- @mugshot.src_rect.set(@frame * @framewidth, 0, @framewidth, @mugshot.bitmap.height)
- @mugshot.x = x
- @mugshot.y = y
- # Si se ha cargado con aparición, la entrada la hará desde el lateral
- # derecho hacia la posición definida
- if @appearIn
- @mugshot.x = Graphics.width
- step = @framewidth / (APPEARFRAMES * 1.0)
- APPEARFRAMES.times do
- @mugshot.x -= step
- pbWait(1)
- end
- @mugshot.x = x
- pbWait(1)
- @appearIn = false
- @appearOut = true
- end
- end
- end
- # v.2 - Animación del mugshot
- # Actualiza el mugshot si se ha definido con una animación
- def self.update
- if @mugshot && @mugAnimated
- @mugshot.src_rect.set(@frameRange[@frameIndex] * @framewidth, 0, @framewidth, @mugshot.bitmap.height)
- @frameCountDown -= 1
- if @frameCountDown <= 0
- @frameCountDown = @frameWait
- @frameIndex += 1
- if @frameIndex == @frameRange.size
- if @repiteAnimation
- @frameIndex = 0
- @frameCountDown += @framePause if @framePause > 0
- else
- @frameIndex -= 1
- @mugAnimated=false
- end
- end
- @frame = @frameRange[@frameIndex]
- end
- end
- end
- # Oculta el NameBox pero no lo destruye, para que se muestre junto al próximo texto
- def self.hide
- @mugshot.visible = false if @namebox
- if defined?(NameBox) && AUTONAMEBOX
- NameBox.hide
- end
- end
- # Destruye el Mugshot para que no aparezca en el siguiente cuadro de texto
- def self.dispose
- if @mugshot
- if @appearOut && @framewidth
- step = @framewidth / (APPEARFRAMES * 1.0)
- while @mugshot.x < Graphics.width
- @mugshot.x += step
- pbWait(1)
- end
- @appearIn = true
- end
- @mugshot.visible = false
- end
- @mugshot.dispose if @mugshot
- @mugshot = nil
- @name = nil
- @framewidth = 0
- @frame = 0
- @animatIn = @appearOut = false
- if @mugAnimated
- @mugAnimated = false
- @frameRange.clear if @frameRange
- @frameRange = nil
- @frameWait = 0
- @frameCountDown = 0
- @frameIdx = 0
- @repiteAnimation = 0
- end
- if defined?(NameBox) && AUTONAMEBOX
- NameBox.dispose
- end
- end
- end
- # v.2 - Actualiza el Mugshot en cada actualización del mapa
- class Scene_Map
- alias mugupdateSpritesets updateSpritesets
- def updateSpritesets
- mugupdateSpritesets
- Mugshots.update
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement