• Anmelden

1

Sonntag, 28. April 2013, 15:33

Soundeffekte mehrere BGS (Script bereits vorhanden)

Hey Community,

ich besetze die Map meines "Intro-Dorfes" gerade mit Soundeffekten und wollte fragen ob mir einer mein von Leif bzw. fütz!baerchen erstelltes Script editieren kann.
Auch Maker intern kann man glaub ich immer eine BGS abspielen, ist es möglich das Script insofern zu erweiteren/verbessern, dass man mehrere BGS gleichzeitig laufen lassen kann?

Hier das Script
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#==============================================================================
# ** Sound Effekt Script
#------------------------------------------------------------------------------
#
# # Leif / f0tz!baerchen
# v1.0
# 20.02.2011
#
#-------------------------------------------------------------------------------
#
# Was tut dieses Script?
# Dieses Script ermöglichst es, verschiedene Soundquellen (z.B. Feuer, Tiere)
# auf der Map zu platzieren. Diese Quellen geben Geräusche von sich, sobald sich
# der Spieler in ihrer Nähe befindet. Je näher er an der Quelle ist, desto
# lauter der Sound.
#
#-------------------------------------------------------------------------------
#
# Wie kann ich eine neue Soundquelle erstellen?
# Grundsätzlich gibt es zwei Arten von Quellen: SE Soundquellen für kurze,
# wiederkehrende Geräusche und BGS Soundquellen, für konstante Geräusche. 
# SE können gleichzeitig abgespielt werden, von den BGS wird immer der
# Lauteste abgespielt. Beide werden erstellt, indem man ein Event auf der Karte
# an entsprechender Stelle platziert, welches oben einen Kommentar enthält, 
# der folgendermaßen aussieht:
#
#   BGS:Sound,Entfernung,Volume,Pitch
# oder
#   SE:Sound,Entfernung,Volume,Pitch,Frames (1sec = 20 frames)
#
#     *Sound: der Name der Sounddatei (ohne Endung)
#     *Entfernung: die maximale Entfernung in Tiles, aus der das Geräusch noch
#     *hörbar ist
#     *Volume, Pitch: max. Volume und Pitch des Geräuschs
#     *Frames: Anzahl Frames, nachdem das Geräusch wiederholt wird (nur für SE)
#
#==============================================================================
 
#==============================================================================
# class for sounds
#==============================================================================
class Game_Sound
  attr_reader :current_volume
  attr_reader :type
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(type, event, name, distance, volume, pitch, count=10)
    @type = type
    @event = event
    @name = name
    @distance = distance
    @count = count
    @volume = volume
    @current_volume = volume
    @pitch = pitch
    @last_count = 0
  end
  #--------------------------------------------------------------------------
  # * Object update
  #--------------------------------------------------------------------------
  def update
    add = @type == 'BGS' ? 0 : @event.id * @count / 5
    #return false if Graphics.frame_count - @last_count <= @count
    return false if (Graphics.frame_count + add) % @count != 0
    p_x = $game_player.x
    p_y = $game_player.y
    dist = Math.sqrt((@event.x - p_x) ** 2 + (@event.y - p_y) ** 2)
    @current_volume = [@volume - dist * @volume / @distance, 0].max.round
    @last_count = Graphics.frame_count if @current_volume > 0 or @type == 'BGS'
    return true
  end
  #--------------------------------------------------------------------------
  # returns audio file
  #--------------------------------------------------------------------------
  def audio
    return RPG::AudioFile.new(@name, @current_volume, @pitch)
  end
end
 
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
#  This class deals with events. It handles functions including event page 
#  switching via condition determinants, and running parallel process events.
#  It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
  attr_reader :event
end
 
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles the map. It includes scrolling and passable determining
#  functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  if !method_defined?(:sound_script_game_map_setup)
    alias sound_script_game_map_setup setup
  end
  def setup(map_id)
    sound_script_game_map_setup(map_id)
    # sounds settings
    @sounds = []
    for event in @events.values
      i = 0
      while event.event.pages[0].list[i].code == 108 or 
      event.event.pages[0].list[i].code == 408
        list = event.event.pages[0].list[i]
        if list.parameters[0][0..2] == 'SE:'
          param = list.parameters[0].downcase.split(':')[1].split(',')
          sound = Game_Sound.new('SE', event, param[0], param[1].to_i, 
                                 param[2].to_i, param[3].to_i, param[4].to_i)
          @sounds.push(sound)
          break
        elsif list.parameters[0][0..3] == 'BGS:'
          param = list.parameters[0].downcase.split(':')[1].split(',')
          sound = Game_Sound.new('BGS', event, param[0], param[1].to_i, 
                                 param[2].to_i, param[3].to_i)
          @sounds.push(sound)
          break
        end
        i += 1
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  if !method_defined?(:sound_script_game_map_update)
    alias sound_script_game_map_update update
  end
  def update
    # updates sounds
    self.sound_update
    sound_script_game_map_update
  end
  #--------------------------------------------------------------------------
  # updates sounds effects
  #--------------------------------------------------------------------------
  def sound_update
    list = []
    @sounds.each do |sound|
      next if !sound.update
      if sound.type == 'SE'
        next if sound.current_volume == 0
        $game_system.se_play(sound.audio)
        next
      end
      next if list.size > 0 and sound.current_volume <= list.last.current_volume
      list.push(sound)
    end
    if list.size > 0
      $game_system.bgs_play(list.last.audio)
    end
  end
end
zum Lesen den Text mit der Maus markieren


Vielen Dank im Vorraus

Motto: Jede Geschichte hat mindestens zwei Seiten

  • Nachricht senden

2

Sonntag, 28. April 2013, 16:22

Ich stand vor geraumer Zeit auch mal mit Leif im losen Kontakt und fragte ihn dasselbe. Scheinbar ist es wohl wirklich nicht möglich. Man kann aber teilweise mit SE's ein wenig rumtricksen. :)
  • Verfolgte Projekte:

  • Empfehlenswerte XP-Skripte:

    ccoa, ForeverZer0, Agckuu Coceg, Blizzard - Advanced Weatherscript (Vielzahl neuer Wettereffekte und bessere Regulierung ihrer Intensität)
    Leif - Sound Effekt Script (Events können an Entfernung angepasste Geräusche von sich geben)
    Jumping Coconut
    - Hide and Seek (Events erhalten Reaktionsradius/Sichtlinien)
  • Projekt:

    Weite Welt (Arbeitstitel)
    :ab16: :w_ausruck: :w_drogen: :w_sex: :w_gewalt:
    Genre: RPG in einer Dark-Fantasy-Welt
    Status: In der Konzeptionsphase

3

Sonntag, 28. April 2013, 16:43

Schade. das kostet wieder Preformance und macht a bissl mehr Arbeit, aber du hast Recht mit den SE´s kann man das selbe Ziel erreichen :D
Da erinnere ich mich gleich wieder an die gute alte 2000er Zeit ^^

Danke für die Antwort

Edit Darf ich nochmal nachfragen, wie genau löst du das mit deinen SE´s und BGS´s?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Gjorsch« (30. April 2013, 19:11)


Motto: Jede Geschichte hat mindestens zwei Seiten

  • Nachricht senden

4

Sonntag, 28. April 2013, 23:56

Momentan nutze ich anhand des Skriptes den BGS für Fackelevents im inneren einer Taverne. Ein NPC spielt dann über den Kommentar einen SE ab (leicht gekürzter "BGS" von Freesounds), welcher in einer Dauerschleife verschiedene Stimmen wiedergibt, um das Ganze zu beleben. Die Stimmen sind im gesamten Raum zu hören, das Feuer jedoch nur in unmittelbarer Nähe. Mehr Hintergrundgeräusche brauche ich derzeit eigentlich auch noch nicht und das ganze stellt für mich einen annehmbaren Kompromis dar. :)
  • Verfolgte Projekte:

  • Empfehlenswerte XP-Skripte:

    ccoa, ForeverZer0, Agckuu Coceg, Blizzard - Advanced Weatherscript (Vielzahl neuer Wettereffekte und bessere Regulierung ihrer Intensität)
    Leif - Sound Effekt Script (Events können an Entfernung angepasste Geräusche von sich geben)
    Jumping Coconut
    - Hide and Seek (Events erhalten Reaktionsradius/Sichtlinien)
  • Projekt:

    Weite Welt (Arbeitstitel)
    :ab16: :w_ausruck: :w_drogen: :w_sex: :w_gewalt:
    Genre: RPG in einer Dark-Fantasy-Welt
    Status: In der Konzeptionsphase

5

Montag, 29. April 2013, 16:00

Okay, danke für die Antwort. So in etwa mache ich das auch. Hab nur ein Outside-Setting und muss mir überlegen ab wo man den Wasserfall hört und wo der Bach Überhand gewinnt. Aber das ist es wohl, was das Spiele entwickeln am RMXP ausmacht, permanent die richtigen Kompromisse abwägen. Der Jenige der am besten abwägt was wichtig und was nicht ist macht das beste Spiel...^^ Fleiß ist also nicht alles...
Hehe, mal schauen wie sich das handeln lässt.

6

Montag, 29. April 2013, 18:13

Ich stand vor geraumer Zeit auch mal mit Leif im losen Kontakt und fragte ihn dasselbe. Scheinbar ist es wohl wirklich nicht möglich.
Aber das ist es wohl, was das Spiele entwickeln am RMXP ausmacht, permanent die richtigen Kompromisse abwägen.

So ein Quatsch, man könnte sich auch einfach mal selbst informieren:
Audio Module Rewrite mcisendstring
FMOD Ex Audio Module Rewrite
MCI Audio Player
Ryex's Dynamic Sounds
Bild

7

Montag, 29. April 2013, 21:50

Hey. Ich kenne die dortigen Scripts bereits alle. Habe Ryexs Sound System, MCI und afMod auch schon getestet.
Habe jedoch nur bei Ryexs soundsystem eine Entfernungsberechnung gefunden und bin leider ohne das Tut buw. die Erklärung zum Script nicht im Stande die richtigen Script-Befehle in den Event-Script-Command einzutragn um einen Bgs mit "leiser werden bei entfernen" einzubinden.
Hast du Noch die Tut dieses Scripts?

Danke für die Antwort.

8

Montag, 29. April 2013, 22:01

Dynamic Sounds.pdf Bild Bild Bild

Alle drei Rewrites können mehrere BGS' abspielen (was ja laut Startpost dein Anliegen ist), mcisendstring bietet außerdem eine Entfernungsberechnung. Mit dem eingebauten Audio-Modul wirst du dein Ziel nicht erreichen, es sei denn du weichst auf Tricks mit SEs aus.
Bild

9

Dienstag, 30. April 2013, 12:42

Terv. Du bist echt hilfsbereit. Vielen Dank. Mal ne Frage nebenbei wie lange makerst du schon und was machst du beruflich. Bist ja anscheinend echt belaufen in Script-Fragen und in der Maker Szene.
Danke für die PDF. Denke mit diesem Script lässt es sich für meine Ansprüche am einfachsten und besten arbeiten.

10

Dienstag, 30. April 2013, 23:52

Danke, so einem netten Burschen wie dir muss man aber auch helfen :) ich makere seit etwa 6 Monaten und bin offiziell arbeitsloser Arbeitsloser der auch keine Arbeit sucht.
Frag ruhig wenn du noch irgendwelche Probleme mit dem Script haben solltest :)
Bild

Ähnliche Themen

Social Bookmarks