by Phantom Creations.

Environment Suite
Welcome to environment suite. This is a new landscaping engine. It has been designed for you to be able to create real world areas for virtual exploration, either in 2D platforming style or full 3D. It comes with no sounds out of the box. Rather, it is designed for you to use your full creativity, and will not limit you to built-in sounds.

The environment player supports the following sound formats: Ogg, wav, flac.
In your environment, you must at least include an environment.txt file. This file tells the program what to do and what to look for.
There are many things you can place in this file, however there are a few things you must include, for the program will not work properly if you don't.
Very important note. Parameters are sepperated with a tab (	).
Let's take a look at the syntax. the parameters of each command you put in this file are tab separated, and each line is a new command. For example. Take this line:
mode	2d
This instructs the program that you would like it to proceed in 2d platforming mode. If you instead want 3d mode, you would type:
mode	3d
This line is not optional, and must be at the top of your script for the program to be able to know what you would like it to continue with.
Here is a list of everything you can spawn or set in environment suite at this time.

maxx	<number>
this sets the maximum x of the map. In otherwords, how far you can go from left to right.
maxy	<number>
sets the maximum Y of the map. In otherwords, how far up (2d) or how far forward (3d) you can go in your map.
maxz	<number> (3D only)
sets the maximum z of your map, how high you can go.
loadsound <filename>
This plays a sound while your environment is loading. Although it will be faded just before the environment loads fully, it is recommended you fade it yourself, as the effect is quite fast, and is exclusively to prevent the sound clicking or popping if we were to stop it.
In regards to this functionality, it is recommended to place this as near as possible to the top of the file, after the above mentioned parameters is recommended. This is exclusively an insert parameter with no plans to wizardize it.
startx	<number>
set the player's start x, in other words, the x position where the player will start out at. Default is 0.
starty <number>
set the player's start y. Same as startx, but with the Y position. Default is 0.
startz	<number> (3d only)
set the player's start z. Default is 0.
echo	<number>
1 for echo steps, 0 for no echo steps. Echo steps play if you're getting close to the edge of a platform without a wall to stop you from falling.
spy	<number>
0 to disable spying, 1 to enable. Spying can be done with shift and arrow keys, if enabled. It will output tiles in the given direction within a range.
camwalls	<number>
1 to allow camera to go through walls, 0 to disallow. If disallowed, the camera will simply bounce off the wall.
spywalls	<number>
1 to allow spier to see through walls, 0 to disallow.
spytiles	<number>
1 to allow spier to see tile changes, 0 to disallow.
spyzones	<number>
1 to allow spier to see zone changes, 0 to disallow.
spysigns	<number>
1 to allow spier to see signs, 0 to disallow.
spydoors	<number>
1 to allow spier to see doors, 0 to disallow.
spypoints	<number>
1 to allow spier to see travel points, 0 to disallow.
walktime	<number in ms>
how fast your character walks. This number is in milliseconds.
runtime	<number in ms>
how fast your character runs (when holding down the control key.) This number is in ms. Do note that it currently subtracts from walktime. So if you wanted to run every 100 milliseconds, and your walktime is 150, you would set runtime to 50.
airtime	<number in ms>
how fast your character can move while in the air. This number is in ms.
jumpheight	<number>
How high your character is able to jump before he comes back down to the ground. This number represents an amount of squares.
jumpsound	<filename>
the sound in your environment that should be triggered when a player jumps. The default is jump.ogg.
fallsound	<filename>
the sound which should be triggered when the player begins to fall. The default is fall.ogg.
signsound	<filename>
the sound of a looping sign. The default is sign.ogg.
signpress	<filename>
the sound of when a player presses enter on a sign. the default is signpress.ogg
wallsound	<string>
the prefix of the wall search. For example, if your wall sounds start with border, then you would set this to border. The default is wall.
panstep	<number>
sets the pan step of your environment, how quickly the sound pans. Default is 22
volstep	<number>
sets the volume step of your environment, how quickly sounds fade away. Default is 1.
behindpitch	<number>
sets the pitch decrease factor of behind and below sounds. Default is 8.
extension	<.extension>
sets the extension of internal sounds, such as platforms. As stated above, available formats are .ogg, .flac or .wav.
airsound	<filename>
set the sound used by the camera to signify an air tile. default is cameraair.ogg
hazardsound	<filename>
set the sound used when a camera encounters a hazard. default is camerahazard.ogg
hardlandtiles	<number>
the amount of tiles required to fall in order to trigger a surface hard land.
coords	<0/1> <0/1>
set if coordinates are read with C or not. 0 is no, 1 is yes. The second parameter is for if tiles should be spoken and is optional. 0 is no, 1 is yes. If both are set to 0, simply the map name will be spoken when c is pressed.
camera	<0/1>
toggle if camera is used on your environment. 0 is no, 1 is yes.
camwalls	<0/1>
set if the camera can go through walls.
canjump<0/1>
toggle if the player can jump on your environment. 0 is no, 1 is yes.
envpassword <value>
This value is only searched for in environment.txt, and is used with environment travelpoints. If this environment has a password and you set up an environment travelpoint, this password must be declared at the end of the line so the engine knows what to send.
Do not use easy to guess passwords!
objects
platform
2d: platform min_x max_x y tile
3d: platform min_x max_x min_y max_y z
this will spawn a platform that the character can walk on. If you want to spawn air, use the air tile name.

block
2d: block min_x max_x min_y max_y tile
3d: block min_x max_x min_y max_y min_z max_z tile
spawns a block of tiles in the specific area. Useful for creating walls or staircases. If you want to spawn a block of air, use the air tile name.

zone
2d: zone min_x max_x min_y max_y text
3d: zone min_x max_x min_y max_y min_z max_z text
spawns a zone. This zone, when entered, will speak to alert the player where they are. For example: Mall entrance. Zone text may contain spaces.
room
2d: room min_x max_x min_y max_y tile border zone
3d: room min_x max_x min_y max_y min_z max_z tile border zone
This sets up a basic structure for a room, with an optional zone, so if you wanted to make adjustments to the entire room structure without editing lines manually.
This feature is experimental and has the following things that you must be aware of.
It has no regard to it's binding box.
It will insert padding 1 left, 1 right, 1 backward, 1 forward, 1 down, and the last two of a y or z will be the room's ceiling, with padding reflected based on current environment mode.
It can not be used to set up a room with objects in it, that is up to the designer to perform manually.
hazard
2d: hazard min_x max_x min_y max_y die_sound loop_sound.
3d: hazard min_x max_x min_y max_y min_z max_z die_sound loop_sound.
spawns a hazard. If the player lands on this hazard, they instantly die. If a die_sound is defined, it will play, then the player is teleported to last saved checkpoint, if any
checkpoint
2d: checkpoint x y loopsound retrievesound
3d: x y z loopsound retrievesound
Spawns a checkpoint at the given coordinates and specified sounds. When the player dies and this gets picked up, they will restart at this position. If you define multiple checkpoints, the last picked up checkpoint will be where the player next starts when they die. If you don't want any of the two sounds defined, just leave it at none.
item
2d: item x y name friendly_name loopsound retrievesound
3d: item x y z name friendly_name loopsound retrievesound
An item can be used to unlock a door. It is possible to use the same item to unlock multiple doors. The difference between name and friendly name is friendly_name is what your object will appear as, and name is an internal name you give the object. Example. If you define an item as key1, and with a friendly_name as old_key, internally you will use the name key1 when setting up elements that can use items, though to the player, it will appear as old_key.
timer
2d: min_x max_x min_y max_y interval mode firesound affectedsound value
3d: min_x max_x min_y max_y min_z max_z interval mode firesound affectedsound value
This sets up a timer, which can either subtract health (mode 1), or add health (mode 2).
The fire_sound is the sound that is played when this timer restarts, and affectedsound is the sound that is played when the player is within the binding box, both can be set to none.
The value is by how much the timer adjusts health. Example. If you define a timer in mode 1, subtract health, and set it's value to 50, every elapse of this timer when the player is in range will subtract 50 health points, not percent.
trigger.
2d: min_x max_x min_y max_y collision_mode collision_action collision_sound value repeat_times
3d: min_x max_x min_y max_y min_z max_z collision_mode collision_action collision_sound value repeat_times
Triggers are the most complex areas of the engine itself. With triggers there are many things you can set and induce. Triggers have 4 collision modes:
0 step. If the player steps into it.
1 land. If the player lands into it.
2 hardland. If the player hardlands into it.
3 both land and hardland. Will catch either event.
4 Enters coordinates, regardless of how the player got there.
The collision actions include:
1 increment health by value.
2 decrement health by value
3 increment jump height by value
4 decrement jump height by value
5 increment walk speed by value
6 decrement walk speed by value.
7 set walk time to value
8 set jump height to value
9 induce jumping, use with caution!
10 set jumping to value, should be 0 or 1.
sign
2d: sign x y text
3d: sign x y z text
spawns a sign. These make a beeping sound and when stood on and enter is pressed, you will be told the text of the sign. The sign text may contain spaces.

signcustom
2d: signcustom x y sound presssound text loopsound
3d: signcustom x y z sound presssound text loopsound
spawns a sign with a custom press and loop sound. This allows you to spawn signs with a sound different to the default press and loop sounds. If you set sound to 0, there will be no sound.
Elevator_panel
2d: min_x max_x min_y max_y speed startsound movesound stopsound floor_indicator_sound maximum_floors floorstep
3d: min_x max_x min_y max_y min_z max_z speed startsound movesound stopsound floor_indicator_sound maximum_floors floorstep
If you want a highly detailed elevator, though don't want to create the hundreds of doors it would take, this is the object you use for this purpose. The speed is the speed at which the elevator moves up or down. Start, moving and stop are for when the elevator begins to move, is moving and comes to a stop. The floor_indicator_sound is for when the elevator passes or arrives at a floor, and is usually a ding, or can be silent. Max_floors is the amount of floors this elevator can service at any given time, and floor_step is the space between floors.
You are  still responsible for building the underlying structure for the elevators for each floor. Please note, stacking elevators on top of each other is not recommended. It is possible to build multiple elevators for different areas of your environment, for instance if you wanted a service elevator to service all the floors in your environment, and a guests only elevator to service up to a certain floor, though it is not possible to omit floors within a given range. Example. If you built a guest elevator to service floors 1 through 5, you could not then omit floor 3. You could, however, lock the exit door to these floors behind an item if you had no choice.
door
2d: door x y dest_x dest_y loopsound opensound closesound movesound speed auto locked item lockedsound unlocksound unlocktime
3d: door x y z dest_x dest_y dest_z loopsound opensound closesound movesound speed auto locked item lockedsound unlocksound unlocktime
spawns a door, which the user can press enter on to be moved to a new spot on your map. If speed is set to -1, it will automatically move to the destination once pressed enter on, otherwise it moves gradually. If auto is set to 1, the door will move you as soon as you step on it. If you don't want a move sound, set it to "none". You can also lock a door such that an item would be required to unlock it.

belt
2d: belt min_x max_x min_y max_y speed dir tile
3d: belt min_x max_x min_y max_y min_z max_z speed dir tile
Spawn a conveyer belt. Directions: 1=left, 2=right, 3=up in Y, 4=down in Y, 5=up in z, 6=down in z.

amb
2d: amb min_x max_x min_y max_y filename (pitch) (volume)
3d: amb min_x max_x min_y max_y min_z max_z filename (pitch) (volume)
Spawns a looping ambience in the selected part of the map. Pitch is optional, and 100 is normal, anything lower is lower and anything higher is higher. Volume is also optional, but you must specify a pitch (100) before the volume. 0 is normal, lower is lower. You cannot go higher.

ramb
2d: ramb min_x max_x min_y max_y min_time max_time base_filename min_number max_number extension
3d: ramb min_x max_x min_y max_y min_z max_z min_time max_time base_filename min_number max_number extension
Spawns an area in which random ambiences with the given criteria will play. An example line would look like this
ramb 0 50 0 50 0 10 800 1400 bird 1 2 .ogg
This line would play a random from the files bird1.ogg and bird2.ogg at the positions between 0 and 50 at a random time between 800 and 1400 ms.

pannable
2d: pannable x y soundname (pitch) (volume)
3d: pannable x y z soundname (pitch) (volume)
Spawns a single square looping sound on the map. Pitch is optional, same with volume.

walkspeed
2d: walkspeed min_x max_x min_y max_y speed
3d: walkspeed min_x max_x min_y max_y min_z max_z speed
Set a specific walk speed in an area of your map. useful for rivers and other such things.

tilespeed
tilespeed tilename speed
allows you to set a walk speed on a per tile basis. Coordinate based walk speeds take effect before tile based walkspeeds do, so if a coordinate based walk speed is encountered it will take effect regardless.

travelpoint
2d: travelpoint x y newfilename dest_x dest_y dest_z auto text
3d: travelpoint x y z newfilename dest_x dest_y dest_z text
Travel to a new map, from within this environment. Filename is the file inside the environment which will load the new environment. This is useful for environments who want to share sounds and resources. If auto is 1, the travel point will automatically activate. Otherwise, it will require an enter press.

envtravelpoint
2d: envtravelpoint x y newfilename newenvname dest_x dest_y dest_z auto text
3d: travelpoint x y z newfilename newenvname dest_x dest_y dest_z auto text
Travel to a new map, from within a different environment. Filename is the file inside the environment which will load the new environment. The default is environment.txt and you should use this name if you want to load the new environment with a default set. The new name of the environment must contain the .env extension. the auto flag applies from the last command. If the destination environment requires a password, enter it at the end of the line.
Surface sound names.
In order to create surfaces, you must name your files as follows:
surfacehardland.extension: a hard land sound for your surface.
surfaceland.extension: A land sound for your surface.
surfacestep(1,5).extension: 5 step sounds for your surface.
surfacejump.extention: Is optional, and is the sound for when you jump off of one particular surface.
Keys for exploring an environment
Once you load an environment, here are the keys you may use.
left, right, up, and down arrows: Walk
In 3D mode, use page up and down to climb. Alternatively, use I and K
hold control with these keys to run.
hold shift with these keys to use the spyer, which will tell you what's around you.
hold G with these keys to move your camera around.
press space to jump.
in 3D mode, use Q and E to turn in 45 degree angles.
In 3D Mode, press F to check your direction.
press c, if supported in your environment, to check the coordinates.
Press enter to activate an interactable object, such as a door, an elevator panel, etc.
Press F5 to refresh/recompile an environment if you have it's content.
Press P to activate the builder. Note: Still in very early beta.

Other things
You can set Environment Suite to open environments from explorer. When it asks you what you would like to load the environment (.env) with, browse for environment suite and it will load the environments when you press enter on them from explorer.
You can specify random numbers as parameters for any function with the following syntax:
random(min,max)
Example: random(1,5)
tips for good trigger placement.
Although you can put a trigger almost anywhere, here are a few things that might help you make even better use of them.
In most cases, a trigger should be on a surface the player will be landing on. It is very possible to place a trigger in the air, you could use this to set the player's jump hight back to a smaller value before the land.
Triggers with opposing actions should never overlap.
In the event you have a set or one single trigger with limited retrigger and the player runs out, you will need a reset element of sorts, such as a die button. Create a hazard out of range of the player, ensure there's a checkpoint nearby they could restore to and add either a travelpoint or a door that takes them to this hazard. The act of death itself causes all triggers to reset.
help and contact.
Phantom creations can be reached in the following ways:
twitter: @phCrafting
e-mail: hello@phantomcrafting.com.
Please allow up to 48 hours if there is initially no response.
Credits:
These awesome people helped with env suite in one way or another.
NS Studios. He's got the horses in the bag!
x0. We still need to know can a cat purch on the ground?
Ty went wee wee wee all the way thud! Oopse?
Amy. Kept me sane during the tough times of this project and helped recode some functions.
Mason Armstrong. For coding the core of this project.
Have fun, and remember, be creative!