Skip to content

Tile Sheets (Block / Floor / Obj / Deco / CellEffect) โ€‹

The five tile sheets share most of their columns. Everything that sits on a map cell โ€” a wall, a floor, a crop, a carpet, a decoration, a liquid effect โ€” is a row in one of them.

When making source sheets, you must copy the first 3 rows of the official source sheet completely and start your data at the 4th row.

About columns, empty rows and empty cells

Missing columns are filled with empty values. Columns in a different order are matched by their header name.

An empty cell is not an empty value: it takes the value from row 3 of your own sheet. That is why the first 3 rows must be copied. With an empty row 3, _tileType ends up empty and the row never shows in the build menu, category ends up empty and falls back to obj, and so on.

A row with an empty id stops the sheet there. Do not leave blank rows between your data.

IDs and Aliases โ€‹

Use any positive number as id. 256โ€“65535 is the sweet spot: it keeps save files small. Stay clear of 0โ€“255, which the base game uses.

  • Two mods using the same id overwrite each other's row; the one loaded later wins.
  • alias must be unique and is needed for everything that refers to the row by name: the texture file name, defBlock / bridgeBlock / autoFloor, and seeds. Prefix it with your mod name.

Shared Columns โ€‹

ColumnTypeDescription
idintUnique numeric id, see above.
aliasstringUnique name used by textures, cross-references and seeds.
name_JP / namestringDisplay names. Fill both; name is only used as a fallback for languages other than Japanese.
sortintPosition inside the build menu tab. Empty = after the previous row, so mod rows end up last.
reqHarveststring[]skill,level needed to remove it: mining, digging, gathering or lumberjack. Empty falls back to the sheet default.
hpintToughness; more hp means longer to mine or dig.
_tileTypestringTile type. Block: Block, Wall, WallOpen, Fence, FenceClosed, HalfBlock, Slope, Stairs, Pillar, BlockDeco. Floor: Floor, FloorWater, FloorWaterShallow, FloorWaterDeep, Bridge. Obj: Obj, ObjBig, ObjHuge, Tree, Road, Chasm, WallMount, WallHang, Roof, Door, ObjWater, โ€ฆ A typo hides the row from the build menu.
_idRenderDatastringHow the tile is drawn, and therefore its cell size: Block empty / block_thin / fence / halfblock (64ร—64), Floor empty / floor_obj (64ร—48), Obj obj (64ร—64), obj_S / obj_S flat (32ร—32), obj_L / obj_LV (80ร—64).
tilesint[]Cell numbers in the sprite sheet (row*100+column, the numbers the Texture Viewer shows). Leave empty when you ship Texture/<Table>/<alias>.png; the game fills it in. A negative number flips the picture horizontally.
animeint[]frames,ms[,loop[,sound]] animation. Floor / Deco / CellEffect only; Obj rows ignore it.
snowTileintBlock: keep the default (roof snow caps). Obj: >0 hides the object under snow and shows a snow floor variant instead.
colorModintHow strongly the material color tints the art. 100 = tinted like vanilla, 0 = shown exactly as painted (use 0 for hand-painted crops).
colorTypestringBlock / Obj: alt tints with the material's second colour instead of its main one, random picks a random one.
valueintBase value.
LVintCrafting skill level needed.
recipeKeystring[]* = learned automatically the first time the player opens the matching workbench; - = never shows up as a random recipe; a shop name (Starter, Loytel, โ€ฆ) = sold there as a recipe scroll.
factorystring[]Item id of the workbench: factory_wall, factory_block, factory_floor, workbench. self = quick craft, x = never listed, none = not craftable. An id that is not an item disables the recipe.
componentsstring[]Ingredients: id[/count]; , between ingredients; | for alternatives; id@tag requires a tag (chunk@soil/1); $ marks the ingredient that gives the color; # names a category; + marks optional. Empty or - = one log. A malformed entry drops the recipe.
defMatstringMaterial alias used for the icon and for map generation. !alias locks the material. Not the material of what the player builds โ€” that comes from the ingredient they pick.
categorystringBuild menu tab: wall, fence โ†’ Wall; foundation; floor, floor_field โ†’ Floor; obj; deco. Unknown values fall back to obj.
tagstring[]Flags. Floor: noFloor, noBridge, noSnow, noTransition, beach, snowtile, nonGradient. Obj: autotile, seed, crop, rareSeed, crime. Any: hiddenRecipe, oneblock_only.
detail_JP / detailstringDescription text.

Block โ€‹

ColumnTypeDescription
idThingstringItem you get when the block is removed (block, wall, fence).
roofintRoof style used when the block borders a room.
autoFloorstringFloor alias left behind after mining the block (empty = raw floor; an unknown alias falls back to floor_raw).
concrete / transparentboolBuilding flags; copy them from a similar official row.
transitionint[]Ramp / transition cells; -1 = none.
soundFootstringFootstep sound id.

Floor โ€‹

ColumnTypeDescription
defBlockstringBlock alias used when the floor is turned into a block. Required (block_raw for most rows). An unknown alias falls back to the default block.
bridgeBlockstringPillar block alias under bridges made of this floor (pillar31).
soundFootstringFootstep sound id (wood, dirt, carpet, โ€ฆ).
autotilePriorityintWhich of two touching floors draws the edge between them.
idBiomestringBiome id for map generation. Must exist.

Every floor row also gets a bridge recipe, unless tag contains noBridge or factory is x.

Obj โ€‹

ColumnTypeDescription
_growthstring[]Class,stageFrame,harvestFrame,harvestThing,maxCount โ€” see Growth.
costSoilintSoil cost when planted.
objTypestringresource, crop, tree, plant. Only crop changes anything (seed food bonuses); the others are just labels.
valsint[]vals[0] = which seed icon to use (a number from the seed item's skin list).
valTypestringNone, Growth or Material. A typo is treated as None.
matCategorystringRandom material pool for map generation only.
chanceintWeight in the random seed pool (rows with seed in tag).

Build Menu โ€‹

A Block / Floor / Obj row shows up in the build menu when all of these hold:

  1. _tileType is a real tile type (not empty, not Marker);
  2. factory is a workbench item id (factory_wall, factory_block, factory_floor, workbench), not x / none;
  3. the player knows the recipe. With recipeKey = * it is learned the first time the player opens that workbench; otherwise it can be discovered by mining a tile of the same kind, or bought as a scroll (recipeKey = a shop name);
  4. category matches the tab you are looking at.

components decides the ingredients, and the ingredient the player picks decides the material of the result.

Growth โ€‹

_growth = Class,stageFrame,harvestFrame,harvestThing,maxCount turns an Obj into a crop, tree or weed. Class is the growth type: Crop, Wheat, Rice, Tree, Weed, Flower, Herb, Rose, Cactus, Cha, Kinoko, Berry, Pasture, Seaweed, โ€ฆ With an unknown class the row simply does not grow.

  • Stages: the plant moves through its stages over time; for most types the last stage is withered.
  • Harvest gives harvestThing (an item id, or #category for a random item of that category), 1 to maxCount pieces. Digging the plant up drops the last entry of components.
  • Seeds need no item row of their own: the vanilla seed item remembers which Obj it plants. Add seed to tag (and set objType to crop for food bonuses), set vals to a seed icon and chance for the random seed pool. rareSeed keeps it out of that pool.
  • Textures: draw the stages as one strip in Texture/Obj/<alias>.png and write stageFrame / harvestFrame as frame numbers in that strip, counting from 0. The frame layout for each class is in Texture Replace & Tile Textures. If you use Texture Replace slots instead, they are slot numbers.

Minimal wheat-style crop with a 7-frame strip:

idaliasname_JPname_growthcostSoilobjTypevalstag_idRenderDatacolorModcomponentsdefMat
3006mymod_wheat้บฆmy wheatWheat,0,5,wheat,230crop2crop,seedobj0grassgrass

Materials โ€‹

Materials are a separate sheet and have no texture of their own; see Material. A new ore only needs a Material row with category = ore, tier, chance and a color tag โ€” the vanilla ore vein picks it up and tints itself.

Localization โ€‹

name / name_JP cover English and Japanese. For other languages the game writes LangMod/<LANG>/SourceLocalization.json into your mod folder on the first launch (or via Export Text in the mod viewer), with one key per text such as SourceBlock.mymod_wall.name; fill in the values.

Pitfalls โ€‹

  • Row 3 of your sheet is the default row. Copy it from the official sheet.
  • alias is mandatory for textures and seeds; vanilla leaves it empty on many rows, you should not.
  • factory must be an existing item id and components must be well-formed; otherwise the recipe disappears.
  • defBlock / bridgeBlock / autoFloor must name existing aliases; wrong names are replaced by a fallback.
  • Do not put anime on Obj rows, and do not fill in tiles yourself when you ship a PNG.
  • Everything is rebuilt when the game starts; after editing the xlsx or the PNGs, just restart.

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.