查看: 6436|回复: 8

[原创发布] 黑塔利亚同人微恐耽美游戏《隐藏的心》

[复制链接]
梦石
1
星屑
3293
在线时间
908 小时
注册时间
2007-8-13
回帖
94
发表于 2017-8-19 21:58:11 | 显示全部楼层 |阅读模式
游戏发布
游戏类型:RPG 角色扮演
版本信息:
制作工具:RPG Maker XP
游戏时长:0.2 小时
下载地址:https://pan.baidu.com/s/1skInrn3

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

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

×
本帖最后由 青舞 于 2017-8-22 12:31 编辑

这款是我早年作品,某种意义上RPG的处女做。但胜在完整度比较高吧。
最近朋友问我为什么不试着让更多的人玩玩,她觉得不错。
所以我就厚着脸来了。
注意:这是一款耽美游戏,直男,直女慎入
这是一款喜欢点点点不停点才会触发事件这样拖时间的无耻游戏
游戏解谜有些迷,但知道就很简单。
特别告知,这是一款王耀为攻的游戏,耀受党慎入。

剧情大概是讲
离别多年的兄弟,在表面的疏离下,隐藏着的真实心情。

游戏素材:
地图来自66网站,具体是谁画的,我忘记了。
立绘和行走图是我和我朋友画的。
脚本是认识i的人做的。
音乐来自网络

游戏提取码:jg7r
游戏链接:https://pan.baidu.com/s/1skInrn3

因为在贴吧发布过,很多人玩过,所以没有什么大的BUG,尽情游玩。
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 2星屑 +620 收起 理由
FHNBHJ + 500 合格发布
garfeng + 120 耽美必须支持,嘻嘻

查看全部评分

一个懒人!
梦石
2
星屑
5550
在线时间
2566 小时
注册时间
2012-2-9
回帖
947

开拓者

发表于 2017-8-19 22:13:19 | 显示全部楼层
本帖最后由 garfeng 于 2017-8-21 23:38 编辑




=====================

2017.8.20 更新:

所以这是一个虐恋么。

看零碎的日记本,慢慢地还是能(大概?)了解一点故事的脉络,但是我确定刚进入游戏的时候,对于背景是一脸懵B啊……
现在在厨房拿到了扳手,过来右边的房间,看到了羞耻play(捂脸),这是BE吗?
然后卡关了,不知道该往哪里走,求指点一下。右上的门的密码,能稍微提示下在哪里去看线索吗?

诗句要完全推出来真的有难度,比如“橘红无丝织”为什么是“是”,而不是“红无丝”的工。。看到作者君提供的几个答案,感觉作者君也一定和我想的一样,hhhh。
百度一下,这竟然是现成的字谜诗句……(文盲只能退散了)

遇到几个bug:
1. 在多次字谜错误时,有个幽灵跑出来,但是该幽灵什么都没做,故意去和它讲话,也没有什么显示。
2. 用手撕鱼撕不开以后,就不能再对鱼做处理了,只能读档重来。不知道是不是本来就是这么设计的……
3. 右边桌子上的食物,需要设置为固定朝向……
4. 未标题-3.png

录像如下,设置了4倍速,错误框提示在最后:

https://pan.baidu.com/s/1i46YhA9 ... 录像/隐藏的心



=-= 请叫我好人:

[fold=Scene_menu 改成这样]
[pre lang="ruby"]#==============================================================================
# 本脚本来自www.66rpg.com,转载和使用请保留此信息 #==============================================================================

#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
#  存档画面及读档画面的超级类。
#   脚本优化: SailCat
#==============================================================================

class Scene_File
#--------------------------------------------------------------------------
# ● 常量 (存档页数)
#--------------------------------------------------------------------------
MaxPages = 25
#--------------------------------------------------------------------------
# ● 初始化对像
#     help_text : 帮助窗口显示的字符串
#--------------------------------------------------------------------------
def initialize(help_text)
   @help_text = help_text
   @slots = MaxPages * 4
end
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
   # 生成帮助窗口
   @help_window = Window_Help.new
   @help_window.set_text(@help_text)
   @file_index = $game_temp.last_file_index
   # 生成存档文件窗口
   @savefile_windows = []
   # 选择最后操作的文件
   for i in @file_index / 4 * 4..@file_index / 4 * 4 + 3
     load_window(i)
     @savefile_windows.visible = true
   end
   @savefile_windows[@file_index].selected = true
   # 执行过渡
   Graphics.transition
   # 主循环
   loop do
     # 刷新游戏画面
     Graphics.update
     # 刷新输入信息
     Input.update
     # 刷新画面
     update
     # 如果画面被切换的话就中断循环
     if $scene != self
       break
     end
   end
   # 准备过渡
   Graphics.freeze
   # 释放窗口
   @help_window.dispose
   for i in @savefile_windows
     i.dispose if i != nil
   end
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
   # 刷新窗口
   @help_window.update
   for i in @savefile_windows
     i.update if i != nil and i.visible
   end
   # 按下 C 键的情况下
   if Input.trigger?(Input::C)
     # 调用过程 on_decision (定义继承目标)
     on_decision(make_filename(@file_index))
     $game_temp.last_file_index = @file_index
     return
   end
   # 按下 B 键的情况下
   if Input.trigger?(Input::B)
     # 调用过程 on_cancel (定义继承目标)
     on_cancel
     return
   end
   # 按下方向键下的情况下
   if Input.repeat?(Input::DOWN)
     # 演奏光标 SE
     $game_system.se_play($data_system.cursor_se)
     # 光标向下移动
     @savefile_windows[@file_index].selected = false
     @file_index = (@file_index + 1) % @slots
     # 翻到下一页的情况下
     if @file_index % 4 == 0
       for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
         @savefile_windows[(index + @slots - 4) % @slots].visible = false
         load_window(index)
         @savefile_windows[index].visible = true
       end
     end
     @savefile_windows[@file_index].selected = true
     return
   end
   # 按下方向键上的情况下
   if Input.repeat?(Input::UP)
     # 演奏光标 SE
     $game_system.se_play($data_system.cursor_se)
     # 光标向上移动
     @savefile_windows[@file_index].selected = false
     @file_index = (@file_index + @slots - 1) % @slots
     # 翻到上一页的情况下
     if @file_index % 4 == 3
       for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
         @savefile_windows[(index + 4) % @slots].visible = false
         load_window(index)
         @savefile_windows[index].visible = true
       end
     end
     @savefile_windows[@file_index].selected = true
     return
   end
   # 按下方向键左或者 L 的情况下
   if Input.repeat?(Input::LEFT) or Input.trigger?(Input::L)
     # 演奏光标 SE
     $game_system.se_play($data_system.cursor_se)
     # 前翻一页
     @savefile_windows[@file_index].selected = false
     @file_index = (@file_index + @slots - 4) % @slots
     for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
       @savefile_windows[(index + 4) % @slots].visible = false
       load_window(index)
       @savefile_windows[index].visible = true
     end
     @savefile_windows[@file_index].selected = true
     return
   end
   # 按下方向键右或者 R 的情况下
   if Input.repeat?(Input::RIGHT) or Input.trigger?(Input::R)
     # 演奏光标 SE
     $game_system.se_play($data_system.cursor_se)
     # 前翻一页
     @savefile_windows[@file_index].selected = false
     @file_index = (@file_index + 4) % @slots
     for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
       @savefile_windows[(index + @slots - 4) % @slots].visible = false
       load_window(index)
       @savefile_windows[index].visible = true
     end
     @savefile_windows[@file_index].selected = true
     return
   end
end
#--------------------------------------------------------------------------
# ● 生成文件名
#     file_index : 文件名的索引 (0~n)
#--------------------------------------------------------------------------
def make_filename(file_index)
   return "Save#{file_index + 1}.rxdata"
end
#--------------------------------------------------------------------------
# ● 载入当前页存档
#     避免因存档位过多造成的卡壳现象
#--------------------------------------------------------------------------
def load_window(i)
   if @savefile_windows != nil
     return
   else
     @savefile_windows = Window_SaveFile.new(i, make_filename(i))
   end
end
end

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#======================================================================
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
#  处理存档画面的类。
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super("要保存到这个文件吗?")
  end
  #--------------------------------------------------------------------------
  # ● 确定时的处理
  #--------------------------------------------------------------------------
  def on_decision(filename)
    # 演奏存档 SE
    $game_system.se_play($data_system.save_se)
    # 写入存档数据
    file = File.open(filename, "wb")
    write_save_data(file)
    file.close
    # 如果被事件调用
    if $game_temp.save_calling
      # 清除存档调用标志
      $game_temp.save_calling = false
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end
    # 切换到菜单画面
    $scene = Scene_Menu.new(1)
  end
  #--------------------------------------------------------------------------
  # ● 取消时的处理
  #--------------------------------------------------------------------------
  def on_cancel
    # 演奏取消 SE
    $game_system.se_play($data_system.cancel_se)
    # 如果被事件调用
    if $game_temp.save_calling
      # 清除存档调用标志
      $game_temp.save_calling = false
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end
    # 切换到菜单画面
    $scene = Scene_Menu.new(1)
  end
  #--------------------------------------------------------------------------
  # ● 写入存档数据
  #     file : 写入用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # 生成描绘存档文件用的角色图形
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      characters.push([actor.character_name, actor.character_hue])
    end
    # 写入描绘存档文件用的角色数据
    Marshal.dump(characters, file)
    # 写入测量游戏时间用画面计数
    Marshal.dump(Graphics.frame_count, file)
    # 增加 1 次存档次数
    $game_system.save_count += 1
    # 保存魔法编号
    # (将编辑器保存的值以随机值替换)
    $game_system.magic_number = $data_system.magic_number
    # 写入各种游戏对像
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
end
#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  处理读档画面的类。
#==============================================================================

class Scene_MenuLoad < Scene_File
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    # 再生成临时对像
    $game_temp = Game_Temp.new
    # 选择存档时间最新的文件
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    for i in 0..11
      filename = make_filename(i)
      if FileTest.exist?(filename)
        file = File.open(filename, "r")
        if file.mtime > latest_time
          latest_time = file.mtime
          $game_temp.last_file_index = i
        end
        file.close
      end
    end
    super("要载入哪个文件?")
  end
  #--------------------------------------------------------------------------
  # ● 确定时的处理
  #--------------------------------------------------------------------------
  def on_decision(filename)
    # 文件不存在的情况下
    unless FileTest.exist?(filename)
      # 演奏冻结 SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # 演奏读档 SE
    $game_system.se_play($data_system.load_se)
    # 写入存档数据
    file = File.open(filename, "rb")
    read_save_data(file)
    file.close
    # 还原 BGM、BGS
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换到地图画面
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● 取消时的处理
  #--------------------------------------------------------------------------
  def on_cancel
    # 演奏取消 SE
    $game_system.se_play($data_system.cancel_se)
    # 切换到标题画面
    $scene = Scene_Menu.new(2)
  end
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    # 读取描绘存档文件用的角色数据
    characters = Marshal.load(file)
    # 读取测量游戏时间用画面计数
    Graphics.frame_count = Marshal.load(file)
    # 读取各种游戏对像
    $game_system        = 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)
    # 魔法编号与保存时有差异的情况下
    # (加入编辑器的编辑过的数据)
    if $game_system.magic_number != $data_system.magic_number
      # 重新装载地图
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    # 刷新同伴成员
    $game_party.refresh
  end
end
#==============================================================================
# ■ Scene_End
#------------------------------------------------------------------------------
#  处理游戏结束画面的类。
#==============================================================================

class Scene_End
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成命令窗口
    s1 = "返回标题画面"
    s2 = "退出"
    s3 = "取消"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 240 - @command_window.height / 2
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入情报
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    # 如果在标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新命令窗口
    @command_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(3)
      return
    end
    # 按下 C 键的场合下
    if Input.trigger?(Input::C)
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # 返回标题画面
        command_to_title
      when 1  # 退出
        command_shutdown
      when 2  # 取消
        command_cancel
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [返回标题画面] 时的处理
  #--------------------------------------------------------------------------
  def command_to_title
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 切换到标题画面
    $scene = Scene_Title.new
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [退出] 时的处理
  #--------------------------------------------------------------------------
  def command_shutdown
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [取消] 时的处理
  #--------------------------------------------------------------------------
  def command_cancel
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到菜单画面
    $scene = Scene_Menu.new(3)
  end
end

#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  处理菜单画面的类。
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     menu_index : 命令光标的初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    @spriteset = Spriteset_Map.new
    # 生成命令窗口
    s1 = "打开背包"
    s2 = "记录文件"
    s3 = "读取文件"
    s4 = "休息一下"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @command_window.index = @menu_index
    @command_window.x = 240
    @command_window.y = 160
    # 同伴人数为 0 的情况下
    if $game_party.actors.size == 0
      # 物品、特技、装备、状态无效化
      @command_window.disable_item(0)
    end
    # 禁止存档的情况下
    if $game_system.save_disabled
      # 存档无效
      @command_window.disable_item(1)
    end
    # 判定继续的有效性
    # 存档文件一个也不存在的时候也调查
    # 有効为 @continue_enabled 为 true、無効为 false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # 继续为有效的情况下、光标停止在继续上
    # 无效的情况下、继续的文字显示为灰色
    unless @continue_enabled
      @command_window.disable_item(2)
    end
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果切换画面就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    @spriteset.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @command_window.update
    # 命令窗口被激活的情况下: 调用 update_command
    if @command_window.active
      update_command
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (命令窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换的地图画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 同伴人数为 0、存档、游戏结束以外的场合
      if $game_party.actors.size == 0 and @command_window.index < 4
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 命令窗口的光标位置分支
      case @command_window.index
      when 0  # 物品
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到物品画面
        $scene = Scene_Item.new
      when 1  # 存档
        # 禁止存档的情况下
        if $game_system.save_disabled
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到存档画面
        $scene = Scene_Save.new
      when 2  # 读档
        # 继续无效的情况下
        unless @continue_enabled
          # 演奏无效 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到读档画面
        $scene = Scene_MenuLoad.new
      when 3  # 游戏结束
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到游戏结束画面
        $scene = Scene_End.new
      end
      return
    end
  end
end[/pre]
[/fold]

点评

恩,谢谢~  发表于 2017-8-22 18:31
游戏有些地方有治愈的日记会触发治愈的兄弟有爱的CG,收集全部CG就会得到好结局,没有就是普通结局。 宿舍有两个密码,一个获得CG的日记密码。  发表于 2017-8-22 12:11
第一次玩可以看那日记,日记看过次数超过5次还是6次。人物行走图就会脸黑了,从而走向BE结局。  发表于 2017-8-22 12:08
回复

使用道具 举报

梦石
1
星屑
3293
在线时间
908 小时
注册时间
2007-8-13
回帖
94
 楼主| 发表于 2017-8-21 21:57:01 | 显示全部楼层
garfeng 发表于 2017-8-19 22:13
=====================

2017.8.20 更新:


因为是新手时期的作品,本来是打算做接触就死,但是我发布游戏的贴吧都是13岁左右的多,发布后已经被说吓到他们了,所以就后面没有加上接触就死。
为了强行拖时间我就做了一点不符合逻辑的解谜,嗯,就是这么厚脸皮。
那个脚本是因为存档太多,我当初就问了程序,程序说他没有时间。我只能跪了,因为我程序盲。
右边上的食物,因为不需要点,所以我没有注意到,小朋友们也没有和我提《泪目
总体来说是监禁PIAY,懂动画可能会懂一些梗,不懂就可以当有点黄的BL游戏《我就这样无耻
他们经常卡关的就是要去左上角的宿舍,有个大谜题,解法有点麻烦,是最多卡的地方,我是自己结合看过的游戏想出来的,很坑。
羞耻的那个PLAY就是BE。
需要好结局提示吗?

点评

我更新了一下楼上的回复……小小的修改了一下你的“-----系统-----”代码下的“Scene_Menu”,规避这个BUG。=-=再次支持耽美游戏!哼哼哈嘿~  发表于 2017-8-21 23:42
拿到钳子了=-=,我之前一直以为可以用扳手把花瓶杂碎,没想到是砸酒瓶子。另外,求密码的线索提示…… 单看一幅图真的看不懂……  发表于 2017-8-21 23:37
一个懒人!
回复

使用道具 举报

梦石
1
星屑
3293
在线时间
908 小时
注册时间
2007-8-13
回帖
94
 楼主| 发表于 2017-8-22 12:14:27 | 显示全部楼层
garfeng 发表于 2017-8-19 22:13
=====================

2017.8.20 更新:

游戏有些地方有治愈的日记会触发治愈的兄弟有爱的CG,收集全部CG就会得到好结局,没有就是普通结局。
宿舍有两个密码,一个获得CG的日记密码。一个是最后一个房间的大密码。
大密码很折腾,需要看宿舍书架上的书有一些文字,分成好几段,然后有个有很多字母和数字的表,那个表是对应密码的,比如第一段话啊,开始第一个字啊的拼音是A,第一段只有一个字,就是A1,然后看表A1对应的数字,其余都这样解。
一个懒人!
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部