设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2567|回复: 2
打印 上一主题 下一主题

[原创发布] 【简单设置】关于XP中佣兵模式的实现

 关闭 [复制链接]

Lv1.梦旅人

教皇

梦石
0
星屑
50
在线时间
13 小时
注册时间
2007-12-15
帖子
541
跳转到指定楼层
1
发表于 2009-7-25 20:01:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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 的下面写上
  1.             for index in 0...4
  2.   filename = "Save#{index + 1}.rxdata"
  3.   file_exist = FileTest.exist?(filename)
  4.   if file_exist
  5.     file = File.open(filename, "r")
  6.     temp = Marshal.load(file)
  7.     temp = Marshal.load(file)
  8.     temp = Marshal.load(file)
  9.     temp = Marshal.load(file)
  10.     file.close
  11.     result = temp[26] == true
  12.   end
  13. end
  14. if result
  15.   @qihan_hire = true
  16. else
  17.   p "需要有通关存档才能进行佣兵模式"
  18. end
复制代码
其中temp[26] 是我设定的开关号,就是我只要有一个存档中的26号开关是打开的,我就得到@qihan_hire = true(打开全局开关@qihan_hire,这个@faust_hire自己到Game_Temp里设置)。如果没有一个存档的26号开关为打开状态,则显示 需要有通关存档才能进行佣兵模式 。   
    PS:这个是扫贴的时候看到一张贴里面亿万星辰的回答,不是我写的,只是修改..修改......
      这样就对“已经通关”作出判定了

    3.然后就是进入佣兵模式的问题。既然已经判定了通关,接下来就简单了。由于每次开始游戏要刷新数据,所以用已经打开的@qihan_hire开关配合公共事件进行转场是难做到的。照以下设定则可以做到。
      在前面代码后加些东西,使判断转化为结果,整个变为:
  1. when 3 #hire
  2.            for index in 0...4
  3.   filename = "Save#{index + 1}.rxdata"
  4.   file_exist = FileTest.exist?(filename)
  5.   if file_exist
  6.     file = File.open(filename, "r")
  7.     temp = Marshal.load(file)
  8.     temp = Marshal.load(file)
  9.     temp = Marshal.load(file)
  10.     temp = Marshal.load(file)
  11.     file.close
  12.     result = temp[26] == true
  13.   end
  14. end
  15. if result
  16.   @qihan_hire = true
  17. else
  18.   p "需要有通关存档才能进行佣兵模式"
  19. end
  20. if @qihan_hire == true
  21.         command_hire_game
  22.         @qihan_hire = true
  23.         $game_switches[26] = true
  24.       else
  25.         $game_system.se_play($data_system.buzzer_se)
  26.       end
复制代码
再在同一脚本的注释  # ● 命令 : 继续 前的分割线之上加入

  1. #--------------------------------------------------------------------------
  2.   # ● 命令 : 佣兵
  3. #--------------------------------------------------------------------------
  4.   def command_hire_game
  5.     # 演奏确定 SE
  6.     $game_system.se_play($data_system.decision_se)
  7.     # 停止 BGM
  8.     Audio.bgm_stop
  9.     # 重置测量游戏时间用的画面计数器
  10.     Graphics.frame_count = 0
  11.     # 生成各种游戏对像
  12.     $game_temp          = Game_Temp.new
  13.     $game_system        = Game_System.new
  14.     $game_switches      = Game_Switches.new
  15.     $game_variables     = Game_Variables.new
  16.     $game_self_switches = Game_SelfSwitches.new
  17.     $game_screen        = Game_Screen.new
  18.     $game_actors        = Game_Actors.new
  19.     $game_party         = Game_Party.new
  20.     $game_troop         = Game_Troop.new
  21.     $game_map           = Game_Map.new
  22.     $game_player        = Game_Player.new
  23.     # 设置初期同伴位置
  24.     $game_party.setup_starting_members
  25.     # 设置初期位置的地图
  26.     $game_map.setup(169)
  27.     # 主角向初期位置移动
  28.     $game_player.moveto(9, 7)
  29.     # 刷新主角
  30.     $game_player.refresh
  31.     # 执行地图设置的 BGM 与 BGS 的自动切换
  32.     $game_map.autoplay
  33.     # 刷新地图 (执行并行事件)
  34.     $game_map.update
  35.     # 切换地图画面
  36.     $scene = Scene_Map.new
  37.     # 执行过渡,过渡到全黑
  38.     Graphics.transition(20)
  39.     # 准备过渡,用于准备过渡到标题画面
  40.     Graphics.freeze
  41.     # 定义佣兵模式
  42.     @qihan_hire = true
  43.   end
复制代码
这个完全是按照新游戏命令写的,其中
    # 设置初期位置的地图
    $game_map.setup(169)
      # 主角向初期位置移动
    $game_player.moveto(9, 7)
       169就是佣兵模式第一张图的ID,这张图用来准备佣兵模式的开始,前面有提到。9,7是在该张图上出现的坐标,这两个根据需要设定。

    这样就完成了佣兵模式的进入,至于是否保留主角,佣兵队伍的人数与难度的关系度,佣兵状态是否允许存档等,完全在第一张图中设定就可以了,这里就不赘言。
    系统到此结束。



关于扩展:
  显然的,首先,这种方式可以用来制作隐藏任务和后续情节。
  其次,这种方式可以用来在通关后通过修改变量改变游戏一些设置,也可以用来调整难度。比如说“玩家”“专家”“大神”等等...
  然后,这种方式具有更多的灵活性,方便后续的展开。
     比如说:我做了两个游戏,有一个是补充,我可以通过控制第一个游戏结束的地图ID与第二个游戏开始的地图ID,实现第二个游戏的某些剧情需要使用第一个游戏的存档开启,当然我暂时不知道这效果怎样...
   接着......



没了。
RA厚积而薄发

//and

game face

Lv3.寻梦者

梦石
0
星屑
1050
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

2
发表于 2009-7-25 20:19:30 | 只看该作者
LZ来张图的话,就是神来之笔了!

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6545
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

3
发表于 2009-7-26 11:36:45 | 只看该作者
能标示版本号的尽量标示。以备下次优化更新。
可以用图片来表现脚本效果的最好附上截图~

长篇大论能从头看到尾的人不多
如果可以附上几张图的话 那感觉就会好得多了~











你知道得太多了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-29 12:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表