# Simple Extensions
### @explicitHints true
## {Introduction @showdialog}
Extensions allow Arcade users to easily develop and share parts of their code with others.
In this tutorial, you will be using the ``||corgio:corgio||`` extension to create a simple platformer.
The extension has been already loaded into this tutorial, but you can load the
extension into other projects as shown below.

## {Step 2}
The first thing we'll do is make our corgio.
---
- :paw: Open ``||corgio:Corgi||`` and find
``||variables(corgio):set myCorg to||``
then drag it into the ``||loops(noclick):on start||`` container that's already in the workspace.
---
The corgi should appear on the left side of the screen.
#### ~ tutorialhint
```blocks
//@highlight
let myCorg: Corgio = corgio.create(SpriteKind.Player)
```
## {Step 3}
Now, let's make our sprite figure move left and right with the controller arrow keys.
---
- :paw: Add
``||corgio:make myCorg move left and right with arrow keys||``
and
``||corgio:make myCorg jump if up arrow key is pressed||``
beneath ``||variables(noclick):set myCorg to||``.
#### ~ tutorialhint
```blocks
let myCorg: Corgio = corgio.create(SpriteKind.Player)
//@highlight
myCorg.horizontalMovement()
//@highlight
myCorg.verticalMovement()
```
## {Step 4}
The corgio is a bit boring when it's image doesn't change.
---
- :paw: To fix this, grab
``||corgio:change image when myCorg is moving||``
and put it somewhere under
``||variables(noclick):set myCorg to||``.
#### ~ tutorialhint
```blocks
let myCorg: Corgio = corgio.create(SpriteKind.Player)
myCorg.horizontalMovement()
myCorg.verticalMovement()
//@highlight
myCorg.updateSprite()
```
## {Step 5}
Let's add a scene to the game using a tilemap.
~hint What's a tilemap? 🤷🏽♀️
---
A tilemap is a game map that's made of individual tiles. You can add images to spaces,
then make some of those spaces solid using walls. A tilemap has been added to this tutorial for you, but
you can also make your own!
- Set the size of the tilemap to ``20x8``
- Draw some platforms for the corgi to stand on
- Click the wall icon to cover your platforms with red walls
(Don't worry, the red overlay won't show up while you're playing your game.)

hint~
---
- :tree: From the ``||scene:Scene||`` category,
Add
``||scene:set tilemap to||``
into the ``||loops(noclick):on start||`` container.
#### ~ tutorialhint
```blocks
let myCorg = corgio.create(SpriteKind.Player)
myCorg.horizontalMovement()
myCorg.verticalMovement()
myCorg.updateSprite()
//@highlight
tiles.setTilemap(tilemap`level_0`)
```
## {Step 6}
We need the camera to follow the corgio as it leaves the screen.
---
- :paw: Grab
``||corgio:make camera follow myCorg left and right||``
and put it somewhere under
``||variables(noclick):set myCorg to||``.
#### ~ tutorialhint
```blocks
let myCorg = corgio.create(SpriteKind.Player)
myCorg.horizontalMovement()
myCorg.verticalMovement()
myCorg.updateSprite()
tiles.setTilemap(tilemap`level_0`)
//@highlight
myCorg.cameraFollow()
```
## {Step 7}
At the end of the tilemap, we need a column that is a different tile than the other tiles in the map.
This will represent the goal for the player.
---
- :mouse pointer: Click on the tilemap icon inside of the
``||scene(noclick):set tilemap to||``
block that's in the workspace.
- :paint brush: Add a complete column of tiles that aren't used anywhere else in the
game...but **don't** add a wall overlay! The corgi needs to be able to go through these tiles.

#### ~ tutorialhint

## {Step 8}
Let's trigger a **WIN** when the corgi gets to the new column.
---
- :tree: Open ``||scene:Scene||`` and add
``||scene:on sprite of kind Player overlaps [ ] at location||``
to the workspace.
- :mouse pointer: Click the checkered tile and find the tile you used as a goal.
- :circle: Inside of the overlap event container, add a
``||game:game over ||``
block.
- :mouse pointer: Click ``LOSE`` to change it to ``WIN``.
#### ~ tutorialhint
```blocks
//@highlight
scene.onOverlapTile(SpriteKind.Player, sprites.builtin.coral0, function (sprite, location) {
game.gameOver(true)
})
let myCorg = corgio.create(SpriteKind.Player)
myCorg.horizontalMovement()
myCorg.verticalMovement()
myCorg.updateSprite()
myCorg.cameraFollow()
tiles.setTilemap(tilemap`level_1`)
```
## {Complete}
**Congratulations!! Your simple platformer is complete! **
See if you can get to the column at the end of the level.
```blockconfig.global
tiles.setTilemap(tilemap`level_0`)
```
```jres
{
"transparency16": {
"data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"mimeType": "image/x-mkcd-f4",
"tilemapTile": true
},
"level_0": {
"id": "level_0",
"mimeType": "application/mkcd-tilemap",
"data": "MTAxNDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDIyMjIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMjIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMjIyMjIyMjIyMDIwMDAwMDAwMA==",
"tileset": [
"myTiles.transparency16",
"sprites.builtin.oceanDepths4",
"sprites.builtin.oceanDepths0"
]
},
"level_1": {
"id": "level_1",
"mimeType": "application/mkcd-tilemap",
"data": "MTAxNDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAyMDIwMjAwMDMwMDAxMDEwMTAxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDIwMjAyMDIwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDMwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDIwMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMjIyMDAyMDIyMjIwMjAwMDAwMDIwMDAwMDAwMDAwMDAwMjIyMjIyMjIwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAyMjIyMjIyMjIyMjIwMDAwMDAwMA==",
"tileset": [
"myTiles.transparency16",
"sprites.builtin.oceanDepths4",
"sprites.builtin.oceanDepths0",
"sprites.builtin.coral0"
]
},
"*": {
"mimeType": "image/x-mkcd-f4",
"dataEncoding": "base64",
"namespace": "myTiles"
}
}
```
```package
corgio
```