2008年6.1更新发现:
RMXP的数据库实际支持宽度,高度〉500的地图,只是编辑器作了限制。
使用newmap可以建立宽度,高度〉500的地图
但是系统自动为他们涂上背景,要循环500*500次,所以很正常的失败了 {/hx}
2008年6.1再次更新
to:暴风龙,错误修正了 
范例更新:
http://bbs.66rpg.com/upload_program/files/Save_Map!Yes!_92755880.rar
冲突较大
如:
四处留情(一个改事件,一个改地图,能不冲突吗?)
股票(债券系统)
(涉及
Scene_Load
Scene_Save
修改)
本脚本用处:
比如您想在地图的2*2到5*5的地方造一个房子,一般只能用事件.很卡.
使用这个脚本只需要:
edit(mapid,x,y,lv,dat)
就可以修改任意地图,id的任意层的地图元件。
使用本脚本可以延伸出事件的修改//
使用方法:
edit(mapid,x,y,lv,dat)
实现:修改某个地图的某一格
使用:
mapid:要修改的地图id
x,y,lv:要修改的x,y,层(0、1、2)
dat:要替换的内容,不支持自动元件,从384开始
editbymap(mapid,x,y,mapid1,x1,y1,w1,h1)
实现:edit功能只能一格一格修改,不方便。
这个程序可以从其他地图拷贝一块到当前地图。
使用:
mapid:要修改的地图id
x,y:要修改的地图的x,y
mapid1:地图库
x1,y1,w1,h1:从x1,y1开始复制大小为w1,h1的地图元件到mapid的x,y
newmap(h,w,tileset)
实现:创建新地图
使用:
h,w:新地图大小
tileset:地图所使用图块的 ID。
脚本内容:
]#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
# 处理读档画面的类。
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● 读取存档数据
# file : 读取用文件对像 (已经打开)
#--------------------------------------------------------------------------
def read_save_data(file)
# 读取描绘存档文件用的角色数据
characters = Marshal.load(file)
# 读取测量游戏时间用画面计数
Graphics.frame_count = Marshal.load(file)
# 读取各种游戏对像
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$mapdat = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
# 魔法编号与保存时有差异的情况下
# (加入编辑器的编辑过的数据)
if $game_system.magic_number != $data_system.magic_number
# 重新装载地图
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
# 刷新同伴成员
$game_party.refresh
end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类。
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# ● 命令 : 新游戏
#--------------------------------------------------------------------------
def command_new_game
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 停止 BGM
Audio.bgm_stop
# 重置测量游戏时间用的画面计数器
Graphics.frame_count = 0
# 生成各种游戏对像
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$mapdat = []
for i in 1...1000
file = sprintf("Data/Map%03d.rxdata", i)
if FileTest.exist?(file)
$mapdat.push(load_data(sprintf("Data/Map%03d.rxdata", i)))
end
end
$game_map = Game_Map.new
$game_player = Game_Player.new
# 设置初期同伴位置
$game_party.setup_starting_members
# 设置初期位置的地图
$game_map.setup($data_system.start_map_id)
# 主角向初期位置移动
$game_player.moveto($data_system.start_x, $data_system.start_y)
# 刷新主角
$game_player.refresh
# 执行地图设置的 BGM 与 BGS 的自动切换
$game_map.autoplay
# 刷新地图 (执行并行事件)
$game_map.update
# 切换地图画面
$scene = Scene_Map.new
end
end
#==============================================================================
# ■ Game_Map
#------------------------------------------------------------------------------
# 处理地图的类。包含卷动以及可以通行的判断功能。
# 本类的实例请参考 $game_map 。
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 设置
# map_id : 地图 ID
#--------------------------------------------------------------------------
def setup(map_id)
# 地图 ID 记录到 @map_id
@map_id = map_id
# 地图文件装载后、设置到 @map
@map = $mapdat[@map_id-1]#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 = {}
for i in @map.events.keys
@events[i] = Game_Event.new(@map_id, @map.events[i])
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
#--------------------------------------------------------------------------
# ● 刷新2
#--------------------------------------------------------------------------
def refresh2
@map = $mapdat[@map_id-1]#load_data(sprintf("Data/Map%03d.rxdata", @map_id))
end
end
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
# 处理存档画面的类。
#==============================================================================
class Scene_Save < Scene_File
def write_save_data(file)
# 生成描绘存档文件用的角色图形
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
# 写入描绘存档文件用的角色数据
Marshal.dump(characters, file)
# 写入测量游戏时间用画面计数
Marshal.dump(Graphics.frame_count, file)
# 增加 1 次存档次数
$game_system.save_count += 1
# 保存魔法编号
# (将编辑器保存的值以随机值替换)
$game_system.magic_number = $data_system.magic_number
# 写入各种游戏对像
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_screen, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)
Marshal.dump($mapdat, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
end
end
[HTML]def edit(mapid,x,y,lv,dat) #lv=0,1,2
$mapdat[mapid-1].data[x,y,lv] = dat
upmap
end
def editbymap(mapid,x,y,mapid1,x1,y1,w1,h1) #lv=0,1,2
#$mapdat[mapid-1].data[x,y,lv] = dat
x3 = x
for y2 in x1..h1+(x1-1)
for x2 in y1..w1+(y1-1)
$mapdat[mapid-1].data[x3,y,0] = $mapdat[mapid1-1].data[x2,y2,0]
$mapdat[mapid-1].data[x3,y,1] = $mapdat[mapid1-1].data[x2,y2,1]
$mapdat[mapid-1].data[x3,y,2] = $mapdat[mapid1-1].data[x2,y2,2]
x3 = x3+1
end
y = y+1
x3 = x
end
upmap
end
def newmap(h,w,tileset)
$mapdat.push(RPG::Map.new(w,h))
# $mapdat.height = h
# $mapdat.width = w
# $mapdat.data = Table.new(h,w,3)
for x in 0..w
for y in 0..h
edit($mapdat.size,x,y,0,384)
end
end
return $mapdat.size
upmap
end
def upmap
$game_map.refresh2
$game_map.update
end
截图怎么截捏?
使用草原地图时的范例
for i in 0..4
edit(1,2,2+i,1,488+(i*8))
edit(1,3,2+i,1,489+(i*8))
edit(1,4,2+i,1,490+(i*8))
edit(1,5,2+i,1,491+(i*8))
edit(1,6,2+i,1,492+(i*8))
end