跳转到内容

可视化编辑器

这些源表可以用 Elin ModMaker 在浏览器里编辑。同一个角色的贴图、立绘、台词、剧情与各语言译文会聚合到一处,种族、职业、元素这类跨表引用带补全与校验。

物品表 (Thing) ​

制作源表时,必须完整复制官方源表的前三行,并将你的数据从第四行开始录入。

关于列、空行和空格子

缺少的列会被填成空值,游戏会在日志(Player.log)里输出 #source ill-format 警告,然后继续加载;列顺序打乱时,游戏会按表头名自动重新映射。不过还是建议把官方表头整行原样复制,这两种情况就都不会出现。

id 留空的那一行会中止整张表的读取,它之后的所有行都不会载入,而且没有任何提示。除非你是有意为之,否则不要用空行给数据分组。

空格子不等于空值:游戏会改用第 3 行的默认值。本表中 components 默认是 log,defMat 默认是 oak,category 默认是 other。

你也可以改第 3 行的默认值,让它作用到其余所有行。

官方 Thing 表里有两个 sort 列,实际生效的是靠后的那一个(同名列以最后一个为准)。原样复制表头即可,不要精简。

表格列 ​

列类型描述
id文本物品的唯一标识符。
name_JP文本日文显示名称。
name文本英文显示名称。
unknown_JP文本稀有度较高的物品未鉴定时显示的日文名称。也可能是特殊属性,例如:#randomBook、#randomPotion。
unit_JP文本日文量词(助数词)。参见下方 Unit JP。
unit文本物品的物理形态。参见下方 Unit。
unknown文本稀有度较高的物品未鉴定时显示的英文名称。也可能是特殊属性,例如:#randomBook、#randomPotion。
naming文本堆叠时名字怎么显示。m = 「材质 + 物品名 (数量)」;ma = 只显示材质名 (数量),用于原材料;留空 = 只显示物品名 (数量)。
category文本物品所属的类别。用于自动存放和配方菜单(关联 Category 表)。
sort整数排序顺序。例如 2200 会把物品归入弓的排序范围。表里有两个 sort 列,实际生效的是靠后的那一个(同名列以最后一个为准),但两列都不要删。
_tileType文本地图上的显示方式。参见下方 Tile Type。必须是游戏认识的类型名,未知的值会在卡片初始化时抛出异常,中断所有卡片行的加载。留空则默认为 Obj。
_idRenderData文本物品在地面的放置方式与裁剪。参见下方 idRenderData。
tiles整数[]替换纹理的图块 ID。填多个图块时按以下顺序:正面 → 正面翻转 → 背面 → 背面翻转。例如:123,-123,456,-456。
altTiles整数[]替代状态的变体图块(例如装有物品的关闭宝箱)。
anime整数[]两个值:帧数,每帧持续时间。如果 idRenderData 列用的是 @obj,并且使用了动画贴图,这一列不用填。
skins整数[]皮肤变体引用。填几个值就有几种可选外观(加上基础外观共 N+1 种,建造菜单与配方菜单据此列出)。如果 idRenderData 列用的是 @obj,并且使用了贴图变体,这一列不用填。
size整数[]大型物体的网格尺寸:宽度,高度。
colorMod整数颜色饱和度修正。0 表示不着色。
colorType文本颜色来源:default(取色材质的主色)、alt(取色材质的替代色)、random(随机)。
recipeKey文本[]配方获取方式:* = 默认已知;- = 不进入随机配方池;商店类型名(ShopType 枚举,如 Farris)= 由该类型商人出售。
factory文本[]制作该物品的工作台。参见下方 Factory。
components文本[]合成材料。参见下方 Components。
disassemble文本[]分解后产出的物品。
defMat文本默认材质(例如 oak)。决定图标/预览的颜色。加前缀 !(如 !oak)表示锁定材质,物品不会再随等级或生成方式换材质。填了不存在的材质时,游戏会改用 granite 并输出错误日志。
tierGroup文本升级/进阶的层级分组。
value整数基础售价(奥伦)。
LV整数物品等级,同时用作制作所需的技能等级。
chance整数生成概率修正值。
quality整数物品稀有度等级:-1 Crude(粗制品)、0 Normal(凡品)、1 Superior(优质品)、2 Legendary(奇迹)、3 Mythical(神器)、4 Artifact(特殊物品)。☆★ 等标记由该列决定。它还决定 offense / defense 是否原样生效,参见下方 攻击与防御数值。
HP整数物品 HP。默认 100。
weight整数物品重量。例如:种子 = 30、魔杖 = 500、床 = 4500、钢琴 = 85000。
electricity整数电力消耗。负值表示消耗电力(例如显示器 = -10)。
trait文本[]特殊行为。参见下方 Trait。
elements文本来自 Element 表的别名,附带 /等级。例如 lumberjack/4 在游戏中显示为 Lumberjack [****]。
range整数武器射程(格数)。例如:短弓 = 1、弓 = 3、电磁炮 = 5。
attackType文本伤害/武器类型:Blunt、Bow、Cane、Claw、Gun、Pierce、Punch、Slash。
offense整数[4]攻击属性:骰子数,骰面,命中加成,伤害加成。例如 2,8,5,4 即 2d8、+5 命中、+4 伤害。参见下方 攻击与防御数值。
substats整数[]副属性修正,第一个值用作穿透。本体源表里都只填了一个数值。
defense整数[2]防御属性:DV,PV。参见下方 攻击与防御数值。
lightData文本发光预设。参见下方 Light Data。
idExtra文本额外渲染数据引用。
idToggleExtra文本可切换的渲染数据(例如开关灯)。
idActorEx文本物体周围的环境效果。参见下方 Ambient Effects。
idSound文本制作时的音效:glass、money、paper 等。
tag文本[]内置行为标志。参见下方 Tags。
workTag文本工作相关标签。
filter文本[]合成以外的获取途径:fish、gacha、supply 等。游戏通过 CreateFromFilter 随机生成物品。
roomName_JP文本[]房间类型定义(日文)。多个条目用逗号分隔。
roomName文本[]房间类型定义(英文)。例如:Bedroom 或 Kitchen,Dining Room。
detail_JP文本物品描述(日文)。显示在游戏内属性信息的上方。
detail文本物品描述(英文)。显示在游戏内属性信息的上方。

Unit JP ​

unit_JP 列是物品的日文量词(助数词),不直接影响英文版。

汉字罗马音含义
塊katamari块、团
振りfuri手持、近战
対tai一对(如手套)
台dai台、底座、竖琴
挺tei细长物体(枪、剪刀、锄头等)
発hatsu弹药
本hon本体、基础物体
枚mai薄片
粒tsubu颗粒
巻maki卷状物
冊saku册子
錠jou药片
隻seki船只
束taba捆、束
体karada形态、雕像
袋fukuro袋装
張chou / hari张、拉紧
杯hai杯
匹biki(小)动物
品hin物品

Unit ​

unit 列定义物品的物理形态。

值值值
bottleboxbucket
bundlecanchunk
feathergift boxgrand cross
grimoirehandfulletter
paintingpairpiece
pinchposterpot
rodsetsignboard
spellbookstaffstatue
syringetreetuft
whipwhistle

Tile Type ​

_tileType 列控制物体在地图上的显示方式。

类型行为
ObjBig无法越过。
ObjHuge无法越过。
Door需要墙壁;作为门/开口使用。
Slope可上下通行的坡道。
Stairs与 Slope 类似,渲染与建造规则不同。
Paint需要附着在墙上。
WallHang需要附着在墙上。
Window需要墙壁;在需要隐藏窗户的场合(如建筑内部)会隐藏。

idRenderData ​

_idRenderData 列控制物体在地面的放置方式和裁剪行为。

@obj — 自定义纹理(非替换) ​

用于不使用纹理替换的自定义物品:

  • 文件名必须与 id 完全一致。
  • 使用小写 .png 扩展名(.PNG 无效)。
  • 放置在 Mod 的 Texture 文件夹根目录下。子目录不会被找到,除非 id 本身就带那个前缀。

@ 的作用是让游戏按图片的实际尺寸把整张图居中摆放,所以自定义的一整张贴图才需要它。还可以写成 @obj#其他物品ID,# 后面那段表示借用该物品的 pref(放置、碰撞那组属性)。

obj — 纹理替换 ​

用于纹理替换的物品。它会占用纹理查看器里的一个槽位,可能和其他 Mod 冲突:

  • 文件名格式:obj_tileID(例如 objS_5032)。
  • 使用小写 .png 扩展名。
  • 放置在 Mod 的 Texture Replace 文件夹中。

新增的 Block / Floor / Obj 行不需要槽位号

瓦片行(Block、Floor、Obj、Deco、CellEffect)可以把自己的 PNG 放在 Texture/<表名>/<alias>.png,游戏启动时会在精灵表里自动分给它一个空格,不会和其他 Mod 冲突。见纹理替换与瓦片贴图。

雪地变体 ​

类型非替换 (@obj)替换 (obj)
普通ID.pngobj_123.png
雪地ID_snow.pngobjSnow_123.png
小型—objS_456.png
小型雪地—objSSnow_456.png

Factory ​

factory 列定义制作该物品的工作台。玩家不能制作的物品请留空。

部分示例:

游戏内名称值
快速制作self
制作台workbench
杂工的桌子factory_tinker
设计台workbench2
立牌工坊factory_sign
木工的桌子factory_wood
铁匠的桌子factory_metal
铁砧anvil
机械工的桌子machinebench
石工的桌子factory_stone
玻璃工的桌子factory_glass
厨师机stove

Components ​

components 列定义合成材料。

语法含义示例
id需要物品 ID 与之相同的物品。log
/N需要 N 个物品。默认为 1。log/2
@材质需要指定材质的物品。chunk@snow/10 → 10 个雪块。
|「或」,任选其一。rock/2|ingot → 2 个岩石或 2 个锭。
#类别从背包中选择匹配该类别的物品。#book → 选择任意一本书。
+可选材料,不放也能制作。+rune → 可以额外放一枚符文。
$该项决定成品的颜色。$log/2

只有 + 前缀可以叠加在其他前缀之前,例如 +#book 或 +$log;$ 与 # 不能互相组合。

整列只写一个 -(components = -)表示使用默认配料表,而不是「不需要材料」。留空则会用该列的默认值 log,也就是「1 根原木」。想让物品不可制作,请把 factory 留空。

示例 ​

水井: rock/10,rope/3,log/2 → 10 个岩石材料、3 条绳索、2 根原木。

镰刀: rock/2|ingot,string/1,stick/1 → 2 个岩石或 2 个锭、1 条线、1 根棍子。

书架: plank/4,#book,#book → 4 块木板、任意 2 本书。

Trait ​

trait 列定义特殊行为,格式是逗号分隔的一串值:第一段是特性名(游戏会去找名为 Trait<这一段> 的类),其余各段是传给该特性的参数,参数的含义因特性而异。

容器类物体的写法:

Container,宽,高,背景图片,idContainer

idContainer 可选,填物品、类别或 spawnlist 的 ID,首次打开容器时会在里面预先生成对应内容。

示例含义
beekeep,2,2,crate,honey2×2 容器(木箱背景),首次打开时预生成蜂蜜。
ChestPractice,7,5,crate宽 7 × 高 5 容器(木箱背景)。

其他常见特性的参数:

示例含义
Workbench,blacksmith工作台,所需技能(留空为 handicraft)。
Light放置型光源,外观/半径来自 lightData 预设,不接受参数。
LightSource,4装备型光源,发光半径。
ToolRangeGun,12,4枪械,弹匣容量、装填回合数。
Harvest,gathering,1可采集,采集技能、数量。
Drink,DrinkWater,10可饮用,效果 ID、数值。
Altar,ehekatl祭坛,所属神明 ID。
RecipeCat,food配方书,配方类别。

参数一律可以省略,省略时用该特性自己的默认值。

攻击与防御数值 ​

offense 是四个值:骰子数,骰面,命中加成,伤害加成。2,8,5,4 读作「2d8,+5 命中,+4 伤害」。defense 是两个值:DV,PV。

这两列填的数字,只有 quality = 4(特殊物品)时才会原样进入游戏。 其余品质下,游戏会按材质和稀有度重新换算,还带一点随机:

  • 稀有度基准:Crude 150、Normal 120、Superior 100、Legendary 及以上 80,数值越低成品越强;
  • 骰面 ≈ 骰面 × 材质的 dice ÷ 基准值,命中加成 ≈ 命中加成 × 材质的 atk × 9 ÷ 基准值,伤害加成 ≈ 伤害加成 × 材质的 dmg × 5 ÷ 基准值(dice、atk、dmg 都是 Material 表里的列);DV ≈ DV × 材质的 dv × 7 ÷ 基准值,PV ≈ PV × 材质的 pv × 9 ÷ 基准值。

也就是说,普通装备在表里填的是基准值而不是最终值。调数值时要连 defMat 和 quality 一起看,否则会觉得「填了没用」。

Light Data ​

lightData 列定义发光外观。

值
altar_machine
bonfire
fireplace
fridge
gacha
general
klin
lamp_sun
lamp_table
light_floor
light_spot
light_stand
light_wall

Ambient Effects ​

idActorEx 列定义物体周围的环境效果。

值效果
amb_boat船只环境音。
amb_crowd人群嘈杂声。
amb_fire火焰噼啪声。
amb_fountain喷泉水声。
amb_smelter熔炉声。

Tags ​

tag 列填内置行为标签。

部分标签:

标签效果
exotic本体的异国货物品带有此 tag,代码中未发现直接效果。
godArtifact神器。参考自定义信仰。
noWish无法通过许愿获得。
tourism计入观光物品。
rareResource视为稀有资源。
throwWeapon标记为专职投掷武器(自动攻击时投掷、享受投掷加成)。想让武器像回旋镖一样飞回,请在 elements 列添加 throwReturn 元素。
noCopy不能复制。
noShop在对应类型的商店中不生成。
fixedElement固定 elements 附魔数值。
randomElement浮动 elements 附魔数值。
randomSkin生成时从 skins 里随机挑一种外观。
noSkinRecipe配方菜单里不提供外观选择。

导入远程武器数据 ​

远程武器的部分数据可以自定义。枪械数据是一个 JSON 文件,放在 LangMod/**/Data/ 文件夹中,文件名为 EffectSetting.guns.json。

json
{
    "biubiu_gun": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "gunfire",
        "IdSprite": "ranged_gun",
        "IdSound": "attack_gun",
        "IdSoundEject": "bullet_drop",
        "Eject": true,
        "FirePos": {
            "x": 0.23,
            "y": 0.04
        },
        "CaneColor": "",
        "CaneColorBlend": false,
        "ForceLaser": false,
        "ForceRail": false,
    }
}

上面导入了名为 biubiu_gun 的枪械数据,这个名字应与你的远程武器 ID 一致。也可以用游戏中现有武器的 ID,覆盖该武器的数据。

游戏中现有的枪械数据:

Gun Data
json
{
    "gun": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "gunfire",
        "IdSprite": "ranged_gun",
        "IdSound": "attack_gun",
        "IdSoundEject": "bullet_drop",
        "Eject": true,
        "FirePos": {
            "x": 0.23,
            "y": 0.04
        }
    },
    "gun_assault": {
        "Num": 3,
        "Delay": 0.1,
        "IdEffect": "gunfire",
        "IdSprite": "ranged_gun",
        "IdSound": "attack_gun_assault",
        "IdSoundEject": "bullet_drop",
        "Eject": true,
        "FirePos": {
            "x": 0.48,
            "y": 0.04
        }
    },
    "bow": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_arrow",
        "IdSound": "attack_bow",
        "Eject": false,
        "FirePos": {}
    },
    "gun_rail": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "",
        "IdSound": "attack_gun_rail",
        "Eject": false,
        "FirePos": {}
    },
    "cane": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_cane",
        "IdSound": "attack_cane",
        "Eject": false,
        "FirePos": {}
    },
    "windbow": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_arrow_wind",
        "IdSound": "attack_windbow",
        "Eject": false,
        "FirePos": {}
    },
    "gun_mani": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_gun",
        "IdSound": "attack_gun_shotgun",
        "IdSoundEject": "bullet_drop",
        "Eject": true,
        "FirePos": {
            "x": 0.23,
            "y": 0.04
        }
    },
    "gun_laser": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "",
        "IdSound": "attack_gun_laser",
        "Eject": false,
        "FirePos": {}
    },
    "panzerfaust": {
        "Num": 1,
        "Delay": 0.01,
        "IdEffect": "gunfire",
        "IdSprite": "ranged_gun_rocket",
        "IdSound": "attack_gun_rocket",
        "Eject": false,
        "FirePos": {}
    },
    "gun_laser_assault": {
        "Num": 3,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_gun_laser",
        "IdSound": "attack_gun_laser_assault",
        "Eject": false,
        "FirePos": {
            "x": 0.28,
            "y": 0.2
        }
    },
    "shotgun": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_fun",
        "IdSound": "attack_gun_shotgun",
        "Eject": false,
        "FirePos": {
            "x": 0.3,
            "y": 0.18
        }
    },
    "sling": {
        "Num": 1,
        "Delay": 0.1,
        "IdEffect": "",
        "IdSprite": "ranged_stone",
        "IdSound": "throw",
        "Eject": false,
        "FirePos": {}
    }
}
  • Num 是每轮连射的射击次数。
  • Delay 是动画延迟,单位为秒。
  • IdEffect 是枪口特效的 ID,可以使用自定义特效,默认值是 gunfire。法杖不使用此值;能量(激光)枪仍会播放。
  • IdSprite 是投射物贴图的名称,必须是游戏中现有的贴图,或者你放在 Texture 文件夹中的贴图。激光不使用此值。
  • IdSound 是射击声音的 ID,可以使用自定义声音。所有类型的枪械都可以设置。
  • IdSoundEject 是弹壳弹出声音的 ID,可以使用自定义声音。所有类型的枪械都可以设置。
  • Eject 决定是否播放弹壳弹出动画。所有类型的枪械都可以设置。
  • FirePos 是枪口效果相对于武器中心的位置偏移。所有类型的枪械都可以设置。
  • CaneColor 是法杖类武器可选的覆盖颜色,留空则使用武器默认元素的颜色。格式为 RRGGBB 十六进制字符串。只对带 ToolRangeCane 特性的枪械生效。
  • CaneColorBlend 让法杖类武器的默认颜色与覆盖颜色混合。只对带 ToolRangeCane 特性的枪械生效。
  • ForceLaser 强制枪械使用激光动画(23.206 Nightly 版本加入)。带 ToolRangeGunEnergy 特性的枪械不需要此项。
  • ForceRail 强制枪械使用电磁炮动画,仅对激光类枪械(特性 ToolRangeGunEnergy 或 ForceLaser)生效。带 ToolRangeGunEnergy 特性的枪械不再默认使用电磁炮动画。

想用默认值的属性可以直接省略。

一个文件里可以写任意多条枪械数据,用 , 半角逗号分隔,例如:

json
{
    "biubiu_gun": { 
        data 
    },
    "rainbow_wand": {
        data
    }
}

指定插槽 ​

在 Thing 表中使用标签 addSocket 和 addSocket(附魔alias) 可以指定枪械插槽。例如 addSocket,addSocket,addSocket(bane_god) 会添加两个空插槽和一个带 God Bane 附魔的插槽。

加上 noRandomSocket 标签,会在应用自定义插槽之前移除所有随机生成的插槽。

This project is an unofficial documentation site and is not affiliated with, endorsed by, or associated with Elin or Lafrontier / Noa. All trademarks are the property of their respective owners.