Jump to content
Rpg²S Forum

*MODE 07(ver 0.6)


Gabriel
 Share

Recommended Posts

Lo script,creato da Mewster,permette alla world map di "piegarsi" dando l'effetto di camminare su una sfera.
Utile per la world map. Il tile usato nello screen lo posso dare io via MP :panchi:

Demo Offline (Chiuso Megaupload)

http://img160.imagevenue.com/loc307/th_15002_Screen_123_307lo.JPG

 

=begin

Mode07 on the Map!
Includes:
   Mode07 v0.6
   Overworld Sprite Resize
Written by mewsterus

Special Thanks:
Fanha Giang (for a reverse engineered Tilemap class)
--------------------------------------------------------------------------------
Instructions:
--------------------------------------------------------------------------------
To install, just insert this in a descriptive code slot right above Main.
This is different than previous instructions; please read the next paragraph.

If you had a previous install of this script and need an original version of
Spriteset_Map, one can be found at:
http://www.rpg-palace.com/scripts/spriteset_map.txt

To activate Mode07, add [#XX] to the map's name, replacing XX with the
percentage of Mode07 to apply.  Greater numbers will result in a more slanted
world.

To activate overworld sprite resize, add [OV] to the map's name.  This will make
sprites smaller on that map.

For the purposes of location scripts, these identifiers will not appear.


Examples:

"Overworld[#40]" will result in a slant identical to the second screenshot.
"Underworld[OV]" will resize only the player character to a small size, as if
				seen from high above.
"Atthelevelworld[OV][#12]" will result in the player being resized, and a modest
						  slant of 12%
"JustPlainWorld" will result in the same old map you've always seen.

To add a sky, simply use the panorama with the tileset.  Also, events will not
be drawn flat with the map.  Any vertical objects such as trees should be put
in events and displayed that way.

You can also add a sky by adding a fog.  If you add this, you can make it look
like the first screenshot.

A note on the $strip_size variable; the default value is 8, however there is
extremely minimal, almost nonexistant lag with 16. The screen is extremely
smooth with 4, or even 2. If you're having major problems with lag, you may
need to use 32, but it won't look too pretty.
--------------------------------------------------------------------------------
* Draw_Tilemap v1.72-0.6
Fanha Giang, 02/12/2006 (mm/dd/yyyy)
Edited for Mode07 by mewsterus 08/08/2006 (mm/dd/yyyy)
=end
#===============================================================================
$width = 640	# Screen width		(will not change resolution,
$height = 480   # Screen height		here for compatibility)
$ov_zoom = 0.6  # Overworld zoom multiplier
$strip_size = 8 # Size of each strip of the map.  Higher numbers will lag less.
			   #  Recommended that this number be a power of 2.
			   #  Do not make higher than 64.
$curve = true   # Whether the map is curled, for overworlds (old method)
$data_map = load_data("Data/MapInfos.rxdata")
#===============================================================================
class RPG::MapInfo
def name # Definition prevents location scripts from reading anything within
   return @name.gsub(/[.*]/) {""} # brackets, including the brackets
end
#-----------------------------------------------------------------------------
def original_name
   return @name
end
#-----------------------------------------------------------------------------
def overworld?
   return @name.scan(/[OV]/).size > 0
end
#-----------------------------------------------------------------------------
def pitch
   @name =~ /[#[ ]*([00-99]+)]/i
   return $1
end
end
#===============================================================================
class Draw_Tilemap # This class controls a set of sprites, with different Z
				  #  values, arranged into horizontal bars
attr_accessor :tileset
attr_accessor :map_data
attr_accessor :priorities
attr_accessor :autotiles
attr_accessor :bitmaps
attr_accessor :pitch
attr_accessor :ox
attr_accessor :oy
attr_accessor :plus_y
INDEX = # Autotile definitions
[
26, 27, 32, 33, 4,  27, 32, 33, 26, 5,  32, 33, 4,  5,  32, 33,
26, 27, 32, 11, 4,  27, 32, 11, 26, 5,  32, 11, 4,  5,  32, 11,
26, 27, 10, 33, 4,  27, 10, 33, 26, 5,  10, 33, 4,  5,  10, 33,
26, 27, 10, 11, 4,  27, 10, 11, 26, 5,  10, 11, 4,  5,  10, 11,
24, 25, 30, 31, 24, 5,  30, 31, 24, 25, 30, 11, 24, 5,  30, 11,
14, 15, 20, 21, 14, 15, 20, 11, 14, 15, 10, 21, 14, 15, 10, 11,
28, 29, 34, 35, 28, 29, 10, 35, 4,  29, 34, 35, 4,  29, 10, 35,
38, 39, 44, 45, 4,  39, 44, 45, 38, 5,  44, 45, 4,  5,  44, 45,
24, 29, 30, 35, 14, 15, 44, 45, 12, 13, 18 ,19, 12, 13, 18, 11,
16, 17, 22, 23, 16, 17, 10, 23, 40, 41, 46, 47, 4,  41, 46, 47,
36, 37, 42, 43, 36, 5,  42, 43, 12, 17, 18, 23, 12, 13, 42, 43,
36, 41, 42, 47, 16, 17, 46, 47, 12, 17, 42, 47, 0,  1,  6,  7
]
X = [0, 1, 0, 1] # Used in 16x16 autotile drawing; left, right, left, right
Y = [0, 0, 1, 1] # Used in 16x16 autotile drawing;   up,	up, down,  down
#-----------------------------------------------------------------------------
def initialize
# Get initial data from Game_Map
   @tileset = RPG::Cache.tileset($game_map.tileset_name)
   @map_data = $game_map.data
   @priorities = $game_map.priorities
   @autotiles = []
   for i in 0..6
	 @autotiles[i] = RPG::Cache.autotile($game_map.autotile_names[i])
   end
# Provide blank data in proper object form
   @ox = 0
   @oy = 0
# Bitmaps used for each priority's drawing.  Priorities 2-5 are combined.
   @bitmaps = [bitmap.new($game_map.width*32, $game_map.height*32+$strip_size),
			   Bitmap.new($game_map.width*32, $game_map.height*32+$strip_size),
			   Bitmap.new($game_map.width*32, $game_map.height*32+$strip_size)]
# Generate blank sprites
   @sprites = [[], [], []]
   for i in 0..2 # For each layer
	 for j in 0..$game_map.height * (32 / $strip_size) - 1
	 # For each horizontal strip of $strip_size height, make a blank sprite
	   @sprites[i].push(Sprite.new)
	   @sprites[i][j].bitmap = Bitmap.new($game_map.width*32, $strip_size*2)
	   @sprites[i][j].x = $width / 2
	   @sprites[i][j].y = -64
	   @sprites[i][j].z = -5 + (i * 10)
	 end
   end
   @disposed = false
   draw
end
#-----------------------------------------------------------------------------
def update
# Retrieve variable values for slant drawing; these values accesible by event
   @pitch = $game_map.pitch.to_f
   @plus_y = $game_map.plus_y
   for i in 0..2 # For each layer
	 for j in [0, (($height / 2) - (($height * 60) /
			   @pitch) + @oy) / $strip_size].max.to_i..[@sprites[i].size - 1,
			   (@oy + $height) / $strip_size].min.to_i
	 # For each strip within the visible screen, update OX/Y
	   @sprites[i][j].x = $width / 2
	   @sprites[i][j].y = j * $strip_size - @oy
	   unless @pitch == 0 # Apply X Zoom
		 @sprites[i][j].zoom_x = (@sprites[i][j].y - $height / 2) *
								 (@pitch / ($height * 25)) + 1
		 if $curve # Zoom Y values same as X, and compensate
		   @sprites[i][j].zoom_y = @sprites[i][j].zoom_x
		   @sprites[i][j].y += $strip_size * (1 - @sprites[i][j].zoom_y) *
							   ((1 - @sprites[i][j].zoom_y) /
							   (2 * ((@pitch / 100) /
									 ($height / ($strip_size * 2)))) + 0.5)
		 end
	   end
	   @sprites[i][j].ox = @ox + $width / 2
	 # Add plus_y value; used in airship script
	   @sprites[i][j].y += @plus_y
	 end
   end
end
#-----------------------------------------------------------------------------
def dispose
# Dispose all sprites
   for i in 0..2
	 for j in @sprites[i]
	   j.bitmap.dispose
	   j.dispose
	 end
   end
   for i in @bitmaps
	 i.dispose
   end
   @tileset.dispose
   for i in 0..6
	 @autotiles[i].dispose
   end
   @disposed = true
end
#-----------------------------------------------------------------------------
def disposed?
   return @disposed
end
#-----------------------------------------------------------------------------
def draw
# Draw each individual position by XY value
   for x in 0...@map_data.xsize
	 for y in 0...@map_data.ysize
	   draw_position(x, y)
	 end
   end
   for i in 0..2 # For each priority
	 for j in 0..@sprites[i].size - 1
	 # For each horizontal strip, transfer the bitmap appropriately
	   @sprites[i][j].bitmap.blt(0, 0, @bitmaps[i],
		   Rect.new(0, j * $strip_size, $game_map.width * 32, $strip_size * 2))
	 end
   end
end
#-----------------------------------------------------------------------------
def draw_position(x, y)
   for layer in 0..2
	 pos = @map_data[x, y, layer]
	 @priorities[pos] = 2 if @priorities[pos] > 2 # Round priorities down to 2
	 if pos >= 384 # If it is a tile
	 # src_rect = 32x32 Rect on the tileset for source bitmap
	   src_rect = Rect.new(((pos-384)%8)*32, ((pos-384)/8)*32, 32, 32)
	 # Transfer source bitmap on the tileset to the current map tile
	   @bitmaps[@priorities[pos]].blt(x * 32, y * 32, @tileset, src_rect)
	 elsif pos >= 48 and pos < 384 # If it is an autotile
	   id = pos / 48 - 1 # Which autotile is used (0-6)
	 # plus_x is in development for animated autotiles
	   plus_x = 0 #((@anim / 4) % (@autotiles[id].width / 96)) * 96
	   for corner in 0..3
		 h = 4 * (pos % 48) + corner # Used to access INDEX
	   # src_rect = 16x16 Rect on the autotile for source bitmap
		 src_rect = Rect.new((INDEX[h]%6)*16+plus_x, (INDEX[h]/6)*16, 16, 16)
	   # Transfer source bitmap on the autotile to the current 16x16 tile
		 @bitmaps[@priorities[pos]].blt(x*32+X[corner]*16, y*32+Y[corner]*16,
										 @autotiles[id], src_rect)
	   end
	 end
   end
end
end
#===============================================================================
class Game_Map
attr_accessor :pitch
attr_accessor :plus_y
#-----------------------------------------------------------------------------
alias setup_or :setup
def setup(map_id)
   setup_or(map_id)
   @pitch = $data_map[$game_map.map_id].pitch
   @plus_y = 0
end
#-----------------------------------------------------------------------------
def name
   return $data_map[@map_id].name
end
end
#===============================================================================
class Sprite_Character < RPG::Sprite
attr_accessor :character
#-----------------------------------------------------------------------------
def initialize(character = nil)
   super()
   @character = character
   update
end
#-----------------------------------------------------------------------------
alias update_or :update
def update
   update_or
# Update pitch value, and update zoom values to match
   @pitch = $data_map[$game_map.map_id].pitch.to_f
   self.zoom_x =
   self.zoom_y = ((@character.screen_y - 16) - ($height / 2)) *
				 (@pitch / ($height * 25)) + 1
# Set sprite coordinates.  X value is multiplied by zoom value from the center
   self.x = ($width / 2) + ((@character.screen_x - ($width / 2)) * self.zoom_x)
   self.y = @character.screen_y
# Add Y value for zoom compensation while in curve mode
   if $curve and @pitch != 0
	 self.y += (8 * (1 - self.zoom_y) * ((1 - self.zoom_y) /
			   (2 * ((@pitch / 100) / ($height / 16.0))) + 0.5))
   end
# Add plus_y value; used in airship script
   self.y += $game_map.plus_y unless @character.is_a?(Game_Player)
   self.z = @character.screen_z(@ch) - (self.zoom_y < 0.5 ? 1000 : 0)
   if $data_map[$game_map.map_id].overworld? and
	  @character.is_a?(Game_Player) # Multiply zoom by Overworld factor if
	 self.zoom_x *= $ov_zoom		#  the map is marked with [OV] and event
	 self.zoom_y *= $ov_zoom		#  is a Game_Player
   end
end
end
#===============================================================================
class Spriteset_Map
def initialize
# Make viewports
   @viewport1 = Viewport.new(0, 0, 640, 480)
   @viewport2 = Viewport.new(0, 0, 640, 480)
   @viewport3 = Viewport.new(0, 0, 640, 480)
   @viewport2.z = 2000
   @viewport3.z = 5000
# Make tilemap
   @tilemap = Draw_Tilemap.new
# Make panorama plane
   @panorama = Plane.new
   @panorama.z = -2000
# Make fog plane
   @fog = Plane.new
   @fog.z = 3000
# Make character sprites
   @character_sprites = []
   for i in $game_map.events.keys.sort
	 sprite = Sprite_Character.new($game_map.events[i])
	 @character_sprites.push(sprite)
   end
   @character_sprites.push(Sprite_Character.new($game_player))
# Make weather
   @weather = RPG::Weather.new(@viewport1)
# Make picture sprites
   @picture_sprites = []
   for i in 1..50
	 @picture_sprites.push(Sprite_Picture.new(@viewport2,
											  $game_screen.pictures[i]))
   end
# Make timer sprite
   @timer_sprite = Sprite_Timer.new
# Frame update
   update
end
#-----------------------------------------------------------------------------
def dispose
# Dispose of tilemap
   @tilemap.dispose
# Dispose of panorama plane
   @panorama.dispose
# Dispose of fog plane
   @fog.dispose
# Dispose of character sprites
   for sprite in @character_sprites
	 sprite.dispose
   end
# Dispose of weather
   @weather.dispose
# Dispose of picture sprites
   for sprite in @picture_sprites
	 sprite.dispose
   end
# Dispose of timer sprite
   @timer_sprite.dispose
# Dispose of viewports
   @viewport1.dispose
   @viewport2.dispose
   @viewport3.dispose
end
end

 

 

Con la mia lama fenderò le tenebre e con il mio scudo proteggerò i deboli

2912.png

Link to comment
Share on other sites

Demo grazie!!!

ThE GrEeN gObLiN oN lInE G.D.O. - Bunny Show - Onor

Beck

I've never dreamed before

I'm gonna knock the door

Into the world of perfect free

(You ain't no lonely!)

You're gonna say I'm lying

I'm gonna get the chance

I thought a chance is far from me

(You ain't no lonely!) ...

Link to comment
Share on other sites

strabiliante..... devo chiedere se può andare bene per il game, ma come si fa a decidere la world map?

The Zodiac Brave Story
http://img201.imageshack.us/img201/7397/finalfantasytacticstheloy2.jpg

"A warrior takes sword in hand,
clasping a gem to his heart.
Engraving vanishing memories
into the sword,
He places finaly honed skills
into the stone,
Spoken from the sword
handed down from the stone"...


...Now the story can be told...


Idzule Reborn 01%
<div style="margin:20px;margin-top:5px" "="">





http://img237.imageshack.us/img237/9992/wallerinloveom7.png
Più di 200 scenari realizzati completamente a mano....
Nuovi chara creati da zero!
Menù Personalizzato!
La forza non è tutto! Muoviti mentre combatti!
Viaggia sulla mappa di Idzule è incontra personaggi che hanno fatto la storia di queste terre!
Combatterai con vecchi Boss e avrai il supporto degli spiriti al tuo fianco mentre avrai un quesito che ti perseguiterà per tutto il viaggio: avere la felicità.

PS: Il gioco non uscira prima di due anni!

 

Link to comment
Share on other sites

l'unico difetto che è anche piuttosto grossolano come errore, è che non smussa gli angoli della mappa all'orizzonte...

Accontentiamoci,e ricordati che è solo la versione 0.6 XD

 

strabiliante..... devo chiedere se può andare bene per il game, ma come si fa a decidere la world map?

Per usare la features,basta metere [XX] nel nome della mappa,con XX = a un numero.

Consiglio 12 perchè è il migliore secondo me.

Quindi la world map sarà:

Mappa Mondiale[12]

Per ridimensionare il pg,usare [OV]

[OV]ha la precedenza su [XX]

Quindi,la world map col pg ridimensionata è

Mappa Mondiale[OV][12]

 

Comunque c'era scritto anche nelo script :chirol_iei2:

Con la mia lama fenderò le tenebre e con il mio scudo proteggerò i deboli

2912.png

Link to comment
Share on other sites

Grazie mille Gabriel! Molto utile!

ThE GrEeN gObLiN oN lInE G.D.O. - Bunny Show - Onor

Beck

I've never dreamed before

I'm gonna knock the door

Into the world of perfect free

(You ain't no lonely!)

You're gonna say I'm lying

I'm gonna get the chance

I thought a chance is far from me

(You ain't no lonely!) ...

Link to comment
Share on other sites

Ocho che sto script lagga moltissimo nelle mappe grandi e con tanti eventi....

 

 

 

O_______________________________________________________O

(metà delle cose che fanno le faccio anch'io zizi)

(sto qua invece è un mostro....)

 

 

 

Link to comment
Share on other sites

basta lo script dell' SDK.

 

Lo allego, nel caso qualcuno on l' abbia.

 

Ehm...va bene che operano su un sito canadese...però...

SephirotSpawn:The SDK should NOT be edited and redistribute with out contacting a Member of the SDK Team. Edits to the SDK may cause massive capability errors and would defeat what we are trying to do here.

 

Non so se in Italia vale lo stesso,ma lo hai chiesto agli autori?(Near Fantastica Fuso Wachunga Prexus Trickster SephirothSpawn)

Con la mia lama fenderò le tenebre e con il mio scudo proteggerò i deboli

2912.png

Link to comment
Share on other sites

non so dove tu abbia trovato quel messaggio, pero' per sicurezza lo tolgo.

 

EDIT: ah si, ora ricordo. Ma se non sbaglio aveva detto che non si poteva editare e redistribuire. Boh, in ogni caso meglio toglierlo :|

 

in ogni caso, se lo trovate e lo usate, il MODE07 lagga di meno.

Edited by Zuzzu
Link to comment
Share on other sites

  • 2 weeks later...
Se uso questo script mi da errore nello script "pixelmovement" di f0tz. Perchè? ;O;

I'm Not There Blog

My Photostream!

Trofei Personali:

http://rpg2s.net/gif/SCContest3Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest1Oct.gifhttp://rpg2s.net/gif/SCContest3Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest1Oct.gif

Risultati Game Contest:

 

 

http://www.rpg2s.net/gif/GC_bestof3.gif 3° posto Best Of Rpg2s e Best of Rm2k/2k3

http://www.rpg2s.net/gif/GC_premio1.gif 1° posto categoria Atmosfera

http://www.rpg2s.net/gif/GC_grafica3.gif 3° posto categoria Miglior Grafica Rm2k/2k3

http://www.rpg2s.net/gif/GC_trama3.gif 3° posto categoria Miglior Trama

http://www.rpg2s.net/gif/GC_programmazione3.gif 3° posto categoria Miglior Programmazione ad Eventi Rm2k/2k3

http://www.rpg2s.net/gif/GC_mapping3.gif 3° posto categoria Miglior Mapping

http://www.rpg2s.net/gif/GC_gameplay3.gif 3° posto categoria Miglior Gameplay

http://www.rpg2s.net/gif/GC_effettispeciali2.gif 2° posto categoria Migliori effetti speciali in assoluto ed effetti speciali Rm2k/2k3

Vincitore del premio speciale NAPOLI http://whisperinglethe.interfree.it/stuff/napoli.gif

 

 

Frocio numero 5 del circolo ghei:

http://img179.imageshack.us/img179/3074/vgmiud3.gif

Link to comment
Share on other sites

Se uso questo script mi da errore nello script "pixelmovement" di f0tz. Perchè? ;O;

E' possibile che ci sia un conflitto tra altri script...

Mi fai un elenco di quelli che usi?

Con la mia lama fenderò le tenebre e con il mio scudo proteggerò i deboli

2912.png

Link to comment
Share on other sites

pixelmovement e mode07 XD

I'm Not There Blog

My Photostream!

Trofei Personali:

http://rpg2s.net/gif/SCContest3Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest1Oct.gifhttp://rpg2s.net/gif/SCContest3Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest1Oct.gif

Risultati Game Contest:

 

 

http://www.rpg2s.net/gif/GC_bestof3.gif 3° posto Best Of Rpg2s e Best of Rm2k/2k3

http://www.rpg2s.net/gif/GC_premio1.gif 1° posto categoria Atmosfera

http://www.rpg2s.net/gif/GC_grafica3.gif 3° posto categoria Miglior Grafica Rm2k/2k3

http://www.rpg2s.net/gif/GC_trama3.gif 3° posto categoria Miglior Trama

http://www.rpg2s.net/gif/GC_programmazione3.gif 3° posto categoria Miglior Programmazione ad Eventi Rm2k/2k3

http://www.rpg2s.net/gif/GC_mapping3.gif 3° posto categoria Miglior Mapping

http://www.rpg2s.net/gif/GC_gameplay3.gif 3° posto categoria Miglior Gameplay

http://www.rpg2s.net/gif/GC_effettispeciali2.gif 2° posto categoria Migliori effetti speciali in assoluto ed effetti speciali Rm2k/2k3

Vincitore del premio speciale NAPOLI http://whisperinglethe.interfree.it/stuff/napoli.gif

 

 

Frocio numero 5 del circolo ghei:

http://img179.imageshack.us/img179/3074/vgmiud3.gif

Link to comment
Share on other sites

Non mi funziona, anche se posto l'altro in Spriteset_Map. Puoi fare un tutorial completo?

Una demo?

La aggiungo al primo post.

Con la mia lama fenderò le tenebre e con il mio scudo proteggerò i deboli

2912.png

Link to comment
Share on other sites

  • 3 months later...
:ayasi: Buono, ma pieno di bug!!
Spoiler
Il Manifesto del Making ItalianoSALVIAMO IL MAKING ITALIANO!!Dopo un test dei nostri esperti (Alato, Blake e havana24) abbiamo scoperto che ad interesse risponde interesse: cioè se voi dimostrate di essere interessati a ciò che creano gli altri, questi saranno stimolati a continuare a creare! E' un concetto semplice ma estremamente sottovalutato, basta vedere quanti topic di bei giochi sono caduti nel dimenticatoio e sono stati cagati solo da poche persone (prendiamo per esempio il fantastico gioco di Vech che vi invito a vedere nella sezione RM2k).Perciò quello che dobbiamo fare è: leggere, leggere, leggere, postare, postare, postare! E questo non significa postare a caso, ma leggere per bene il progetto di qualcuno, le domande poste, le creazioni grafiche e musicali, e fare dei post in cui si propongano miglioramenti, si critichino le brutture, si esaltino le bellezze, si aiutino gli oppressi etc etcBASTA AL MAKING ITALIANO CHE VA A ROTOLI! DIAMOCI UNA SVEGLIATA!!Per dimostrarvi ciò che sto esponendo vi riporto che la volta in cui abbiamo provato (Alato, Blake e havana24) a fare una cosa di questo genere, c'è costata un pomeriggio ma il giorno dopo abbiamo ottenuto il numero massimo di utenti online mai raggiunto!!! Ma soprattutto ciò significa che l'interesse riguardo al making era stato, almeno momentaneamente, risvegliato!!Voi pensate che eravamo solo in 3 a cercare tutti i topic e ravvivarli (con sincerità e senza i soliti falsi "Oh che bello.", ma anche con critiche per lavori incompleti o assurdi) e abbiamo ottenuto quel grande risultato: se lo facessimo tutti non sarebbe una cosa potentissima?!?BASTA ALLE SOLITE BANALI DISCUSSIONI SULLA DECADENZA DEI GIOCHI!! FACCIAMOLI STI GIOCHI!!!Chi è contrario a questa cosa, può pure continuare così ma è una persona che col making non ha nulla a che fare, ma chi crede nel making inizi ora, immediatamente a seguire questa linea di pensiero!Ma chi è d'accordo, chi davvero ci tiene al making, incolli questo Manifesto nella propria firma!! Mettete anche voi questa firma!!
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...