UltimaForum

Skrypty [VX] - Tło walki

Ayene - Sro 16 Wrz, 2009 09:57
Temat postu: Tło walki
~ Tło walki ~

Krótki opis
Skrypt pozwala na zmianę tła walki oraz przyporządkowanie poszczególnych obrazków tła do konkretnej mapy. Ponadto zawiera opcję wyłączenia podłoża walki (BattleFloor).

Autor skryptu
Claimh

Poprawki
Ayene [yurika@o2.pl]

Kompatybilność
Tylko VX.

Skrypt
Spoiler:

Kod:
# ==============================================================================
#                             ~ Tło walki ~
#                       Data publikacji: 16.09.2009
#                          Autor: Claimh
#               Tłumaczenie i poprawki: Ayene [yurika@o2.pl]
#          Zapraszam na stronę UltimaForum - http://www.ultimateam.pl
# ==============================================================================
# Instalacja: Umieść ten skrypt nad Main w Edytorze Skryptu.
# ==============================================================================
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# --------------------------- POCZĄTEK SKRYPTU ---------------------------------
module BattleBack
# ---------------------------- POCZĄTEK EDYCJI --------------------------------- 
# Poniżej możesz ustawić rodzaj tła walki:
  #   0 -> falujące tło (domyślne w VX)
  #   1 -> tłem jest mapa, na której walka ma miejsce
  #   2 -> tłem walki jest obrazek (patrz niżej M_B_BACK)
  BB_TYPE = 2
 
# Wyświetlanie podłoża (obrazka o nazwie 'BattleFloor' w folderze 'System')
  #   true -> wyświetla
  #   false -> nie wyświetla
  BT_FLOOR = false

# Tło walki w postaci obrazka (BB_TYPE = 2)
  M_B_BACK = {
    # ID mapy => nazwa obrazka z folderu 'Graphics/System'            
    0 => "mapa_0", # 0 => domyślnie dla map, którym nie ustawiono innego tła.
    1 => "mapa_1",       
    3 => "mapa_3"
  }
  # (optymalna wielkość grafiki to 544 x 416 px; format -> PNG i JPG)

# ----------------------------- KONIEC EDYCJI ---------------------------------- 
end

# -----------NIE EDYTUJ PONIŻEJ, CHYBA ŻE WIESZ CO ROBISZ ^^--------------------
#==============================================================================
# ¦ Klasa Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # Tło walki
  #--------------------------------------------------------------------------
  def create_battleback
    case BattleBack::BB_TYPE
    when 0
      source = $game_temp.background_bitmap
      bitmap = Bitmap.new(640, 480)
      bitmap.stretch_blt(bitmap.rect, source, source.rect)
      bitmap.radial_blur(90, 12)
      @battleback_sprite = Sprite.new(@viewport1)
      @battleback_sprite.bitmap = bitmap
      @battleback_sprite.ox = 320
      @battleback_sprite.oy = 240
      @battleback_sprite.x = 272
      @battleback_sprite.y = 176
      @battleback_sprite.wave_amp = 8
      @battleback_sprite.wave_length = 240
      @battleback_sprite.wave_speed = 120
    when 1
      source = $game_temp.background_bitmap
      bitmap = Bitmap.new(640, 480)
      bitmap.stretch_blt(bitmap.rect, source, source.rect)
      @battleback_sprite = Sprite.new(@viewport1)
      @battleback_sprite.bitmap = bitmap
      @battleback_sprite.ox = 320
      @battleback_sprite.oy = 240
      @battleback_sprite.x = 272
      @battleback_sprite.y = 176
    when 2
      @battleback_sprite = BattleBackSprite.new(@viewport1)
    end
  end
  #--------------------------------------------------------------------------
  # Wgranie podłoża walki -> 'BattleFloor'
  #--------------------------------------------------------------------------
  alias create_battlefloor_mbb create_battlefloor
  def create_battlefloor
    create_battlefloor_mbb if BattleBack::BT_FLOOR
  end
  #--------------------------------------------------------------------------
  # Koniec walki -> Zamknięcie 'BattleFloor'
  #--------------------------------------------------------------------------
  alias dispose_battlefloor_mbb dispose_battlefloor
  def dispose_battlefloor
    dispose_battlefloor_mbb if BattleBack::BT_FLOOR
  end
  #--------------------------------------------------------------------------
  # Aktualizacja podłoża walki -> Odświeżenie 'BattleFloor'
  #--------------------------------------------------------------------------
  alias update_battlefloor_mbb update_battlefloor
  def update_battlefloor
    update_battlefloor_mbb if BattleBack::BT_FLOOR
  end
end


#==============================================================================
# ¦ Klasa BattleBackSprite
#==============================================================================
class BattleBackSprite < Sprite
  # Wielkość okna z tłem
  WIDTH  = 544.00
  HEIGHT = 288.00
  #--------------------------------------------------------------------------
  # Rozpoczęcie
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    if $BTEST
      self.bitmap = Cache.system(BattleBack::M_B_BACK[0])
    elsif BattleBack::M_B_BACK[$game_map.map_id].nil?
      self.bitmap = Cache.system(BattleBack::M_B_BACK[0])
    else
      self.bitmap = Cache.system(BattleBack::M_B_BACK[$game_map.map_id])
    end
    # Dopasowanie tła w szerokości i wysokości
    @x_zoom = WIDTH / self.bitmap.width
    @y_zoom = HEIGHT / self.bitmap.height
    @zoom = @x_zoom > @y_zoom ? @x_zoom : @y_zoom
    # Zoom -> przybliżenie
    self.zoom_x = @zoom
    self.zoom_y = @zoom
    # Pozycja tła -> wycentrowanie tła
    self.ox = self.bitmap.width / 2
    self.oy = self.bitmap.height / 2
    self.x = (self.bitmap.width / 2)  * @zoom
    self.y = (self.bitmap.height / 2) * @zoom
  end
end
# --------------------------- KONIEC SKRYPTU -----------------------------------


Demo
niepotrzebne

Screenshot
Spoiler:


Domyślne tło walki


Tłem jest mapa, na której walka ma miejsce


Tłem walki jest ustawiony w skrypcie obrazek


Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.

Piszcie w razie problemów.

Hemp Gru - Wto 12 Sty, 2010 23:07

Ej skąd wziąc te tła????????
bionicl - Wto 12 Sty, 2010 23:52

Najlepiej z XP-ka... Jeżeli nie masz, to ściągnij RTP...
Hemp Gru - Sro 13 Sty, 2010 09:09

Kurcze no jak wklejam do vx to przy walce wyświetla mi się tylko połowa tła :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/
Ayene - Sro 13 Sty, 2010 16:01

Jasiekrpg, wystarczy przeczytać instrukcję zawartą w skrypcie:
Kod:
(optymalna wielkość grafiki to 544 x 416 px; format -> PNG i JPG)

dawidos989 - Czw 04 Lut, 2010 17:17

a jak to dodać? to tło
bionicl - Czw 04 Lut, 2010 17:21

Cytat:
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.


Domyśl się...

dawidos989 - Czw 04 Lut, 2010 17:22

tak tylko że nie kumam nic z niego nie kumam
Ayene - Czw 04 Lut, 2010 18:20

Przeczytaj dokładnie część konfiguracji skryptu, a dokładnie tę część:
Kod:
# Tło walki w postaci obrazka (BB_TYPE = 2)
  M_B_BACK = {
    # ID mapy => nazwa obrazka z folderu 'Graphics/System'           
    0 => "mapa_0", # 0 => domyślnie dla map, którym nie ustawiono innego tła.
    1 => "mapa_1",       
    3 => "mapa_3"
  }

Valdali - Pon 19 Kwi, 2010 20:25

nie kumam tego :D. moze jestem ciemny. wytłumaczyłby mi ktoś jak to sie robi xd?
Drawestien - Pon 10 Sty, 2011 20:40

Bleah...szukałem tego a ty dopiero to na 5 stronie pozostawiasz bez opieki?
Nie będźie lizaka! :-PP :diabel:

Czeliosss - Pią 04 Lut, 2011 19:59

A ja mam prośbę. Czy dałoby radę zrobić, żeby ustawić odcień tła walki taki co jest np. ustawiony? Używam skryptu dnia i nocy.
Shlizer - Sob 05 Lut, 2011 01:43

Wszystko się da.. nawet na wiele sposobów. Odcień tła zmieniasz konwertując grafikę z RGB na HSB/HSL i zmieniając pierwszą wartość - hue.. brzmi groźnie, ale całe szczęście w RMXP (więc i zapewne VX) jest funkcja bitmap.hue_change(stopnie), gdzie stopnie to liczba z przedziału 0-360 (http://en.wikipedia.org/wiki/Hue).
Możesz też najzwyczajniej tylko przyciemnić obraz w zależności od pory dnia (nie znam tego skryptu, ale masz pewnie zmienną odpowiedzialną za sprawdzenie godziny/pory dnia). Wtedy rysujesz bitmapę wielkości pola bitwy, wypełniasz ją czarnym kolorem ( 'fill_rect(x, y, width, height, color)' lub 'fill_rect(rect, color)' ), a następnie zmieniasz opacity bitmapy (a w zasadzie sprite'a)..

sorry jeśli coś zamotałem albo źle zrozumiałem =p

jmielczarek7 - Nie 06 Lut, 2011 20:54

ja nie rozumiem jak mam ustawić to tło proszę o pomoc
Czeliosss - Nie 06 Lut, 2011 21:28

Shlizer, nie kapuję tego. Może Ayene dałaby radę to przerobić? Ja się na tym ruby nie znam.
jmielczarek7,
Cytat:
# Tło walki w postaci obrazka (BB_TYPE = 2)
M_B_BACK = {
# ID mapy => nazwa obrazka z folderu 'Graphics/System'
0 => "mapa_0", # 0 => domyślnie dla map, którym nie ustawiono innego tła.
1 => "mapa_1",
3 => "mapa_3"
}

Shlizer - Nie 06 Lut, 2011 22:26

Nie wiem jak wygląda skrypt dnia i nocy, do tego nie posiadam VX, ale spróbuj pobawić się wartościami tonu:
Kod:
  def create_battleback
    (...)
    @battleback_sprite.tone = Tone.new(-50,-50,-100)
  end


ew. drugi sposób (gorszy):
Kod:
  def create_battleback
    (...)
   
    dim = Bitmap.new
    dim.fill_rect(@battleback_sprite.src_rect, Color.new(0,0,0))
    # tu zmieniasz przezroczystość czarnej warstwy
    dim.opacity = 150
  end


W drugim wypadku wypada zwolnić jeszcze zasób, ale tym się nie przejmuj do czasu optymalizacji kodu =p
Mam nadzieję, że będzie działać, bo pisałem z głowy i dokumentacji..

Czeliosss - Pon 07 Lut, 2011 08:38

No może bym dał radę to wklepać, ale gorzej jest jak walczę np. w dzień, a mam odcień nocy.
Tutaj jest ten skrypt dnia i nocy.
http://www.ultimateam.pl/viewtopic.php?t=2128

Eleanor - Czw 05 Maj, 2011 13:35

Witam
Mam problem jak włączam gre to mi się pokazuje
Kod:
??? 'Tło walki' ? 32 ??? SyntaxError ???

w linijce 32 mam
Kod:
 5 => "mapa_6"

i chcę mieć to do mapy "Dróżka". (MAP002 to MAP001)

nie wiem, o co chodzi, proszę o pomoc.

Ayene - Czw 05 Maj, 2011 18:18

Pewnie brakuje przecinka na końcu wcześniejszej linijki. Patrzę jednak, że nie powinnam w ogóle udzielać odpowiedzi, bo masz "polskiego" makera, a jak wiadomo jest wersją piracką :!:
filiotef - Czw 11 Sie, 2011 19:46

Da się zrobić tak aby dane pole walki było w danym obszarze ?
jacorex1 - Pią 01 Cze, 2012 16:28

Super Skrypt ! Opanowałem w 100 % dzięki

Powered by phpBB modified by Przemo © 2003 phpBB Group