################################################################################
################################################################################
##### #####
### Map Name Display v1.1 ###
### Autor: MayaChan / Miu ###
##### #####
################################################################################
################################################################################
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### ------------------------------ Funktionen ------------------------------ ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### Dieses Script zeigt den Mapnamen der aktuellen Map an. ###
### Die Textbox wird hierbei nicht nur per Fade-In eingeblendet, sondern ###
### fährt in den Bildschirm hinein, klappt sich entsprechend der Namensgröße ###
### aus und verschwindet anschließend wieder. ###
### Hierbei kann jeder Wert von der Transparenz einzelner Elemente über ###
### Schriftart und -farbe bis hin zur Position des Fensters einzeln ###
### eingestellt und auch teilweise während des laufenden Spiels über ###
### optionale Variablenzugriffe verändert werden. ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### -------------------- Installation / Deinstallation --------------------- ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### Dieses Script kann einfach direkt über dem Main Process eingefügt werden ###
### Damit das Programm startet müsst ihr allerdings noch eine Zeile ###
### wie folgt einfügen: ###
### 1. Geht in das Script "Scene_Map" ###
### 2. Sucht dort nach der Funktion "def create_message_window" ###
### 3. Fügt hier nun "@map_name_display = Map_Name_Display.new" ein ###
### Das Program führt das Script nun entsprechend der Einstellungen aus, ###
### die ihr im nächsten Teil eingeben könnt. ###
### ###
### Zum Deinstallieren müsst ihr lediglich die oben eingefügte Zeile wieder ###
### entfernen und könnt das Script je nach Bedarf auch weiterhin im ###
### Script-Editor belassen. ###
### Solltet ihr das Script selbst löschen, so ist es zwingend erforderlich, ###
### auch die oben eingefügte Zeile zu entfernen um einen Fehler zu vermeiden ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### ----------------------------- Einstellungen ---------------------------- ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
module Map_Name_Display_Settings
# Fonts
FONT_NAME_1 = ["Times New Roman", "Arial"]
FONT_NAME_2 = ["Arial"]
FONT_NAME_3 = ["Webdings", "Arial"]
FONT_NAME_4 = ["Comic Sans MS", "Arial"]
FONT_NAME_VARIABLE = 5
# Der angegebene Font kann über die angegebene Variable im Spiel
# geändert werden. Bei 0 oder falscher Angabe wird automatisch
# FONT_NAME_1 ausgewählt
# Schriftgröße
FONT_SIZE = 24 # Höhe der Schrift (Standard: 24)
# Schriftfarben
COLOR_RED = 255
COLOR_GREEN = 255
COLOR_BLUE = 255
# Die Farbwerte können über Variablen gesteuert werden.
# Bei 0 werden die oben genannten Variablen genutzt, ansonsten
# die ersten 3 Variablenwerte beginnend bei der unten angegebenen
# Variable (wird z.B 7 eingegeben, so entspricht Variable 0007 rot,
# Variable 0008 grün und Variable 0009 blau)
COLOR_VARIABLE = 1
# Transparenzen
WINDOW_OPACITY = 255 # Transparenz des Fensters
WINDOW_FRAME_OPACITY = false # Stellt ein, ob WINDOW_OPACITY auch den Rahmen
# betrifft
NAME_OPACITY = 255 # Transparenz der Schrift bei voller Sichtbarkeit
# Schrifteffekte
FONT_ITALIC = false # Kursiv?
FONT_BOLD = false # Fett?
FONT_OUTLINE = false # Umrandung?
FONT_SHADOW = false # Schatten?
# Schrifteffekte können auch über den unten angegebenen Switches
# gesteuert werden. Bei 0 werden die oben genannten Einstellungen
# angewandt
ITALIC_SWITCH = 1
BOLD_SWITCH = 2
OUTLINE_SWITCH = 3
SHADOW_SWITCH = 4
TEXT_BEGIN_SIGN = "~ " # Fügt einen Text, vor bzw. jedem dem Namen ein
TEXT_END_SIGN = " ~"
# Fenstereinstellungen
WINDOW_INITIAL_SIZE = 30 # Größe des Fensters beim Ausklappen
# (Standard/Minimum: 30)
WINDOW_VERTICAL_SPACE = 0 # Vergrößert den vertikalen Abstand des
# Kartennamens zum Rahmen
WINDOW_HORIZONTAL_SPACE = 0 # Vergrößert den horizontalen Abstand des
# Kartennamens zum Rahmen
# Anzeigezeiten
# Standard/Empfehlung: 5, 30, 10, 20, 100
WINDOW_DROP_TIME = 5 # Geschwindigkeit, mit der das Fenster erscheint
WINDOW_DROP_DELAY = 30 # Länge der Zeit, nach der das Fenster angezeigt wird,
# sobald das Script ausgelöst wird
WINDOW_EXPAND_TIME = 10 # Geschwindigkeit, mit der das Fenster ausklappt
NAME_FADE_TIME = 20 # Geschwindigkeit, mit der der Inhalt eingeblendet wird
NAME_SHOW_TIME = 100 # Länge der Anzeige des Inhalts
# Steuervariablen
WINDOW_POSITION = 1 # Bestimmt die Ecke, an dem der Kartenname angezeigt wird
# 1 = Oben Links, 2 = Oben Rechts
# 3 = Unten Links, 4 = Unten Rechts
WINDOW_POSITION_VARIABLE = 4
# Fensterposition kann über eine bestimmte Variable gesteuert werden.
# Hierbei gilt die gleiche Einteilung wie bei Wind_Position
# (Falsche Werte zeigen das Fenster automatisch oben links an)
# Wird hier 0 angegeben, so wird direkt die Zahl aus WINDOW_POSITION
# genutzt.
VISIBILITY_SWITCH = 5 # Anhand dieses Switches wird festgelegt, ob der
# Map Name angezeigt wird oder nicht (Kann beliebig
# geändert werden)
FORCE_VISIBILITY = 6 # Wird dieser Switch eingeschaltet, so wird die
# Anzeige des Map Names auch ohne Mapwechsel forciert
# Hierbei wird VISIBILITY_SWITCH ignoriert
# Hinweis: Script schaltet den Switch selbst aus
NO_DISPLAY_BEGIN_SIGN = "0" # Befindet sich diese Zeichenkette am Anfang des
# Kartennamens,so wird der Name nicht angezeigt
NO_DISPLAY_END_SIGN = "0" # Wie vorher, nur diesmal wird am ende des
# Kartennamens geschaut
ENABLE_BEGIN_SIGN = false # Bestimmt, ob NO_DISPLAY_BEGIN_SIGN auslöst oder nicht
ENABLE_END_SIGN = false # gleiches für NO_DISPLAY_END_SIGN
# Auflösung
RESOLUTION_X = 544 # VX-Ace-Standard: 544
RESOLUTION_Y = 416 # VX-Ace-Standard: 416
# Falls die Auflösung geändert wurde sollte das hier vermerkt werden,
# damit die Fenster richtig angezeigt werden
end
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### -------------------------------- Script -------------------------------- ###
### --------- Ab hier nur noch etwas ändern, wenn man Ahnung hat

-------- ###
### ------------------------------------------------------------------------ ###
### ------------------------------------------------------------------------ ###
### + Scriptaufbau / Inhaltsverzeichnis ###
### initialize ###
### set_font_settings ###
### get_map_id ###
### set_window_position ###
### window_show ###
### window_expand ###
### print_map_name ###
### display_map_name ###
### hide_map_name ###
### window_shrink ###
### window_hide ###
### reset_window_position ###
### update ###
### refresh ###
### ------------------------------------------------------------------------ ###
### + Programablauf ###
### Zunächst wird durch inizialize alles eingestellt, was später gebraucht ###
### wird. Anschließend wird mit der update-Funktion regelmäßig kontrolliert, ###
### ob entweder die Map gewechselt wurde oder ob ein Aufruf manuel forciert ###
### wird. Ist das der Fall, so wird die refresh-Funktion aufgerufen, die ###
### die Werte für die nächste Anzeige initialisiert. In der update-Funktion ###
### werden anschließend die Funktionen von set_window_position bis ###
### reset_window_position nacheinander abgegeben. Jeder dieser Funktionen ###
### ist einem Wert der Variable @step und setzt diese selbstständig weiter, ###
### sobald ihre Funktion erledigt ist. Während des Durchlaufs überprüft die ###
### update-Funktion weiterhin, ob inzwischen die Map gewechselt oder ein ###
### weiterer Aufruf forciert wurde und sorgt für einen schnellen ###
### ordnungsgemäßen Abbruch um den nächsten Namen anzuzeigen. Sobald ###
### reset_window_position seine Arbeit getan hat wird wieder regelmäßig in ###
### update gebrüft, ob eine Anzeige des Namens nötig ist. ###
### ------------------------------------------------------------------------ ###
### + Ihr wollt etwas verändern? ###
### Ihr könnt den Quelltext gerne so viel verändern, wie ihr wollt. ###
### Für eine Nennung meinerseits und einen Verweis auf die Seite, von der ###
### ihr das Script her habt wäre ich dann aber dankbar

###
### ------------------------------------------------------------------------ ###
class Map_Name_Display < Window_Base
# Einbinden der Einstellungen in die Klasse
include Map_Name_Display_Settings
# - Initialize - #
def initialize
# Bestimmen der Größe des Fensters
@window_size = fitting_height(0) + FONT_SIZE + WINDOW_VERTICAL_SPACE * 2
# Erstellen des Fensters durch die Superklasse #
super(0, 0 - @window_size, WINDOW_INITIAL_SIZE, @window_size)
# Einstellen, ob nur das Fenster oder auch der Rahmen transparent #
# werden soll #
unless WINDOW_FRAME_OPACITY
self.back_opacity = WINDOW_OPACITY
else
self.opacity = WINDOW_OPACITY
end
# Fonteinstellungen vornehmen #
set_font_settings
# Steuervariablen initialisieren #
@wait_timer = 0 # Initialisiert den wait_timer (mehr Infos s. update-Methode)
@step = 0 # Steuert die Reihenfolge der Menüanimationen
@old_map_id = get_map_id
@check_before_timer = false
end
# - Set Font Settings - #
def set_font_settings
# Übernehmen der Font-Settings aus den Einstellungen
if $game_variables[FONT_NAME_VARIABLE] == 0 # Abfrage, ob über eine Variable
contents.font.name = FONT_NAME_1 # gesteuert wird, wenn nicht,
else # dann Standard-Font wählen
case $game_variables[FONT_NAME_VARIABLE]
when 1 # ansonsten Angaben
contents.font.name = FONT_NAME_1 # Umsetzen
when 2
contents.font.name = FONT_NAME_2
when 3
contents.font.name = FONT_NAME_3
when 4
contents.font.name = FONT_NAME_4
else
contents.font.name = FONT_NAME_1
end
end
# Abfragen, ob die Einstellungen über die Settings oder durch
# Variablen bestimmt werden und entsprechendes übernehmen
if BOLD_SWITCH == 0
contents.font.bold = FONT_BOLD
else
contents.font.bold = $game_switches[BOLD_SWITCH]
end
if ITALIC_SWITCH == 0
contents.font.italic = FONT_ITALIC
else
contents.font.italic = $game_switches[ITALIC_SWITCH]
end
if OUTLINE_SWITCH == 0
contents.font.outline = FONT_OUTLINE
else
contents.font.outline = $game_switches[OUTLINE_SWITCH]
end
if SHADOW_SWITCH == 0
contents.font.shadow = FONT_SHADOW
else
contents.font.shadow = $game_switches[SHADOW_SWITCH]
end
if COLOR_VARIABLE == 0
contents.font.color = Color.new(COLOR_RED, COLOR_GREEN, COLOR_BLUE, 255)
else
contents.font.color = Color.new( $game_variables[COLOR_VARIABLE], $game_variables[COLOR_VARIABLE+1], $game_variables[COLOR_VARIABLE+2], 255 )
end
contents.font.size = FONT_SIZE
# Transparenz des Inhalts auf 0 setzen, damit es mittels eines fade-ins
# angezeigt werden kann
self.contents_opacity = 0
end
# - Get MapID - #
def get_map_id
# Gibt die ID der Map zurück, auf der man sich gerade befindet
return $game_map.map_id
end
# - 1. Set Window Position - #
# Abfrage über die Position des Fenster und entsprechende Anpassungen
# der Startpunkte des Fensters
def set_window_position
case @var_window_position
when 1 # Oben Links
self.x = 0
self.y = 0 - @window_size
when 2 # Oben Rechts
self.x = RESOLUTION_X - WINDOW_INITIAL_SIZE
self.y = 0 - @window_size
when 3 # Unten Links
self.x = 0
self.y = RESOLUTION_Y
when 4 # Unten Rechts
self.x = RESOLUTION_X - WINDOW_INITIAL_SIZE
self.y = RESOLUTION_Y
else # Bei falscher Zahl oben links (Standard)
self.x = 0
self.y = 0 - @window_size
end
# Einstellungen der initialisierten Fenster- und Bitmapgrößen
self.width = WINDOW_INITIAL_SIZE
self.contents = Bitmap.new(1, 1)
@check_before_timer = true # startet die frameweise abfrage für
# erneute Aufrufe des Programms
@step = 2
end
# - 2. Window Show - #
# Holt das Fenster in den sichtbaren Bereich
def window_show
# Wird Fenster oben oder unten angezeigt?
if @var_window_position != 3 and @var_window_position != 4
self.y += WINDOW_DROP_TIME # Wenn oben, dann in jedem Frame
if self.y >= 0 #<----| # das Fenster ein Stück nach unten schieben
self.y = 0 #|---- # bis Fenster komplett im sichtbaren Bereich
@step = 3
else
@wait_timer = 1
end
else # Ansonsten nach oben schieben bis sichtbar
self.y -= WINDOW_DROP_TIME
if self.y <= RESOLUTION_Y - @window_size
self.y = RESOLUTION_Y - @window_size
@step = 3
else
@wait_timer = 1
end
end
end
# - 3. Expand Window - #
# Dehnt das Feld solange aus, bis der Mapname komplett rein passt
def window_expand
# Abfrage, ob das Fenster links oder rechts angezeigt wird
if @var_window_position != 2 and @var_window_position != 4
self.width += WINDOW_EXPAND_TIME # Wenn links, dann in jedem Frame
# ausdehnen bis vollständig sichtbar
if self.width >= @map_name_width + 24 + WINDOW_HORIZONTAL_SPACE * 2
self.width = @map_name_width + 24 + WINDOW_HORIZONTAL_SPACE * 2
@step = 4
else
@wait_timer = 1
end
else
self.width += WINDOW_EXPAND_TIME # ansonsten trotzdem nach links ausdehnen
self.x -= WINDOW_EXPAND_TIME # aber die Position des Fenster entsprechend
if self.width >= @map_name_width + 24 + WINDOW_HORIZONTAL_SPACE * 2 # nach links schieben, damit sich das
self.width = @map_name_width + 24 + WINDOW_HORIZONTAL_SPACE * 2 # Fenster "nach links" ausdehnt
self.x = RESOLUTION_X - self.width
@step = 4
else
@wait_timer = 1
end
end
end
# - 4. Print Map Name - #
# Schreibt den Namen der Map in das Fenster
def print_map_name
# Erstellen einer neuen Bitmap um den neuen Dimensionen des ausgedehnten
# Fensters zu entsprechen
self.contents = Bitmap.new(@map_name_width + WINDOW_HORIZONTAL_SPACE, FONT_SIZE + WINDOW_VERTICAL_SPACE)
# Font-Settings übernehmen für den Fall, dass sie sich geändert haben
set_font_settings
# Kartenname ausschreiben (hat noch volle Transparenz)
draw_text(WINDOW_HORIZONTAL_SPACE, WINDOW_VERTICAL_SPACE, @map_name_width, FONT_SIZE, @map_name)
@step = 5
end
# - 5. Display Map Name - #
# Macht den Namen sichtbar
def display_map_name
# Erhöht die Sichtbarkeit Schritt für Schritt ...
self.contents_opacity += NAME_FADE_TIME
if self.contents_opacity >= NAME_OPACITY # ... bis zum eingestellten Wert
self.contents_opacity = NAME_OPACITY
@step = 6
# Wait Timer wird enstprechend der gewünschten Anzeigezeit eingestellt
@wait_timer = NAME_SHOW_TIME
else
@wait_timer = 1
end
end
# - 6. Hide Map Name - #
# Macht den Namen wieder unsichtbar
def hide_map_name
# Verringert die Sichtbarkeit Schritt für Schritt ...
self.contents_opacity -= NAME_FADE_TIME
if self.contents_opacity <= 0 # ... Bis komplett unsichtbar
self.contents_opacity = 0
self.contents = Bitmap.new(1, 1) # Ersetzt die aktuelle Bitmap gegen
@step = 7 # eine kleinere um den Anzeigepfeil
else # des Fenster-Skins zu verhindern
@wait_timer = 1 # Wenn das Fenster kleiner wird als
end # die Bitmap mit dem Mapnamen
end
# - 7. Window Shrink - #
# verkleinert das Fenster wieder
def window_shrink
# Abfrage, ob das Fenster links oder rechts angezeigt wird
if @var_window_position != 2 and @var_window_position != 4
self.width -= WINDOW_EXPAND_TIME # Wenn links, dann verkleiner,
if self.width <= WINDOW_INITIAL_SIZE # bis komplett zur Grundbreite
self.width = WINDOW_INITIAL_SIZE # eingefahren
@step = 8
else
@wait_timer = 1
end
else # wenn rechts, dann auch verkleinern
self.width -= WINDOW_EXPAND_TIME # aber die Position des Fenster entsprechend
self.x += WINDOW_EXPAND_TIME # nach rechts schieben um das Fenster
if self.width <= WINDOW_INITIAL_SIZE # "nach rechts" einzufahren
self.x = RESOLUTION_X - WINDOW_INITIAL_SIZE
self.width = WINDOW_INITIAL_SIZE
@step = 8
else
@wait_timer = 1
end
end
end
# - 8. Window Hide - #
# Schiebt das Fenster wieder aus dem sichtbaren Bereich
def window_hide
# Wird Fenster oben oder unten angezeigt?
if @var_window_position != 3 and @var_window_position != 4
self.y -= WINDOW_DROP_TIME # Wenn oben, dann das Fenster Frameweise
if self.y <= 0 - @window_size # ein Stückchen nach oben schieben,
@step = 9 # Bis das Fenster aus dem sichtbereich
else # raus ist
@wait_timer = 1
end
else # ansonsten das fenster nach unten schieben,
self.y += WINDOW_DROP_TIME # bis es nicht mehr sichtbar ist
if self.y >= RESOLUTION_Y
@step = 9
else
@wait_timer = 1
end
end
end
# - 9. Reset Window Position - #
# Resetet die Fensterposition
def reset_window_position
self.x = 0
self.y = 0 - @window_size
@step = 0
@check_before_timer = false
end
# - Update - #
def update
# Überprüfung, ob während der Anzeige eine andere Map betreten wurde
# oder ob eine Anzeige erzwungen wird
# check_before_timer verhindert eine Endlosschleife im 6. Schritt
if ( @old_map_id != get_map_id or $game_switches[FORCE_VISIBILITY] ) and @check_before_timer
@check_before_timer = false
@step = 6 # Es wird direkt mit dem ausblenden des Fensters angefangen,
@wait_timer = 0 # ohne auf andere Timer-Eingaben zu achten
end
if @wait_timer > 0 # Sorgt für Verzögerungen beim Anzeigen der
@wait_timer -= 1 # Fenster und entsprechender Veränderungen
return # (Fade-Zeiten, etc.)
end # Ein Durchlauf entspricht einem Frame
# Iterativer Aufruf des aktuell aktiven Schritts
case @step
when 1
set_window_position
return
when 2
window_show
return
when 3
window_expand
return
when 4
print_map_name
return
when 5
display_map_name
return
when 6
hide_map_name
return
when 7
window_shrink
return
when 8
window_hide
return
when 9
reset_window_position
return
end
# Überprüfung, ob ein Mapwechsel stattgefunden hat oder der
# Aufruf manuell aufgerufen wird
if @old_map_id != get_map_id or $game_switches[FORCE_VISIBILITY]
refresh # und startet einen neuen Durchlauf
return
end
super
end
# - Refresh - #
def refresh
@old_map_id = get_map_id # Merkt sich den zuletzt angezeigten Mapnamen
# Die Vorbereitungen und der Start des Programmablaufs werden nur
# durchlaufen, wenn die Anzeige auch gewollt ist
if $game_switches[VISIBILITY_SWITCH] or $game_switches[FORCE_VISIBILITY]
$game_switches[FORCE_VISIBILITY] = false # Anzeige soll nur einmal manuell
# ausgelöst werden
# Mapnamen einlesen
@map_name = TEXT_BEGIN_SIGN + $data_mapinfos[get_map_id].name + TEXT_END_SIGN
# Abfrage, ob der Name mit Rücksicht auf Sperrstrings angezeigt werden darf
if ( @map_name.start_with? NO_DISPLAY_BEGIN_SIGN and ENABLE_BEGIN_SIGN ) or ( @map_name.end_with? NO_DISPLAY_END_SIGN and ENABLE_END_SIGN )
return
else
if WINDOW_POSITION_VARIABLE == 0 # Wenn Fensterpositions-Variable 0 ist
@var_window_position = WINDOW_POSITION # so wird der Standardwert
# für die Fensterposition
# genutzt ...
else
# ... ansonsten wird die angegebenen Steuervariable eingelesen
@var_window_position = $game_variables[WINDOW_POSITION_VARIABLE]
end
# erstellen eines Rect-Objekts zum überprüfen der Breite des Mapnamens
set_font_settings
temp_map_name_rect = text_size(@map_name)
@map_name_width = temp_map_name_rect.width
@step = 1 # sorgt dafür, dass der Anzeigeablauf startet, wenn update
# das nächste mal aufgerufen wird
@wait_timer = WINDOW_DROP_DELAY # sorgt für die Verzögerung der
# Anzeige des Fensters
end
end
end
end
### ------------------------------------------------------------------------ ###
### ------------------------------ Changelog ------------------------------- ###
### ------------------------------------------------------------------------ ###
### v1.1 (27.03.2015)
### - Neuerung: Fenstergröße kann Unabhängig vom Font eingestellt werden
### - Neuerung: Es können verschiedene Fonts genutzt um im Spiel geändert werden
### - Bugfix: Fenster, die unten aufgerufen wurden werden jetzt richtig ausgeführt
### - Änderungen: reset_window wurde in set_window_position integriert