Pytania o mechanikę i ABS
Aktualny czas: 28-04-26, 22:19 Witaj! Przejdź do zakładki Logowanie lub Rejestracja


Wątek zamknięty 
[XP] Pytania o mechanikę i ABS
RGR7 Offline
*


Liczba postów: 42
Dołączył: 05-04-15

Pomógł: 3



Post: #1
pytajnik Pytania o mechanikę i ABS

Nie znam się na Rubie, skryptach i zdarzeniówkach, ale wiem, że bez kilku optymalizacji itp gra byłaby nudna i szara. Dlatego potrzebuję kilku rzeczy...
1. Umiem już robić tak, aby w pokoju było ciemno. Chciałbym jednak, aby np. Świeczka/lampa/ognisko itp wydzielało światło. Jak to jednak zrobić?
2. Mam pomysł, by nad grafiką zdarzenia napisane było np. Marian, Andrzej, drzwi, skrzynia... Podeślijcie mi ten skrypt, czy co to tam jest (rozwiąrozanie to może być podobne chociażby do tego z Margonem).
3. Nie podoba mi się podstawowy system walki w RM XP, a znalazłem całkiem fajny ABS, RTH ABS, ale nie umiem go zainstalować, czy coś... Byłbym wdzięczny gdybyście mi to wytłumaczyli, przy okazji powiedzieli jak go obsługiwać.
Na teraz tyle, ale mam jeszcze parę pomysłów w głowie, także w najbliższym czasie jeszcze was spytam biggrin
09-05-15 22:37
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Revlis Offline
*


Liczba postów: 266
Dołączył: 04-03-15

Pomógł: 80



Post: #2
RE: Pytania o mechanikę i ABS

Jeśli chodzi o oświetlenie to mogę zaproponować coś takiego:
#==============================================================================
# ** Dynamic Lights
#------------------------------------------------------------------------------
# by kellessdee
# Version: 1.00
# Date: 23/05/2011
#------------------------------------------------------------------------------
# Version History:
#
#   1.00 - First release
#------------------------------------------------------------------------------
# Description:
#
#   Allows the user to set up dynamic lights on the game map
#------------------------------------------------------------------------------
# Compatibility:
#
#------------------------------------------------------------------------------
# Instructions:
#
#   To create an event as a light source, create an event and set the first
#   command as a comment. The syntax is as follows:
#       render_light filename
#       radius
#       tone_red tone_green tone_blue
#       flicker
#       glow
#       brightness
#------------------------------------------------------------------------------
# Parameters:
#
#   filename      :the light picture file
#   radius        :radius in pixels
#   tone_red      :tone red value to be mixed (0 - 255)
#   tone_green    :tone green value to be mixed (0 - 255)
#   tone_blue     :tone blue value to be mixed (0 - 255)
#   flicker       :type true if you want the lights to flicker
#   glow          :type true if you want the lights to glow
#   brightness    :the brightness of the light source (0 - 255)
#------------------------------------------------------------------------------
# Notes:
#
#   Any questions, comments or issues you may reach me at:
#
#     kellessdee@gmail.com
#     http://www.rmxpunlimited.com/forums (look for kellessdee)
#     http://wakingdreams.weebly.com/
#
#==============================================================================

#==============================================================================
# ** Sprite_Light_Source
#------------------------------------------------------------------------------
#   Displays the light on the screen
#==============================================================================
class Light_Source < Sprite
  #----------------------------------------------------------------------------
  # * Constants
  #----------------------------------------------------------------------------
  DEFAULT = 'light_render'
  #----------------------------------------------------------------------------
  # * Public Instance Variables
  #----------------------------------------------------------------------------
  attr_accessor :event
  #----------------------------------------------------------------------------
  # * Object Initialization
  #----------------------------------------------------------------------------
  def initialize(event, radius, tone, flicker, glow, brightness, filename)
    super()
    self.z = 1000
    self.tone = tone
    self.opacity = brightness
    self.x = (event.real_x - radius * 2 - $game_map.display_x) / 4 + 12
    self.y = (event.real_y - radius * 2 - $game_map.display_y) / 4 + 6
    bmp = filename == nil ? RPG::Cache.picture(DEFAULT) : RPG::Cache.picture(filename)
    self.bitmap = Bitmap.new(radius, radius)
    self.bitmap.stretch_blt(Rect.new(0, 0, radius, radius), bmp, bmp.rect)
    @radius = radius
    @brightness = brightness
    @event = event
    @flicker = flicker
    @glow = glow
    @step = 0.001
    @flicker_count = -1
    @count = 0
  end
  #----------------------------------------------------------------------------
  # * Update Frame
  #----------------------------------------------------------------------------
  def update
    # Update flicker effect
    if @flicker
      self.opacity += rand(5) * @flicker_count
      @flicker_count = -@flicker_count if self.opacity >= @brightness || self.opacity <= 0
    end
    # Update Glow effect
    if @glow
      self.zoom_x += @step
      self.zoom_y += @step
      @count += 1
      if @count == 220
        @step = -@step
        @count = 0
      end
    end
    self.x = (@event.real_x - (@radius * 2).to_f * self.zoom_x - $game_map.display_x) / 4 + 12
    self.y = (@event.real_y - (@radius * 2).to_f * self.zoom_y - $game_map.display_y) / 4 + 6
  end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
#   Redefine initialization to create light array
#   Redefine update to update light array
#   Redefine dispose to destroy light array
#   Added render light method to set up light array
#==============================================================================
class Spriteset_Map
  #----------------------------------------------------------------------------
  # * Method Aliases
  #----------------------------------------------------------------------------
  unless self.method_defined?(:new_light_render_init)
    alias :new_light_render_init :initialize
  end
  unless self.method_defined?(:new_light_render_updt)
    alias :new_light_render_updt :update
  end
  unless self.method_defined?(:new_light_render_disp)
    alias :new_light_render_disp :dispose
  end
  #----------------------------------------------------------------------------
  # * Object Initialization
  #----------------------------------------------------------------------------
  def initialize
    @light_source = []
    render_light_source
    new_light_render_init
  end
  #----------------------------------------------------------------------------
  # * Update Frame
  #----------------------------------------------------------------------------
  def update
    @light_source.each {|light| light.update } unless @light_source == []
    new_light_render_updt
  end
  #----------------------------------------------------------------------------
  # * Dispose Object
  #----------------------------------------------------------------------------
  def dispose
    new_light_render_disp
    @light_source.each {|light| light.dispose }
    @light_source = []
  end
  #----------------------------------------------------------------------------
  # * Render Light Source
  #----------------------------------------------------------------------------
  def render_light_source
    $game_map.events.values.each {|event|
      next if event.list == nil
      if event.list[0].code == 108 && event.list[0].parameters[0].split[0] == 'render_light'
        # Get file name
        filename = event.list[0].parameters[0].split[1]
        parms = []
        (1..5).each {|i|
          if event.list[i].code == 108
            parms << event.list[i].parameters
          end
        }
        5.times {|i| parms[i] = [0] if parms[i] == [nil] }
        # Get Radius
        rad = parms[0][0].to_i
        t = parms[1][0].split
        ton = Tone.new(-t[0].to_i, -t[1].to_i, -t[2].to_i)
        fli = (parms[2] == ['true'])
        glo = (parms[3] == ['true'])
        bri = parms[4][0].to_i
        @light_source << Light_Source.new(event, rad, ton, fli, glo, bri, filename)
        @light_source << Light_Source.new(event, rad + 50, ton, fli, glo, bri - 25, filename)
        @light_source << Light_Source.new(event, rad + 100, ton, fli, glo, bri - 50, filename)
      end
    }
  end
end
W skrócie, skrypt pozwala na stworzenie światła o różnych barwach lub efektu migania (jak u świeczki o którą Ci chodzi). Tworzysz zdarzenie które ma emitować światło, a następnie dopisujesz do niego 6 komentarzy. Każda linijka będzie zawierała informacje o tym, jak owe światło ma się zachowywać - jaki ma mieć zasięg, barwę, jasność, czy ma migotać itp.

Instrukcja jest w skrypcie, a demo można pobrać tutaj:
http://dl.dropbox.com/u/30100812/DynamicLighting.rar

Źródło:
http://www.gdunlimited.net/forums/topic/...g-effects/

Skryptu na nazwy nad zdarzeniami nie trzeba było daleko szukać, bo jeden zakurzył się na starej ultimie. Proszę:
#===============================================================
# [XP] Unoszące się nazwy zdarzeń
# Skrypt wyświetla na mapie nazwy zdarzeń.
# Skrypt przerobiony z wersji VX na XP by Ayene
#--------------------------------------------------------------
# Autor VX: Woratana [woratana@hotmail.com]
# Tłumaczenie i poprawki: Ayene [yurika@o2.pl]
#--------------------------------------------------------------
# Umieść skrypt nad Main
#=================================================================
module Ayene    
  KOLOR_CZCIONKI = Color.new(0,0,127, 255)  # Kolor RGB i przezroczystość 0~255
  ROZMIAR_CZCIONKI = 16                     # Rozmiar czcionki
  NAZWA_CZCIONKI = "Arial"                  # Czcionka (folder Fonts)
  KURSYWA = false                           # Kursywa (true / false)
  POGRUBIENIE = false                       # Pogrubienie (true / false)
end

class Sprite_Character < RPG::Sprite
#=================================================================
# POCZĄTEK KONFIGURACJI    
#=================================================================
  FLOAT_NAME_SHOW_ALL = false
  # Czy chcesz, aby wyświetlały się nazwy wszystkich zdarzeń?
  # (true - tak / false - nie)
  
  # Jeżeli wybrano u góry false, nazwę zdarzenia można wyświetlić dopisując [FS]
  # w jego edycji...
  # np. Statek[FS]
  FLOAT_NAME_SHOW_TAG = '[FS]'    
  
  # Jeżeli wybrano u góry true, nazwę zdarzenia można ukryć dopisując [FNS]
  # w jego edycji...
  # np. Statek[FNS]
  FLOAT_NAME_NOT_SHOW_TAG = '[FNS]'
  
  # Tutaj można ukryć słowa, które mają się nie wyświetlać w nazwie zdarzenia
  # np. FLOAT_NAME_NOT_SHOW_WORDS = ['[ny]', '[ss]', 'lol']
  # Wówczas w nazwie zdarzenia nie wyświetlą się słowa [ny], [ss] i lol.
  FLOAT_NAME_NOT_SHOW_WORDS = []
  
  FLOAT_NAME_X_OFFSET = 10 # Przesunięcie nazwy zdarzenia w poziomie (+ / -)
  FLOAT_NAME_Y_OFFSET = 0 # Przesunięcie nazwy zdarzenia w pionie (+ / -)
  FLOAT_NAME_Z = 198 # Przesunięcie nazwy zdarzenia nad (+) lub pod (-) inne zdarzenia.
#=================================================================
# KONIEC KONFIGURACJI
#=================================================================
  alias wora_floatevn_sprcha_dis dispose
  alias wora_floatevn_sprcha_upd update
  
  def dispose
    if !@charname_box.nil? and @charname_box.is_a?(Sprite)
      @charname_box.bitmap.dispose
      @charname_box.dispose
    end
    wora_floatevn_sprcha_dis
  end
  
  def update
    wora_floatevn_sprcha_upd
    if @character.is_a?(Game_Event)
      if @charname_box.nil?
        if (FLOAT_NAME_SHOW_ALL and !@character.event.name.include?(FLOAT_NAME_NOT_SHOW_TAG)) or
        (!FLOAT_NAME_SHOW_ALL and @character.event.name.include?(FLOAT_NAME_SHOW_TAG))
          @float_charname = @character.event.name.dup
          not_show_words = FLOAT_NAME_NOT_SHOW_WORDS.clone.push FLOAT_NAME_SHOW_TAG,
        FLOAT_NAME_NOT_SHOW_TAG
          not_show_words.each {|w| @float_charname.gsub!(w) {''} }          
          @charname_box = Sprite.new          
          @charname_box.z = FLOAT_NAME_Z
          bitmap = Bitmap.new(1,1)
          nsize = bitmap.text_size(@float_charname)
          bitmap.dispose          
          @charname_box.bitmap = Bitmap.new(nsize.width, nsize.height)
          @charname_box.bitmap.font.color = Ayene::KOLOR_CZCIONKI
          @charname_box.bitmap.font.size = Ayene::ROZMIAR_CZCIONKI
          @charname_box.bitmap.font.name = Ayene::NAZWA_CZCIONKI
          @charname_box.bitmap.font.italic = Ayene::KURSYWA
          @charname_box.bitmap.font.bold = Ayene::POGRUBIENIE          
          @charname_box.bitmap.draw_text(0, 0, nsize.width, nsize.height, @float_charname)            
        else
          @charname_box = 0
        end        
      end
      if @charname_box.is_a?(Sprite)
      #  @charname_box.x = self.x  + FLOAT_NAME_X_OFFSET
     #   @charname_box.y = self.y  + FLOAT_NAME_Y_OFFSET
       @charname_box.x = self.x  - (@charname_box.bitmap.width / 2) + FLOAT_NAME_X_OFFSET
      @charname_box.y = self.y - self.oy - @charname_box.bitmap.height + FLOAT_NAME_Y_OFFSET
      end
    end
  end
end

class Game_Event < Game_Character
  attr_reader :event
end
Instrukcja w skrypcie jest po polsku, więc nie powinno być problemu z jego używaniem.

Źródło:
http://www.ultimateam.pl/viewtopic.php?t=2430
(Ten post był ostatnio modyfikowany: 09-05-15 23:05 przez Revlis.)
09-05-15 22:59
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
ShiroĒsu Offline
*


Liczba postów: 42
Dołączył: 19-02-15

Pomógł: 6



Post: #3
RE: Pytania o mechanikę i ABS

Nie mam nic do używania cudzych skryptów, ale powinny one być używane z rozwagą. Nie powinny one budować całej mechaniki gry a co najwyżej poszerzać opcję programu, bądź "ozdabiać" grę. W tym momencie kiedy nie umiesz używać tego programu, ta prośba wygląda mniej więcej tak: "Chce stworzyć grę ale nie umiem, podeślijcie mi gotową to se poszpanuje".
Tworzenie gry nie opiera się na wklejaniu cudzych mechanik a na robieniu własnych.

Jeżeli myślisz że czegoś nie osiągniesz, masz rację niczego nie osiągniesz tak myśląc.
10-05-15 00:48
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Kryzz333 Offline
*


Liczba postów: 209
Dołączył: 15-01-15

Pomógł: 44



Post: #4
RE: Pytania o mechanikę i ABS

Chyba przesadzasz... Skrypty o które prosił w zasadzie nic mu nie dają.
Równie dobrze mógłby użyć normalnego BS-a, a i tak jeśli nie ma skilla to mu nic to nie da...


@RGR7:
Nie znalazłem innej niż portugalska wersji RTH.
Aby zainstalować po prostu przekopiuj w odpowiedniej kolejności wszystkie części skryptu z dołączonego demka do Skryptów, nad Main.

Studiując demko na pewno domyślisz się jak on działa. Elementy skryptu w Ruby i tak są po angielsku, to możesz się domyślić co robią. Zresztą portugalskie napisy też nie trudno rozszyfrować.


Osobiście nie polecam skryptu. ABS-y dla RM są cienkie po prostu i trzeba się męczyć z ich ogarnianiem.
10-05-15 01:09
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
RGR7 Offline
*


Liczba postów: 42
Dołączył: 05-04-15

Pomógł: 3



Post: #5
RE: Pytania o mechanikę i ABS

Dzięki panowie biggrin oszczędziliście mi wiele czasu, a przy okazji zdobyłem to, czego zawsze mi brakowało razz

Co do komentarza, że chcę zaszpanować robiąc grę, mogę jedynie powiedzieć, że się mylisz. Pytam o takie małe rzeczy, poprawiające jakość gry. Nie proszę was o gotowe systemy tworzenia... czegoś trudnego. Akurat nic mi nie przychodzi do głowy. Moją przygodę z RM zacząłem dość niedawno i nie mam czasu, by uczyć się Ruby, więc korzystam z forum. Chyba od tego jest, prawda?

Dzięki za opinię na temat ABS - system ten spodobał mi się w tym https://youtu.be/YWvW9srnIXQ filmiku. Chcę przetestować go i parę innych, a w końcu wybiorę ten najbardziej pasujący do lokacji, które tworzę.
Jeszcze raz dzięki mrgreen
10-05-15 11:11
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
ShiroĒsu Offline
*


Liczba postów: 42
Dołączył: 19-02-15

Pomógł: 6



Post: #6
RE: Pytania o mechanikę i ABS

Faktycznie trochę przesadziłem. W gruncie rzeczy chodziło mi o to abyś zaczął od tworzenia własnych systemów, a dopiero w późniejszym etapie tworzenia gry skorzystał ze skryptów. Nie musisz się do tego stosować, to tylko swego rodzaju ostrzeżenie. Osobiście zaczynałem tak samo jak ty i nie wyszło mi to na dobre skończyłem z kilkoma projektami napchanymi skryptami nadal nie umiejąc zrobić prostego systemu, ponieważ większość czasu spędziłem na szukaniu skryptów.
Podsumowując lepiej zacznij od poradników do zdarzeń czy rgss, a dopiero potem pobaw się cudzymi systemami.

Jeżeli myślisz że czegoś nie osiągniesz, masz rację niczego nie osiągniesz tak myśląc.
10-05-15 11:25
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
RGR7 Offline
*


Liczba postów: 42
Dołączył: 05-04-15

Pomógł: 3



Post: #7
RE: Pytania o mechanikę i ABS

Nie czuję się urażony, ani nic ShiroEsu ;-) Dzięki za opinię, jestem otwartym człowiekiem i umiem uczyć się na cudzym doświadczeniu i błędach :-) Może faktycznie przystopuję z samą grą, bo fabuła, postacie, itemki i początkowe lokacje są już zrobione. Trzeba je teraz wypełnić treścią i ciekawą mechaniką. Przysiądę dziś do RGSSa i spróbuję już was nie nękać moim lenistwem i niewiedzą mrgreen
10-05-15 12:52
Znajdź wszystkie posty użytkownika
"Pomógł" przyznał(a):
Wątek zamknięty 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Kontakt | Ultima Forum | Wróć do góry | Wróć do forów | Wersja bez grafiki | RSS
Powered By MyBB. © 2013 MyBB Group. All Rights Reserved.
Skórka by Ayene.