Rpg²S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Vai al contenuto

Rpg²S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Screen Contest #90

Kamikun






  • Si prega di effettuare il log in prima di rispondere
*Mode07 - - - - -

    Luigi
  • Utente occasionale

  • Utenti
  • Rens: 19
  • 0
  • StellettaStelletta
  • 151 messaggi
  • Sesso:Maschio
  • Provenienza:Roma
  • Abilità:Apprendista

#1 Inviato 01 January 2007 - 18:24 PM

Creato da Mewsterus

Questo script ricrea un effeto semi 3d veramente meraviglioso..soprattutto perchè potrete usarlo solo quando volete...ma andiamo al dunque...Ecco 2 screens per farvi capire meglio..

Immagine inserita

Immagine inserita

Istruzioni per l'uso:
Vi riporto ciò che è stato scritto dal creatore dello script..

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 here. One more thing has changed; read on through the next paragraph.

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. The numbers for this feature have been expanded, such that any numbers will be halved. Take note; if you once used [#24], it will now be [#12] for the same appearance. All numbers should be halved.
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.

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.


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 picture. If you add this picture, you can make it look even better, with a curved world and sunlight, and it will not move with the map.


E adesso il tanto atteso Script:

=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)

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.  The numbers for this feature have been expanded, such that any numbers
will be halved.  Take note; if you once used [#24], it will now be [#12] for
the same appearance.  All numbers should be halved.

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 picture.  If you add this picture, you can
make it look even better, with a curved world and sunlight, and it will not
move with the map.
--------------------------------------------------------------------------------
* 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

Modificato da Luigi, 02 January 2007 - 11:36 AM.


    Lord Bel
  • Utente avanzato

  • Utenti
  • Rens: 10
  • 0
  • StellettaStellettaStelletta
  • 241 messaggi
  • Sesso:Maschio
  • Provenienza:Ravenna (RA)
  • Abilità:Esperto

#2 Inviato 01 January 2007 - 19:02 PM

Se non erro, questo script era già stato postato.
E in ogni caso, questa non era proprio la sezione giusta.

Comunque, Bello. Questo Finto 3-D è affascinante.

~ R²S ~ - '°•o Realizing Random Scrips o•°'


    Luigi
  • Utente occasionale

  • Utenti
  • Rens: 19
  • 0
  • StellettaStelletta
  • 151 messaggi
  • Sesso:Maschio
  • Provenienza:Roma
  • Abilità:Apprendista

#3 Inviato 02 January 2007 - 11:34 AM

E quale è la sezione giusta?

    havana24
  • Die!

  • Utenti Speciali
  • Rens: 34
  • 1
  • StellettaStellettaStellettaStellettaStelletta
  • 1320 messaggi
  • Sesso:Maschio
  • Provenienza:Crema (CR)
  • Abilità:Novizio

#4 Inviato 02 January 2007 - 14:32 PM

Ho spostato nella sezione giusta.
Cmq sia questo script é ottimo (per orsa) solo per le mappe del mondo... a meno che non si usino chip simil 3D il risultato (con chip nomrlai) non é dei migliori...

Aspettiamo aggiornamenti quindi ^^

Immagine inserita Immagine inserita

www.havana24.net


Premi vinti
Spoiler

    Ultima Weapon
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 11 messaggi
  • Abilità:Apprendista

#5 Inviato 02 January 2007 - 15:09 PM

Scusate, avevo già visto questo script da qualche parte e c'era un piccolo problema.. il pg non passava più sotto gli oggetti della mappa (alberi, case ecc)! Per caso avete corretto questo bug?

Modificato da Ultima Weapon, 02 January 2007 - 15:09 PM.


    Luigi
  • Utente occasionale

  • Utenti
  • Rens: 19
  • 0
  • StellettaStelletta
  • 151 messaggi
  • Sesso:Maschio
  • Provenienza:Roma
  • Abilità:Apprendista

#6 Inviato 03 January 2007 - 10:38 AM

no

    Extreme Z
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 20 messaggi
  • Sesso:Maschio
  • Abilità:Iniziato

#7 Inviato 05 January 2007 - 22:02 PM

Scusate,ho un piccolo problemino.Con questo script,Attivo o meno,quando porto la
tonalità schermo a 0(Per qualche evento)I Pg ed avvolte anche alcuni oggetti(Forse quelli
del secondo o terzo LV,rimangono chiari.Come potrei correggere il problema?

Ps
Bella la barca volante dello screen,dove la posso trovare?

Modificato da Extreme Z, 05 January 2007 - 22:04 PM.


    moltheni
  • Alex (Rm2k)

  • Utenti
  • Rens: 79
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1130 messaggi
  • Sesso:Maschio
  • Provenienza:Da: Um: Pa!
  • Abilità:Novizio

#8 Inviato 06 January 2007 - 09:36 AM

2 domande.
1. è possibile far ruotare la visuale della mappa (come nel vero mode7 dello snes)?
2. le picture come vengono visualizzate (a dimensioni normali, rimpicciolite in base alla distanza del centro dell'immagine, appiattite al terreno.. ecc)?

grazie.
ex-lev

Immagine inserita

Adottare una gigacciola?!? Ecco cosa ne penso io:
_____________Immagine inserita

Spoiler

giorni mesi anni interi mi han fottuto dietro i banchi
mi han rubato la passione maledetti governanti
ma adesso mi organizzo per la nuova libertà
« anarcofricchettanza da domani…vencerá! »


tratto da "Anarcosong - Osteria Popolare Berica"



๑۩۞۩๑
Immagine inserita


    marigno
  • Erunamo è il mio amoVe :*.

  • Utenti Speciali
  • Rens: 146
  • 0
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 2589 messaggi
  • Sesso:Maschio
  • Provenienza:Parma
  • Abilità:Adepto

#9 Inviato 06 January 2007 - 12:12 PM

Caro Luigi,
Posta la demooooooooooooo!!!!!!! ù_ù

    moltheni
  • Alex (Rm2k)

  • Utenti
  • Rens: 79
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1130 messaggi
  • Sesso:Maschio
  • Provenienza:Da: Um: Pa!
  • Abilità:Novizio

#10 Inviato 12 January 2007 - 22:34 PM

me ne sono accorto ora, esisteva già il topic QUI

con tanto di demo xD
ex-lev

Immagine inserita

Adottare una gigacciola?!? Ecco cosa ne penso io:
_____________Immagine inserita

Spoiler

giorni mesi anni interi mi han fottuto dietro i banchi
mi han rubato la passione maledetti governanti
ma adesso mi organizzo per la nuova libertà
« anarcofricchettanza da domani…vencerá! »


tratto da "Anarcosong - Osteria Popolare Berica"



๑۩۞۩๑
Immagine inserita


    Luigi
  • Utente occasionale

  • Utenti
  • Rens: 19
  • 0
  • StellettaStelletta
  • 151 messaggi
  • Sesso:Maschio
  • Provenienza:Roma
  • Abilità:Apprendista

#11 Inviato 21 February 2007 - 22:00 PM

allora ce ne sono 3

    EaglEye
  • Alex (Rm2k)

  • Utenti
  • Rens: 52
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1034 messaggi
  • Sesso:Maschio
  • Provenienza:Tomorrowland
  • Abilità:Esperto

#12 Inviato 21 February 2012 - 15:31 PM

non per necropostare, ma non riesco a far funzionare questo script.
Aggiungo tutto su Main, creo una nuova mappa (anche grandi e anche piccole, ne ho provate di tutte), eppure mettendo il [#XX] con il numero o [OV] dopo il nome della mappa. La mappa va e si vede, ma l'effetto non c'è.
Siccome la demo postata sull'altro topic era su megaupload, causa la sua chiusura non posso più scaricare la demo. ç_______ç
Qualcuno se ha la demo la può riuppare o mi spiega cosa ho sbagliato?

.

"Hurry up, we're dreaming."

Soundcloud Page


    Dilos
  • Alex (Rm2k)

  • Utenti Speciali
  • Rens: 60
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1325 messaggi
  • Sesso:Maschio
  • Provenienza:Torino
  • Abilità:Esperto

#13 Inviato 22 February 2012 - 16:35 PM

EaglEye, non ti preoccupare non è necropost se si posta per segnalare un non funzionamento, comunque la versione postata in questo topic è molto vecchia e probabilmente anche buggata...prova a inserire nel nome della mappa anche il tag [M7]...io non l'ho provata però ti linko quella che ho provato io, che è più recente e funzionante:
Neo-Mode7
probabilmente se fai un giro sui forum stranieri trovi versioni ancora più aggiornate :wink:

Modificato da Dilos, 22 February 2012 - 16:38 PM.

|FIRMA|
Spoiler

    EaglEye
  • Alex (Rm2k)

  • Utenti
  • Rens: 52
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1034 messaggi
  • Sesso:Maschio
  • Provenienza:Tomorrowland
  • Abilità:Esperto

#14 Inviato 22 February 2012 - 21:01 PM

allora vedrò di patchare la versione 1.01
^^

.

"Hurry up, we're dreaming."

Soundcloud Page


    Dilos
  • Alex (Rm2k)

  • Utenti Speciali
  • Rens: 60
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1325 messaggi
  • Sesso:Maschio
  • Provenienza:Torino
  • Abilità:Esperto

#15 Inviato 22 February 2012 - 21:15 PM

Pensi che la causa del problema sia la versione di RPG Maker? Prova può essere quello non ci avevo pensato :sisi:
Ma prova anche la Neo-Mode07, peggio di questa non può essere :sisi:
|FIRMA|
Spoiler




  • Feed RSS