扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 111|回复: 0

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

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10622
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13391

    灌水之王

    发表于 2024-4-19 16:44:54 | 显示全部楼层 |阅读模式
    一切针对未修改过的系统

        前一段时间把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  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  endendif result  @qihan_hire = trueelse  p "需要有通关存档才能进行佣兵模式"end复制代码
    复制代码
    其中temp[26] 是我设定的开关号,就是我只要有一个存档中的26号开关是打开的,我就得到@qihan_hire = true(打开全局开关@qihan_hire,这个@faust_hire自己到Game_Temp里设置)。如果没有一个存档的26号开关为打开状态,则显示 需要有通关存档才能进行佣兵模式 。   
        PS:这个是扫贴的时候看到一张贴里面亿万星辰的回答,不是我写的,只是修改..修改......
          这样就对“已经通关”作出判定了

        3.然后就是进入佣兵模式的问题。既然已经判定了通关,接下来就简单了。由于每次开始游戏要刷新数据,所以用已经打开的@qihan_hire开关配合公共事件进行转场是难做到的。照以下设定则可以做到。
          在前面代码后加些东西,使判断转化为结果,整个变为:
    1. 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  endendif result  @qihan_hire = trueelse  p "需要有通关存档才能进行佣兵模式"endif @qihan_hire == true        command_hire_game        @qihan_hire = true        $game_switches[26] = true      else        $game_system.se_play($data_system.buzzer_se)      end复制代码
    复制代码
    再在同一脚本的注释  # ● 命令 : 继续 前的分割线之上加入
    1. #--------------------------------------------------------------------------  # ● 命令 : 佣兵#--------------------------------------------------------------------------  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是在该张图上出现的坐标,这两个根据需要设定。

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



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



    没了。
                 本帖来自P1论坛作者faust,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=129744  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-14 23:57 , Processed in 0.079642 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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