Jump to content
Rpg²S Forum

*Map Scroll


idru
 Share

Recommended Posts

Map Scroll

Descrizione

 

Con questo script si dovrebbe muovere la mappa fino a centrare un punto, fornendo le coordinate del punto.
Rpg maker XP offre la possibilità di muoversi solo nelle quattro direzioni, limita quindi questa funzione alla posizione di partenza.


Istruzioni per l'uso

 

Lo script da richiamare dall'evento è: autoscroll(x,y)
Si può regolare la velocità chiamando: autoscroll(x,y,speed) con speed che va da 1 a 6, di default è 4.
Le coordinate x e y possono anche fare riferimento a variabili, cosa molto utile.
Le istruzioni sono all'interno, in inglese.


Codice:

 

 

 

#==============================================================================
# ** Map Autoscroll
#------------------------------------------------------------------------------
# Wachunga
# Version 1.02
# 2005-12-18
#==============================================================================
=begin

This script supplements the built-in "Scroll Map" event command with the
aim of simplifying cutscenes (and map scrolling in general). Whereas the
normal event command requires a direction and number of tiles to scroll,
Map Autoscroll scrolls the map to center on the tile whose x and y
coordinates are given.

FEATURES
- automatic map scrolling to given x,y coordinate (or player)
- destination is fixed, so it's possible to scroll to same place even if
origin is variable (e.g. moving NPC)
- variable speed (just like "Scroll Map" event command)
- diagonal scrolling supported

SETUP
Instead of a "Scroll Map" event command, use the "Call Script" command
and enter on the following on the first line:

autoscroll(x,y)

(replacing "x" and "y" with the x and y coordinates of the tile to scroll to)

To specify a scroll speed other than the default (4), use:

autoscroll(x,y,speed)

(now also replacing "speed" with the scroll speed from 1-6)

Diagonal scrolling happens automatically when the destination is diagonal
relative to the starting point (i.e., not directly up, down, left or right).

To scroll to the player, instead use the following:

autoscroll_player(speed)

Note: because of how the interpreter and the "Call Script" event command
are setup, the call to autoscroll(...) can only be on the first line of
the "Call Script" event command (and not flowing down to subsequent lines).

For example, the following call may not work as expected:

autoscroll($game_variables[1],
$game_variables[2])

(since the long argument names require dropping down to a second line)
A work-around is to setup new variables with shorter names in a preceding
(separate) "Call Script" event command:

@x = $game_variables[1]
@y = $game_variables[2]

and then use those as arguments:

autoscroll(@x,@y)

The renaming must be in a separate "Call Script" because otherwise
the call to autoscroll(...) isn't on the first line.

Originally requested by militantmilo80:
http://www.rmxp.net/forums/index.php?showtopic=29519

=end

class Interpreter
	
	SCROLL_SPEED_DEFAULT = 4
	CENTER_X = (320 - 16) * 4
	CENTER_Y = (240 - 16) * 4
	
	#--------------------------------------------------------------------------
	# * Map Autoscroll to Coordinates
	# x : x coordinate to scroll to and center on
	# y : y coordinate to scroll to and center on
	# speed : (optional) scroll speed (from 1-6, default being 4)
	#--------------------------------------------------------------------------
	def autoscroll(x,y,speed=SCROLL_SPEED_DEFAULT)
		if $game_map.scrolling?
			return false
		elsif not $game_map.valid?(x,y)
			print 'Map Autoscroll: given x,y is invalid'
			return command_skip
		elsif not (1..6).include?(speed)
			print 'Map Autoscroll: invalid speed (1-6 only)'
			return command_skip
		end
		max_x = ($game_map.width - 20) * 128
		max_y = ($game_map.height - 15) * 128
		count_x = ($game_map.display_x - [0,[x*128-CENTER_X,max_x].min].max)/128
		count_y = ($game_map.display_y - [0,[y*128-CENTER_Y,max_y].min].max)/128
		if not @diag
			@diag = true
			dir = nil
			if count_x > 0
				if count_y > 0
					dir = 7
				elsif count_y < 0
					dir = 1
				end
			elsif count_x < 0
				if count_y > 0
					dir = 9
				elsif count_y < 0
					dir = 3
				end
			end
			count = [count_x.abs,count_y.abs].min
		else
			@diag = false
			dir = nil
			if count_x != 0 and count_y != 0
				return false
			elsif count_x > 0
				dir = 4
			elsif count_x < 0
				dir = 6
			elsif count_y > 0
				dir = 8
			elsif count_y < 0
				dir = 2
			end
			count = count_x != 0 ? count_x.abs : count_y.abs
		end
		$game_map.start_scroll(dir, count, speed) if dir != nil
		if @diag
			return false
		else
			return true
		end
	end
	
	#--------------------------------------------------------------------------
	# * Map Autoscroll (to Player)
	# speed : (optional) scroll speed (from 1-6, default being 4)
	#--------------------------------------------------------------------------
	def autoscroll_player(speed=SCROLL_SPEED_DEFAULT)
		autoscroll($game_player.x,$game_player.y,speed)
	end
	
end

#------------------------------------------------------------------------------

class Game_Map
	
	def scroll_downright(distance)
		@display_x = [@display_x + distance, (self.width - 20) * 128].min
		@display_y = [@display_y + distance, (self.height - 15) * 128].min
	end
	
	def scroll_downleft(distance)
		@display_x = [@display_x - distance, 0].max
		@display_y = [@display_y + distance, (self.height - 15) * 128].min
	end
	
	def scroll_upright(distance)
		@display_x = [@display_x + distance, (self.width - 20) * 128].min
		@display_y = [@display_y - distance, 0].max
	end
	
	def scroll_upleft(distance)
		@display_x = [@display_x - distance, 0].max
		@display_y = [@display_y - distance, 0].max
	end
	
	def update_scrolling
		# If scrolling
		if @scroll_rest > 0
			# Change from scroll speed to distance in map coordinates
			distance = 2 ** @scroll_speed
			# Execute scrolling
			case @scroll_direction
				#------------------------------------------------------------------------------
				# Begin Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 1 # down left
				scroll_downleft(distance)
				#------------------------------------------------------------------------------
				# End Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 2 # Down
				scroll_down(distance)
				#------------------------------------------------------------------------------
				# Begin Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 3 # down right
				scroll_downright(distance)
				#------------------------------------------------------------------------------
				# End Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 4 # Left
				scroll_left(distance)
			when 6 # Right
				scroll_right(distance)
				#------------------------------------------------------------------------------
				# Begin Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 7 # up left
				scroll_upleft(distance)
				#------------------------------------------------------------------------------
				# End Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 8 # Up
				scroll_up(distance)
				#------------------------------------------------------------------------------
				# Begin Map Autoscroll Edit
				#------------------------------------------------------------------------------
			when 9 # up right
				scroll_upright(distance)
				#------------------------------------------------------------------------------
				# End Map Autoscroll Edit
				#------------------------------------------------------------------------------
			end
			# Subtract distance scrolled
			@scroll_rest -= distance
		end
	end
end

 

 

 

Bugs e Conflitti Noti

 

Nella descrizione ho scritto "dovrebbe" poichè a me non funziona. Non da messaggi di errori o si blocca, semplicemente non succede niente. Cercando su internet un altra persona su un forum americano aveva incontrato lo stesso problema, ma non ha avuto risposta.
Qualcuno saprebbe risolvere il problema? o avete da segnalare uno script simile?

Edited by Dilos
Script monoriga sistemato.

http://img543.imageshack.us/img543/8858/bannerfirmagrafica.jpg

 

la mia gallery su deviant

SUPERBIA SUDORE FORTUNA

Grandi sogni supportati da una grande passione!!

 

Medagliette: http://img846.imageshack.us/img846/9296/fcp1.pnghttp://img717.imageshack.us/img717/7703/fcp3.png http://www.rpg2s.net/cover_contest/icons/cc_1.png http://www.rpg2s.net/cover_contest/icons/cc_furor_1.png http://www.rpg2s.net/cover_contest/icons/cc_special.png http://www.rpg2s.net/cover_contest/icons/cc_special.pnghttp://rpg2s.net/gif/SCContest2Oct.gif

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...