一个用 Godot 4.6 打造的 2D 泰拉瑞亚式沙盒游戏,全部使用项目内解包出的
泰拉瑞亚真实贴图素材(Terraria/images/,共 1 万余张原版精灵图)。
- 用 Godot 4.6.x 打开本目录(
D:\GoDot\Program\5\terraria),按F5运行。 - 本机 Godot 编辑器路径:
D:\GoDot\Godot_v4.6.3-stable_win64.exe
无头自动测试(验证游戏逻辑,全部通过后自动退出):
& 'D:\GoDot\Godot_v4.6.3-stable_win64.exe' --headless --path . -- --autotest --seed=1337| 按键 | 功能 |
|---|---|
A D / ← → |
左右移动 |
Space / W |
跳跃(按住自动连跳) |
| 鼠标左键 | 挖掘(镐)/ 攻击(武器,指向鼠标) |
| 鼠标右键 | 放置方块 / 放置火把 |
1~0 / 滚轮 |
切换快捷栏(滚轮已支持) |
C |
打开/关闭合成界面 |
B |
打开/关闭背包(40 格,点击格子与当前快捷栏槽交换) |
F |
交互:开宝箱 / 与 NPC 对话 |
H |
快捷使用治疗药水 |
J |
快捷使用魔力水晶 |
F1 |
快进到夜晚(测试 Boss 用) |
Esc |
退出 |
开局即全物品:出生时玩家已拥有游戏内全部物品(武器/工具 ×1,方块/材料/弹药 ×999, 药水/水晶 ×99,金币 99 白金)。快捷栏默认为:
镐 → 斧 → 天顶剑 → 泰拉之刃 → 木弓 → 太空枪 → 火把 → 治疗药水 → 可疑眼球 → 木箭, 其余在背包(B打开,点击与快捷栏交换)。出生点在初始小屋门口,可直接走出去。
- 区块 32×32 地块,玩家周围按需生成、远处自动卸载,已挖掘/放置的方块持久保存
- 地表生态:森林(出生点,含初始小屋)、沙漠、腐化之地、丛林、雪原、海滩
- 地下分层:泥土层 → 洞穴层(随机洞穴、宝箱、火把)→ 地狱(灰烬、狱炎石、火小鬼)
- 47 种邻接掩码的草皮过渡贴图(从原版草方块帧程序化合成,含斜坡倒角与侧边垂草), 石块/沙/木等 16 种实体方块;树木、宝箱、火把等装饰
- 昼夜循环:太阳/月亮轨迹、星空、云层视差、夜晚怪物与陨星坠落
绿史莱姆、史莱姆之母、僵尸、恶魔之眼(夜晚)、骷髅(洞穴)、噬魂怪(腐化)、 火小鬼(地狱)、克苏鲁之仆从(Boss 召唤物)
夜晚使用「可疑眼球」召唤(快捷栏第 9 格,按 F1 可快进到夜晚;白天使用会有提示且不消耗)。
一阶段悬停 + 三连冲撞;血量低于 50% 进入二阶段(加速冲锋、召唤仆从)。
掉落大量魔金矿石、金币,概率掉落喵喵剑。
- 向导(开局即有):给出游戏提示
- 商人(第 2 天入住):出售木箭 / 火把 / 治疗药水
- 护士(第 3 天入住):1 金币回满血量
铜短剑(初始)、木剑、铁阔剑、附魔剑、星星之怒(召唤落星)、泰拉之刃(挥出剑光)、 喵喵剑、木弓 + 木箭、太空枪(消耗魔力)以及——
使用后向鼠标位置射出 6 把旋转剑刃,沿贝塞尔曲线汇聚、贯穿一切敌人,伤害 190。
合成路线(按 C 打开合成台):
附魔剑 + 10 金锭 + 15 魔金矿 → 泰拉之刃
泰拉之刃 + 10 陨星 + 30 魔金矿 + 5 金锭 → 天顶剑
材料来源:附魔剑(地下宝箱)、金矿(深处矿脉)、魔金矿(Boss 掉落/腐化矿脉)、 陨星(夜晚坠落)。
terraria/
├── project.godot # 项目配置(输入映射、自动加载)
├── scenes/main.tscn # 主场景
├── scripts/
│ ├── autoload/game.gd # 全局状态、昼夜时间
│ ├── data/ # 物品库、方块库
│ ├── world/ # 世界生成器、区块、TileSet 构建、昼夜环境
│ ├── player/player.gd # 玩家
│ ├── entities/ # 敌人、Boss、城镇 NPC
│ ├── items/ # 掉落物、投射物、陨星
│ └── ui/hud.gd # HUD(血条/快捷栏/合成/对话)
├── assets_gen/ # Python 生成的地块图集、火把、宝箱、光晕等
├── Terraria/images/ # 泰拉瑞亚原版解包贴图(约 1.2 万张)
└── tools/ # 资产分析/图集生成脚本(Python + Pillow)
修改 tools/gen_tiles.py 后:
python tools/gen_tiles.py
# 然后用 Godot 重新导入:
& 'D:\GoDot\Godot_v4.6.3-stable_win64.exe' --headless --path . --import- TileSet 运行时构建:从生成的 18px 间距图集(16px 内容 + 1px 边缘出血)构建
TileSetAtlasSource,texture_origin=(1,1)使相邻方块重叠 1px,还原泰拉瑞亚 原版的贴图出血效果,消除方块间透明角缝隙。 - 草皮过渡:47 种合法 8 邻域掩码(Godot minimal autotile 规则),由原版草方块 帧合成:顶草带、侧面垂草、45° 倒角。
- 确定性生成:同一
--seed得到完全相同的世界(FastNoiseLite+ 哈希随机)。 - 动态加载:每帧按距离优先级生成 4 个区块,超半径卸载,编辑操作全局持久。