=begin Random Map Script, by "tonbi", adapted by Peter O. -------------------- Names of random maps have the following syntax: [MapName],Random,[Type],[ObjCnt],[Connect] MapName - Name of the map Type - Map type: 0 - 2 layers, natural 1 - 2 layers, artificial 2 - 2 layers, natural, convex 3 - 2 layers, artificial, convex 4 - 2 layers, natural, hole/land/wall 5 - 2 layers, artificial, hole/land/wall 6 - 2 layers, natural, hole/land/wall 7 - 2 layers, artificial, hole/land/wall ObjCnt - Density of objects on the map. Generally a number divisible by 100. Connect - If this is equal to "false", the parts of the generated map can be disjoint. This setting is optional. ------------------ In addition, the tiles used in the random map must be arranged in a certain way, depending on the map type; please see the Random Map Sample for details: http://www.mc.ccnw.ne.jp/sarada/toshi/down/RandomMapSample.exe ------------------ Events can be labeled with one of the following: Each event on the map can be marked with these features. Checkpoint - There will always be ground wherever this event is placed. To Use: Name the event "MyEvent,Checkpoint" or use a Comment event command consisting of the text "Checkpoint". ("MyEvent" is arbitrary.) Fixed - This event will appear at a ground tile next to where this event is located. To Use: Name the event "MyEvent,Fixed" or use a Comment event command consisting of the text "Fixed". ("MyEvent" is arbitrary.) TotallyFixed - This event will always remain at its position defined on the map. To Use: Name the event "MyEvent,TotallyFixed" or use a Comment event command consisting of the text "TotallyFixed". ("MyEvent" is arbitrary.) WallFixture - Appears attached to a wall. May be followed by a comma and either 1 or 0 (0 means the object takes 1 tile space; 1 means 3 tiles). To Use: Use a Comment event command consisting of the text "WallFixture,1" WallFixtureFixed - Appears attached to a wall next to where this event is located. May be followed by a comma and either 1 or 0 (0 means the object takes 1 tile space; 1 means 3 tiles). To Use: Use a Comment event command consisting of the text "WallFixtureFixed,1" Events without these features will be placed at a random spot on the generated map. ------------------- =end USE_TRAIN_ACTOR = false class Game_Character DRAWRANGEX = 1920 DRAWRANGEY = 1664 end class Game_Map AUTO_MAP_SAVE = true end class Game_Temp alias initialize_tonbi1 initialize def initialize initialize_tonbi1 $onscreen = [] end end class Game_Character alias update_tonbi1 update def update sx = @real_x - $game_map.display_x - 1280 sy = @real_y - $game_map.display_y - 960 abs_sx = sx > 0 ? sx : -sx abs_sy = sy > 0 ? sy-3 : -sy if abs_sx > DRAWRANGEX or abs_sy > DRAWRANGEY $onscreen[@id]=false else $onscreen[@id]=true end update_tonbi1 end end class Spriteset_Map attr_accessor :character_sprites def initialize $onscreen = [] @viewport1 = Viewport.new(0, 0, 640, 480) @viewport2 = Viewport.new(0, 0, 640, 480) @viewport3 = Viewport.new(0, 0, 640, 480) @viewport2.z = 200 @viewport3.z = 5000 @tilemap = Tilemap.new(@viewport1) @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name) for i in 0..6 autotile_name = $game_map.autotile_names[i] @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name) end @tilemap.map_data = $game_map.data @tilemap.priorities = $game_map.priorities @panorama = Plane.new(@viewport1) @panorama.z = -1000 @fog = Plane.new(@viewport1) @fog.z = 3000 @character_sprites = [] @character_sprites_hash = {} @party_sprites = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) @character_sprites_hash[i]=sprite $onscreen[i] = true end @party_sprites.push(Sprite_Character.new(@viewport1, $game_player)) @weather = RPG::Weather.new(@viewport1) @picture_sprites = [] for i in 1..50 @picture_sprites.push(Sprite_Picture.new(@viewport2, $game_screen.pictures[i])) end @timer_sprite = Sprite_Timer.new update end def dispose @tilemap.tileset.dispose for i in 0..6 @tilemap.autotiles[i].dispose end @tilemap.dispose @panorama.dispose @fog.dispose for i in @character_sprites if i != nil i.dispose end end for i in @party_sprites if i != nil i.dispose end end @weather.dispose for sprite in @picture_sprites sprite.dispose end @timer_sprite.dispose @viewport1.dispose @viewport2.dispose @viewport3.dispose end def update if @panorama_name != $game_map.panorama_name or @panorama_hue != $game_map.panorama_hue @panorama_name = $game_map.panorama_name @panorama_hue = $game_map.panorama_hue if @panorama.bitmap != nil @panorama.bitmap.dispose @panorama.bitmap = nil end if @panorama_name != "" @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue) end Graphics.frame_reset end if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue @fog_name = $game_map.fog_name @fog_hue = $game_map.fog_hue if @fog.bitmap != nil @fog.bitmap.dispose @fog.bitmap = nil end if @fog_name != "" @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue) end Graphics.frame_reset end @tilemap.ox = $game_map.display_x / 4 @tilemap.oy = $game_map.display_y / 4 @tilemap.update @panorama.ox = $game_map.display_x / 8 @panorama.oy = $game_map.display_y / 8 @fog.zoom_x = $game_map.fog_zoom / 100.0 @fog.zoom_y = $game_map.fog_zoom / 100.0 @fog.opacity = $game_map.fog_opacity @fog.blend_type = $game_map.fog_blend_type @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy @fog.tone = $game_map.fog_tone for i in $game_map.events.keys if $onscreen[i] @character_sprites_hash[i].update end end for i in @party_sprites i.update end @weather.type = $game_screen.weather_type @weather.max = $game_screen.weather_max @weather.ox = $game_map.display_x / 4 @weather.oy = $game_map.display_y / 4 @weather.update for sprite in @picture_sprites sprite.update end @timer_sprite.update @viewport1.tone = $game_screen.tone @viewport1.ox = $game_screen.shake @viewport3.color = $game_screen.flash_color @viewport1.update @viewport3.update end end if USE_TRAIN_ACTOR == true module Train_Actor module Spriteset_Map_Module def setup_actor_character_sprites(characters) if !setup_actor_character_sprites? for character in characters.reverse @party_sprites.unshift( Sprite_Character.new(@viewport1, character) ) end @setup_actor_character_sprites_flag = true end end end end end class Game_Map 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 check_special_map @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 def check_special_map mapinfo = load_data("Data/MapInfos.rxdata") if mapinfo[@map_id].subname == "Random" if mapinfo[@map_id].subname(3)=="" or mapinfo[@map_id].subname(3) == nil p3 = 0 else p3 = mapinfo[@map_id].subname(3).to_i end if mapinfo[@map_id].subname(4)=="false" p4 = false end make_random_map(2,mapinfo[@map_id].subname(2).to_i,p3,p4) end end def make_random_map(wall = 2, type = 0, objcnt = 0, connect = true) wall = 0 if wall == nil type = 0 if type == nil objcnt = 0 if objcnt == nil unless objcnt.is_a?(Numeric) objcnt = 0 end if objcnt < 0 objcnt = 0 end connect = true if connect != false @heightdata = Table.new(@map.width,@map.height) @maskdata = Table.new(@map.width,@map.height) @oneventdata = Table.new(@map.width,@map.height) @masksetting = [] @makedata = [] @targettype=0 @chgtype=0 time = -1 for i in 0...@map.width for j in 0...@map.height time += 1 if time%2000 == 0 Graphics.update end @heightdata[i,j] = 0 @maskdata[i,j] = 0 end end for i in 0...100 @masksetting[i] = true end needposx = [] needposy = [] for i in @map.events.keys.sort time += 1 if time%200 == 0 Graphics.update end if event_settype(i) == 1 if connect == true needposx.push(@map.events[i].x) needposy.push(@map.events[i].y) needposx.push(@map.events[i].x) needposy.push(@map.events[i].y) else needposx.push(@map.events[i].x) needposy.push(@map.events[i].y) end end end if connect == true needposx.shift needposy.shift end loop do if needposx.size <= 2 needposx.push(rand(@map.width)) needposy.push(rand(@map.height)) else break end end case type when 0 @makedata.push([0,1,0]) @makedata.push([5,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,0,-15,4,0]) @makedata.push([1,1,1,1,1]) @makedata.push([6,0,needposx[i*2],needposy[i*2]]) @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,0,1,1,1]) @makedata.push([4,0,1,1,1]) @makedata.push([4,1,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,0]) @makedata.push([2,1,2]) @makedata.push([5,1]) when 1 @makedata.push([0,1,0]) @makedata.push([5,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,0,-6,4,1,10]) @makedata.push([1,1,1,1,1]) @makedata.push([6,0,needposx[i*2],needposy[i*2]]) @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,0,2,3,1]) @makedata.push([4,1,2,2,1]) @makedata.push([4,0,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,0]) @makedata.push([2,1,2]) @makedata.push([5,1]) when 2 @makedata.push([0,1,0]) @makedata.push([5,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,0,-15,4,0]) @makedata.push([1,1,1,1,1]) @makedata.push([6,0,needposx[i*2],needposy[i*2]]) @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,0,2,2,1]) @makedata.push([4,1,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,0]) @makedata.push([2,1,2]) @makedata.push([5,-1]) when 3 @makedata.push([0,1,0]) @makedata.push([5,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,0,-15,4,1,10]) @makedata.push([1,1,1,1,1]) @makedata.push([6,0,needposx[i*2],needposy[i*2]]) @makedata.push([6,0,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,0,2,2,1]) @makedata.push([4,1,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,0]) @makedata.push([2,1,2]) @makedata.push([5,-1]) when 4 @makedata.push([0,1,0]) @makedata.push([5,0]) @makedata.push([1,0,0,-1,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,0,-1,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,-1,0,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,0,-1,0,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([4,2,2,2,1]) for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40)) @makedata.push([1,3,3,8,8]) @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5]) end @makedata.push([7,2]) @makedata.push([4,2,1,1,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,1,-8,4,0,5]) @makedata.push([1,1,1,1,1]) @makedata.push([6,1,needposx[i*2],needposy[i*2]]) @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,1,1,1,1]) @makedata.push([4,1,0,1,1]) @makedata.push([2,0,0]) @makedata.push([4,1,1,0,1]) @makedata.push([2,-1,1]) @makedata.push([4,2,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,-1]) @makedata.push([2,1,2]) @makedata.push([5,0]) @makedata.push([2,2,2]) @makedata.push([5,1]) when 5 @makedata.push([0,1,0]) @makedata.push([5,0]) @makedata.push([1,0,0,-1,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,0,-1,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,-1,0,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,0,-1,0,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([4,2,2,2,1]) for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40)) @makedata.push([1,3,3,8,8]) @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5]) end @makedata.push([7,2]) @makedata.push([4,2,1,1,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,1,-8,4,1,5]) @makedata.push([1,1,1,1,1]) @makedata.push([6,1,needposx[i*2],needposy[i*2]]) @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,1,1,1,1]) @makedata.push([4,1,0,1,1]) @makedata.push([2,0,0]) @makedata.push([4,1,1,0,1]) @makedata.push([2,-1,1]) @makedata.push([4,2,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,-1]) @makedata.push([2,1,2]) @makedata.push([5,0]) @makedata.push([2,2,2]) @makedata.push([5,1]) when 6 @makedata.push([0,1,0]) @makedata.push([5,0]) @makedata.push([1,0,0,-1,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,0,-1,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,-1,0,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,0,-1,0,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([4,2,2,2,1]) for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40)) @makedata.push([1,1,1,3,3]) @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5]) end @makedata.push([4,0,2,2,0]) @makedata.push([4,0,1,2,1]) @makedata.push([7,2]) @makedata.push([4,2,1,1,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,1,-15,4,0,5]) @makedata.push([1,1,1,1,1]) @makedata.push([6,1,needposx[i*2],needposy[i*2]]) @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,1,1,1,1]) @makedata.push([4,1,0,1,1]) @makedata.push([2,0,0]) @makedata.push([4,1,1,0,1]) @makedata.push([2,-1,1]) @makedata.push([4,2,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,-1]) @makedata.push([2,1,2]) @makedata.push([5,0]) @makedata.push([2,2,2]) @makedata.push([5,1]) when 7 @makedata.push([0,1,0]) @makedata.push([5,0]) @makedata.push([1,0,0,-1,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,0,-1,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,-1,-1,0,-1]) @makedata.push([3,2,-6,1,0]) @makedata.push([1,0,-1,0,0]) @makedata.push([3,2,-6,1,0]) @makedata.push([4,2,2,2,1]) for i in 0...(rand(12*@map.width*@map.height/40/40)+(5*@map.width*@map.height/40/40)) @makedata.push([1,1,1,3,3]) @makedata.push([6,0,rand(@map.width-10)+5,rand(@map.height-10)+5]) end @makedata.push([4,0,2,2,0]) @makedata.push([4,0,1,2,1]) @makedata.push([7,2]) @makedata.push([4,2,1,1,1]) for i in 0...(needposx.size/2) @makedata.push([1,needposx[i*2],needposy[i*2],needposx[i*2+1],needposy[i*2+1]]) @makedata.push([3,1,-15,4,1,5]) @makedata.push([1,1,1,1,1]) @makedata.push([6,1,needposx[i*2],needposy[i*2]]) @makedata.push([6,1,needposx[i*2+1],needposy[i*2+1]]) end @makedata.push([4,1,1,1,1]) @makedata.push([4,1,0,1,1]) @makedata.push([2,0,0]) @makedata.push([4,1,1,0,1]) @makedata.push([2,-1,1]) @makedata.push([4,2,1,1,1]) @makedata.push([0,0,0]) @makedata.push([2,0,2]) @makedata.push([5,-1]) @makedata.push([2,1,2]) @makedata.push([5,0]) @makedata.push([2,2,2]) @makedata.push([5,1]) end for make_stat in @makedata time += 1 if time%2 == 0 Graphics.update end case make_stat[0] when 0 rndmap_chtarget(make_stat[1],make_stat[2]) when 1 rndmap_setstat(make_stat[1],make_stat[2],make_stat[3],make_stat[4]) when 2 rndmap_chmask(make_stat[1],make_stat[2]) when 3 rndmap_mkroad(make_stat[1],make_stat[2],make_stat[3],make_stat[4],make_stat[5]) when 4 rndmap_plus(make_stat[1],make_stat[2],make_stat[3],make_stat[4]) when 5 rndmap_allchg(make_stat[1]) when 6 rndmap_putpos(make_stat[1],make_stat[2],make_stat[3]) when 7 rndmap_edge(make_stat[1]) end end @tilesetting = Table.new(3,40,3) for i in [0,1,2] for k in 0...40 for j in [0,1,2] tile=(@map.data[j,k,i]) ? @map.data[j,k,i] : 0 @tilesetting[j,k,i] = tile end end end time = 0 for k in 0...@map.height for j in 0...@map.width time += 1 if time%500 == 0 Graphics.update end if @heightdata[j,k] == 1 if @heightdata[j,k+1]==-1 @heightdata[j,k+1] = 0 if @heightdata[j,k+2]==-1 and @heightdata[j,k+3] == 0 @heightdata[j,k+2] = 0 end end end end end time = 0 for k in 0...@map.height for j in 0...@map.width time += 1 if time%500 == 0 Graphics.update end if @heightdata[j,k] == 0 if @heightdata[j,k+1] == -1 or @heightdata[j,k-1] == -1 or @heightdata[j+1,k] == -1 or @heightdata[j-1,k] == -1 set_mapdata2(j,k,0,8) else set_mapdata2(j,k,0,0) end elsif @heightdata[j,k] == 1 if @heightdata[j,k+1] == -1 or @heightdata[j,k-1] == -1 or @heightdata[j+1,k] == -1 or @heightdata[j-1,k] == -1 set_mapdata2(j,k,0,8) elsif @heightdata[j,k+1] == 0 or @heightdata[j,k-1] == 0 or @heightdata[j+1,k] == 0 or @heightdata[j-1,k] == 0 set_mapdata2(j,k,0,0) else set_mapdata2(j,k,1,4) end else set_mapdata2(j,k,0,8) end end end time = 0 for k in 0...@map.height for j in 0...@map.width time += 1 if time%500 == 0 Graphics.update end if @heightdata[j,k] == 0 if @heightdata[j,k+1] == -1 if @heightdata[j-1,k] == -1 for i in [0,1,2] set_mapdata(j,k+i,0,13+i,1) end elsif @heightdata[j+1,k] == -1 for i in [0,1,2] set_mapdata(j,k+i,2,13+i,1) end else for i in [0,1,2] set_mapdata(j,k+i,1,13+i,1) end end elsif @heightdata[j,k-1] == -1 if @heightdata[j-1,k] == -1 or (@heightdata[j-1,k] == 1 and @heightdata[j-1,k-1] == -1) set_mapdata(j,k,0,11,2) elsif @heightdata[j+1,k] == -1 or (@heightdata[j+1,k] == 1 and @heightdata[j+1,k-1] == -1) set_mapdata(j,k,2,11,2) else set_mapdata(j,k,1,11,2) end elsif @heightdata[j-1,k] == -1 or (@heightdata[j-1,k] == 1 and @heightdata[j-1,k-1] == -1) set_mapdata(j,k,0,12,1) elsif @heightdata[j+1,k] == -1 or (@heightdata[j+1,k] == 1 and @heightdata[j+1,k-1] == -1) set_mapdata(j,k,2,12,1) elsif @heightdata[j-1,k-1] == -1 set_mapdata(j,k,0,9,1) elsif @heightdata[j-1,k+1] == -1 set_mapdata(j,k,0,10,1) elsif @heightdata[j+1,k-1] == -1 set_mapdata(j,k,1,9,1) elsif @heightdata[j+1,k+1] == -1 set_mapdata(j,k,1,10,1) end end if @heightdata[j,k] == 1 and @heightdata[j,k-1] != -1 if @heightdata[j,k+1] == -1 if @heightdata[j-1,k] == -1 for i in [0,1,2] end elsif @heightdata[j+1,k] == -1 for i in [0,1,2] end else for i in [0,1,2] end end elsif @heightdata[j,k-1] == -1 if @heightdata[j-1,k] == -1 set_mapdata(j,k,0,11,2) elsif @heightdata[j+1,k] == -1 set_mapdata(j,k,2,11,2) else set_mapdata(j,k,1,11,2) end elsif @heightdata[j-1,k] == -1 set_mapdata(j,k,0,12,1) elsif @heightdata[j+1,k] == -1 set_mapdata(j,k,2,12,1) elsif @heightdata[j-1,k-1] == -1 set_mapdata(j,k,0,9,1) elsif @heightdata[j-1,k+1] == -1 set_mapdata(j,k,0,10,1) elsif @heightdata[j+1,k-1] == -1 set_mapdata(j,k,1,9,1) elsif @heightdata[j+1,k+1] == -1 set_mapdata(j,k,1,10,1) end end end end time = 0 for k in 0...@map.height for j in 0...@map.width time += 1 if time%500 == 0 Graphics.update end if @heightdata[j,k] == 1 if @heightdata[j,k+1] == 0 or @heightdata[j,k+1] == -1 if @heightdata[j-1,k] == 0 or @heightdata[j-1,k] == -1 set_mapdata(j,k+0,0,5+0,5) set_mapdata(j,k+1,0,5+1,5) set_mapdata(j,k+2,0,5+2,4) if @heightdata[j,k+3] != 0 and @heightdata[j,k+2] != 1 and (@heightdata[j,k+2] != 0 or @heightdata[j-1,k+2] != 0) set_mapdata(j,k+2,0,16,5) for i in [0,1] set_mapdata(j,k+3+i,0,14+i,1) if @heightdata[j,k+3+i] != -1 break end end end elsif @heightdata[j+1,k] == 0 or @heightdata[j+1,k] == -1 set_mapdata(j,k+0,2,5+0,5) set_mapdata(j,k+1,2,5+1,5) set_mapdata(j,k+2,2,5+2,4) if @heightdata[j,k+3] != 0 and @heightdata[j,k+2] != 1 and (@heightdata[j,k+2] != 0 or @heightdata[j+1,k+2] != 0) set_mapdata(j,k+2,2,16,5) for i in [0,1] set_mapdata(j,k+3+i,2,14+i,1) if @heightdata[j,k+3+i] != -1 break end end end else set_mapdata(j,k+0,1,5+0,5) set_mapdata(j,k+1,1,5+1,5) set_mapdata(j,k+2,1,5+2,4) if @heightdata[j,k+3] != 0 and @heightdata[j,k+2] != 1 set_mapdata(j,k+2,1,16,5) for i in [0,1] set_mapdata(j,k+3+i,1,14+i,1) if @heightdata[j,k+3+i] != -1 break end end end end elsif @heightdata[j,k-1] == 0 or @heightdata[j,k-1] == -1 if @heightdata[j-1,k] == 0 or @heightdata[j-1,k] == -1 set_mapdata(j,k,0,3,4) elsif @heightdata[j+1,k] == 0 or @heightdata[j+1,k] == -1 set_mapdata(j,k,2,3,4) else set_mapdata(j,k,1,3,4) end elsif @heightdata[j-1,k] == 0 or @heightdata[j-1,k] == -1 set_mapdata(j,k,0,4,4) elsif @heightdata[j+1,k] == 0 or @heightdata[j+1,k] == -1 set_mapdata(j,k,2,4,4) elsif @heightdata[j-1,k-1] == 0 or @heightdata[j-1,k-1] == -1 set_mapdata(j,k,0,1,4) elsif @heightdata[j-1,k+1] == 0 or @heightdata[j-1,k+1] == -1 set_mapdata(j,k,0,2,4) elsif @heightdata[j+1,k-1] == 0 or @heightdata[j+1,k-1] == -1 set_mapdata(j,k,1,1,4) elsif @heightdata[j+1,k+1] == 0 or @heightdata[j+1,k+1] == -1 set_mapdata(j,k,1,2,4) end end end end playerpos_reset($game_temp.player_new_x,$game_temp.player_new_y) @oneventdata[$game_temp.player_new_x,$game_temp.player_new_y] = 1 time = 0 for i in @map.events.keys.sort time += 1 if time%100 == 0 Graphics.update end case event_settype(i) when 3 @oneventdata[@map.events[i].x,@map.events[i].y] = 1 end end for i in @map.events.keys.sort time += 1 if time%100 == 0 Graphics.update end case event_settype(i) when 1 set_defeventpos(i,@map.events[i].x,@map.events[i].y) @oneventdata[@map.events[i].x,@map.events[i].y] = 1 end end for i in @map.events.keys.sort time += 1 if time%100 == 0 Graphics.update end j = event_settype(i) case j when 0 set_defeventpos(i,rand(@map.width-4)+2,rand(@map.width-4)+2) @oneventdata[@map.events[i].x,@map.events[i].y] = 1 when 2 set_defeventpos(i,@map.events[i].x,@map.events[i].y) @oneventdata[@map.events[i].x,@map.events[i].y] = 1 when 100..199 set_defeventpos_wall(i,rand(@map.width-4)+2,rand(@map.width-4)+2,j-100) @oneventdata[@map.events[i].x,@map.events[i].y] = 1 @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1 for k in 1..(j-100) @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1 @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1 @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1 @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1 end when 200..299 set_defeventpos_wall(i,@map.events[i].x,@map.events[i].y,j-200) @oneventdata[@map.events[i].x,@map.events[i].y] = 1 @oneventdata[@map.events[i].x,@map.events[i].y-1] = 1 for k in 1..(j-200) @oneventdata[@map.events[i].x+k,@map.events[i].y] = 1 @oneventdata[@map.events[i].x+k,@map.events[i].y-1] = 1 @oneventdata[@map.events[i].x-k,@map.events[i].y] = 1 @oneventdata[@map.events[i].x-k,@map.events[i].y-1] = 1 end end end for i in 0...(rand(objcnt)+objcnt/2) time += 1 if time%500 == 0 Graphics.update end j = rand(@map.width) k = rand(@map.width) case rand(10) when 0..4 if standable_newtile?(1,0) if standable?(j,k) set_mapdata(j,k,1,0,6) end else if standable2?(j,k) set_mapdata(j,k,1,0,6) end end when 5..7 if standable_newtile?(2,0) if standable?(j,k) set_mapdata(j,k,2,0,6) end else if standable2?(j,k) set_mapdata(j,k,2,0,6) end end when 8..9 if standable2?(j,k) if @map.data[j,k-1,2]==0 and (@map.data[j,k,1]==0 or @map.data[j,k,2]==0) set_mapdata(j,k,2,2,4) set_mapdata(j,k-1,2,1,4) end end end end @heightdata.resize(0,0) @maskdata.resize(0,0) @oneventdata.resize(0,0) @masksetting.clear @makedata.clear @tilesetting.resize(0,0,0) if AUTO_MAP_SAVE save_data(@map,sprintf("Data/Map%03d.rxdata", 999)) maplist = load_data("Data/MapInfos.rxdata") mapinfo = RPG::MapInfo.new mapinfo.name = sprintf("Auto-saved random map (%s)", maplist[@map_id].name) mapinfo.parent_id = 0 mapinfo.order = 999 mapinfo.expanded = true mapinfo.scroll_x = 0 mapinfo.scroll_y = 0 maplist[999]=mapinfo save_data(maplist,"Data/MapInfos.rxdata") end end def event_settype(i) if @map.events[i].subname == "Checkpoint" return 1 end if @map.events[i].subname == "Fixed" return 2 end if @map.events[i].subname == "TotallyFixed" return 3 end for j in 0..1000 if @map.events[i].pages[0].list[j].code != 108 break end if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "Checkpoint" return 1 end if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "TotallyFixed" return 3 end if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "Fixed" return 2 end if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "WallFixture" if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil return 100 else k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] k = k.to_i return 100+k end end if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[0] == "WallFixtureFixed" if @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] == nil return 200 else k = @map.events[i].pages[0].list[j].parameters[0].split(/,/)[1] k = k.to_i return 200+k end end end return 0 end def set_defeventpos(id,x,y) if standable2?(x,y) @map.events[id].x=x @map.events[id].y=y return end for i in 1..([@map.width,@map.height].max) if standable2?(x,y+i) @map.events[id].x=x @map.events[id].y=y+i return end for j in 1..i if standable2?(x-j,y+i) @map.events[id].x=x-j @map.events[id].y=y+i return end if standable2?(x+j,y+i) @map.events[id].x=x+j @map.events[id].y=y+i return end if standable2?(x-j,y-i) @map.events[id].x=x-j @map.events[id].y=y-i return end if standable2?(x+j,y-i) @map.events[id].x=x+j @map.events[id].y=y-i return end end end end def set_defeventpos_wall(id,x,y,p4) if standable3?(x,y,p4) @map.events[id].x=x @map.events[id].y=y return end for i in 1..([@map.width,@map.height].max) if standable3?(x,y+i,p4) @map.events[id].x=x @map.events[id].y=y+i return end for j in 1..i if standable3?(x-j,y+i,p4) @map.events[id].x=x-j @map.events[id].y=y+i return end if standable3?(x+j,y+i,p4) @map.events[id].x=x+j @map.events[id].y=y+i return end if standable3?(x-j,y-i,p4) @map.events[id].x=x-j @map.events[id].y=y-i return end if standable3?(x+j,y-i,p4) @map.events[id].x=x+j @map.events[id].y=y-i return end end end end def playerpos_reset(x,y) if standable?(x,y) $game_temp.player_new_x=x $game_temp.player_new_y=y return end for i in 1..([@map.width,@map.height].max) if standable?(x,y+i) $game_temp.player_new_x=x $game_temp.player_new_y=y+i return end for j in 0..i if standable?(x-j,y+i) $game_temp.player_new_x=x-j $game_temp.player_new_y=y+i return end if standable?(x+j,y+i) $game_temp.player_new_x=x+j $game_temp.player_new_y=y+i return end if standable?(x-j,y-i) $game_temp.player_new_x=x-j $game_temp.player_new_y=y-i return end if standable?(x+j,y-i) $game_temp.player_new_x=x+j $game_temp.player_new_y=y-i return end end end end def standable_newtile?(p1,p2) for i in [2, 1, 0] tile_id = @tilesetting[p1, p2, i] if tile_id == nil return false elsif @passages[tile_id] & 0x0f == 0x0f return false elsif @priorities[tile_id] == 0 return true end end return true end def standable?(p1,p2) if @heightdata[p1,p2] != 0 return false end if @oneventdata[p1,p2] ==1 return false end for i in [2, 1, 0] tile_id = @map.data[p1, p2, i] if tile_id == nil return false elsif @passages[tile_id] & 0x0f == 0x0f return false elsif @priorities[tile_id] == 0 return true end end return true end def standable2?(p1,p2) unless standable?(p1,p2) return false end if standable?(p1+1,p2-1) == false or standable?(p1+1,p2) == false or standable?(p1+1,p2+1) == false if standable?(p1-1,p2-1) == false or standable?(p1-1,p2) == false or standable?(p1-1,p2+1) == false if standable?(p1,p2-1) == true and standable?(p1,p2+1) == true return false end end end if standable?(p1+1,p2+1) == false or standable?(p1,p2+1) == false or standable?(p1-1,p2+1) == false if standable?(p1+1,p2-1) == false or standable?(p1,p2-1) == false or standable?(p1-1,p2-1) == false if standable?(p1-1,p2) == true and standable?(p1+1,p2) == true return false end end end if standable?(p1,p2-1) == false and (standable?(p1-1,p2+1) == false or standable?(p1,p2+1) == false or standable?(p1+1,p2+1) == false) return false end if standable?(p1,p2+1) == false and (standable?(p1-1,p2-1) == false or standable?(p1+1,p2-1) == false or standable?(p1+1,p2-1) == false) return false end if standable?(p1-1,p2) == false and (standable?(p1+1,p2-1) == false or standable?(p1+1,p2) == false or standable?(p1+1,p2+1) == false) return false end if standable?(p1+1,p2) == false and (standable?(p1-1,p2-1) == false or standable?(p1-1,p2) == false or standable?(p1-1,p2+1) == false) return false end return true end def standable3?(p1,p2,p3) unless standable?(p1,p2+1) return false end if @oneventdata[p1,p2] == 1 or @oneventdata[p1,p2-1] == 1 or @heightdata[p1,p2-2] != 1 or @heightdata[p1,p2-1] == 1 or @heightdata[p1,p2+1] != 0 return false end for i in 1...p3+1 if@heightdata[p1+i,p2-2] != 1 or @heightdata[p1+i,p2-1] == 1 or @heightdata[p1+i,p2+1] != 0 return false end if@heightdata[p1-i,p2-2] != 1 or @heightdata[p1-i,p2-1] == 1 or @heightdata[p1-i,p2+1] != 0 return false end end for i in 1...p3+1 if @oneventdata[p1+i,p2] == 1 or @oneventdata[p1+i,p2-1] == 1 return false end if @oneventdata[p1-i,p2] == 1 or @oneventdata[p1-i,p2-1] == 1 return false end end return true end def set_mapdata(p1,p2,p3,p4,p5 = 0) unless self.valid?(p1, p2) return end if @tilesetting[p3,p4,0] != 0 @map.data[p1,p2,0] = @tilesetting[p3,p4,0] end case p5 when 0 if @tilesetting[p3,p4,1] != 0 @map.data[p1,p2,1] = @tilesetting[p3,p4,1] end if @tilesetting[p3,p4,2] != 0 @map.data[p1,p2,2] = @tilesetting[p3,p4,2] end when 1 if @tilesetting[p3,p4,1] != 0 @map.data[p1,p2,1] = @tilesetting[p3,p4,1] end when 2 if @tilesetting[p3,p4,1] != 0 @map.data[p1,p2,2] = @tilesetting[p3,p4,1] end when 3 if @tilesetting[p3,p4,1] != 0 if @map.data[p1,p2,1] != 0 @map.data[p1,p2,2] = @map.data[p1,p2,1] end @map.data[p1,p2,1] = @tilesetting[p3,p4,1] end when 4 if @tilesetting[p3,p4,1] != 0 if @map.data[p1,p2,2] != 0 @map.data[p1,p2,1] = @map.data[p1,p2,2] end @map.data[p1,p2,2] = @tilesetting[p3,p4,1] end when 5 if @tilesetting[p3,p4,1] != 0 @map.data[p1,p2,1] = @tilesetting[p3,p4,1] end if @tilesetting[p3,p4,1] != 0 @map.data[p1,p2,2] = @tilesetting[p3,p4,1] end when 6 if @map.data[p1,p2,1] == 0 @map.data[p1,p2,1] = @tilesetting[p3,p4,1] elsif @map.data[p1,p2,2] == 0 @map.data[p1,p2,2] = @tilesetting[p3,p4,1] end end end def set_mapdata2(p1,p2,p3,p4) @map.data[p1,p2,0] = @tilesetting[p3,p4,0] @map.data[p1,p2,1] = @tilesetting[p3,p4,1] @map.data[p1,p2,2] = @tilesetting[p3,p4,2] end def set_height(p1,p2,p3) return if p1<0 return if p1>=@map.width return if p2<0 return if p2>=@map.height @heightdata[p1,p2]=p3 end def set_grounddata(p1,p2,p3) return if p1<0 return if p1>=@map.width return if p2<0 return if p2>=@map.height if @masksetting[@maskdata[p1,p2]] == true if @targettype==0 if @chgtype==0 @heightdata[p1,p2]=p3 elsif @chgtype==1 @heightdata[p1,p2]+=p3 end elsif @targettype==1 if @chgtype==0 @maskdata[p1,p2]=p3 elsif @chgtype==1 @maskdata[p1,p2]+=p3 end end end end def rndmap_chtarget(p1,p2) @targettype=p1 @chgtype=p2 end def rndmap_setstat(p1,p2,p3,p4) @minx=p1 @miny=p2 @maxx=p3 @maxy=p4 end def rndmap_chmask(p1,p2) if p1>=0 if p2==0 @masksetting[p1]=false elsif p2 == 1 @masksetting[p1]=true elsif p2 == 2 for i in 0...100 @masksetting[i]=false end @masksetting[p1]=true end end if p1==-1 if p2==0 for i in 0...100 @masksetting[i]=false end else for i in 0...100 @masksetting[i]=true end end end end def rndmap_mkroad(p1,p2,p3,p4,p5 = 5) p5 = 5 if p5 == nil localdata = Table.new(@map.width,@map.height) aposx = [] aposy = [] aflag = [] for i in 0...@map.width for j in 0...@map.height localdata[i,j] = 0 end end if p2<0 p2=(p2*-1)*@map.width*@map.height/40/40 end aposx[0]=@minx aposy[0]=@miny aposx[1]=@maxx aposy[1]=@maxy if aposx[0]<0 aposx[0]=@map.width+aposx[0] end if (aposx[0]>=1000) and (aposx[0]<=1100) aposx[0]=@map.width*(aposx[0]-1000)/100 end if aposy[0]<0 aposy[0]=@map.height+aposy[0] end if (aposy[0]>=1000) and (aposy[0]<=1100) aposy[0]=@map.height*(aposy[0]-1000)/100 end if aposx[1]<0 aposx[1]=@map.width+aposx[1] end if (aposx[1]>=1000) and (aposx[1]<=1100) aposx[1]=@map.width*(aposx[1]-1000)/100 end if aposy[1]<0 aposy[1]=@map.height+aposy[1] end if (aposy[1]>=1000) and (aposy[1]<=1100) aposy[1]=@map.height*(aposy[1]-1000)/100 end if p4==0 or p4==1 or p4==2 if p4 == 2 i4 = rand(2) end aflag[0] = true aflag[1] = false for i in 2...(p2+2) aposx[i] = rand(@map.width-p3*2) + p3 aposy[i] = rand(@map.height-p3*2) + p3 aflag[i] = false end i3=0 i1=aposx[i3] i2=aposy[i3] localdata[i1,i2] = 1 for i in 0...p2+2 i7=5000000 for j in 0...p2+2 if aflag[j] == false i4 = aposx[j]-i1 i4=i4*-1 if i4 < 0 i5 = aposy[j]-i2 i5=i5*-1 if i5 < 0 if (i4**2+i5**2) <=(p5**2) and j != 1 aflag[j] = true elsif i7 > (i4**2+i5**2) i7=(i4**2+i5**2) i6=j end end end if p4==0 if aposx[i3] > aposx[i6] i8 = aposx[i3] i9 = aposy[i3] i10 = aposx[i6] i11 = aposy[i6] else i8 = aposx[i6] i9 = aposy[i6] i10 = aposx[i3] i11 = aposy[i3] end if i8!=i10 for i in 0..(i8-i10) localdata[i+i10,(i9-i11)*i/(i8-i10)+i11] = 1 end end if aposy[i3] > aposy[i6] i8 = aposx[i3] i9 = aposy[i3] i10 = aposx[i6] i11 = aposy[i6] else i8 = aposx[i6] i9 = aposy[i6] i10 = aposx[i3] i11 = aposy[i3] end if i9!=i11 for i in 0..(i9-i11) localdata[(i8-i10)*i/(i9-i11)+i10,i+i11] = 1 end end end if p4==1 i4 = rand(2) if i4==0 for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max) localdata[i+[aposx[i3],aposx[i6]].min,aposy[i3]] = 1 end for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max) localdata[aposx[i6],i+[aposy[i3],aposy[i6]].min] = 1 end else for i in 0..([aposx[i3]-aposx[i6],aposx[i6]-aposx[i3]].max) localdata[i+[aposx[i3],aposx[i6]].min,aposy[i6]] = 1 end for i in 0..([aposy[i3]-aposy[i6],aposy[i6]-aposy[i3]].max) localdata[aposx[i3],i+[aposy[i3],aposy[i6]].min] = 1 end end end i3=i6 i1=aposx[i3] i2=aposy[i3] aflag[i3]=true if i3==1 break end end end for i in 0...@map.width for j in 0...@map.height if localdata[i,j] == 1 set_grounddata(i,j,p1) end end end end def rndmap_plus(p1,p2,p3,p4) localdata = Table.new(@map.width,@map.height) for i in 0...@map.width for j in 0...@map.height if @targettype==0 localdata[i,j] = @heightdata[i,j] elsif @targettype==1 localdata[i,j] = @maskdata[i,j] end end end if p4 == 0 for i in 0...@map.width for j in 0...@map.height if p1==localdata[i,j] for k in 1..p2 set_grounddata(i+k,j,p1) set_grounddata(i-k,j,p1) end for k in 1..p3 set_grounddata(i,j+k,p1) set_grounddata(i,j-k,p1) end end end end elsif p4 == 1 for i in 0...@map.width for j in 0...@map.height if p1==localdata[i,j] for k in (i-p2)..(i+p2) for l in (j-p3)..(j+p3) set_grounddata(k,l,p1) end end end end end end end def rndmap_allchg(p1) for i in 0...@map.width for j in 0...@map.height set_grounddata(i,j,p1) end end end def rndmap_putpos(p1,p2,p3) i = rand(@maxx-@minx+1)+@minx j = rand(@maxy-@miny+1)+@miny for k in (p2-i)..(p2+i) for l in (p3-j)..(p3+j) set_grounddata(k,l,p1) end end end def rndmap_edge(p1) for i in 0...@map.width set_grounddata(i,0,p1) set_grounddata(i,@map.height-1,p1) end for i in 0...@map.height set_grounddata(0,i,p1) set_grounddata(@map.width-1,i,p1) end end end module RPG class MapInfo def name name = @name.split(/,/)[0] return name != nil ? name : '' end def name=(str) str2 = @name[/^[^,]*(,.*)/, 1] @name = str2 != nil ? str + str2 : str end def subname(i = 1) name = @name.split(/,/)[i] return name != nil ? name : "" end end end module RPG class Event def name name = @name.split(/,/)[0] return name != nil ? name : '' end def name=(str) str2 = @name[/^[^,]*(,.*)/, 1] @name = str2 != nil ? str + str2 : str end def subname(i = 1) name = @name.split(/,/)[i] return name != nil ? name : "" end end end