Dynamic BGS System (1.0)
- Dynamiczne dostosowywanie dźwięków tła (BGS)-
Tak jak wizualnie obraz przedstawia, im bohater bliżej jakiegoś zdarzenia, tym dźwięk BGS jest głośniejszy.
Kompatybilność: RPG Maker XP i RPG Maker XPA
Jak działa Dynamic BGS System 1.0?
Dynamic BGS System 1.0 oblicza odległość gracza od zdefiniowanych źródeł dźwięku, a następnie aktualizuje głośność dźwięku w czasie rzeczywistym, zapewniając płynne przejścia i naturalne doświadczenie audio.
Jak sami widzicie jest to dość dopieszczona rzecz. Oczywiście nie wykluczam w pszyszłości udoskonaleń tego skryptu, jednakowoż obecna jego forma jest wystarczająca, aby móc jej użyć. Charakterystyką tego kodu jak i poprzedniego jest fakt kompatybilności zarówno z RPG Maker XP jak i RPG Maker XPA. Bardzo ważne jest, by mimo domyślnego dystansu 15 kratek od źródła - ustawić ręcznie z pomocą zmiennej ID 12 (można zmienić) własną odległość dla bezpieczeństwa, by projektu nie wyrzucało do pulpitu (zwłaszcza jeśli korzystacie z XPA).
Najważniejsze cechy:
Głośność dźwięków otoczenia zmienia się w zależności od odległości gracza od źródła dźwięku. Dzięki temu, im bliżej gracz znajduje się do źródła, tym głośniejszy staje się dźwięk, a gdy oddala się, głośność stopniowo maleje.System pozwala na zdefiniowanie wielu źródeł dźwięku dla różnych map. Każde źródło można skonfigurować z unikalnymi współrzędnymi oraz nazwą pliku BGS, co daje ogromne możliwości personalizacji.Użytkownik może ustawić zarówno minimalną, jak i maksymalną głośność, zapewniając, że dźwięk nie stanie się zbyt cichy ani zbyt głośny w żadnej sytuacji.Dynamic BGS System 1.0 oferuje przełącznik (ID 10), który pozwala na łatwe włączanie lub wyłączanie skryptu, co daje deweloperom większą kontrolę nad doświadczeniem dźwiękowym w grze.Możliwość modyfikacji maksymalnego zasięgu, z jakiego dźwięk jest słyszalny, za pomocą zmiennej (ID 12), co pozwala na dynamiczne dostosowywanie w zależności od potrzeb rozgrywki.
Instalacja
1. Otwórz w RPG Maker XP edytor skryptu ruby (skrót: F11).
2. Przed sekcją
Main, utwórz nowy moduł i nazwij go np. DYNAMICBGS.
3. Do utworzonego powyższego modułu DYNAMICBGS wklej poniższy skrypt.
4. Zapisz zmiany (i skonfiguruj skrypt) i gotowe!
##########################################################
#Dynamic BGS System 1.0
#Haxo Game Studios
#System odpowiada za odtwarzanie BGS w zaleznosci od ogleglosci gracza od wskazanego zrodla dzwieku.
#
#Autor: Dawid Maxymilian Tomaszewski
#Adres mailowy: haxogamestudios@gmail.com
#Skrypt przeznaczony dla silnika RPG Maker XP i RPG Maker XPAce
#
#Licencja użytkowania skryptu "Dynamic BGS System 1.0"
#1. Postanowienia ogólne
#Niniejsza licencja reguluje zasady korzystania ze skryptu Dynamic BGS System w wersji 1.0,
#dalej zwanego "skryptem". Użytkownik, który korzysta ze skryptu, zgadza się na warunki niniejszej licencji.
#
#2. Zezwolenia
# - Korzystanie ze skryptu zarówno w grach komercyjnych, jak i niekomercyjnych.
# - Modyfikację kodu w celu dostosowania go do specyfiki projektu, pod warunkiem zachowania warunków licencji.
#
#3. Ograniczenia
# - Zakazuje się publikacji skryptu w tej lub zmodyfikowanej wersji na innych witrynach niż
# https://www.rpgmaker.pl/. Można uzyskać taką zgodę jedynie pisząc do mnie o udzielenie licencji zezwalającej
# na publikację w innym miejscu niż Twierdza.
# - Zakazuje się sprzedaży skryptu w jakiejkolwiek formie, zarówno oryginalnej, jak i zmodyfikowanej.
#
#4. Informacja o autorze
#Każdy projekt korzystający ze skryptu Dynamic BGS System 1.0
#musi spełniać następujące warunki dotyczące uznania autorstwa:
#
#Podczas uruchamiania opcji "Nowa gra" należy wyświetlić poniższe informacje na ekranie przez
#minimum 7 sekund, pomijając czas przejścia efektów wizualnych, takich jak tzw. "smooth":
#
#[=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=]
#
#Nazwa: Dynamic BGS System 1.0
#Autor: Dawid Maxymilian Tomaszewski
#Studio: Haxo Game Studios
#Witryna: https://www.rpgmaker.pl/
#YouTube: HaxoGameStudiosOfficial
#
#[=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=][=]
#
#Wymagane jest również umieszczenie tej informacji w napisach końcowych gry.
#
#5. Postanowienia końcowe
#Niniejsza licencja obowiązuje od momentu rozpoczęcia korzystania ze skryptu.
#Użytkownik nie nabywa żadnych dodatkowych praw poza określonymi w tej licencji.
#Autor skryptu zastrzega sobie prawo do zmiany warunków licencji w przyszłych wersjach skryptu.
#
#
#Personalizacja:
#
#[=] # Mapy, ich współrzędne źródła dźwięku oraz plik dźwięku
#[=] # [ID Mapy, Pozycja X, Pozycja Y, "Nazwa pliku BGS"] < sama nazwa pliku bez rozszerzenia
#
#[=] # Skrypt wlaczamy przelacznikiem ID 10 < Mozna to zmienic
#
#[=] # Intensywnosc od zrodla dzwieku kontrolujemy zmienna ID 12
#[=] # Domyslnie jest to wartosc 15 kratek
#
#[=] # MIN_VOLUME = 0 # Minimalna głośność po max oddaleniu
#[=] # MAX_VOLUME = 50 # Maksymalna głośność BGS
##########################################################
class Scene_Map
alias original_update update
# Mapy, ich współrzędne źródła dźwięku oraz plik dźwięku
SOUND_SOURCES = [
[1, 2, 2, "Waterfall"], # Mapa 1, Pozycja X, Pozycja Y, Nazwa pliku BGS
[2, 10, 10, "Waterfall"], # Mapa 2, Pozycja X, Pozycja Y, Nazwa pliku BGS
[3, 20, 20, "Waterfall"], # Mapa 3, Pozycja X, Pozycja Y, Nazwa pliku BGS
[4, 12, 13, "Forest"], # Mapa 4, Pozycja X, Pozycja Y, Nazwa pliku BGS
[5, 8, 20, "River"], # Mapa 5, Pozycja X, Pozycja Y, Nazwa pliku BGS
[6, 15, 15, "Cave"], # Mapa 6, Pozycja X, Pozycja Y, Nazwa pliku BGS
]
# Próg zmiany głośności, aby odtwarzać dźwięk (aby uniknąć nadmiernych odtworzeń)
VOLUME_CHANGE_THRESHOLD = 5 # 5%
# Minimalna głośność dźwięku, gdy gracz jest poza zasięgiem
MIN_VOLUME = 0 # Minimalna głośność po max oddaleniu
# Zmienna do śledzenia, czy dźwięk jest odtwarzany oraz poprzednia głośność
def initialize
super
@ambient_sound_playing = false
@previous_volume = 0 # Inicjalizacja zmiennej @previous_volume
end
# Metoda aktualizująca scenę
def update
original_update
update_ambient_sound if $game_switches[10] # Wlaczenie skryptu przelacznik ID 10 default
end
# Obliczanie odległości gracza od źródła dźwięku
def calculate_distance(sound_x, sound_y)
dx = $game_player.x - sound_x
dy = $game_player.y - sound_y
Math.sqrt(dx * dx + dy * dy)
end
# Odtwarzanie BGS z odpowiednią głośnością
def play_ambient_sound(volume, sound_file)
if !@ambient_sound_playing || (volume - @previous_volume).abs >= VOLUME_CHANGE_THRESHOLD
# Odtwórz lub zaktualizuj BGS tylko raz, jeśli jeszcze nie gra lub zmiana głośności przekracza próg
Audio.bgs_play("Audio/BGS/" + sound_file, volume, 100)
@ambient_sound_playing = true
@previous_volume = volume
end
end
# Aktualizacja dźwięku otoczenia
def update_ambient_sound
current_map_id = $game_map.map_id # ID aktualnej mapy
sound_source = SOUND_SOURCES.find { |source| source[0] == current_map_id }
if sound_source
max_distance = $game_variables[12] || 15 # Ustal MAX_DISTANCE z zmiennej ID 12, domyślnie 15
distance = calculate_distance(sound_source[1], sound_source[2])
# Głośność dźwięku, w zależności od odległości gracza
volume = [[100 - (distance / max_distance) * 100, MIN_VOLUME].max, 100].min
# Jeśli głośność jest większa od minimalnej, aktualizuj dźwięk
if volume > MIN_VOLUME
@previous_volume ||= 0
if (volume - @previous_volume).abs >= VOLUME_CHANGE_THRESHOLD
play_ambient_sound(volume, sound_source[3])
end
else
play_ambient_sound(MIN_VOLUME, sound_source[3])
end
end
end
end
Konfiguracja
W skrypcie istnieją 3 linijki do konfiguracji:
1) SOUND_SOURCES = [
Linijka do której należy dopisać nasze źróło dźwięku, gdzie ono występuje. Przykład - rysunek miniaturka na samej górze, mamy mapę:1, oraz zdarzenie ogniska położone na miejscu X:13, Y:10. Chcemy zrobić, by dźwięk był intensywny gdy gracz podejdzie do ogniska. Linijka jaką należy dopisać pod SOUND_SOURCES = [ wygląda następująco:
[1, 13, 10, "13-Fire01"],
Wytłumacznie: 1 - bo mapa nr 1, 13 bo zdarzenie jest na X:13, 10 bo zdarzenie jest na Y:10, "013-Fire01", bo mamy plik o takiej nazwie w folderze BGS, oczywiście plik może być dowolny
2)
update_ambient_sound if $game_switches[10]Linijka odpowiadająca za uruchomienie skryptu. Jeżeli przełącznik nr 10 zostanie uruchomiony (ON), to skrypt zostanie uruchomiony. Oczywiście nr przełącznika można zmienić na dowolny.
3)
max_distance = $game_variables[12] || 15Zmienna nr 12 odpowiada za intensywność od źródła dźwięku i jak widać domyślnie jest ustawione na 15 klatek.
Uwagi:
Pamiętaj, aby skrypt poprawnie działał, należy w grze ustawić i uruchomić (domyślne ustawienia):
- PRZEŁĄCZNIK 0010 na ON, oraz
- ZMIENNĄ 0012 na wartość 15!
Licencja
Skrypt można wykorzystać zarówno w projektach komercyjnych, jak i niekomercyjnych, a także dowolnie go modyfikować. Zastrzegam jednak, że publikacja skryptu (w tej lub zmodyfikowanej wersji) poza Twierdzą RPG Makera jest zabroniona, chyba że uzyskano moją zgodę. Co więcej, zabrania się sprzedaży skryptu w jakiejkolwiek formie.
Każdy projekt korzystający z Event Reaction System 0.4 musi zawierać poniższą informację:
Nazwa: Dynamic BGS System (1.0)
Autor: Dawid Maxymilian Tomaszewski
Studio: Haxo Game Studios
Witryna: https://www.rpgmaker.pl/
YouTube: HaxoGameStudiosOfficial
Informacja ta musi być widoczna przy uruchamianiu nowej gry przez minimum 7 sekund oraz w napisach końcowych.
Autor: HGS
Tekst: HGS
Email:
haxogamestudios@gmail.com