UltimaForum

Skrypty [XP] - Pomniejszenie/powiększenie zdarzeń na mapie [XP].

Sabikku - Pon 26 Lip, 2010 20:50
Temat postu: Pomniejszenie/powiększenie zdarzeń na mapie [XP].
~ Pomniejszenie/powiększenie zdarzeń na mapie [XP] ~


Krótki opis.
Prosty skrypt pozwalający ustawić zoom charactersów, dla każdej mapy osobno.

Autor skryptu.
Sabikku/slabix, czyli ja.

Kompatybilność.
Skrypt nie jest kompatybilny ze skryptami nadpisującymi 'update' klasy Sprite_Character. Tylko XP.

Skrypt.
Spoiler:

Kod:
# ================================================================
# Character Sizing Script.
# ----------------------------------------------------------------
# * by Sabikku
# * 26.07.10
# * zamthir.net/forum
# * ultimateam.pl
# ================================================================

class Game_Map
  # Initialize. --------------------------------------------------
  alias sab_initialize initialize
  def initialize
    sab_initialize
    @spritezoom_x=1
    @spritezoom_y=1
  end
 
  # Spritezoom_x/y. ----------------------------------------------
  def spritezoom_x
    return @spritezoom_x
  end
  def spritezoom_y
    return @spritezoom_y
  end
 
  # Setup. -------------------------------------------------------
  alias sab_setup setup
  def setup(map_id)
    sab_setup(map_id)
    for event in @map.events.values
      if event.name.gsub(/[0-9]+.[0-9]+/,'')=='zoom '
        @spritezoom_x = @spritezoom_y = (event.name.gsub(/zoom /,'')).to_f
      end
    end
  end
end

# ================================================================

class Sprite_Character < RPG::Sprite
  # Update. ------------------------------------------------------
  def update
    super
    # If tile ID, file name, or hue are different from current ones
    if @tile_id != @character.tile_id or
       @character_name != @character.character_name or
       @character_hue != @character.character_hue
      # Remember tile ID, file name, and hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      # If tile ID value is valid
      if @tile_id >= 384
        self.bitmap = RPG::Cache.tile($game_map.tileset_name,
          @tile_id, @character.character_hue)
        self.src_rect.set(0, 0, 32, 32)
        self.ox = 16
        self.oy = 32
      # If tile ID value is invalid
      else
        self.bitmap = RPG::Cache.character(@character.character_name,
          @character.character_hue)
        self.zoom_x = $game_map.spritezoom_x # <-----
        self.zoom_y = $game_map.spritezoom_y # <-----
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
      end     
    end
    # Set visible situation
    self.visible = (not @character.transparent)
    # If graphic is character
    if @tile_id == 0
      # Set rectangular transfer
      sx = @character.pattern * @cw
      sy = (@character.direction - 2) / 2 * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
    end
    # Set sprite coordinates
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    # Set opacity level, blend method, and bush depth
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    # Animation
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
  end
end

# ================================================================



Instrukcja.
Jeśli zdarzenia mapy mają być powiększone/pomniejszone, wystarczy do nazwy któregokolwiek ze zdarzeń na tej mapie wstawić tekst:
Kod:
zoom liczba

gdzie 'liczba' jest mnożnikiem wielkości. 1 to standardowa wielkość, 0.5 - dwa razy mniejsza, 2 - dwa razy większa itd. Zmianie nie ulegają charactersy z grafiką z tilesetu.

Screenshot.
Spoiler:



Agumon - Wto 27 Lip, 2010 12:41

A ja mam pytanie to powiększa lub pomniejsza zdarzenia czy całą mapę????
Sabikku - Wto 27 Lip, 2010 13:15

Cytat:
mam pytanie to powiększa lub pomniejsza zdarzenia czy całą mapę????

\/

Cytat:
Pomniejszenie/powiększenie zdarzeń na mapie [XP]

Agumon - Wto 27 Lip, 2010 15:24

Aha nie doczytałem. Sory za problem.
poko67 - Wto 27 Lip, 2010 16:05

tzn że na przykład zdarzenie evo0001 i dopisać zoom 1 np??
Sabikku - Wto 27 Lip, 2010 20:25

Yyy, w dowolnym zdarzeniu danej mapy, w polu 'nazwa' / 'name' wpisujesz "zoom 1" (przy czym 1 to domyślna wartość i nic się nie zmieni). Nie dopisuj, usuń dotychczasową nazwę i wklej nową.

Nie chciałem robić odczytywania tagów z MapInfos (z nazw map), zabierałoby to za dużo niepotrzebnego miejsca w pamięci. Miałem nadzieję, że z wrzuceniem tekstu do nazwy zdarzenia problemów nie będzie.

poko67 - Pon 16 Sie, 2010 10:56

a może jakieś demo
Axer - Pon 16 Sie, 2010 12:08

xD
Uśmiałem się gdy czytałem post wyżej xD.
Po prostu, w nazwie zdarzenia wpisujesz zoom liczba. gdzie "liczba" wpisujesz jakąś liczbę.
Np. jeśli wpiszesz 2, to zdarzenie powiększy się dwa razy, jak 3, to trzy razy, itd.

poko67 - Pon 16 Sie, 2010 18:29

no spoko ale mi jakoś nic się nie działo
radek02 - Wto 17 Sie, 2010 07:03

można taki do vx przydatny do robienia fps'ów ( pokazuje wpierw położenie przeciwników i całą planszę )
Feniks - Pią 04 Mar, 2011 16:54

skrypt jest bardzo fajny i działa:P przyda mi się, gdyż krasnoludy są małe, a smoki wielkie ^^ dzięki za skrypt.
Fajak - Sob 05 Mar, 2011 09:03

Super skrypt :)
Chyba go użyję ;P

Valdali - Sob 05 Mar, 2011 10:32

Cytat:
no spoko ale mi jakoś nic się nie działo

yyyy. polski rpg maker xddd?

Feniks - Sob 05 Mar, 2011 12:26

rozpędziłem się z tamtym komentarzem, Sabbiku, edytowałbyś go tak, aby zmniejszał/powiększał tylko te zdarzenie gdzie wpisze zoom np. "2.33" bo nie przeczytałem ze zrozumieniem i myślałem że to powiększa/zmniejsza dane zdarzenie.
Xevo - Sob 05 Mar, 2011 17:39

A jak maksymalnie można powiększyć.
Sabikku - Sob 05 Mar, 2011 18:35

Cytat:
A jak maksymalnie można powiększyć.

Na tyle, na ile pozwala silniczek makera lub twoje zasoby sprzętowe - obstawiam 10-20.

Cytat:
rozpędziłem się z tamtym komentarzem, Sabbiku, edytowałbyś go tak, aby zmniejszał/powiększał tylko te zdarzenie gdzie wpisze zoom np. "2.33" bo nie przeczytałem ze zrozumieniem i myślałem że to powiększa/zmniejsza dane zdarzenie.

Nie mam humoru na testy, więc nie gwarantuję braku problemów, ale łap:
Spoiler:

Kod:
# ================================================================
# Character Resize Script.
# ----------------------------------------------------------------
# * by Sabikku
# * 26.07.10
# * zamthir.net/forum
# * ultimateam.pl
# ================================================================

class Game_Character
  attr_accessor :zoom
  alias zoomold_init initialize
  def initialize
    zoomold_init
    @zoom = 1.0
  end
end

class Game_Map
  # Setup. -------------------------------------------------------
  alias sab_setup setup
  def setup(map_id)
    sab_setup(map_id)
    for event in @map.events.values
      if event.name.gsub(/[0-9]+.[0-9]+/,'')=='zoom '
        @events[event.id].zoom = (event.name.gsub(/zoom /,'')).to_f
      end
    end
  end
end

# ================================================================

class Spriteset_Map
  # Initialize. --------------------------------------------------
  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 = 200
    @viewport3.z = 5000
    # Make tilemap
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.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.data
    @tilemap.priorities = $game_map.priorities
    # Make panorama plane
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # Make fog plane
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # Make character sprites
    @character_sprites = []
    for i in $game_map.events.keys.sort
      # -----
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i], zoom = $game_map.events[i].zoom)
      # -----
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $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
end

# ================================================================

class Sprite_Character < RPG::Sprite
  attr_accessor :zoom
  # Initialize. --------------------------------------------------
  alias zoomold_init initialize
  def initialize(a,b, zoom = 1.0)
    @zoom = zoom
    zoomold_init(a,b)
  end
 
  # Update. ------------------------------------------------------
  def update
    super
    # If tile ID, file name, or hue are different from current ones
    if @tile_id != @character.tile_id or
       @character_name != @character.character_name or
       @character_hue != @character.character_hue
      # Remember tile ID, file name, and hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      # If tile ID value is valid
      if @tile_id >= 384
        self.bitmap = RPG::Cache.tile($game_map.tileset_name,
          @tile_id, @character.character_hue)
        self.src_rect.set(0, 0, 32, 32)
        self.ox = 16
        self.oy = 32
      # If tile ID value is invalid
      else
        self.bitmap = RPG::Cache.character(@character.character_name,
          @character.character_hue)
        self.zoom_x = @zoom # <-----
        self.zoom_y = @zoom # <-----
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch
      end     
    end
    # Set visible situation
    self.visible = (not @character.transparent)
    # If graphic is character
    if @tile_id == 0
      # Set rectangular transfer
      sx = @character.pattern * @cw
      sy = (@character.direction - 2) / 2 * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
    end
    # Set sprite coordinates
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    # Set opacity level, blend method, and bush depth
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    # Animation
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
  end
end

# ================================================================


Feniks - Sob 05 Mar, 2011 19:21

działa, dzięki :)

Powered by phpBB modified by Przemo © 2003 phpBB Group