Save Deluxe
Was macht es?
Es verändert den Savescreen, indem es die Speicherstände in eine Liste setzt anstatt für jeden ein eigenes Fenster anzufertigen. Dies ermöglicht eine größere Menge an Spielständen, während zugleich die Informationen, die man über den ausgewählten Spielstand erhält, in einem zweiten Fenster weitaus mehr Informationen liefern.
Diese habe ich auf zwei Seiten verteilt (mit dem A-Button kann man umblättern), auf der ersten findet man Infos zur Gruppe sowie zum Spielfortschritt, auf der zweiten Infos über die Map.
Darüber hinaus erweitert es das Spiel um die Möglichkeit, dem Spieler %-Punkte auf den Spielverlauf zu geben. Diese können per einfachem Script-Befehl über Events vergeben werden (siehe Anleitung).
Screenshots
(http://www.abload.de/img/savedeluxe1v6vy.jpg) (http://www.abload.de/image.php?img=savedeluxe1v6vy.jpg)
(http://www.abload.de/img/savedeluxe2i6ah.jpg) (http://www.abload.de/image.php?img=savedeluxe2i6ah.jpg)
Das Script selbst:
#===============================================================================
# _______ _____ __ __ ___________
# / ___ \ / _ \ | | | || |
# / / \__\ / / \ \ | | | || ________|
# \ \_____ / / \ \ | | | || |___
# \_____ \ | |_____| || | | || ___|
# ___ \ \| _____ | \ \ / / | |________
# \ \___/ /| | | | \ \/ / | |
# \_______/ |__| |__| \____/ |___________|
#
#===============================================================================
#
# MK3 - Phoenix Power Productions Presents: Save Deluxe V 0.96
# Credits: An Michael Funkel
# Letztes Update: Freitag, 25.06.2010
# Level: Leicht
#
# Dieses Script ermöglicht eine bessere Nutzung der Speicherszene, indem sie die
# um einige praktische Neuerungen erweitert.
#
#===============================================================================
# Updates:
# ----------------------------------------------------------------------------
# o 22.06.2010 - Beginn des Scripts auf V 0.1
# +: Einrichtung der Spielfortschritte und Prozentleiste
# +: Einbindung der ersten Script-Befehle in den Interpreter
# o 23.06.2010 - Gestaltung der ersten Bestandteile, Update auf V 0.9b
# +: Überarbeitung der Spielfortschritte und Prozentleiste
# +: Kompatibilitätstests, Verwendung von MK3 Window_Help_Vary möglich
# +: Neuer Interpreter-Befehl: lose_gamepart
# +: Modul erweitert
# +: Einrichtung der Speicherfenster
# +: Bugfixing
# o 24.06.2010 - Überarbeitung der Darstellung, Update auf V 0.92
# +: Goldfenster umgestaltet und mit neuen Funktionen versehen
# +: Prozentleiste und Zeitangabe umpositioniert
# +: Einbau der ALLOW_SANDL-Funktion
# +: Möglichkeit zum Save-Folder anlegen eingebaut
# +: Bugfixing
# o 25.06.2010 - Letzte Aktualisierungen vor Erst-Release, Update auf V 0.96
# +: Erweiterung des Headers
# +: Verbesserung der Mapname-Abfrage
# +: Verbesserung der Prozentwert-Berechnung
# +: Kompatibilitätsverbesserungen
# +: Bugfixing
#===============================================================================
# Installation und Anleitung
#===============================================================================
#
# Platziere dieses Script irgendwo zwischen Material und Main.
# Nach Möglichkeit sollten alle Scripts, welche write_save_data oder read_save_data
# überschreiben in der Liste ÜBER Save Deluxe stehen, alle, die do_save oder do_load
# als alias modifizieren, UNTER Save Deluxe.
# Aufruf der Scene funktioniert weiterhin wie gewohnt, allerdings gibt es eine
# Vielzahl an Möglichkeiten, wie man sie stattdessen aufrufen kann:
# Schreibweise ist "$scene = Scene_File.new(sav?, tit?, ev?, call, return, param)"
# Dies alles schreibt man ohne die "", allerdings müssen innerhalb der Klammern
# ein paar "" gesetzt werden, wenn man es nutzt. Pflicht ist hierbei nur "sav?",
# alle anderen Felder kann man freilassen.
# sav?: kann true, false oder nil sein; ist es true, wird der Screen zum Spei-
# chern genutzt, in allen anderen Fällen zum Laden
# tit?: wird die normale Title-Scene genutzt, so wird bei Abbrechen des Screens
# automatisch die Title-Scene wieder aufgerufen, wenn tit? true ist
# ev?: das selbe wie bei tut, nur mit Aufruf der Map-Scene
# call: die in diesem Parameter gespeicherte Scene (mit "" schreiben und inkl.
# .new und aller Parameter, z.B. "Scene_Menu.new(4)") wird bei Laden des
# Spielstandes, welcher während dem aktuellen Vorgang erstellt wurde, auf-
# gerufen. Wenn man wie im obigen Beispiel also speichert, wird bei Neu-
# laden dieses Spielstandes das Menü mit Index auf Position 5 (beginnt
# bei 0 zu zählen, also 4 + 1 = 5) geöffnet
# return: bestimmt die Scene, zu welcher zurückgekehrt wird, wenn man den Screen
# wieder verlässt, hierbei gibt man einfach nur den Namen der aufzurufen-
# den Class der Scene an
# param: benötigt die Scene aus "return" Parameter, so können diese hier geschrie-
# ben werden, dies muss ebenfalls in "" gesetzt werden und innerhalb der
# "" muss alles in () stehen
# Spielverlaufspunkte:
# Um einem Spieler %-Werte zu geben, muss man lediglich per Script-Befehl in einem
# Event "gain_gamepart(step, val)" (ohne "") eingeben. "step" steht hierbei für
# den Spielschritt, den der Spieler erreicht hat, und "val" für den Promillwert
# (das Script arbeitet mit einer Nachkommastelle bei den Prozent). Jeden "step"
# kann man nur ein einziges mal pro Spielstand erreichen, sodass man nicht durch
# Wiederholen von immer demselben Event die Leiste auf 100 (oder mehr) erhöht.
# Mit "lose_gamepart(step, val)" (ohne "") mit selben Regeln zu den Parametern
# step und val wie bei gain_gamepart lässt sich eine Handlung aus der Liste der
# erreichten Handlungen wieder streichen.
# Die Prozentleiste wird mit dem Befehl "draw_game_percent(x, y, width, height, val)"
# (ohne "") gezeichnet und kann von jedem Window ausgeführt. x, y, width und height
# stehen hierbei für Position und Größe auf dem Screen, val für den Prozentwert.
# Gibt man für val keinen Wert ein, wird automatisch die in $game_system.game_percent
# gespeicherte Variable verwendet. Wichtig hierbei ist, dass diese bei der Dar-
# stellung der Zahl auf der Leiste durch 10 geteilt wird.
# Der Rest kann weiter unten über module MK3::SAVE konfiguriert werden, die je-
# weiligen Optionsmöglichkeiten werden größtenteils vor Ort erklärt.
#
# Steuerung im Spiel:
# Mit den Pfeiltasten kann man durch die Slots durchscrollen, mit L-/R-Button
# seitenweise springen. Der aktuell ausgewählte Slot wird auf dem Fenster rechts
# mit näheren Infos dargestellt.
# Mit dem B-Button kann man die Scene wieder schließen und kehrt zu der vorheri-
# gen Scene zurück (vorausgesetzt, die Einstellungen sind dementsprechend getrof-
# fen). Ist im Modul ALLOW_SANDL auf true gesetzt und das Speichern-/Laden-Fenster
# gerade aktiv, wird stattdessen dieses geschlossen.
# Mit dem C-Button kann man den aktuell ausgewählten Slot laden bzw. speichern,
# je nachdem, ob man gerade zum laden oder zum speichern geöffnet hat (ist von
# dem oben definierten "sav?"-Parameter abhängig). Ist ALLOW_SANDL auf true ge-
# setzt, wird stattdessen das Speichern-/Laden-Fenster geöffnet und man kann mit
# erneutem C-Button die gewählte Aktion ausführen (das S/L-Fenster wird nicht im
# Title-Screen aufgerufen)
# Mit dem A-Button schließlich kann man, während der Cursor auf einem belegten
# Spielstand ist, die Info-Seiten wechseln, dies sind zwei. Auf der ersten sieht
# man die aktive Party mit Name, Level, Lebens- und Magie-Balken, den Goldvorrat,
# eine Spielfortschrittsleiste und die aktuelle Spielzeit nach 3-stelliger Stun-
# denzahl sowie mit Minuten und Sekunden. Auf der zweiten stehen Name der aktu-
# ellen Map, zurückgelegte Strecke in Km und ein Ausschnitt der Map, was im Map-
# Namen in [] eckigen Klammern steht, wird aus dem Namen rausgefiltert.
#===============================================================================
#
# Kompatibilität
# - Alias: Game_Temp: intialize
# - Alias: Game_System: initialize
# - Alias: Scene_File: read_save_data, write_save_data
# - Attribut: Game_Temp: save_bitmap (accessor)
# - Attribut: Game_System: last_scene, game_percent, game_steps (accessor)
# - Erweitert: Window_Base: draw_game_percent
# - Erweitert: Scene_Title: make_filename
# - Hinzugefügt: Class: Window_Savelist
# - Hinzugefügt: Class: Window_Savefile
# - Hinzugefügt: glob. Attribut: $imported["MK3-Save"]
# - Hinzugefügt: glob. Attribut: $data_mapinfos
# - Include: Game_Interpreter: MK3::COMMANDS
# - Modul: MK3::SAVE, MK3::COMMANDS
# - Overwrite: Scene_Title: check_continue
# - Overwrite: Scene_File: initialize, start, create_savefile_windows, terminate
# return_scene, update, do_save, do_load
# - RPG: MapInfo: save_name
# - Getestet mit: MK3-PPP Custom Menu System V 1.11a
#
#===============================================================================
#
# Freigegeben für jede nicht-kommerzielle Verwendung, bei kommerzieller Verwen-
# dung möchte ich informiert werden.
# Kontakt: rpgvx.net, unter Nick Michael Funkel
# Dieses Script darf nicht auf anderen Websites angeboten werden.
#
#===============================================================================
module MK3
module SAVE
# Dieser Schalter bestimmt, ob man laden und speichern gleichzeitig kann.
ALLOW_SANDL = true
# Dieser Schalter bestimmt, ob die Scene nach Anlegen einer Speicherung wie-
# der geschlossen wird.
SCENE_RETURN = false
# Dieser Wert bestimmt, wie viele Speicherslots man anlegen kann.
SLOTS = 30
# Diese Zahl bestimmt die Icon-ID von bereits belegten Slots.
USED_ICON = 133
# Diese Zahl bestimmt die Icon-ID von unbelegten Slots.
UNUSED_ICON = 141
# Dieser String legt das Unterverzeichnis fest, in welches die Daten gespei-
# chert werden sollen. Gib "" ein wenn es direkt in den Spielordner gelegt
# werden soll, ansonsten "Name-des-Verzeichnisses" + "/".
SAVE_FOLDER = "Save/"
# Dieser String bestimmt den Namen der Speicherdateien.
SAVE_NAME = "Save"
# Dieser String bestimmt den Namen benutzter Speicherslots in der Liste.
SLOT_NAME = "Slot"
# Dieser String bestimmt den Namen unbenutzter Speicherslots in der Liste.
SLOT_NAME_UNUSED = "empty"
# Dieser String bestimmt die Scene, zu welcher zurückgekehrt werden soll,
# wenn bei Aufruf des Screens keine andere festgelegt wird.
SCENE_RET = "Scene_Menu"
# Dieser String legt die Parameter fest, welche bei Verlassen des Screens
# an die nachfolgende Scene übergeben werden sollen.
SCENE_RET_PARAM = "(4)"
# Dieser Text steht im Hilfe-Fenster, wenn man speichern möchte.
HELP_SAVE = "Wähle den Slot, um deinen Spielstand zu speichern."
# Dieser Text steht im Hilfe-Fenster, wenn man laden möchte.
HELP_LOAD = "Wähle den Spielstand, den du laden möchtest."
# Dieser Text steht im Hilfe-Fenster, wenn ALLOW_SANDL = true.
HELP_SANDL = "Lade oder speichere einen Spielstand."
# Diese Zahl bestimmt die Nachkommastellen beim Goldwert, sodass man zum Bei-
# spiel Euro angeben kann (dafür dann GOLD_DIV = 2 eingeben und "Euro" in der
# Database unter Terms für "G" eintragen.
GOLD_DIV = 2
# Dieser String wird hinter den Goldbetrag geschrieben.
GOLD = "€"
# Diese Zahl bestimmt die Farb-ID des Window-Skins, in welcher Lv., Gold,
# Spielfortschritt und all die andern Werte geschrieben werden sollen.
SIGN_COLOR = 4
# Dieser Schalter bestimmt, ob im Speicherstand eine Prozentleiste dargestellt
# werden soll.
SHOW_PER = true
# Diese Zahl legt die anfängliche Prozentzahl fest, beachte hierbei, dass die
# Prozent eigentlich in Promille geschrieben werden, da das Script diese mit
# Wert / 10 angibt.
PERCENT_DEFAULT = 0
# Diese Zahl bestimmt die erste Füllfarbe der Prozenleiste.
PERCENT_COLOR_1 = 0
# Diese Zahl bestimmt die zweite Füllfarbe der Prozentleiste.
PERCENT_COLOR_2 = 8
# Dieser Schalter bestimmt, ob die Prozentleiste mit Zahlen überlegt wird.
SHOW_PER_VALUE = true
end # SAVE
#===============================================================================
# MK3 Phoenix Power Productions übernimmt keinerlei Haftung für sämtliche Schä-
# den, die an Material oder Personen entstehen, wenn die Zeilen unterhalb dieses
# Kommentars verändert werden.
#===============================================================================
module COMMANDS
def gain_percent(val)
$game_system.game_percent += [val, (1000 - $game_system.game_percent)].min
end
def lose_percent(val)
$game_system.game_percent -= [val, $game_system.game_percent].min
end
def gain_gamepart(step, val)
if !$game_system.game_steps.include?(step)
$game_system.game_steps.push(step)
gain_percent(val)
end
end
def lose_gamepart(step, val)
if $game_system.game_steps.include?(step)
$game_system.game_steps.delete(step)
lose_percent(val)
end
end
end # COMMANDS
end
#===============================================================================
#
# * Dies ermöglicht das Auslesen eines Mapnamens, ohne dass dabei Einträge in
# [] berücksichtigt würden.
#
#===============================================================================
if $data_mapinfos == nil
$data_mapinfos = load_data("Data/MapInfos.rvdata")
end
class RPG::MapInfo
def save_name
return @name.gsub(/\[.*\]/) { ""}
end
end # RPG::MapInfo
$imported = {} if $imported == nil
$imported["MK3-Save"] = true
#===============================================================================
#
# * Dies richtet ein Hintergrundbild für die Speicherdatei ein.
#
#===============================================================================
class Game_Temp
attr_accessor :save_bitmap # Speichert den aktuellen Screen beim Speichern
alias mk_save_initialize initialize
def initialize
mk_save_initialize
@save_bitmap = Bitmap.new(1, 1)
end
end # Game_Temp
#===============================================================================
#
# * Dies erweitert Game_System um die Prozent-Variable.
#
#===============================================================================
class Game_System
attr_accessor :last_scene # Speichert die letzte Scene vor Speicher-Screen
attr_accessor :game_percent # Speichert den Spielfortschritt in Promille
attr_accessor :game_steps # Merkt sich, welche Schritte im Spielverlauf
# bereits vollzogen wurden
alias mk_save_initialize initialize
def initialize
mk_save_initialize
@last_scene = ""
@game_percent = MK3::SAVE::PERCENT_DEFAULT
@game_steps = []
end
end # Game_System
#===============================================================================
#
# * Dies baut die neuen Befehle in den Interpreter ein.
#
#===============================================================================
class Game_Interpreter
include MK3::COMMANDS
end # Game_Interpreter
#===============================================================================
#
# * Dies erweitert Window_Base um die Möglichkeit, eine Spielfortschritts-Leiste
# zu zeichnen.
#
#===============================================================================
class Window_Base < Window
def draw_game_percent(x, y, width, height, per = $game_system.game_percent)
gc1 = text_color(MK3::SAVE::PERCENT_COLOR_1)
gc2 = text_color(MK3::SAVE::PERCENT_COLOR_2)
fill = width * per / 1000
self.contents.fill_rect(x, y + 8, width, height - 12, gauge_back_color)
self.contents.gradient_fill_rect(x, y + 8, fill, height - 12, gc1, gc2)
return if !MK3::SAVE::SHOW_PER_VALUE
self.contents.draw_text(x, y, width, height, (per / 10.0).to_s + "\%", 2)
end
end # Window_Base
#===============================================================================
#
# * Dies erstellt die Liste der Speicherstände im Save-Screen Deluxe.
#
#===============================================================================
class Window_Savelist < Window_Selectable
def initialize(index = 0)
super(0, WLH + 32, 140, 384 - WLH)
@index = index
@item_max = MK3::SAVE::SLOTS
refresh
end
def refresh
create_contents
for i in 0..MK3::SAVE::SLOTS do
draw_slot(i)
end
end
def draw_slot(i)
icon_id = file_exist?(i) ? MK3::SAVE::USED_ICON : MK3::SAVE::UNUSED_ICON
draw_icon(icon_id, 0, i * WLH, true)
text = file_exist?(i) ? MK3::SAVE::SLOT_NAME + sprintf(" %02d", i + 1).to_s : MK3::SAVE::SLOT_NAME_UNUSED
self.contents.draw_text(32, i * WLH, self.contents.width - 32, WLH, text)
end
def file_exist?(i)
return FileTest.exist?(make_filename(i))
end
def update
super
end
def filename?
return make_filename(@index)
end
def make_filename(index)
return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + "#{index + 1}.rvdata"
end
end # Window_Savefile
#===============================================================================
#
# * Dies erstellt das Info-Fenster zum ausgewählten Speicherstand.
#
#===============================================================================
class Window_Savefile < Window_Base
attr_accessor :viewport # Erstellt den Map-Screen
def initialize(index = 0)
super(140, WLH + 32, 404, 384 - WLH)
@index = index
@page = 1
update_screen(@index) if file_exist?(@index)
end
def file_exist?(i)
return FileTest.exist?(make_filename(i))
end
def make_filename(index)
return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + "#{index + 1}.rvdata"
end
def update(index)
super()
self.contents.clear if !file_exist?(@index)
if Input.trigger?(Input::A)
return if !file_exist?(@index)
@page = @page == 1 ? 2 : 1
draw_infos(@page)
end
return if @index == index
update_screen(index)
@index = index
end
def update_screen(index)
if file_exist?(index)
file = File.open(make_filename(index), "rb")
@characters = Marshal.load(file)
@frame_count = Marshal.load(file)
last_bgm = Marshal.load(file)
last_bgs = Marshal.load(file)
@game_system = Marshal.load(file)
game_message = Marshal.load(file)
game_switches = Marshal.load(file)
game_variables = Marshal.load(file)
game_self_switches = Marshal.load(file)
@game_actors = Marshal.load(file)
@game_party = Marshal.load(file)
game_troop = Marshal.load(file)
@game_map = Marshal.load(file)
@game_player = Marshal.load(file)
draw_infos(@page)
else
@viewport.dispose if @viewport != nil
end
end
def draw_infos(page)
self.contents.clear
self.contents.draw_text(0, self.contents.height - WLH, 200, WLH, "Aktuelle Seite: " + page.to_s + " von 2")
self.contents.draw_text(200, self.contents.height - WLH, 172, WLH, "Nächste Seite: A", 2)
case page
when 1
@viewport.dispose if @viewport != nil
for i in 0..@characters.size do
actor = $game_actors[i + 1]
draw_actor_face(actor, i * 93, WLH, 92)
draw_actor_name(actor, i * 93, 0)
self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
self.contents.draw_text(40 + i * 93, WLH + 78, 53, WLH, "Lv.")
self.contents.font.color = normal_color
self.contents.draw_text(65 + i * 93, WLH + 78, 28, WLH, actor.level, 2)
draw_actor_hp_gauge(actor, i * 93, 118, 92)
draw_actor_hp(actor, i * 93, 118, 92)
draw_actor_mp_gauge(actor, i * 93, 118 + WLH, 92)
draw_actor_mp(actor, i * 93, 118 + WLH, 92)
end
self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
self.contents.draw_text(0, 166, 100, WLH, "Fortschritt:") if MK3::SAVE::SHOW_PER
self.contents.draw_text(0, 190, 100, WLH, "Spielzeit:")
self.contents.draw_text(0, 214, 100, WLH, Vocab.gold + ":")
self.contents.font.color = normal_color
draw_game_percent(108, 166, 112, WLH, @game_system.game_percent) if MK3::SAVE::SHOW_PER
zeit = game_time
self.contents.draw_text(100, 190, 120, WLH, zeit, 2)
self.contents.draw_text(100, 214, 120, WLH, get_gold_value + " " + MK3::SAVE::GOLD, 2)
draw_reserve if $imported["MK3-Party"]
when 2
self.contents.font.color = text_color(MK3::SAVE::SIGN_COLOR)
self.contents.draw_text(0, 0, 90, WLH, "Location:")
self.contents.draw_text(210, 0, 90, WLH, "Zur. Strecke:")
self.contents.font.color = normal_color
text = get_map_name
self.contents.draw_text(90, 0, 120, WLH, text)
text2 = (@game_party.steps / 1000.0).to_s + " Km"
self.contents.draw_text(300, 0, 72, WLH, text2, 2)
create_tilemap(@game_map.data, @game_map.display_x, @game_map.display_y)
end
end
def draw_reserve
end
def get_map_name
return $data_mapinfos[@game_map.map_id].save_name
end
def game_time
time = @frame_count / Graphics.frame_rate
hour = time / 3600
min = time / 60 % 60
sec = time % 60
return sprintf("%03d:%02d:%02d h", hour, min, sec)
end
def get_gold_value
gold = @game_party.gold / (10.0 ** MK3::SAVE::GOLD_DIV)
return sprintf("%.2f", gold)
end
def create_tilemap(map_data, ox, oy)
@viewport.dispose if @viewport != nil
@viewport = Viewport.new(self.x + 2 + 16, self.y + 32 + 16, 348, 256)
@viewport.z = self.z
@tilemap = Tilemap.new(@viewport)
@tilemap.bitmaps[0] = Cache.system("TileA1")
@tilemap.bitmaps[1] = Cache.system("TileA2")
@tilemap.bitmaps[2] = Cache.system("TileA3")
@tilemap.bitmaps[3] = Cache.system("TileA4")
@tilemap.bitmaps[4] = Cache.system("TileA5")
@tilemap.bitmaps[5] = Cache.system("TileB")
@tilemap.bitmaps[6] = Cache.system("TileC")
@tilemap.bitmaps[7] = Cache.system("TileD")
@tilemap.bitmaps[8] = Cache.system("TileE")
@tilemap.map_data = map_data
@tilemap.ox = ox / 8 + 99
@tilemap.oy = oy / 8 + 90
end
end # Window_Savefile
unless $imported["MK3-Title"]
#===============================================================================
#
# * Dies erlaubt Scene_Title, Spielstände aus einem Spielstand-Verzeichnis ausle-
# sen zu können.
#
#===============================================================================
class Scene_Title < Scene_Base
def check_continue
@continue_enabled = (Dir.glob(make_filename).size > 0)
end
def make_filename
return MK3::SAVE::SAVE_FOLDER + MK3::SAVE::SAVE_NAME + '*.rvdata'
end
end # Scene_Title
end # unless
#===============================================================================
#
# * Dies überschreibt die ursprüngliche Speicher-Scene.
#
#===============================================================================
class Scene_File < Scene_Base
alias mk_save_read_save_data read_save_data
alias mk_save_write_save_data write_save_data
def initialize(saving, t = nil, e = nil, call_scene = "Scene_Map.new", scene_return = MK3::SAVE::SCENE_RET, param =
MK3::SAVE::SCENE_RET_PARAM)
if MK3::SAVE::SAVE_FOLDER != ""
Dir.mkdir(MK3::SAVE::SAVE_FOLDER) if !FileTest.directory?(MK3::SAVE::SAVE_FOLDER)
end
@saving = saving
@title = t
@event = e
if MK3::SAVE::ALLOW_SANDL and !@title
@command_window = Window_Command.new(140, ["Speichern", "Laden", "Zurück"])
@command_window.x = 202
@command_window.y = 156
@command_window.visible = false
@command_window.active = false
@command_window.z = 1000
end
$game_system.last_scene = call_scene
@scene_return = scene_return + ".new" + param
end
def start
create_menu_background
@help_window = $imported["MK3-Help"] ? Window_Help_Vary.new : Window_Help.new
text = @saving == true ? MK3::SAVE::HELP_SAVE : MK3::SAVE::HELP_LOAD
text = MK3::SAVE::HELP_SANDL if !@title and MK3::SAVE::ALLOW_SANDL
@help_window.set_text(text)
create_savefile_windows
end
def create_savefile_windows
index = $game_temp.last_file_index > 0 ? $game_temp.last_file_index : 0
@savelist_window = Window_Savelist.new(index)
@savefile_window = Window_Savefile.new
end
def terminate
@help_window.dispose
@savelist_window.dispose
@savefile_window.viewport.dispose if @savefile_window.viewport != nil
@savefile_window.dispose
@command_window.dispose if MK3::SAVE::ALLOW_SANDL and @command_window != nil
end
def update
if Input.trigger?(Input::B)
if !MK3::SAVE::ALLOW_SANDL or (MK3::SAVE::ALLOW_SANDL and !@command_window.active)
Sound.play_cancel
return_scene
elsif MK3::SAVE::ALLOW_SANDL and @command_window.active
@command_window.active = false
@command_window.visible = false
@savelist_window.active = true
end
end
@savelist_window.update
@savefile_window.update(@savelist_window.index)
if Input.trigger?(Input::C)
if !MK3::SAVE::ALLOW_SANDL or @title
if @saving
do_save
else
if @savelist_window.file_exist?(@savelist_window.index)
do_load
else
Sound.play_buzzer
return
end
end
$game_temp.last_file_index = @savelist_window.index
elsif !@title
if @command_window.active
case @command_window.index
when 0
do_save
@command_window.active = false
@command_window.visible = false
@savelist_window.active = true
when 1
if @savelist_window.file_exist?(@savelist_window.index)
do_load
else
Sound.play_buzzer
end
when 2
@command_window.active = false
@command_window.visible = false
@savelist_window.active = true
end
else
@savelist_window.active = false
@command_window.active = true
@command_window.visible = true
frei = @savelist_window.file_exist?(@savelist_window.index) ? true : false
@command_window.draw_item(1, frei)
end
end
end
return if @title
@command_window.update if MK3::SAVE::ALLOW_SANDL and @command_window.active
end
def do_save
Sound.play_save
file = File.open(@savelist_window.filename?, "wb")
write_save_data(file)
file.close
return_scene if MK3::SAVE::SCENE_RETURN
@savelist_window.refresh
@savefile_window.update_screen(@savelist_window.index)
end
def do_load
Sound.play_load
file = File.open(@savelist_window.filename?, "rb")
read_save_data(file)
file.close
$scene = $game_system.last_scene != "" ? eval($game_system.last_scene) : Scene_Map.new
RPG::BGM.fade(1500)
Graphics.fadeout(60)
Graphics.wait(40)
@last_bgm.play
@last_bgs.play
end
def read_save_data(file)
mk_save_read_save_data(file)
end
def write_save_data(file)
mk_save_write_save_data(file)
end
def return_scene
if @title
$scene = Scene_Title.new
elsif @event
$scene = Scene_Map.new
else
$scene = eval(@scene_return)
end
end
end # Scene_File
#===============================End of Script==================================#
Anleitung:
Zur Verwendung einfach zwischen Material und Main einfügen. Sollte ein Script Methoden des Speicherscreens überschreiben, könnte dies zu Kompatibilitätsproblemen führen, der Rest müsste eigentlich problemlos funktionieren. Scripts, welche den Title-Screen verändern, sollten in der Liste über meinem Script stehen. Wenn weitere Kompatibilitätsprobleme auftauchen, mir melden (mit verwendeten Scripts und Art des Problems). Sollte das Problem an meinem Script liegen, so werde ich dieses updaten und hier veröffentlichen, sonst werde ich per PM bei selten verwendeten Scripts, hier im Thread bei häufiger verwendeten Scripts, erklären, wie man das andere Scripts entsprechend abändern kann (die meisten Anfragen, die ich zu Kompatibilitätsproblemen meiner Scripts zu anderen bekam, waren aufgrund Fehler der anderen Scripts entstanden).
Die Anleitung im Header ist eigentlich bereits recht umfassend gestaltet, aber hier ein paar Anmerkungen...
Aufrufen kann man das Script einfach mit dem Befehl "$scene = Scene_File.new(saving)" (ohne ""). Die restlichen Parameter (allesamt im Header erklärt) sind freiwillig, nutzt man ALLOW_SANDL (Teil der Konfigurationsmöglichkeiten, die direkt nach dem Header folgen), ist saving zwar auch unnötig, aber gibt man weder true, false, noch nil an, so gibt es eine Fehlermeldung.
Der Aufruf per Title-Screen, Event und Menü erfolgt weiterhin wie gewohnt, allerdings kann man die Sache mit dem Menü auch umgestalten (findet sich im Konfigurationspart).
Steuerung im Spiel ist relativ leicht verständlich und wird auch im Header ausführlich erklärt, sollte noch was wichtiges unklar sein, mir melden, dann wird's umgeschrieben.
Mit dem Befehl gain_gamepart(step, val), step steht für die begangene Handlung, val für den dafür erhaltenen Prozentwert (in Promille angeben, zur Darstellung wird die Zahl durch 10 geteilt wegen Komma-Darstellung), kann man in einem Event so die Spielfortschrittsleiste füllen. Ein step kann nur einmalig vergeben werden, wenn man ihn jedoch aus der Liste löscht (geht mit dem Befehl lose_gamepart(step, val)), kann er erneut erhalten werden.
Nutzungsbedingungen:
Freigegeben für jede Nutzung in einem nicht-kommerziellen Produkt, bei einem kommerziellen will ich benachrichtigt werden.
Für die Nutzung des Scripts will ich einen Credits-Eintrag.
Letzte Anmerkungen:
Auf der ersten Info-Seite ist noch ein wenig Platz, wer weiß, wie ich diese füllen kann, bitte melden, damit das Script schnellstmöglich Version 1.0 erreicht. ^^
Außerdem bin ich jederzeit für neue Optionen, Verbesserungen und ähnliches zu haben.
Edit:
Leichte Änderung am Spielverlaufswert. Update auf Version 0.96