KyoTeleTrans XP and VX
Version: 1.3
By: Kyonides
alias kyonides-arkanthos, shadowball
Introduction
Teleport Menu, shows a destination menu, a world map, city (names) sprites, a pointer among other things.
Features
Screenshots
Demo
Coming Soon...
Script
Instructions
Copy and paste the script above Main. Change the settings in module KyoVocab if needed. Create arrays like in the examples included in the Instructions section.
FAQ
You tell me...
Compatibility
You tell me...
Author's Notes
Version 1.3
Included a common menu that could be invisible, two available options for the world map (a small and a large one) depending on current MenuVisible constant assigned value, a pointer (for available and disabled destinations), some city and city name sprites. Same 4 functions calls included. Changed the scene class script and created 3 new custom Sprite classes. Modified 2 default classes script methods. Bug fixes.
If no city sprite filename provided (the respective value is equal to nil), the script may select random one.
In the future the world map graphic may change depending on the region you're currently looking at, i.e. "The Lowlands" or "The Highlands".
Version 1.2
Included a common menu and a world map, some city and city name sprites but no pointer. 4 functions calls included. Bug fixes.
Version 1.1
Included a common menu and a world map, no pointer, city and city name sprites. 3 functions calls included. Bug fixes.
Version 1.0
It just included a common menu and no world map, no pointer, city and city name sprites. I only included one or two functions calls.
Terms and Conditions
Not intended for Commercial Use.
Include my name in your projects if you'll going to include it there.
Only I, shadowball alias Kyonides, kyonides-arkanthos can post this script on any forum.
Version: 1.3
By: Kyonides
alias kyonides-arkanthos, shadowball
Introduction
Teleport Menu, shows a destination menu, a world map, city (names) sprites, a pointer among other things.
Features
- Add and remove teleport destinations at will
- Destinations may be disabled and reenabled at will
- Make the destinations menu (dis-)appear (change a constant assigned value first)
Screenshots
XP Version
VX Version


VX Version


Demo
Coming Soon...
Script
Code:
Â
##==========================================================
##
## Â KyoTeleTrans XP v 1.3.0 Â (20090328 - 0402)
##  by Kyonides  alias kyonides-arkanthos, shadowball
##
##==========================================================
=begin
 Instructions:
Â
  Copy and paste the script above Main.
  To open the menu window press A or SHIFT button once.
 Â
  To make the destination menu visible:
 Â
  MenuVisible = true
 Â
  To make the destination menu disappear:
 Â
  MenuVisible = false
 Â
  To create a destination entry for your party a new array is needed
 Â
  Campment = ['Campment', DE01, 1, 7, 13, 0, 0, 40, 160]
 Â
  Array Values Description:
 Â
  Place = [
   Name, Description, MapID, MapX, MapY, Character direction on map,
   City Sprite, CityX, CityY
  ]
 Â
  I personally encourage the use of Constants whenever it's possible,
  except for number values.
Â
  You don't know where to get the MapX and MapY coordinates?
  Take a look at the bottom of the RPG Maker screen.
Â
  #ID   Name   Dimensions  Coord. X,Y
  001: Campment  (21x18)   010,014
Â
 Script Calls
Â
  You can also call the script by entering the following line:
 Â
  $scene = KyoTeleTrans.new
Â
  Adding New Places to the $places variable
Â
   KyoVocab.new_place =
   KyoVocab::NameOfDestination
Â
  Forgetting previously saved Destinations
Â
   KyoVocab.forget_place =
   KyoVocab::NameOfDestination
Â
  The path is blocked, you can go there...
Â
   KyoVocab.forbidden = 'Name of Location'
  Â
  The path is now open, you may travel to X destination...
 Â
   KyoVocab.available = 'Name of Location'
Â
  You may use Constants for the names of all destinations, i.e.
 Â
  Loc01 = 'My Workplace'
Â
=end
module KyoVocab
 # Destination Menu Visible or Invisible
 MenuVisible = true
 # Mapa Sprite (Small One): Width 372, Height 304 px
 MAP = 'mini_mapaxp' if MenuVisible
 # Map Sprite (Large One): Width 640, Height 304 px
 MAP = 'gran_mapaxp' if MenuVisible == false
 # Constant for A Simple Question
 QUESTION = 'Where do you want to go now?'
 # Lands or Countries
 Land01 = 'Kaythege'
 # Places Constants
 Loc01 = 'Campamento'
 Loc02 = 'Cementerio'
 Loc03 = 'Montaña'
 # Sprites
 Pic01 = 'city01'
 Pic02 = 'city02'
 Pic03 = 'city03'
 Pic04 = 'city04'
 Pic05 = 'city05'
 Pic06 = 'city06'
 Pic07 = 'city01'
 Pic08 = 'mountain'
 # Descriptions (Strings)
 DE01 = 'Great community of 4 tents only...'
 DE02 = 'Last home for many losers like...'
 DE03 = 'One of the most dangerous cliffs...'
 # Available Places
 Campment = [Loc01, DE01, 1, 7, 13, 0, Pic01,  60, 168]
 Graveyard = [Loc02, DE02, 2, 9, 17, 0, Pic02,  88,  88]
 Mountain  = [Loc03, DE03, 3, 8,  5, 0, Pic08, 160, 140]
 NoPlace  = ['No Destinations']
 $places = [Graveyard, Montain]
 $forbidden = [Loc01]
 # Other Constants
 X, Y, Pointer, Error = 28, 16, 'sword', 'wrong'
 # Save new destination if not included already
 def self.new_place=(place)
  $places.push place if !$places.include?(place)
 end
 # Forget destination if already included
 def self.forget_place=(place)
  $places.delete place if $places.include?(place)
 end
 # Cannot travel to x destination if forbidden
 def self.forbidden=(place)
  $forbidden.push place if !$forbidden.include?(place)
 end
 # Cannot now travel to x destination, restriction lifted / waived
 def self.available=(place)
  $forbidden.delete place if $forbidden.include?(place)
 end
end
# Pointer Sprite Class
class Sprite_KyoArrow < Sprite
 def initialize(viewport)
  @viewport = viewport
  super(@viewport)
  self.x, self.y, self.z = x+8, y-16, 1000
 end
Â
 def show_arrow(x,y) # Show Pointer if player can travel
  self.bitmap = RPG::Cache.picture(KyoVocab::Sword)
  self.x, self.y = x+8, y-16
  return
 end
Â
 def show_cross(x,y) # Show error mark if forbidden
  self.bitmap = RPG::Cache.picture(KyoVocab::Error)
  self.x, self.y = x-4, y-8
  return
 end
end
# City Sprite Class
class Sprite_KyoCity < Sprite
 def initialize(viewport,picture,index,x,y,ox=0,oy=0)
  @viewport = viewport
  @viewport.z = 2500
  super(@viewport)
  # Use instance variables instead of global ones, create arrey
  @index, @places, @forbidden, @disabled = index, $places, $forbidden, []
  self.bitmap = RPG::Cache.picture(picture)
  self.x, self.y = x, y
  self.ox, self.oy = ox, oy
  self.zoom_x, self.zoom_y = 0.45, 0.45
  refresh
 end
Â
 def dispose
  self.bitmap.dispose
  super
 end
Â
 def disabled?(index)
  if @disabled.include?(index)
   return true
  else
   return false
  end
 end
Â
 def refresh
  # If a location is forbidden, push its value into
  # disabled locations array
  if @forbidden.include?(@places[@index][0])
   @disabled.push @index if !@disabled.include?(@index)
   self.opacity = 128
  else
   self.opacity = 255
  end
 end
end
# City Name Sprite Class (shown on destination map)
class Sprite_KyoCityName < Sprite
 def initialize(viewport, city, x, y, index)
  super(viewport)
  @city, @index, @disabled = city, index, []
  # Use instance variables instead of global ones
  @places, @forbidden = $places, $forbidden
  self.bitmap = Bitmap.new(92, 44)
  self.bitmap.font.name = 'Arial'
  self.bitmap.font.size = 16
  self.x, self.y, self.z = x, y, 200
  update
 end
Â
 def dispose
  self.bitmap.dispose
  super
 end
Â
 def disabled?(index)
  if @disabled.include?(index)
   return true
  else
   return false
  end
 end
Â
 def update
  super
  self.visible = true
  self.bitmap.font.bold = true
  # If a location is forbidden, push its value into
  # disabled locations array
  if @forbidden.include?(@places[@index][0])
   @disabled.push @index if !@disabled.include?(@index)
   self.bitmap.font.color.set(255,255,255,128)
  else
   self.bitmap.font.color.set(255,255,255,255)
  end
  self.bitmap.draw_text(self.bitmap.rect, @city, 1)
 end
end
# Window_Help Class Replacement
class Window_KyoHelp < Window_Base
 def initialize(x=180, y=416, w=460) # Default Values
  super(x, y, w, 64) # (X, Y, Width values required)
  self.contents = Bitmap.new(width - 32, height - 32)
 end
Â
 def set_text(text, align=0, color=0)
  if text != @text or align != @align
   self.contents.clear
   self.contents.font.color = normal_color if color == 0
   self.contents.font.color = system_color if color == 1
   self.contents.draw_text(0, 0, self.width - 40, 32, text, align)
   @text = text
   @align = align
   @actor = nil
  end
  self.visible = true
 end
end
Â
class Window_KyoTeleTrans < Window_Selectable
 include KyoVocab
 def initialize(x=0, y=64)
  super(x, y, 180, 352) #(0, 128, 180, 352)
  @column_max = 1
  # Use instance variables instead of global ones, create array
  @places, @forbidden, @disabled = $places, $forbidden, []
  # Make window disappear if MenuVisible value is false
  self.opacity, self.back_opacity = 0, 0 if MenuVisible == false
  refresh
  self.index = 0
 end
Â
 def all_places # get contents of places array
  return @places
 end
Â
 def place # get all contents of a single destination array
  return @places[self.index]
 end
Â
 def place_name(index) # get destination name
  return @places[index][0]
 end
Â
 def description # get destination description
  return @places[self.index][1]
 end
Â
 def map_id(index) # get new MapID
  return @places[index][2]
 end
Â
 def map_x(index) # get new map X coordinate
  return @places[index][3]
 end
Â
 def map_y(index) # get new map Y coordinate
  return @places[index][4]
 end
Â
 def char_dir(index) # get character sprite direction
  return @places[index][5]
 end
Â
 def sprite(index) # get city sprite name
  return @places[index][6]
 end
Â
 def city_x(index) # get city X coordinate on dest. map
  return @places[index][7]
 end
Â
 def city_y(index) # get city Y coordinate on dest. map
  return @places[index][8]
 end
Â
 def disabled?(index) # check forbidden destinations array
  if @disabled.include?(index)
   return true
  else
   return false
  end
 end
Â
 def refresh
  if self.contents != nil
   self.contents.dispose
   self.contents = nil
  end
  # If no place found, create temporary array
  @item_max = NoPlace.size if @places.empty?
  # Get places array values size if it's not empty
  @item_max = @places.size if !@places.empty?
  if @item_max > 0
   self.contents = Bitmap.new(width - 32, row_max * 32)
   for i in 0...@item_max
    draw_place(i)
   end
  else
   self.contents.draw_text(4, 0, 212, 32, NoHay[0], 0)
  end
 end
Â
 def draw_place(index)
  x = 4 + index % 1 * (288 + 32)
  y = index * 32
  # Destination Travel Permit Check
  if @forbidden.include?(place_name(index))
   @disabled.push index if !@disabled.include?(index)
   self.contents.font.color = disabled_color
  elsif @places.empty? and MenuVisible
   self.contents.font.color = normal_color
  end
  if !@places.empty? and MenuVisible
   self.contents.draw_text(4, y, 212, 32, place_name(index), 0)
  elsif @places.empty? and MenuVisible
   self.contents.font.color = disabled_color
   self.contents.draw_text(4, y, 212, 32, NoHay[0], 0)
  elsif MenuVisible == false
   self.contents.font.color.alpha = 0
  end
 end
 # Modified Parent Class Method - Pointer position and visibility
 def update_cursor_rect
  if @index < 0 or MenuVisible == false # If MenuVisible is false
   self.cursor_rect.empty # Menu cursor is invisible
   return
  end
  row = @index / @column_max
  if row < self.top_row
   self.top_row = row
  end
  if row > self.top_row + (self.page_row_max - 1)
   self.top_row = row - (self.page_row_max - 1)
  end
  cursor_width = self.width / @column_max - 32
  x = @index % @column_max * (cursor_width + 32)
  y = @index / @column_max * 32 - self.oy
  self.cursor_rect.set(x, y, cursor_width, 32)
 end
Â
 def update_help # Update Current Destination Description
  @help_window.set_text(self.place == nil ? "" : description)
 end
end
Â
# if =begin and =end are commented out you have the script calls
# for adding a new destination to the list may look like in the
# examples on the Instructions section above.
# Â KyoVocab.new_place = Campment
# If not commented out, you may call a script function like this:
# Â new_place = Campment
Â
#=begin
class Interpreter; Â include KyoVocab; Â end
#=end
class KyoTeleTrans
 include KyoVocab
 def initialize
  @kyon_active_teletransport = false
 end
Â
 def main
  #@spriteset = Spriteset_Map.new
  @map = Sprite.new
  @map.bitmap = RPG::Cache.picture(MAP)
  @map.x, @map.y = 180, 64 if MenuVisible
  @map.x, @map.y =  0, 64 if MenuVisible == false
  # Show Country Name - To be improved in future releases
  @country_window = Window_KyoHelp.new(0,416,180)
  @country_window.set_text(Land01,1,1)
  @question_window = Window_Help.new
  @question_window.set_text(QUESTION,1)
  @help_window = Window_KyoHelp.new
  # Available Destinations Menu Window
  @teletrans_window = Window_KyoTeleTrans.new
  # Link TeleTrans Window to Window_Help Window
  @teletrans_window.help_window = @help_window
  create_places_sprites
  Graphics.transition(60, "Graphics/Transitions/015-Diamond01")
  Graphics.transition
  loop do
   Graphics.update
   Input.update
   update
   if $scene != self;  break;  end
  end
  Graphics.freeze
  dispose_places_sprites
  @country_window.dispose
  @question_window.dispose
  @help_window.dispose
  @teletrans_window.dispose
  @map.dispose
  unless @kyon_active_teletransport
   Graphics.transition(60, "Graphics/Transitions/015-Diamond01")
  else
   Graphics.transition(60, "Graphics/Transitions/006-Stripe02")
  end
  #@spriteset.dispose
 end
Â
 def create_places_sprites # Create City and City Name Sprites
  @places_sprites, @places_names = [], []
  # Map, Cursor and Places Viewport if menu is visible
  @view = Viewport.new(180, 64, 372, 320) if MenuVisible
  # Map, Cursor and Places Viewport if menu is invisible
  @view = Viewport.new(0, 64, 640, 320)  if MenuVisible == false
  # Default Pointer location on Destination Map
  x = @teletrans_window.city_x(0)
  y = @teletrans_window.city_y(0)
  @arrow = Sprite_KyoArrow.new(@view)
  @arrow.show_arrow(x,y)
  for i in 0...@teletrans_window.all_places.size
   x = @teletrans_window.city_x(i)
   y = @teletrans_window.city_y(i)
   city_name = @teletrans_window.place_name(i) # Get city name
   @sprite = @teletrans_window.sprite(i)  # Get its sprite filename
   # If Sprite name is nil, randomly select a custom sprite filename
   random_city_picture(@teletrans_window.sprite(i)) if @sprite == nil
   # Sprites de Ciudades y Otros Lugares
   @places_sprites.push(Sprite_KyoCity.new(@view, @sprite, i, x, y))
   # Leyendas de Nombres de Ciudades y Otros Lugares
   name_sprite = Sprite_KyoCityName.new(@view, city_name, x-X, y+Y, i)
   @places_names.push(name_sprite)
  end
 end
 # Dispose City, City name and Pointer Sprites
 def dispose_places_sprites
  (@places_sprites+@places_names).each {|sprite| sprite.dispose}
  @arrow.dispose
 end
 # If Sprite name is nil, randomly select a custom sprite filename
 def random_city_picture(sprite=nil)
  case rand(7) # Random Value Assignment
  when 0,1; @sprite = 'city01'
  when 2;  @sprite = 'city02'
  when 3;  @sprite = 'city03'
  when 4;  @sprite = 'city04'
  when 5;  @sprite = 'city05'
  when 6;  @sprite = 'city06'
  when 7;  @sprite = 'city07'
  end
 end
Â
 def update
  @arrow.update
  @country_window.update
  @question_window.update
  @help_window.update
  @teletrans_window.update
  @index = @teletrans_window.index
  if @teletrans_window.active;  update_places;  return;  end
 end
Â
 def update_places
  update_arrow
  if Input.trigger?(Input::B)
   $game_system.se_play($data_system.cancel_se)
   @kyon_active_teletransport = false
   $scene = Scene_Map.new
   return
  end
  if Input.trigger?(Input::C)
   if $places.size == 0 or @teletrans_window.disabled?(@index)
    $game_system.se_play($data_system.buzzer_se)
    return
   end
   $game_system.se_play($data_system.decision_se)
   # Interruptor para cambiar Efecto de Transición
   @kyon_active_teletransport = true
   # Procesar teletransportación
   $game_temp.player_transferring = true
   $game_temp.player_new_map_id = @teletrans_window.map_id(@index)
   $game_temp.player_new_x = @teletrans_window.map_x(@index)
   $game_temp.player_new_y = @teletrans_window.map_y(@index)
   $game_temp.player_new_direction = @teletrans_window.char_dir(@index)
   Graphics.freeze
   $game_temp.transition_processing = true
   $scene = Scene_Map.new
   #$game_temp.transition_name = "015-Diamond01"
   return
  end
 end
 # Change pointer if next location is available or grayed out
 def update_arrow
  if @index != @i
   if @teletrans_window.disabled?(@index)
    @arrow.show_cross(@teletrans_window.city_x(@index),
      @teletrans_window.city_y(@index))
   else
    @arrow.show_arrow(@teletrans_window.city_x(@index),
      @teletrans_window.city_y(@index))
   end
   @i = @index
  end
 end
end
Â
class Scene_Map
 alias kyon_sm_up update
 def update
  # If player press A or SHIFT button, call script
  if Input.trigger?(Input::A) or Input.trigger?(Input::Z)
   $game_system.se_play($data_system.decision_se)
   $scene = KyoTeleTrans.new # Go to Dest. Map and Menu Scene
   return
  end
  kyon_sm_up
 end
end
Â
class Scene_Save Â
 alias kyon_write_save_data write_save_data
 def write_save_data(file)
  kyon_write_save_data(file)
  # Saved non-standard global variables
  Marshal.dump($places, file)
  Marshal.dump($forbidden, file)
 end
end
Â
class Scene_Load
 alias kyon_read_save_data read_save_data
 def read_save_data(file)
  kyon_read_save_data(file)
  # Load non-standard global variables
  $places   = Marshal.load(file)
  $forbidden = Marshal.load(file)
 end
end
Instructions
Copy and paste the script above Main. Change the settings in module KyoVocab if needed. Create arrays like in the examples included in the Instructions section.
FAQ
You tell me...
Compatibility
You tell me...
Author's Notes
Version 1.3
Included a common menu that could be invisible, two available options for the world map (a small and a large one) depending on current MenuVisible constant assigned value, a pointer (for available and disabled destinations), some city and city name sprites. Same 4 functions calls included. Changed the scene class script and created 3 new custom Sprite classes. Modified 2 default classes script methods. Bug fixes.
If no city sprite filename provided (the respective value is equal to nil), the script may select random one.
In the future the world map graphic may change depending on the region you're currently looking at, i.e. "The Lowlands" or "The Highlands".
Version 1.2
Included a common menu and a world map, some city and city name sprites but no pointer. 4 functions calls included. Bug fixes.
Version 1.1
Included a common menu and a world map, no pointer, city and city name sprites. 3 functions calls included. Bug fixes.
Version 1.0
It just included a common menu and no world map, no pointer, city and city name sprites. I only included one or two functions calls.
Terms and Conditions
Not intended for Commercial Use.
Include my name in your projects if you'll going to include it there.
Only I, shadowball alias Kyonides, kyonides-arkanthos can post this script on any forum.