diff --git a/docs/maps/api-controls.md b/docs/maps/api-controls.md
new file mode 100644
index 00000000..dcb0f17b
--- /dev/null
+++ b/docs/maps/api-controls.md
@@ -0,0 +1,29 @@
+{.section-title.accent.text-primary}
+# API Controls functions Reference
+
+### Disabling / restoring controls
+
+```
+WA.controls.disablePlayerControls(): void
+WA.controls.restorePlayerControls(): void
+```
+
+These 2 methods can be used to completely disable player controls and to enable them again.
+
+When controls are disabled, the user cannot move anymore using keyboard input. This can be useful in a "First Time User Experience" part, to display an important message to a user before letting him/her move again.
+
+Example:
+
+```javascript
+WA.room.onEnterZone('myZone', () => {
+ WA.controls.disablePlayerControls();
+ WA.ui.openPopup("popupRectangle", 'This is an imporant message!', [{
+ label: "Got it!",
+ className: "primary",
+ callback: (popup) => {
+ WA.controls.restorePlayerControls();
+ popup.close();
+ }
+ }]);
+});
+```
diff --git a/docs/maps/api-reference.md b/docs/maps/api-reference.md
index 2c73e6a9..694ce8a5 100644
--- a/docs/maps/api-reference.md
+++ b/docs/maps/api-reference.md
@@ -3,158 +3,7 @@
- [Navigation functions](api-nav.md)
- [Chat functions](api-chat.md)
-
-### Detecting when the user enters/leaves a zone
-
-```
-onEnterZone(name: string, callback: () => void): void
-onLeaveZone(name: string, callback: () => void): void
-```
-
-Listens to the position of the current user. The event is triggered when the user enters or leaves a given zone. The name of the zone is stored in the map, on a dedicated layer with the `zone` property.
-
-
-
-
-
-* **name**: the name of the zone, as defined in the `zone` property.
-* **callback**: the function that will be called when a user enters or leaves the zone.
-
-Example:
-
-```javascript
-WA.onEnterZone('myZone', () => {
- WA.sendChatMessage("Hello!", 'Mr Robot');
-})
-
-WA.onLeaveZone('myZone', () => {
- WA.sendChatMessage("Goodbye!", 'Mr Robot');
-})
-```
-
-### Opening a popup
-
-In order to open a popup window, you must first define the position of the popup on your map.
-
-You can position this popup by using a "rectangle" object in Tiled that you will place on an "object" layer.
-
-
-
-
-
-
-
-
-
-
-```
-openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup
-```
-
-* **targetObject**: the name of the rectangle object defined in Tiled.
-* **message**: the message to display in the popup.
-* **buttons**: an array of action buttons defined underneath the popup.
-
-Action buttons are `ButtonDescriptor` objects containing these properties.
-
-* **label (_string_)**: The label of the button.
-* **className (_string_)**: The visual type of the button. Can be one of "normal", "primary", "success", "warning", "error", "disabled".
-* **callback (_(popup: Popup)=>void_)**: Callback called when the button is pressed.
-
-Please note that `openPopup` returns an object of the `Popup` class. Also, the callback called when a button is clicked is passed a `Popup` object.
-
-The `Popup` class that represents an open popup contains a single method: `close()`. This will obviously close the popup when called.
-
-```javascript
-class Popup {
- /**
- * Closes the popup
- */
- close() {};
-}
-```
-
-Example:
-
-```javascript
-let helloWorldPopup;
-
-// Open the popup when we enter a given zone
-helloWorldPopup = WA.onEnterZone('myZone', () => {
- WA.openPopup("popupRectangle", 'Hello world!', [{
- label: "Close",
- className: "primary",
- callback: (popup) => {
- // Close the popup when the "Close" button is pressed.
- popup.close();
- }
- });
-}]);
-
-// Close the popup when we leave the zone.
-WA.onLeaveZone('myZone', () => {
- helloWorldPopup.close();
-});
-```
-
-### Disabling / restoring controls
-
-```
-disablePlayerControls(): void
-restorePlayerControls(): void
-```
-
-These 2 methods can be used to completely disable player controls and to enable them again.
-
-When controls are disabled, the user cannot move anymore using keyboard input. This can be useful in a "First Time User Experience" part, to display an important message to a user before letting him/her move again.
-
-Example:
-
-```javascript
-WA.onEnterZone('myZone', () => {
- WA.disablePlayerControls();
- WA.openPopup("popupRectangle", 'This is an imporant message!', [{
- label: "Got it!",
- className: "primary",
- callback: (popup) => {
- WA.restorePlayerControls();
- popup.close();
- }
- }]);
-});
-```
-
-### Load a sound from an url
-
-```
-loadSound(url: string): Sound
-```
-
-Load a sound from an url
-
-Please note that `loadSound` returns an object of the `Sound` class
-
-The `Sound` class that represents a loaded sound contains two methods: `play(soundConfig : SoundConfig|undefined)` and `stop()`
-
-The parameter soundConfig is optional, if you call play without a Sound config the sound will be played with the basic configuration.
-
-Example:
-
-```javascript
-var mySound = WA.loadSound("Sound.ogg");
-var config = {
- volume : 0.5,
- loop : false,
- rate : 1,
- detune : 1,
- delay : 0,
- seek : 0,
- mute : false
-}
-mySound.play(config);
-// ...
-mySound.stop();
-```
+- [Room functions](api-room.md)
+- [UI functions](api-ui.md)
+- [Sound functions](api-sound.md)
+- [Controls functions](api-controls.md)
diff --git a/docs/maps/api-room.md b/docs/maps/api-room.md
new file mode 100644
index 00000000..dc7a8612
--- /dev/null
+++ b/docs/maps/api-room.md
@@ -0,0 +1,33 @@
+{.section-title.accent.text-primary}
+# API Room functions Reference
+
+### Detecting when the user enters/leaves a zone
+
+```
+WA.room.onEnterZone(name: string, callback: () => void): void
+WA.room.onLeaveZone(name: string, callback: () => void): void
+```
+
+Listens to the position of the current user. The event is triggered when the user enters or leaves a given zone. The name of the zone is stored in the map, on a dedicated layer with the `zone` property.
+
+
+
+
+
+* **name**: the name of the zone, as defined in the `zone` property.
+* **callback**: the function that will be called when a user enters or leaves the zone.
+
+Example:
+
+```javascript
+WA.room.onEnterZone('myZone', () => {
+ WA.chat.sendChatMessage("Hello!", 'Mr Robot');
+})
+
+WA.room.onLeaveZone('myZone', () => {
+ WA.chat.sendChatMessage("Goodbye!", 'Mr Robot');
+})
+```
diff --git a/docs/maps/api-sound.md b/docs/maps/api-sound.md
new file mode 100644
index 00000000..3c57ecae
--- /dev/null
+++ b/docs/maps/api-sound.md
@@ -0,0 +1,34 @@
+{.section-title.accent.text-primary}
+# API Sound functions Reference
+
+### Load a sound from an url
+
+```
+WA.sound.loadSound(url: string): Sound
+```
+
+Load a sound from an url
+
+Please note that `loadSound` returns an object of the `Sound` class
+
+The `Sound` class that represents a loaded sound contains two methods: `play(soundConfig : SoundConfig|undefined)` and `stop()`
+
+The parameter soundConfig is optional, if you call play without a Sound config the sound will be played with the basic configuration.
+
+Example:
+
+```javascript
+var mySound = WA.sound.loadSound("Sound.ogg");
+var config = {
+ volume : 0.5,
+ loop : false,
+ rate : 1,
+ detune : 1,
+ delay : 0,
+ seek : 0,
+ mute : false
+}
+mySound.play(config);
+// ...
+mySound.stop();
+```
diff --git a/docs/maps/api-ui.md b/docs/maps/api-ui.md
new file mode 100644
index 00000000..edda8613
--- /dev/null
+++ b/docs/maps/api-ui.md
@@ -0,0 +1,67 @@
+{.section-title.accent.text-primary}
+# API Room functions Reference
+
+### Opening a popup
+
+In order to open a popup window, you must first define the position of the popup on your map.
+
+You can position this popup by using a "rectangle" object in Tiled that you will place on an "object" layer.
+
+
+
+
+
+
+
+
+
+
+```
+WA.ui.openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup
+```
+
+* **targetObject**: the name of the rectangle object defined in Tiled.
+* **message**: the message to display in the popup.
+* **buttons**: an array of action buttons defined underneath the popup.
+
+Action buttons are `ButtonDescriptor` objects containing these properties.
+
+* **label (_string_)**: The label of the button.
+* **className (_string_)**: The visual type of the button. Can be one of "normal", "primary", "success", "warning", "error", "disabled".
+* **callback (_(popup: Popup)=>void_)**: Callback called when the button is pressed.
+
+Please note that `openPopup` returns an object of the `Popup` class. Also, the callback called when a button is clicked is passed a `Popup` object.
+
+The `Popup` class that represents an open popup contains a single method: `close()`. This will obviously close the popup when called.
+
+```javascript
+class Popup {
+ /**
+ * Closes the popup
+ */
+ close() {};
+}
+```
+
+Example:
+
+```javascript
+let helloWorldPopup;
+
+// Open the popup when we enter a given zone
+helloWorldPopup = WA.room.onEnterZone('myZone', () => {
+ WA.ui.openPopup("popupRectangle", 'Hello world!', [{
+ label: "Close",
+ className: "primary",
+ callback: (popup) => {
+ // Close the popup when the "Close" button is pressed.
+ popup.close();
+ }
+ });
+}]);
+
+// Close the popup when we leave the zone.
+WA.room.onLeaveZone('myZone', () => {
+ helloWorldPopup.close();
+});
+```