[{"data":1,"prerenderedAt":1573},["ShallowReactive",2],{"navigation":3,"reference-navigation":62,"\u002Fdocs\u002Fdefining-bundle-tile-transitions":365,"\u002Fdocs\u002Fdefining-bundle-tile-transitions-surround":1568},[4,22,26,30,34,38,42,46,50,54,58],{"title":5,"path":6,"stem":7,"children":8},"Bundle Developer","\u002Fdocs\u002Fbundle-developer","1.docs\u002F1.bundle-developer\u002Findex",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Terminology","\u002Fdocs\u002Fbundle-developer\u002Fterminology","1.docs\u002F1.bundle-developer\u002F1.terminology",{"title":15,"path":16,"stem":17},"Prerequisites","\u002Fdocs\u002Fbundle-developer\u002Fprerequisites","1.docs\u002F1.bundle-developer\u002F2.prerequisites",{"title":19,"path":20,"stem":21},"Bundle Layout","\u002Fdocs\u002Fbundle-developer\u002Flayout","1.docs\u002F1.bundle-developer\u002F3.layout",{"title":23,"path":24,"stem":25},"Custom Registry Developer Guide","\u002Fdocs\u002Fcustom-registries","1.docs\u002Fcustom-registries",{"title":27,"path":28,"stem":29},"Defining Bundle Entities","\u002Fdocs\u002Fdefining-bundle-entities","1.docs\u002Fdefining-bundle-entities",{"title":31,"path":32,"stem":33},"Defining Bundle Sounds","\u002Fdocs\u002Fdefining-bundle-sounds","1.docs\u002Fdefining-bundle-sounds",{"title":35,"path":36,"stem":37},"Defining Bundle Tile Transitions","\u002Fdocs\u002Fdefining-bundle-tile-transitions","1.docs\u002Fdefining-bundle-tile-transitions",{"title":39,"path":40,"stem":41},"Defining Bundle Tiles","\u002Fdocs\u002Fdefining-bundle-tiles","1.docs\u002Fdefining-bundle-tiles",{"title":43,"path":44,"stem":45},"Defining Bundle Visuals","\u002Fdocs\u002Fdefining-bundle-visuals","1.docs\u002Fdefining-bundle-visuals",{"title":47,"path":48,"stem":49},"Bundle Event System Developer Guide","\u002Fdocs\u002Fevent-system","1.docs\u002Fevent-system",{"title":51,"path":52,"stem":53},"Getting Started with Selene Bundles","\u002Fdocs\u002Fgetting-started-bundles","1.docs\u002Fgetting-started-bundles",{"title":55,"path":56,"stem":57},"Making Resource Packs","\u002Fdocs\u002Fmaking-resource-packs","1.docs\u002Fmaking-resource-packs",{"title":59,"path":60,"stem":61},"Bundle Network API Developer Guide","\u002Fdocs\u002Fnetwork-apis","1.docs\u002Fnetwork-apis",[63,212,253],{"title":64,"path":65,"stem":66,"children":67,"page":121},"Modules","\u002Freference\u002Fmodules","2.reference\u002F1.modules",[68,122,167],{"title":69,"path":70,"stem":71,"children":72,"page":121},"Common","\u002Freference\u002Fmodules\u002Fcommon","2.reference\u002F1.modules\u002F1.common",[73,77,81,85,89,93,97,101,105,109,113,117],{"title":74,"path":75,"stem":76},"debug","\u002Freference\u002Fmodules\u002Fcommon\u002Fdebug","2.reference\u002F1.modules\u002F1.common\u002Fdebug",{"title":78,"path":79,"stem":80},"mathx","\u002Freference\u002Fmodules\u002Fcommon\u002Fmathx","2.reference\u002F1.modules\u002F1.common\u002Fmathx",{"title":82,"path":83,"stem":84},"os","\u002Freference\u002Fmodules\u002Fcommon\u002Fos","2.reference\u002F1.modules\u002F1.common\u002Fos",{"title":86,"path":87,"stem":88},"package","\u002Freference\u002Fmodules\u002Fcommon\u002Fpackage","2.reference\u002F1.modules\u002F1.common\u002Fpackage",{"title":90,"path":91,"stem":92},"selene.grid","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.grid","2.reference\u002F1.modules\u002F1.common\u002Fselene.grid",{"title":94,"path":95,"stem":96},"selene.http","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.http","2.reference\u002F1.modules\u002F1.common\u002Fselene.http",{"title":98,"path":99,"stem":100},"selene.i18n","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.i18n","2.reference\u002F1.modules\u002F1.common\u002Fselene.i18n",{"title":102,"path":103,"stem":104},"selene.registries","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.registries","2.reference\u002F1.modules\u002F1.common\u002Fselene.registries",{"title":106,"path":107,"stem":108},"selene.resources","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.resources","2.reference\u002F1.modules\u002F1.common\u002Fselene.resources",{"title":110,"path":111,"stem":112},"selene.schedules","\u002Freference\u002Fmodules\u002Fcommon\u002Fselene.schedules","2.reference\u002F1.modules\u002F1.common\u002Fselene.schedules",{"title":114,"path":115,"stem":116},"stringx","\u002Freference\u002Fmodules\u002Fcommon\u002Fstringx","2.reference\u002F1.modules\u002F1.common\u002Fstringx",{"title":118,"path":119,"stem":120},"tablex","\u002Freference\u002Fmodules\u002Fcommon\u002Ftablex","2.reference\u002F1.modules\u002F1.common\u002Ftablex",false,{"title":123,"path":124,"stem":125,"children":126,"page":121},"Server","\u002Freference\u002Fmodules\u002Fserver","2.reference\u002F1.modules\u002F2.server",[127,131,135,139,143,147,151,155,159,163],{"title":128,"path":129,"stem":130},"selene.attributes","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.attributes","2.reference\u002F1.modules\u002F2.server\u002Fselene.attributes",{"title":132,"path":133,"stem":134},"selene.config","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.config","2.reference\u002F1.modules\u002F2.server\u002Fselene.config",{"title":136,"path":137,"stem":138},"selene.dimensions","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.dimensions","2.reference\u002F1.modules\u002F2.server\u002Fselene.dimensions",{"title":140,"path":141,"stem":142},"selene.entities","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.entities","2.reference\u002F1.modules\u002F2.server\u002Fselene.entities",{"title":144,"path":145,"stem":146},"selene.map","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.map","2.reference\u002F1.modules\u002F2.server\u002Fselene.map",{"title":148,"path":149,"stem":150},"selene.network","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.network","2.reference\u002F1.modules\u002F2.server\u002Fselene.network",{"title":152,"path":153,"stem":154},"selene.players","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.players","2.reference\u002F1.modules\u002F2.server\u002Fselene.players",{"title":156,"path":157,"stem":158},"selene.saves","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.saves","2.reference\u002F1.modules\u002F2.server\u002Fselene.saves",{"title":160,"path":161,"stem":162},"selene.server","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.server","2.reference\u002F1.modules\u002F2.server\u002Fselene.server",{"title":164,"path":165,"stem":166},"selene.sounds","\u002Freference\u002Fmodules\u002Fserver\u002Fselene.sounds","2.reference\u002F1.modules\u002F2.server\u002Fselene.sounds",{"title":168,"path":169,"stem":170,"children":171,"page":121},"Client","\u002Freference\u002Fmodules\u002Fclient","2.reference\u002F1.modules\u002F3.client",[172,176,179,183,187,190,194,197,200,204,208],{"title":173,"path":174,"stem":175},"selene.camera","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.camera","2.reference\u002F1.modules\u002F3.client\u002Fselene.camera",{"title":140,"path":177,"stem":178},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.entities","2.reference\u002F1.modules\u002F3.client\u002Fselene.entities",{"title":180,"path":181,"stem":182},"selene.game","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.game","2.reference\u002F1.modules\u002F3.client\u002Fselene.game",{"title":184,"path":185,"stem":186},"selene.input","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.input","2.reference\u002F1.modules\u002F3.client\u002Fselene.input",{"title":144,"path":188,"stem":189},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.map","2.reference\u002F1.modules\u002F3.client\u002Fselene.map",{"title":191,"path":192,"stem":193},"selene.movement.grid","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.movement.grid","2.reference\u002F1.modules\u002F3.client\u002Fselene.movement.grid",{"title":148,"path":195,"stem":196},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.network","2.reference\u002F1.modules\u002F3.client\u002Fselene.network",{"title":164,"path":198,"stem":199},"\u002Freference\u002Fmodules\u002Fclient\u002Fselene.sounds","2.reference\u002F1.modules\u002F3.client\u002Fselene.sounds",{"title":201,"path":202,"stem":203},"selene.textures","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.textures","2.reference\u002F1.modules\u002F3.client\u002Fselene.textures",{"title":205,"path":206,"stem":207},"selene.ui.lml","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.ui.lml","2.reference\u002F1.modules\u002F3.client\u002Fselene.ui.lml",{"title":209,"path":210,"stem":211},"selene.visuals","\u002Freference\u002Fmodules\u002Fclient\u002Fselene.visuals","2.reference\u002F1.modules\u002F3.client\u002Fselene.visuals",{"title":213,"path":214,"stem":215,"children":216,"page":121},"Data","\u002Freference\u002Fdata","2.reference\u002F2.data",[217,241],{"title":69,"path":218,"stem":219,"children":220,"page":121},"\u002Freference\u002Fdata\u002Fcommon","2.reference\u002F2.data\u002F1.common",[221,225,229,233,237],{"title":222,"path":223,"stem":224},"Component Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fcomponentdefinition","2.reference\u002F2.data\u002F1.common\u002FComponentDefinition",{"title":226,"path":227,"stem":228},"Entity Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fentitydefinition","2.reference\u002F2.data\u002F1.common\u002FEntityDefinition",{"title":230,"path":231,"stem":232},"Sound Definition","\u002Freference\u002Fdata\u002Fcommon\u002Fsounddefinition","2.reference\u002F2.data\u002F1.common\u002FSoundDefinition",{"title":234,"path":235,"stem":236},"Tile Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftiledefinition","2.reference\u002F2.data\u002F1.common\u002FTileDefinition",{"title":238,"path":239,"stem":240},"Transition Definition","\u002Freference\u002Fdata\u002Fcommon\u002Ftransitiondefinition","2.reference\u002F2.data\u002F1.common\u002FTransitionDefinition",{"title":168,"path":242,"stem":243,"children":244,"page":121},"\u002Freference\u002Fdata\u002Fclient","2.reference\u002F2.data\u002F3.client",[245,249],{"title":246,"path":247,"stem":248},"Audio Definition","\u002Freference\u002Fdata\u002Fclient\u002Faudiodefinition","2.reference\u002F2.data\u002F3.client\u002FAudioDefinition",{"title":250,"path":251,"stem":252},"Visual Definition","\u002Freference\u002Fdata\u002Fclient\u002Fvisualdefinition","2.reference\u002F2.data\u002F3.client\u002FVisualDefinition",{"title":254,"path":255,"stem":256,"children":257,"page":121},"Classes","\u002Freference\u002Fclasses","2.reference\u002F3.classes",[258,286,318],{"title":69,"path":259,"stem":260,"children":261,"page":121},"\u002Freference\u002Fclasses\u002Fcommon","2.reference\u002F3.classes\u002F1.common",[262,266,270,274,278,282],{"title":263,"path":264,"stem":265},"Coordinate","\u002Freference\u002Fclasses\u002Fcommon\u002Fcoordinate","2.reference\u002F3.classes\u002F1.common\u002FCoordinate",{"title":267,"path":268,"stem":269},"CustomRegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fcustomregistryobject","2.reference\u002F3.classes\u002F1.common\u002FCustomRegistryObject",{"title":271,"path":272,"stem":273},"LuaReference","\u002Freference\u002Fclasses\u002Fcommon\u002Fluareference","2.reference\u002F3.classes\u002F1.common\u002FLuaReference",{"title":275,"path":276,"stem":277},"Observable","\u002Freference\u002Fclasses\u002Fcommon\u002Fobservable","2.reference\u002F3.classes\u002F1.common\u002FObservable",{"title":279,"path":280,"stem":281},"RegistryObject","\u002Freference\u002Fclasses\u002Fcommon\u002Fregistryobject","2.reference\u002F3.classes\u002F1.common\u002FRegistryObject",{"title":283,"path":284,"stem":285},"Signal","\u002Freference\u002Fclasses\u002Fcommon\u002Fsignal","2.reference\u002F3.classes\u002F1.common\u002FSignal",{"title":123,"path":287,"stem":288,"children":289,"page":121},"\u002Freference\u002Fclasses\u002Fserver","2.reference\u002F3.classes\u002F2.server",[290,294,298,302,306,310,314],{"title":291,"path":292,"stem":293},"Dimension","\u002Freference\u002Fclasses\u002Fserver\u002Fdimension","2.reference\u002F3.classes\u002F2.server\u002FDimension",{"title":295,"path":296,"stem":297},"Entity","\u002Freference\u002Fclasses\u002Fserver\u002Fentity","2.reference\u002F3.classes\u002F2.server\u002FEntity",{"title":299,"path":300,"stem":301},"LoginQueueEntry","\u002Freference\u002Fclasses\u002Fserver\u002Floginqueueentry","2.reference\u002F3.classes\u002F2.server\u002FLoginQueueEntry",{"title":303,"path":304,"stem":305},"MapTree","\u002Freference\u002Fclasses\u002Fserver\u002Fmaptree","2.reference\u002F3.classes\u002F2.server\u002FMapTree",{"title":307,"path":308,"stem":309},"Player","\u002Freference\u002Fclasses\u002Fserver\u002Fplayer","2.reference\u002F3.classes\u002F2.server\u002FPlayer",{"title":311,"path":312,"stem":313},"ScopedChunkView","\u002Freference\u002Fclasses\u002Fserver\u002Fscopedchunkview","2.reference\u002F3.classes\u002F2.server\u002FScopedChunkView",{"title":315,"path":316,"stem":317},"TransientTile","\u002Freference\u002Fclasses\u002Fserver\u002Ftransienttile","2.reference\u002F3.classes\u002F2.server\u002FTransientTile",{"title":168,"path":319,"stem":320,"children":321,"page":121},"\u002Freference\u002Fclasses\u002Fclient","2.reference\u002F3.classes\u002F3.client",[322,326,330,334,337,341,345,349,353,357,361],{"title":323,"path":324,"stem":325},"Actor","\u002Freference\u002Fclasses\u002Fclient\u002Factor","2.reference\u002F3.classes\u002F3.client\u002FActor",{"title":327,"path":328,"stem":329},"Drawable","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawable","2.reference\u002F3.classes\u002F3.client\u002FDrawable",{"title":331,"path":332,"stem":333},"DrawableVisual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fdrawablevisual2d","2.reference\u002F3.classes\u002F3.client\u002FDrawableVisual2D",{"title":295,"path":335,"stem":336},"\u002Freference\u002Fclasses\u002Fclient\u002Fentity","2.reference\u002F3.classes\u002F3.client\u002FEntity",{"title":338,"path":339,"stem":340},"IsoVisualComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fisovisualcomponent","2.reference\u002F3.classes\u002F3.client\u002FIsoVisualComponent",{"title":342,"path":343,"stem":344},"LuaTexture","\u002Freference\u002Fclasses\u002Fclient\u002Fluatexture","2.reference\u002F3.classes\u002F3.client\u002FLuaTexture",{"title":346,"path":347,"stem":348},"Skin","\u002Freference\u002Fclasses\u002Fclient\u002Fskin","2.reference\u002F3.classes\u002F3.client\u002FSkin",{"title":350,"path":351,"stem":352},"TextFieldTextFieldClickListener","\u002Freference\u002Fclasses\u002Fclient\u002Ftextfield.textfieldclicklistener","2.reference\u002F3.classes\u002F3.client\u002FTextField.TextFieldClickListener",{"title":354,"path":355,"stem":356},"Tile","\u002Freference\u002Fclasses\u002Fclient\u002Ftile","2.reference\u002F3.classes\u002F3.client\u002FTile",{"title":358,"path":359,"stem":360},"Visual2D","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2d","2.reference\u002F3.classes\u002F3.client\u002FVisual2D",{"title":362,"path":363,"stem":364},"Visual2DComponent","\u002Freference\u002Fclasses\u002Fclient\u002Fvisual2dcomponent","2.reference\u002F3.classes\u002F3.client\u002FVisual2DComponent",{"id":366,"title":35,"body":367,"description":1562,"extension":1563,"meta":1564,"navigation":1565,"path":36,"seo":1566,"stem":37,"__hash__":1567},"docs\u002F1.docs\u002Fdefining-bundle-tile-transitions.md",{"type":368,"value":369,"toc":1552},"minimark",[370,374,378,386,391,394,404,407,411,422,425,435,438,444,450,526,536,540,547,669,676,680,683,770,773,800,804,810,816,830,833,886,889,939,945,948,953,956,959,1130,1142,1148,1152,1155,1161,1166,1267,1272,1393,1398,1511,1515,1548],[371,372,35],"h1",{"id":373},"defining-bundle-tile-transitions",[375,376,377],"p",{},"Tile transitions let Selene place visual edge and corner overlays automatically where different base tiles meet. They are useful for terrain borders such as grass against dirt, rock against sand, or water against shore tiles.",[375,379,380,381,385],{},"Transitions live in the common ",[382,383,384],"code",{},"transitions"," registry. The server resolves them when preparing map chunks for a viewer and sends the resulting transition tiles as additional tile layers. The original base map tiles are not changed.",[387,388,390],"h2",{"id":389},"how-transitions-work","How transitions work",[375,392,393],{},"For each coordinate, Selene looks at the eight neighboring base tiles around the center tile. For each neighboring tile type, it builds a neighbour mask describing which surrounding positions contain that tile. If that tile type has a matching transition definition, Selene can add the referenced transition tile on top of the center coordinate.",[375,395,396,397,400,401,403],{},"The transition definition belongs to the tile that is visually spreading into its neighbors. For example, if ",[382,398,399],{},"myworld:terrain\u002Fgrass"," should draw edges over adjacent dirt, define transitions for ",[382,402,399],{},", and point each matching pattern at grass edge overlay tiles.",[375,405,406],{},"Only one transition overlay is selected per coordinate. If several neighboring tile types match, the highest-priority matching transition wins.",[387,408,410],{"id":409},"where-transitions-live","Where transitions live",[375,412,413,414,417,418,421],{},"Put transition definitions under ",[382,415,416],{},"common\u002Fdata\u002F\u003Cnamespace>\u002F",", where ",[382,419,420],{},"\u003Cnamespace>"," becomes the namespace part of each transition entry identifier.",[375,423,424],{},"You can define multiple transition entries in one registry file:",[426,427,433],"pre",{"className":428,"code":430,"language":431,"meta":432},[429],"language-text","my-bundle\u002F\n  bundle.json\n  common\u002F\n    data\u002F\n      myworld\u002F\n        transitions.json\n        tiles.json\n","text","",[382,434,430],{"__ignoreMap":432},[375,436,437],{},"Or split each transition entry into its own JSON file:",[426,439,442],{"className":440,"code":441,"language":431,"meta":432},[429],"my-bundle\u002F\n  common\u002F\n    data\u002F\n      myworld\u002F\n        transitions\u002F\n          terrain\u002F\n            grass.json\n",[382,443,441],{"__ignoreMap":432},[375,445,446,447,449],{},"The transition entry identifier must match the tile identifier that owns the transition rules. This merged file defines transitions for ",[382,448,399],{},":",[426,451,455],{"className":452,"code":453,"language":454,"meta":432,"style":432},"language-json shiki shiki-themes github-light github-dark","{\n  \"entries\": {\n    \"terrain\u002Fgrass\": {\n      \"priority\": 20,\n      \"transitions\": []\n    }\n  }\n}\n","json",[382,456,457,466,476,484,499,508,514,520],{"__ignoreMap":432},[458,459,462],"span",{"class":460,"line":461},"line",1,[458,463,465],{"class":464},"sVt8B","{\n",[458,467,469,473],{"class":460,"line":468},2,[458,470,472],{"class":471},"sj4cs","  \"entries\"",[458,474,475],{"class":464},": {\n",[458,477,479,482],{"class":460,"line":478},3,[458,480,481],{"class":471},"    \"terrain\u002Fgrass\"",[458,483,475],{"class":464},[458,485,487,490,493,496],{"class":460,"line":486},4,[458,488,489],{"class":471},"      \"priority\"",[458,491,492],{"class":464},": ",[458,494,495],{"class":471},"20",[458,497,498],{"class":464},",\n",[458,500,502,505],{"class":460,"line":501},5,[458,503,504],{"class":471},"      \"transitions\"",[458,506,507],{"class":464},": []\n",[458,509,511],{"class":460,"line":510},6,[458,512,513],{"class":464},"    }\n",[458,515,517],{"class":460,"line":516},7,[458,518,519],{"class":464},"  }\n",[458,521,523],{"class":460,"line":522},8,[458,524,525],{"class":464},"}\n",[375,527,528,529,532,533,535],{},"The split-file form uses the file path as the local name. For example, ",[382,530,531],{},"common\u002Fdata\u002Fmyworld\u002Ftransitions\u002Fterrain\u002Fgrass.json"," also defines transitions for ",[382,534,399],{},".",[387,537,539],{"id":538},"transition-tiles","Transition tiles",[375,541,542,543,546],{},"Transition definitions reference normal tiles from the ",[382,544,545],{},"tiles"," registry. Define those overlay tiles separately and give them visuals like any other tile:",[426,548,550],{"className":452,"code":549,"language":454,"meta":432,"style":432},"{\n  \"entries\": {\n    \"terrain\u002Fgrass_edge_north\": {\n      \"visual\": \"myworld:terrain\u002Fgrass_edge_north\",\n      \"passableAbove\": true,\n      \"tags\": [\"myworld:transition\"]\n    },\n    \"terrain\u002Fgrass_inner_corner_nw\": {\n      \"visual\": \"myworld:terrain\u002Fgrass_inner_corner_nw\",\n      \"passableAbove\": true,\n      \"tags\": [\"myworld:transition\"]\n    }\n  }\n}\n",[382,551,552,556,562,569,582,594,608,613,620,632,643,654,659,664],{"__ignoreMap":432},[458,553,554],{"class":460,"line":461},[458,555,465],{"class":464},[458,557,558,560],{"class":460,"line":468},[458,559,472],{"class":471},[458,561,475],{"class":464},[458,563,564,567],{"class":460,"line":478},[458,565,566],{"class":471},"    \"terrain\u002Fgrass_edge_north\"",[458,568,475],{"class":464},[458,570,571,574,576,580],{"class":460,"line":486},[458,572,573],{"class":471},"      \"visual\"",[458,575,492],{"class":464},[458,577,579],{"class":578},"sZZnC","\"myworld:terrain\u002Fgrass_edge_north\"",[458,581,498],{"class":464},[458,583,584,587,589,592],{"class":460,"line":501},[458,585,586],{"class":471},"      \"passableAbove\"",[458,588,492],{"class":464},[458,590,591],{"class":471},"true",[458,593,498],{"class":464},[458,595,596,599,602,605],{"class":460,"line":510},[458,597,598],{"class":471},"      \"tags\"",[458,600,601],{"class":464},": [",[458,603,604],{"class":578},"\"myworld:transition\"",[458,606,607],{"class":464},"]\n",[458,609,610],{"class":460,"line":516},[458,611,612],{"class":464},"    },\n",[458,614,615,618],{"class":460,"line":522},[458,616,617],{"class":471},"    \"terrain\u002Fgrass_inner_corner_nw\"",[458,619,475],{"class":464},[458,621,623,625,627,630],{"class":460,"line":622},9,[458,624,573],{"class":471},[458,626,492],{"class":464},[458,628,629],{"class":578},"\"myworld:terrain\u002Fgrass_inner_corner_nw\"",[458,631,498],{"class":464},[458,633,635,637,639,641],{"class":460,"line":634},10,[458,636,586],{"class":471},[458,638,492],{"class":464},[458,640,591],{"class":471},[458,642,498],{"class":464},[458,644,646,648,650,652],{"class":460,"line":645},11,[458,647,598],{"class":471},[458,649,601],{"class":464},[458,651,604],{"class":578},[458,653,607],{"class":464},[458,655,657],{"class":460,"line":656},12,[458,658,513],{"class":464},[458,660,662],{"class":460,"line":661},13,[458,663,519],{"class":464},[458,665,667],{"class":460,"line":666},14,[458,668,525],{"class":464},[375,670,671,672,675],{},"Use ",[382,673,674],{},"passableAbove: true"," when the overlay should not make the coordinate blocked just because it is placed above another tile. This is common for terrain edge graphics.",[387,677,679],{"id":678},"transition-shape","Transition shape",[375,681,682],{},"A transition definition has two fields:",[426,684,686],{"className":452,"code":685,"language":454,"meta":432,"style":432},"{\n  \"priority\": 20,\n  \"transitions\": [\n    {\n      \"neighbours\": [\n        \"010\",\n        \"0X0\",\n        \"000\"\n      ],\n      \"tile\": \"myworld:terrain\u002Fgrass_edge_north\"\n    }\n  ]\n}\n",[382,687,688,692,703,711,716,723,730,737,742,747,757,761,766],{"__ignoreMap":432},[458,689,690],{"class":460,"line":461},[458,691,465],{"class":464},[458,693,694,697,699,701],{"class":460,"line":468},[458,695,696],{"class":471},"  \"priority\"",[458,698,492],{"class":464},[458,700,495],{"class":471},[458,702,498],{"class":464},[458,704,705,708],{"class":460,"line":478},[458,706,707],{"class":471},"  \"transitions\"",[458,709,710],{"class":464},": [\n",[458,712,713],{"class":460,"line":486},[458,714,715],{"class":464},"    {\n",[458,717,718,721],{"class":460,"line":501},[458,719,720],{"class":471},"      \"neighbours\"",[458,722,710],{"class":464},[458,724,725,728],{"class":460,"line":510},[458,726,727],{"class":578},"        \"010\"",[458,729,498],{"class":464},[458,731,732,735],{"class":460,"line":516},[458,733,734],{"class":578},"        \"0X0\"",[458,736,498],{"class":464},[458,738,739],{"class":460,"line":522},[458,740,741],{"class":578},"        \"000\"\n",[458,743,744],{"class":460,"line":622},[458,745,746],{"class":464},"      ],\n",[458,748,749,752,754],{"class":460,"line":634},[458,750,751],{"class":471},"      \"tile\"",[458,753,492],{"class":464},[458,755,756],{"class":578},"\"myworld:terrain\u002Fgrass_edge_north\"\n",[458,758,759],{"class":460,"line":645},[458,760,513],{"class":464},[458,762,763],{"class":460,"line":656},[458,764,765],{"class":464},"  ]\n",[458,767,768],{"class":460,"line":661},[458,769,525],{"class":464},[375,771,772],{},"Fields:",[774,775,776,783,788,794],"ul",{},[777,778,779,782],"li",{},[382,780,781],{},"priority"," decides which terrain wins when multiple neighboring tile types could place a transition overlay.",[777,784,785,787],{},[382,786,384],{}," is an ordered list of mask entries.",[777,789,790,793],{},[382,791,792],{},"neighbours"," is a three-row pattern for the eight surrounding positions.",[777,795,796,799],{},[382,797,798],{},"tile"," is the tile identifier to add as the transition overlay when the pattern matches.",[387,801,803],{"id":802},"neighbour-masks","Neighbour masks",[375,805,806,807,809],{},"The ",[382,808,792],{}," pattern is read as a 3x3 grid around the center coordinate:",[426,811,814],{"className":812,"code":813,"language":431,"meta":432},[429],"NW N NE\nW  X E\nSW S SE\n",[382,815,813],{"__ignoreMap":432},[375,817,671,818,821,822,825,826,829],{},[382,819,820],{},"1"," for positions that must contain the transition owner's base tile. Use ",[382,823,824],{},"0"," for positions that must not contain that base tile. The center character is ignored by the engine; ",[382,827,828],{},"X"," is the usual convention.",[375,831,832],{},"This pattern matches when the owner's base tile is directly north of the center coordinate and not in any other neighboring position:",[426,834,836],{"className":452,"code":835,"language":454,"meta":432,"style":432},"{\n  \"neighbours\": [\n    \"010\",\n    \"0X0\",\n    \"000\"\n  ],\n  \"tile\": \"myworld:terrain\u002Fgrass_edge_north\"\n}\n",[382,837,838,842,849,856,863,868,873,882],{"__ignoreMap":432},[458,839,840],{"class":460,"line":461},[458,841,465],{"class":464},[458,843,844,847],{"class":460,"line":468},[458,845,846],{"class":471},"  \"neighbours\"",[458,848,710],{"class":464},[458,850,851,854],{"class":460,"line":478},[458,852,853],{"class":578},"    \"010\"",[458,855,498],{"class":464},[458,857,858,861],{"class":460,"line":486},[458,859,860],{"class":578},"    \"0X0\"",[458,862,498],{"class":464},[458,864,865],{"class":460,"line":501},[458,866,867],{"class":578},"    \"000\"\n",[458,869,870],{"class":460,"line":510},[458,871,872],{"class":464},"  ],\n",[458,874,875,878,880],{"class":460,"line":516},[458,876,877],{"class":471},"  \"tile\"",[458,879,492],{"class":464},[458,881,756],{"class":578},[458,883,884],{"class":460,"line":522},[458,885,525],{"class":464},[375,887,888],{},"This pattern matches a north-west corner made from north, north-west, and west neighbors:",[426,890,892],{"className":452,"code":891,"language":454,"meta":432,"style":432},"{\n  \"neighbours\": [\n    \"110\",\n    \"1X0\",\n    \"000\"\n  ],\n  \"tile\": \"myworld:terrain\u002Fgrass_inner_corner_nw\"\n}\n",[382,893,894,898,904,911,918,922,926,935],{"__ignoreMap":432},[458,895,896],{"class":460,"line":461},[458,897,465],{"class":464},[458,899,900,902],{"class":460,"line":468},[458,901,846],{"class":471},[458,903,710],{"class":464},[458,905,906,909],{"class":460,"line":478},[458,907,908],{"class":578},"    \"110\"",[458,910,498],{"class":464},[458,912,913,916],{"class":460,"line":486},[458,914,915],{"class":578},"    \"1X0\"",[458,917,498],{"class":464},[458,919,920],{"class":460,"line":501},[458,921,867],{"class":578},[458,923,924],{"class":460,"line":510},[458,925,872],{"class":464},[458,927,928,930,932],{"class":460,"line":516},[458,929,877],{"class":471},[458,931,492],{"class":464},[458,933,934],{"class":578},"\"myworld:terrain\u002Fgrass_inner_corner_nw\"\n",[458,936,937],{"class":460,"line":522},[458,938,525],{"class":464},[375,940,941,942,944],{},"Patterns are exact for the owner tile. A ",[382,943,824],{}," does not mean empty; it means that position is any base tile other than the owner tile.",[387,946,947],{"id":781},"Priority",[375,949,950,951,535],{},"Priorities decide which transition overlay gets added when several surrounding tile types match. Selene chooses the matching transition with the highest ",[382,952,781],{},[375,954,955],{},"The center tile's own transition priority also matters. A neighboring transition is only applied if its priority is greater than the center tile's transition priority. This lets high-priority terrain prevent lower-priority terrain from drawing over it.",[375,957,958],{},"For example:",[426,960,962],{"className":452,"code":961,"language":454,"meta":432,"style":432},"{\n  \"entries\": {\n    \"terrain\u002Fstone_floor\": {\n      \"priority\": 1000,\n      \"transitions\": []\n    },\n    \"terrain\u002Fgrass\": {\n      \"priority\": 20,\n      \"transitions\": [\n        {\n          \"neighbours\": [\n            \"010\",\n            \"0X0\",\n            \"000\"\n          ],\n          \"tile\": \"myworld:terrain\u002Fgrass_edge_north\"\n        }\n      ]\n    },\n    \"terrain\u002Fdirt\": {\n      \"priority\": 10,\n      \"transitions\": []\n    }\n  }\n}\n",[382,963,964,968,974,981,992,998,1002,1008,1018,1024,1029,1036,1043,1050,1055,1061,1071,1077,1083,1088,1096,1108,1115,1120,1125],{"__ignoreMap":432},[458,965,966],{"class":460,"line":461},[458,967,465],{"class":464},[458,969,970,972],{"class":460,"line":468},[458,971,472],{"class":471},[458,973,475],{"class":464},[458,975,976,979],{"class":460,"line":478},[458,977,978],{"class":471},"    \"terrain\u002Fstone_floor\"",[458,980,475],{"class":464},[458,982,983,985,987,990],{"class":460,"line":486},[458,984,489],{"class":471},[458,986,492],{"class":464},[458,988,989],{"class":471},"1000",[458,991,498],{"class":464},[458,993,994,996],{"class":460,"line":501},[458,995,504],{"class":471},[458,997,507],{"class":464},[458,999,1000],{"class":460,"line":510},[458,1001,612],{"class":464},[458,1003,1004,1006],{"class":460,"line":516},[458,1005,481],{"class":471},[458,1007,475],{"class":464},[458,1009,1010,1012,1014,1016],{"class":460,"line":522},[458,1011,489],{"class":471},[458,1013,492],{"class":464},[458,1015,495],{"class":471},[458,1017,498],{"class":464},[458,1019,1020,1022],{"class":460,"line":622},[458,1021,504],{"class":471},[458,1023,710],{"class":464},[458,1025,1026],{"class":460,"line":634},[458,1027,1028],{"class":464},"        {\n",[458,1030,1031,1034],{"class":460,"line":645},[458,1032,1033],{"class":471},"          \"neighbours\"",[458,1035,710],{"class":464},[458,1037,1038,1041],{"class":460,"line":656},[458,1039,1040],{"class":578},"            \"010\"",[458,1042,498],{"class":464},[458,1044,1045,1048],{"class":460,"line":661},[458,1046,1047],{"class":578},"            \"0X0\"",[458,1049,498],{"class":464},[458,1051,1052],{"class":460,"line":666},[458,1053,1054],{"class":578},"            \"000\"\n",[458,1056,1058],{"class":460,"line":1057},15,[458,1059,1060],{"class":464},"          ],\n",[458,1062,1064,1067,1069],{"class":460,"line":1063},16,[458,1065,1066],{"class":471},"          \"tile\"",[458,1068,492],{"class":464},[458,1070,756],{"class":578},[458,1072,1074],{"class":460,"line":1073},17,[458,1075,1076],{"class":464},"        }\n",[458,1078,1080],{"class":460,"line":1079},18,[458,1081,1082],{"class":464},"      ]\n",[458,1084,1086],{"class":460,"line":1085},19,[458,1087,612],{"class":464},[458,1089,1091,1094],{"class":460,"line":1090},20,[458,1092,1093],{"class":471},"    \"terrain\u002Fdirt\"",[458,1095,475],{"class":464},[458,1097,1099,1101,1103,1106],{"class":460,"line":1098},21,[458,1100,489],{"class":471},[458,1102,492],{"class":464},[458,1104,1105],{"class":471},"10",[458,1107,498],{"class":464},[458,1109,1111,1113],{"class":460,"line":1110},22,[458,1112,504],{"class":471},[458,1114,507],{"class":464},[458,1116,1118],{"class":460,"line":1117},23,[458,1119,513],{"class":464},[458,1121,1123],{"class":460,"line":1122},24,[458,1124,519],{"class":464},[458,1126,1128],{"class":460,"line":1127},25,[458,1129,525],{"class":464},[375,1131,1132,1133,1136,1137,1139,1140,535],{},"In this setup, grass can draw over dirt because ",[382,1134,1135],{},"20 > 10",". Grass does not draw over stone floor because ",[382,1138,495],{}," is not greater than ",[382,1141,989],{},[375,1143,1144,1145,1147],{},"Use empty ",[382,1146,384],{}," arrays for tiles that should participate in priority comparisons but do not place overlays themselves.",[387,1149,1151],{"id":1150},"complete-example","Complete example",[375,1153,1154],{},"This example defines a grass transition overlay that appears on a dirt tile when grass is north of it.",[426,1156,1159],{"className":1157,"code":1158,"language":431,"meta":432},[429],"my-bundle\u002F\n  common\u002F\n    data\u002F\n      myworld\u002F\n        tiles.json\n        transitions.json\n  client\u002F\n    data\u002F\n      myworld\u002F\n        visuals.json\n    textures\u002F\n      myworld\u002F\n        terrain\u002F\n          dirt.png\n          grass.png\n          grass_edge_north.png\n",[382,1160,1158],{"__ignoreMap":432},[375,1162,1163,449],{},[382,1164,1165],{},"common\u002Fdata\u002Fmyworld\u002Ftiles.json",[426,1167,1169],{"className":452,"code":1168,"language":454,"meta":432,"style":432},"{\n  \"entries\": {\n    \"terrain\u002Fdirt\": {\n      \"visual\": \"myworld:terrain\u002Fdirt\"\n    },\n    \"terrain\u002Fgrass\": {\n      \"visual\": \"myworld:terrain\u002Fgrass\"\n    },\n    \"terrain\u002Fgrass_edge_north\": {\n      \"visual\": \"myworld:terrain\u002Fgrass_edge_north\",\n      \"passableAbove\": true,\n      \"tags\": [\"myworld:transition\"]\n    }\n  }\n}\n",[382,1170,1171,1175,1181,1187,1196,1200,1206,1215,1219,1225,1235,1245,1255,1259,1263],{"__ignoreMap":432},[458,1172,1173],{"class":460,"line":461},[458,1174,465],{"class":464},[458,1176,1177,1179],{"class":460,"line":468},[458,1178,472],{"class":471},[458,1180,475],{"class":464},[458,1182,1183,1185],{"class":460,"line":478},[458,1184,1093],{"class":471},[458,1186,475],{"class":464},[458,1188,1189,1191,1193],{"class":460,"line":486},[458,1190,573],{"class":471},[458,1192,492],{"class":464},[458,1194,1195],{"class":578},"\"myworld:terrain\u002Fdirt\"\n",[458,1197,1198],{"class":460,"line":501},[458,1199,612],{"class":464},[458,1201,1202,1204],{"class":460,"line":510},[458,1203,481],{"class":471},[458,1205,475],{"class":464},[458,1207,1208,1210,1212],{"class":460,"line":516},[458,1209,573],{"class":471},[458,1211,492],{"class":464},[458,1213,1214],{"class":578},"\"myworld:terrain\u002Fgrass\"\n",[458,1216,1217],{"class":460,"line":522},[458,1218,612],{"class":464},[458,1220,1221,1223],{"class":460,"line":622},[458,1222,566],{"class":471},[458,1224,475],{"class":464},[458,1226,1227,1229,1231,1233],{"class":460,"line":634},[458,1228,573],{"class":471},[458,1230,492],{"class":464},[458,1232,579],{"class":578},[458,1234,498],{"class":464},[458,1236,1237,1239,1241,1243],{"class":460,"line":645},[458,1238,586],{"class":471},[458,1240,492],{"class":464},[458,1242,591],{"class":471},[458,1244,498],{"class":464},[458,1246,1247,1249,1251,1253],{"class":460,"line":656},[458,1248,598],{"class":471},[458,1250,601],{"class":464},[458,1252,604],{"class":578},[458,1254,607],{"class":464},[458,1256,1257],{"class":460,"line":661},[458,1258,513],{"class":464},[458,1260,1261],{"class":460,"line":666},[458,1262,519],{"class":464},[458,1264,1265],{"class":460,"line":1057},[458,1266,525],{"class":464},[375,1268,1269,449],{},[382,1270,1271],{},"common\u002Fdata\u002Fmyworld\u002Ftransitions.json",[426,1273,1275],{"className":452,"code":1274,"language":454,"meta":432,"style":432},"{\n  \"entries\": {\n    \"terrain\u002Fdirt\": {\n      \"priority\": 10,\n      \"transitions\": []\n    },\n    \"terrain\u002Fgrass\": {\n      \"priority\": 20,\n      \"transitions\": [\n        {\n          \"neighbours\": [\n            \"010\",\n            \"0X0\",\n            \"000\"\n          ],\n          \"tile\": \"myworld:terrain\u002Fgrass_edge_north\"\n        }\n      ]\n    }\n  }\n}\n",[382,1276,1277,1281,1287,1293,1303,1309,1313,1319,1329,1335,1339,1345,1351,1357,1361,1365,1373,1377,1381,1385,1389],{"__ignoreMap":432},[458,1278,1279],{"class":460,"line":461},[458,1280,465],{"class":464},[458,1282,1283,1285],{"class":460,"line":468},[458,1284,472],{"class":471},[458,1286,475],{"class":464},[458,1288,1289,1291],{"class":460,"line":478},[458,1290,1093],{"class":471},[458,1292,475],{"class":464},[458,1294,1295,1297,1299,1301],{"class":460,"line":486},[458,1296,489],{"class":471},[458,1298,492],{"class":464},[458,1300,1105],{"class":471},[458,1302,498],{"class":464},[458,1304,1305,1307],{"class":460,"line":501},[458,1306,504],{"class":471},[458,1308,507],{"class":464},[458,1310,1311],{"class":460,"line":510},[458,1312,612],{"class":464},[458,1314,1315,1317],{"class":460,"line":516},[458,1316,481],{"class":471},[458,1318,475],{"class":464},[458,1320,1321,1323,1325,1327],{"class":460,"line":522},[458,1322,489],{"class":471},[458,1324,492],{"class":464},[458,1326,495],{"class":471},[458,1328,498],{"class":464},[458,1330,1331,1333],{"class":460,"line":622},[458,1332,504],{"class":471},[458,1334,710],{"class":464},[458,1336,1337],{"class":460,"line":634},[458,1338,1028],{"class":464},[458,1340,1341,1343],{"class":460,"line":645},[458,1342,1033],{"class":471},[458,1344,710],{"class":464},[458,1346,1347,1349],{"class":460,"line":656},[458,1348,1040],{"class":578},[458,1350,498],{"class":464},[458,1352,1353,1355],{"class":460,"line":661},[458,1354,1047],{"class":578},[458,1356,498],{"class":464},[458,1358,1359],{"class":460,"line":666},[458,1360,1054],{"class":578},[458,1362,1363],{"class":460,"line":1057},[458,1364,1060],{"class":464},[458,1366,1367,1369,1371],{"class":460,"line":1063},[458,1368,1066],{"class":471},[458,1370,492],{"class":464},[458,1372,756],{"class":578},[458,1374,1375],{"class":460,"line":1073},[458,1376,1076],{"class":464},[458,1378,1379],{"class":460,"line":1079},[458,1380,1082],{"class":464},[458,1382,1383],{"class":460,"line":1085},[458,1384,513],{"class":464},[458,1386,1387],{"class":460,"line":1090},[458,1388,519],{"class":464},[458,1390,1391],{"class":460,"line":1098},[458,1392,525],{"class":464},[375,1394,1395,449],{},[382,1396,1397],{},"client\u002Fdata\u002Fmyworld\u002Fvisuals.json",[426,1399,1401],{"className":452,"code":1400,"language":454,"meta":432,"style":432},"{\n  \"entries\": {\n    \"terrain\u002Fdirt\": {\n      \"type\": \"simple\",\n      \"texture\": \"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fdirt.png\"\n    },\n    \"terrain\u002Fgrass\": {\n      \"type\": \"simple\",\n      \"texture\": \"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fgrass.png\"\n    },\n    \"terrain\u002Fgrass_edge_north\": {\n      \"type\": \"simple\",\n      \"texture\": \"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fgrass_edge_north.png\"\n    }\n  }\n}\n",[382,1402,1403,1407,1413,1419,1431,1441,1445,1451,1461,1470,1474,1480,1490,1499,1503,1507],{"__ignoreMap":432},[458,1404,1405],{"class":460,"line":461},[458,1406,465],{"class":464},[458,1408,1409,1411],{"class":460,"line":468},[458,1410,472],{"class":471},[458,1412,475],{"class":464},[458,1414,1415,1417],{"class":460,"line":478},[458,1416,1093],{"class":471},[458,1418,475],{"class":464},[458,1420,1421,1424,1426,1429],{"class":460,"line":486},[458,1422,1423],{"class":471},"      \"type\"",[458,1425,492],{"class":464},[458,1427,1428],{"class":578},"\"simple\"",[458,1430,498],{"class":464},[458,1432,1433,1436,1438],{"class":460,"line":501},[458,1434,1435],{"class":471},"      \"texture\"",[458,1437,492],{"class":464},[458,1439,1440],{"class":578},"\"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fdirt.png\"\n",[458,1442,1443],{"class":460,"line":510},[458,1444,612],{"class":464},[458,1446,1447,1449],{"class":460,"line":516},[458,1448,481],{"class":471},[458,1450,475],{"class":464},[458,1452,1453,1455,1457,1459],{"class":460,"line":522},[458,1454,1423],{"class":471},[458,1456,492],{"class":464},[458,1458,1428],{"class":578},[458,1460,498],{"class":464},[458,1462,1463,1465,1467],{"class":460,"line":622},[458,1464,1435],{"class":471},[458,1466,492],{"class":464},[458,1468,1469],{"class":578},"\"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fgrass.png\"\n",[458,1471,1472],{"class":460,"line":634},[458,1473,612],{"class":464},[458,1475,1476,1478],{"class":460,"line":645},[458,1477,566],{"class":471},[458,1479,475],{"class":464},[458,1481,1482,1484,1486,1488],{"class":460,"line":656},[458,1483,1423],{"class":471},[458,1485,492],{"class":464},[458,1487,1428],{"class":578},[458,1489,498],{"class":464},[458,1491,1492,1494,1496],{"class":460,"line":661},[458,1493,1435],{"class":471},[458,1495,492],{"class":464},[458,1497,1498],{"class":578},"\"client\u002Ftextures\u002Fmyworld\u002Fterrain\u002Fgrass_edge_north.png\"\n",[458,1500,1501],{"class":460,"line":666},[458,1502,513],{"class":464},[458,1504,1505],{"class":460,"line":1057},[458,1506,519],{"class":464},[458,1508,1509],{"class":460,"line":1063},[458,1510,525],{"class":464},[387,1512,1514],{"id":1513},"practical-conventions","Practical conventions",[774,1516,1517,1530,1533,1539,1542,1545],{},[777,1518,1519,1520,1522,1523,1526,1527,535],{},"Keep transition overlay tiles in the ",[382,1521,545],{}," registry with clear names such as ",[382,1524,1525],{},"terrain\u002Fgrass_edge_north"," or ",[382,1528,1529],{},"transitions\u002Fgrass_to_dirt_north",[777,1531,1532],{},"Define visuals for transition tiles in client data, just like base terrain visuals.",[777,1534,1535,1536,1538],{},"Give transition overlays ",[382,1537,674],{}," unless they are deliberately meant to affect collision.",[777,1540,1541],{},"Use higher priorities for terrain that should visually cover lower-priority terrain.",[777,1543,1544],{},"Add empty transition definitions for tiles that should block lower-priority overlays but do not need overlays of their own.",[777,1546,1547],{},"Generate large transition sets when your art has many edge and corner combinations, but keep the generated output in the normal registry layout.",[1549,1550,1551],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":432,"searchDepth":468,"depth":468,"links":1553},[1554,1555,1556,1557,1558,1559,1560,1561],{"id":389,"depth":468,"text":390},{"id":409,"depth":468,"text":410},{"id":538,"depth":468,"text":539},{"id":678,"depth":468,"text":679},{"id":802,"depth":468,"text":803},{"id":781,"depth":468,"text":947},{"id":1150,"depth":468,"text":1151},{"id":1513,"depth":468,"text":1514},"Define automatic tile transition overlays in Selene bundles with transition priorities and neighbour masks.","md",{},true,{"title":35,"description":1562},"TQlujHq6blXpuU3GFDXTNhJJXMa85rXQ-hCMkam8fBk",[1569,1571],{"title":31,"path":32,"stem":33,"description":1570,"children":-1},"Define sound registry entries in Selene bundles, connect them to client audio files, and play them from Lua.",{"title":39,"path":40,"stem":41,"description":1572,"children":-1},"Define tile registry entries in Selene bundles, connect them to visuals, and use tile flags for map collision.",1792747966452]