#==============================================================================#
#==============================================================================#
# PokéMonturas para Pokémon Essentials.
#==============================================================================#
#==============================================================================#
# Creado por JessWshs
# Versión 3.0 :
# Interface(nueva)
# Eliminado el codigo extra
# No es necesario usar variables adicionales
# Añadida la opción debug para agregar todas las monturas juntas
# Mensaje que te avisa cuando ya no puedes registrar más(modo $debug).
# Opción de "Reset" para cuando se edite la información de las monturas.
# Mensaje de usar/dejar de usar la montura seleccionada.
# Cambio de charset dependiendo de la montura que se use.
# Agregado 12 diferentes monturas.
# Condicionales para las 12 monturas.
# No pueden usarse en interiores.
# Excepciones de mapas interiores.
# Si se accede a un mapa que no sea "Outdoor", se cancela la montura.
# No pueden usarse si se hace surf a menos que sea una montura marina.
# No pueden usarse si se hace buceo a menos que se desee emergir.
# Las nuevas monturas ya no se salen del margen de la pantalla.
# Compatible con la version 17 de Essentials.
# Compatible con la version 16 de Essentials.
# Compatible con la version 15 de Essentials.
# Velocidades de movimiento según la montura usada.
# Compatible con el script de Huellas en la arena de KleinStudio.
# Efecto de obtener objetos al usar Corte.
# Efecto de obtener objetos o encuentros salvajes al Romper Rocas.
# Registrar hasta 4 monturas a la vez en modo acceso rápido.
# Acceder a la pantalla de Buscamontura oprimiendo la tecla "S" (opcional).
# Abrir la pantalla de acceso rápido oprimiendo la tecla "A"
# Compatibilidad con las cañas de pescar.
# Solo se pueden usar las cañas con la montura llamada "SurfPesca"(Lapras).
# Compatibilidad con el uso de la bicicleta.
# Compatibilidad con el uso del BuscaObjetos(objeto clave).
# Algunos efectos externos de monturas se realizan desde Scene_Map.
# Los npc de GolpeRoca y Corte pueden estar vacios.
# Agregada animación al usar una montura.
# Agregada animación al usar vuelo(opcional).
#
#==============================================================================#
#==================Como registrar==============================================#
#==============================================================================#
# Registra una nueva montura usando el comando : pbRegMontura
# Se registrará una nueva cada vez que se llame ese comando.
# Si esta en modo debug, al registrar una montura te preguntará si quieres
# registrarlas todas o si ya tienes todas registradas.
#
# La pantalla del buscamontura se abre usando el comando : pbPkMontura
# Se puede acceder al oprimir la tecla "S" si la variable ACTIVARLR esta
# activada "true".
#
# Para abrir la pantalla de acceso rápido se usa el comando : pbPkMonturaKey
# por defecto, se puede acceder usando la tecla "A".
#
# Los charset/Overworld/minis deben estar en al carpeta Graphics/characters y
# son nombrados de la siguiente manera : montura_EFECTO_00GENERO
# donde EFECTO es el efecto de la montura
# y GENERO es 0 si es un Chico o 1 si es una Chica.
# ejemplos : montura_RompeRocas_000, montura_RompeRocas_001
# montura_SurfPesca_000, montura_SurfPesca_001
# Cuando el efecto de la montura cambia su imagen, se nombra de esta manera :
# montura_EFECTOA_00GENERO, en caso especial que la montura tenga más de un
# efecto, el siguiente efecto se llamará montura_EFECTOB_00GENERO, hasta ahora
# la unica montura con este caso es "SurfPesca"(lapras) donde
# montura_SurfPesca_000 es la imagen normal de la montura
# montura_SurfPescaA_000 es la imagen de la montura al moverse rápido
# montura_SurfPescaB_000 es la imagen de la montura al usar una Caña.
#
#
# En caso de agregar o eliminar monturas, cambiar los números de la lista de
# monturas o cambiar la lista de mapas especiales, se tiene que dar un "Reset"
# para cargar los cambios hechos, usando el comando : pbRegMontura(true),
# el efecto de entregar/registrar montura nueva se aplicará normalmente
# luego de hacer el reset.
# Esto solo aplica si ya se tiene una partida guardada.
#
#
# Si se desea borrar todas las monturas ya obtenidas/registradas se hace
# de la siguiente manera : pbRegMontura(nil,true)
# Luego de borrarlas, el efecto de entregar la primera montura disponible
# se aplicará normalmente.
#
#
#==============================================================================#
#================Huellas en la arena (Script de KleinStudio)===================#
#==============================================================================#
# Para que funcione, este script de Pokémonturas debe estar debajo del
# script de Huellas en la arena.
#
# Las imagenes de las huellas van en la carpeta Graphics/Pictures.
# Se deben nombrar de esta manera : footsetEFECTO, donde EFECTO es el nombre
# del efecto de la montura, por ejemplo : "footsetRompeRocas", "footsetCorte".
# Si la imagen no existe, se usará la llamada "footset".
# Si la montura esta dentro la lista en la variable SINHUELLAS, no tendrá imagen
# de huellas al caminar por el terrain de arena.
#
#
#==============================================================================#
# Funciones de las 12 monturas.
#==============================================================================#
#
# *Carga Tauros : al oprimir "Z" y moverte, cambiará de imagen del jugador y
# rompera rocas (npc) llamadas "Rock" que tenga enfrente.
#
# *Olfatero Stoutland : al oprimir "Z" , cambiara de imagen del personaje y
# mostrará un signo de "?" si hay un objeto oculto cerca, y un signo de "!"
# si el objeto esta a 3 tiles de distancia hacía cualquier dirección.
#
# *Nado lapras : al apretar "Z" mientras te mueves, cambiara la imagen del
# personaje e incrementará su velocidad de movimiento.
# Al usar una caña, se cambiará la imagen del jugador pescando sobre la
# montura.
#
# *Vuelo Charizard : Te trasnportará a un mapa ya visitado.
#
# *Propulción Sharpedo : Al oprimir "Z" mientras te mueves, romperá rocas(npc)
# con el nombre "Rock" que tenga enfrente.
#
# *Todoterreno Mudsdale : Solo esta montura puede pasar por el
# terrain número 22 (PBTerrain::CaminoRocoso) y al caminar apretando "Z"
# avanzará más rapido.
#
# *Empuje Machamp : Al estar cerca de un npc llamado "Boulder"
# cambiará de imagen el personaje y al avanzar hacía ese npc, este se
# moverá (si es posible).
#
# *Corte Syther : Al oprimir "Z" estando enfrente de un npc llamado
# "Tree", se aplicará el efecto de corte.
# No es necesario que el npc tenga algún texto o script dentro.
#
# *Cascada Goldeen : Solo con esta montura se puede subir por las
# cascadas.
#
# *Buceo Wailmer : Solo al estar haciendo surf y estar sobre un terrain
# de "DeepWater"(terrain 5), te sumergirá(existiendo un mapa para buceo).
# Estando en un mapa submarino, te regresará a la superficie surfeando.
#
# *TrepraRocas Golem : Al usarse, te permitirá subir o bajar por los terrenos
# 23 (PBTerrain::TreparocasA) y 24 (PBTerrain::TreparocasB).
# El 23 es para subir mirando hacía la derecha o la izquierda, el jugador
# seguirá subiendo en diagonal hasta que tenga un espacio pasable enfrente.
# El 24 es para bajar mirando hacía la derecha o la izquierda, el jugador
# seguirá bajando en diagonal hasta que tenga un espacio pasable enfrente.
# La animación al subir solo se verá si el jugador pasa sobre alguno de
# los terrenos 23 o 24.
# Ambos, 23 y 24, sirven para subir o bajar mirando hacía adelante o atras.
#
# *Remolino Empoleon : Solo está montura puede pasar por el
# terrain número 25 (PBTerrain::Remolino).
#
#==============================================================================#
# *Creditos no son necesarios pero se agradece.
#==============================================================================#
#==============================================================================#
#
#==============================================================================#
# Compatibilidad con algunas caracteristicas de versiones anteriores de
# Pokémon Essentials.
#==============================================================================#
# Apartir de la versión 16 la variable debe ser "true"
PASABLEPUENTE = true
# Apartir de la versión 17 la variable debe ser "true"
SURFABLEMAPAS = true
# Apartir de la versión 17 la variable debe ser "true"
VUELOMAPA = true
# Apartir de la versión 17 la variable debe ser "true"
PESCAMOV = true
# Apartir de la versión 17 la variable debe ser "true"
BOTONES = true
#==============================================================================#
# Variables
#==============================================================================#
# Número máximo de monturas que se pueden recibir.
MAX_MONTURAS = 12
# Número máximo de monturas que se verán en la pantalla.
MAX_POR_LINEA = 7
# Nombre del sonido escuchado al recibir una montura nueva, ubicado en la
# carpeta Audio/ME.
MON_MU = "Item get"
# Distancia máxima a la que se detectarán los objetos ocultos cercanos.
MON_DIST = 3
# Numeros de las animaciones al hallar un objeto oculto cerca,
# MON_ANIM_1 es si el objeto esta dentro del rango de la pantalla
# MON_ANIM_2 es si el objeto esta cerca del jugador a MON_DIST de distancia.
MON_ANIM_1 = 3
MON_ANIM_2 = 4
# Número de la animación al empujar rocas.
MON_ANIM_3 = 7
# Número de la animación al usar TrepaRocas
MON_TREPAROCAS=2
# Velocidad de espera para cada vez que se sube/baja un tile con TrepaRocas.
MON_TREPAROCAS_VEL = 0
# Si quieres que se vea la base al momento de hacer surf/buceo
# Para versiones previas a la 17, se recomienda dejarlo en false
BASESURF=false
BASEDIVE=false
# Número de montura minima que debes tener registrada
# para poder hacer surf/buceo (el 0 cuenta como la primera montura).
MON_SURF = 2
MON_BUCEO = 9
# Probabilidad de encuentro salvaje al usar RompeRocas/SurfRocas.
MON_GR_EN = 25
# Probabilidad de obtener objetos al usar RompeRocas/SurfRocas.
MON_GR_OB = 20
# Probabilidad de obtener objetos al usar Corte.
MON_CR_OB = 20
# Usar la función de la tecla "S" para abrir el Buscamontura.
ACTIVARLR = true
# Activar la Animación al usar el efecto "Vuelo".
ANIMA_VUELO = true
# ID de los mapas que no son "outdoor" pero puedes usar las monturas en ellos
# por ejemplo cuevas, tuneles, Mapas para Buceo, las casetas de conexión, etc.
LISTADEMAPAS = [34,29,30,49,70]
# Lista de monturas que no dejan huellas en la arena(script de KleinStudio)
SINHUELLAS = ["SurfPesca","SurfRocas","Buceo","Cascada","Remolino"]
#==============================================================================#
#=========================Terrenos/Terraintag==================================#
#==============================================================================#
##Para versiones desde la 15 o menores, se cambia "module" por "class".
# class PBTerrain
module PBTerrain
CaminoRocoso = 22 # Solo la montura con el efecto "CaminoRocoso" (Mudsdale)
# puede pasar por este terreno
TreparocasA = 23 # Usado para Subir en diagonal usando TrepaRocas
TreparocasB = 24 # Usado para Bajar en diagonal usando TrepaRocas
# Ambos sirven para Subir/Bajar de frente
Remolino = 25 # Solo la montura con el efecto "Remolino" (Empoleon)
# puede pasar por este terreno
def PBTerrain.caminoRocoso?(tag)
return tag==PBTerrain::CaminoRocoso
end
def PBTerrain.remolino?(tag)
return tag==PBTerrain::Remolino
end
def PBTerrain.isWaterfall?(tag)
return tag==PBTerrain::WaterfallCrest ||
tag==PBTerrain::Waterfall
end
def PBTerrain.isPassableWater?(tag)
return tag==PBTerrain::Water ||
tag==PBTerrain::StillWater ||
tag==PBTerrain::DeepWater ||
tag==PBTerrain::WaterfallCrest
end
def PBTerrain.isSurfable?(tag)
return PBTerrain.isWater?(tag)
end
def PBTerrain.isWater?(tag)
return tag==PBTerrain::Water ||
tag==PBTerrain::StillWater ||
tag==PBTerrain::DeepWater ||
tag==PBTerrain::WaterfallCrest ||
tag==PBTerrain::Waterfall
end
end
#==============================================================================#
#=========================Game_Temp============================================#
#==============================================================================#
class Game_Temp
attr_accessor :monturas
attr_accessor :buscador
attr_accessor :cascada
end
#==============================================================================#
#============================Game_Player=======================================#
#==============================================================================#
class Game_Player
attr_accessor :monturas_efectos
def monturaskey(cargar=false,val=0,montura="",borrar=false)
@derecha="" if !@derecha || borrar==true
@izquierda="" if !@izquierda || borrar==true
@abajo="" if !@abajo || borrar==true
@arriba="" if !@arriba || borrar==true
if cargar
n=[@derecha,@izquierda,@abajo,@arriba]
return n
else
case val
when 0; @derecha=montura
when 1; @izquierda=montura
when 2; @abajo=montura
when 3; @arriba=montura
end
end
end
def monturas(var=nil,reset=false,borrar=false)
montura_num= 0
## Números nacionales(Dex) de los Pokémon que serán monturas.
montura_lista=[128,508,131,6,319,1,68,123,118,320,76,395]
montura_efecto= ""
montura_activo= false
montura_mapas = LISTADEMAPAS
if (!var && !@monturas) || borrar==true
@monturas=[montura_num,montura_lista,montura_efecto,montura_activo,montura_mapas]
elsif reset==true
@monturas=[$game_temp.monturas[0],montura_lista,$game_temp.monturas[2],$game_temp.monturas[3],montura_mapas]
elsif var
@monturas = []
for i in 0..4
@monturas.push(var[i])
end
end
$game_temp.monturas=@monturas
end
alias monturas_update update
def update
monturas_update
$game_player.monturas()
monturas=$game_temp.monturas
if monturas[3]==true
##Velocidades a las que se mueven ciertas monturas
@move_speed = 4.8 if monturas[2]=="RompeRocas" || monturas[2]=="SurfRocas"
@move_speed = 6.2 if ( monturas[2]=="RompeRocas" || monturas[2]=="SurfRocas" ) && Input.press?(Input::A) && (Input.press?(Input::UP) || Input.press?(Input::DOWN) || Input.press?(Input::LEFT) || Input.press?(Input::RIGHT) )
@move_speed = 5.2 if monturas[2]=="Buscador"
@move_speed = 2.0 if monturas[2]=="Buscador" && Input.press?(Input::A)
@move_speed = 4.2 if monturas[2]=="SurfPesca"
@move_speed = 5.6 if ( monturas[2]=="SurfPesca" && Input.press?(Input::A) ) || monturas[2]=="SurfRocas"
@move_speed = 3.4 if monturas[2]=="CaminoRocoso"
@move_speed = 5.6 if monturas[2]=="CaminoRocoso" && Input.press?(Input::A)
@move_speed = 4.0 if monturas[2]=="Fuerza" || monturas[2]=="Remolino" || monturas[2]=="Corte" || monturas[2]=="Buceo"
@move_speed = 3.0 if monturas[2]== (monturas[2]=="Remolino" && pbGetTerrainTag($game_player)==PBTerrain::Remolino)
@move_speed = 3.8 if monturas[2]=="TrepaRocas"
@move_speed = 5.0 if monturas[2]=="RompedorRocas"
@move_speed = 6.2 if monturas[2]=="RompedorRocas" && Input.press?(Input::A) && (Input.press?(Input::UP) || Input.press?(Input::DOWN) || Input.press?(Input::LEFT) || Input.press?(Input::RIGHT) )
end
end
end
#======================================================================================================#
#============================Lista de monturas=========================================================#
#======================================================================================================#
def pbListadeMonturas(val)
## La primera es de base, osea montura "0" y no se modifica.
m=[["Ninguno","Nada","texto"]]
m.push(["Carga Tauros" ,"RompeRocas" , "Tauros romperá rocas." ]) if val>=0
m.push(["Olfateo Stouland" ,"Buscador" ,"Stouland hallará objetos ocultos." ]) if val>=1
m.push(["Nado Lapras" ,"SurfPesca" ,"Navega y Pesca con Lapras." ]) if val>=2
m.push(["Vuelo Charizard" ,"Vuelo" ,"Charizard te llevará volando." ]) if val>=3
m.push(["Propulsión Sharpedo" ,"SurfRocas" ,"Sharpedo nadará rapidamente." ]) if val>=4
m.push(["Todoterreno Mudsdale" ,"CaminoRocoso" ,"Mudsdale te llevará entre rocas." ]) if val>=5
m.push(["Empuje Machamp" ,"Fuerza" ,"Machamp moverá enormes piedras." ]) if val>=6
m.push(["Corte Scyther" ,"Corte" ,"Scyther cortará pequeños árboles." ]) if val>=7
m.push(["Cascada Goldeen" ,"Cascada" ,"Goldeen nadará encima de cascadas." ]) if val>=8
m.push(["Buceo Wailmer" ,"Buceo" ,"Wailmer buceará por los mares." ]) if val>=9
m.push(["TrepaRocas Golem" ,"TrepaRocas" ,"Golem trepará sobre laderas rocosas." ]) if val>=10
m.push(["Remolino Empoleon" ,"Remolino" ,"Empoleon atravesará remolinos marinos."]) if val>=11
m.push(["Krookodile Destructor","RompedorRocas","Krookodile destruirá rocas." ]) if val>=12
## El primero es el nombre de la montura, el segundo es el efecto y el tercero es el texto de información.
## Apartir de aqui se pueden agregar más usando el siguiente formato.
## m.push["Nombre de la montura","Efecto","texto de información"] if val>=NUMERO DE MONTURA
## el NUMERO DE MONTURA es el lugar que ocupará la montura nueva (0 es el primer lugar)
## ejemplo :
## m.push["Destello Zubat","Destello","Zubat iluminará tu camino"] if val>=12
lista=[]
for i in 1..val
lista.push(m[i][1])
end
$game_player.monturas_efectos=lista
return m
end
#================================================================================#
#=======================Animación al Usar montura================================#
#================================================================================#
def pbmontura_animacion
anim={}
anim["anim"]=Sprite.new
anim["anim"].z = 99999
anim["anim"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/monturas_fx")
anim["anim"].x= 160
anim["anim"].y= 80
for i in 2..4
anim["anim"].src_rect.set(192*i,192,192,192)
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
for i in 0..4
anim["anim"].src_rect.set(192*i,192*2,192,192)
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
anim["anim"].opacity=0
end
#================================================================================#
#============================Registrar monturas==================================#
#================================================================================#
def pbRegMontura(reset=nil,borrar=false)
$game_player.monturas()
monturas=$game_temp.monturas
if MAX_MONTURAS!=monturas[1].length || reset==true
$game_player.monturas(nil,true)
monturas=$game_temp.monturas
Kernel.pbMessage("Parece que ha cambiado la lista de monturas/mapas en el script, se ha dado un reset para evitar errores.") if $DEBUG
end
if borrar==true
$game_player.monturas(nil,false,true)
monturas=$game_temp.monturas
$game_player.monturaskey(true,0,"",true)
Kernel.pbMessage("Se han borrado las monturas.") if $DEBUG
end
n=0
if monturas[0]==MAX_MONTURAS
Kernel.pbMessage("Ya tienes registrado todas las monturas disponibles en el buscamontura.") if $DEBUG
else
if $DEBUG
if Kernel.pbConfirmMessage(_INTL("¿Deseas tener todas las monturas disponibles?"))
Kernel.pbMessage("\\me[#{MON_MU}]Has registrado todas las monturas en el Buscamontura.")
monturas[0]=MAX_MONTURAS
n=1
end
end
if n==0
monturas[0] +=1
pk=monturas[1][monturas[0]-1]
poke=(PokeBattle_Pokemon.new(pk,1)).name
Kernel.pbMessage("\\me[#{MON_MU}]Has registrado a #{poke} en el Buscamontura.")
end
end
$game_player.monturas(monturas)
end
#================================================================================#
#===============Pantalla de Acceso Rápido de monturas============================#
#================================================================================#
def pbPkMonturaKey
sprites={}
vista=Viewport.new(0,0,Graphics.width,Graphics.height)
vista.z=99998
sprites["overlay"]=BitmapSprite.new(Graphics.width, Graphics.height)
sprites["overlay"].z = 99999
overlay=sprites["overlay"].bitmap
overlay.clear
sprites["Fondo"]=Sprite.new
sprites["Fondo"].z = 99999
sprites["Fondo"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Fondo3")
sprites["Fondo"].opacity=250
key=$game_player.monturaskey(true)
$game_player.monturas()
gamemontura=$game_temp.monturas
efectos=$game_player.monturas_efectos
iconos=[0,0,0,0]
numm=[]
for i in 0..3
if key[i]!=""
for j in 0..gamemontura[0]
iconos[i]=gamemontura[1][j] if efectos[j]==key[i]
end
icono=_INTL("{1}",iconos[i])
icono="0" + icono if iconos[i]<100 && iconos[i]>9
icono="00"+ icono if iconos[i]<10
numm.push(i)
sprites["montura#{i}"]=Sprite.new
sprites["montura#{i}"].z = 99999
sprites["montura#{i}"].bitmap= BitmapCache.load_bitmap("Graphics/Icons/icon#{icono}")
sprites["montura#{i}"].opacity=250
sprites["montura#{i}"].src_rect.set(0,0,64,64)
iconx= i==0 ? 143 : 223
iconx= 303 if i==1
icony= i==2 ? 76 : 236
icony= 156 if i==0 || i==1
sprites["montura#{i}"].x=iconx
sprites["montura#{i}"].y=icony
end
end
boton=0
loop do
Graphics.update
Input.update
pbUpdateSpriteHash(sprites)
if Input.trigger?(Input::RIGHT); boton=2; end
if Input.trigger?(Input::LEFT); boton=1; end
if Input.trigger?(Input::UP); boton=3; end
if Input.trigger?(Input::DOWN); boton=4; end
## Efectos al seleccionar la montura.
if boton!=0 && gamemontura[0]>0
unless (key[0]=="" && boton==1) || (key[1]=="" && boton==2) || (key[2]=="" && boton==3) || (key[3]=="" && boton==4)
pbSEPlay("select")
nombre=""
for i in 0..3
nombre=key[i] if key[i]!="" && boton==i+1
end
p= nombre==gamemontura[2] ? 1 : 0
if pbPuedeMontar?(nombre,gamemontura[4],gamemontura[2])
if nombre=="Vuelo"
sprites["Fondo"].opacity=0
for i in 0..3
sprites["montura#{numm[i]}"].opacity=0 if sprites["montura#{numm[i]}"]
end
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(5)
if gamemontura[3]==true
$game_player.transparent = true
pbmontura_animacion
gamemontura[2]= ""
gamemontura[3]= false
$game_player.monturas(gamemontura)
CambiaCharset(1)
$game_player.transparent = false
end
pbWait(10)
pbVuelo
break
elsif nombre=="Buceo"
sprites["Fondo"].opacity=0
for i in 0..3
sprites["montura#{numm[i]}"].opacity=0 if sprites["montura#{numm[i]}"]
end
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(5)
gamemontura[2]= nombre
if p==1 #Emergir
gamemontura[2]= "SurfPesca"
pbBucear(p)
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
else
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
pbBucear(p)
end
pbWait(5)
break
## Si agregas un efecto especial como el Vuelo o buceo que se activan al momento
## de usar la montura, lo puedes colocar aquí con un "elsif".
#elsif
else
gamemontura[2]= (p==1) ? "" : nombre
gamemontura[3]= (p==1) ? false : true
$game_player.monturas(gamemontura)
sprites["Fondo"].opacity=0
for i in 0..3
sprites["montura#{numm[i]}"].opacity=0 if sprites["montura#{numm[i]}"]
end
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(5)
$PokemonGlobal.bicycle=false if $PokemonGlobal.bicycle
$game_player.transparent = true
pbmontura_animacion
if gamemontura[2]=="SurfPesca" || gamemontura[2]=="SurfRocas" || gamemontura[2]=="Cascada" || gamemontura[2]=="Remolino"
surfbgm = pbGetMetadata(0,MetadataSurfBGM)
pbCueBGM(surfbgm,0.5) if surfbgm
pbStartSurfing if !$PokemonGlobal.surfing
end
CambiaCharset(p,gamemontura[2])
$game_player.transparent = false
pbWait(5)
break
end
else
sprites["Fondo"].opacity=0
for i in 0..3
sprites["montura#{numm[i]}"].opacity=0 if sprites["montura#{numm[i]}"]
end
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
Kernel.pbMessage(_INTL("Parece que no puedes usarlo aquí ni ahora."))
break
end
end
end
if Input.trigger?(Input::B)
pbSEPlay("Choose")
sprites["Fondo"].opacity=0
for i in 0..3
sprites["montura#{numm[i]}"].opacity=0 if sprites["montura#{numm[i]}"]
end
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
break
end
end
end
#================================================================================#
#========================Pantalla del Buscamontura===============================#
#================================================================================#
def pbPkMontura
$game_player.monturas()
gamemontura=$game_temp.monturas
sprites={}
vista=Viewport.new(0,0,Graphics.width,Graphics.height)
vista.z=99998
sprites["overlay"]=BitmapSprite.new(Graphics.width, Graphics.height)
sprites["overlay"].z = 99999
overlay=sprites["overlay"].bitmap
overlay.clear
sprites["Fondo"]=Sprite.new
sprites["Fondo"].z = 99999
sprites["Fondo"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Fondo")
sprites["retorno"]=Sprite.new
sprites["retorno"].z = 99999
sprites["retorno"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Regreso")
sprites["retorno"].x=0
sprites["retorno"].y=336
sprites["infobase"]=Sprite.new
sprites["infobase"].z = 99999
sprites["infobase"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Basetxt")
sprites["infobase"].x=66
sprites["infobase"].y=340
sprites["info"]=Window_UnformattedTextPokemon.new("")
sprites["info"].width=Graphics.width
sprites["info"].height=Graphics.height
sprites["info"].baseColor=Color.new(220,220,220)
sprites["info"].shadowColor=Color.new(60,60,68)
sprites["info"].z=99999
sprites["info"].windowskin=nil
sprites["info"].text=_INTL("Información de la montura seleccionada.")
sprites["info"].x=70
sprites["info"].y=327
# Lista de monturas obtenidas.
# Solo si se tiene 1 o más monturas registradas.
if gamemontura[0]!=0
monturas=pbListadeMonturas(gamemontura[0])
for i in 1..gamemontura[0]
unless i >MAX_POR_LINEA
sprites["base#{i}"]=Sprite.new
sprites["base#{i}"].z = 99999
sprites["base#{i}"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Base")
sprites["base#{i}"].src_rect.set(0,0,410,48)
sprites["base#{i}"].src_rect.set(0,48,410,48) if i==1
sprites["base#{i}"].x=90
sprites["base#{i}"].y=(48*(i-1))+2
sprites["base#{i}"].opacity=0 if i>MAX_POR_LINEA
end
icono=gamemontura[1][i-1]
sprites["icono#{i}"]=Sprite.new
sprites["icono#{i}"].z = 99999
icono2=_INTL("{1}",icono)
icono2="0" + icono2 if icono<100 && icono>9
icono2="00"+ icono2 if icono<10
sprites["icono#{i}"].bitmap= BitmapCache.load_bitmap("Graphics/Icons/icon#{icono2}")
sprites["icono#{i}"].src_rect.set(0,0,64,64)
sprites["icono#{i}"].x=120
sprites["icono#{i}"].y=(48*(i-1))-18
sprites["icono#{i}"].opacity=0 if i>MAX_POR_LINEA
nombre=monturas[i][0]
sprites["txt#{i}"]=Window_UnformattedTextPokemon.new("")
sprites["txt#{i}"].width=Graphics.width
sprites["txt#{i}"].height=Graphics.height
sprites["txt#{i}"].baseColor=Color.new(60,60,68)
sprites["txt#{i}"].shadowColor=Color.new(160,160,168)
sprites["txt#{i}"].z=99999
sprites["txt#{i}"].windowskin=nil
sprites["txt#{i}"].text=_INTL("{1}",nombre)
sprites["txt#{i}"].x=184
sprites["txt#{i}"].y=(48*(i-1))-12
sprites["txt#{i}"].text=_INTL("") if i>MAX_POR_LINEA
sprites["key#{i}"]=Sprite.new
sprites["key#{i}"].z=99999
sprites["key#{i}"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/KeyMarca")
sprites["key#{i}"].x=45
sprites["key#{i}"].y=(48*(i-1))+6
sprites["key#{i}"].opacity= 0
sprites["key#{i}"].opacity= 255 if i-1<MAX_POR_LINEA
sprites["key#{i}"].src_rect.set(38,0,38,41)
mkey=$game_player.monturaskey(true)
monk=0
for j in mkey
monk=1 if monturas[i][1]== j
end
sprites["key#{i}"].src_rect.set(0,0,38,41) if monk==1
sprites["key#{i}"].opacity= 255 if monk==1 && i-1<MAX_POR_LINEA
end
lugar=1
sprites["info"].text=_INTL("{1}",monturas[1][2])
end
loop do
Graphics.update
Input.update
pbUpdateSpriteHash(sprites)
if MInput.trigger?(:M) && gamemontura[0]>0
sprites["fondokey"]=Sprite.new
sprites["fondokey"].z=99999
sprites["fondokey"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/Fondo2")
sprites["fondokey"].opacity= 200
cancelar=false
for existe in 0..mkey.size
$game_player.monturaskey(false,existe,"") if mkey[existe]==(monturas[lugar][1])
end
while cancelar==false
Graphics.update
Input.update
pbUpdateSpriteHash(sprites)
if Input.trigger?(Input::RIGHT)
$game_player.monturaskey(false,1,monturas[lugar][1])
cancelar=true
elsif Input.trigger?(Input::LEFT)
$game_player.monturaskey(false,0,monturas[lugar][1])
cancelar=true
elsif Input.trigger?(Input::UP)
$game_player.monturaskey(false,2,monturas[lugar][1])
cancelar=true
elsif Input.trigger?(Input::DOWN)
$game_player.monturaskey(false,3,monturas[lugar][1])
cancelar=true
end
end
pbWait(10)
sprites["fondokey"].dispose
nva= lugar>MAX_POR_LINEA ? lugar : MAX_POR_LINEA
for k in 1..gamemontura[0]
sprites["key#{k}"].src_rect.set(38,0,38,41)
sprites["key#{k}"].opacity= 255
monk=0
mkey=$game_player.monturaskey(true)
for l in mkey
monk=1 if monturas[k][1]== l
end
sprites["key#{k}"].src_rect.set(0,0,38,41) if monk==1
sprites["key#{k}"].opacity= 255 if monk==1
sprites["key#{k}"].opacity= 0 if sprites["key#{k}"].y<0 || k>nva
end
end
if Input.trigger?(Input::DOWN) && gamemontura[0]>0
for i in 1..MAX_MONTURAS
if lugar==i && gamemontura[0]>lugar
pbSEPlay("Choose")
if lugar>=MAX_POR_LINEA
for j in 1..MAX_MONTURAS
sprites["icono#{j}"].y-=48
sprites["txt#{j}"].y-=48
sprites["key#{j}"].y-=48
nva= lugar>MAX_POR_LINEA ? lugar : MAX_POR_LINEA
for k in 1..gamemontura[0]
sprites["key#{k}"].src_rect.set(38,0,38,41)
sprites["key#{k}"].opacity= 255
monk=0
mkey=$game_player.monturaskey(true)
for l in mkey
monk=1 if monturas[k][1]== l
end
sprites["key#{k}"].src_rect.set(0,0,38,41) if monk==1
sprites["key#{k}"].opacity= 255 if monk==1
sprites["key#{k}"].opacity= 0 if sprites["key#{k}"].y<0 || k>nva+1
end
end
sprites["icono#{lugar+1}"].opacity=255
sprites["icono#{lugar+1-MAX_POR_LINEA}"].opacity=0
sprites["txt#{lugar+1}"].text=_INTL("{1}",monturas[lugar+1][0])
else
sprites["base#{i}"].src_rect.set(0,0,410,48)
sprites["base#{i+1}"].src_rect.set(0,48,410,48)
end
lugar+=1
sprites["info"].text=_INTL("{1}",monturas[lugar][2])
break
end
end
end
if Input.trigger?(Input::UP) && gamemontura[0]>0
for i in 1..MAX_MONTURAS
if lugar==i && lugar!=1
pbSEPlay("Choose")
if lugar>MAX_POR_LINEA
for j in 1..MAX_MONTURAS
sprites["icono#{j}"].y+=48
sprites["txt#{j}"].y+=48
sprites["key#{j}"].y+=48
nva= lugar>MAX_POR_LINEA ? lugar : MAX_POR_LINEA
for k in 1..gamemontura[0]
sprites["key#{k}"].src_rect.set(38,0,38,41)
sprites["key#{k}"].opacity= 255
monk=0
mkey=$game_player.monturaskey(true)
for l in mkey
monk=1 if monturas[k][1]== l
end
sprites["key#{k}"].src_rect.set(0,0,38,41) if monk==1
sprites["key#{k}"].opacity= 255 if monk==1
sprites["key#{k}"].opacity= 0 if sprites["key#{k}"].y<0 || k>nva-1
end
end
sprites["icono#{lugar}"].opacity=0
sprites["icono#{lugar-MAX_POR_LINEA}"].opacity=255
sprites["txt#{lugar}"].text=""
else
sprites["base#{i}"].src_rect.set(0,0,410,48)
sprites["base#{i-1}"].src_rect.set(0,48,410,48)
end
lugar=i-1
sprites["info"].text=_INTL("{1}",monturas[lugar][2])
break
end
end
end
# Los efectos que suceden al seleccionar alguna de las monturas.
if Input.trigger?(Input::C) && gamemontura[0]>0
pbSEPlay("select")
p=0
p= 1 if gamemontura[2]==monturas[lugar][1]
m= (p==1) ? "¿Dejar de usar esta pokemontura?" : "¿Deseas usar esta pokemontura?"
if Kernel.pbConfirmMessage(_INTL("#{m}"))
if pbPuedeMontar?(monturas[lugar][1],gamemontura[4],gamemontura[2])
if monturas[lugar][1]=="Vuelo"
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(15)
if gamemontura[3]==true
gamemontura[2]= ""
gamemontura[3]= false
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(1)
$game_player.transparent = false
end
pbWait(20)
pbVuelo
break
elsif monturas[lugar][1]=="Buceo"
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(5)
gamemontura[2]= monturas[lugar][1]
if p==1 #Emergir
gamemontura[2]= "SurfPesca"
pbBucear(p)
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
else
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
pbBucear(p)
end
pbWait(5)
break
## Si agregas un efecto especial como el Vuelo o buceo que se activan al momento
## de usar la montura, lo puedes colocar aquí con un "elsif".
#elsif
else
gamemontura[2]= (p==1) ? "" : monturas[lugar][1]
gamemontura[3]= (p==1) ? false : true
$game_player.monturas(gamemontura)
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
pbWait(5)
$PokemonGlobal.bicycle=false if $PokemonGlobal.bicycle
$game_player.transparent = true
pbmontura_animacion
if gamemontura[2]=="SurfPesca" || gamemontura[2]=="SurfRocas" || gamemontura[2]=="Cascada" || gamemontura[2]=="Remolino"
surfbgm = pbGetMetadata(0,MetadataSurfBGM)
pbCueBGM(surfbgm,0.5) if surfbgm
pbStartSurfing if !$PokemonGlobal.surfing
end
CambiaCharset(p,gamemontura[2])
$game_player.transparent = false
pbWait(5)
break
end
else
Kernel.pbMessage(_INTL("Parece que no puedes usarlo aquí ni ahora."))
end
end
end
if Input.trigger?(Input::B)
pbSEPlay("Choose")
pbFadeOutAndHide(sprites){pbUpdateSpriteHash(sprites)}
break
end
end
end
#================================================================================#
#========================Cambiar la imagen del personaje=========================#
#================================================================================#
def CambiaCharset(val1,val2="nada")
$game_player.setDefaultCharName(nil,$game_player.fullPattern) if val1==1
$game_player.setDefaultCharName("montura_#{val2}_00#{$PokemonGlobal.playerID}",$game_player.fullPattern) if val1==0
end
#================================================================================#
#===============Verifica si es posible usar la montura seleccionada==============#
#================================================================================#
def pbPuedeMontar?(lugar="",listamapas=[],lugar2="")
r=true
#Condicionales basicos
if $game_player.pbHasDependentEvents? ||
(!pbGetMetadata($game_map.map_id,MetadataOutdoor) && !listamapas.include?($game_map.map_id) ) ||
pbGetMetadata($game_map.map_id,MetadataBicycleAlways) ||
pbGetTerrainTag($game_player)==PBTerrain::CaminoRocoso ||
$PokemonGlobal.bicycle==true
r=false
else # Si los condicionales basicos no aplican
if lugar=="SurfPesca" || lugar=="SurfRocas" || lugar=="Cascada" || lugar=="Remolino"
if lugar==lugar2 || !PBTerrain.isSurfable?(Kernel.pbFacingTerrainTag)
r=false unless (lugar!=lugar2 && $PokemonGlobal.surfing)#!$game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
end
elsif lugar=="Buceo"
if $PokemonGlobal.diving
unless PBTerrain.isDeepWater?($MapFactory.getTerrainTag(pbMapaBuceo(1),$game_player.x,$game_player.y))
r=false
end
elsif !PBTerrain.isDeepWater?($game_player.terrain_tag)
r=false
elsif !pbGetMetadata($game_map.map_id,MetadataDiveMap)
r=false
end
elsif $PokemonGlobal.surfing
r=false
elsif $PokemonGlobal.diving
r= false
elsif lugar=="Vuelo" && listamapas.include?($game_map.map_id)
r=false
#else
end
end
return r
end
#================================================================================#
# Si se entra a un mapa "Indoor" que no aparesca en la lista de mapas especiales
# la montura se cancela.
#================================================================================#
Events.onMapSceneChange+=proc{|sender,e|
scene = e[0]
mapChanged = e[1]
return if !scene || !scene.spriteset
$game_player.monturas()
gamemontura=$game_temp.monturas
if !pbGetMetadata($game_map.map_id,MetadataOutdoor) && !gamemontura[4].include?($game_map.map_id)
gamemontura[2]= ""
gamemontura[3]= false
CambiaCharset(1)
$game_player.monturas(gamemontura)
end
}
#================================================================================#
#====================================Scene_Map===================================#
#================================================================================#
class Scene_Map
alias monturas_update update
def update
monturas_update
$game_player.monturas()
gamemonturas=$game_temp.monturas
if gamemonturas[3]
unless pbMapInterpreterRunning?
pbefectoMonturas(gamemonturas[2])
end
end
if gamemonturas[0]>0
unless pbMapInterpreterRunning? || $game_player.moving?
botonr= BOTONES==true ? Input::R : Input::X
botonl= BOTONES==true ? Input::L : Input::Y
if Input.press?(botonr) && ACTIVARLR
pbPkMontura
elsif Input.press?(botonl)
pbPkMonturaKey
end
end
end
end
end
#================================================================================#
#==================Efectos de las monturas en el mapa============================#
#================================================================================#
def pbefectoMonturas(val)
if val=="RompeRocas" || val=="SurfRocas"
unless Input.press?(Input::A) && (Input.press?(Input::UP) || Input.press?(Input::DOWN) || Input.press?(Input::LEFT) || Input.press?(Input::RIGHT) )
CambiaCharset(0,"#{val}")
else
CambiaCharset(0,"#{val}A") if val=="RompeRocas"
n=0
n=1 unless !$game_player.pbFacingEvent || $game_player.pbFacingEvent.name!="Rock"
pbSmashEvent($game_player.pbFacingEvent) unless !$game_player.pbFacingEvent || $game_player.pbFacingEvent.name!="Rock"
pbRockSmashNuevo if n==1
end
elsif val=="Buscador"
unless Input.press?(Input::A)
$game_temp.buscador=0
CambiaCharset(0,"#{val}")
else
CambiaCharset(0,"#{val}A")
pbBuscador
end
elsif val=="SurfPesca"
unless Input.press?(Input::A)
CambiaCharset(0,"#{val}")
else
CambiaCharset(0,"#{val}A")
end
elsif val=="CaminoRocoso"
unless Input.press?(Input::A)
CambiaCharset(0,"#{val}")
else
CambiaCharset(0,"#{val}A")
end
elsif val=="Fuerza"
unless $game_player.pbFacingEvent && $game_player.pbFacingEvent.name=="Boulder"
CambiaCharset(0,"#{val}")
$PokemonMap.strengthUsed = false
else
$PokemonMap.strengthUsed = true
CambiaCharset(0,"#{val}A")
end
elsif val=="Corte"
unless $game_player.pbFacingEvent && $game_player.pbFacingEvent.name=="Tree" && Input.press?(Input::A)
CambiaCharset(0,"#{val}")
else
CambiaCharset(0,"#{val}A")
pbSmashEvent($game_player.pbFacingEvent)
pbCorteLoot
end
#else
end
end
#================================================================================#
#==============================Efecto RompeRocas=================================#
#================================================================================#
def pbRockSmashNuevo
objetos=[PBItems::POTION,PBItems::ANTIDOTE,PBItems::ETHER,PBItems::REPEL]
r=rand(100)
pbEncounter(EncounterTypes::RockSmash) if r<MON_GR_EN
Kernel.pbItemBall(objetos[rand(objetos.length)]) if r>MON_GR_EN && r<MON_GR_EN+MON_GR_OB
end
def pbSmashEvent(event)
return if !event
if event.name=="Tree"; pbSEPlay("Cut",80)
elsif event.name=="Rock"; pbSEPlay("Rock Smash",80)
end
pbMoveRoute(event,[
PBMoveRoute::Wait,2,
PBMoveRoute::TurnLeft,
PBMoveRoute::Wait,2,
PBMoveRoute::TurnRight,
PBMoveRoute::Wait,2,
PBMoveRoute::TurnUp,
PBMoveRoute::Wait,2
])
pbWait(2*2*4)
event.erase
$PokemonMap.addErasedEvent(event.id) if $PokemonMap
end
#================================================================================#
#==============================Efecto Corte======================================#
#================================================================================#
def pbCorteLoot
objetos=[PBItems::POTION,PBItems::ANTIDOTE,PBItems::ETHER,PBItems::REPEL]
r=rand(100)
Kernel.pbItemBall(objetos[rand(objetos.length)]) if r<MON_CR_OB
end
#================================================================================#
#==============================Efecto Busca Objetos==============================#
#================================================================================#
def pbBuscador
event=pbClosestHiddenItem
if event
$game_temp.buscador=0 if !$game_temp.buscador || $game_temp.buscador>50
offsetX=event.x- $game_player.x
offsetY=event.y-$game_player.y
if offsetX.abs<MON_DIST && offsetY.abs<MON_DIST
$scene.spriteset.addUserAnimation(MON_ANIM_1,$game_player.x,$game_player.y,false) if $game_temp.buscador==0
$game_temp.buscador+=1
else
$scene.spriteset.addUserAnimation(MON_ANIM_2,$game_player.x,$game_player.y,true) if $game_temp.buscador==0
$game_temp.buscador+=1
end
end
end
def pbClosestHiddenItem
result = []
playerX=$game_player.x
playerY=$game_player.y
for event in $game_map.events.values
next if event.name!="HiddenItem"
next if (playerX-event.x).abs>=8
next if (playerY-event.y).abs>=6
next if $game_self_switches[[$game_map.map_id,event.id,"A"]]
result.push(event)
end
return nil if result.length==0
ret=nil
retmin=0
for event in result
dist=(playerX-event.x).abs+(playerY-event.y).abs
if !ret || retmin>dist
ret=event
retmin=dist
end
end
return ret
end
#================================================================================#
#==============================Efecto Surfing====================================#
#================================================================================#
def pbStartSurfing
Kernel.pbCancelVehicles
$PokemonEncounters.clearStepCount
$PokemonGlobal.surfing = true
$PokemonTemp.surfJump = $MapFactory.getFacingCoords($game_player.x,$game_player.y,$game_player.direction) if SURFABLEMAPAS==true
Kernel.pbUpdateVehicle
Kernel.pbJumpToward
$PokemonTemp.surfJump = nil if SURFABLEMAPAS==true
Kernel.pbUpdateVehicle
$game_player.check_event_trigger_here([1,2])
end
def pbEndSurf(xOffset,yOffset)
return false if !$PokemonGlobal.surfing
return false if PBTerrain.remolino?(Kernel.pbFacingTerrainTag)
x = $game_player.x
y = $game_player.y
currentTag = $game_map.terrain_tag(x,y)
facingTag = Kernel.pbFacingTerrainTag
if PBTerrain.isSurfable?(currentTag) && !PBTerrain.isSurfable?(facingTag)
$PokemonTemp.surfJump = [x,y] if SURFABLEMAPAS==true
$game_player.transparent = true
if Kernel.pbJumpToward(1,false,true)
pbmontura_animacion
$game_map.autoplayAsCue
$game_player.increase_steps
result = $game_player.check_event_trigger_here([1,2])
Kernel.pbOnStepTaken(result)
$game_player.monturas()
gamemonturas=$game_temp.monturas
gamemonturas[2]=""
gamemonturas[3]=false
$game_player.monturas(gamemonturas)
CambiaCharset(1)
$game_player.transparent = false
end
$PokemonTemp.surfJump = nil if SURFABLEMAPAS==true
return true
end
return false
end
def Kernel.pbSurf
$game_player.monturas()
gamemontura=$game_temp.monturas
Kernel.pbMessage(_INTL("El agua se ve algo profunda desde aquí."))
if gamemontura[0]>MON_SURF
if Kernel.pbConfirmMessage(_INTL("¿Te gustaría usar una Pokémontura marina?"))
$PokemonGlobal.bicycle=false if $PokemonGlobal.bicycle
gamemontura[2]= "SurfPesca"
gamemontura[3]= true
$game_player.monturas(gamemontura)
pbWait(15)
$game_player.transparent = true
pbmontura_animacion
surfbgm = pbGetMetadata(0,MetadataSurfBGM)
pbCueBGM(surfbgm,0.5) if surfbgm
pbStartSurfing
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
pbWait(10)
end
end
end
class Sprite_SurfBase
def initialize(sprite,event,viewport=nil)
@rsprite = sprite
[MENTION=24071]Sprite[/MENTION] = nil
@event = event
@viewport = viewport
@disposed = false
s = BASESURF==true ? "base_surf" : ""
d = BASEDIVE==true ? "base_dive" : ""
@surfbitmap = AnimatedBitmap.new("Graphics/Characters/#{s}")
@divebitmap = AnimatedBitmap.new("Graphics/Characters/#{d}")
@cws = @surfbitmap.width/4
@chs = @surfbitmap.height/4
@cwd = @divebitmap.width/4
@chd = @divebitmap.height/4
update unless !update
end
end
#================================================================================#
#==============================Efecto de Vuelo===================================#
#================================================================================#
def pbVuelo
if VUELOMAPA==true
scene = PokemonRegionMap_Scene.new(-1,false)
screen = PokemonRegionMapScreen.new(scene)
else
scene = PokemonRegionMapScene.new(-1,false)
screen = PokemonRegionMap.new(scene)
end
ret = screen.pbStartFlyScreen
if ret
$PokemonTemp.flydata=ret
pbWait(15)
pbFadeOutIn(99999){
pbanimacion_vuelo if ANIMA_VUELO
$game_temp.player_new_map_id = $PokemonTemp.flydata[0]
$game_temp.player_new_x = $PokemonTemp.flydata[1]
$game_temp.player_new_y = $PokemonTemp.flydata[2]
$game_temp.player_new_direction = 2
Kernel.pbCancelVehicles
$PokemonTemp.flydata = nil
$scene.transfer_player
$game_map.autoplay
$game_map.refresh
}
end
end
#================================================================================#
#============================Animación de vuelo==================================#
#================================================================================#
def pbanimacion_vuelo
anim={}
anim["anim"]=Sprite.new
anim["anim"].z = 99999
anim["anim"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/vuelo00")
anim["anim"].opacity=0
anim["anim2"]=Sprite.new
anim["anim2"].z = 99999
anim["anim2"].bitmap= BitmapCache.load_bitmap("Graphics/Pictures/PokeMonturas/vuelo01")
anim["anim2"].x= -192
anim["anim2"].y= 110
anim["anim2"].src_rect.set(0,0,64,53)
anim["anim2"].zoom_x=3
anim["anim2"].zoom_y=3
15.times do
anim["anim"].mirror = !anim["anim"].mirror
anim["anim"].opacity+=17
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
n=0
loop do
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
anim["anim"].mirror = !anim["anim"].mirror if n==5
n= n==5 ? 0 : n+=1
anim["anim2"].x+=14
anim["anim2"].y+=4
break if anim["anim2"].x>DEFAULTSCREENWIDTH
end
15.times do
anim["anim"].mirror = !anim["anim"].mirror
anim["anim"].opacity-=17
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
pbWait(40)
15.times do
anim["anim"].mirror = !anim["anim"].mirror
anim["anim"].opacity+=17
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
anim["anim2"].src_rect.set(64,0,64,53)
anim["anim2"].y=150
n=0
loop do
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
anim["anim"].mirror = !anim["anim"].mirror if n==5
n= n==5 ? 0 : n+=1
anim["anim2"].x-=14
anim["anim2"].y-=4
break if anim["anim2"].x<-192
end
15.times do
anim["anim"].mirror = !anim["anim"].mirror
anim["anim"].opacity-=17
Graphics.update
Input.update
pbUpdateSpriteHash(anim)
pbWait(2)
end
pbWait(15)
end
#================================================================================#
#==============================Game_Map==========================================#
#================================================================================#
class Game_Map
def playerPassable?(x, y, d, self_event = nil)
puente = PASABLEPUENTE==true ? $PokemonGlobal : $PokemonMap
bit = (1 << (d / 2 - 1)) & 0x0f
for i in [2, 1, 0]
tile_id = data[x, y, i]
next if puente && puente.bridge==0 &&
tile_id && (@terrain_tags[tile_id])==PBTerrain::Bridge
$game_player.monturas()
gamemontura=$game_temp.monturas
if tile_id == nil
return false
elsif gamemontura[2]=="CaminoRocoso" && PBTerrain.caminoRocoso?(@terrain_tags[tile_id])
return true
elsif gamemontura[2]=="Remolino" && PBTerrain.remolino?(@terrain_tags[tile_id])
elsif $PokemonGlobal.surfing && PBTerrain.isPassableWater?(@terrain_tags[tile_id])
return true
elsif $PokemonGlobal.bicycle &&
PBTerrain.onlyWalk?(@terrain_tags[tile_id])
return false
elsif puente && puente.bridge!=0 &&
(@terrain_tags[tile_id])==PBTerrain::Bridge
if @passages[tile_id] & bit != 0 ||
@passages[tile_id] & 0x0f == 0x0f
return false
else
return true
end
elsif @terrain_tags[tile_id]!=PBTerrain::Neutral
if @passages[tile_id] & bit != 0 ||
@passages[tile_id] & 0x0f == 0x0f
return false
elsif @priorities[tile_id] == 0
return true
end
end
end
return true
end
end
#================================================================================#
#==============================Efecto Empuje=====================================#
#================================================================================#
def Kernel.pbStrength
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[2]=="Fuerza"
Kernel.pbMessage(_INTL("La fuerza de esta montura hará posible mover esta roca."))
r=false
else
Kernel.pbMessage(_INTL("Usando una montura se podría mover esta roca."))
r=true
end
return r
end
module InterpreterFieldMixin
def pbPushThisEvent
event = get_character(0)
oldx = event.x
oldy = event.y
return if !event.passableStrict?(event.x,event.y,$game_player.direction)
$scene.spriteset.addUserAnimation(MON_ANIM_3,oldx,oldy,true)
case $game_player.direction
when 2; event.move_down
when 4; event.move_left
when 6; event.move_right
when 8; event.move_up
end
$PokemonMap.addMovedEvent(@event_id) if $PokemonMap
if oldx!=event.x || oldy!=event.y
$game_player.lock
begin
Graphics.update
Input.update
pbUpdateSceneMap
end until !event.moving?
$game_player.unlock
end
end
end
#================================================================================#
#==============================Efecto de Cascada=================================#
#================================================================================#
def Kernel.pbAscendWaterfall(event=nil)
event = $game_player if !event
return if !event
return if event.direction!=8
oldthrough = event.through
oldmovespeed = event.move_speed
terrain = Kernel.pbFacingTerrainTag
return if !PBTerrain.isWaterfall?(terrain)
event.through = true
event.move_speed = 2
loop do
event.move_up
terrain = pbGetTerrainTag(event)
break if !PBTerrain.isWaterfall?(terrain)
end
event.through = oldthrough
event.move_speed = oldmovespeed
end
def Kernel.pbDescendWaterfall(event=nil)
event = $game_player if !event
return if !event
return if event.direction!=2
oldthrough = event.through
oldmovespeed = event.move_speed
terrain = Kernel.pbFacingTerrainTag
return if !PBTerrain.isWaterfall?(terrain)
event.through = true
event.move_speed = 2
loop do
event.move_down
terrain = pbGetTerrainTag(event)
break if !PBTerrain.isWaterfall?(terrain)
end
event.through = oldthrough
event.move_speed = oldmovespeed
end
def Kernel.pbWaterfall
r=false
if $game_temp.cascada==true
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[2]=="Cascada"
if Kernel.pbConfirmMessage(_INTL("¿Te gustaría subir por la cascada?"))
pbAscendWaterfall
r= true
end
else
Kernel.pbMessage(_INTL("Una pared de agua está cayendo con gran fuerza."))
end
$game_temp.cascada=false
end
return r
end
Events.onAction+=proc{|sender,e|
terrain = Kernel.pbFacingTerrainTag
if terrain==PBTerrain::Waterfall
$game_temp.cascada=true
Kernel.pbWaterfall
return
#elsif terrain==PBTerrain::WaterfallCrest
#Kernel.pbMessage(_INTL("Una pared de agua está cayendo con gran fuerza."))
#return
end
}
#================================================================================#
#==============================Efecto de Buceo===================================#
#================================================================================#
Events.onAction+=proc{|sender,e|
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[0]>MON_BUCEO
p=2
if $PokemonGlobal.diving && ($MapFactory.getTerrainTag(pbMapaBuceo(1),$game_player.x,$game_player.y))==PBTerrain::DeepWater
Kernel.pbMessage(_INTL("Se ve una luz filtrandose entre el agua."))
if Kernel.pbConfirmMessage(_INTL("¿Te gustaría usar una Pokémontura marina?"))
p=1
end
elsif $PokemonGlobal.surfing && pbGetTerrainTag($game_player)==PBTerrain::DeepWater
Kernel.pbMessage(_INTL("El agua aquí parece ser más profunda de lo normal."))
if Kernel.pbConfirmMessage(_INTL("¿Te gustaría usar una Pokémontura submarina?"))
p=0
end
end
if p<2
gamemontura[2]= "Buceo"
if p==1 #Emergir
gamemontura[2]= "SurfPesca"
pbBucear(p)
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
else
$game_player.monturas(gamemontura)
$game_player.transparent = true
pbmontura_animacion
CambiaCharset(0,gamemontura[2])
$game_player.transparent = false
pbBucear(p)
end
pbWait(5)
end
end
return
}
def pbMapaBuceo(val)
divemap=pbGetMetadata($game_map.map_id,MetadataDiveMap)
meta = pbLoadMetadata
if val==1
for i in 0...meta.length
if meta[i] && meta[i][MetadataDiveMap] && meta[i][MetadataDiveMap]==$game_map.map_id
divemap = i; break
end
end
end
return divemap
end
def pbBucear(val)
pbFadeOutIn(99999){
divemap=pbMapaBuceo(val)
$game_temp.player_new_map_id = divemap
$game_temp.player_new_x = $game_player.x
$game_temp.player_new_y = $game_player.y
$game_temp.player_new_direction = $game_player.direction
Kernel.pbCancelVehicles
$PokemonGlobal.diving = true if val==0
$PokemonGlobal.surfing = true if val==1
Kernel.pbUpdateVehicle
$scene.transfer_player(false)
surfbgm = pbGetMetadata(0,MetadataSurfBGM) if val==1
(surfbgm) ? pbBGMPlay(surfbgm) : $game_map.autoplayAsCue if val==1
$game_map.autoplay
$game_map.refresh
}
end
def Kernel.pbDive
return
end
def Kernel.pbSurfacing
return
end
#================================================================================#
#==============================Efecto de TrepaRocas===================================#
#================================================================================#
def Kernel.pbEfectoTreparocas
event = $game_player
return if !event
oldthrough = event.through
oldmovespeed = event.move_speed
event.through = true
event.move_speed += 2
terrainInicio = Kernel.pbFacingTerrainTag
n=0
loop do
case event.direction
when 2; event.move_down
when 4
event.move_left if n==0
n=2 if $game_map.passable?($game_player.x-1,$game_player.y,$game_player.direction,$game_player)
event.move_left if $game_map.passable?($game_player.x-1,$game_player.y,$game_player.direction,$game_player)
event.move_upper_left if n==1 && terrainInicio==PBTerrain::TreparocasA
event.move_lower_left if n==1 && terrainInicio==PBTerrain::TreparocasB
when 6
event.move_right if n==0
n=2 if $game_map.passable?($game_player.x+1,$game_player.y,$game_player.direction,$game_player)
event.move_right if $game_map.passable?($game_player.x+1,$game_player.y,$game_player.direction,$game_player)
event.move_upper_right if n==1 && terrainInicio==PBTerrain::TreparocasA
event.move_lower_right if n==1 && terrainInicio==PBTerrain::TreparocasB
when 8; event.move_up
end
pbWait(10)
$scene.spriteset.addUserAnimation(MON_TREPAROCAS,$game_player.x,$game_player.y,false) if n!=2
pbWait(MON_TREPAROCAS_VEL)
n=1
break if $game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
end
event.through = oldthrough
event.move_speed = oldmovespeed
end
def Kernel.pbTrepaRocas(val)
r=false
$game_player.monturas()
gamemontura=$game_temp.monturas
Kernel.pbMessage(_INTL("Parece ser una pared rocosa."))
if gamemontura[2]=="TrepaRocas"
m= val==PBTerrain::TreparocasA ? "subir" : "bajar"
m="subir" if $game_player.direction==8
m="bajar" if $game_player.direction==2
if Kernel.pbConfirmMessage(_INTL("¿Te gustaría #{m} por la pared rocosa?"))
Kernel.pbEfectoTreparocas
r= true
end
return r
end
end
Events.onAction+=proc{|sender,e|
m=Kernel.pbFacingTerrainTag
if m==PBTerrain::TreparocasA || m==PBTerrain::TreparocasB
Kernel.pbTrepaRocas(m)
return
end
}
#================================================================================#
#==============================Efecto de Remolino================================#
#================================================================================#
Events.onAction+=proc{|sender,e|
if Kernel.pbFacingTerrainTag==PBTerrain::Remolino && pbGetTerrainTag($game_player)!=PBTerrain::Remolino
Kernel.pbMessage(_INTL("Parece ser un remolino de agua."))
return
end
}
#================================================================================#
#=========================Condicional para la bicicleta==========================#
#================================================================================#
def pbBikeCheck
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[3]==true
Kernel.pbMessage(_INTL("No puede usarse al estar sobre una pokémontura."))
return false
end
if $PokemonGlobal.surfing ||
(!$PokemonGlobal.bicycle && PBTerrain.onlyWalk?(pbGetTerrainTag))
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
if $game_player.pbHasDependentEvents?
Kernel.pbMessage(_INTL("It can't be used when you have someone with you."))
return false
end
if $PokemonGlobal.bicycle
if pbGetMetadata($game_map.map_id,MetadataBicycleAlways)
Kernel.pbMessage(_INTL("You can't dismount your Bike here."))
return false
end
return true
else
val=pbGetMetadata($game_map.map_id,MetadataBicycle)
val=pbGetMetadata($game_map.map_id,MetadataOutdoor) if val==nil
if !val
Kernel.pbMessage(_INTL("Can't use that here."))
return false
end
return true
end
end
#================================================================================#
#========================Condicional para las cañas de pescar====================#
#================================================================================#
def pbPuedePescar
terrain=Kernel.pbFacingTerrainTag
notCliff=$game_map.passable?($game_player.x,$game_player.y,$game_player.direction,$game_player)
$game_player.monturas()
gamemontura=$game_temp.monturas
if (PBTerrain.isWater?(terrain) && !$PokemonGlobal.surfing && notCliff) ||
(PBTerrain.isWater?(terrain) && $PokemonGlobal.surfing)
if gamemontura[3]==true
if gamemontura[2]=="SurfPesca" && $PokemonGlobal.surfing
n=2
else
Kernel.pbMessage(_INTL("No puede ser usada con esta montura."))
n=0
end
else
n=2
end
else
Kernel.pbMessage(_INTL("No se puede usar aquí."))
n=0
end
return n
end
ItemHandlers::UseFromBag.add(:OLDROD,proc{|item|
n=pbPuedePescar
next n
})
ItemHandlers::UseFromBag.copy(:OLDROD,:GOODROD,:SUPERROD)
ItemHandlers::UseInField.add(:OLDROD,proc{|item|
n=pbPuedePescar
next n if n==0
encounter=$PokemonEncounters.hasEncounter?(EncounterTypes::OldRod)
if pbFishing(encounter,1)
pbEncounter(EncounterTypes::OldRod)
end
next 1
})
ItemHandlers::UseInField.add(:GOODROD,proc{|item|
n=pbPuedePescar
next n if n==0
encounter=$PokemonEncounters.hasEncounter?(EncounterTypes::GoodRod)
if pbFishing(encounter,2)
pbEncounter(EncounterTypes::GoodRod)
end
next 1
})
ItemHandlers::UseInField.add(:SUPERROD,proc{|item|
n=pbPuedePescar
next n if n==0
encounter=$PokemonEncounters.hasEncounter?(EncounterTypes::SuperRod)
if pbFishing(encounter,3)
pbEncounter(EncounterTypes::SuperRod)
end
next 1
})
def pbFishingBegin
$PokemonGlobal.fishing = true
patternb = 2*$game_player.direction - 1
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[3]==true
charset= "montura_SurfPescaB_00#{$PokemonGlobal.playerID}"
else
meta = pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
num = 6
if meta && meta[num] && meta[num]!=""
charset = pbGetPlayerCharset(meta,num)
end
end
4.times do |pattern|
$game_player.setDefaultCharName(charset,patternb-pattern,true) if PESCAMOV==true
$game_player.setDefaultCharName(charset,patternb-pattern) if PESCAMOV==false
2.times do
Graphics.update
Input.update
pbUpdateSceneMap
end
end
end
def pbFishingEnd
patternb = 2*($game_player.direction - 2)
$game_player.monturas()
gamemontura=$game_temp.monturas
if gamemontura[3]==true
charset= "montura_SurfPescaB_00#{$PokemonGlobal.playerID}"
else
meta = pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
num = 6
if meta && meta[num] && meta[num]!=""
charset = pbGetPlayerCharset(meta,num)
end
end
4.times do |pattern|
$game_player.setDefaultCharName(charset,patternb+pattern,true) if PESCAMOV==true
$game_player.setDefaultCharName(charset,patternb+pattern) if PESCAMOV==false
2.times do
Graphics.update
Input.update
pbUpdateSceneMap
end
end
$PokemonGlobal.fishing = false
end
def pbFishing(hasencounter,rodtype=1)
speedup = ($Trainer.party[0] &&
(isConst?($Trainer.party[0].ability,PBAbilities,:STICKYHOLD) ||
isConst?($Trainer.party[0].ability,PBAbilities,:SUCTIONCUPS)))
bitechance = 20+(25*rodtype) # 45, 70, 95
bitechance *= 1.5 if speedup
hookchance = 100
oldpattern = $game_player.fullPattern
pbFishingBegin
msgwindow = Kernel.pbCreateMessageWindow
ret = false
loop do
time = 5+rand(6)
time = [time,5+rand(6)].min if speedup
message = ""
time.times do
message += ". "
end
if pbWaitMessage(msgwindow,time)
pbFishingEnd
$game_player.setDefaultCharName(nil,oldpattern)
Kernel.pbMessageDisplay(msgwindow,_INTL("No estan picando..."))
break
end
if hasencounter && rand(100)<bitechance
$scene.spriteset.addUserAnimation(EXCLAMATION_ANIMATION_ID,$game_player.x,$game_player.y,true)
frames = 20+rand(21)
if !pbWaitForInput(msgwindow,message+_INTL("\r\n¡Un pokémon ha picado el anzuelo!"),frames)
pbFishingEnd
$game_player.setDefaultCharName(nil,oldpattern)
Kernel.pbMessageDisplay(msgwindow,_INTL("Se ha escapado..."))
break
end
if FISHINGAUTOHOOK || rand(100)<hookchance
pbFishingEnd
Kernel.pbMessageDisplay(msgwindow,_INTL("¡Un pokémon ha picado el anzuelo!")) if !FISHINGAUTOHOOK
$game_player.setDefaultCharName(nil,oldpattern)
ret = true
break
end
# bitechance+=15
# hookchance+=15
else
pbFishingEnd
$game_player.setDefaultCharName(nil,oldpattern)
Kernel.pbMessageDisplay(msgwindow,_INTL("No estan picando..."))
break
end
end
Kernel.pbDisposeMessageWindow(msgwindow)
return ret
end
def pbWaitForInput(msgwindow,message,frames)
Kernel.pbMessageDisplay(msgwindow,message,false)
twitchframe = 0
if FISHINGAUTOHOOK
loop do
Graphics.update
Input.update
pbUpdateSceneMap
twitchframe = (twitchframe+1)%32
if twitchframe<16 && (twitchframe&4)==0
$game_player.pattern = 1
else
$game_player.pattern = 0
end
if Input.trigger?(Input::C) || Input.trigger?(Input::B)
$game_player.pattern = 0
return true
end
end
else
frames.times do
Graphics.update
Input.update
pbUpdateSceneMap
twitchframe = (twitchframe+1)%32
if twitchframe<16 && (twitchframe&4)==0
$game_player.pattern = 1
else
$game_player.pattern = 0
end
if Input.trigger?(Input::C) || Input.trigger?(Input::B)
$game_player.pattern = 0
return true
end
end
end
return false
end
def pbWaitMessage(msgwindow,time)
message = ""
(time+1).times do |i|
message += ". " if i>0
Kernel.pbMessageDisplay(msgwindow,message,false)
16.times do
Graphics.update
Input.update
pbUpdateSceneMap
if Input.trigger?(Input::C) || Input.trigger?(Input::B)
return true
end
end
end
return false
end
#================================================================================#
#=======================Busca Obejots(objeto clave)==============================#
#================================================================================#
ItemHandlers::UseFromBag.add(:ITEMFINDER,proc{|item|
$game_player.monturas()
gamemontura=$game_temp.monturas
next 0 if gamemontura[3]==true
next 2
})
ItemHandlers::UseFromBag.copy(:ITEMFINDER,:DOWSINGMCHN,:DOWSINGMACHINE)
#================================================================================#
#=============================UpdateVehicle======================================#
#================================================================================#
def Kernel.pbUpdateVehicle
meta=pbGetMetadata(0,MetadataPlayerA+$PokemonGlobal.playerID)
$game_player.monturas()
gamemontura=$game_temp.monturas
if meta
if $PokemonGlobal.diving
$game_player.character_name="montura_#{gamemontura[2]}_00#{$PokemonGlobal.playerID}"
elsif $PokemonGlobal.surfing
$game_player.character_name="montura_#{gamemontura[2]}_00#{$PokemonGlobal.playerID}"
elsif $PokemonGlobal.bicycle
$game_player.character_name=pbGetPlayerCharset(meta,2) # Bicycle graphic
else
$game_player.character_name=pbGetPlayerCharset(meta,1) # Regular graphic
end
end
end
#===============================================================================
# Huellas en la arena (Usando el script de KleinStudio)
# Carga la imagen de huellas dependiendo de la montura que se use.
# Si el archivo no existe, se usarán las huellas al caminar.
#
#===============================================================================
class Footprint
def initialize(event,position)
return if !$scene || !$scene.is_a?(Scene_Map) ||
event!=$game_player && (event.character_name=="" ||
event.name.include?("/nofoot/"))
return if event!=$game_player && pbEventCommentInput(event,0,"NoFoot")
$game_player.monturas()
gamemontura=$game_temp.monturas
return if event==$game_player && SINHUELLAS.include?(gamemontura[2])
character_sprites=$scene.spriteset.character_sprites
viewport=$scene.spriteset.viewportMonturas
footsprites=$scene.spriteset.footsprites
nid=getNewId
fev=$game_map.events[nid]
rpgEvent=RPG::Event.new(position[0],position[1])
rpgEvent.id=nid
fev=Game_Event.new($game_map.map_id,rpgEvent,$game_map)
eventsprite=Sprite_Character.new(viewport,fev)
character_sprites.push(eventsprite)
footsprites.push(Footsprite.new(eventsprite,fev,viewport,
$game_map,position[2],nid,character_sprites,(event==$game_player)))
end
end
class Footsprite
def initialize(sprite,event,viewport,map,direction,nid,chardata,player)
$game_player.monturas()
gamemontura=$game_temp.monturas
@rsprite=sprite
[MENTION=24071]Sprite[/MENTION]=Sprite.new(viewport)
if player && $PokemonGlobal.bicycle
[MENTION=24071]Sprite[/MENTION].bitmap=BitmapCache.load_bitmap("Graphics/Pictures/footsetbike")
elsif player && gamemontura[3]==true
[MENTION=24071]Sprite[/MENTION].bitmap= pbResolveBitmap(bitmapFileName=sprintf("Graphics/Pictures/footset#{gamemontura[2]}")) ? BitmapCache.load_bitmap("Graphics/Pictures/footset#{gamemontura[2]}") : BitmapCache.load_bitmap("Graphics/Pictures/footset")
else
[MENTION=24071]Sprite[/MENTION].bitmap=BitmapCache.load_bitmap("Graphics/Pictures/footset")
end
@realwidth [MENTION=24071]Sprite[/MENTION].bitmap.width/4
[MENTION=24071]Sprite[/MENTION].src_rect.width=@realwidth
@opacity=FOOTOPACITY
setFootset(direction)
@event=event
@disposed=false
@map=map
@eventid=nid
@viewport=viewport
[MENTION=41652]Char[/MENTION]data=chardata
update
end
end
class Spriteset_Map
def viewportMonturas; return @@viewport1; end
end
#==============================================================================#