(VX)RPG解密游戏简单菜单模板
RPG解密游戏简易菜单模板(含增加菜单读档、更换领队、存档位增加、繁体改简体等)序号 脚本名称 类型 内容
1 Scene_Menu 修改 精简菜单为 4 项:物品、读档、队形、结束游戏
2 Scene_Formation 新建 队形调整场景,用 ← → 交换角色位置,自动更新领队变量
3 Scene_File 修改 存档位从 4 个扩展到 20 个,支持上下滚动选择
4 Vocab 修改 界面用语全部从繁体转简体
Scene_Menu #==============================================================================# ** Scene_Menu#------------------------------------------------------------------------------#菜單:物品 / 读档 / 队形 / 结束游戏#==============================================================================class Scene_Menu < Scene_Base#--------------------------------------------------------------------------# * 物件初始化#--------------------------------------------------------------------------def initialize(menu_index = 0) @menu_index = 0# 光標永遠在第一項end#--------------------------------------------------------------------------# * 程式開始#--------------------------------------------------------------------------def start super create_menu_background create_command_window @status_window = Window_MenuStatus.new(160, 0)end#--------------------------------------------------------------------------# * 程式中止#--------------------------------------------------------------------------def terminate super dispose_menu_background @command_window.dispose @status_window.disposeend#--------------------------------------------------------------------------# * 更新幀#--------------------------------------------------------------------------def update super update_menu_background @command_window.update @status_window.update if @command_window.active update_command_selection elsif @status_window.active update_actor_selection endend#--------------------------------------------------------------------------# * 創建命令視窗(4項)#--------------------------------------------------------------------------def create_command_window s1 = Vocab::item # 物品 s2 = "读档" # 读档 s3 = "队形" # 队形 ★ 新增 s4 = Vocab::game_end # 结束游戏 @command_window = Window_Command.new(160, ) @command_window.index = @menu_index @command_window.refresh # 隊伍為空時禁用物品和隊形 if $game_party.members.size == 0 @command_window.draw_item(0, false) @command_window.draw_item(2, false) end # 隊伍只有1人時禁用隊形 if $game_party.members.size = @top_index + VISIBLE_ROWS @top_index = @index - VISIBLE_ROWS + 1 refresh_savefile_windows end new_visible = @index - @top_index if new_visible >= 0 && new_visible < VISIBLE_ROWS @savefile_windows.selected = true end end endend#--------------------------------------------------------------------------# * 確定存檔/讀檔#--------------------------------------------------------------------------def determine_savefile if @saving Sound.play_save do_save else if @savefile_windows[@index - @top_index].file_exist Sound.play_load do_load else Sound.play_buzzer return end end $game_temp.last_file_index = @indexend#--------------------------------------------------------------------------# * 游標下移#--------------------------------------------------------------------------def cursor_down(wrap) if @index < SAVEFILE_COUNT - 1 or wrap @index = (@index + 1) % SAVEFILE_COUNT endend#--------------------------------------------------------------------------# * 游標上移#--------------------------------------------------------------------------def cursor_up(wrap) if @index > 0 or wrap @index = (@index - 1 + SAVEFILE_COUNT) % SAVEFILE_COUNT endend#--------------------------------------------------------------------------# * 獲取最新存檔的索引#--------------------------------------------------------------------------def latest_file_index index = 0 latest_time = Time.at(0) (0...SAVEFILE_COUNT).each do |i| filename = "Save#{i + 1}.rvdata" if FileTest.exist?(filename) time = File.mtime(filename) if time > latest_time latest_time = time index = i end end end return indexend#--------------------------------------------------------------------------# * 執行存檔(標準VX格式,15項)#--------------------------------------------------------------------------def do_save filename = "Save#{@index + 1}.rvdata" current_window = @savefile_windows[@index - @top_index] current_window.selected = false file = File.open(filename, "wb") write_save_data(file) file.close current_window.load_gamedata rescue nil current_window.refresh current_window.selected = true Sound.play_save return_sceneend#--------------------------------------------------------------------------# * 執行讀檔(自動嘗試多種格式)#--------------------------------------------------------------------------def do_load filename = "Save#{@index + 1}.rvdata" unless FileTest.exist?(filename) Sound.play_buzzer return end Sound.play_load # 先嘗試格式一:標準VX格式(15項,BGM在後) begin file = File.open(filename, "rb") read_save_data_standard(file) file.close rescue file.close rescue nil # 失敗就嘗試格式二:BGM在前(14項) begin file = File.open(filename, "rb") read_save_data_bgm_first(file) file.close rescue file.close rescue nil # 都失敗就報錯 Sound.play_buzzer return end end $scene = Scene_Map.new RPG::BGM.fade(1500) Graphics.fadeout(60) Graphics.wait(40) @last_bgm.play rescue nil @last_bgs.play rescue nilend#--------------------------------------------------------------------------# * 寫入存檔數據(標準VX格式,15項,BGM在後)#--------------------------------------------------------------------------def write_save_data(file) characters = [] for i in 0...$game_party.members.size actor = $game_party.members characters.push() end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id @last_bgm = RPG::BGM.last @last_bgs = RPG::BGS.last Marshal.dump(characters, file)# 1 Marshal.dump(Graphics.frame_count, file)# 2 Marshal.dump($game_system, file)# 3 Marshal.dump($game_message, file)# 4 Marshal.dump($game_switches, file)# 5 Marshal.dump($game_variables, file)# 6 Marshal.dump($game_self_switches,file)# 7 Marshal.dump($game_screen, file)# 8 ★ 加上畫面數據 Marshal.dump($game_actors, file)# 9 Marshal.dump($game_party, file)# 10 Marshal.dump($game_troop, file)# 11 Marshal.dump($game_map, file)# 12 Marshal.dump($game_player, file)# 13 Marshal.dump(@last_bgm, file)# 14 Marshal.dump(@last_bgs, file)# 15end#--------------------------------------------------------------------------# * 讀取存檔 格式一:標準VX(15項,BGM在後)#--------------------------------------------------------------------------def read_save_data_standard(file) characters = Marshal.load(file) Graphics.frame_count = 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_screen = 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) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end $game_party.members.size.times do |i| $game_actors[$game_party.members.id].setup($game_party.members.id) endend#--------------------------------------------------------------------------# * 讀取存檔 格式二:BGM在前(14項,無game_screen)#--------------------------------------------------------------------------def read_save_data_bgm_first(file) characters = Marshal.load(file) Graphics.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) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end $game_party.members.size.times do |i| $game_actors[$game_party.members.id].setup($game_party.members.id) endend#--------------------------------------------------------------------------# * 返回原場景#--------------------------------------------------------------------------def return_scene if @from_title $scene = Scene_Title.new elsif @from_event $scene = Scene_Map.new else $scene = Scene_Menu.new(1)# 返回菜單,停在「讀檔」位置 endendend复制代码
Vocab #==============================================================================# ** Vocab#------------------------------------------------------------------------------#这个模块定义了界面用语和互动消息的显示内容。#它将一些信息定义为常量,而数据库里的用语数据读取自 $data_system 字段。#==============================================================================module Vocab# 交易界面ShopBuy = "购入"ShopSell = "售出"ShopCancel = "放弃"Possession = "拥有量"# 状态界面ExpTotal = "当前经验值"ExpNext = "%s提升所欠经验值"# 进度档案管理界面SaveMessage = "请问您要把进度保存到第几个档位?"LoadMessage = "请问您要从第几个档位元读取进度?"File = "档位"# 在队伍里有多人时显示的讯息PartyName = "%s一行人"# 基本战斗讯息Emerge = "%s现身。"Preemptive = "%s占据上风。"Surprise = "%s被偷袭。"EscapeStart = "%s准备撤退。"EscapeFailure = "然而,撤退是徒劳的。"# 战斗结束讯息Victory = "%s得胜。"Defeat = "%s战败。"ObtainExp = "获得%s点EXP。"ObtainGold = "%s%s已获得。"ObtainItem = "%s被发现。"LevelUp = "%s%s提升为%s。"ObtainSkill = "%s已经习得。"# 战斗指令DoAttack = "%s发动攻击。"DoGuard = "%s防御中。"DoEscape = "%s撤退了。"DoWait = "%s等待中。"UseItem = "%s使用了%s。"# 暴击CriticalToEnemy = "狂暴攻击!!"CriticalToActor = "热血痛击!!"# 主角的行动结果 # 友情提示: %1$s 代表主角[下一段这个标志表示为敌人角色] # %2$s 代表HP/MP # %3$s 代表点数,也就是HP/MP的值ActorDamage = "%s受到了%s点伤害。"ActorLoss = "%1$s失去了%3$s点%2$s。"ActorDrain = "%1$s被吸走了%3$s点%2$s。"ActorNoDamage = "%s没有受到任何伤害。"ActorNoHit = "落空!%s没有受到任何伤害。"ActorEvasion = "%s躲过了攻击。"ActorRecovery = "%1$s恢复了%3$s点%2$s。"# 敌人角色的行动结果EnemyDamage = "%s受到了%s点伤害。"EnemyLoss = "%1$s失去了%3$s点%2$s。"EnemyDrain = "%1$s被吸走了%3$s点%2$s。"EnemyNoDamage = "%s没有受到任何伤害。"EnemyNoHit = "落空!%s没有受到任何伤害。"EnemyEvasion = "%s躲过了攻击。"EnemyRecovery = "%1$s恢复了%3$s点%2$s。"# 物品和非实体攻击类技能使用无效ActionFailure = "%s没有受到任何影响。"# 等级def self.level return $data_system.terms.levelend# 等级 (缩写)def self.level_a return $data_system.terms.level_aend# HPdef self.hp return $data_system.terms.hpend# HP (缩写)def self.hp_a return $data_system.terms.hp_aend# MPdef self.mp return $data_system.terms.mpend# MP (缩写)def self.mp_a return $data_system.terms.mp_aend# 攻击力def self.atk return $data_system.terms.atkend# 防御力def self.def return $data_system.terms.defend# 意志力def self.spi return $data_system.terms.spiend# 敏捷力def self.agi return $data_system.terms.agiend# 武器def self.weapon return $data_system.terms.weaponend# 盾def self.armor1 return $data_system.terms.armor1end# 头戴def self.armor2 return $data_system.terms.armor2end# 身穿def self.armor3 return $data_system.terms.armor3end# 佩戴def self.armor4 return $data_system.terms.armor4end# 左手def self.weapon1 return $data_system.terms.weapon1end# 右手def self.weapon2 return $data_system.terms.weapon2end# 攻击def self.attack return $data_system.terms.attackend# 技能def self.skill return $data_system.terms.skillend# 防御def self.guard return $data_system.terms.guardend# 用品def self.item return $data_system.terms.itemend# 整备def self.equip return $data_system.terms.equipend# 状态def self.status return $data_system.terms.statusend# 存档def self.save return $data_system.terms.saveend# 结束游戏def self.game_end return $data_system.terms.game_endend# 战斗def self.fight return $data_system.terms.fightend# 撤退def self.escape return $data_system.terms.escapeend# 新的剧情def self.new_game return $data_system.terms.new_gameend# 读取存档def self.continue return $data_system.terms.continueend# 退出游戏def self.shutdown return $data_system.terms.shutdownend# 返回标题画面def self.to_title return $data_system.terms.to_titleend# 取消def self.cancel return $data_system.terms.cancelend# G (货币单位)def self.gold return $data_system.terms.goldendend复制代码Tips:还需要手动改的地方
Vocab 里的 level、hp、mp、atk、item、save 这些方法返回的是数据库里设置的用语,脚本里改不了,需要去数据库里改:
打开数据库(F9)切换到「系统」标签找到「用语」一栏把里面的繁体词条逐个改成简体
改完这两处,游戏的系统界面文字就基本都是简体了。剩下的物品名、技能名、对话等需要去数据库和事件里手动改。
本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=499068若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]