《Null Pointer》是一款基于 Godot 4.6 引擎开发、深受《杀戮尖塔》(Slay the Spire)启发的 Roguelike 牌组构建(Deckbuilder)游戏。本作基于巨佬 DesirePathGames 的 Slay-The-Robot 框架 深度定制与重构开发。或者说,这是一个披着卡牌游戏外衣的代码实验室。
不需要繁琐的构建步骤,如果你头铁,甚至可以不用看文档:
- 请下载 Godot 4.6(对,就是那个让你告别编译等待的引擎)。
- 将这堆代码导入编辑器。
- 找到
res://scenes/Root.tscn,深吸一口气,按下F5,然后看着赛博卡牌在屏幕上飞舞。
这不是简单的 demo,而是一个在架构上近乎有“代码洁癖”的强健框架。我们信奉“数据驱动一切”,如果一段逻辑能用数据表达,就绝不在代码里硬编码。
所有卡牌不是手捏的独立场景,而是纯粹的 CardData 模板。借助高度动态的 API,你可以轻松搓出一张诸如“逻辑炸弹”、“零日漏洞”的骇客卡牌。不仅如此,游戏内置的卡牌修饰器(Decorator)系统能像病毒一样动态感染你的卡牌,为它们打上各种“后门”或“提权”的离谱效果。
随着进程推进,通过底层的 CardFilter 和 ArtifactFilter 缓存机制,不同卡牌和外设会被平滑地注入商店或战利品堆。这让整个游戏极其容易扩展——你要做一整套新卡牌?加个 Pack 就行,底层逻辑对你微笑并表示毫无压力。
我们摒弃了杂乱无章的硬编码函数调用。任何交互(抽牌、攻击、购物、甚至上个 Buff)都由 ActionHandler 单例接管并压入 Action 栈。底层甚至允许你用纯数据写简单的 for 循环和 if/else 嵌套。在这里,代码就是卡牌的结算咒语,且绝对不会死锁(大概吧)。
还觉得结算不够复杂?游戏的 动作拦截器(Action Interceptors) 能在任何动作生效前横插一脚。无论是玩家的外设还是敌人的状态,都可以无情“劫持”伤害判定并肆意篡改。
而在 UI 层,你的噩梦结束了:所有的富文本(包括卡牌伤害、意图、甚至动态状态与卡牌名称染色)全被全局单例 TextParser 强制接管。如果卡牌显示它能打出 5 点伤害,那它的底层运算一定就是 5 点。再也不会有“文案写着加 10 血,实战只回 5 血”这种令人吐血的 Bug。UI 和底层共享同一个数据流,文案和数值达到了真正的“知行合一”。
谁说开源项目就没有特效?内置的 CombatVFXAnimations 与 AudioConstants 提供了一整套视听轰炸。挥砍、重击、电子魔法,甚至是卡牌出手的随机音效,皆有统一的数组接口调度。配合满屏的战斗浮动数字(Combat Floats),打击感不仅扎实,甚至还有点上头。
作为一款严谨的策略游戏,我们绝不容忍“洗牌污染掉宝率”的低级错误。所有随机操作皆被划分到独立的确定性随机数(Deterministic RNG)轨道中,并受玩家种子(Seed)死死控住。这就意味着:SL 大法(存档重开)是无法逆天改命的,你的非酋命运从游戏开始的那一刻就已经被写死了。
由于核心数据均继承自强大的 SerializableData,游戏拥有近乎黑魔法般的存档能力。你的一切操作、多层嵌套的对象、甚至极客状态钩子,都会在后台被无情地序列化成一个 JSON 文件。想停就停,读档秒连。
得益于极致的解耦和序列化设计,《Null Pointer》天生就是一个 Mod 游乐场。只要你在 external/ 目录下丢几张图,写几个 JSON,甚至挂载自己的 GDScript,你就能篡改游戏的内核行径。我们甚至内置了专门针对资产覆盖的动态加载劫持机制(FileLoader 回退)。去吧,把这个游戏改得面目全非吧。
autoload/:包含统领全局的 Singleton 大佬们(Global.gd,ActionHandler.gd等),掌控核心状态与数据生成。data/:绝对的内核数据层。所有资源皆由SerializableData衍生,区分为只读的原型模板(prototype)和运行时可变状态(mutable)。scripts/:游戏底层的纯逻辑控制区。包含actions/(动作系统)、action_interceptors/(拦截器)、combatants/(战斗实体)等,边界极其清晰。scenes/:所有的.tscn场景文件,与scripts/的结构保持了不可思议的高度一致。external/:外部资源与 Mod 的法外之地。受.gdignore庇护,引擎不会乱扫。外置的图、音效和数据全丢这里。sprites/&sounds/:引擎内置导入的“官方”贴图与音效,与外部挂载严格区分。addons/:Godot 编辑器插件(比如sound_manager等强力外援)。themes/,animations/&misc/:负责表面功夫的 UI 主题、战斗动画和贝塞尔曲线等杂项配置。
本作的底层核心框架源自开源项目 Slay-The-Robot。在此特别鸣谢 DesirePathGames 大佬!他的底层架构不仅提供了极度强健的数据驱动机制,更为《Null Pointer》能够实现极端的代码解耦奠定了不可磨灭的基石。没有这位巨佬的无私开源,就不会有这个赛博世界的诞生。
本游戏自行创作的源代码与游戏数据采用 GNU GPL v3 开源协议。你可以在遵守 GPL v3 的前提下修改和分发这些内容。音乐、音效、美术、商标及其他资产不因代码采用 GPL v3 而自动获得相同授权,除非对应资产另有明确许可说明。
注:本作底层依赖的 Slay-The-Robot 框架部分代码版权归原作者 DesirePathGames 所有,并遵循其原本的 MIT License。完整的第三方版权与许可声明见 LICENSES/。在遵循各自协议的前提下,欢迎任何赛博漫游者克隆代码,我们在这片代码废墟里等你!



