大纲

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
    • 可设置正在追踪的任务
    • 地图上悬浮的进度跟踪
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容