Initial Commit

This commit is contained in:
Brian Fertig 2025-07-26 20:09:50 -06:00
commit abfda7e5e8
40 changed files with 3723 additions and 0 deletions

BIN
assets/99boy-tiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
assets/explosion.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
assets/gulch-tiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

1750
assets/gulch.json Normal file

File diff suppressed because it is too large Load Diff

BIN
assets/heart-empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
assets/heart-full.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
assets/music/gulch.mp3 Normal file

Binary file not shown.

BIN
assets/player-tiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
assets/sheriff-s-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

BIN
assets/sounds/axe.mp3 Normal file

Binary file not shown.

BIN
assets/sounds/gun-shot.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

16
index.html Normal file
View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Burli in Monster World</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<div id="game-container"></div>
<script src="https://cdn.jsdelivr.net/npm/phaser@v3.90.0/dist/phaser.min.js"></script>
<script type="module" src="./src/main.js"></script>
</body>
</html>

1
phaser.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
raw/99-attack.mp3 Normal file

Binary file not shown.

BIN
raw/99boy-tiles.psd Normal file

Binary file not shown.

BIN
raw/New Project.psd Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"automappingRulesFile": "",
"commands": [
],
"compatibilityVersion": 1100,
"extensionsPath": "extensions",
"folders": [
"."
],
"properties": [
],
"propertyTypes": [
]
}

View File

@ -0,0 +1,64 @@
{
"Map/SizeTest": {
"height": 4300,
"width": 2
},
"activeFile": "gulch.tmx",
"expandedProjectPaths": [
"."
],
"fileStates": {
"": {
"scaleInEditor": 1
},
"gluch.tmx": {
"scale": 0.5,
"selectedLayer": 1,
"viewCenter": {
"x": 1671,
"y": 3200
}
},
"gluch.tmx#gulch-tiles": {
"scaleInDock": 1
},
"gulch.tmx": {
"scale": 0.75,
"selectedLayer": 2,
"viewCenter": {
"x": 935.3333333333333,
"y": 3397.333333333333
}
},
"gulch.tmx#99boy-tiles": {
"scaleInDock": 1
},
"gulch.tmx#gulch-tiles": {
"scaleInDock": 0.5,
"scaleInEditor": 1
}
},
"last.exportedFilePath": "C:/Git/legends/assets",
"last.imagePath": "C:/Git/legends/assets",
"map.fixedSize": false,
"map.height": 9,
"map.lastUsedExportFilter": "JSON map files (*.tmj *.json)",
"map.lastUsedFormat": "tmx",
"map.tileHeight": 100,
"map.tileWidth": 100,
"map.width": 16,
"openFiles": [
"gulch.tmx"
],
"project": "Tile-Project-Legends.tiled-project",
"property.type": "int",
"recentFiles": [
"gulch.tmx",
"gluch.tmx"
],
"tileset.embedInMap": true,
"tileset.tileSize": {
"height": 100,
"width": 100
}
}

BIN
raw/axe.mp3 Normal file

Binary file not shown.

275
raw/gluch.tmx Normal file
View File

@ -0,0 +1,275 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-down" width="16" height="9" tilewidth="100" tileheight="100" infinite="1" nextlayerid="3" nextobjectid="1">
<tileset firstgid="1" name="gulch-tiles" tilewidth="100" tileheight="100" tilecount="100" columns="10">
<image source="../assets/gulch-tiles.png" width="1000" height="1000"/>
<tile id="68">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="69">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="70">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="71">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="72">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="73">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="78">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="79">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="80">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="81">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="82">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="83">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="84">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="85">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="86">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="87">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="88">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="89">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="91">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="92">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="93">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="94">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="95">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="96">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="97">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="98">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="99">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
</tileset>
<layer id="1" name="main" width="16" height="9">
<data encoding="csv">
<chunk x="0" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
0,0,0,0,0,0,0,0,1610612747,1,1610612747,1,1610612747,1,1610612747,1
</chunk>
<chunk x="16" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,0,0,0,0,0,0,0,0,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,0,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,
0,0,0,0,0,0,0,0,1073741915,1073741916,1073741917,3221225566,3221225565,3221225564,1073741916,1073741917,
0,0,0,0,0,0,0,0,1073741905,1073741906,1073741907,3221225556,3221225555,3221225554,1073741906,1073741907,
0,0,0,0,0,0,0,0,1073741895,1073741896,1073741897,3221225546,3221225545,3221225544,1073741896,1073741897,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="32" width="16" height="16">
24,24,24,24,24,24,24,24,0,0,0,0,0,0,0,0,
3221225566,3221225565,3221225564,3221225563,5,5,5,5,0,0,0,0,0,0,0,0,
3221225556,3221225555,3221225554,3221225553,5,5,5,5,0,0,0,0,0,0,0,0,
3221225546,3221225545,3221225544,3221225543,5,5,5,5,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
</data>
</layer>
<layer id="2" name="objects" width="16" height="9">
<data encoding="csv">
<chunk x="0" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0
</chunk>
<chunk x="16" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,3221225552,0,0,0,69,0,3221225552,0,0,0,0,0,0,0,0,
0,3221225542,0,0,0,79,0,3221225542,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,89,90,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,99,100,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
</data>
</layer>
</map>

BIN
raw/gulch-tiles.psd Normal file

Binary file not shown.

888
raw/gulch.tmx Normal file
View File

@ -0,0 +1,888 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-down" width="16" height="9" tilewidth="100" tileheight="100" infinite="1" nextlayerid="6" nextobjectid="37">
<editorsettings>
<export target="../assets/gulch.json" format="json"/>
</editorsettings>
<tileset firstgid="1" name="gulch-tiles" tilewidth="100" tileheight="100" tilecount="100" columns="10">
<image source="../assets/gulch-tiles.png" width="1000" height="1000"/>
<tile id="6">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="7">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="8">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="16">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="17">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="21">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="31">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="68">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="69">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="70">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="71">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="72">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="73">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="78">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="79">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="80">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="81">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="82">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="83">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="84">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="85">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="86">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="87">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="88">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="89">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="91">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="92">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="93">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="94">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="95">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="96">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="97">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="98">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="99">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
</tileset>
<tileset firstgid="101" name="99boy-tiles" tilewidth="100" tileheight="100" tilecount="100" columns="10">
<image source="../assets/99boy-tiles.png" width="1000" height="1000"/>
</tileset>
<layer id="1" name="main" width="16" height="9">
<data encoding="csv">
<chunk x="0" y="0" width="16" height="16">
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
12,14,14,14,14,15,14,14,14,14,15,14,14,15,14,15,
6,6,6,6,6,7,8,6,6,6,6,6,14,14,14,15,
6,6,6,6,6,17,18,6,6,6,6,6,6,6,13,13,
10,10,10,10,10,10,10,10,10,10,10,7,8,6,6,13,
10,10,10,10,10,10,10,10,10,10,10,17,18,6,6,6,
10,10,20,10,10,10,10,10,10,10,10,10,6,6,6,6,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,6,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,20,10,10,
10,10,10,10,10,10,10,20,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
10,10,10,10,10,10,10,10,10,10,20,10,10,10,10,10,
10,10,10,20,10,10,10,10,10,10,10,10,10,10,10,10
</chunk>
<chunk x="16" y="0" width="16" height="16">
12,12,12,12,12,12,12,12,12,12,22,22,22,12,12,12,
15,15,15,15,15,15,15,15,15,12,32,32,22,12,12,12,
15,15,15,15,15,15,15,4,4,22,22,32,22,12,12,12,
15,15,15,15,15,4,4,4,4,23,22,22,22,12,12,12,
13,15,15,15,15,4,4,4,4,23,23,12,12,12,12,14,
13,13,13,13,5,5,5,5,5,5,5,12,12,12,12,12,
7,8,14,14,5,5,5,5,5,5,5,12,12,12,12,12,
17,18,6,14,5,5,5,5,5,5,5,5,5,5,5,12,
6,6,6,6,5,5,5,5,5,5,5,5,5,12,12,12,
10,6,6,9,5,5,5,5,5,5,5,5,12,12,12,12,
10,6,6,6,1610612767,1610612777,1610612787,1610612767,1610612777,1610612787,1610612767,1610612777,1610612757,1610612757,1610612757,1610612757,
10,6,6,6,12,12,12,12,12,12,12,12,12,12,12,14,
10,6,6,9,12,12,12,14,14,12,12,12,12,14,12,12,
10,6,6,6,12,12,12,12,12,12,14,14,12,12,12,12,
10,6,6,6,12,12,12,12,12,12,12,12,12,12,12,12,
10,6,6,9,13,13,13,13,13,13,13,13,13,13,13,13
</chunk>
<chunk x="32" y="0" width="16" height="16">
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,
12,12,14,14,14,14,12,12,12,13,13,13,13,13,13,13,
12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,
14,14,12,12,12,12,12,12,12,13,13,13,13,13,14,14,
12,12,12,12,12,12,12,12,12,13,13,13,13,13,12,12,
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,23,
12,12,12,14,14,12,12,12,12,12,12,12,12,12,32,32,
14,12,12,12,12,12,12,12,14,14,12,12,12,23,22,32,
12,12,12,12,12,12,12,12,12,12,12,12,1610612759,1610612759,22,32,
1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612757,1610612759,1610612759,22,22,32,
12,12,12,12,12,14,14,12,12,12,12,12,1610612759,1610612759,22,32,
12,12,12,12,12,12,12,12,12,12,12,12,12,23,22,32,
12,14,14,14,12,12,12,14,12,12,12,12,12,12,23,23,
12,12,12,12,12,12,12,12,12,14,14,14,12,12,12,5,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13
</chunk>
<chunk x="48" y="0" width="16" height="16">
12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,
13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,
13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,
13,14,14,14,14,14,14,12,0,0,0,0,0,0,0,0,
13,12,12,12,12,12,12,14,0,0,0,0,0,0,0,0,
12,12,23,23,23,12,12,12,0,0,0,0,0,0,0,0,
23,23,32,32,32,23,12,12,0,0,0,0,0,0,0,0,
32,32,32,32,32,23,12,12,0,0,0,0,0,0,0,0,
32,32,32,32,32,32,23,12,0,0,0,0,0,0,0,0,
32,32,32,32,32,32,23,12,0,0,0,0,0,0,0,0,
32,32,32,32,32,32,23,12,0,0,0,0,0,0,0,0,
32,32,32,32,32,32,23,12,0,0,0,0,0,0,0,0,
32,32,32,32,23,23,12,12,0,0,0,0,0,0,0,0,
23,23,23,23,12,12,12,0,0,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="16" width="16" height="16">
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,6,
10,10,10,10,10,10,10,10,10,10,10,10,10,10,6,6,
6,7,8,6,6,6,7,8,6,6,6,7,8,6,6,6,
6,17,18,6,6,6,17,18,6,6,6,17,18,6,6,5,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,
2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="16" y="16" width="16" height="16">
6,6,6,6,13,13,13,13,13,13,13,13,13,13,13,13,
7,8,6,14,14,14,14,14,14,14,14,14,14,14,14,14,
17,18,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="32" y="16" width="16" height="16">
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
14,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,
5,14,14,14,14,14,14,14,14,14,14,14,14,12,12,12,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,2684354571,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="48" y="16" width="16" height="16">
5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,
4,4,4,4,4,4,4,4,15,0,0,0,0,0,0,0,
4,4,4,15,15,13,13,15,15,0,0,0,0,0,0,0,
15,15,15,15,15,15,15,15,13,0,0,0,0,0,0,0,
15,15,15,13,13,15,15,13,13,0,0,0,0,0,0,0,
14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,
2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,2684354562,0,0,0,0,0,0,0,
1,1610612747,1,1610612747,1,1,1,1,1,0,0,0,0,0,0,0,
1,1610612747,1,1610612747,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,2684354571,1,2684354571,1,1,1,1,1,0,0,0,0,0,0,0,
1,2684354571,1,2684354571,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="32" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
24,1073741915,1073741916,1073741917,3221225566,3221225565,3221225564,1073741916,1073741917,3221225566,3221225565,3221225564,3221225563,5,5,5,
24,1073741905,1073741906,1073741907,3221225556,3221225555,3221225554,1073741906,1073741907,3221225556,3221225555,3221225554,3221225553,5,5,5,
24,1073741895,1073741896,1073741897,3221225546,3221225545,3221225544,1073741896,1073741897,3221225546,3221225545,3221225544,3221225543,5,5,5,
24,1610612824,1610612834,87,88,87,88,2147483736,2147483735,2147483736,2147483735,3758096482,3758096472,5,5,5,
24,1610612823,1610612833,97,98,97,98,2147483746,2147483745,2147483746,2147483745,3758096481,3758096471,5,5,24,
24,1610612822,1610612832,1073741920,1073741921,1073741922,3221225570,1073741922,3221225570,3221225569,3221225568,3758096480,3758096470,5,5,24,
24,1610612821,1610612831,1073741910,1073741911,1073741912,3221225560,1073741912,3221225560,3221225559,3221225558,3758096479,3758096469,5,5,24,
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="16" y="32" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
5,24,5,85,86,87,88,2147483736,2147483735,87,2147483735,87,88,2147483736,2147483735,2147483734,
5,24,5,95,96,97,98,2147483746,2147483745,97,2147483745,97,98,2147483746,2147483745,2147483744,
5,24,5,1610612822,1610612832,1073741921,1073741922,3221225570,3221225569,1073741921,3221225569,1073741921,1073741922,3221225570,3221225569,3221225568,
24,24,5,1610612821,1610612831,1073741911,1073741912,3221225560,3221225559,1073741911,3221225559,1073741911,1073741912,3221225560,3221225559,3221225558,
24,5,5,1610612822,1610612832,1073741921,1073741922,3221225570,3221225569,1073741921,3221225569,1073741921,1073741922,3221225570,3221225569,3221225568,
5,5,5,1610612821,1610612831,1073741911,1073741912,3221225560,3221225559,1073741911,3221225559,1073741911,1073741912,3221225560,3221225559,3221225558,
5,5,5,24,24,24,24,24,24,24,24,24,24,24,24,24,
24,24,24,24,24,85,2684354645,24,24,85,2684354645,24,24,85,2684354645,24,
5,5,5,24,24,1610612821,3221225557,24,24,1610612821,3221225557,24,24,1610612821,3221225557,24,
5,5,5,24,24,24,24,24,24,24,24,24,24,24,24,24,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="32" y="32" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1610612747,1,1,1,1,1,1,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
1,1610612747,1,1,1,1,1,1,1,1610612747,1,1610612747,1,1610612747,1,1610612747,
24,24,11,11,1,1,3221225483,3221225483,24,24,24,24,24,24,24,24,
2147483733,24,1,1,1,1,1,1,24,1073741915,1073741916,1073741917,3221225566,3221225565,3221225564,1073741916,
2147483743,24,11,11,1,1,3221225483,3221225483,24,1073741905,1073741906,1073741907,3221225556,3221225555,3221225554,1073741906,
3221225567,24,1,1,1,1,1,1,24,1073741895,1073741896,1073741897,3221225546,3221225545,3221225544,1073741896,
3221225557,24,11,11,1,1,3221225483,3221225483,24,1610612824,1610612834,87,88,87,88,2147483736,
3221225567,24,1,1,1,1,1,1,24,1610612823,1610612833,97,98,97,98,2147483746,
3221225557,24,11,11,1,1,3221225483,3221225483,24,1610612822,1610612832,1073741920,1073741921,1073741922,3221225570,1073741922,
24,24,1,1,1,1,1,1,24,1610612821,1610612831,1073741910,1073741911,1073741912,3221225560,1073741912,
24,24,11,11,1,1,3221225483,3221225483,24,24,24,24,24,24,24,24,
24,24,1,1,1,1,1,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,
24,24,11,11,1,1,1,1,2684354571,1,2684354571,1,2684354571,1,2684354571,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</chunk>
<chunk x="48" y="32" width="16" height="16">
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1,1610612747,1,1610612747,1,1,1,1,1,0,0,0,0,0,0,0,
1,1610612747,1,1610612747,1,1,1,1,1,0,0,0,0,0,0,0,
24,24,24,24,24,1,1,14,14,0,0,0,0,0,0,0,
1073741917,3221225566,3221225565,3221225564,3221225563,1,1,14,14,0,0,0,0,0,0,0,
1073741907,3221225556,3221225555,3221225554,3221225553,1,1,14,14,0,0,0,0,0,0,0,
1073741897,3221225546,3221225545,3221225544,3221225543,1,1,14,14,0,0,0,0,0,0,0,
2147483735,2147483736,2147483735,3758096482,3758096472,1,1,14,14,0,0,0,0,0,0,0,
2147483745,2147483746,2147483745,3758096481,3758096471,1,1,14,14,0,0,0,0,0,0,0,
3221225570,3221225569,3221225568,3758096480,3758096470,1,1,14,14,0,0,0,0,0,0,0,
3221225560,3221225559,3221225558,3758096479,3758096469,1,1,14,14,0,0,0,0,0,0,0,
24,24,24,24,24,1,1,14,14,0,0,0,0,0,0,0,
2684354571,1,2684354571,1,2684354571,1,1,14,14,0,0,0,0,0,0,0,
2684354571,1,2684354571,1,2684354571,1,1,14,14,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,14,14,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="48" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="48" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1610612747,1,1610612747,1,3221225474,4,2,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612747,1,1610612747,1,3221225474,4,2,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612738,1610612738,1610612738,1610612738,3,4,2684354563,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,1610612738,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="32" y="48" width="16" height="16">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,1610612747,1,
1610612738,1610612738,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="48" y="48" width="16" height="16">
1,1,1,1,1,1,1,14,14,0,0,0,0,0,0,0,
1610612747,1,1610612747,1,1610612747,1,1,14,14,0,0,0,0,0,0,0,
1610612747,1,1610612747,1,1610612747,1,1,14,14,0,0,0,0,0,0,0,
14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
</data>
</layer>
<layer id="2" name="objects" width="16" height="9">
<data encoding="csv">
<chunk x="0" y="0" width="16" height="16">
12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="0" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,35,0,0,0,0,0,36,0,0,0,34,0,0,0,0,
0,0,0,0,28,29,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,38,39,0,0,19,0,0,0,0,36,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,
0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,28,29,0,0,0,0,0,0,0,0
</chunk>
<chunk x="32" y="0" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,35,0,0,0,28,29,0,0,36,0,0,0,0,
0,0,0,0,0,0,0,38,39,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,
27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,
0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,
0,0,69,0,40,0,68,0,70,0,0,0,0,0,0,0,
0,0,79,0,50,0,78,0,80,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,69,0,68,0,
0,0,0,0,0,0,0,0,0,0,0,0,79,0,78,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="16" width="16" height="16">
0,0,0,0,0,0,38,39,0,0,0,0,0,36,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,34,0,0,0,0,19,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,3221225551,0,3221225552,0,0,0,68,0,69,0,0,0,
0,0,0,0,3221225541,0,3221225542,0,0,0,78,0,79,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
40,0,0,0,0,0,40,0,0,0,70,0,0,0,0,0,
50,0,0,0,0,0,50,0,0,0,80,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="32" y="16" width="16" height="16">
0,0,0,0,0,0,0,0,26,27,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,26,27,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,35,
0,0,0,0,66,67,0,0,40,0,68,0,0,0,0,0,
0,0,0,0,0,0,0,0,50,0,78,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,68,0,0,0,0,0,0,0,40,0,0,0,0,0,
0,0,78,0,0,0,0,0,0,0,50,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="0" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3221225522,0,69,0,0,0,0,0,3221225552,0,0,0,69,0,
0,0,3221225512,0,79,0,0,0,0,0,3221225542,0,0,0,79,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,
0,0,0,0,0,0,0,0,0,0,0,0,0,89,90,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,99,100,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,89,90,0,0,0,0,89,90,0,0,0,0,89,90,0,
0,99,100,0,0,0,0,99,100,0,0,0,0,99,100,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="16" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3221225552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3221225542,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,99,100,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="32" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,66,67,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,66,67,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,59,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="48" y="32" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,59,60,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="32" y="48" width="16" height="16">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,
0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,78,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
<chunk x="48" y="48" width="16" height="16">
0,0,0,0,0,59,60,0,0,0,0,0,0,0,0,0,
0,0,59,47,48,47,48,0,0,0,0,0,0,0,0,0,
0,0,60,57,58,57,58,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
</chunk>
</data>
</layer>
<objectgroup id="5" name="enemies">
<object id="3" gid="111" x="303.333" y="2791.33" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="4" gid="101" x="920.67" y="2634" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="5" gid="101" x="2454" y="3198" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="6" gid="101" x="2418" y="2638" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="7" gid="111" x="2142" y="3666" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="8" gid="111" x="1910" y="2826" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="9" gid="101" x="3954" y="3190" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
<property name="patrolY" type="int" value="500"/>
</properties>
</object>
<object id="10" gid="101" x="3362" y="3278" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="11" gid="101" x="3802" y="3554" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="14" gid="113" x="990" y="3200.67" width="100" height="100">
<properties>
<property name="fire" type="int" value="800"/>
<property name="patrolX" type="int" value="-800"/>
<property name="patrolY" type="int" value="200"/>
</properties>
</object>
<object id="15" gid="115" x="608.545" y="3194.61" width="100" height="100">
<properties>
<property name="garbage" type="int" value="1"/>
<property name="patrolX" type="int" value="600"/>
<property name="speed" type="int" value="300"/>
</properties>
</object>
<object id="16" gid="117" x="510" y="3392.67" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="18" gid="113" x="2504.55" y="1895.45" width="100" height="100">
<properties>
<property name="fire" type="int" value="800"/>
<property name="patrolX" type="int" value="-800"/>
<property name="patrolY" type="int" value="200"/>
</properties>
</object>
<object id="19" gid="113" x="3816.67" y="695.455" width="100" height="100">
<properties>
<property name="fire" type="int" value="800"/>
<property name="patrolX" type="int" value="-800"/>
<property name="patrolY" type="int" value="200"/>
</properties>
</object>
<object id="20" gid="113" x="2804.55" y="701.515" width="100" height="100">
<properties>
<property name="fire" type="int" value="800"/>
<property name="patrolX" type="int" value="-800"/>
<property name="patrolY" type="int" value="200"/>
</properties>
</object>
<object id="21" gid="101" x="2310.61" y="2195.45" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="22" gid="101" x="3601.52" y="1492.42" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="23" gid="101" x="1895.45" y="398.485" width="100" height="100">
<properties>
<property name="fire" type="int" value="1500"/>
<property name="patrolX" type="int" value="-500"/>
</properties>
</object>
<object id="24" gid="117" x="2640.91" y="2295.45" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="25" gid="117" x="3710.61" y="1595.45" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="26" gid="117" x="4398.48" y="2201.52" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="27" gid="117" x="4195.45" y="395.455" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="28" gid="117" x="2456.06" y="840.909" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="29" gid="117" x="1456.06" y="162.121" width="100" height="100">
<properties>
<property name="patrolX" type="int" value="900"/>
<property name="speed" type="int" value="400"/>
</properties>
</object>
<object id="30" gid="111" x="425.758" y="2110.61" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="31" gid="111" x="422.727" y="134.848" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="32" gid="111" x="2210.61" y="598.485" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="33" gid="111" x="3413.64" y="946.97" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="34" gid="111" x="2983.33" y="243.939" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="35" gid="111" x="4171.21" y="192.424" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
<object id="36" gid="111" x="3786.36" y="2110.61" width="100" height="100">
<properties>
<property name="fire" type="int" value="2000"/>
<property name="patrolX" type="int" value="700"/>
</properties>
</object>
</objectgroup>
</map>

BIN
raw/gun-cock.mp3 Normal file

Binary file not shown.

BIN
raw/gun-shot.mp3 Normal file

Binary file not shown.

BIN
raw/player-tiles.psd Normal file

Binary file not shown.

BIN
raw/zombie-death.mp3 Normal file

Binary file not shown.

BIN
raw/zombie-moan.mp3 Normal file

Binary file not shown.

BIN
raw/zombie-sound.mp3 Normal file

Binary file not shown.

51
scenes/gulch.js Normal file
View File

@ -0,0 +1,51 @@
import Phaser from 'phaser';
export default class LevelScene extends Phaser.Scene {
constructor() {
super({ key: 'LevelScene' });
this.player = null;
this.cursors = null;
this.camera = null;
}
create() {
// Load the tilemap
const map = this.add.tilemap('map');
const tileset = map.addTilesetImage('tileset', 'tileset');
// Create the ground layer
const groundLayer = map.createStaticLayer('Ground', tileset, 0, 0);
// Add player
this.player = this.physics.add.sprite(100, 100, 'player');
this.player.setBounce(0.2);
this.player.setCollideWorldBounds(true);
// Input
this.cursors = this.input.keyboard.createCursorKeys();
// Physics collision
this.physics.add.collider(this.player, groundLayer);
// Camera follow player
this.cameras.main.startFollow(this.player);
}
update() {
if (this.cursors.left.isDown) {
this.player.setVelocityX(-200);
} else if (this.cursors.right.isDown) {
this.player.setVelocityX(200);
} else {
this.player.setVelocityX(0);
}
if (this.cursors.up.isDown) {
this.player.setVelocityY(-200);
} else if (this.cursors.down.isDown) {
this.player.setVelocityY(200);
} else {
this.player.setVelocityY(0);
}
}
}

171
src/characters/99boy.js Normal file
View File

@ -0,0 +1,171 @@
export class NNBoy extends Phaser.GameObjects.Sprite {
constructor(scene, x, y, texture, frame) {
super(scene, x, y, texture, frame);
// Add the enemy to the scene
scene.add.existing(this);
// Enable physics for the enemy (if using Arcade Physics)
scene.physics.world.enable(this);
this.speed = 100;
this.isFollowing = false;
this.onPatrol = false;
this.leftBoundary = 0;
this.rightBoundary = 0;
this.topBoundary = 0;
this.bottomBoundary = 0;
this.shoots = false;
this.shootTimer = 0;
this.bottleSpeed = 400;
this.bottleReloadVariance = 5000;
this.bottleReloadCalc = 3000;
this.bottleReload = 0;
this.bulletsGroup = scene.add.group();
this.dropHeartOneIn = 3;
// Create animations
this.anims.create({
key: 'walk99',
frames: this.anims.generateFrameNumbers('99boy-tiles', { start: frame, end: frame+1 }),
frameRate: 5,
repeat: -1
});
}
setPatrolX(leftBoundary, rightBoundary) {
this.onPatrol = true;
this.leftBoundary = leftBoundary;
this.rightBoundary = rightBoundary;
}
setPatrolY(topBoundary, bottomBoundary) {
this.onPatrol = true;
this.topBoundary = topBoundary;
this.bottomBoundary = bottomBoundary;
}
setSpeed(spd) {
this.speed = spd;
}
// Example: Basic patrolling movement
patrol() {
// Horizontal boundaries
if (this.leftBoundary !== 0) {
if (this.body.blocked.left || this.body.x <= this.leftBoundary) {
this.flipX = true;
this.body.setVelocityX(this.speed);
} else if (this.body.blocked.right || this.body.x >= this.rightBoundary) {
this.flipX = false;
this.body.setVelocityX(-this.speed);
}
}
// Vertical boundaries
if (this.topBoundary !== 0) {
if (this.body.blocked.up || this.body.y <= this.topBoundary) {
this.body.setVelocityY(this.speed);
} else if (this.body.blocked.down || this.body.y >= this.bottomBoundary) {
this.body.setVelocityY(-this.speed);
}
}
// Prevent falling off the platform
if (this.body.velocity.x === 0 && this.body.velocity.y === 0) {
this.body.setVelocityX(this.speed);
this.flipX = true;
}
}
// Example: Following the player
follow(player) {
if (Phaser.Math.Distance.Between(this.x, this.y, player.x, player.y) < 200) {
this.isFollowing = true;
this.scene.physics.moveToObject(this, player, this.speed);
} else {
this.isFollowing = false;
this.body.setVelocity(0);
}
}
// Example: Enemy taking damage
takeDamage() {
let dropHeart = Math.floor(Math.random() * this.dropHeartOneIn);
if (dropHeart === 1) {
let heart = this.scene.physics.add.image(this.x, this.y, 'heart-full').setScale(.5);
this.scene.hearts.add(heart);
this.scene.tweens.add({
targets: heart,
scale: 0.8,
duration: 1000,
ease: 'Power1',
yoyo: true,
repeat: -1
});
}
// Create a tween that scales the enemy's body on Y-axis to 10
let variance = Math.floor(Math.random() * 2);
this.scene.sound.play('99boy-defeat-'+variance);
this.scene.tweens.add({
targets: this,
scaleY: .2,
duration: 200, // Duration of the animation in milliseconds
ease: 'Power1',
onComplete: () => {
// Destroy the enemy after the animation completes
this.destroy();
}
});
}
fireBullet() {
// Get the player from the scene
const player = this.scene.player;
// Fire the bottle
let variance = Math.floor(Math.random() * 3);
const bottle = this.scene.physics.add.sprite(this.x, this.y, '99boy-tiles', 2+variance);
bottle.setSize(50, 50);
this.scene.bottles.add(bottle);
const angle = Phaser.Math.Angle.Between(this.x, this.y, player.x, player.y);
bottle.setVelocity(Math.cos(angle) * this.bottleSpeed, Math.sin(angle) * this.bottleSpeed);
this.scene.physics.world.enable(bottle);
this.scene.tweens.add({
targets: bottle,
angle: 720,
duration: 2000,
ease: 'Power1',
onComplete: () => {
bottle.destroy();
}
});
}
//
update(time, delta) {
if (this.onPatrol === true) {
this.patrol();
}
this.anims.play('walk99', true);
if (this.shoots) {
// Check if the enemy is visible to the camera
const camera = this.scene.cameras.main;
if (camera.worldView.contains(this.x, this.y)) {
this.shootTimer += delta;
if (this.shootTimer >= this.bottleReloadCalc) {
this.shootTimer = 0;
let variance = Math.floor(Math.random() * this.bottleReloadVariance);
this.bottleReloadCalc = this.bottleReload + variance;
this.fireBullet();
}
}
}
}
}

297
src/characters/player.js Normal file
View File

@ -0,0 +1,297 @@
export class Player extends Phaser.GameObjects.Sprite {
constructor(scene, x, y, texture, frame) {
super(scene, x, y, 'player-tiles');
scene.add.existing(this);
scene.physics.world.enable(this);
this.body.setSize(50,100);
// Initialize variables
this.pauseMove = false;
this.isTakingDamage = false;
this.showHealth = false;
this.healthText;
this.healthImages;
this.numHearts = 3;
this.maxHearts = 3;
this.normalVelocityX = 260;
this.inventory = [];
this.facing = 'south';
this.isAttacking = false;
this.isFiring = false;
this.axe;
this.bullet;
// Create animations
this.anims.create({
key: 'north',
frames: this.anims.generateFrameNumbers('player-tiles', { start: 0, end: 1 }),
frameRate: 5,
repeat: -1
});
this.anims.create({
key: 'side',
frames: this.anims.generateFrameNumbers('player-tiles', { start: 8, end: 9 }),
frameRate: 5,
repeat: -1
});
this.anims.create({
key: 'south',
frames: this.anims.generateFrameNumbers('player-tiles', { start: 16, end: 17 }),
frameRate: 5,
repeat: -1
});
this.anims.create({
key: 'death',
frames: [
{ key: 'player-tiles', frame: 3 }
],
frameRate: 5,
duration: 1500,
repeat: -1
});
this.anims.create({
key: 'death2',
frames: [
{ key: 'player-tiles', frame: 4 }
],
frameRate: 5,
duration: 1500,
repeat: -1
});
this.scene.input.keyboard.on('keydown-A', this.attack, this);
}
update() {
// Movement Debug:
// console.log(this.body.x + " " + this.body.y);
if (this.pauseMove === true) {
this.body.setVelocity(0);
} else {
// Movement: Left/Right:
if (this.scene.cursors.left.isDown) {
this.body.setVelocityX(-200);
this.setFlipX(false);
this.anims.play('side', true);
this.facing = 'west';
} else if (this.scene.cursors.right.isDown) {
this.body.setVelocityX(200);
this.setFlipX(true);
this.anims.play('side', true);
this.facing = 'east';
} else {
this.body.setVelocityX(0);
}
// Movement: Up/Down:
if (this.scene.cursors.up.isDown) {
this.body.setVelocityY(-200);
this.anims.play('south', true);
this.facing = 'south';
} else if (this.scene.cursors.down.isDown) {
this.body.setVelocityY(200);
this.anims.play('north', true);
this.facing = 'north';
} else {
this.body.setVelocityY(0);
}
}
}
attack() {
if (this.isAttacking === true) {
return;
}
this.isAttacking = true;
this.pauseMove = true;
// Determine the direction the player is facing
let offsetX = 0;
let offsetY = 0;
let flip = false;
let rotate = 0;
let direction = 360;
let velocX = 0;
let velocY = 0;
if (this.facing === 'west') {
offsetX = -100;
flip = true;
direction = -360;
velocX = -1500;
} else if (this.facing === 'east') {
offsetX = +100;
velocX = 1500;
} else if (this.facing === 'north') {
offsetY = +100;
rotate = 90;
velocY = 1500;
} else if (this.facing === 'south') {
offsetY = -100;
rotate = 270;
velocY = -1500;
}
// Create a rectangle for the attack area in front of the player
const attackArea = new Phaser.Geom.Rectangle(
this.x + offsetX,
this.y + offsetY,
100, // width
100 // height
);
// Add Axe
this.axe = this.scene.physics.add.sprite(attackArea.x, attackArea.y, 'player-tiles', 2);
this.scene.axes.add(this.axe);
this.axe.setFlipX(flip);
this.axe.setAngle(rotate);
this.axe.setVelocity(velocX / 4, velocY / 4);
this.scene.tweens.add({
targets: this.axe,
scale: 1, // 110% of original size
angle: direction+rotate, // Spin clockwise once (360 degrees)
duration: 1000,
ease: 'Power2'
});
this.scene.sound.play('axeThrow');
// Add Bullet if hearts are full
if (this.numHearts >= 3 && this.isFiring === false) {
this.bullet = this.scene.physics.add.sprite(attackArea.x, attackArea.y, 'player-tiles', 10);
this.scene.bullets.add(this.bullet)
this.bullet.setFlip(flip);
this.bullet.setAngle(rotate);
this.bullet.setVelocity(velocX, velocY);
this.scene.sound.play('gunShot');
this.isFiring = true;
this.scene.physics.world.enable(this.bullet);
}
// Reset attack ability after a delay
this.scene.time.delayedCall(500, () => {
this.pauseMove = false;
this.axe.destroy();
this.isAttacking = false;
if (this.bullet) {
this.bullet.destroy();
}
});
if (this.isFiring === true) {
this.scene.time.delayedCall(2000, () => {
this.isFiring = false;
});
}
}
healthBars(showHealth, Hearts, Lives) {
this.showHealth = showHealth;
if (this.showHealth === true) {
this.healthText = this.scene.add.text(16, 16, 'Health: ', { fontSize: '36px', fill: '#FFF' })
.setShadow(3,3, '#333', 5)
.setScrollFactor(0);
this.updateHealth();
this.livesText = this.scene.add.text(16, 64, 'Lives:', { fontSize: '36px', fill: '#FFF' })
.setShadow(3,3, '#333', 5)
.setScrollFactor(0);
}
}
takeDamage(fromObject) {
if (this.isTakingDamage) {
return;
}
this.isTakingDamage = true;
this.scene.sound.play('player-damage');
this.numHearts -= 1;
if (this.numHearts > 0) {
this.updateHealth();
} else {
this.updateHealth();
this.pauseMove = true;
this.anims.play('death');
this.body.enable = false;
this.scene.tweens.add({
targets: this,
angle: 720, // Spin clockwise once (360 degrees)
duration: 1500,
ease: 'Power2',
onComplete: () => {
this.anims.play('death2');
// Add animation to lower player by 20px
this.scene.tweens.add({
targets: this,
y: '+=20',
duration: 1000,
ease: 'Power1'
});
// Fade out the camera and restart the scene
this.scene.cameras.main.fade(1500, 0, 0, 0, true);
this.scene.time.delayedCall(1500, () => {
this.scene.bgMusic.stop();
this.scene.scene.restart();
});
}
});
}
// Knockback
// Reset taking damage state after a delay
this.scene.time.delayedCall(500, () => {
this.isTakingDamage = false;
this.pauseMove = false;
});
}
addHealth(amount) {
if (this.numHearts < 3) {
this.numHearts += 1;
this.updateHealth();
this.scene.sound.play('health-pickup');
}
}
updateHealth() {
if (!this.showHealth) {
return;
}
if (this.healthImages) {
this.healthImages.destroy(true);
}
if (this.lifeImages) {
this.lifeImages.destroy(true);
}
this.healthImages = this.scene.add.group();
this.lifeImages = this.scene.add.group();
let startX = 170;
let startLivesX = 165
// Add full hearts
for (let i = 0; i < this.numHearts; i++) {
this.healthImages.add(this.scene.add.image(startX, 15, 'heart-full').setOrigin(0, 0).setScale(.5).setScrollFactor(0));
startX += 48;
}
// Add empty hearts for the remaining slots
for (let i = this.numHearts; i < 3; i++) {
this.healthImages.add(this.scene.add.image(startX, 15, 'heart-empty').setOrigin(0, 0).setScale(.5).setScrollFactor(0));
startX += 48;
}
// Add Lives
for (let i = 0; i < this.numLives; i++) {
this.lifeImages.add(this.scene.add.image(startLivesX, 64, 'life').setOrigin(0, 0).setScale(.5).setScrollFactor(0));
startLivesX += 48;
}
}
}

27
src/main.js Normal file
View File

@ -0,0 +1,27 @@
// import { MenuScene } from './scenes/MenuScene.js';
import { Gulch } from './scenes/gulch.js';
// import { L2Scene } from './scenes/L2Scene.js';
// import { L3Scene } from './scenes/L3Scene.js';
const config = {
type: Phaser.AUTO,
scale: {
mode: Phaser.Scale.RESIZE,
width: 1600,
height: 9000,
},
physics: {
default: 'arcade',
arcade: {
gravity: { x: 0, y: 0 },
debug: false
}
},
scene: [
Gulch
]
};
new Phaser.Game(config);

8
src/misc/cameras.js Normal file
View File

@ -0,0 +1,8 @@
export class Camera extends Phaser.Cameras.Scene2D.Camera {
constructor(x, y, width, height) {
super(x, y, width, height);
}
}

160
src/scenes/gulch.js Normal file
View File

@ -0,0 +1,160 @@
import { Player } from '../characters/player.js';
import { Camera } from '../misc/cameras.js';
import { NNBoy } from '../characters/99boy.js';
export class Gulch extends Phaser.Scene {
constructor() {
super({ key: 'Gulch' });
this.cameras;
this.player;
this.cursors = null;
this.wide = 1600;
this.tall = 900;
this.topBound = 1100;
this.leftBound = 800;
}
preload() {
this.load.image('gulch-tiles', 'assets/gulch-tiles.png');
this.load.image('heart-full', 'assets/heart-full.png');
this.load.image('heart-empty', 'assets/heart-empty.png');
this.load.tilemapTiledJSON('gulchMap', 'assets/gulch.json');
this.load.spritesheet('player-tiles', 'assets/player-tiles.png', {
frameWidth: 100,
frameHeight: 100
});
this.load.spritesheet('99boy-tiles', 'assets/99boy-tiles.png', {
frameWidth: 100,
frameHeight: 100
});
this.load.audio('gulchMusic', 'assets/music/gulch.mp3');
this.load.audio('gunShot', 'assets/sounds/gun-shot.mp3');
this.load.audio('axeThrow', 'assets/sounds/axe.mp3');
this.load.audio('99boy-defeat-0', 'assets/sounds/zombie-death-1.mp3');
this.load.audio('99boy-defeat-1', 'assets/sounds/zombie-death-2.mp3');
this.load.audio('99boy-defeat-2', 'assets/sounds/zombie-death-3.mp3');
this.load.audio('health-pickup', 'assets/sounds/health-pickup.mp3');
this.load.audio('player-damage', 'assets/sounds/player-damage.mp3');
}
create() {
// Load the map and tileset
const gulchMap = this.make.tilemap({ key: 'gulchMap' });
const gulchTiles = gulchMap.addTilesetImage('gulch-tiles', 'gulch-tiles');
const NNTiles = gulchMap.addTilesetImage('99boy-tiles', '99boy-tiles');
const mainLayer = gulchMap.createLayer('main', gulchTiles, 0, 0)
.setCollisionByProperty({ collides: true });
const objectsLayer = gulchMap.createLayer('objects', gulchTiles, 0, 0)
.setCollisionByProperty({ collides: true });
const enemiesLayer = gulchMap.getObjectLayer('enemies');
// Add a player
this.player = new Player(this, 950, 3650);
this.player.healthBars(true, 1, 3);
// Add Enemies
this.enemies = this.physics.add.group({
classType: NNBoy,
runChildUpdate: true
});
enemiesLayer.objects.forEach(object => {
let a99Boy = this.enemies.create(object.x-50, object.y-50, '99boy-tiles', object.gid-101);
if (object.properties) {
object.properties.forEach(prop => {
if (prop.name === 'patrolX') {
let to = object.x + prop.value;
if (to < object.x) {
a99Boy.setPatrolX(to, object.x);
} else {
a99Boy.setPatrolX(object.x, to);
}
}
if (prop.name === 'patrolY') {
let to = object.y + prop.value;
if (to < object.y) {
a99Boy.setPatrolY(to, object.y);
} else {
a99Boy.setPatrolY(object.y, to);
}
}
if (prop.name === 'fire') {
a99Boy.shoots = true;
a99Boy.bottleReload = prop.value;
}
if (prop.name === 'speed') {
a99Boy.speed = prop.value;
}
});
}
});
// Create a group for bullets
this.bullets = this.physics.add.group();
this.bottles = this.physics.add.group();
this.axes = this.physics.add.group();
this.hearts = this.physics.add.group();
// Input
this.cursors = this.input.keyboard.createCursorKeys();
this.physics.add.collider(this.player, mainLayer);
this.physics.add.collider(this.player, objectsLayer);
this.physics.add.collider(this.enemies, mainLayer);
this.physics.add.collider(this.enemies, objectsLayer);
this.physics.add.collider(this.player, this.enemies);
// Collision between bullets and enemies
this.physics.add.collider(this.bullets, this.enemies, (bullet, enemy) => {
// Handle collision here (e.g., damage the enemy or destroy the bullet)
bullet.destroy();
enemy.takeDamage(1); // Assuming your NNBoy class has a takeDamage function
});
this.physics.add.collider(this.axes, this.enemies, (axe, enemy) => {
// Handle collision here (e.g., damage the enemy or destroy the bullet)
axe.destroy();
enemy.takeDamage(1); // Assuming your NNBoy class has a takeDamage function
});
this.physics.add.collider(this.player, this.bottles, (player, bottle) => {
player.takeDamage(bottle);
bottle.destroy();
});
this.physics.add.collider(this.player, this.hearts, (player, heart) => {
player.addHealth(1);
heart.destroy();
});
this.add.rectangle(0, 0, gulchMap.widthInPixels, gulchMap.heightInPixels, 0x00ff00, 0.2);
//this.cameras.main.setScroll(800, 1100);
this.cameras.main.setBounds(0, 4800, 1600, 900);
// Background Music
this.bgMusic = this.sound.add('gulchMusic', { volume: 0.5 });
this.bgMusic.loop = true;
this.bgMusic.play();
}
update(time, delta) {
this.player.update();
const onBounds = this.cameras.main.getBounds();
if (this.player.body.y <= onBounds.y) {
this.cameras.main.setBounds(onBounds.x, onBounds.y-900, 1600, 900);
}
if (this.player.body.y >= onBounds.y+900) {
this.cameras.main.setBounds(onBounds.x, onBounds.y+900, 1600, 900);
}
if (this.player.body.x <= onBounds.x) {
this.cameras.main.setBounds(onBounds.x-1600, onBounds.y, 1600, 900);
}
if (this.player.body.x >= onBounds.x+1600) {
this.cameras.main.setBounds(onBounds.x+1600, onBounds.y, 1600, 900);
}
}
}

1
start_web.bat Normal file
View File

@ -0,0 +1 @@
python -m http.server 8000