Alright essentially the script works that if you explore a map with a * in the name, it uncovers it in the list in Scene_WorldMap and you can now teleport to its location by selecting it in the list. The location is determined by an event on the key maps (maps with a * in the name) called WorldMap which should just be a blank event with nothing on it but make sure its named WorldMap. If its not there, the teleport will never be uncovered.
Code:
CODE
#-------------------------------#
# FF10 World Map System #
#-------------------------------#
# Written by: Prexus #
# Special Thanks: Fuso #
# www.prexus.rmxponline.com #
#-------------------------------#
# Instructions: #
#-------------------------------#
# Step 1: #
# Make sure to put an image #
# called Map in the picture's #
# folder. #
#-------------------------------#
# Step 2: #
# To make a map part of the key #
# maps list (ones you can go #
# to from the menu), put a * in #
# the map name. Also be sure to #
# put an event called WorldMap #
# on every map with a * in the #
# name. This is where you will #
# appear after teleporting. #
#-------------------------------#
class Game_Map
# Defines map variables for maps to teleport to.
#Added:
attr_accessor :map_infos
attr_accessor :teleport_enabled
attr_accessor :teleport_name
attr_accessor :teleport_map_id
attr_accessor :teleport_x
attr_accessor :teleport_y
# End Added.
# Sets up all the 'key' maps that you can teleport to based on the
# * in the map name.
def initialize
@map_id = 0
# Added:
@teleport_enabled = []
@teleport_name = []
@teleport_map_id = []
@teleport_x = []
@teleport_y = []
# End Added.
@display_x = 0
@display_y = 0
# Added:
@map_infos = load_data("Data/MapInfos.rxdata")
for key in @map_infos.keys
@map_infos[key] = @map_infos[key].name
if @map_infos[key].include?("*")
@teleport_enabled[key] = false
@teleport_map_id[key] = key
@teleport_name[key] = "???"
@teleport_x[key] = 0
@teleport_y[key] = 0
end
end
# End Added.
end
def setup(map_id)
@map_id = map_id
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
tileset = $data_tilesets[@map.tileset_id]
@tileset_name = tileset.tileset_name
@autotile_names = tileset.autotile_names
@panorama_name = tileset.panorama_name
@panorama_hue = tileset.panorama_hue
@fog_name = tileset.fog_name
@fog_hue = tileset.fog_hue
@fog_opacity = tileset.fog_opacity
@fog_blend_type = tileset.fog_blend_type
@fog_zoom = tileset.fog_zoom
@fog_sx = tileset.fog_sx
@fog_sy = tileset.fog_sy
@battleback_name = tileset.battleback_name
@passages = tileset.passages
@priorities = tileset.priorities
@terrain_tags = tileset.terrain_tags
@display_x = 0
@display_y = 0
@need_refresh = false
@events = {}
# When a new map loads, if it is in the key maps array, this
# checks to see if there is an event called WorldMap to teleport
# to. If there isn't it'll cause a problem so make sure there is!
for i in @map.events.keys
@events[i] = Game_Event.new(@map_id, @map.events[i])
# Added:
if @teleport_enabled[@map_id] == false
if @events[i].name == "WorldMap"
@teleport_enabled[@map_id] = true
@teleport_name[@map_id] = self.name
@teleport_x[@map_id] = @events[i].x
@teleport_y[@map_id] = @events[i].y
end
end
# End Added.
end
@common_events = {}
for i in 1...$data_common_events.size
@common_events[i] = Game_CommonEvent.new(i)
end
@fog_ox = 0
@fog_oy = 0
@fog_tone = Tone.new(0, 0, 0, 0)
@fog_tone_target = Tone.new(0, 0, 0, 0)
@fog_tone_duration = 0
@fog_opacity_duration = 0
@fog_opacity_target = 0
@scroll_direction = 2
@scroll_rest = 0
@scroll_speed = 4
end
# Returns the map name (gets rid of the * in the name)
# Added:
def name
new_name = @map_infos[@map_id].tr("*", "")
return new_name
end
# End Added.
end
class Window_MapName < Window_Base
def initialize
super(0, 0, 320, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 250, 32, "Current Location:")
self.contents.font.color = normal_color
self.contents.draw_text(4, 32, 250, 32, $game_map.name.to_s)
end
end
class Window_MapList < Window_Selectable
def initialize
super(480, 0, 160, 480)
@column_max = 1
self.opacity = 0
refresh
self.index = 0
end
def map_name
return @data_name[self.index]
end
def map_enabled
return @data_enabled[self.index]
end
def map_id
return @data_id[self.index]
end
def map_x
return @data_x[self.index]
end
def map_y
return @data_y[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data_name = []
@data_enabled = []
@data_id = []
@data_x = []
@data_y = []
for i in 1...$game_map.teleport_enabled.size
@data_name.push($game_map.teleport_name[i])
@data_enabled.push($game_map.teleport_enabled[i])
@data_id.push($game_map.teleport_map_id[i])
@data_x.push($game_map.teleport_x[i])
@data_y.push($game_map.teleport_y[i])
end
@item_max = @data_name.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
name = @data_name[index].tr("*","")
if @data_enabled[index]
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4
y = index * 32
self.contents.draw_text(x, y, 120, 32, name.to_s, 2)
end
end
class Scene_WorldMap
def main
@bgsprite = Sprite.new
@bgsprite.bitmap = RPG::Cache.picture("Map")
@maplist = Window_MapList.new
@mapname = Window_MapName.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@mapname.dispose
@maplist.dispose
@bgsprite.dispose
end
def update
@mapname.update
@maplist.update
if @maplist.active
update_maplist
return
end
end
def update_maplist
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
if not @maplist.map_enabled
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
$game_temp.player_transferring = true
$game_temp.player_new_map_id = @maplist.map_id
$game_temp.player_new_x = @maplist.map_x
$game_temp.player_new_y = @maplist.map_y
$game_temp.player_new_direction = 2
$game_temp.transition_processing = true
transfer_player
return
end
end
def transfer_player
if $game_map.map_id != $game_temp.player_new_map_id
$game_map.setup($game_temp.player_new_map_id)
end
$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
case $game_temp.player_new_direction
when 2
$game_player.turn_down
when 4
$game_player.turn_left
when 6
$game_player.turn_right
when 8
$game_player.turn_up
end
$game_player.straighten
$game_map.update
$scene = Scene_Map.new
if $game_temp.transition_processing
$game_temp.transition_processing = false
Graphics.transition(20)
end
$game_map.autoplay
Graphics.frame_reset
Input.update
end
end
class Game_Event
attr_reader :name
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@name = @event.name
@id = @event.id
@erased = false
@starting = false
@through = true
moveto(@event.x, @event.y)
refresh
end
end
If you wish to implement it into your code, look in Game_Map for the parts which are surrounded by the comments:
# Added:
[stuff]
# End Added.
And add that to your Game_Map in (ideally) the same location.
Here is an image you guys can use for Map.png (put it in pictures folder)