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.dispose end #-------------------------------------------------------------------------- # * 更新幀 #-------------------------------------------------------------------------- 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 end end #-------------------------------------------------------------------------- # * 創建命令視窗(4項) #-------------------------------------------------------------------------- def create_command_window s1 = Vocab::item # 物品 s2 = "读档" # 读档 s3 = "队形" # 队形 ★ 新增 s4 = Vocab::game_end # 结束游戏 @command_window = Window_Command.new(160, [s1, s2, s3, s4]) @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[new_visible].selected = true end end end end #-------------------------------------------------------------------------- # * 確定存檔/讀檔 #-------------------------------------------------------------------------- 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 = @index end #-------------------------------------------------------------------------- # * 游標下移 #-------------------------------------------------------------------------- def cursor_down(wrap) if @index < SAVEFILE_COUNT - 1 or wrap @index = (@index + 1) % SAVEFILE_COUNT end end #-------------------------------------------------------------------------- # * 游標上移 #-------------------------------------------------------------------------- def cursor_up(wrap) if @index > 0 or wrap @index = (@index - 1 + SAVEFILE_COUNT) % SAVEFILE_COUNT end end #-------------------------------------------------------------------------- # * 獲取最新存檔的索引 #-------------------------------------------------------------------------- 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 index end #-------------------------------------------------------------------------- # * 執行存檔(標準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_scene end #-------------------------------------------------------------------------- # * 執行讀檔(自動嘗試多種格式) #-------------------------------------------------------------------------- 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 nil end #-------------------------------------------------------------------------- # * 寫入存檔數據(標準VX格式,15項,BGM在後) #-------------------------------------------------------------------------- def write_save_data(file) characters = [] for i in 0...$game_party.members.size actor = $game_party.members[i] characters.push([actor.character_name, actor.character_index]) 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) # 15 end #-------------------------------------------------------------------------- # * 讀取存檔 格式一:標準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[i].id].setup($game_party.members[i].id) end end #-------------------------------------------------------------------------- # * 讀取存檔 格式二: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[i].id].setup($game_party.members[i].id) end end #-------------------------------------------------------------------------- # * 返回原場景 #-------------------------------------------------------------------------- def return_scene if @from_title $scene = Scene_Title.new elsif @from_event $scene = Scene_Map.new else $scene = Scene_Menu.new(1) # 返回菜單,停在「讀檔」位置 end endend复制代码
复制代码
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.level end # 等级 (缩写) def self.level_a return $data_system.terms.level_a end # HP def self.hp return $data_system.terms.hp end # HP (缩写) def self.hp_a return $data_system.terms.hp_a end # MP def self.mp return $data_system.terms.mp end # MP (缩写) def self.mp_a return $data_system.terms.mp_a end # 攻击力 def self.atk return $data_system.terms.atk end # 防御力 def self.def return $data_system.terms.def end # 意志力 def self.spi return $data_system.terms.spi end # 敏捷力 def self.agi return $data_system.terms.agi end # 武器 def self.weapon return $data_system.terms.weapon end # 盾 def self.armor1 return $data_system.terms.armor1 end # 头戴 def self.armor2 return $data_system.terms.armor2 end # 身穿 def self.armor3 return $data_system.terms.armor3 end # 佩戴 def self.armor4 return $data_system.terms.armor4 end # 左手 def self.weapon1 return $data_system.terms.weapon1 end # 右手 def self.weapon2 return $data_system.terms.weapon2 end # 攻击 def self.attack return $data_system.terms.attack end # 技能 def self.skill return $data_system.terms.skill end # 防御 def self.guard return $data_system.terms.guard end # 用品 def self.item return $data_system.terms.item end # 整备 def self.equip return $data_system.terms.equip end # 状态 def self.status return $data_system.terms.status end # 存档 def self.save return $data_system.terms.save end # 结束游戏 def self.game_end return $data_system.terms.game_end end # 战斗 def self.fight return $data_system.terms.fight end # 撤退 def self.escape return $data_system.terms.escape end # 新的剧情 def self.new_game return $data_system.terms.new_game end # 读取存档 def self.continue return $data_system.terms.continue end # 退出游戏 def self.shutdown return $data_system.terms.shutdown end # 返回标题画面 def self.to_title return $data_system.terms.to_title end # 取消 def self.cancel return $data_system.terms.cancel end # G (货币单位) def self.gold return $data_system.terms.gold endend复制代码
复制代码 Tips:还需要手动改的地方
Vocab 里的 level、hp、mp、atk、item、save 这些方法返回的是数据库里设置的用语,脚本里改不了,需要去数据库里改:
打开数据库(F9)切换到「系统」标签找到「用语」一栏把里面的繁体词条逐个改成简体
改完这两处,游戏的系统界面文字就基本都是简体了。剩下的物品名、技能名、对话等需要去数据库和事件里手动改。
本帖来自P1论坛作者31号焦糖色,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=499068 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |