大纲

作者: Heartcase_b8c0 | 来源:发表于2020-12-27 23:32 被阅读0次

    WorldEffect 第一期大纲: 给 RM 的世界以活着的感觉

    • GameSelfData: 事件独立数据

      • Game_SelfData
        • 重写value(key)
        • 重写setValue(key, value)
      • $gameSelfData 全局对象
        • 对象初始化
        • 存档序列化支持
      • 插件命令 getSelfData(key)
      • 插件命令 setSelfData(key, value)
    • EventClerk: 自动保持事件状态, 依赖于GameSelfData

      • getKey(event, key)
        • 如果是该事件和其他事件共享数据, 则返回共享的 key 名
        • 如果是Game_Event, 则返回[mapId, eventId, key]
        • 如果是具有getKey方法的拓展类, 则返回其各自的getKey方法的值
      • setEventState(event, {pos, blend_mode, opacity, image, erased })
        • 手动设置事件位置,朝向,透明度,行走图,混合模式和消除状态
        • 刷新地图
      • 记录状态 EventClerk.saveEventState(event)
      • 还原状态 EventClerk.restoreEventState(event)
      • 清空状态 EventClerk.clearEventState(event)
      • 重写Game_Event.prototype.refresh, 注入restoreEventState
      • 重写Game_Event.prototype.processRouteEnd, 注入saveEventState
      • 重写Game_Event.prototype.locate, 注入saveEventState
      • 重写Game_Event.prototype.setDirection, 注入saveEventState
      • 重写Game_Event.prototype.erase, 注入saveEventState
      • 插件命令 setEvent(eventId, key, value)
      • 插件命令 clearEventState(eventId)
      • 插件注释 <EventClerk> 表示这个是记录状态的事件
      • 插件注释 <EventClerk:x> 表示这个是 id 为 x 的共享状态事件
    • Storyline: 非线性剧情状态管理

      • Story 故事对象

        • 包含一个对外展示的任务名displayName
        • 每个故事拥有一个状态status: INACTIVE, STARTED, COMPLETED, FAILED
        • 每个故事存在一个当前Stage
        • 包含若干Route, 如果满足Route中的条件, 则跳转到NextStage
      • Stage 故事环节

        • 存在若干Progress
        • 包含若干Route, 如果满足Route中的条件, 则跳转到NextStage
      • Checkpoint 检查点

        • 表示角色是否做出了某种行为的标识, 默认为 false
      • Route 路线

        • 包含一个NextStage
        • 包含若干个Checkpoints
        • 包含一个优先级priority
        • 包含一个设置Storyline status的选项, 设置为UNCHANGED则不变
      • Progress 进度

        • 记录玩家行为进度的对象, 可仅作为展示也可以作为Checkpoint设置值的依据
        • 包含值value
        • 包含边际值maxValue
        • 一条输出文本, 比如: '[可选] 打倒敌人($$value$$/$$maxValue$$)'
      • 全局字典stories, stages, checkpointsprogresses

        • name字符串为索引
        • 所有对象互相间的关联都通过name字符串做索引在全局字典中查找实现
        • 支持存档可序列化
      • createStory(storyName, firstStageName, status)

        • 创建一个Story
        • 如果firstStageName给出但不存在则创建一个
        • 默认statusinactive
      • createStage(stageName, progressNames)

        • 创建一个Stage
        • 关联progressNames中所有的progress
        • 如果progressName还没有定义, 则创建一个默认的
      • createCheckpoint(checkpointName, state)

        • 创建一个Checkpoint, 并设置其默认状态
      • createProgress

      • addStoryRoute

      • addStageRoute

      • addStageProgress

      • setStoryStage

      • setStoryStatus

      • updateCheckpoints

      • updateStoryStage

      • setProgressState

      • setCheckpointState

      • getStory

      • getCheckpoint

      • getProgress

      • 插件命令 setProgress

      • 插件命令 setCheckpoint

    • TimeFly: 地图时间流逝

      • 插件参数 timeRatio: 游戏事件和真实时间比例
      • 全局对象frames
        • 支持存档可序列化
      • setTime(hour, minute, second)
      • addTime(hour, minute, second)
      • tick()
      • pause()
      • resume()
      • getTime()
        • 以 hh:mm:ss 格式输出
      • onOverflow(n)
        • n 代表超过的天数, 用于给其他插件重写
      • onHour()
        • 每小时触发一次, 用于给其他插件重写
      • 重写Game_Map.prototype.update
        • $gameMap._interpreter运行时暂停计时
        • $gameMap处于非激活状态时暂停计时
      • 插件命令pause
      • 插件命令resume
      • 插件命令getTime
      • 插件命令setTime
      • 插件命令addTime
    • NewDay

      • 通过重写TimeFly的回调函数来实现日, 月份和年的管理
      • 插件参数: 月份长度, 季度长度
      • UI 对日期和事件的展示
    • EventWanderer: 跨地图事件和运行时事件(事件模板), 依赖于GameSelfData

      • 插件参数 模板地图 ID eventMapId
      • 模板地图上设置模板事件, 然后基于模板事件动态创建事件在其他地图上
      • 每个动态事件具有独立的对应数据
      • 模板地图会被保存到$dataEventMap中来
        • 会在游戏加载阶段和其他数据库文件同时加载 (DataManager._databaseFiles)
      • 全局对象数组$gameEvents
        • 每一个元素记录一个动态事件的数据
        • 包含一个唯一 id
        • 包含一个对应模板事件的 id
        • 包含独立的所在地图, 位置, 行走图, 透明度等信息
      • 新的拓展类Game_DynamicEvent
        • 重写event()方法 指向模板地图上的事件而不是当前地图的事件
      • 重写Game_Map.prototype.setupEvents, 将DynamicEvent也写入_events
        • 会创建动态新的对象Game_DynamicEvent
        • 动态事件的eventId在当前地图中不得重复
      • createDynamicEventData(data) 创建
        • 会自动添加到$gameEvents数组中去
        • 追加事件到Game_MapTilemap中(如果在当前地图中)
        • 刷新地图
      • removeDynamicEventData(id)
        • 清除数据
        • Game_MapTilemap中清除(如果在当前地图中)
        • 刷新地图
      • setDynamicEventData(id, data)
      • 插件命令 createEvent
        • 将 id 保存到变量以备用户之后使用
      • 插件命令 setEvent
        • 可以设置位置, 行走图, 透明度, 消除状态等...
      • 插件命令 removeEvent
        • 变量指定 id
    • PageSwitch: 事件页面自定义开关

      • 在事件页增加额外事件出现条件

        • 当最前面的一条或多条注释满足正则表达式, 则会执行对应的判断
      • SelfDataSwitch: 事件独立数据页面开关拓展

        • 正则表达式
        • 判断独立数据是否满足条件
      • StorylineSwitch: 剧情状态数据页面开关拓展

        • 正则表达式
        • 判断剧情环节和进度或检查点是否满足条件
      • TimeFlySwitch: 时间状态页面开关拓展

        • 判断时间是否满足条件
    • NoNPC: NPC 数据和行为定义, EventWanderer拓展, 依赖于PageSwitchTimeFly

      • 全局字典$gameNpc, 映射 npc id 和动态事件$gameEvents中的 id
      • 预期功能
        • 地图内巡逻路线, 定点逗留
        • 并行的登场/离场
        • 当停靠在相邻定点时, NPC 间会闲聊
        • 不同场景下会有不同的对话
      • 定义地图中的寻路节点, 定点和转移点
    • StoryBoard

      • 任务 UI
      • 可设置正在追踪的任务
      • 地图上悬浮的进度跟踪

    相关文章

      网友评论

          本文标题:大纲

          本文链接:https://www.haomeiwen.com/subject/cknanktx.html