做了一个小型网页叙事游戏, 《Masked Identity》。

这是一个什么游戏?
《Masked Identity》是一个基于我个人经历改写的互动叙事游戏。它把一些真实经验、历史想象和对制度性记忆的探讨,放进一个架空的苏联末期军事医院里。
玩家扮演一名医生,面对一个人的病例、军方记录、家庭材料、事故报告、告密文件和各种被涂改过的档案进行决策:
- 保留 、打码、销毁一份文件
- 把某些证据重新呈现给病人
这些选择会改变三个维度:真相、安全、身份。最后,游戏会根据你一路如何处理档案,给出不同结局。
我真正想探讨的不是“解谜”,而是一些更让人不舒服的问题:
一个人的身份,到底是由自己定义,还是由档案、机构、诊断和他人叙述定义? 如果一个人的历史被封存、涂改、销毁,甚至被重新分类,那么他还剩下什么?如果保存真相会伤害一个人,销毁真相又会抹除一个人,那么“正确处理档案”这件事是否真的存在?
为什么接入 Common Knowledge Base (CKB)?
游戏结尾有一个可选机制:玩家可以把自己抵达的结局摘要,存入一个公共档案墙。
官方病例已封存,卷宗将不再可查。你可以将一份摘要副本存入一个公共账本——共同知识库。它不属于任何机关:没有调阅令能封存它,没有火炉能焚毁它。副本永久公开,任何人可见。
我不想把它做成一个“Web3 游戏”的典型形式。这里没有 NFT,没有代币经济,没有装备资产,也没有 play-to-earn。玩家不是为了玩游戏来连接钱包。游戏本体是完整的,链上归档只是一个结尾处的可选动作。
为什么 CKB 特别适合?
CKB 的 cell 模型很适合表达“档案”这种东西。它不是一个游戏资产,也不是一个要被频繁交易的对象,而是一条被写下、被保留、被公开读取的记录。
在这个游戏里,玩家写入的不是复杂状态,也不是金融合约,而是一份很小的结局摘要:结局 ID、三个指标、语言、日期,以及可选的档案员代号。公共档案墙从链上读取这些记录。
这和游戏主题非常贴合:档案不是为了流通,而是为了不被抹去。
我也很喜欢 Common Knowledge Base 这个名字和游戏语义之间的重合。游戏里的最后动作,不是“mint 一个东西”,而是把一份私人游玩结局,存入一个共同知识库。这个游戏的核心主题本来就是档案、记录、封存与删除。所以区块链在这里最自然的作用:
把一份无法再被官方档案系统封存的副本,放到一个公共、持久、抗审查的记录层里。
在游戏世界里,官方病例已经被封存,档案柜可以被锁上,纸张可以被烧掉。但如果玩家愿意,他们可以把一份结局摘要写入 CKB,让它成为一个公开的、不可被篡改的 cell。它不属于游戏里的任何机构,也不依赖任何服务器保存。
不是给游戏强行加金融系统,而是让链承担它最适合承担的事情:公共记录、持久性和抗审查。
欢迎体验
如果你只想玩游戏,不想碰钱包和链上记录,可以直接玩 itch 版,也欢迎在 itch 上留言、评论和打分 
如果想体验带 CKB 归档机制的版本,请点击这里
12 Likes
ckbbkc
2
可以考虑推出一个富豪版的个人故事,心得,记录的dapp,基于ckb,让富豪们留下永远不会消失的消息(ckb如果能一直运行下去)
这个真的很棒!从你的游戏的创意、文本内容的编写,以及你特意选择了很轻量、甚至是某种可选的、和链上结合的方式,我能感觉出来你做这个东西真的有注入许多自己的想法。
我觉得这样的应用会让我眼前一亮,让我看到 ckb 产生了不太一样的东西。这个东西是什么呢?其实就是一种调性。它不一定是 CKB 的某些技术特点产生的(不过这个游戏切入“存档”确实和 ckb 作为共同知识库的定位是非常契合的),更多的我觉得是来自做事情的人的特点。
因为 CKB 社区的人不一样,所以做出来的东西也会不一样。我觉得这个小游戏很好的展示了这一点。你关于 DAO/社会机制/个人身份的思考,就代表了 CKB 社区对于某类不太一样的问题的关注和思考。我们现在有许多来自世界各地的社区成员,很期待看到更多类似的作品出现。最终一个社区的力量是由人组成的。
有时间我会好好玩下这个游戏,感谢你的分享。
3 Likes
请问链上存的副本具体是什么信息?这里可以把这些信息decode出来吗?
实现方式很简单:
- 结局页生成 JSON
schema 大概是:
{
"p": "masked-identity",
"v": 1,
"e": "erased",
"t": 0,
"s": 100,
"i": 0,
"l": "en",
"d": "2026-07-02",
"n": "optional archivist name"
}
字段含义:
p: 协议标记,Masked Identity 的记录
v: schema 版本
e: 结局 ID
t: Truth 数值
s: Safety 数值
i: Identity 数值
l: 语言,zh 或 en
d: 写入日期
n: 可选的档案员代号
- 用 CCC 把 JSON 转成 UTF-8 bytes,再转成 hex,放进 cell 的
outputData
outputsData: [ccc.hexFrom(ccc.bytesFrom(payload, "utf8"))]
- 这个 cell 使用一个固定的 archive lock,公共档案墙按这个 lock 搜索记录
- 档案墙读取每个 cell 的
outputData,hex → UTF-8 → JSON.parse
JSON.parse(ccc.bytesTo(ccc.bytesFrom(cell.outputData), "utf8"))
- 校验
p、v、结局 ID、数值范围后渲染
BTW,CKB(UTXO)的机制,一方面比account模型做这种存储、检索方便好多,同时也和游戏本身的叙事语言契合:大家去中心化的投递档案卡,重构角色的身份
明白了,我以为会把完整档案上传到链上,更多看起来是一些元数据?
1 Like
janx
9
Thanks for sharing! I really enjoyed the story and the music.
1 Like
janx
10
Tip: check what’s written in the cell with ckbadger

4 Likes