I need isometric script for BABS

Started by Cazzochilegge, July 03, 2010, 04:53:35 am

Previous topic - Next topic

Cazzochilegge


Hi, I need a script compatible with Blizz abs to create an isometric game. I am using a script to the isometry of Dad, but it does not work properly with BABS. Someone was kind enough to modify this script making it functional?
Here is the script

Spoiler: ShowHide
#==============================================================================
# Mappe Isometriche - Autore: DaD, www.dermfxp.altervista.org
#==============================================================================
# In questo script sono andato a modificare le seguenti classi:
# Game_Map; Game_Character; Game_Player; Scene_Title;
# Spriteset_Map; Interpreter;
# Quindi se alcuni dei vostri script dovessero andare a modificare queste stesse
# classi è probabile che lo script non funzioni piu' come dovrebbe, cercherò di
# impostarlo in modo tale da farlo essere compatibile con altri script in futuro.
#==============================================================================
# Indicazioni: $game_map crea la mappa che servirà per la mappa isometrica 
# $game_map_iso crea la mappa isometrica
#==============================================================================

#==============================================================================
# - Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # - Movimento in giu
  #     distance : Distanza
  #--------------------------------------------------------------------------
  def scroll_down(distance)
    corr = (($game_map.height + $game_map.width)%2 == 0 ? 0 : 4*16)
    @display_y = [@display_y + distance, 128*$game_map_iso.height - 4*480 - corr].min
  end
  #--------------------------------------------------------------------------
  # - Movimento a destra
  #     distance : Distanza
  #--------------------------------------------------------------------------
  def scroll_right(distance)
    @display_x = [@display_x + distance, 128*$game_map_iso.width - 4 * 640].min
  end
end

#==============================================================================
# - Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # - Coordinate X Schermo
  #--------------------------------------------------------------------------
  def screen_x
    return  (@real_x - @real_y)/4 + 32*$game_map.height - 0 - $game_map.display_x/4
  end
  #--------------------------------------------------------------------------
  # - Coordinate Y Schermo
  #--------------------------------------------------------------------------
  def screen_y
    y = (@real_y + @real_x) / 8 + 24 - $game_map.display_y/4
    if @jump_count >= @jump_peak
      n = @jump_count - @jump_peak
    else
      n = @jump_peak - @jump_count
    end
    return y - (@jump_peak * @jump_peak - n * n) / 2
  end
  #--------------------------------------------------------------------------
  # - Coordinate Z Schermo
  #     height : Altezza del personaggio
  #--------------------------------------------------------------------------
  def screen_z(height = 0)
    if @always_on_top
      return 999
    end
    z = screen_y
    if @tile_id > 0
      return z + $game_map_iso.priorities[@tile_id] * 32
    else
      return z + ((height > 32) ? 31 : 0)
    end
  end
end

#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # In questa classe viene tattato il giocatore, gli spostamenti e il movimento
  # della mappa. Naturalmente sono stati modificati per lo script
  #--------------------------------------------------------------------------
  def update
    # Memorizza l'ultimo movimento se ci si sta muovendo
    last_moving = moving?
    unless moving? or $game_system.map_interpreter.running? or
           @move_route_forcing or $game_temp.message_window_showing
           # qui vengono settati i movimenti e le direzioni che prenderà il pg
           # alla pressione del tasto direzionale indicato.
      case Input.dir8
      when 1..2
        move_down
      when 3
        move_right
      when 4
        move_left
      when 7
        move_left
      when 6
        move_right
      when 8..9
        move_up
      end
    end
    # Le coordinate vengono memorizzate in variabili temporanee
    last_real_x = @real_x
    last_real_y = @real_y
    super
   
   
    disp_y = screen_y + $game_map.display_y/4
    disp_x = screen_x + $game_map.display_x/4
    if CENTER_Y - (4*disp_y - $game_map.display_y) < 0
      $game_map.scroll_down(4*disp_y - $game_map.display_y - CENTER_Y)
    end
    if CENTER_X - (4*disp_x - $game_map.display_x) > 0
      $game_map.scroll_left(CENTER_X - (4*disp_x - $game_map.display_x))
    end
    if CENTER_X - (4*disp_x - $game_map.display_x) < 0
      $game_map.scroll_right(4*disp_x - $game_map.display_x - CENTER_X)
    end
    if CENTER_Y - (4*disp_y - $game_map.display_y) > 0
      $game_map.scroll_up(CENTER_Y - (4*disp_y - $game_map.display_y))
    end
   
    # Quando non ci si sta muovendo
    unless moving?
       # Quando il movimento è appena finito
      if last_moving
        # Controllo eventi "Tocco con l'eroe" - "Collisione"
        result = check_event_trigger_here([1,2])
        # Se non ci sono eventi da eseguire
        if result == false
          # Se la modalità di debug è disattiva e non si sta premendo ctrl
          unless $DEBUG and Input.press?(Input::CTRL)
            # Conteggio incontri casuali
            if @encounter_count > 0
              @encounter_count -= 1
            end
          end
        end
      end
      # Quando C è premuto
      if Input.trigger?(Input::C)
        # Controlla esecuzione eventi
        check_event_trigger_here([0])
        check_event_trigger_there([0,1,2])
      end
    end
  end
end

#==============================================================================
# - Scene_Title
#==============================================================================
class Scene_Title
  alias main_orig main
  #--------------------------------------------------------------------------
  # Qui si va a trovare l'id della mappa affinchè si possa tovare la seconda
  # mappa, appunto quella con il titles isometrico
  #--------------------------------------------------------------------------
  def main
    # E' un aggiunta riguardante la seconda mappa, ovvero quella con il Titleset
    # isometrico, e rinominata iso.
    $data_map_infos        = load_data("Data/MapInfos.rxdata")
    main_orig
  end
end

#==============================================================================
# - Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # - Inizializzazione Oggetto
  #--------------------------------------------------------------------------
  def initialize
    # Creazione Livelli
    @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
    # Creazione Titlemap
    @tilemap = Tilemap.new(@viewport1)
    map_infos = $data_map_infos[$game_map.map_id]
    # Creazione Titlemap iso
    $game_map_iso = Game_Map.new
    $game_map_iso.setup(map_infos.parent_id)
    @tilemap.tileset = RPG::Cache.tileset($game_map_iso.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_iso.data
    @tilemap.priorities = $game_map_iso.priorities
    # Creazione Panorama
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # Creazione Nebbia
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # Creazione Chara
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    # Creazione effetti meteorologici
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    @weather = RPG::Weather.new(@viewport1)
    # Creazione Pictures
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    # Creazione Sprite del timer
    @timer_sprite = Sprite_Timer.new
    # Aggiornamento frame
    update
  end
  #--------------------------------------------------------------------------
  # Per trovare l'origine del panorama usato nella mappa isometrica bisogna
  # modificare questi due parametri.
  # @panorama.ox = $game_map.display_x / 4
  # @panorama.oy = $game_map.display_y / 4
  # in questo modo:
  # @panorama.ox = $game_map.display_y / 8
  # @panorama.oy = $game_map.display_y / 8
  #--------------------------------------------------------------------------
  def update
    # Quando cambia il panorama
    if @panorama_name != $game_map_iso.panorama_name or
       @panorama_hue != $game_map_iso.panorama_hue
       @panorama_name = $game_map_iso.panorama_name
       @panorama_hue = $game_map_iso.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
    # Quando cambia la nebbia
    if @fog_name != $game_map_iso.fog_name or @fog_hue != $game_map_iso.fog_hue
       @fog_name = $game_map_iso.fog_name
       @fog_hue = $game_map_iso.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
    # Aggiornamento Tile
    @tilemap.ox = $game_map.display_x / 4
    @tilemap.oy = $game_map.display_y / 4
    @tilemap.update
    # Aggiornamento Panorama
    @panorama.ox = $game_map.display_x / 4
    @panorama.oy = $game_map.display_y / 4
    # Aggiornamento Nebbia
    @fog.zoom_x = $game_map_iso.fog_zoom / 100.0
    @fog.zoom_y = $game_map_iso.fog_zoom / 100.0
    @fog.opacity = $game_map_iso.fog_opacity
    @fog.blend_type = $game_map_iso.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
    # Aggiornamento Chara
    for sprite in @character_sprites
      sprite.update
    end
    # Aggiornamento effetti meteorologici
    @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
    # Aggiornamento Picture
    for sprite in @picture_sprites
      sprite.update
    end
    # Aggiornamento sprite del timer
    @timer_sprite.update
    # Settaggio della tonalità e dell'effetto scuoti schermo
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # Settaggio del colore dell'effetto flash
    @viewport3.color = $game_screen.flash_color
    # Aggiornamento Livelli
    @viewport1.update
    @viewport3.update
  end
end

#==============================================================================
# - Interpreter
#------------------------------------------------------------------------------
# E' la classe che esegue i comandi degli eventi
# è usata in Game_System e in Game_Event
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # - Impostazioni Mappa
  #--------------------------------------------------------------------------
  def command_204
    case @parameters[0]
    when 0
      $game_map_iso.panorama_name = @parameters[1]
      $game_map_iso.panorama_hue = @parameters[2]
    when 1
      $game_map_iso.fog_name = @parameters[1]
      $game_map_iso.fog_hue = @parameters[2]
      $game_map_iso.fog_opacity = @parameters[3]
      $game_map_iso.fog_blend_type = @parameters[4]
      $game_map_iso.fog_zoom = @parameters[5]
      $game_map_iso.fog_sx = @parameters[6]
      $game_map_iso.fog_sy = @parameters[7]
    when 2
      $game_map_iso.battleback_name = @parameters[1]
      $game_temp_iso.battleback_name = @parameters[1]
    end
    return true
  end
  #--------------------------------------------------------------------------
  # - Cambia Tonalità Nebbia
  #--------------------------------------------------------------------------
  def command_205
    $game_map_iso.start_fog_tone_change(@parameters[0], @parameters[1] * 2)
    return true
  end
  #--------------------------------------------------------------------------
  # - Cambia Opacità Nebbia
  #--------------------------------------------------------------------------
  def command_206
    $game_map_iso.start_fog_opacity_change(@parameters[0], @parameters[1] * 2)
    return true
  end
end

#==============================================================================
# Istruzioni per l'uso
#==============================================================================
# Lo sript è molto semplice da utilizzare, innanzitutto ogni qual volta che
# andrete a ricreare una mappa isometrica dovrete, creare due mappe, la prima
# sarà costituita dal titleset isometrico, che dovrete chiamare
# [Nome della mappa]Iso dopodiche potrete andare a ricreare la
# seconda mappa con gli eventi e tutto quello di cui avrete bisogno
# al suo interno, il nome della seconda mappa, dovrà essere uguale a quello
# della mappa a cui vorrete associare il titleset isometrico.
# Esempio:
# Mappa con Tileset isometrico ===> TestIso
# Mappa con Tileset Normale    ===> Test
# Nota: Non avrete bisogno di settare il tileset isometrico, perchè basterà
# mettere degli eventi o parti di tileset non trapassabili per non far passare
# il chara, dove voi non vorrete che passi.
# Esempio:
# Mappa con Tileset isometrico ===> Albero che viene trappasato
# Mappa con Tileset Normale    ===> Evento non trapassabile
# In questo modo anche se l'albero è trapassabile, non verrà attraversato dal
# chara perchè nella seconda mappa avrete inserito un evento per bloccare
# il passagio del vostro pg.
# Nota 2: In questo script vanno bene qualsiasi chara (non ho provato quelli a
# 9 frame però) quindi non dovrebbero esserci problemi di alcun tipo, anche se
# non escludo che in futuro possa creare dei chara appositi per questo script.
# Credo di aver detto tutto quindi se avrete problemi potete contattarmi su
# www.dermfxp.altervista.org oppure su www.rpgshrine.altervista.org.
#==============================================================================
# Fine
#==============================================================================

Silentknight72

Blizz ABS + NM7

NM7 can make an isometric view.
please search before posting.
Sigs: ShowHide






Cazzochilegge

Thanks, but I do not need this script! I need someone to DAD as compatible but I did titleset of isometric and I need the script to the isometric movement.

Example: This is an isometric map!


Silentknight72

Well, It looks like GubiD's tileset and ISO script.....
Sigs: ShowHide






Cazzochilegge

O_o I had already said that I need an ISO-compatible script Babs. because the script creates problems: the "camera" that frames the pg is not always on it remains at the center of the map, and also the damage can not be seen or shown out of the battle.


Silentknight72

July 07, 2010, 12:35:42 am #6 Last Edit: July 07, 2010, 12:40:13 am by Silentknight72
Sigs: ShowHide