• ✨ ARCHIVE MODE ✨
    The forum has now been set to read-only mode, no new posts, resources, replies etc will not be possible.
    We recommend you join our Discord server to get real-time response: Discord Invite Link

What Was This Made In?

Status
Not open for further replies.

exonaut

Starting Trainer
What programming language and graphics framework was this game made in? Also I was wondering how the scripting language and encryption was done. Like how and what the script file uses things like @Text
 

DaMick

Pokémon Ranger
Pokemon 3D is made in VisualBasic and XNA Framework. The maps are in a special language called "AML", it´s developed by nilllzz himself. The scripts are in a special language too (but I don´t know its name), also developed by nilllzz.
 

DracoHouston

Kolben Developer
Contributor
there is currently no encryption on anything, including saves, but we have some plans for protecting them from casual edits (not much you can do to make cheating impossible without making things too hard for everyone).

so far the plans for game data is its all just there in plaintext and moddable, i would like to have consistency checks on these files and have peers in coop check eachother for tampered files, but part of the idea of having the data out there like that is so people can add their own content. its something i'd like to see supported even more.once the editor can actually make maps from scratch (its nearly ready) i want to make it the full IDE for pokemon 3d modding and development. texture importing, pokemon definition authoring, scripting (with at least being able to pick out floor tiles to move to and maybe let you execute a script on an NPC in the 3d view so you can preview it), creating move particle systems, importing npc and pokemon sprites and so on
 

DracoHouston

Kolben Developer
Contributor
to give you some insight into how AML (the map format's name apparently?) works, all it does is read the line as a string and splits it into tokens, and does that over and over until it gets the basic parts of it, for example, this is an arbitrary wall i copied from sprout tower some time for my test map
{"EntityField"{ENT[{"Size"{intArr[4,1]}}{"EntityID"{str[WallBlock]}}{"Position"{sngArr[3,0,0]}}{"TexturePath"{str[WoodTower]}}{"Textures"{recArr[[16,16,16,16]]}}{"TextureIndex"{intArr[0,0,0,0,0,0,0,0,0,0]}}{"Collision"{bool[1]}}{"ModelID"{int[1]}}{"Action"{int[0]}}{"Rotation"{int[0]}}]}}

so the game will read that whole thing as 1 line, then it finds out
-its an entity field
-its size is 4,1, because "Size" is an integer array (intarr) with the elements 4 and 1
-its making wall blocks, because EntityID is a string (str) with the value "WallBlock"
-its position is 3x,0y,0z because its "Position" subtag contains an array of singles (sngArr) with the elements 3.0, 0.0, 0.0
and so on for all the variables

-texture path is the name of the xnb file containing the texture/texture atlas you want, in the /Pokemon/Content/Textures/ folder, without the .xnb at the end. its a string
-textures is an array of rectangles containing the parts of the source texture (set by texture path) you want. if you want to have more than 1 texture you have something like "[0,0,16,16][16,0,16,16]" as the value, there are NO commas between elements in a rectangle array, they are delimited by []
-textureindex sets various parts of the entiy's model to use textures you set in 'Textures'. if you only have 1 texture this must be all 0 or the game will crash, lol
-collision and visible are self explanatory. 1 for true 0 for false
-modelid tells the engine what 'model' to use, these aren't external files you can import, they're just a set of points for the triangles nilllzz has set up to create several basic shapes he needs. i dont know the exact range of values for this off hand but 1 is a cube
-different models require different length texture indexes because some have less triangles than others. for billboards (sprites are textured planes that face the camera at all time in 3d games) you only need 2, so [0,0]
-action is another index thing, for npcs 0 is say what is stored in 'additionalvalue' and 1 is execute the script with the name set in additionalvalue.
-rotation is an integer from 0-3 that makes the object rotate 90 degrees on its y axis. 0 = 0, 1 = 90, 2 = 180, 3 = 270
-npcs set their sprite with a string called TextureID which is the name of the xnb containing its spritesheet in /Pokemon/Content/Textures/NPC/

various parts of the level loading process read these values and make the entity described in the tags.

if you are mapping in a text editor, when i doubt, just find an example thats close to what you want from an official map, copy/paste its tag into your map and edit the subtags to suit instead of writing the whole tag out yourself
 
Status
Not open for further replies.
Top