pxt-common-packages 9.5.4 → 9.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/built/common-sim.d.ts +40 -0
  2. package/built/common-sim.js +93 -1
  3. package/libs/azureiot/built/debug/binary.js +461 -461
  4. package/libs/base/sim/core.ts +1 -1
  5. package/libs/color/built/debug/binary.js +8 -8
  6. package/libs/color-sensor/built/debug/binary.js +8 -8
  7. package/libs/controller/built/debug/binary.js +6864 -6864
  8. package/libs/controller---none/built/debug/binary.js +6844 -6844
  9. package/libs/datalogger/built/debug/binary.js +63 -63
  10. package/libs/edge-connector/built/debug/binary.js +8 -8
  11. package/libs/esp32/built/debug/binary.js +462 -462
  12. package/libs/game/_locales/game-strings.json +1 -0
  13. package/libs/game/built/debug/binary.js +6784 -6784
  14. package/libs/game/docs/reference/sprites/sprite/follow.md +66 -0
  15. package/libs/game/docs/reference/sprites/sprite/set-bounce-on-wall.md +2 -2
  16. package/libs/game/docs/reference/sprites/sprite-kind.md +70 -0
  17. package/libs/game/docs/reference/tiles/get-neighboring-location.md +123 -0
  18. package/libs/game/docs/reference/tiles/get-tile-location.md +71 -30
  19. package/libs/game/docs/reference/tiles/get-tiles-by-type.md +66 -32
  20. package/libs/game/docs/reference/tiles/location.md +246 -0
  21. package/libs/game/docs/reference/tiles/place-on-random-tile.md +54 -21
  22. package/libs/game/docs/reference/tiles/place-on-tile.md +88 -0
  23. package/libs/game/docs/reference/tiles/set-current-tilemap.md +90 -0
  24. package/libs/game/docs/reference/tiles/set-tile-at.md +47 -30
  25. package/libs/game/docs/reference/tiles/set-tilemap.md +90 -0
  26. package/libs/game/docs/reference/tiles/set-wall-at.md +67 -68
  27. package/libs/game/docs/reference/tiles/tile-at-location-equals.md +97 -0
  28. package/libs/game/docs/reference/tiles/tile-at-location-is-wall.md +98 -0
  29. package/libs/game/docs/reference/tiles/tilemap.md +145 -0
  30. package/libs/game/multiplayer.cpp +25 -0
  31. package/libs/game/multiplayer.ts +24 -0
  32. package/libs/game/pxt.json +3 -1
  33. package/libs/game/scene.ts +1 -0
  34. package/libs/game/sim/multiplayer.ts +132 -0
  35. package/libs/game/sprite.ts +2 -1
  36. package/libs/game/spritekind.ts +1 -0
  37. package/libs/game/tilemap.ts +12 -11
  38. package/libs/lcd/built/debug/binary.js +8 -8
  39. package/libs/light-spectrum-sensor/built/debug/binary.js +8 -8
  40. package/libs/lora/built/debug/binary.js +8 -8
  41. package/libs/matrix-keypad/built/debug/binary.js +8 -8
  42. package/libs/mqtt/built/debug/binary.js +176 -176
  43. package/libs/net/built/debug/binary.js +176 -176
  44. package/libs/net-game/built/debug/binary.js +8372 -8372
  45. package/libs/palette/built/debug/binary.js +6782 -6782
  46. package/libs/pixel/built/debug/binary.js +8 -8
  47. package/libs/power/built/debug/binary.js +8 -8
  48. package/libs/proximity/built/debug/binary.js +8 -8
  49. package/libs/radio/_locales/radio-strings.json +4 -1
  50. package/libs/radio/built/debug/binary.js +8 -8
  51. package/libs/radio/radio.cpp +1 -0
  52. package/libs/radio/radio.ts +13 -2
  53. package/libs/radio/shims.d.ts +2 -1
  54. package/libs/radio-broadcast/_locales/radio-broadcast-strings.json +2 -1
  55. package/libs/radio-broadcast/built/debug/binary.js +8 -8
  56. package/libs/radio-broadcast/radio-broadcast.ts +2 -0
  57. package/libs/rotary-encoder/built/debug/binary.js +8 -8
  58. package/libs/screen/built/debug/binary.js +50 -50
  59. package/libs/servo/built/debug/binary.js +8 -8
  60. package/libs/sprite-scaling/built/debug/binary.js +6782 -6782
  61. package/libs/storyboard/built/debug/binary.js +6782 -6782
  62. package/package.json +2 -2
@@ -0,0 +1,90 @@
1
+ # set Tilemap
2
+
3
+ Set a tilemap as the current tilemap for the game scene.
4
+
5
+ ```sig
6
+ tiles.setTilemap(null)
7
+ ```
8
+
9
+ A [tilemap](/reference/tiles/tilemap) is a data object that contains the dimensions, layers, and tile list for a tile mapping to set as the scene for a game. A game program can have more than one tilemap defined and the game's scene or _level_ can change by setting a different tilemap at certain times during a game.
10
+
11
+ Tilemaps aren't coded by the user but are created using a tilemap editor. Each tilemap in a game project is a named resource and is contained within the project's **assets** collection. In code, a particular tilemap is specified with it's resource name like this:
12
+
13
+ ```typescript
14
+ tiles.setTilemap(tilemap`level1`)
15
+ ```
16
+
17
+ ## Parameters
18
+
19
+ * **tilemap**: the [tilemap](/reference/tiles/tilemap) data containing the tilemap layout and tiles to set for the game scene. The tilemap can be specified by it's resource name, such as: `` tilemap`level1` ``.
20
+
21
+ ## Example #example
22
+
23
+ Create a maze tilemap for a sprite to travel through. Set the tilemap as the scene for the game. Create a sprite and start it travelling in the maze.
24
+
25
+ ```blocks
26
+ tiles.setTilemap(tilemap`level1`)
27
+ let mySprite = sprites.create(img`
28
+ . . . . . . . . . . . . . . . .
29
+ . . . . . . . . . . . . . . . .
30
+ . . . . . 5 5 5 5 5 5 . . . . .
31
+ . . . 5 5 5 5 5 5 5 5 5 5 . . .
32
+ . . . 5 5 5 5 5 5 5 5 5 5 . . .
33
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
34
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
35
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
36
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
37
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
38
+ . . 5 5 5 5 5 5 5 5 5 5 5 5 . .
39
+ . . . 5 5 5 5 5 5 5 5 5 5 . . .
40
+ . . . 5 5 5 5 5 5 5 5 5 5 . . .
41
+ . . . . . 5 5 5 5 5 5 . . . . .
42
+ . . . . . . . . . . . . . . . .
43
+ . . . . . . . . . . . . . . . .
44
+ `, SpriteKind.Player)
45
+ mySprite.setPosition(0, 104)
46
+ mySprite.vx = 16
47
+ ```
48
+
49
+ ## See also #seealso
50
+
51
+ [tilemap](/reference/tiles/tilemap),
52
+ [set tile at](/reference/scene/set-tile-at)
53
+
54
+ ```jres
55
+ {
56
+ "transparency16": {
57
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
58
+ "mimeType": "image/x-mkcd-f4",
59
+ "tilemapTile": true
60
+ },
61
+ "tile1": {
62
+ "data": "hwQQABAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7g==",
63
+ "mimeType": "image/x-mkcd-f4",
64
+ "tilemapTile": true,
65
+ "displayName": "myTile0"
66
+ },
67
+ "tile2": {
68
+ "data": "hwQQABAAAABERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERA==",
69
+ "mimeType": "image/x-mkcd-f4",
70
+ "tilemapTile": true,
71
+ "displayName": "myTile1"
72
+ },
73
+ "level1": {
74
+ "id": "level1",
75
+ "mimeType": "application/mkcd-tilemap",
76
+ "data": "MTAwYTAwMDgwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDIwMjAyMDAwMjAyMDAwMTAxMDAwMjAwMDIwMDAyMDIwMDAwMDEwMDAyMDAwMjAwMDIwMDAwMDEwMTAwMDIwMDAyMDIwMjAwMDIwMTAwMDAwMDAwMDAwMDAyMDAwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEyMjIyMjIyMjIyMDIwMDAwMDAyMDAyMjIwMjIyMjAwMjAyMDIyMjAwMDIwMjAyMDIyMDAyMDIyMjAyMjIwMDAwMDAwMjIwMjIyMjIyMjIyMg==",
77
+ "tileset": [
78
+ "myTiles.transparency16",
79
+ "myTiles.tile1",
80
+ "myTiles.tile2"
81
+ ],
82
+ "displayName": "maze"
83
+ },
84
+ "*": {
85
+ "mimeType": "image/x-mkcd-f4",
86
+ "dataEncoding": "base64",
87
+ "namespace": "myTiles"
88
+ }
89
+ }
90
+ ```
@@ -1,87 +1,86 @@
1
1
  # set Wall At
2
2
 
3
- Set a wall at a tile location in the tilemap.
3
+ Set a tile as a wall tile in the tilemap.
4
4
 
5
5
  ```sig
6
- tiles.setWallAt(null, false)
6
+ tiles.setWallAt(tiles.getTileLocation(0, 0), false)
7
7
  ```
8
8
 
9
- Tiles in a tilemap can serve as "wall" tiles to cause an action on a sprite that
10
- comes in contact with the tile. Sprites have flags ([boolean](/types/boolean)
11
- settings) that can set certain behavior when the contact a wall tile.
9
+ Wall tiles create a barrier for sprites so that they can't pass through tilemap at the tile location. You can set a tile location in the tilemap as a wall or turn it back to a regular tile.
12
10
 
13
11
  ## Parameters
14
12
 
15
- * **tile**: the [tile](/types/tile) location.
16
- * **on**: a [boolean](/types/boolean) value that sets the wall **ON** if `true` or **OFF** if `false` at the tile location.
13
+ * **loc**: a tile [location](/reference/tiles/location) in the tilemap.
14
+ * **on**: a [boolean](/types/boolean) value to set the tile location be a wall tile if `true` or a regular tile if `false`.
17
15
 
18
16
  ## Example #example
19
17
 
20
- Create a scene with two horizontal walls. Bounce a sprite between the walls.
18
+ Make a column of tiles from top to bottom of the screen. Set a sprite in motion and set it to bounce on walls. Every `5` seconds, set the tiles in the column to be wall tiles or regular tiles.
21
19
 
22
20
  ```blocks
23
- namespace myTiles {
24
- //% blockIdentity=images._tile
25
- export const tile0 = img`
26
- . . . . . . . . . . . . . . . .
27
- . . . . . . . . . . . . . . . .
28
- . . . . . . . . . . . . . . . .
29
- . . . . . . . . . . . . . . . .
30
- . . . . . . . . . . . . . . . .
31
- . . . . . . . . . . . . . . . .
32
- . . . . . . . . . . . . . . . .
33
- . . . . . . . . . . . . . . . .
34
- . . . . . . . . . . . . . . . .
35
- . . . . . . . . . . . . . . . .
36
- . . . . . . . . . . . . . . . .
37
- . . . . . . . . . . . . . . . .
38
- . . . . . . . . . . . . . . . .
39
- . . . . . . . . . . . . . . . .
40
- . . . . . . . . . . . . . . . .
41
- . . . . . . . . . . . . . . . .
42
- `
43
- }
44
- tiles.setTilemap(tiles.createTilemap(
45
- hex`0a0008000000000000000000000009090909090909090909000000000000000000000000000000000000000000000000000000000000000000000000000000000909090909090909090900000000000000000000`,
46
- img`
47
- . . . . . . . . . .
48
- . . . . . . . . . .
49
- . . . . . . . . . .
50
- . . . . . . . . . .
51
- . . . . . . . . . .
52
- . . . . . . . . . .
53
- . . . . . . . . . .
54
- . . . . . . . . . .
55
- `,
56
- [myTiles.tile0,sprites.castle.tilePath4,sprites.castle.tilePath3,sprites.castle.tilePath1,sprites.castle.tilePath9,sprites.castle.tilePath6,sprites.castle.tilePath8,sprites.castle.tilePath7,sprites.castle.tilePath2,sprites.castle.tilePath5],
57
- TileScale.Sixteen
58
- ))
59
- for (let index = 0; index <= 9; index++) {
60
- tiles.setWallAt(tiles.getTileLocation(index, 1), true)
61
- tiles.setWallAt(tiles.getTileLocation(index, 6), true)
62
- }
21
+ let isWall = false
22
+ tiles.setTilemap(tilemap`level1`)
63
23
  let mySprite = sprites.create(img`
64
- 2 5 5 5 5 5 5 5 5 5 5 5 5 5 2 2
65
- 2 2 2 5 5 5 5 5 5 5 5 5 5 2 2 3
66
- 7 7 2 2 5 5 5 5 5 5 5 5 2 2 3 3
67
- 7 7 7 2 2 5 5 5 5 5 5 2 2 3 3 3
68
- 7 7 7 7 2 5 5 5 5 5 2 2 3 3 3 3
69
- 7 7 7 7 7 2 5 5 5 5 2 3 3 3 3 3
70
- 7 7 7 7 7 2 2 5 5 2 2 3 3 3 3 3
71
- 7 7 7 7 7 7 2 2 2 2 3 3 3 3 3 3
72
- 7 7 7 7 7 7 7 2 2 3 3 3 3 3 3 3
73
- 7 7 7 7 7 7 7 2 2 2 2 3 3 3 3 3
74
- 7 7 7 7 7 7 2 2 4 4 4 2 2 3 3 3
75
- 7 7 7 7 7 2 4 4 4 4 4 4 2 2 3 3
76
- 7 7 7 2 2 4 4 4 4 4 4 4 4 2 3 3
77
- 7 7 2 2 4 4 4 4 4 4 4 4 4 2 2 3
78
- 7 2 2 4 4 4 4 4 4 4 4 4 4 4 2 3
79
- 2 2 4 4 4 4 4 4 4 4 4 4 4 4 2 2
80
- `, SpriteKind.Player)
81
- mySprite.setVelocity(50, 50)
82
- mySprite.setFlag(SpriteFlag.BounceOnWall, true)
24
+ . . . . . . . . . . . . . . . .
25
+ . . . . . . . . . . . . . . . .
26
+ . . . . . 1 1 1 1 1 1 . . . . .
27
+ . . . 1 1 2 2 2 2 2 2 1 1 . . .
28
+ . . . 1 2 2 2 2 2 2 2 2 1 . . .
29
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
30
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
31
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
32
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
33
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
34
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
35
+ . . . 1 2 2 2 2 2 2 2 2 1 . . .
36
+ . . . 1 1 2 2 2 2 2 2 1 1 . . .
37
+ . . . . . 1 1 1 1 1 1 . . . . .
38
+ . . . . . . . . . . . . . . . .
39
+ . . . . . . . . . . . . . . . .
40
+ `, SpriteKind.Player)
41
+ mySprite.setBounceOnWall(true)
42
+ mySprite.vx = 80
43
+ mySprite.vy = 70
44
+ game.onUpdateInterval(5000, function () {
45
+ isWall = !(isWall)
46
+ for (let wallTile of tiles.getTilesByType(assets.tile`myTile`)) {
47
+ tiles.setWallAt(wallTile, isWall)
48
+ }
49
+ })
83
50
  ```
84
51
 
85
52
  ## See also #seealso
86
53
 
87
- [set tile](/reference/tiles/set-tile), [get tile location](/reference/tiles/get-tile-location)
54
+ [get tile location](/reference/tiles/get-tile-location),
55
+ [on hit wall](/reference/scene/on-hit-wall)
56
+
57
+ ```jres
58
+ {
59
+ "transparency16": {
60
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
61
+ "mimeType": "image/x-mkcd-f4",
62
+ "tilemapTile": true
63
+ },
64
+ "tile1": {
65
+ "data": "hwQQABAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7g==",
66
+ "mimeType": "image/x-mkcd-f4",
67
+ "tilemapTile": true,
68
+ "displayName": "myTile"
69
+ },
70
+ "level1": {
71
+ "id": "level1",
72
+ "mimeType": "application/mkcd-tilemap",
73
+ "data": "MTAwYTAwMDgwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA==",
74
+ "tileset": [
75
+ "myTiles.transparency16",
76
+ "myTiles.tile1"
77
+ ],
78
+ "displayName": "level1"
79
+ },
80
+ "*": {
81
+ "mimeType": "image/x-mkcd-f4",
82
+ "dataEncoding": "base64",
83
+ "namespace": "myTiles"
84
+ }
85
+ }
86
+ ```
@@ -0,0 +1,97 @@
1
+ # tile At Location Equals
2
+
3
+ Check if a location in the tilemap contains the tile you're looking for.
4
+
5
+ ```sig
6
+ tiles.tileAtLocationEquals(tiles.getTileLocation(0, 0), null)
7
+ ```
8
+
9
+ ## Parameters
10
+
11
+ * **location**: a [location](/reference/scene/location) in the tilemap.
12
+ * **tile**: an [image](/types/image) that matches the tile you're looking for.
13
+
14
+ ## Returns
15
+
16
+ * a [boolean](/types/boolean) value that is `true` if the tile at **location** matches the **tile** you want to check for. If not, `false` is returned.
17
+
18
+ ## Example #example
19
+
20
+ Make a tilemap with two columns of wall tiles with a different color for each. Set a sprite in motion and cause it to bounce on walls. When the sprite contacts a tile, check to see what color the tile is.
21
+
22
+ ```blocks
23
+ scene.onHitWall(SpriteKind.Player, function (sprite, location) {
24
+ if (tiles.tileAtLocationEquals(location, assets.tile`myTile0`)) {
25
+ mySprite.sayText("Blue", 500, false)
26
+ } else if (tiles.tileAtLocationEquals(location, assets.tile`myTile1`)) {
27
+ mySprite.sayText("Green", 500, false)
28
+ } else {
29
+ mySprite.startEffect(effects.fire, 200)
30
+ }
31
+ })
32
+ let mySprite: Sprite = null
33
+ tiles.setTilemap(tilemap`level1`)
34
+ mySprite = sprites.create(img`
35
+ . . . . . . . . . . . . . . . .
36
+ . . . . . . . . . . . . . . . .
37
+ . . . . . 1 1 1 1 1 1 . . . . .
38
+ . . . 1 1 2 2 2 2 2 2 1 1 . . .
39
+ . . . 1 2 2 2 2 2 2 2 2 1 . . .
40
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
41
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
42
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
43
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
44
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
45
+ . . 1 2 2 2 2 2 2 2 2 2 2 1 . .
46
+ . . . 1 2 2 2 2 2 2 2 2 1 . . .
47
+ . . . 1 1 2 2 2 2 2 2 1 1 . . .
48
+ . . . . . 1 1 1 1 1 1 . . . . .
49
+ . . . . . . . . . . . . . . . .
50
+ . . . . . . . . . . . . . . . .
51
+ `, SpriteKind.Player)
52
+ mySprite.setBounceOnWall(true)
53
+ mySprite.vx = 40
54
+ mySprite.vy = 35
55
+ ```
56
+
57
+ ## See also #seealso
58
+
59
+ [get tile location](/reference/tiles/get-tile-location)
60
+
61
+ ```jres
62
+ {
63
+ "transparency16": {
64
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
65
+ "mimeType": "image/x-mkcd-f4",
66
+ "tilemapTile": true
67
+ },
68
+ "tile1": {
69
+ "data": "hwQQABAAAACIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiA==",
70
+ "mimeType": "image/x-mkcd-f4",
71
+ "tilemapTile": true,
72
+ "displayName": "myTile0"
73
+ },
74
+ "tile2": {
75
+ "data": "hwQQABAAAAB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dw==",
76
+ "mimeType": "image/x-mkcd-f4",
77
+ "tilemapTile": true,
78
+ "displayName": "myTile1"
79
+ },
80
+ "level1": {
81
+ "id": "level1",
82
+ "mimeType": "application/mkcd-tilemap",
83
+ "data": "MTAwYTAwMDgwMDAyMDAwMDAwMDAwMDAwMDAwMDAxMDIwMDAwMDAwMDAwMDAwMDAwMDEwMjAwMDAwMDAwMDAwMDAwMDAwMTAyMDAwMDAwMDAwMDAwMDAwMDAxMDIwMDAwMDAwMDAwMDAwMDAwMDEwMjAwMDAwMDAwMDAwMDAwMDAwMTAyMDAwMDAwMDAwMDAwMDAwMDAxMDIwMDAwMDAwMDAwMDAwMDAwMDEwMjAwMDAwMDIwMDIwMDAwMDAyMDAyMDAwMDAwMjAwMjAwMDAwMDIwMDIwMDAwMDAyMDAyMDAwMDAwMjAwMjAwMDAwMDIwMDIwMDAwMDAyMA==",
84
+ "tileset": [
85
+ "myTiles.transparency16",
86
+ "myTiles.tile1",
87
+ "myTiles.tile2"
88
+ ],
89
+ "displayName": "level1"
90
+ },
91
+ "*": {
92
+ "mimeType": "image/x-mkcd-f4",
93
+ "dataEncoding": "base64",
94
+ "namespace": "myTiles"
95
+ }
96
+ }
97
+ ```
@@ -0,0 +1,98 @@
1
+ # tile At Location Is Wall
2
+
3
+ Check if a tile at a location in the tilemap is also a wall tile.
4
+
5
+ ```sig
6
+ tiles.tileAtLocationIsWall(null)
7
+ ```
8
+
9
+ The tile in the tilemap at the location selected is checked to see if it is set as a wall. After they are placed in the tilemap with the Tilemap Editor, tiles can be set as _wall_ tiles.
10
+
11
+ ## Parameters
12
+
13
+ * **location**: the [location](/reference/tiles/location) object for the tile to check if it's a wall.
14
+
15
+ ## Returns
16
+
17
+ * a [boolean](/types/boolean) value that is `true` if the tile at **location** is a wall. The value is `false` if the tile is not a wall.
18
+
19
+ ## Example #example
20
+
21
+ Set a tilemap with two columns of the same tile. Make one of the columns be all wall tiles. Send a ghost sprite across both colunms so it can detect which one is the wall.
22
+
23
+ ```blocks
24
+ scene.onOverlapTile(SpriteKind.Player, assets.tile`myTile0`, function (sprite, location) {
25
+ if (tiles.tileAtLocationIsWall(location)) {
26
+ mySprite.sayText("That's a wall!")
27
+ } else {
28
+ mySprite.sayText("Not a wall.")
29
+ }
30
+ })
31
+ let mySprite: Sprite = null
32
+ scene.setBackgroundColor(11)
33
+ tiles.setCurrentTilemap(tilemap`level1`)
34
+ mySprite = sprites.create(img`
35
+ ........................
36
+ ........................
37
+ ........................
38
+ ........................
39
+ ..........ffff..........
40
+ ........ff1111ff........
41
+ .......fb111111bf.......
42
+ .......f11111111f.......
43
+ ......fd11111111df......
44
+ ......fd11111111df......
45
+ ......fddd1111dddf......
46
+ ......fbdbfddfbdbf......
47
+ ......fcdcf11fcdcf......
48
+ .......fb111111bf.......
49
+ ......fffcdb1bdffff.....
50
+ ....fc111cbfbfc111cf....
51
+ ....f1b1b1ffff1b1b1f....
52
+ ....fbfbffffffbfbfbf....
53
+ .........ffffff.........
54
+ ...........fff..........
55
+ ........................
56
+ ........................
57
+ ........................
58
+ ........................
59
+ `, SpriteKind.Player)
60
+ mySprite.left = 0
61
+ mySprite.setFlag(SpriteFlag.GhostThroughWalls, true)
62
+ mySprite.vx = 30
63
+ ```
64
+
65
+ ## See also #seealso
66
+
67
+ [get tile location](/reference/tiles/get-tile-location)
68
+
69
+ ```jres
70
+ {
71
+ "transparency16": {
72
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
73
+ "mimeType": "image/x-mkcd-f4",
74
+ "tilemapTile": true
75
+ },
76
+ "tile1": {
77
+ "data": "hwQQABAAAABmZmZmZmZmZmZvZmZmb2ZmZmZm9mZm9mZmZm9mb2ZmZvZmZmZmZm9mZmZmZmZmZmZmZmZmZmZmZmb2ZvZmb2Zm9mZmZmZm9mZmZmZmZmZmZmb2b2b2ZmZmZmZmZmZmZm9mZmb2ZmZmZmb2ZmZm9mZvZmZmZvZmZvZmZmZmZmZmZg==",
78
+ "mimeType": "image/x-mkcd-f4",
79
+ "tilemapTile": true,
80
+ "displayName": "myTile0"
81
+ },
82
+ "level1": {
83
+ "id": "level1",
84
+ "mimeType": "application/mkcd-tilemap",
85
+ "data": "MTAwYTAwMDgwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDIwMDAwMDAwMDAyMDAwMDAwMDAwMjAwMDAwMDAwMDIwMDAwMDAwMDAyMDAwMDAwMDAwMjAwMDAwMDAwMDIwMA==",
86
+ "tileset": [
87
+ "myTiles.transparency16",
88
+ "myTiles.tile1"
89
+ ],
90
+ "displayName": "level1"
91
+ },
92
+ "*": {
93
+ "mimeType": "image/x-mkcd-f4",
94
+ "dataEncoding": "base64",
95
+ "namespace": "myTiles"
96
+ }
97
+ }
98
+ ```
@@ -0,0 +1,145 @@
1
+ # tilemap
2
+
3
+ A tilemap object that defines a player level for the game scene.
4
+
5
+ ```sig
6
+ tiles._tilemapEditor(null)
7
+ ```
8
+
9
+ A **tilemap** is a data object that contains the dimensions, layers, and tiles for a tile mapping used to set the scene of a game.
10
+
11
+ ## Creating and using tilemaps
12
+
13
+ Tilemaps aren't coded by the user but are created using a tilemap editor. When you add a tilemap to your project, it contains a default layout having all of it rows and columns filled with transparent tiles.
14
+
15
+ ```block
16
+ tiles.setCurrentTilemap(tilemap`level2`)
17
+ ```
18
+
19
+ You modify the tilemap using the Tilemap Editor. When coding with blocks, the Tilemap Editor will open when you click on the map image in the tilemap block. If you're editing code, the Tilemap Editor opens by clicking the map symbol in the line of code where you use the tilemap.
20
+
21
+ You design your game scene, or _level_, using the tiles your create or by chosing some from the tile library. You also can set the tilemap size and tile attributes. The example here shows a tilemap created for a maze game:
22
+
23
+ ```block
24
+ tiles.setCurrentTilemap(tilemap`level1`)
25
+ ```
26
+
27
+ After editing, a tilemap is saved as a project asset. The tilemap is defined as a level and assigned an identifier like `level1`. In code, you use the tilemap with its identifier like this:
28
+
29
+ ```typescript-ignore
30
+ tiles.setCurrentTilemap(tilemap`level1`)
31
+ ```
32
+
33
+ You can use a tilemap directly in scene and tile operations, or as an assigned variable:
34
+
35
+ ```block
36
+ let myTilemap = tilemap`level1`
37
+ tiles.setCurrentTilemap(myTilemap)
38
+ ```
39
+
40
+ ## The tilemap object
41
+
42
+ Tilemaps are complex data objects and are defined as levels which contain tiles at various row and column locations. When a tilemap is added to a project, the project assets will include both the tilemap and its tiles. A tilemap's asset data might look like the following:
43
+
44
+ ```typescript-ignore
45
+ {
46
+ "transparency16": {
47
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
48
+ "mimeType": "image/x-mkcd-f4",
49
+ "tilemapTile": true
50
+ },
51
+ "tile1": {
52
+ "data": "hwQQABAAAABERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERA==",
53
+ "mimeType": "image/x-mkcd-f4",
54
+ "tilemapTile": true,
55
+ "displayName": "myTile"
56
+ },
57
+ "tile2": {
58
+ "data": "hwQQABAAAAB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dw==",
59
+ "mimeType": "image/x-mkcd-f4",
60
+ "tilemapTile": true,
61
+ "displayName": "myTile0"
62
+ },
63
+ "tile3": {
64
+ "data": "hwQQABAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==",
65
+ "mimeType": "image/x-mkcd-f4",
66
+ "tilemapTile": true,
67
+ "displayName": "myTile1"
68
+ },
69
+ "level1": {
70
+ "id": "level1",
71
+ "mimeType": "application/mkcd-tilemap",
72
+ "data": "MTAwYTAwMDgwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAyMDAwMDAwMDEwMTAwMDMwMzAwMDIwMjAwMDAwMDAxMDAwMDAzMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAzMDAwMDAwMDEwMDAwMDIwMDAwMDMwMDAzMDAwMTAxMDAwMjAyMDAwMDAwMDMwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA==",
73
+ "tileset": [
74
+ "myTiles.transparency16",
75
+ "myTiles.tile1",
76
+ "myTiles.tile2",
77
+ "myTiles.tile3"
78
+ ],
79
+ "displayName": "level1"
80
+ },
81
+ "*": {
82
+ "mimeType": "image/x-mkcd-f4",
83
+ "dataEncoding": "base64",
84
+ "namespace": "myTiles"
85
+ }
86
+ }
87
+ ```
88
+
89
+ ## See also
90
+
91
+ [set current tilemap](/reference/tiles/set-current-tilemap)
92
+
93
+ ```jres
94
+ {
95
+ "transparency16": {
96
+ "data": "hwQQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
97
+ "mimeType": "image/x-mkcd-f4",
98
+ "tilemapTile": true
99
+ },
100
+ "tile1": {
101
+ "data": "hwQQABAAAABERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERA==",
102
+ "mimeType": "image/x-mkcd-f4",
103
+ "tilemapTile": true,
104
+ "displayName": "myTile"
105
+ },
106
+ "tile2": {
107
+ "data": "hwQQABAAAAB3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3dw==",
108
+ "mimeType": "image/x-mkcd-f4",
109
+ "tilemapTile": true,
110
+ "displayName": "myTile0"
111
+ },
112
+ "tile3": {
113
+ "data": "hwQQABAAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==",
114
+ "mimeType": "image/x-mkcd-f4",
115
+ "tilemapTile": true,
116
+ "displayName": "myTile1"
117
+ },
118
+ "level1": {
119
+ "id": "level1",
120
+ "mimeType": "application/mkcd-tilemap",
121
+ "data": "MTAwYTAwMDgwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAyMDAwMDAwMDEwMTAwMDMwMzAwMDIwMjAwMDAwMDAxMDAwMDAzMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAzMDAwMDAwMDEwMDAwMDIwMDAwMDMwMDAzMDAwMTAxMDAwMjAyMDAwMDAwMDMwMDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA==",
122
+ "tileset": [
123
+ "myTiles.transparency16",
124
+ "myTiles.tile1",
125
+ "myTiles.tile2",
126
+ "myTiles.tile3"
127
+ ],
128
+ "displayName": "level1"
129
+ },
130
+ "level2": {
131
+ "id": "level2",
132
+ "mimeType": "application/mkcd-tilemap",
133
+ "data": "MTAwYTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA==",
134
+ "tileset": [
135
+ "myTiles.transparency16"
136
+ ],
137
+ "displayName": "level4"
138
+ },
139
+ "*": {
140
+ "mimeType": "image/x-mkcd-f4",
141
+ "dataEncoding": "base64",
142
+ "namespace": "myTiles"
143
+ }
144
+ }
145
+ ```
@@ -0,0 +1,25 @@
1
+ #include "pxt.h"
2
+
3
+ namespace multiplayer {
4
+ //%
5
+ void postImage(Image_ im, String goal) {
6
+ // no support >:(
7
+ }
8
+
9
+ //%
10
+ void setOrigin(String origin) {
11
+ // no
12
+ }
13
+
14
+ //%
15
+ Image_ getCurrentImage() {
16
+ // nah
17
+ return NULL;
18
+ }
19
+
20
+ //%
21
+ String getOrigin() {
22
+ return NULL;
23
+ }
24
+
25
+ }
@@ -0,0 +1,24 @@
1
+ namespace multiplayer {
2
+ //% shim=multiplayer::getCurrentImage
3
+ declare function getCurrentImage(): Image;
4
+
5
+ //% shim=multiplayer::setOrigin
6
+ declare function setOrigin(origin: string): void;
7
+
8
+ //% shim=multiplayer::getOrigin
9
+ declare function getOrigin(): string;
10
+
11
+ export function init() {
12
+ game.addScenePushHandler(() => {
13
+ game.eventContext().registerFrameHandler(scene.MULTIPLAYER_SCREEN_PRIORITY, () => {
14
+ if (getOrigin() === "client") {
15
+ const im: Image = getCurrentImage();
16
+ scene.setBackgroundImage(im);
17
+ // clear default menu button behavior
18
+ controller.menu.onEvent(ControllerButtonEvent.Pressed, () => { });
19
+ }
20
+ });
21
+ });
22
+ game.pushScene();
23
+ }
24
+ }
@@ -48,7 +48,9 @@
48
48
  "effects.ts",
49
49
  "texteffects.ts",
50
50
  "assetTemplates.ts",
51
- "animation.ts"
51
+ "animation.ts",
52
+ "multiplayer.cpp",
53
+ "multiplayer.ts"
52
54
  ],
53
55
  "public": true,
54
56
  "dependencies": {
@@ -63,6 +63,7 @@ namespace scene {
63
63
  export const RENDER_BACKGROUND_PRIORITY = 60;
64
64
  export const RENDER_SPRITES_PRIORITY = 90;
65
65
  export const RENDER_DIAGNOSTICS_PRIORITY = 150;
66
+ export const MULTIPLAYER_SCREEN_PRIORITY = 190;
66
67
  export const UPDATE_SCREEN_PRIORITY = 200;
67
68
 
68
69
  // default rendering z indices