Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


5 participantes

    Deixando o mapa com visão meio 3D

    FilipeJF
    FilipeJF
    Aldeia Friend
    Aldeia Friend


    Medalhas : Deixando o mapa com visão meio 3D Trophy11Deixando o mapa com visão meio 3D 94Jxv
    Mensagens : 1859
    Créditos : 134

    Deixando o mapa com visão meio 3D Empty Deixando o mapa com visão meio 3D

    Mensagem por FilipeJF Dom Abr 03, 2011 3:23 pm

    Um script para deixar o mapa do seu jogo 3D, com ele você pode fazer mapas semelhante ao de baixo:
    Deixando o mapa com visão meio 3D Grasslandvp3

    Instruções:
    -Faça
    um mapa com qualquer nome e coloque o comando após o nome do mapa:
    #[XX] sendo XX a porcentagem de inclinação do mapa, aconselho algo em
    torno de 20 e 40.
    -Para deixar o char pequeno que nem num mapa mundi coloque o comando após o #[XX] ou após o nome do mapa: [OV]
    -O seu mapa poderá aparecer uma área em preto, para tirar isso coloque um panorama no mapa.



    =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 = RPG::Cache.autotile($game_map.autotile_names)
    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
    [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]


    coloque ele no main acima do main


    Olhe

    alias initialize_mode7_game_temp initialize
    def initialize
    initialize_mode7_game_temp
    self.pivot = 0
    self.cos_angle = 0.0
    self.sin_angle = 0.0
    self.height_limit = 0
    self.distance_h = 0
    self.slope_value = 0.0
    self.corrective_value = 0.0
    self.height = 0
    end
    end
    ___________________________________________aqui abaixo é main acima é mode 7________________________________
    #==============================================================================
    # Main
    #------------------------------------------------------------------------------
    # Após o final de cada definição de classe o processo principal
    # do jogo é iniciado. Esta é a classe principal do jogo.
    #==============================================================================
    Créditos:
    Reino RPG


    _________________

    Deixando o mapa com visão meio 3D Atpqp
    O Equívoco do Sábio - conto na Amazon
    Kushiki Byakuya
    Kushiki Byakuya
    Iniciante
    Iniciante


    Mensagens : 67
    Créditos : 24

    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por Kushiki Byakuya Dom Abr 03, 2011 4:18 pm

    cara nao entendi nada pq voce nao poem uma demo para facilitar


    _________________
    Deixando o mapa com visão meio 3D Userban
    Kuraudo
    Kuraudo
    Colaborador
    Colaborador


    Medalhas : Deixando o mapa com visão meio 3D Trophy11Deixando o mapa com visão meio 3D 94Jxv
    Mensagens : 961
    Créditos : 75

    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por Kuraudo Dom Abr 03, 2011 6:01 pm

    Este sistema e veio de+++ XD

    Ranny, ja q isso ta confuso basta por Neo Mode 7 no google q vc axa rapidin pa baixar uma demo

    Sabia que a Square usou um sistema igualiznho para o MAPAMUNDi em FFVI?


    _________________
    Antes de postar, leia as regras
    Deixando o mapa com visão meio 3D AIymW
    Fato Sobre George R. R. Martin:
    FilipeJF
    FilipeJF
    Aldeia Friend
    Aldeia Friend


    Medalhas : Deixando o mapa com visão meio 3D Trophy11Deixando o mapa com visão meio 3D 94Jxv
    Mensagens : 1859
    Créditos : 134

    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por FilipeJF Dom Abr 03, 2011 6:32 pm

    Kuraudo escreveu:Sabia que a Square usou um sistema igualiznho para o MAPAMUNDi em FFVI?

    Nossa eu não sabia, xD! É mesmo, pra mapa Mundi da tambem.


    _________________

    Deixando o mapa com visão meio 3D Atpqp
    O Equívoco do Sábio - conto na Amazon
    DevWithCoffee
    DevWithCoffee
    Membro Ativo
    Membro Ativo


    Mensagens : 294
    Créditos : 54

    Ficha do personagem
    Nível: 1
    Experiência:
    Deixando o mapa com visão meio 3D Left_bar_bleue0/0Deixando o mapa com visão meio 3D Empty_bar_bleue  (0/0)
    Vida:
    Deixando o mapa com visão meio 3D Left_bar_bleue30/30Deixando o mapa com visão meio 3D Empty_bar_bleue  (30/30)

    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por DevWithCoffee Dom Abr 03, 2011 10:23 pm

    isso não é 3D e nem meio 3D, isso é mode7, existem versões bem mais atuais deste sistema.


    Além do mais o seu tópico tá bem mal formatado, que tal usar a TAG
    [*code][*/code]

    SEM OS *(ASTERISTICOS)

    Alem do mais o modo que você postou as script nem funciona...
    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : Deixando o mapa com visão meio 3D ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por Valentine Dom Abr 03, 2011 10:29 pm

    É verdade Filipe, da uma melhorada no tópico pra ficar mais organizado

    Conteúdo patrocinado


    Deixando o mapa com visão meio 3D Empty Re: Deixando o mapa com visão meio 3D

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Mar 28, 2024 5:30 pm