Project1
标题:
【简单设置】关于XP中佣兵模式的实现
[打印本页]
作者:
faust
时间:
2009-7-25 20:01
标题:
【简单设置】关于XP中佣兵模式的实现
本帖最后由 faust 于 2009-7-25 20:06 编辑
一切针对未修改过的系统
前一段时间把PC版生化4通关了-_-!!!,由于当时对游戏的设定还不太熟,而且还有几个星期就要高考,所以没有看片尾就直接exit了。后来别人告诉我最后存档的话还有个佣兵模式,一试,果然。游戏全通关以后貌似可以打开一个开关,以后再进入包括界面和系统将会发生不小的改变,而佣兵模式也变得可以进入。
最近在鼓捣以高中班级为主题的游戏,为大部分人制作了战斗图,以参与任务的方式加入队伍,任务结束自动离队。这样是比较方便,但是经过讨论还是觉得每个人的出场率都显得有些低了,那如何才能增加任务的出场次数,并且不受任务限制呢?于是,我义无反顾的想到了佣兵模式。
首先是解决佣兵系统的问题,这个简单,可以画好几张地图,第一张图用传统的背景介绍的方式画成全黑,使用一个并行事件将主角从队伍中踢掉,再加入一个长得让人知道这不是主角的东东(比如说一个小精灵)作为主角使用。再在后几张图中使用仿魔兽3C选英雄的方式选好队伍、关卡和难度,这个时候又可以体现这个临时主角的作用:因为要在每一个人物选择NPC的最后加上【小精灵】离队,这样在进入下一张图的时候就可以通过判断小精灵是否在队伍来判定是否进行下一步,这样就没必要设计一个独立的变量。
佣兵系统的问题解决了,解决胜利判定和游戏平衡度的问题,用公共事件和NPC处理,相信还是比较容易的。
接下来就是通关判定的问题,也就是佣兵模式进入的问题。
1.我们需要在Scene_Title里增加一个进入佣兵模式的项目。在#生成命令的窗口 下的s1=.... s2=.... s3=...下照样写一个 s4=佣兵模式。再在@command_window = Window_Command.new(192, [s1, s2, s3])语句中s3后面加上 ,s4
然后在下面找到
# ● 刷新画面
def update
这里有一个 when 0 .... when 1 ..... 啥的啥的,在这后面加上 when 3 # hire 。这个# hire是注释。
这样就可以进入游戏看看了,窗口已经做好了。
2.接下来要处理的是通关判定的问题,由于游戏开始会全部刷新,就RMXP来说要用游戏本身触发的一个开关来变更系统设置是比较难的。如何能够简化这一步骤呢?我们当然要毫不犹豫的想到外置。如果是外置一个txt或者自定个啥后缀的文件,容易被别人修改。所以我们要用一种外置的,安全的,方便的文件来进行,所以最好是使用存档文件来处理。
在 when 3 #hire 的下面写上
for index in 0...4
filename = "Save#{index + 1}.rxdata"
file_exist = FileTest.exist?(filename)
if file_exist
file = File.open(filename, "r")
temp = Marshal.load(file)
temp = Marshal.load(file)
temp = Marshal.load(file)
temp = Marshal.load(file)
file.close
result = temp[26] == true
end
end
if result
@qihan_hire = true
else
p "需要有通关存档才能进行佣兵模式"
end
复制代码
其中temp[26] 是我设定的开关号,就是我只要有一个存档中的26号开关是打开的,我就得到@qihan_hire = true(打开全局开关@qihan_hire,这个@faust_hire自己到Game_Temp里设置)。如果没有一个存档的26号开关为打开状态,则显示 需要有通关存档才能进行佣兵模式 。
PS:这个是扫贴的时候看到一张贴里面亿万星辰的回答,不是我写的,只是修改..修改......
这样就对“已经通关”作出判定了
3.然后就是进入佣兵模式的问题。既然已经判定了通关,接下来就简单了。由于每次开始游戏要刷新数据,所以用已经打开的@qihan_hire开关配合公共事件进行转场是难做到的。照以下设定则可以做到。
在前面代码后加些东西,使判断转化为结果,整个变为:
when 3 #hire
for index in 0...4
filename = "Save#{index + 1}.rxdata"
file_exist = FileTest.exist?(filename)
if file_exist
file = File.open(filename, "r")
temp = Marshal.load(file)
temp = Marshal.load(file)
temp = Marshal.load(file)
temp = Marshal.load(file)
file.close
result = temp[26] == true
end
end
if result
@qihan_hire = true
else
p "需要有通关存档才能进行佣兵模式"
end
if @qihan_hire == true
command_hire_game
@qihan_hire = true
$game_switches[26] = true
else
$game_system.se_play($data_system.buzzer_se)
end
复制代码
再在同一脚本的注释 # ● 命令 : 继续 前的分割线之上加入
#--------------------------------------------------------------------------
# ● 命令 : 佣兵
#--------------------------------------------------------------------------
def command_hire_game
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 停止 BGM
Audio.bgm_stop
# 重置测量游戏时间用的画面计数器
Graphics.frame_count = 0
# 生成各种游戏对像
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 设置初期同伴位置
$game_party.setup_starting_members
# 设置初期位置的地图
$game_map.setup(169)
# 主角向初期位置移动
$game_player.moveto(9, 7)
# 刷新主角
$game_player.refresh
# 执行地图设置的 BGM 与 BGS 的自动切换
$game_map.autoplay
# 刷新地图 (执行并行事件)
$game_map.update
# 切换地图画面
$scene = Scene_Map.new
# 执行过渡,过渡到全黑
Graphics.transition(20)
# 准备过渡,用于准备过渡到标题画面
Graphics.freeze
# 定义佣兵模式
@qihan_hire = true
end
复制代码
这个完全是按照新游戏命令写的,其中
# 设置初期位置的地图
$game_map.setup(169)
# 主角向初期位置移动
$game_player.moveto(9, 7)
169就是佣兵模式第一张图的ID,这张图用来准备佣兵模式的开始,前面有提到。9,7是在该张图上出现的坐标,这两个根据需要设定。
这样就完成了佣兵模式的进入,至于是否保留主角,佣兵队伍的人数与难度的关系度,佣兵状态是否允许存档等,完全在第一张图中设定就可以了,这里就不赘言。
系统到此结束。
[line]8[/line]
关于扩展:
显然的,首先,这种方式可以用来制作隐藏任务和后续情节。
其次,这种方式可以用来在通关后通过修改变量改变游戏一些设置,也可以用来调整难度。比如说“玩家”“专家”“大神”等等...
然后,这种方式具有更多的灵活性,方便后续的展开。
比如说:我做了两个游戏,有一个是补充,我可以通过控制第一个游戏结束的地图ID与第二个游戏开始的地图ID,实现第二个游戏的某些剧情需要使用第一个游戏的存档开启,当然我暂时不知道这效果怎样...
接着......
没了。
作者:
DeathKing
时间:
2009-7-25 20:19
LZ来张图的话,就是神来之笔了!
作者:
后知后觉
时间:
2009-7-26 11:36
能标示版本号的尽量标示。以备下次优化更新。
可以用图片来表现脚本效果的最好附上截图~
长篇大论能从头看到尾的人不多
如果可以附上几张图的话 那感觉就会好得多了~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1