Difference between revisions of "Maps"

From Pokémon 3D Wiki
Jump to navigation Jump to search
m (fix a typo)
 
(31 intermediate revisions by 3 users not shown)
Line 1: Line 1:
The maps folder holds most of the maps used to run the games. It is located in the [[File Paths and Editing|Pokemon Folder]] and contains many folders and files.
The Maps folder is located inside the Data folder in your GameMode's ContentPath and contains all the map files that are used to run your GameMode.


Each major map for the game is contained in the maps folder and named for their location.  
The files contain many lines of code. Each line of code is a single object or group of map objects, also known as entities, which each can have a range of tags describing their characteristics.


The files contain many lines of code describing the many different parts of the map. Each line contains a myriad of details used to create each portion of the map.
== A general note to all GameMode Mappers (MUST READ) ==
This page has been updated for Pokémon 3D v0.60.
If you feel like something is missing from this page, feel free to notify us in our [https://discord.gg/vzkZm9FpwX Discord Server]


== Map Objects ==
If you are a GameMode Mapper or trying to be one, we Recommend you to download Notepad++ and our [https://pokemon3d.net/resource/e120b1c3-57c2-401b-8fe7-6f0755627d64 Syntax Highlighting] as it makes it easier to read the map files and find typos.
Objects are defined by a line of code in each map file.


<code>{"Object"{CAT[TAGS]}}</code>
If you find something on this page that doesn't work the way you'd expect it to be, it might be a bug. Try asking us on our [https://discord.gg/vzkZm9FpwX Discord Server].<br />Make sure to include the game version you're running and state clearly what you are trying to do.


There are 8 Objects split into 5 categories(CAT):
You are free to create your folder structure in any way you'd like, though it's recommended to follow some kind of logical pattern.
For example:
''RegionName\''
    Cities\
        ''CityName\''
            PlayerHouse1F.dat
            PlayerHouse2F.dat
            Lab.dat
            Main.dat
    Routes\
        ''Route5\''
            DayCare.dat
        Route1.dat
        Route2.dat
        Route3.dat
        Route4.dat
        Route5.dat


* LEV
=== Important info / definition of certain things before we get started ===
** Level - Defines the map
** Actions - Defines map conditions(ie. weather, lighting, etc)
* ENT
** Floor - Can be walked upon, produces a flat surface.
** Entity - Produces one block.
** Entity Field - Produces multiple blocks.
* NPC
** NPC - Produces an interactive NPC.
* SHA
** Shader - Darkens an area of tiles.
* MAP
** OffsetMap - Loads an offset map.


Each Object has many different tags that can be used with them.
Distance in Pokémon 3D (and in the documentation) is measured in "units". A unit is equal to the distance that the Player moves when they take a single step.
A single three-dimensional unit can be compared to a cube that is 1x1x1 units in size.


== Tags ==
By default, the Argument Types are:
This is a full list of the tags for each Object.
* Str [String] (Strings are defined as letters or symbols)
* Int [Integer] (Integers are defined as [http://en.wikipedia.org/wiki/Integer Integer numbers])
* Sng [Single/Float] (Singles/Floats are defined as [http://en.wikipedia.org/wiki/Real_number Real numbers], which may include decimals.)
* Bool [Boolean] (Booleans are defined as 0 or 1, e.g. Bool[0] = False & Bool[1] = True)
* Rec [Rectangle] (Rectangles are defined as an array of [http://en.wikipedia.org/wiki/Integer Integer numbers], e.g. Rec[0,0,16,16])
* RecArr [Rectangle Array] (Rectangle Arrays are defined as an array of Rectangles, e.g. RecArr[[0,0,16,16][16,0,16,16]])
* IntArr [Integer Array] (Integer Arrays are defined as an array of [http://en.wikipedia.org/wiki/Integer Integer numbers], e.g. IntArr[1,2,1])
* SngArr [Single Array] (Single Arrays are defined as an array of [http://en.wikipedia.org/wiki/Real_number Real numbers], e.g. SngArr[0.5,0.5,0.75])
* IntArr2D [Animation Array] (Animation Arrays are slightly more complex. They are defined as one or multiple array of [http://en.wikipedia.org/wiki/Integer Integer numbers] and are only relevant to AnimatedBlock entities. Their format is: <code><nowiki>IntArr2D[[FrameX,FrameY,FrameWidth,FrameHeight,AmountOfRows,AmountOfColumns,AnimationSpeed,StartRow,StartColumn]])</nowiki></code>.


The full tag with either the default value or a general value will be in the tag column. If there is not a default value then the tag must be given for that object.
If part of an argument or value looks like this: '''bold text''', it's optional.


== Creating a Map ==
To create a map file, create a new regular text file and change its extension to '''.dat''' instead of '''.txt'''.
Then, you need to define its tags. You can do so by adding these templates to the start of the text file:
<pre>{"Level"{LEV[{"Name"{Str[]}}{"MusicLoop"{Str[]}}{"WildPokemon"{Bool[]}}{"OverworldPokemon"{Bool[]}}{"CurrentRegion"{Str[]}}{"RegionalForm"{Str[]}}{"HiddenAbility"{Int[]}}]}}</pre>
<pre>{"Actions"{LEV[{"CanTeleport"{Bool[]}}{"CanDig"{Bool[]}}{"CanFly"{Bool[]}}{"RideType"{Int[]}}{"EnvironmentType"{Int[]}}{"Weather"{Int[]}}{"Season"{Int[]}}{"Lighting"{Int[]}}{"DayTime"{Int[]}}{"IsDark"{Bool[]}}{"IsAurora"{Bool[]}}{"Terrain"{Str[]}}{"IsSafariZone"{Bool[]}}{"BugCatchingContest"{Str[]}}{"MapScript"{Str[]}}{"RadioChannels"{Str[]}}{"BattleMap"{Str[]}}{"SurfingBattleMap"{Str[]}}{"SaveOnly"{Bool[]}}]}}</pre>
These are all the available tags to define a map with. Not all tags are required, so you can remove the tags that return a default value if they don't exist.
=== {"Level"{LEV[Tag1,Tag2,...]}} ===
{| class="wikitable"
{| class="wikitable"
|-
|-
! Tag
! Tag
! Description
! Description
! Default Argument Value
|-
|-
|colspan="2" style="text-align: center"|
| <code>{"Name"{Str[]}}</code>
===Level===
| Determines the map name, displays in the upper left corner of the screen when first arriving at the place.<br />Used to determine if a Pokémon evolves there, e.g. {"Name"{Str[Pallet Town]}}.
| '''No Default Value'''
|-
|-
| <code>{"Name"{str[Name]}}</code>
| <code>{"MusicLoop"{Str[]}}</code>
| The map name, displays in the upper left corner of the screen when first arriving at the place. Used to determine if a Pokemon evolves there.
| Determines the default background music for the map.<br />Be sure to write the name of the music file<br />(relative to the Songs folder, including subfolders if any) without the extension.<br />
Example: <code>{"MusicLoop"{Str[Cities\Pallet]}}</code>.
| '''No Default Value'''
|-
|-
| <code>{"MusicLoop"{str[MusicFile]}}</code>
| <code>{"WildPokemon"{Bool[]}}</code>
| The song to loop while on the map.
| Determines if wild Pokémon should be able to appear anywhere on the map (not just in tall grass or water).
| <code>{"WildPokemon"{Bool[0]}}</code>.
|-
|-
| <code>{"WildPokemon"{bool[0]}}</code>
| <code>{"OverworldPokemon"{Bool[]}}</code>
| If true, Wild Pokemon can be found every step you take and not just in grass.
| Determines whether the first Pokémon in the Player's team should appear behind the Player on the map or not.
| <code>{"OverworldPokemon"{Bool[1]}}</code>
|-
|-
| <code>{"OverwolrdPokemon"{bool[1]}}</code>
| <code>{"CurrentRegion"{Str[]}}</code>
| Allows the following pokemon to show.
| Determines what region or regions the map should be considered to be a part of.
Example: <code>{"CurrentRegion"{Str[Johto,Kanto]}}</code>.
| <code>{"CurrentRegion"{Str[Johto]}}</code>
|-
|-
| <code>{"CurrentRegion"{str[Johto]}}</code>
| <code>{"RegionalForm"{Str[]}}</code>
| Contains a list of all of the Maps seperated by commas that can be seen when flying from or viewing the town map in the PokeGear while on this map.
| Determines what regional forms are available on this map.
Example: <code>{"RegionalForm"{Str[Alola]}}</code>.
| '''No Default Value'''
|-
| <code>{"HiddenAbility"{Int[]}}</code>
| Determines the chance of a Hidden Ability being on a wild Pokémon for this map. The value can range from 0 - 100.
| <code>{"HiddenAbility"{Int[0]}}</code>
|}
 
=== {"Actions"{LEV[Tag1,Tag2,...]}} ===
{| class="wikitable"
|-
|-
|colspan="2" style="text-align: center"|
! Tag
===Actions===
! Description
! Default Argument Value
|-
|-
| <code>{"CanTeleport"{bool[0]}}</code>
| <code>{"CanTeleport"{Bool[]}}</code>
| Allows Teleporting.
| Determines whether a Pokémon should be able to use the field move Teleport on this map.
| <code>{"CanTeleport"{Bool[0]}}</code>
|-
|-
| <code>{"CanDig"{bool[0]}}</code>
| <code>{"CanDig"{Bool[]}}</code>
| Allows Digging.
| Determines if a Pokémon should be able to use the field move Dig on this map.
| <code>{"CanDig"{Bool[0]}}</code>
|-
|-
| <code>{"CanFly"{bool[0]}}</code>
| <code>{"CanFly"{Bool[]}}</code>
| Allows Flying
| Determines if a Pokémon should be able to use the field move Fly on this map.
Tip: If you have two maps, both with the "CanFly" Tag set to 1,
you can warp from one to the other using a WarpBlock
without having the "enter" sound effect play.
| <code>{"CanFly"{Bool[0]}}</code>
|-
|-
| <code>{"RideType"{int[0]}}</code>
| <code>{"RideType"{Int[]}}</code>
| Allows Riding
| Determines whether a Pokémon can use the field move Ride on this map.
* 0 - If both CanDig and CanFly = false then Cannot ride.
* 0 - If either "CanFly" or "CanDig" = True, then it's able to use Ride.
* 1 - Can Ride.
* 1 - Always able to use Ride.
* 2 - Cannot Ride.
* 2 - Never able to use Ride.
| <code>{"RideType"{Int[0]}}</code>
|-
|-
| <code>{"EnviromentType"{int[0]}}</code>
| <code>{"EnvironmentType"{Int[]}}</code>
| Determines the Environment(the background).
| Determines the environment (sky/background) of the map.
* 0 - Day/Night cycle
* 0 - Outside
* 1 - Day
* 1 - Inside
* 2 - Cave
* 2 - Cave
* 3 - Night
* 3 - Darkness
* 4 - UnderWater
* 4 - Underwater
Anything not listed defaults to 0.
* 5 - Forest
| <code>{"EnvironmentType"{Int[0]}}</code>
|-
|-
| <code>{"Weather"{int[0]}}</code>
| <code>{"Weather"{Int[]}}</code>
| Determines the weather.
| Determines the Weather of the map.
* 0 - Random
* 0 - Random based on the season
* 1 - Normal
* 1 - Clear
* 2 - Rain
* 2 - Rain
* 3 - Snow
* 3 - Snow
* 4 - Bubbles
* 4 - Underwater
* 5 -  
* 5 - Sunny
* 6 -  
* 6 - Fog
* 7 - Sandstorm
* 7 - Thunderstorm
* 8 - Sandstorm
* 9 - Ash
* 10 - Blizzard
* 11 - Mist
| <code>{"Weather"{Int[0]}}</code>
|-
|-
| <code>{"Lightning"{int[1]}}</code>
| <code>{"Season"{Int[]}}</code>
| A variety(0-3) of different lighting effects.
| Changes the current in-game season until another map has its Season tag set to -1 or when a script changes it.
* -1 = The season from the current month
* 0 = Always Winter
* 1 = Always Spring
* 2 = Always Summer
* 3 = Always Fall
| '''No Default Value'''
|-
|-
| <code>{"IsDark"{bool[0]}}</code>
| <code>{"Lighting"{Int[]}}</code>
| Makes the cave dark to use flash for.
| Determines the lighting of the map.
* 0 = Use the lighting corresponding to the current time of day.
* 1 = Disable lighting
* 2 = Always Night
* 3 = Always Morning
* 4 = Always Day
* 5 = Always Evening
| <code>{"Lighting"{Int[1]}}</code>
|-
|-
| <code>{"MapScript"{str[]}}</code>
| <code>{"DayTime"{Int[]}}</code>
| A script to run upon entering the map(after landing if flying).
| Determines the time of day to use for the Outside sky/background and default lighting.
* 0 = Use the DayTime corresponding to the current time of day.
* 1 = Always Night
* 2 = Always Morning
* 3 = Always Day
* 4 = Always Evening
| <code>{"DayTime"{Int[0]}}</code>
|-
|-
|colspan="2" style="text-align: center"|
| <code>{"IsDark"{Bool[]}}</code>
===Floor===
| Determines if a darkness screen overlay should appear while on this map that requires the field move Flash to get rid of.
| <code>{"IsDark"{Bool[0]}}.
|-
|-
| <code>{"Size"{intArr[x,z]}}</code>
| <code>{"IsAurora"{Bool[]}}</code>
| A field of spaces for the floors to cover.
| Determines if the Outside sky/background texture should be the Aurora Borealis texture on this map.
| <code>{"IsAurora"{Bool[0]}}.
|-
|-
| <code>{"Position"{intArr[x,y,z]}}</code>
| <code>{"Terrain"{Str[]}}</code>
| The position of the first floor tile.
| Determines the terrain type of the map.
* Plain
* Sand
* Cave
* Rock
* TallGrass
* LongGrass
* PondWater
* SeaWater
* Underwater
* DistortionWorld
* Puddles
* Snow
* Magma
* PvPBattle
| <code>{"Terrain"{Str[Plain]}}.
|-
|-
| <code>{"TexturePath"{str[texture]}}</code>
| <code>{"IsSafariZone"{Bool[]}}</code>
| The Texture file used for these tiles.
| Determines if the map is a Safari Zone.
| <code>{"IsSafariZone"{Bool[0]}}.
|-
|-
| <code>{"Texture"{rec[xstart,ystart,xlen,ylen]}}</code>
| <code>{"SaveOnly"{Bool[]}}</code>
| The specific texture (starting at pixel xstart,ystart; xlen right and ylen down).
| When set to 1, only allows the Player to save the game on certain maps (and prevents access to the other options in the menu)
| <code>{"SaveOnly"{Bool[0]}}.
|-
|-
| <code>{"Visible"{bool[1]}}</code>
| <code>{"BugCatchingContest"{Str[]}}</code>
| If the floor is visible.
| Determines the data used in a bug catching contest.
You can use this template: <code>{"BugCatchingContest"{Str[EndContestMenuScript,CheckRemainingBallsMenuScript,RemainingBallsItemName]}}<code><br />
Example: <code>{"BugCatchingContest"{Str[NationalPark\End_Contest_Menu,NationalPark\Sport_Balls,Sport Balls]}}</code>
| '''No Default Value'''
|-
|-
| <code>{"Shader"{sngArr[1,1,1]}}</code>
| <code>{"MapScript"{Str[]}}</code>
| Shaders to apply.
| Determines the script to run when the Player enters this map.
| '''No Default Value'''
|-
|-
| <code>{"Remove"{bool[0]}}</code>
| <code>{"RadioChannels"{Str[]}}</code>
| Removes the floor.
| Determines which Radio Channel frequencies can be used on this map.
Example: <code>{"RadioChannels"{Str[13.5,20.5]}}</code>
| '''No Default Value''' (All channels are available)
|-
|-
| <code>{"hasSnow"{bool[1]}}</code>
| <code>{"BattleMap"{Str[]}}</code>
| Allows snow to collect on it when it is snowing.
| Determines the Map that is visible in the background during regular battles and optionally its offset position. The following formats are valid:
|-
* <code>{"BattleMap"{Str[''MapName,xOffset,yOffset,zOffset'']}}</code>
| <code>{"hasSand"{bool[1]}}</code>
* <code>{"BattleMap"{Str[''Mapname'']}}</code>
| Allows sand to collect on it when it is a sandstorm.
* <code>{"BattleMap"{Str[''xOffset,yOffset,zOffset'']}}</code>
|-
* <code>{"BattleMap"{Str[]}}</code>
| <code>{"isIce"{bool[0]}}</code>
| <code>{"BattleMap"{Str[]}}</code>
| Causes the player to slide until it reaches another floor or an entity that it cannot pass through.
|}
|-
 
| <code>{"Rotation"{int[0]}}</code>
== Creating an Entity ==
| Rotation of the floor(rotates the each tile individually
There are 3 Entity types that you can define: Floor, Entity and EntityField.
|-
 
| <code>{"SeasonTexture"{str[]}}</code>
Floors are objects that show the game where Players and NPCs can walk. They always use ModelID 0, this cannot be changed. More information about ModelIDs can be found [[#Types of Models|here]].
| What Season Texture to apply.
Also important to note is that while the other two entity types can use multiple texture rectangles within the same object using the "Textures" tag with a RectArr argument, Floors can only have one texture rectangle and use the "Texture" tag with a Rec argument instead.
|-
The Position tag of a Floor also uses an Integer Array (IntArr) argument instead of a Single Array (SngArr) argument. More information about argument types can be found [[#Important info / definition of certain things before we get started|here]].
|colspan="2" style="text-align: center"|
 
To create a Floor, you can use this template:
<pre>{"Floor"{ENT[{"Size"{IntArr[]}}{"Position"{IntArr[]}}{"TexturePath"{Str[]}}{"Texture"{Rec[]}}{"Visible"{Bool[]}}{"Visible"{Bool[]}}{"Remove"{Bool[]}}{"hasSnow"{Bool[]}}{"hasSand"{Bool[]}}{"isIce"{Bool[]}}{"Rotation"{Int[]}}{"SeasonTexture"{Str[]}}]}}</pre>
 
Then there are the Entity and EntityField object types.
Entity objects can be virtually anything. Walls, ceilings, trees, trains, televisions, mountains, you name it! A lot of the things you see in Pokémon 3D are made out of Entity objects.
Entity and EntityField objects are defined in almost the same way. The only difference is that the EntityField objects require the {"Size"{IntArr[]}} tag, with which you can place multiple objects at the same time using only a single object definition.
You can add the {"Size"{IntArr[]}} tag to a regular Entity object, but it won't do anything.
 
To create an Entity object, you can use this template:
<pre>{"Entity"{ENT[{"EntityID"{Str[]}}{"ID"{Int[]}}{"Position"{SngArr[]}}{"TexturePath"{Str[]}}{"Textures"{RecArr[[]]}}{"TextureIndex"{IntArr[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"ModelID"{Int[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"RotationXYZ"{SngArr[]}}{"SeasonTexture"{Str[]}}{"SeasonToggle"{Str[]}}{"ModelPath"{Str[]}}{"AnimationData"{IntArr2D[[]]}}]}}</pre>
 
To create an EntityField object, you can use this template:
<pre>{"EntityField"{ENT[{"EntityID"{Str[]}}{"ID"{Int[]}}{"Size"{IntArr[]}}{"Position"{SngArr[]}}{"TexturePath"{Str[]}}{"Textures"{RecArr[[]]}}{"TextureIndex"{IntArr[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"ModelID"{Int[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"RotationXYZ"{SngArr[]}}{"SeasonTexture"{Str[]}}{"SeasonToggle"{Str[]}}{"ModelPath"{Str[]}}{"AnimationData"{IntArr2D[[]]}}]}}</pre>
 
These are all the available tags to define an Entity with. Not all tags are required, so you can remove the tags that return a default value if they don't exist.
Argument values written in bold (e.g. ''Argument'') are optional.


===Entity===
{| class="wikitable"
|-
|-
| <code>{"EntityID"{str[see below]}}</code>
! Tag
| Defines what happens when the player interacts with it, how it reacts to surroundings and how it displays. See the section below for more details.
! Description
! Default Argument Value
|-
|-
| <code>{"ID"{int[-1]}}</code>
|colspan="3"|
| An ID to be used with scripts.
=== Floor only ===
|-
|-
| <code>{"Position"{sngArr[x,y,z]}}</code>
| <code>{"Texture"{Rec[X,Y,Width,Height]}}</code>
| The 3 - Dimensional position of the entity.
| Determines the specific part of the texture file that the Floor will use.<br />
Example: <code>{"Textures"{Rec[0,32,16,16]}}</code><br />
The first Rectangle in the array (corresponding to TextureIndex 0), will define a texture at coordinate X: 0 pixels Y: 0 pixels that is 32 pixels wide and 32 pixels tall.
| '''No Default Value'''
|-
|-
| <code><nowiki>{"Textures"{recArr[[xstart,ystart,xlen,ylen]]}}</nowiki></code>
| <code>{"Remove"{Bool[]}}</code>
| A list of all of the pixels used for this entity. Multiple can be listed.
| Determines if the floor(s) that are covered by this floor should be removed (including this Floor).
| <code>{"Remove"{Bool[0]}}</code>
|-
|-
| <code>{"TexturePath"{str[texture]}}</code>
| <code>{"hasSnow"{Bool[]}}</code>
| The texture file used with this entity.
| Determines if this floor should be covered in snow when it's snowing.
| <code>{"hasSnow"{Bool[1]}}</code>
|-
|-
| <code>{"TextureIndex"{intArr[# of faces * 2]}}</code>
| <code>{"hasSand"{Bool[]}}</code>
| Each face(rectangles count as 2 triangles) is gets a number based on the texture in the "Textures" tag with 0 being the first texture listed. -1 makes the face not render.
| Determines if this floor should be covered in sand during a sandstorm.
| <code>{"hasSand"{Bool[1]}}</code>
|-
|-
| <code>{"Scale"{sngArr[1,1,1]}}</code>
| <code>{"isIce"{Bool[]}}</code>
| Changes the size of the entity.
| Determines if this Floor causes the Player to slide until it reaches another non-ice floor or an entity that it cannot pass through.
| <code>{"isIce"{Bool[0]}}</code>
|-
|-
| <code>{"Collision"{bool[]}}</code>
|colspan="3"|
| Prevents the player from walking into the entity
=== Entity & EntityField only ===
|-
|-
| <code>{"ModelID"{int[see below]}}</code>
| <code>{"EntityID"{Str[]}}</code>
| The Model used for this entity. See the list of Models below for specifics.
| Determines what type this entity is, what happens when the Player interacts with it, how it reacts to surroundings and how it's displayed. You can find the possible types and what they do [[#Types of Entities|here]].
| '''No Default Value'''
|-
|-
| <code>{"Action"{int[see below]}}</code>
| <code>{"Textures"{RecArr[[X,Y,Width,Height]'''[X,Y,Width,Height]...''']]}}</code>
| Determines how the "AdditionalValue" tag is interpreted. See the list of Entities below for more specifics.
| Determines the specific part(s) of the texture file that the Entity or EntityField will use.<br />
Example: <code>{"Textures"{RecArr[[0,0,32,32][0,32,16,16]]}}</code><br />
The first Rectangle in the array (corresponding to TextureIndex 0), will define a texture at coordinate X: 0 pixels Y: 0 pixels that is 32 pixels wide and 32 pixels tall.
| '''No Default Value'''
|-
|-
| <code>{"AdditionalValue"{str[see below]}}</code>
| <code>{"TextureIndex"{IntArr[Face0,'''Face1,Face2,Face3,...''']}}</code>
| What is done when the player interacts with the entity. See the list of Entities below for more specifics
|Determines which texture rectangle defined by the <code>{"Textures"{RecArr[[]]}}</code> tag is used for which triangle shaped face of the model, starting from 0. Rectangles are made out of 2 triangle shaped faces.
| '''No Default Value'''
|-
|-
| <code>{"Visible"{bool[1]}}</code>
| <code>{"Scale"{SngArr[X,Y,Z]}}</code>
| Decides if the Entity is seen or not.
| Changes the width, height and depth of the entity.
| <code>{"Scale"{SngArr[1,1,1]}}</code>
|-
|-
| <code>{"Rotation"{int[r]}}</code>
| <code>{"Steps"{SngArr[X,'''Y,'''Z]}}</code>
| The direction(0-3) that the entity is facing.
| Only works for EntityFields. Places each entity of an EntityField at a specified interval. If the Position tag is set to "0,0,0", the Size tag is set to "7,1" and the Steps tag is set to "2,1", they will be placed at 0, 2, 4 and 6 on the X axis.
| <code>{"Scale"{SngArr[1,1,1]}}</code><br />
* Y - Defaults to 1 if left out
|-
|-
| <code>{"Shader"{sngArr[]}}</code>
| <code>{"Collision"{Bool[]}}</code>
| The sader for the object.
| Determines if the Player and NPCs can walk through this entity (0) or not (1).
| '''No Default Value'''
|-
|-
| <code>{"RotationXYZ"{sngArr[]}}</code>
| <code>{"ModelID"{Int[]}}</code>
| A 3 - Dimensional Rotation  using radians(3.1415 = a full rotation).
| Determines the basic model to use for this entity, which defines the amount of faces that the "TextureIndex" tag can use. More information about ModelIDs can be found [[#Types of Models|here]].<br />
Important to note is that if the entity has a 3D Model assigned to it through the "ModelPath" tag, the basic model from this tag will be invisible.
| '''No Default Value'''
|-
|-
| <code>{"UseSeasonColors"{bool[]}}</code>
| <code>{"Action"{Int[]}}</code>
| Determines if the object actually uses the season texture.
| Determines how the "AdditionalValue" tag is interpreted depending on what the "EntityID" is set to.<br />
You can find more information about the "Action" and "AdditionalValue" tags [[#Types of Entities|here]].
| '''No Default Value'''
|-
|-
| <code>{"SeasonTexture"{str[]}}</code>
| <code>{"AdditionalValue"{Str[]}}</code>
| The season texture for the entity to use.
| Determines what happens when the Player interacts or collides with or walks against the entity. What that is, is affected by the "Action" tag.<br />
You can find more information about the "Action" and "AdditionalValue" tags [[#Types of Entities|here]].
| <code>{"AdditionalValue"{Str[]}}</code>
|-
|-
| <code>{"SeasonToggle"{str[]}}</code>
| <code>{"RotationXYZ"{SngArr[]}}</code>
| Forces the entity to use the given season for the season texture.
| Determines a three-dimensional rotation of the entity in radians (3.1415 = a 180 degrees rotation).<br />
Adding this tag to an entity overrides the "Rotation" tag.
| <code>{"RotationXYZ"{SngArr[]}}</code>
|-
|-
|colspan="2" style="text-align: center"|
| <code>{"SeasonToggle"{Str[]}}</code>
 
| Determines during which season(s) this entity will be added to the map.<br />
===EntityField===
Multiple seasons can be included by separating the numbers with commas(",").<br />
<nowiki>*Any tags used for Entity apply here*</nowiki>
* 0 = Winter
* 1 = Spring
* 2 = Summer
* 3 = Fall
| <code>{"SeasonToggle"{Str[]}}</code>
|-
|-
| <code>{"Size"{intArr[x,(y,)z]}}</code>
| <code>{"ModelPath"{Str[]}}</code>
| Either 2 or 3 - Dimensional field for the entity to be repeated in.
| Determines the 3D Model (in Monogame's .xnb format) that this entity would use (relative to the Content folder, including subfolders if any) without the extension.<br />
You can find a tool that converts models here: [https://pokemon3d.net/resource/9c4ee67a-a34d-4750-a8b2-908cd3115a71 FBX to XNB Converter].<br />
When the "ModelID" tag is set to 3, the 3D Model will rotate towards the camera, just like a WallBill would.
| {"ModelPath"{Str[]}}
|-
|-
| <code>{"Fill"{bool[0]}}</code>
| <code>{"AnimationData"{IntArr2D[[FrameX,FrameY,FrameWidth,FrameHeight,<br />AmountOfRows,AmountOfColumns,AnimationSpeed,StartRow,StartColumn][...]]}}</code>
| Makes the entities only in the outside(2D) of the field.
| Determines the animation sequence properties of the "AnimatedBlock" entity type. It can contain multiple animation definitions, which will be played in sequence.<br />
Important to note is that the animation overrides the first index (0) of the "TextureIndex" tag.<br />
You also need to set the "AdditionalValue" tag to the path of the texture to use for the animation(s) (relative to the Textures folder, including subfolders if any) without the extension.<br />
Example: <code><nowiki>{"AdditionalValue"{Str[Routes]}}{"AnimationData"{IntArr2D[[80,176,16,16,1,6,18,0,0]]}}</nowiki></code>
| '''No Default Value'''
|-
|-
| <code>{"Steps"{sngArr[1,(1,)1]}}</code>
|colspan="3"|
| The pattern that the entity is made in.
=== Floor, Entity & EntityField ===
|-
|-
|colspan="2" style="text-align: center"|
| <code>{"ID"{Int[]}}</code>
 
| Determines what the scripting ID is of this entity. With scripts, you can change the properties of any entity that uses the same scripting ID.
===NPC:===
| '''No Default Value'''
|-
|-
| <code>{"Position"{sngArr[x,y,z]}}</code>
| <code>{"Size"{IntArr[X,'''Y,'''Z]}}</code>
|  
| Determines how many units the EntityField/Floor should cover. If you don't need objects placed above each other, you can use just 2 [http://en.wikipedia.org/wiki/Integer Integer numbers] instead of 3.
| * Y - Defaults to 1 if left out
|-
|-
| <code>{"Scale"{sngArr[x,y,z]}}</code>
| <code>{"Position"{SngArr[X,Y,Z]}}</code>
|  
| Determines the starting position of the Entities/Floors.
| '''No Default Value'''
|-
|-
| <code>{"TextureID"{str[texturename]}}</code>
| <code>{"TexturePath"{Str[]}}</code>
|  
| Determines the path to the texture file that the Entities/Floors will use (relative to the Textures folder, including subfolders if any) without the extension.<br />
Example: <code>{"TexturePath"{Str[Routes]}}</code>
| '''No Default Value'''
|-
|-
| <code>{"Rotation"{int[0-3]}}</code>
| <code>{"Visible"{Bool[]}}</code>
|  
| Determines if the Entities/Floors are visible (1) or not (0).
| <code>{"Visible"{Bool[1]}}</code>
|-
|-
| <code>{"Action"{sngArr[0-2]}}</code>
| <code>{"Rotation"{Int[]}}</code>
|  
| Determines the rotation of the Entities/Floors.<br/>
Possible values:
* 0 - 0 degrees (North)
* 1 - 270 degrees (West)
* 2 - 180 degrees (South)
* 3 - 90 degrees (East)
| '''No Default Value'''
|-
|-
| <code>{"AdditionalValue"{str[script]}}</code>
| <code>{"SeasonTexture"{Str[]}}</code>
|  
| Determines the color palette texture file that will be applied to Entities/Floors (relative to the Seasons folder inside the Textures folder, including other subfolders if any) without the extension.<br />
|-
Example: <code>{"SeasonTexture"{Str[PlantColoring]}}</code><br />
| <code>{"Name"{str[name]}}</code>
Note that only the parts of the Entity/Floor texture that use the following colors will be replaced:<br />
|
#FFFFFF  #AAAAAA
|-
#555555  #000000
| <code>{"ID"{int[ID]}}</code>
| '''No Default Value'''
|
|}
|-
 
| <code>{"Movement"{str[movement type]}}</code>
== Types of Entities ==
|
A list of the possibilities for the "EntityID" tag listed above.
|-
| <code>{"MoveRectangles"{recArr[xstart,ystart,xpaces,ypaces]}}</code>
|
|-
| <code>{"Shader"{sngArr[1,1,1]}}</code>
|
|-
| <code>{"AnimateIdle"{bool[0]}}</code>
|
|-
|colspan="2" style="text-align: center"|


===Shader===
{| class="wikitable"
|-
|-
| <code>{"Position"{intArr[x,y,z]}}</code>
! EntityID
|
! Description
! Possible "AdditionalValue" Argument Values
|-
|-
| <code>{"Size"{intArr[x,y,z]}}</code>
| WallBlock
|  
| A basic entity (doesn't have to be wall). Can only be viewed from the outside of the object (or from one side if it's a flat object).
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| <code>{"Shader"{sngArr[1,1,1]}}</code>
| Cube or AllSidesObject
|  
| Similar to a WallBlock but can also be viewed from the inside of the object (or from both sides if it's a flat object).
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| <code>{"StopOnContact"{bool[0]}}</code>
| WallBill
|  
| An entity that always shows one texture and rotates to face the Player.
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| <code>{"DayTime"{intArr[timeIDs]}}</code>
| SignBlock
|
| An entity that either displays text or activates a script when the Player interacts with it.
| Depending on what the "Action" tag is set to, the "AdditionalValue" tag is interpreted differently:<br />
* 0 - Displays the value of the "AdditionalValue" tag as a regular text message
* 1 - Activates the script file at the path specified in the "AdditionalValue" tag.
* 2 - Converts the value of the "AdditionalValue" tag to a script.
|-
|-
|colspan="2" style="text-align: center"|
| WarpBlock
 
| An entity that transports the Player to a different map and/or different position.
===OffsetMap===
| MapFilePath,X_Position,Y_Position,Z_Position,AmountOfTurns,''AccessDirections''<br />
* MapFilePath (Str) = The path to the map file including ".dat" extension, relative to the Content\Maps\ folder<br/>
* X_Position, Y_Position, Z_Position (Int) = three-dimensional position to warp to (be sure to add 0.1 to the "Y_Position" argument)<br/>
* AmountOfTurns (Int) = Number of 1/4 turns to turn the Player after warping<br/>
* AccessDirections (IntArr) = Directions from which the Player can access the warpblock, seperated by "<nowiki>|</nowiki>".<br/>
Example: <code>{"AdditionalValue"{Str[Folder\Map.dat,8,0.1,-1,0,1|2|3]}}</code>
|-
|-
| <code>{"Map"{str[mapfile]}}</code>
| SlideBlock
| Map to load as the offset.
| Functions like a staircase, makes the Player go 1 unit upward and 2 units forward.
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| <code>{"Offset"{intArr[x,y,z]}}</code>
| Step
| Position for the offset map to treat as 0,0,0.
| Functions as a ledge that the Player can jump over.
|}
| '''Doesn't use the AdditionalValue tag'''
 
== Types of Entities ==
A list of the possibilities for the "EntityID" Tag above.
 
Defining the "Action" tag as 1 for Water, Waterfall, and Whirlpool prevents the HM from activating when coming into contact with them.
 
{| class="wikitable"
|-
! Entity ID
! Description
! "AdditionalValue" tag
|-
| AllSidesObject or Cube
| Renders sides from all directions.
| None
|-
|-
| ApricornPlant
| ApricornPlant
| Creates an Apricorn Plant.
| A plant that the Player can get Apricorns from.
| An integer defining which Apricorn is used.
| An [http://en.wikipedia.org/wiki/Integer Integer number] defining which Apricorn the plant has.<br />
* 0 - White
* 0 - White
* 1 - Black
* 1 - Black
Line 309: Line 460:
* 5 - Green
* 5 - Green
* 6 - Yellow
* 6 - Yellow
|-
| LoamySoil
| A spot to grow a berry in.
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| CutTree
| CutTree
| Allows the player to use cut on the Entity.
| An entity that the Player can use the field move Cut on to temporarily remove it.
| None
| '''Doesn't use the AdditionalValue tag'''
|-
| HeadbuttTree
| An entity that the Player can use the field move Headbutt on, after which the Player may encounter a wild Pokémon.
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| Grass
| Grass
| Creates long grass where the player may run into wild pokemon.
| When the Player walks through this entity, the Player may encounter a wild Pokémon, generally used for Tall Grass.
| None
| '''Doesn't use the AdditionalValue tag'''
|-
| HeadbuttTree
| Allows the player to use headbutt on the Entity.
| None
|-
|-
| ItemObject
| ItemObject
| Creates an item, if the "Action" tag = 1 then it is a "hidden" item.
| An Item that can be picked up by the Player. Depending on what the "Action" tag is set to, the entity functions differently:<br />
| int,int - the first value is the ID for the item on that map(each item should have a unique ID) The second is the item's ID.
* 0 - The visibility of the item is the same as the "Visible" tag of the entity. The Player cannot walk through the entity.
|-
* 1 - The item is invisible and the Player can walk through the entity.
| LoamySoil
* 2 - Unless the Player has a Mega Bracelet, the item will be invisible, the Player will be able to walk through the entity and the Player won't be able to pick it up. After obtaining the Mega Bracelet, sparkles will appear at the location of the entity. The animation used for the sparkles can be changed by using the "AnimationData" tag listed above.
| Creates a spot to grow a berry in.
| int,int - The first [http://en.wikipedia.org/wiki/Integer Integer number] is the unique identifier for the item on that map (each ItemObject entity should have a unique identifier).<br />
| None
The second [http://en.wikipedia.org/wiki/Integer Integer number] is the item's ID (check the [[Items]] page for possible item IDs).
|-
|-
| ScriptBlock
| ScriptBlock
| Creates a block to trigger a script when it is either walked on or clicked on.
| A special entity that can do various things, like triggering a script or displaying a text message when the Player walks through it or interacts with it.<br />
| Depending on the "Action" tag the way the "AdditionalValue" tag is interpreted is changed
If you don't want the ScriptBlock to be activated from all directions, you can add the accepted Player rotations to the "AdditionalValue" tag, separated with commas before the actual script/text message.<br />
* 0 - Activates the given script when walked on. Automatically invisible.
Example: <code>{"AdditionalValue"{Str[0,2,PathToScript]}}</code>
* 1 - Activates the given script when clicked on.
| Depending on what the "Action" tag is set to, the "AdditionalValue" tag is interpreted differently:
* 2 - Displays the given text when clicked on.
* 0 - Activates the script file specified in the "AdditionalValue" tag when walked on. Automatically invisible.
* 3 - Interprets the given text as a script.
* 1 - Activates the script file specified in the "AdditionalValue" tag when clicked on.
* 4 - Activates the given script when walked on.
* 2 - Displays the value of the "AdditionalValue" tag as a regular text message when clicked on.
|-
* 3 - Converts the value of the "AdditionalValue" tag to a script.
| SignBlock
* 4 - Activates the script file specified in the "AdditionalValue" tag when walked on. Can also be visible.
| Creates an entity that either displays text or activates a script when the player "talks" to it.
| Based on the "Action" tag the "AdditionalValue" tag is interpreted differently:
* 0 - Displays the given text as text.
* 1 - Activates the given script.
* 2 - Converts the given text to a script.
|-
| SlideBlock
| Creates a stairway.
| None
|-
|-
| SmashRock
| SmashRock
| Allows the player to use rock smash on the Entity.
| An entity that the Player can use the field move Rock Smash on to temporarily remove it. May also cause the Player to encounter a wild Pokémon.
| None
| '''Doesn't use the AdditionalValue tag'''
|-
| Step
| Creates a ledge the player can lead down.
| None
|-
|-
| StrengthRock
| StrengthRock
| Allows the player to use strength on the Entity.
| An entity that the Player can use the field move Strength on to be able to push it to another location.
| None
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| StrengthTrigger
| StrengthTrigger
| Creates a Trigger that activates when a "StrengthRock" is pushed onto it.
| An entity that activates a script when a StrengthRock entity is pushed onto it.
| bool,bool,str - the bools are for if the rock is removed immediately, and if the rock is nolonger loaded with the map, the string is the script activated when the trigger is activated.
| Bool,Bool,Str - The first boolean value determines if the StrengthRock entity is removed immediately when it touches the entity. The second boolean value determines if the StrengthRock entity will no longer be loaded when entering the map. The string value is the script file that is activated when the StrengthRock entity touches the StrengthTrigger entity.
|-
| RockClimbEntity
| An entity that the Player can use the field move Rock Climb on to get to hard to reach locations.
| '''Doesn't use the AdditionalValue tag'''
|-
|-
| TurningSign
| TurningSign
| A sign that spins at the center.
| An entity that spins at the center (doesn't have to be sign).
| An int defining what texture is used for the sign.
Depending on what the "Action" tag is set to, the entity will spin on different axes.
* 0 - PokeCenter
* 0 - The entity will spin on the Y-axis.
* 1 - Mart
* 1 - The entity will spin on the X-axis.
* 2 - Gym Sign
* 2 - The entity will spin on the Z-axis.
| An [http://en.wikipedia.org/wiki/Integer Integer number] specifying how fast the entity spins.
|-
|-
| WallBill
| Water
| An entity that always shows the same face to the player(spins on the center.
| An entity that the Player can use the field move Surf on. The water animation consists of 4 groups of 3 frames, one group for each rotation.<br />
| None
Important to note is that the water animation overrides the first index (0) of the "TextureIndex" tag.
| FrameX,FrameY,FrameWidth,FrameHeight'',VerticalSheet''<br />
The first 4 [http://en.wikipedia.org/wiki/Integer Integer numbers] define the first frame of the first animation group and every other frame will be relative to that frame.<br />
Usually, the groups are placed in a horizontal sequence, but if you add the optional fifth [http://en.wikipedia.org/wiki/Integer Integer number] (''VerticalSheet'') and set it to 1, the groups of 3 frames can be placed in a vertical order.
Example: <code>{"AdditionalValue"{Str[0,0,16,16,1]}}</code>
|-
|-
| WallBlock
| Waterfall
| Basic Entity.
| An entity that the Player can use the field move Waterfall on to climb it. The waterfall animation consists of a horizontal sequence of 3 frames by default.<br />
| None
Important to note is that the animation overrides the first index (0) and the second index (1) of the "TextureIndex" tag. Index 0 = Waterfall animation, Index 1 = Regular water animation.
| FrameX_WaterFall,FrameY_WaterFall,FrameWidth_WaterFall,FrameHeight_WaterFall'',FrameX_RegularWater,FrameY_RegularWater,FrameWidth_RegularWater,FrameHeight_RegularWater,VerticalSheet''<br />
The first 4 optional [http://en.wikipedia.org/wiki/Integer|Integer values] define the first frame of the first regular water animation group and every other frame will be relative to that frame.<br />
Usually, the groups are placed in a horizontal sequence, but if you add the extra optional 10th [http://en.wikipedia.org/wiki/Integer Integer number] (''VerticalSheet'') and set it to 1, the groups of 3 frames can be placed in a vertical order.
 
|-
|-
| WarpBlock
| Whirlpool
| Creates a warp.  
| An entity that the Player can use the field move Whirlpool on to get past it. The whirlpool animation consists of a horizontal sequence of 4 frames.<br />
| mapfilepath,X,Y,Z,R,E - The mapfile, position, number of 1/4 turns to warp, and directions from which it can be accessed separated by "<nowiki>|</nowiki>".
Important to note is that the whirlpool animation overrides the first index (0) of the "TextureIndex" tag.
| FrameX,FrameY,FrameWidth,FrameHeight<br />
The 4 [http://en.wikipedia.org/wiki/Integer Integer numbers] define the first frame of the animation and every other frame will be relative to that frame.<br />
|-
|-
| Water
| RotationTile
| Creates a surf spot, ignores texture(s) given.
| Spins the player around until they reach the direction specified in the "AdditionValue" tag.<br />
| None
Depending on the value of the "Action" tag it will or won't spin the player.<br />
* 0 - Spin the player
* 1 - Don't spin the player
| An [http://en.wikipedia.org/wiki/Integer Integer number] corresponding to the direction to end the spin in.
* 0 - 0 degrees (North)
* 1 - 270 degrees (West)
* 2 - 180 degrees (South)
* 3 - 90 degrees (East)
|-
|-
| Waterfall
| DiveTile
| Creates a Waterfall, ignores texture(s) given.
| An entity that the Player can use the field move Dive on. Depending on the value of the "Action" tag, a different dialogue will be shown.<br/>
| None
* 0 = The water seems to be really deep at this point.
* 1 = Light shines down from the surface.
* 2 = The boat's shadow is cast upon the ocean floor.
| MapFilePath,X_Position,Y_Position,Z_Position,AmountOfTurns<br/>
* MapFilePath (Str) = The path to the map file including ".dat" extension, relative to the Content\Maps\ folder<br/>
* X_Position, Y_Position, Z_Position (Int) = three-dimensional position to warp to (be sure to add 0.1 to the "Y_Position" argument)<br/>
* AmountOfTurns (Int) = Number of 1/4 turns to turn the Player after warping<br/>
Depending on the value of the "Action" tag, the distance that the player travels after using the field move changes.
* 0 = The player warps to the specified map and descends 4 units on the Y-axis. (Be sure to add 4 to the "Y_Position" argument of the warp.)
* 1 = The player ascends 4 units on the Y-axis before warping to the specified map.
* 2 = The player ascends 3 units on the Y-axis before warping to the specified map.
Example: <code>{"AdditionalValue"{Str[Folder\Map.dat,8,4.1,-1]}}</code>
|-
|-
| Whirlpool
| AnimatedBlock
| Creates a Whirlpool, ignores texture(s) given.
| An entity with textures that can have multiple frames of animation. Requires the "AnimationData" tag, which has to define at least one animation.<br/>
| None
Each animation defined in the "AnimationData" tag corresponds to an index in the "TextureIndex" tag (the first animation replaces index 0, the second one 1 etc.).
| Needs to be set to the path of the texture to use for the animation(s) (relative to the Textures folder, including subfolders if any) without the extension.<br />
Example: <code>{"AdditionalValue"{Str[Cities\Pallet]}}</code>
|}
|}


== Model ID ==
== Types of Models ==
This is a list of the different models available to be used for entities. Any number not listed here becomes 0.
A list of the possibilities for the "ModelID" tag listed above. Any number not listed here gets treated as 0. The "TextureIndex" column shows what faces correspond to the values of the "TextureIndex" tag.
{|class="wikitable"
{|class="wikitable"
! ID.
! ModelID
! Model description.
! Model Name
! Description
! TextureIndex (Directions relative to default rotation 0)
|-
|-
| 0
| 0
| Flat surface.
| Floor Model
| Flat horizontal surface, visible from above. Generally used by Floors.<br />
Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y -0.5z
| <code>{"TextureIndex"{IntArr[Top,Top]}}</code>
|-
|-
| 1
| 1
| Box(five sides)
| Block Model
| A cube with 5 sides (without the side facing down).
| <code>{"TextureIndex"{IntArr[South,South,East,East,West,West,North,North,Top,Top]}}</code>
|-
|-
| 2
| 2
| 45 degree slant.
| Slope Model
| A 45 degree slope, generally used by SlideBlock entities (like stairs).
| <code>{"TextureIndex"{IntArr[Slope,Slope,East,West,South,South]}}</code>
|-
|-
| 3
| 3
| Flat vertical surface
| Bill Model
| A flat vertical surface, generally used by WallBill entities (like trees).<br />
Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0z.
| <code>{"TextureIndex"{IntArr[South,South]}}</code>
|-
|-
| 4
| 4
| Thin block. 4 Pixels wide.
| Sign Model
| A cube with 4 sides that is 0.25 units thick on the Z-axis (North/South).<br />
Generally used by SignBlock entities.
| <code>{"TextureIndex"{IntArr[South,South,East,East,West,West,North,North]}}</code>
|-
|-
| 5
| 5
| "Out" corner.
| Outside Corner Model
| A 45 degree counter-clockwise (starting from the left-most slope face) slope corner.
| <code>{"TextureIndex"{IntArr[Straight_West,Straight_South,Slope_East,Slope_North]}}</code>
|-
|-
| 6
| 6
| "In" corner.
| Inside Corner Model
| A 45 degree clockwise (starting from the left-most slope face) slope corner.
| <code>{"TextureIndex"{IntArr[Straight_South,Straight_South,Straight_West,Straight_West,Straight_East,Slope_North,Straight_North,Slope_East]}}</code>
|-
|-
| 7
| 7
| Ledge.
| Ledge Model
| A slope that is 0.25 units tall on the Y-axis (Up/Down).<br />
Generally used by Step entities a.k.a. Jump Ledges.
| <code>{"TextureIndex"{IntArr[Slope,Slope,East,East,West,West,North,North]}}</code>
|-
|-
| 8
| 8
| Ledge Corner.
| Ledge Outside Corner Model
| A counter-clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down).<br />
Generally used by Step entities a.k.a. Jump Ledges.
| <code>{"TextureIndex"{IntArr[Straight_West,Straight_West,Straight_South,Straight_South,Slope_East,Slope_East,Slope_North,Slope_North]}}</code>
|-
|-
| 9
| 9
| Water's edge.
| Water Edge Model
| A slope that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.<br />
Only works when used with the EntityID tag set to "Water".<br />
TextureIndex 0 is reserved for the water animation.
| <code>{"TextureIndex"{IntArr[Water,Water,Slope,Slope]}}</code>
|-
|-
| 10
| 10
| Water's edge "in" corner.
| Water Edge Inside Corner
| A clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.<br />
Only works when used with the EntityID tag set to "Water".<br />
TextureIndex 0 is reserved for the water animation.
| <code>{"TextureIndex"{IntArr[Water,Water,Slope_North,Slope_North,Slope_West,Slope_West]}}</code>
|-
|-
| 11
| 11
| Water's edge "out" corner.
| Water Edge Outside Corner
| A counter-clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.<br />
Only works when used with the EntityID tag set to "Water".<br />
TextureIndex 0 is reserved for the water animation.
| <code>{"TextureIndex"{IntArr[Water,Water,Straight_West,Straight_South,Slope_East,Slope_North]}}</code>
|-
|-
| 12
| 12
| Box (Six Sides).
| Cube Model
| A cube with 6 sides. The bottom side is only visible with the EntityID tag set to "Cube" or "AllSidesObject".
| <code>{"TextureIndex"{IntArr[South,South,East,East,West,West,North,North,Top,Top,Bottom,Bottom]}}</code>
|-
|-
| 13
| 13
| Two Flat  pieces intersecting in their centers at 90 degree angles.
| Cross Model
| Two flat vertical surfaces intersecting in their centers at 90 degree angles.<br />
The second surface is only visible with the EntityID tag set to "Cube" or "AllSidesObject".<br />
Important to note that the second surface is actually made out of two rectangles which are each 0.5 unit wide.
| <code>{"TextureIndex"{IntArr[1stSurface,1stSurface,2ndSurface_South,2ndSurface_South,2ndSurface_North,2ndSurface_North]}}</code>
|-
|-
| 14
| 14
| Double floor (a floor with a floor above it)
| Double Floor Model
| A flat horizontal surface, visible from above, with another flat horizontal surface 1 unit higher on the Y-axis.
| <code>{"TextureIndex"{IntArr[LowestSurface,LowestSurface,HighestSurface,HighestSurface]}}</code>
|-
| 15
| Pyramid Model
| Four sloped triangles placed against each other in a pyramid shape.
| <code>{"TextureIndex"{IntArr[West,South,East,North]}}</code>
|-
| 16
| Stairs Model
| A somewhat complex model that resembles two steps of a staircase.<br />
In the "TextureIndex" column, Step1 is the lowest part of the stairs and Step2 is the highest part of the stairs on the Y-axis (Up/Down).<br />
Apart from Step2's west and east sides, which are 0.5 units in both width and height, and the backside, which is 1 unit in both width and height, the rest of the surfaces are 1 by 0.5 units in size.
| <code>{"TextureIndex"{IntArr[Step1_South,Step1_South,Step1_Top,Step1_Top,Step2_South,Step2_South,Step2_Top,Step2_Top,BackSide_North,BackSide_North,Step1_West,Step1_West,Step2_West,Step2_West,Step1_East,Step1_East,Step2_East,Step2_East]}}</code>
|-
| 17
| Diagonal Wall Model
| A flat diagonal vertical surface spreading across the full unit on the Z axis.<br />
Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0z.
| <code>{"TextureIndex"{IntArr[SouthEast,SouthEast]}}</code>
|-
| 18
| Half Diagonal Wall Model
|  A flat diagonal vertical surface spreading across half the unit on the Z axis.<br />
Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y -0.25z.
| <code>{"TextureIndex"{IntArr[SouthEast,SouthEast]}}</code>
|-
| 19
| Ledge Inside Corner Model
| A clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down).<br />
Generally used by Step entities a.k.a. Jump Ledges.
| <code>{"TextureIndex"{IntArr[Straight_South,Straight_South,Straight_West,Straight_West,Straight_East,Slope_North,Straight_North,Slope_East]}}</code>
|-
| 20
| Wall Model
| A flat vertical surface on one side of a single three-dimensional unit, essentially one side of ModelID 1.
| <code>{"TextureIndex"{IntArr[South,South]}}</code>
|-
| 21
| Ceiling Model
| Flat horizontal surface, visible from below.<br />
Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0.5z
| <code>{"TextureIndex"{IntArr[Bottom,Bottom]}}</code>
|}
 
== Creating an NPC ==
 
<pre>{"NPC"{NPC[{"Name"{Str[]}}{"Position"{SngArr[]}}{"ID"{Int[]}}{"TextureID"{Str[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"Movement"{Str[]}}{"MoveRectangles"{RecArr[[]]}}{"AnimateIdle"{Bool[]}}{"ModelPath"{Str[]}}]}}</pre>
 
{| class="wikitable"
|-
! Tag
! Description
! Default Argument Value
|-
| <code>{"Position"{SngArr[X,Y,Z]}}</code>
| Determines the three dimensional starting position for the NPC.
| '''No Default Value'''
|-
| <code>{"Scale"{SngArr[X,Y,Z]}}</code>
| Changes the width, height and depth of the NPC.
| {"Scale"{SngArr[1,1,1]}}
|-
| <code>{"TextureID"{Str[TexturePath]}}</code>
| Determines the texture file of the NPC, relative from "Textures\NPC", without the extension (including subfolders if any).<br />
You can also make the NPC use a Pokémon's texture by setting this value to the national dex number (and optional form) of the Pokémon and adding <nowiki>"[POKEMON|N]" or "[POKEMON|S]"</nowiki> in front of it.<br />
N = Normal. S = Shiny.<br />
Example:
* <code><nowiki>{"TextureID"{Str[[POKEMON|S]151]}}</nowiki></code> will set the texture to that of a shiny Mewtwo
* <code><nowiki>{"TextureID"{Str[[POKEMON|N]26_alola]}}</nowiki></code> will set the texture to that of an Alolan Raichu.
| '''No Default Value'''
|-
| <code>{"Rotation"{Int[0-3]}}</code>
| Determines the rotation of the NPC.<br/>
Possible values:
* 0 - 0 degrees (North)
* 1 - 270 degrees (West)
* 2 - 180 degrees (South)
* 3 - 90 degrees (East)
| '''No Default Value'''
|-
| <code>{"Action"{Int[0-2]}}</code>
| Determines how the "AdditionalValue" tag is interpreted:<br />
* 0 - As text to display when the player interacts with the NPC.
* 1 - As a script file to execute when the player interacts with the NPC (without extension, relative to "Data\Scripts").
* 2 - As a script file to activate when the player is a certain distance from the NPC and within line of sight.
| '''No Default Value'''
|-
| <code>{"AdditionalValue"{Str[ScriptPathOrText]}}</code>
| Contains the text or script to be interpreted as determined by the "Action" tag.<br />
When the value of the "Action" tag is 2, use the following format: {"AdditionalValue"{Str[Distance|ScriptPath]}}<br />
* Distance (Int) - The distance from the NPC to the player for the script to activate
* ScriptPath - The path to the script without extension, relative to "Data\Scripts"
| '''No Default Value'''
|-
| <code>{"Name"{Str[name]}}</code>
| Determines the name of the NPC, which can be used by scripts.
| '''No Default Value'''
|-
| <code>{"ID"{Int[ID]}}</code>
| Determines the scripting ID of the NPC, which can be used to change the NPC's properties.
| '''No Default Value'''
|-
| <code>{"Movement"{Str[movement type]}}</code>
| Determines the type of movement the NPC will do:<br />
* Still - Does not move or turn.
* Looking - Turns to random directions.
* Walk - Randomly turns and walks to a place that it can walk to as determined by the "MoveRectangles" tag.
* Turning - Turns in a circle.
* Straight - Walks in a straight line along the edges of the space it can walk on as determined by the "MoveRectangles" tag.
* PokeBall, or FacePlayer - Always shows the same face to the Player and rotates with the camera, like a WallBill entity.
| '''No Default Value'''
|-
| <code>{"MoveRectangles"{recArr<nowiki>[[X_Origin,Z_Origin,Width,Depth]]</nowiki>}}</code>
| Determines the spaces that the character can walk in when the "Movement" tag is set to Walk or Straight.
| '''No Default Value'''
|-
| <code>{"AnimateIdle"{Bool[]}}</code>
| Allows the NPC to animate the walk cycle even when standing still.
| {"AnimateIdle"{Bool[0]}}
|-
| <code>{"ModelPath"{Str[]}}</code>
| Determines the 3D Model (in Monogame's .xnb format) that this NPC would use (relative to the Content folder, including subfolders if any) without the extension.<br />
You can find a tool that converts models here: [https://pokemon3d.net/resource/9c4ee67a-a34d-4750-a8b2-908cd3115a71 FBX to XNB Converter].<br />
When the NPC changes directions, the model will rotate with it.
| {"ModelPath"{Str[]}}
|-
|}
 
== Creating a Shader ==
 
<pre>{"Shader"{SHA[{"Position"{SngArr[]}}{"Size"{IntArr[]}}]}}{"Shader"{SngArr[]}}{"StopOnContact"{Bool[]}}{"DayTime"{IntArr[]}}</pre>
 
{| class="wikitable"
|-
! Tag
! Description
! Default Argument Value
|-
| <code>{"Position"{SngArr[x,'''y''',z]}}</code>
| Three-dimensional Position for the shader to start from.
| '''No Default Value'''
|-
| <code>{"Size"{IntArr[x,'''y''',z]}}</code>
| Three-dimensional space originating from the position affected by the shader.
| '''No Default Value'''
|-
| <code>{"Shader"{SngArr[Red,Green,Blue]}}</code>
| Determines how much darker or brighter the colors of the entities affected by the Shader should be.
However, instead of ranging from 0 - 255, like with regular RGB colors, each of the color channel values range from -5 to 0 to 5. When a value is below 0, that color channel gets darker. If a value is above 0 that color channel gets brighter.
Example: <code>{"Shader"{SngArr[0.5,0.5,0.5]}}</code>
| '''No Default Value'''
|-
| <code>{"StopOnContact"{Bool[]}}</code>
| Tells the shader if it shouldn't effect faces which have a face between it and the source.
| '''No Default Value'''
|-
| <code>{"DayTime"{IntArr[timeIDs]}}</code>
| A list of [http://en.wikipedia.org/wiki/Integer Integer numbers] (0-3) representing the time of day that the shader will be applied.<br />
* 0 - Always
* 1 - Night
* 2 - Morning
* 3 - Day
* 4 - Evening
| If this tag is left empty, it will always apply the shader.
|-
|}
 
== Adding an OffsetMap ==
=== What is an OffsetMap? ===
An OffsetMap is a regular map file that can be used to make it seem like two different maps are connected.<br />
Let's say you're on a map called "City", and you have another map called "Route".<br />
While you're on the City map, you could have Route as an OffsetMap next to it so you don't see just the sky at the edge of the map.<br />
One thing to note is that you cannot interact with any entity in an OffsetMap. You can't walk on floors, interact with NPCs, etc.<br />
How often the entities on an OffsetMap are updated is affected by the OffsetMap Quality setting in the options menu.
=== Template ===
<pre>{"OffsetMap"{MAP[{"Offset"{SngArr[]}}{"Map"{Str[]}}]}}</pre>
These are the available tags to define an OffsetMap with.
{| class="wikitable"
|-
! Tag
! Description
! Default Argument Value
|-
| <code>{"Map"{Str[MapFile]}}</code>
| Map to load as the offset, relative from "Data\Maps" (including subfolders if any and the ".dat" extension).
| '''No Default Value'''
|-
| <code>{"Offset"{SngArr[x,'''y''',z]}}</code>
| Position for the offset map to treat as 0,0,0.
| '''No Default Value'''
|}
 
== Adding a Structure ==
=== What is a Structure? ===
A Structure is a regular map file that can be used to place multiple copies of groups of entities more efficiently.<br />
Unlike an OffsetMap, you can interact with any entity on the Structure, as when it's added to the map, it essentially becomes part of the map.<br />
This can be useful for similar looking buildings or anything else that might be useful to reuse in a different place.<br />
Structures are not affected by the OffsetMap Quality setting in the options menu.
=== Template ===
<pre>{"Structure"{Str[{"Map"{Str[]}}{"Offset"{SngArr[]}}{"AddNPC"{Bool[]}}]}}</pre>
These are the available tags to define a Structure with.
{| class="wikitable"
|-
! Tag
! Description
! Default Argument Value
|-
| <code>{"Map"{Str[MapFile]}}</code>
| Map to load as a structure, relative from "Data\Maps" (including subfolders if any and the ".dat" extension).
| '''No Default Value'''
|-
| <code>{"Offset"{SngArr[x,'''y''',z]}}</code>
| Position for the structure to treat as 0,0,0.
| '''No Default Value'''
|-
| <code>{"AddNPC"{Bool[value]}}</code>
| Whether the NPCs (if any) in the structure should also be added. Value can be 1 (true) or 0 (false).
| {"AddNPC"{Bool[0]}}
|}
|}


== .poke files ==
== .poke files ==
The .poke files contain the wild [[Pokemon]] data for each location.  
The .poke files decide which wild Pokémon are available in each map, how they are encountered, at what levels they are, what time of the day they appear, and how often they appear.
 
=== Template ===
<pre>{#1|#2|#3|#4|#5,#6}</pre>
 
=== Explanation ===
==== #1 ====
Encounter Method (Int): Determines how the Pokémon is encountered. There are currently 7 options:
* 0 - Grass/Floor
* 1 - Headbutt trees
* 2 - Surf
* 3 - Old Rod
* 31 - Good Rod
* 32 - Super Rod
* 5 - Rock Smash
 
==== #2 ====
Pokémon Identification: The [[Pokemon_Code|Pokémon Code]] or the National Dex number of the Pokémon which can also included a form suffix at the end. e.g. "26_alola".
 
==== #3 ====
Encounter Chance (Int): Determines how easy it will be to find the Pokémon. The higher the number the more likely it will be. The chance is determined as the individual Pokémon's chance over the sum of all relevant (time and encounter method) chances.
 
==== #4 ====
Encounter Time (Int): Determines when this Pokémon will be available. There are 5 options:
* -1 - All times.
* 0 - Night.
* 1 - Morning.
* 2 - Day.
* 3 - Evening.


Each Pokemon is represented by a line of code like this:
==== #5 ====
Level Minimum (Int): Determines the minimum level the Pokémon can appear at.


<nowiki>{#|PKMN#|%|TIME|Lv1,Lv2}</nowiki>
==== #6 ====
Level Maximum (Int): Determines the maximum level the Pokémon can appear at. If the Pokémon should only appear at one level this number should be the same as #5.


* # - Type of encounter.
** 0 - Grass/Floor.
** 1 - Headbutt trees.
** 2 - Surf
** 3 - Old Rod
** 31 - Good Rod
** 32 - Super Rod
** 5 - Rock Smash
* PKMN# - National dex number of the pokemon.
* % - Possibility that the pokemon will be encountered.
* TIME - time of day
** -1 - All times
** 0 - Night
** 1 - Morning
** 2 - Day
** 3 - Evening
* Lv1 - Min Level
* Lv2 - Max Level
{{FilePaths}}
{{FilePaths}}

Latest revision as of 15:58, 1 April 2024

The Maps folder is located inside the Data folder in your GameMode's ContentPath and contains all the map files that are used to run your GameMode.

The files contain many lines of code. Each line of code is a single object or group of map objects, also known as entities, which each can have a range of tags describing their characteristics.

A general note to all GameMode Mappers (MUST READ)

This page has been updated for Pokémon 3D v0.60. If you feel like something is missing from this page, feel free to notify us in our Discord Server

If you are a GameMode Mapper or trying to be one, we Recommend you to download Notepad++ and our Syntax Highlighting as it makes it easier to read the map files and find typos.

If you find something on this page that doesn't work the way you'd expect it to be, it might be a bug. Try asking us on our Discord Server.
Make sure to include the game version you're running and state clearly what you are trying to do.

You are free to create your folder structure in any way you'd like, though it's recommended to follow some kind of logical pattern. For example:

RegionName\
    Cities\
        CityName\
            PlayerHouse1F.dat
            PlayerHouse2F.dat
            Lab.dat
            Main.dat
    Routes\
        Route5\
           DayCare.dat
        Route1.dat
        Route2.dat
        Route3.dat
        Route4.dat
        Route5.dat

Important info / definition of certain things before we get started

Distance in Pokémon 3D (and in the documentation) is measured in "units". A unit is equal to the distance that the Player moves when they take a single step. A single three-dimensional unit can be compared to a cube that is 1x1x1 units in size.

By default, the Argument Types are:

  • Str [String] (Strings are defined as letters or symbols)
  • Int [Integer] (Integers are defined as Integer numbers)
  • Sng [Single/Float] (Singles/Floats are defined as Real numbers, which may include decimals.)
  • Bool [Boolean] (Booleans are defined as 0 or 1, e.g. Bool[0] = False & Bool[1] = True)
  • Rec [Rectangle] (Rectangles are defined as an array of Integer numbers, e.g. Rec[0,0,16,16])
  • RecArr [Rectangle Array] (Rectangle Arrays are defined as an array of Rectangles, e.g. RecArr[[0,0,16,16][16,0,16,16]])
  • IntArr [Integer Array] (Integer Arrays are defined as an array of Integer numbers, e.g. IntArr[1,2,1])
  • SngArr [Single Array] (Single Arrays are defined as an array of Real numbers, e.g. SngArr[0.5,0.5,0.75])
  • IntArr2D [Animation Array] (Animation Arrays are slightly more complex. They are defined as one or multiple array of Integer numbers and are only relevant to AnimatedBlock entities. Their format is: IntArr2D[[FrameX,FrameY,FrameWidth,FrameHeight,AmountOfRows,AmountOfColumns,AnimationSpeed,StartRow,StartColumn]]).

If part of an argument or value looks like this: bold text, it's optional.

Creating a Map

To create a map file, create a new regular text file and change its extension to .dat instead of .txt. Then, you need to define its tags. You can do so by adding these templates to the start of the text file:

{"Level"{LEV[{"Name"{Str[]}}{"MusicLoop"{Str[]}}{"WildPokemon"{Bool[]}}{"OverworldPokemon"{Bool[]}}{"CurrentRegion"{Str[]}}{"RegionalForm"{Str[]}}{"HiddenAbility"{Int[]}}]}}
{"Actions"{LEV[{"CanTeleport"{Bool[]}}{"CanDig"{Bool[]}}{"CanFly"{Bool[]}}{"RideType"{Int[]}}{"EnvironmentType"{Int[]}}{"Weather"{Int[]}}{"Season"{Int[]}}{"Lighting"{Int[]}}{"DayTime"{Int[]}}{"IsDark"{Bool[]}}{"IsAurora"{Bool[]}}{"Terrain"{Str[]}}{"IsSafariZone"{Bool[]}}{"BugCatchingContest"{Str[]}}{"MapScript"{Str[]}}{"RadioChannels"{Str[]}}{"BattleMap"{Str[]}}{"SurfingBattleMap"{Str[]}}{"SaveOnly"{Bool[]}}]}}

These are all the available tags to define a map with. Not all tags are required, so you can remove the tags that return a default value if they don't exist.

{"Level"{LEV[Tag1,Tag2,...]}}

Tag Description Default Argument Value
{"Name"{Str[]}} Determines the map name, displays in the upper left corner of the screen when first arriving at the place.
Used to determine if a Pokémon evolves there, e.g. {"Name"{Str[Pallet Town]}}.
No Default Value
{"MusicLoop"{Str[]}} Determines the default background music for the map.
Be sure to write the name of the music file
(relative to the Songs folder, including subfolders if any) without the extension.

Example: {"MusicLoop"{Str[Cities\Pallet]}}.

No Default Value
{"WildPokemon"{Bool[]}} Determines if wild Pokémon should be able to appear anywhere on the map (not just in tall grass or water). {"WildPokemon"{Bool[0]}}.
{"OverworldPokemon"{Bool[]}} Determines whether the first Pokémon in the Player's team should appear behind the Player on the map or not. {"OverworldPokemon"{Bool[1]}}
{"CurrentRegion"{Str[]}} Determines what region or regions the map should be considered to be a part of.

Example: {"CurrentRegion"{Str[Johto,Kanto]}}.

{"CurrentRegion"{Str[Johto]}}
{"RegionalForm"{Str[]}} Determines what regional forms are available on this map.

Example: {"RegionalForm"{Str[Alola]}}.

No Default Value
{"HiddenAbility"{Int[]}} Determines the chance of a Hidden Ability being on a wild Pokémon for this map. The value can range from 0 - 100. {"HiddenAbility"{Int[0]}}

{"Actions"{LEV[Tag1,Tag2,...]}}

Tag Description Default Argument Value
{"CanTeleport"{Bool[]}} Determines whether a Pokémon should be able to use the field move Teleport on this map. {"CanTeleport"{Bool[0]}}
{"CanDig"{Bool[]}} Determines if a Pokémon should be able to use the field move Dig on this map. {"CanDig"{Bool[0]}}
{"CanFly"{Bool[]}} Determines if a Pokémon should be able to use the field move Fly on this map.

Tip: If you have two maps, both with the "CanFly" Tag set to 1, you can warp from one to the other using a WarpBlock without having the "enter" sound effect play.

{"CanFly"{Bool[0]}}
{"RideType"{Int[]}} Determines whether a Pokémon can use the field move Ride on this map.
  • 0 - If either "CanFly" or "CanDig" = True, then it's able to use Ride.
  • 1 - Always able to use Ride.
  • 2 - Never able to use Ride.
{"RideType"{Int[0]}}
{"EnvironmentType"{Int[]}} Determines the environment (sky/background) of the map.
  • 0 - Outside
  • 1 - Inside
  • 2 - Cave
  • 3 - Darkness
  • 4 - Underwater
  • 5 - Forest
{"EnvironmentType"{Int[0]}}
{"Weather"{Int[]}} Determines the Weather of the map.
  • 0 - Random based on the season
  • 1 - Clear
  • 2 - Rain
  • 3 - Snow
  • 4 - Underwater
  • 5 - Sunny
  • 6 - Fog
  • 7 - Thunderstorm
  • 8 - Sandstorm
  • 9 - Ash
  • 10 - Blizzard
  • 11 - Mist
{"Weather"{Int[0]}}
{"Season"{Int[]}} Changes the current in-game season until another map has its Season tag set to -1 or when a script changes it.
  • -1 = The season from the current month
  • 0 = Always Winter
  • 1 = Always Spring
  • 2 = Always Summer
  • 3 = Always Fall
No Default Value
{"Lighting"{Int[]}} Determines the lighting of the map.
  • 0 = Use the lighting corresponding to the current time of day.
  • 1 = Disable lighting
  • 2 = Always Night
  • 3 = Always Morning
  • 4 = Always Day
  • 5 = Always Evening
{"Lighting"{Int[1]}}
{"DayTime"{Int[]}} Determines the time of day to use for the Outside sky/background and default lighting.
  • 0 = Use the DayTime corresponding to the current time of day.
  • 1 = Always Night
  • 2 = Always Morning
  • 3 = Always Day
  • 4 = Always Evening
{"DayTime"{Int[0]}}
{"IsDark"{Bool[]}} Determines if a darkness screen overlay should appear while on this map that requires the field move Flash to get rid of. {"IsDark"{Bool[0]}}.
{"IsAurora"{Bool[]}} Determines if the Outside sky/background texture should be the Aurora Borealis texture on this map. {"IsAurora"{Bool[0]}}.
{"Terrain"{Str[]}} Determines the terrain type of the map.
  • Plain
  • Sand
  • Cave
  • Rock
  • TallGrass
  • LongGrass
  • PondWater
  • SeaWater
  • Underwater
  • DistortionWorld
  • Puddles
  • Snow
  • Magma
  • PvPBattle
{"Terrain"{Str[Plain]}}.
{"IsSafariZone"{Bool[]}} Determines if the map is a Safari Zone. {"IsSafariZone"{Bool[0]}}.
{"SaveOnly"{Bool[]}} When set to 1, only allows the Player to save the game on certain maps (and prevents access to the other options in the menu) {"SaveOnly"{Bool[0]}}.
{"BugCatchingContest"{Str[]}} Determines the data used in a bug catching contest.

You can use this template: {"BugCatchingContest"{Str[EndContestMenuScript,CheckRemainingBallsMenuScript,RemainingBallsItemName]}}
Example: {"BugCatchingContest"{Str[NationalPark\End_Contest_Menu,NationalPark\Sport_Balls,Sport Balls]}}

No Default Value
{"MapScript"{Str[]}} Determines the script to run when the Player enters this map. No Default Value
{"RadioChannels"{Str[]}} Determines which Radio Channel frequencies can be used on this map.

Example: {"RadioChannels"{Str[13.5,20.5]}}

No Default Value (All channels are available)
{"BattleMap"{Str[]}} Determines the Map that is visible in the background during regular battles and optionally its offset position. The following formats are valid:
  • {"BattleMap"{Str[MapName,xOffset,yOffset,zOffset]}}
  • {"BattleMap"{Str[Mapname]}}
  • {"BattleMap"{Str[xOffset,yOffset,zOffset]}}
  • {"BattleMap"{Str[]}}
{"BattleMap"{Str[]}}

Creating an Entity

There are 3 Entity types that you can define: Floor, Entity and EntityField.

Floors are objects that show the game where Players and NPCs can walk. They always use ModelID 0, this cannot be changed. More information about ModelIDs can be found here. Also important to note is that while the other two entity types can use multiple texture rectangles within the same object using the "Textures" tag with a RectArr argument, Floors can only have one texture rectangle and use the "Texture" tag with a Rec argument instead. The Position tag of a Floor also uses an Integer Array (IntArr) argument instead of a Single Array (SngArr) argument. More information about argument types can be found here.

To create a Floor, you can use this template:

{"Floor"{ENT[{"Size"{IntArr[]}}{"Position"{IntArr[]}}{"TexturePath"{Str[]}}{"Texture"{Rec[]}}{"Visible"{Bool[]}}{"Visible"{Bool[]}}{"Remove"{Bool[]}}{"hasSnow"{Bool[]}}{"hasSand"{Bool[]}}{"isIce"{Bool[]}}{"Rotation"{Int[]}}{"SeasonTexture"{Str[]}}]}}

Then there are the Entity and EntityField object types. Entity objects can be virtually anything. Walls, ceilings, trees, trains, televisions, mountains, you name it! A lot of the things you see in Pokémon 3D are made out of Entity objects. Entity and EntityField objects are defined in almost the same way. The only difference is that the EntityField objects require the {"Size"{IntArr[]}} tag, with which you can place multiple objects at the same time using only a single object definition. You can add the {"Size"{IntArr[]}} tag to a regular Entity object, but it won't do anything.

To create an Entity object, you can use this template:

{"Entity"{ENT[{"EntityID"{Str[]}}{"ID"{Int[]}}{"Position"{SngArr[]}}{"TexturePath"{Str[]}}{"Textures"{RecArr[[]]}}{"TextureIndex"{IntArr[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"ModelID"{Int[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"RotationXYZ"{SngArr[]}}{"SeasonTexture"{Str[]}}{"SeasonToggle"{Str[]}}{"ModelPath"{Str[]}}{"AnimationData"{IntArr2D[[]]}}]}}

To create an EntityField object, you can use this template:

{"EntityField"{ENT[{"EntityID"{Str[]}}{"ID"{Int[]}}{"Size"{IntArr[]}}{"Position"{SngArr[]}}{"TexturePath"{Str[]}}{"Textures"{RecArr[[]]}}{"TextureIndex"{IntArr[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"ModelID"{Int[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"RotationXYZ"{SngArr[]}}{"SeasonTexture"{Str[]}}{"SeasonToggle"{Str[]}}{"ModelPath"{Str[]}}{"AnimationData"{IntArr2D[[]]}}]}}

These are all the available tags to define an Entity with. Not all tags are required, so you can remove the tags that return a default value if they don't exist. Argument values written in bold (e.g. Argument) are optional.

Tag Description Default Argument Value

Floor only

{"Texture"{Rec[X,Y,Width,Height]}} Determines the specific part of the texture file that the Floor will use.

Example: {"Textures"{Rec[0,32,16,16]}}
The first Rectangle in the array (corresponding to TextureIndex 0), will define a texture at coordinate X: 0 pixels Y: 0 pixels that is 32 pixels wide and 32 pixels tall.

No Default Value
{"Remove"{Bool[]}} Determines if the floor(s) that are covered by this floor should be removed (including this Floor). {"Remove"{Bool[0]}}
{"hasSnow"{Bool[]}} Determines if this floor should be covered in snow when it's snowing. {"hasSnow"{Bool[1]}}
{"hasSand"{Bool[]}} Determines if this floor should be covered in sand during a sandstorm. {"hasSand"{Bool[1]}}
{"isIce"{Bool[]}} Determines if this Floor causes the Player to slide until it reaches another non-ice floor or an entity that it cannot pass through. {"isIce"{Bool[0]}}

Entity & EntityField only

{"EntityID"{Str[]}} Determines what type this entity is, what happens when the Player interacts with it, how it reacts to surroundings and how it's displayed. You can find the possible types and what they do here. No Default Value
{"Textures"{RecArr[[X,Y,Width,Height][X,Y,Width,Height]...]]}} Determines the specific part(s) of the texture file that the Entity or EntityField will use.

Example: {"Textures"{RecArr[[0,0,32,32][0,32,16,16]]}}
The first Rectangle in the array (corresponding to TextureIndex 0), will define a texture at coordinate X: 0 pixels Y: 0 pixels that is 32 pixels wide and 32 pixels tall.

No Default Value
{"TextureIndex"{IntArr[Face0,Face1,Face2,Face3,...]}} Determines which texture rectangle defined by the {"Textures"{RecArr[[]]}} tag is used for which triangle shaped face of the model, starting from 0. Rectangles are made out of 2 triangle shaped faces. No Default Value
{"Scale"{SngArr[X,Y,Z]}} Changes the width, height and depth of the entity. {"Scale"{SngArr[1,1,1]}}
{"Steps"{SngArr[X,Y,Z]}} Only works for EntityFields. Places each entity of an EntityField at a specified interval. If the Position tag is set to "0,0,0", the Size tag is set to "7,1" and the Steps tag is set to "2,1", they will be placed at 0, 2, 4 and 6 on the X axis. {"Scale"{SngArr[1,1,1]}}
  • Y - Defaults to 1 if left out
{"Collision"{Bool[]}} Determines if the Player and NPCs can walk through this entity (0) or not (1). No Default Value
{"ModelID"{Int[]}} Determines the basic model to use for this entity, which defines the amount of faces that the "TextureIndex" tag can use. More information about ModelIDs can be found here.

Important to note is that if the entity has a 3D Model assigned to it through the "ModelPath" tag, the basic model from this tag will be invisible.

No Default Value
{"Action"{Int[]}} Determines how the "AdditionalValue" tag is interpreted depending on what the "EntityID" is set to.

You can find more information about the "Action" and "AdditionalValue" tags here.

No Default Value
{"AdditionalValue"{Str[]}} Determines what happens when the Player interacts or collides with or walks against the entity. What that is, is affected by the "Action" tag.

You can find more information about the "Action" and "AdditionalValue" tags here.

{"AdditionalValue"{Str[]}}
{"RotationXYZ"{SngArr[]}} Determines a three-dimensional rotation of the entity in radians (3.1415 = a 180 degrees rotation).

Adding this tag to an entity overrides the "Rotation" tag.

{"RotationXYZ"{SngArr[]}}
{"SeasonToggle"{Str[]}} Determines during which season(s) this entity will be added to the map.

Multiple seasons can be included by separating the numbers with commas(",").

  • 0 = Winter
  • 1 = Spring
  • 2 = Summer
  • 3 = Fall
{"SeasonToggle"{Str[]}}
{"ModelPath"{Str[]}} Determines the 3D Model (in Monogame's .xnb format) that this entity would use (relative to the Content folder, including subfolders if any) without the extension.

You can find a tool that converts models here: FBX to XNB Converter.
When the "ModelID" tag is set to 3, the 3D Model will rotate towards the camera, just like a WallBill would.

{"ModelPath"{Str[]}}
{"AnimationData"{IntArr2D[[FrameX,FrameY,FrameWidth,FrameHeight,
AmountOfRows,AmountOfColumns,AnimationSpeed,StartRow,StartColumn][...]]}}
Determines the animation sequence properties of the "AnimatedBlock" entity type. It can contain multiple animation definitions, which will be played in sequence.

Important to note is that the animation overrides the first index (0) of the "TextureIndex" tag.
You also need to set the "AdditionalValue" tag to the path of the texture to use for the animation(s) (relative to the Textures folder, including subfolders if any) without the extension.
Example: {"AdditionalValue"{Str[Routes]}}{"AnimationData"{IntArr2D[[80,176,16,16,1,6,18,0,0]]}}

No Default Value

Floor, Entity & EntityField

{"ID"{Int[]}} Determines what the scripting ID is of this entity. With scripts, you can change the properties of any entity that uses the same scripting ID. No Default Value
{"Size"{IntArr[X,Y,Z]}} Determines how many units the EntityField/Floor should cover. If you don't need objects placed above each other, you can use just 2 Integer numbers instead of 3. * Y - Defaults to 1 if left out
{"Position"{SngArr[X,Y,Z]}} Determines the starting position of the Entities/Floors. No Default Value
{"TexturePath"{Str[]}} Determines the path to the texture file that the Entities/Floors will use (relative to the Textures folder, including subfolders if any) without the extension.

Example: {"TexturePath"{Str[Routes]}}

No Default Value
{"Visible"{Bool[]}} Determines if the Entities/Floors are visible (1) or not (0). {"Visible"{Bool[1]}}
{"Rotation"{Int[]}} Determines the rotation of the Entities/Floors.

Possible values:

  • 0 - 0 degrees (North)
  • 1 - 270 degrees (West)
  • 2 - 180 degrees (South)
  • 3 - 90 degrees (East)
No Default Value
{"SeasonTexture"{Str[]}} Determines the color palette texture file that will be applied to Entities/Floors (relative to the Seasons folder inside the Textures folder, including other subfolders if any) without the extension.

Example: {"SeasonTexture"{Str[PlantColoring]}}
Note that only the parts of the Entity/Floor texture that use the following colors will be replaced:

#FFFFFF   #AAAAAA
#555555   #000000
No Default Value

Types of Entities

A list of the possibilities for the "EntityID" tag listed above.

EntityID Description Possible "AdditionalValue" Argument Values
WallBlock A basic entity (doesn't have to be wall). Can only be viewed from the outside of the object (or from one side if it's a flat object). Doesn't use the AdditionalValue tag
Cube or AllSidesObject Similar to a WallBlock but can also be viewed from the inside of the object (or from both sides if it's a flat object). Doesn't use the AdditionalValue tag
WallBill An entity that always shows one texture and rotates to face the Player. Doesn't use the AdditionalValue tag
SignBlock An entity that either displays text or activates a script when the Player interacts with it. Depending on what the "Action" tag is set to, the "AdditionalValue" tag is interpreted differently:
  • 0 - Displays the value of the "AdditionalValue" tag as a regular text message
  • 1 - Activates the script file at the path specified in the "AdditionalValue" tag.
  • 2 - Converts the value of the "AdditionalValue" tag to a script.
WarpBlock An entity that transports the Player to a different map and/or different position. MapFilePath,X_Position,Y_Position,Z_Position,AmountOfTurns,AccessDirections
  • MapFilePath (Str) = The path to the map file including ".dat" extension, relative to the Content\Maps\ folder
  • X_Position, Y_Position, Z_Position (Int) = three-dimensional position to warp to (be sure to add 0.1 to the "Y_Position" argument)
  • AmountOfTurns (Int) = Number of 1/4 turns to turn the Player after warping
  • AccessDirections (IntArr) = Directions from which the Player can access the warpblock, seperated by "|".

Example: {"AdditionalValue"{Str[Folder\Map.dat,8,0.1,-1,0,1|2|3]}}

SlideBlock Functions like a staircase, makes the Player go 1 unit upward and 2 units forward. Doesn't use the AdditionalValue tag
Step Functions as a ledge that the Player can jump over. Doesn't use the AdditionalValue tag
ApricornPlant A plant that the Player can get Apricorns from. An Integer number defining which Apricorn the plant has.
  • 0 - White
  • 1 - Black
  • 2 - Pink
  • 3 - Blue
  • 4 - Red
  • 5 - Green
  • 6 - Yellow
LoamySoil A spot to grow a berry in. Doesn't use the AdditionalValue tag
CutTree An entity that the Player can use the field move Cut on to temporarily remove it. Doesn't use the AdditionalValue tag
HeadbuttTree An entity that the Player can use the field move Headbutt on, after which the Player may encounter a wild Pokémon. Doesn't use the AdditionalValue tag
Grass When the Player walks through this entity, the Player may encounter a wild Pokémon, generally used for Tall Grass. Doesn't use the AdditionalValue tag
ItemObject An Item that can be picked up by the Player. Depending on what the "Action" tag is set to, the entity functions differently:
  • 0 - The visibility of the item is the same as the "Visible" tag of the entity. The Player cannot walk through the entity.
  • 1 - The item is invisible and the Player can walk through the entity.
  • 2 - Unless the Player has a Mega Bracelet, the item will be invisible, the Player will be able to walk through the entity and the Player won't be able to pick it up. After obtaining the Mega Bracelet, sparkles will appear at the location of the entity. The animation used for the sparkles can be changed by using the "AnimationData" tag listed above.
int,int - The first Integer number is the unique identifier for the item on that map (each ItemObject entity should have a unique identifier).

The second Integer number is the item's ID (check the Items page for possible item IDs).

ScriptBlock A special entity that can do various things, like triggering a script or displaying a text message when the Player walks through it or interacts with it.

If you don't want the ScriptBlock to be activated from all directions, you can add the accepted Player rotations to the "AdditionalValue" tag, separated with commas before the actual script/text message.
Example: {"AdditionalValue"{Str[0,2,PathToScript]}}

Depending on what the "Action" tag is set to, the "AdditionalValue" tag is interpreted differently:
  • 0 - Activates the script file specified in the "AdditionalValue" tag when walked on. Automatically invisible.
  • 1 - Activates the script file specified in the "AdditionalValue" tag when clicked on.
  • 2 - Displays the value of the "AdditionalValue" tag as a regular text message when clicked on.
  • 3 - Converts the value of the "AdditionalValue" tag to a script.
  • 4 - Activates the script file specified in the "AdditionalValue" tag when walked on. Can also be visible.
SmashRock An entity that the Player can use the field move Rock Smash on to temporarily remove it. May also cause the Player to encounter a wild Pokémon. Doesn't use the AdditionalValue tag
StrengthRock An entity that the Player can use the field move Strength on to be able to push it to another location. Doesn't use the AdditionalValue tag
StrengthTrigger An entity that activates a script when a StrengthRock entity is pushed onto it. Bool,Bool,Str - The first boolean value determines if the StrengthRock entity is removed immediately when it touches the entity. The second boolean value determines if the StrengthRock entity will no longer be loaded when entering the map. The string value is the script file that is activated when the StrengthRock entity touches the StrengthTrigger entity.
RockClimbEntity An entity that the Player can use the field move Rock Climb on to get to hard to reach locations. Doesn't use the AdditionalValue tag
TurningSign An entity that spins at the center (doesn't have to be sign).

Depending on what the "Action" tag is set to, the entity will spin on different axes.

  • 0 - The entity will spin on the Y-axis.
  • 1 - The entity will spin on the X-axis.
  • 2 - The entity will spin on the Z-axis.
An Integer number specifying how fast the entity spins.
Water An entity that the Player can use the field move Surf on. The water animation consists of 4 groups of 3 frames, one group for each rotation.

Important to note is that the water animation overrides the first index (0) of the "TextureIndex" tag.

FrameX,FrameY,FrameWidth,FrameHeight,VerticalSheet

The first 4 Integer numbers define the first frame of the first animation group and every other frame will be relative to that frame.
Usually, the groups are placed in a horizontal sequence, but if you add the optional fifth Integer number (VerticalSheet) and set it to 1, the groups of 3 frames can be placed in a vertical order. Example: {"AdditionalValue"{Str[0,0,16,16,1]}}

Waterfall An entity that the Player can use the field move Waterfall on to climb it. The waterfall animation consists of a horizontal sequence of 3 frames by default.

Important to note is that the animation overrides the first index (0) and the second index (1) of the "TextureIndex" tag. Index 0 = Waterfall animation, Index 1 = Regular water animation.

FrameX_WaterFall,FrameY_WaterFall,FrameWidth_WaterFall,FrameHeight_WaterFall,FrameX_RegularWater,FrameY_RegularWater,FrameWidth_RegularWater,FrameHeight_RegularWater,VerticalSheet

The first 4 optional values define the first frame of the first regular water animation group and every other frame will be relative to that frame.
Usually, the groups are placed in a horizontal sequence, but if you add the extra optional 10th Integer number (VerticalSheet) and set it to 1, the groups of 3 frames can be placed in a vertical order.

Whirlpool An entity that the Player can use the field move Whirlpool on to get past it. The whirlpool animation consists of a horizontal sequence of 4 frames.

Important to note is that the whirlpool animation overrides the first index (0) of the "TextureIndex" tag.

FrameX,FrameY,FrameWidth,FrameHeight

The 4 Integer numbers define the first frame of the animation and every other frame will be relative to that frame.

RotationTile Spins the player around until they reach the direction specified in the "AdditionValue" tag.

Depending on the value of the "Action" tag it will or won't spin the player.

  • 0 - Spin the player
  • 1 - Don't spin the player
An Integer number corresponding to the direction to end the spin in.
  • 0 - 0 degrees (North)
  • 1 - 270 degrees (West)
  • 2 - 180 degrees (South)
  • 3 - 90 degrees (East)
DiveTile An entity that the Player can use the field move Dive on. Depending on the value of the "Action" tag, a different dialogue will be shown.
  • 0 = The water seems to be really deep at this point.
  • 1 = Light shines down from the surface.
  • 2 = The boat's shadow is cast upon the ocean floor.
MapFilePath,X_Position,Y_Position,Z_Position,AmountOfTurns
  • MapFilePath (Str) = The path to the map file including ".dat" extension, relative to the Content\Maps\ folder
  • X_Position, Y_Position, Z_Position (Int) = three-dimensional position to warp to (be sure to add 0.1 to the "Y_Position" argument)
  • AmountOfTurns (Int) = Number of 1/4 turns to turn the Player after warping

Depending on the value of the "Action" tag, the distance that the player travels after using the field move changes.

  • 0 = The player warps to the specified map and descends 4 units on the Y-axis. (Be sure to add 4 to the "Y_Position" argument of the warp.)
  • 1 = The player ascends 4 units on the Y-axis before warping to the specified map.
  • 2 = The player ascends 3 units on the Y-axis before warping to the specified map.

Example: {"AdditionalValue"{Str[Folder\Map.dat,8,4.1,-1]}}

AnimatedBlock An entity with textures that can have multiple frames of animation. Requires the "AnimationData" tag, which has to define at least one animation.

Each animation defined in the "AnimationData" tag corresponds to an index in the "TextureIndex" tag (the first animation replaces index 0, the second one 1 etc.).

Needs to be set to the path of the texture to use for the animation(s) (relative to the Textures folder, including subfolders if any) without the extension.

Example: {"AdditionalValue"{Str[Cities\Pallet]}}

Types of Models

A list of the possibilities for the "ModelID" tag listed above. Any number not listed here gets treated as 0. The "TextureIndex" column shows what faces correspond to the values of the "TextureIndex" tag.

ModelID Model Name Description TextureIndex (Directions relative to default rotation 0)
0 Floor Model Flat horizontal surface, visible from above. Generally used by Floors.

Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y -0.5z

{"TextureIndex"{IntArr[Top,Top]}}
1 Block Model A cube with 5 sides (without the side facing down). {"TextureIndex"{IntArr[South,South,East,East,West,West,North,North,Top,Top]}}
2 Slope Model A 45 degree slope, generally used by SlideBlock entities (like stairs). {"TextureIndex"{IntArr[Slope,Slope,East,West,South,South]}}
3 Bill Model A flat vertical surface, generally used by WallBill entities (like trees).

Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0z.

{"TextureIndex"{IntArr[South,South]}}
4 Sign Model A cube with 4 sides that is 0.25 units thick on the Z-axis (North/South).

Generally used by SignBlock entities.

{"TextureIndex"{IntArr[South,South,East,East,West,West,North,North]}}
5 Outside Corner Model A 45 degree counter-clockwise (starting from the left-most slope face) slope corner. {"TextureIndex"{IntArr[Straight_West,Straight_South,Slope_East,Slope_North]}}
6 Inside Corner Model A 45 degree clockwise (starting from the left-most slope face) slope corner. {"TextureIndex"{IntArr[Straight_South,Straight_South,Straight_West,Straight_West,Straight_East,Slope_North,Straight_North,Slope_East]}}
7 Ledge Model A slope that is 0.25 units tall on the Y-axis (Up/Down).

Generally used by Step entities a.k.a. Jump Ledges.

{"TextureIndex"{IntArr[Slope,Slope,East,East,West,West,North,North]}}
8 Ledge Outside Corner Model A counter-clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down).

Generally used by Step entities a.k.a. Jump Ledges.

{"TextureIndex"{IntArr[Straight_West,Straight_West,Straight_South,Straight_South,Slope_East,Slope_East,Slope_North,Slope_North]}}
9 Water Edge Model A slope that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.

Only works when used with the EntityID tag set to "Water".
TextureIndex 0 is reserved for the water animation.

{"TextureIndex"{IntArr[Water,Water,Slope,Slope]}}
10 Water Edge Inside Corner A clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.

Only works when used with the EntityID tag set to "Water".
TextureIndex 0 is reserved for the water animation.

{"TextureIndex"{IntArr[Water,Water,Slope_North,Slope_North,Slope_West,Slope_West]}}
11 Water Edge Outside Corner A counter-clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down) combined with a water surface.

Only works when used with the EntityID tag set to "Water".
TextureIndex 0 is reserved for the water animation.

{"TextureIndex"{IntArr[Water,Water,Straight_West,Straight_South,Slope_East,Slope_North]}}
12 Cube Model A cube with 6 sides. The bottom side is only visible with the EntityID tag set to "Cube" or "AllSidesObject". {"TextureIndex"{IntArr[South,South,East,East,West,West,North,North,Top,Top,Bottom,Bottom]}}
13 Cross Model Two flat vertical surfaces intersecting in their centers at 90 degree angles.

The second surface is only visible with the EntityID tag set to "Cube" or "AllSidesObject".
Important to note that the second surface is actually made out of two rectangles which are each 0.5 unit wide.

{"TextureIndex"{IntArr[1stSurface,1stSurface,2ndSurface_South,2ndSurface_South,2ndSurface_North,2ndSurface_North]}}
14 Double Floor Model A flat horizontal surface, visible from above, with another flat horizontal surface 1 unit higher on the Y-axis. {"TextureIndex"{IntArr[LowestSurface,LowestSurface,HighestSurface,HighestSurface]}}
15 Pyramid Model Four sloped triangles placed against each other in a pyramid shape. {"TextureIndex"{IntArr[West,South,East,North]}}
16 Stairs Model A somewhat complex model that resembles two steps of a staircase.

In the "TextureIndex" column, Step1 is the lowest part of the stairs and Step2 is the highest part of the stairs on the Y-axis (Up/Down).
Apart from Step2's west and east sides, which are 0.5 units in both width and height, and the backside, which is 1 unit in both width and height, the rest of the surfaces are 1 by 0.5 units in size.

{"TextureIndex"{IntArr[Step1_South,Step1_South,Step1_Top,Step1_Top,Step2_South,Step2_South,Step2_Top,Step2_Top,BackSide_North,BackSide_North,Step1_West,Step1_West,Step2_West,Step2_West,Step1_East,Step1_East,Step2_East,Step2_East]}}
17 Diagonal Wall Model A flat diagonal vertical surface spreading across the full unit on the Z axis.

Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0z.

{"TextureIndex"{IntArr[SouthEast,SouthEast]}}
18 Half Diagonal Wall Model A flat diagonal vertical surface spreading across half the unit on the Z axis.

Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y -0.25z.

{"TextureIndex"{IntArr[SouthEast,SouthEast]}}
19 Ledge Inside Corner Model A clockwise (starting from the left-most slope face) slope corner that is 0.25 units tall on the Y-axis (Up/Down).

Generally used by Step entities a.k.a. Jump Ledges.

{"TextureIndex"{IntArr[Straight_South,Straight_South,Straight_West,Straight_West,Straight_East,Slope_North,Straight_North,Slope_East]}}
20 Wall Model A flat vertical surface on one side of a single three-dimensional unit, essentially one side of ModelID 1. {"TextureIndex"{IntArr[South,South]}}
21 Ceiling Model Flat horizontal surface, visible from below.

Its coordinates, relative from the center of a single three-dimensional unit, are: 0x 0y 0.5z

{"TextureIndex"{IntArr[Bottom,Bottom]}}

Creating an NPC

{"NPC"{NPC[{"Name"{Str[]}}{"Position"{SngArr[]}}{"ID"{Int[]}}{"TextureID"{Str[]}}{"Scale"{SngArr[]}}{"Collision"{Bool[]}}{"Action"{Int[]}}{"AdditionalValue"{Str[]}}{"Rotation"{Int[]}}{"Visible"{Bool[]}}{"Movement"{Str[]}}{"MoveRectangles"{RecArr[[]]}}{"AnimateIdle"{Bool[]}}{"ModelPath"{Str[]}}]}}
Tag Description Default Argument Value
{"Position"{SngArr[X,Y,Z]}} Determines the three dimensional starting position for the NPC. No Default Value
{"Scale"{SngArr[X,Y,Z]}} Changes the width, height and depth of the NPC. {"Scale"{SngArr[1,1,1]}}
{"TextureID"{Str[TexturePath]}} Determines the texture file of the NPC, relative from "Textures\NPC", without the extension (including subfolders if any).

You can also make the NPC use a Pokémon's texture by setting this value to the national dex number (and optional form) of the Pokémon and adding "[POKEMON|N]" or "[POKEMON|S]" in front of it.
N = Normal. S = Shiny.
Example:

  • {"TextureID"{Str[[POKEMON|S]151]}} will set the texture to that of a shiny Mewtwo
  • {"TextureID"{Str[[POKEMON|N]26_alola]}} will set the texture to that of an Alolan Raichu.
No Default Value
{"Rotation"{Int[0-3]}} Determines the rotation of the NPC.

Possible values:

  • 0 - 0 degrees (North)
  • 1 - 270 degrees (West)
  • 2 - 180 degrees (South)
  • 3 - 90 degrees (East)
No Default Value
{"Action"{Int[0-2]}} Determines how the "AdditionalValue" tag is interpreted:
  • 0 - As text to display when the player interacts with the NPC.
  • 1 - As a script file to execute when the player interacts with the NPC (without extension, relative to "Data\Scripts").
  • 2 - As a script file to activate when the player is a certain distance from the NPC and within line of sight.
No Default Value
{"AdditionalValue"{Str[ScriptPathOrText]}} Contains the text or script to be interpreted as determined by the "Action" tag.

When the value of the "Action" tag is 2, use the following format: {"AdditionalValue"{Str[Distance|ScriptPath]}}

  • Distance (Int) - The distance from the NPC to the player for the script to activate
  • ScriptPath - The path to the script without extension, relative to "Data\Scripts"
No Default Value
{"Name"{Str[name]}} Determines the name of the NPC, which can be used by scripts. No Default Value
{"ID"{Int[ID]}} Determines the scripting ID of the NPC, which can be used to change the NPC's properties. No Default Value
{"Movement"{Str[movement type]}} Determines the type of movement the NPC will do:
  • Still - Does not move or turn.
  • Looking - Turns to random directions.
  • Walk - Randomly turns and walks to a place that it can walk to as determined by the "MoveRectangles" tag.
  • Turning - Turns in a circle.
  • Straight - Walks in a straight line along the edges of the space it can walk on as determined by the "MoveRectangles" tag.
  • PokeBall, or FacePlayer - Always shows the same face to the Player and rotates with the camera, like a WallBill entity.
No Default Value
{"MoveRectangles"{recArr[[X_Origin,Z_Origin,Width,Depth]]}} Determines the spaces that the character can walk in when the "Movement" tag is set to Walk or Straight. No Default Value
{"AnimateIdle"{Bool[]}} Allows the NPC to animate the walk cycle even when standing still. {"AnimateIdle"{Bool[0]}}
{"ModelPath"{Str[]}} Determines the 3D Model (in Monogame's .xnb format) that this NPC would use (relative to the Content folder, including subfolders if any) without the extension.

You can find a tool that converts models here: FBX to XNB Converter.
When the NPC changes directions, the model will rotate with it.

{"ModelPath"{Str[]}}

Creating a Shader

{"Shader"{SHA[{"Position"{SngArr[]}}{"Size"{IntArr[]}}]}}{"Shader"{SngArr[]}}{"StopOnContact"{Bool[]}}{"DayTime"{IntArr[]}}
Tag Description Default Argument Value
{"Position"{SngArr[x,y,z]}} Three-dimensional Position for the shader to start from. No Default Value
{"Size"{IntArr[x,y,z]}} Three-dimensional space originating from the position affected by the shader. No Default Value
{"Shader"{SngArr[Red,Green,Blue]}} Determines how much darker or brighter the colors of the entities affected by the Shader should be.

However, instead of ranging from 0 - 255, like with regular RGB colors, each of the color channel values range from -5 to 0 to 5. When a value is below 0, that color channel gets darker. If a value is above 0 that color channel gets brighter. Example: {"Shader"{SngArr[0.5,0.5,0.5]}}

No Default Value
{"StopOnContact"{Bool[]}} Tells the shader if it shouldn't effect faces which have a face between it and the source. No Default Value
{"DayTime"{IntArr[timeIDs]}} A list of Integer numbers (0-3) representing the time of day that the shader will be applied.
  • 0 - Always
  • 1 - Night
  • 2 - Morning
  • 3 - Day
  • 4 - Evening
If this tag is left empty, it will always apply the shader.

Adding an OffsetMap

What is an OffsetMap?

An OffsetMap is a regular map file that can be used to make it seem like two different maps are connected.
Let's say you're on a map called "City", and you have another map called "Route".
While you're on the City map, you could have Route as an OffsetMap next to it so you don't see just the sky at the edge of the map.
One thing to note is that you cannot interact with any entity in an OffsetMap. You can't walk on floors, interact with NPCs, etc.
How often the entities on an OffsetMap are updated is affected by the OffsetMap Quality setting in the options menu.

Template

{"OffsetMap"{MAP[{"Offset"{SngArr[]}}{"Map"{Str[]}}]}}

These are the available tags to define an OffsetMap with.

Tag Description Default Argument Value
{"Map"{Str[MapFile]}} Map to load as the offset, relative from "Data\Maps" (including subfolders if any and the ".dat" extension). No Default Value
{"Offset"{SngArr[x,y,z]}} Position for the offset map to treat as 0,0,0. No Default Value

Adding a Structure

What is a Structure?

A Structure is a regular map file that can be used to place multiple copies of groups of entities more efficiently.
Unlike an OffsetMap, you can interact with any entity on the Structure, as when it's added to the map, it essentially becomes part of the map.
This can be useful for similar looking buildings or anything else that might be useful to reuse in a different place.
Structures are not affected by the OffsetMap Quality setting in the options menu.

Template

{"Structure"{Str[{"Map"{Str[]}}{"Offset"{SngArr[]}}{"AddNPC"{Bool[]}}]}}

These are the available tags to define a Structure with.

Tag Description Default Argument Value
{"Map"{Str[MapFile]}} Map to load as a structure, relative from "Data\Maps" (including subfolders if any and the ".dat" extension). No Default Value
{"Offset"{SngArr[x,y,z]}} Position for the structure to treat as 0,0,0. No Default Value
{"AddNPC"{Bool[value]}} Whether the NPCs (if any) in the structure should also be added. Value can be 1 (true) or 0 (false). {"AddNPC"{Bool[0]}}

.poke files

The .poke files decide which wild Pokémon are available in each map, how they are encountered, at what levels they are, what time of the day they appear, and how often they appear.

Template

{#1|#2|#3|#4|#5,#6}

Explanation

#1

Encounter Method (Int): Determines how the Pokémon is encountered. There are currently 7 options:

  • 0 - Grass/Floor
  • 1 - Headbutt trees
  • 2 - Surf
  • 3 - Old Rod
  • 31 - Good Rod
  • 32 - Super Rod
  • 5 - Rock Smash

#2

Pokémon Identification: The Pokémon Code or the National Dex number of the Pokémon which can also included a form suffix at the end. e.g. "26_alola".

#3

Encounter Chance (Int): Determines how easy it will be to find the Pokémon. The higher the number the more likely it will be. The chance is determined as the individual Pokémon's chance over the sum of all relevant (time and encounter method) chances.

#4

Encounter Time (Int): Determines when this Pokémon will be available. There are 5 options:

  • -1 - All times.
  • 0 - Night.
  • 1 - Morning.
  • 2 - Day.
  • 3 - Evening.

#5

Level Minimum (Int): Determines the minimum level the Pokémon can appear at.

#6

Level Maximum (Int): Determines the maximum level the Pokémon can appear at. If the Pokémon should only appear at one level this number should be the same as #5.

Game Folder
Content ContentPacks GameModes Saves Screenshots Game Executable
Pokemon Data ContentPack Folder GameMode folder Savegame folder Version History
Data Maps Moves Scripts Control Files Content GameMode.dat Party.dat Player.dat Options.dat
poke battle structures V1 V2 trainer worldmap