Added simple map for calibration.

This commit is contained in:
genxium 2022-10-15 00:35:32 +08:00
parent f2c8d4cd65
commit 1122f4d71c
29 changed files with 543 additions and 182 deletions

View File

@ -1152,17 +1152,19 @@ func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRende
baseChange := player.Speed * pR.RollbackEstimatedDt * decodedInputSpeedFactor baseChange := player.Speed * pR.RollbackEstimatedDt * decodedInputSpeedFactor
dx := baseChange * float64(decodedInput[0]) dx := baseChange * float64(decodedInput[0])
dy := baseChange * float64(decodedInput[1]) dy := baseChange * float64(decodedInput[1])
dyInResolv := -dy
collisionPlayerIndex := COLLISION_PLAYER_INDEX_PREFIX + joinIndex collisionPlayerIndex := COLLISION_PLAYER_INDEX_PREFIX + joinIndex
playerCollider := pR.CollisionSysMap[collisionPlayerIndex] playerCollider := pR.CollisionSysMap[collisionPlayerIndex]
if collision := playerCollider.Check(dx, dy, "Barrier"); collision != nil { if collision := playerCollider.Check(dx, dyInResolv, "Barrier"); collision != nil {
changeWithCollision := collision.ContactWithObject(collision.Objects[0]) changeWithCollision := collision.ContactWithObject(collision.Objects[0])
Logger.Info(fmt.Sprintf("Collided: roomId=%v, playerId=%v, orig dx=%v, orig dy=%v, new dx =%v, new dy=%v", pR.Id, player.Id, dx, dy, changeWithCollision.X(), changeWithCollision.Y())) Logger.Info(fmt.Sprintf("Collided: roomId=%v, playerId=%v, orig dx=%v, orig dy=%v, new dx =%v, new dy=%v", pR.Id, player.Id, dx, dy, changeWithCollision.X(), changeWithCollision.Y()))
dx = changeWithCollision.X() dx = changeWithCollision.X()
dy = changeWithCollision.Y() dyInResolv = changeWithCollision.Y()
dy = -dyInResolv
} }
playerCollider.X += dx playerCollider.X += dx
playerCollider.Y += dy playerCollider.Y += dyInResolv
// Update in "collision space" // Update in "collision space"
playerCollider.Update() playerCollider.Update()
@ -1198,7 +1200,7 @@ func (pR *Room) refreshColliders() {
space := resolv.NewSpace(int(spaceW), int(spaceH), int(pR.StageTileW), int(pR.StageTileH)) // allocate a new collision space everytime after a battle is settled space := resolv.NewSpace(int(spaceW), int(spaceH), int(pR.StageTileW), int(pR.StageTileH)) // allocate a new collision space everytime after a battle is settled
for _, player := range pR.Players { for _, player := range pR.Players {
playerCollider := resolv.NewObject(player.X+spaceOffsetX, player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2) playerCollider := resolv.NewObject(player.X+spaceOffsetX, -player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2)
playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2) playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
playerCollider.SetShape(playerColliderShape) playerCollider.SetShape(playerColliderShape)
space.Add(playerCollider) space.Add(playerCollider)
@ -1231,10 +1233,9 @@ func (pR *Room) refreshColliders() {
barrierColliderShape.AddPoints(p.X, p.Y) barrierColliderShape.AddPoints(p.X, p.Y)
} }
barrierCollider := resolv.NewObject(barrier.Boundary.Anchor.X+spaceOffsetX, barrier.Boundary.Anchor.Y+spaceOffsetY, w, h, "Barrier") barrierCollider := resolv.NewObject(barrier.Boundary.Anchor.X+spaceOffsetX, -barrier.Boundary.Anchor.Y+spaceOffsetY, w, h, "Barrier")
barrierCollider.SetShape(barrierColliderShape) barrierCollider.SetShape(barrierColliderShape)
space.Add(barrierCollider) space.Add(barrierCollider)
pR.printBarrier(barrierCollider)
} }
} }

View File

@ -85,7 +85,9 @@ type Game struct {
func NewGame() *Game { func NewGame() *Game {
stageDiscreteW, stageDiscreteH, stageTileW, stageTileH, playerPosMap, barrierMap, err := parseStage("richsoil") stageName := "simple" // Use this for calibration
// stageName := "richsoil"
stageDiscreteW, stageDiscreteH, stageTileW, stageTileH, playerPosMap, barrierMap, err := parseStage(stageName)
if nil != err { if nil != err {
panic(err) panic(err)
} }

View File

@ -35,17 +35,17 @@ func NewWorldColliderDisplay(game *Game, stageDiscreteW, stageDiscreteH, stageTi
spaceOffsetX := float64(spaceW) * 0.5 spaceOffsetX := float64(spaceW) * 0.5
spaceOffsetY := float64(spaceH) * 0.5 spaceOffsetY := float64(spaceH) * 0.5
// TODO: Move collider y-axis transformation to a "dnmshared"
playerColliderRadius := float64(12) // hardcoded playerColliderRadius := float64(12) // hardcoded
space := resolv.NewSpace(int(spaceW), int(spaceH), int(stageTileW), int(stageTileH)) space := resolv.NewSpace(int(spaceW), int(spaceH), int(stageTileW), int(stageTileH))
for _, player := range playerList { for _, player := range playerList {
playerCollider := resolv.NewObject(player.X+spaceOffsetX, player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2, "Player") playerCollider := resolv.NewObject(player.X+spaceOffsetX, -player.Y+spaceOffsetY, playerColliderRadius*2, playerColliderRadius*2, "Player")
playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2) playerColliderShape := resolv.NewCircle(0, 0, playerColliderRadius*2)
playerCollider.SetShape(playerColliderShape) playerCollider.SetShape(playerColliderShape)
Logger.Info("player shape added:", zap.Any("shape", playerColliderShape)) Logger.Info("player shape added:", zap.Any("shape", playerColliderShape))
space.Add(playerCollider) space.Add(playerCollider)
} }
barrierLocalId := 0 barrierLocalId := 0
for _, barrier := range barrierList { for _, barrier := range barrierList {
var w float64 = 0 var w float64 = 0
@ -66,12 +66,12 @@ func NewWorldColliderDisplay(game *Game, stageDiscreteW, stageDiscreteH, stageTi
} }
barrierColliderShape := resolv.NewConvexPolygon() barrierColliderShape := resolv.NewConvexPolygon()
for i := len(barrier.Points)-1; i >= 0; i-- { for i := 0; i < len(barrier.Points); i++ {
p := barrier.Points[i] p := barrier.Points[i]
barrierColliderShape.AddPoints(p.X, p.Y) barrierColliderShape.AddPoints(p.X, p.Y)
} }
barrierCollider := resolv.NewObject(barrier.Anchor.X+spaceOffsetX, barrier.Anchor.Y+spaceOffsetY, w, h, "Barrier") barrierCollider := resolv.NewObject(barrier.Anchor.X+spaceOffsetX, -barrier.Anchor.Y+spaceOffsetY, w, h, "Barrier")
barrierCollider.SetShape(barrierColliderShape) barrierCollider.SetShape(barrierColliderShape)
Logger.Info("barrier shape added:", zap.Any("barrierLocalId", barrierLocalId), zap.Any("shape", barrierColliderShape)) Logger.Info("barrier shape added:", zap.Any("barrierLocalId", barrierLocalId), zap.Any("shape", barrierColliderShape))
@ -98,7 +98,7 @@ func (world *WorldColliderDisplay) Draw(screen *ebiten.Image) {
ebitenutil.DrawRect(screen, o.X, o.Y, o.W, o.H, drawColor) ebitenutil.DrawRect(screen, o.X, o.Y, o.W, o.H, drawColor)
} }
world.Game.DebugDraw(screen, world.Space) // world.Game.DebugDraw(screen, world.Space)
if world.Game.ShowHelpText { if world.Game.ShowHelpText {

View File

@ -1,170 +0,0 @@
package main
import (
"fmt"
"image/color"
"strconv"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/solarlune/resolv"
)
type WorldLineTest struct {
Game *Game
Space *resolv.Space
Player *resolv.Object
}
func NewWorldLineTest(game *Game) *WorldLineTest {
w := &WorldLineTest{Game: game}
w.Init()
return w
}
func (world *WorldLineTest) Init() {
gw := float64(world.Game.Width)
gh := float64(world.Game.Height)
cellSize := 8
world.Space = resolv.NewSpace(int(gw), int(gh), cellSize, cellSize)
// Construct geometry
geometry := []*resolv.Object{
resolv.NewObject(0, 0, 16, gh),
resolv.NewObject(gw-16, 0, 16, gh),
resolv.NewObject(0, 0, gw, 16),
resolv.NewObject(0, gh-24, gw, 32),
resolv.NewObject(0, gh-24, gw, 32),
resolv.NewObject(200, -160, 16, gh),
}
world.Space.Add(geometry...)
for _, o := range world.Space.Objects() {
o.AddTags("solid")
}
world.Player = resolv.NewObject(160, 160, 16, 16)
world.Player.AddTags("player")
world.Space.Add(world.Player)
}
func (world *WorldLineTest) Update() {
dx, dy := 0.0, 0.0
moveSpd := 2.0
if ebiten.IsKeyPressed(ebiten.KeyW) {
dy = -moveSpd
}
if ebiten.IsKeyPressed(ebiten.KeyS) {
dy += moveSpd
}
if ebiten.IsKeyPressed(ebiten.KeyA) {
dx = -moveSpd
}
if ebiten.IsKeyPressed(ebiten.KeyD) {
dx += moveSpd
}
if col := world.Player.Check(dx, 0, "solid"); col != nil {
dx = col.ContactWithObject(col.Objects[0]).X()
}
world.Player.X += dx
if col := world.Player.Check(0, dy, "solid"); col != nil {
dy = col.ContactWithObject(col.Objects[0]).Y()
}
world.Player.Y += dy
world.Player.Update()
}
func (world *WorldLineTest) Draw(screen *ebiten.Image) {
for _, o := range world.Space.Objects() {
drawColor := color.RGBA{60, 60, 60, 255}
if o.HasTags("player") {
drawColor = color.RGBA{0, 255, 0, 255}
}
ebitenutil.DrawRect(screen, o.X, o.Y, o.W, o.H, drawColor)
}
mouseX, mouseY := ebiten.CursorPosition()
mx, my := world.Space.WorldToSpace(float64(mouseX), float64(mouseY))
cx, cy := world.Player.CellPosition()
sightLine := world.Space.CellsInLine(cx, cy, mx, my)
interrupted := false
for i, cell := range sightLine {
if i == 0 { // Skip the beginning because that's the player
continue
}
drawColor := color.RGBA{255, 255, 0, 255}
// if interrupted {
// drawColor = color.RGBA{0, 0, 255, 255}
// }
if !interrupted && cell.ContainsTags("solid") {
drawColor = color.RGBA{255, 0, 0, 255}
interrupted = true
}
ebitenutil.DrawRect(screen,
float64(cell.X*world.Space.CellWidth),
float64(cell.Y*world.Space.CellHeight),
float64(world.Space.CellWidth),
float64(world.Space.CellHeight),
drawColor)
if interrupted {
break
}
}
if world.Game.Debug {
world.Game.DebugDraw(screen, world.Space)
}
if world.Game.ShowHelpText {
world.Game.DrawText(screen, 16, 16,
"~ Line of sight test ~",
"WASD keys: Move player",
"Mouse: Hover over impassible objects",
"to get the closest wall to the player.",
fmt.Sprintf("Mouse X: %d, Mouse Y: %d", mouseX, mouseY),
"Clear line of sight: "+strconv.FormatBool(!interrupted),
"",
"F1: Toggle Debug View",
"F2: Show / Hide help text",
"R: Restart world",
"E: Next world",
"Q: Previous world",
fmt.Sprintf("%d FPS (frames per second)", int(ebiten.CurrentFPS())),
fmt.Sprintf("%d TPS (ticks per second)", int(ebiten.CurrentTPS())),
)
}
}

View File

@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "2f0bdedd-7215-4462-ae54-b71c054cffbe",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View File

@ -0,0 +1,34 @@
{
"ver": "2.3.3",
"uuid": "c71de11b-4efc-4b7a-bbc7-eb926d08baf6",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {
"Tile_W256_H128_S01": {
"ver": "1.0.4",
"uuid": "b4fba8f6-ffc7-468b-9086-ec855c73388a",
"rawTextureUuid": "c71de11b-4efc-4b7a-bbc7-eb926d08baf6",
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 831,
"trimX": 0,
"trimY": 0,
"width": 2048,
"height": 386,
"rawWidth": 2048,
"rawHeight": 2048,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.2" tiledversion="1.2.2" name="Tile_W256_H128_S01" tilewidth="256" tileheight="128" tilecount="128" columns="8">
<image source="Tile_W256_H128_S01.png" width="2048" height="2048"/>
</tileset>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.0",
"uuid": "356c1165-6c15-40fe-95d0-baf11b053ada",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@ -0,0 +1,34 @@
{
"ver": "2.3.3",
"uuid": "ad433d85-5c88-4067-b4b7-129be0f54d57",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {
"Tile_W256_H256_S01": {
"ver": "1.0.4",
"uuid": "6c14c41c-4946-4992-b75d-8b580de43c83",
"rawTextureUuid": "ad433d85-5c88-4067-b4b7-129be0f54d57",
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 64,
"width": 1280,
"height": 896,
"rawWidth": 1280,
"rawHeight": 1024,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.2" tiledversion="1.2.2" name="Tile_W256_H256_S01" tilewidth="256" tileheight="256" tilecount="20" columns="5">
<grid orientation="isometric" width="256" height="128"/>
<image source="Tile_W256_H256_S01.png" width="1280" height="1024"/>
<terraintypes>
<terrain name="grass" tile="1"/>
<terrain name="dirt" tile="2"/>
</terraintypes>
<tile id="1" terrain="0,0,0,0"/>
<tile id="2" terrain="1,1,1,1"/>
<tile id="3" terrain="0,1,1,1"/>
<tile id="4" terrain="1,1,0,1"/>
<tile id="5" terrain="1,1,1,0"/>
<tile id="6" terrain="1,0,1,1"/>
<tile id="7" terrain="1,0,1,0"/>
<tile id="8" terrain="0,0,1,1"/>
<tile id="9" terrain="0,1,0,1"/>
<tile id="11" terrain="1,1,0,0"/>
<tile id="12" terrain="1,0,0,0"/>
<tile id="13" terrain="0,0,1,0"/>
<tile id="14" terrain="0,0,0,1"/>
<tile id="15" terrain="0,1,0,0"/>
</tileset>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.0",
"uuid": "e76fd642-3e97-4917-b6c7-0fc679a17644",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -0,0 +1,34 @@
{
"ver": "2.3.3",
"uuid": "2a91275b-bb80-44b8-9932-0913c465e4ea",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {
"Tile_W256_H256_S02": {
"ver": "1.0.4",
"uuid": "55ca9649-0476-4fdb-9faa-3721ec0a0d5a",
"rawTextureUuid": "2a91275b-bb80-44b8-9932-0913c465e4ea",
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 19.5,
"offsetY": 3.5,
"trimX": 89,
"trimY": 0,
"width": 1409,
"height": 251,
"rawWidth": 1548,
"rawHeight": 258,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.2" tiledversion="1.2.3" name="Tile_W256_H256_S02" tilewidth="256" tileheight="256" tilecount="6" columns="6">
<image source="Tile_W256_H256_S02.png" width="1548" height="258"/>
<tile id="0">
<objectgroup draworder="index">
<object id="1" x="120" y="-59">
<properties>
<property name="boundary_type" value="LowScoreTreasure"/>
</properties>
<polyline points="-1,73 -104,182 -42,283 74,287 125,147"/>
</object>
</objectgroup>
</tile>
<tile id="1">
<objectgroup draworder="index">
<object id="1" x="117" y="-36">
<properties>
<property name="boundary_type" value="HighScoreTreasure"/>
</properties>
<polyline points="13,41 -100,107 -101,236 19,265 119,248 123,105"/>
</object>
</objectgroup>
</tile>
<tile id="4">
<objectgroup draworder="index">
<object id="2" x="135" y="-96">
<properties>
<property name="boundary_type" value="GuardTower"/>
</properties>
<polyline points="0,0 -202,72 -240,408 295,406 189,51"/>
</object>
</objectgroup>
</tile>
</tileset>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.0",
"uuid": "0f6bb2a2-d39f-4055-a636-4e6dc3472a18",
"subMetas": {}
}

View File

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.2" tiledversion="1.2.3" orientation="isometric" renderorder="right-down" width="46" height="46" tilewidth="256" tileheight="128" infinite="0" nextlayerid="19" nextobjectid="167">
<tileset firstgid="1" source="Tile_W256_H256_S01.tsx"/>
<tileset firstgid="21" source="Tile_W256_H256_S02.tsx"/>
<layer id="11" name="GroundFloor" width="46" height="46">
<data encoding="base64" compression="zlib">
eJztmNsOAyEIRNXem97+/2urSU0MEbs2A9XIwzwtuocJLrjBORdMJpPJtIyeUZeKHhtiaJwWW9I+alfRuVh/ZWJoHJqZY2tpK/dJyPfWOxHcUvxa3Oi6eUUdmHd4sLLv0p570P6h4NbwfHRuzvMZuGuez8Bd83wWbur5LNyZ/fbRyNypz3PfUzR39uPesYZ7lmo692AqNDdyTatHo7mR88m3Po/ktj4/L3fr3jAyt+a5NG7974nN33y9SNzTJObvPD9wdYOS1D+VMgcujyOJaYmuR/bMWj1yefTMdNz5kfIceSZruffk/U9uLRn3etzoO5JxG/cq3P7H/bfu/QamEBWW
</data>
</layer>
<layer id="13" name="FirstFloor" width="46" height="46">
<data encoding="base64" compression="zlib">
eJztmdEKwyAMRfsXjv7/h449CEWSNNFrvMoOlIHdktMsWtddl8xtHNb7NKx4nhhW7DaHRAk6eK9Lyh/5bCR+SxHyIvB6M+LpQUbevFmR1oP6ankX41wP0XjWOsaM5o3kA473Q+uTmTkRvHkzot2nmdH6mGlOSmtMpjdyjuxQb4mIN9OaYnkzs5t3uyduiXij9ygedqv3k6g3y/xE1zvruk7rEzZ36Xvs3X+vWEueZPxumMHfO5dTvOsYm7tnTaljbO4t1rNaZvcTnxHW82zuXic294gLwh21P4i6MNU96oF0H9mz9zr0+ve6tj02UruVfTOad5U7Iifi/0JtTOsrVL2y647MleU+I8+ddMwge55+AUD0Fwk=
</data>
</layer>
<objectgroup id="14" name="PlayerStartingPos">
<object id="104" x="1310" y="4034">
<point/>
</object>
<object id="105" x="3752" y="1312">
<point/>
</object>
</objectgroup>
<objectgroup id="15" name="Barrier">
<properties>
<property name="type" value="barrier_and_shelter"/>
</properties>
<object id="103" x="-216" y="3488">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
</object>
<object id="106" x="-168" y="3560">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
</object>
<object id="107" x="-230" y="3518">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 2552,2504 3028,2476 150,-326"/>
</object>
<object id="108" x="-340" y="3508">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 630,610 616,624 1194,-3762 -56,-3784"/>
</object>
<object id="109" x="-184" y="-136">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 4,452 6116,524 6088,-72"/>
</object>
<object id="110" x="1586" y="5406">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 402,582 4556,708 4516,-36 250,-106"/>
</object>
<object id="111" x="4958" y="-342">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 294,6626 1488,6640 1138,70"/>
</object>
</objectgroup>
<objectgroup id="16" name="LowScoreTreasure">
<object id="144" gid="21" x="1342" y="1786" width="256" height="256"/>
<object id="145" gid="21" x="1186" y="2158" width="256" height="256"/>
<object id="146" gid="21" x="2714" y="3198" width="256" height="256"/>
<object id="147" gid="21" x="2616" y="3680" width="256" height="256"/>
<object id="148" gid="21" x="3172" y="3676" width="256" height="256"/>
<object id="149" gid="21" x="3526" y="3498" width="256" height="256"/>
<object id="150" gid="21" x="3834" y="3150" width="256" height="256"/>
<object id="151" gid="21" x="2826" y="2318" width="256" height="256"/>
<object id="152" gid="21" x="2960" y="3056" width="256" height="256"/>
<object id="153" gid="21" x="3336" y="2752" width="256" height="256"/>
<object id="154" gid="21" x="1730" y="2294" width="256" height="256"/>
<object id="155" gid="21" x="1480" y="632" width="256" height="256"/>
<object id="156" gid="21" x="1116" y="1100" width="256" height="256"/>
<object id="157" gid="21" x="3952" y="2528" width="256" height="256"/>
<object id="158" gid="21" x="4942" y="3562" width="256" height="256"/>
<object id="159" gid="21" x="5032" y="2896" width="256" height="256"/>
<object id="160" gid="21" x="2606" y="722" width="256" height="256"/>
<object id="161" gid="21" x="3026" y="710" width="256" height="256"/>
<object id="162" gid="21" x="1828" y="740" width="256" height="256"/>
<object id="163" gid="21" x="1678" y="890" width="256" height="256"/>
<object id="164" gid="21" x="1060" y="1324" width="256" height="256"/>
<object id="165" gid="21" x="4606" y="2242" width="256" height="256"/>
<object id="166" gid="21" x="3848" y="1936" width="256" height="256"/>
</objectgroup>
<objectgroup id="17" name="HighScoreTreasure">
<object id="125" gid="22" x="1926" y="4586" width="256" height="256"/>
<object id="126" gid="22" x="2274" y="4990" width="256" height="256"/>
<object id="127" gid="22" x="1326" y="3410" width="256" height="256"/>
<object id="128" gid="22" x="704" y="3696" width="256" height="256"/>
<object id="129" gid="22" x="1520" y="2944" width="256" height="256"/>
<object id="130" gid="22" x="886" y="3058" width="256" height="256"/>
<object id="131" gid="22" x="3120" y="4968" width="256" height="256"/>
<object id="132" gid="22" x="2584" y="4504" width="256" height="256"/>
<object id="133" gid="22" x="4344" y="4472" width="256" height="256"/>
<object id="134" gid="22" x="4504" y="4208" width="256" height="256"/>
<object id="135" gid="22" x="3490" y="1982" width="256" height="256"/>
<object id="136" gid="22" x="4068" y="2916" width="256" height="256"/>
<object id="137" gid="22" x="4578" y="3150" width="256" height="256"/>
<object id="138" gid="22" x="2326" y="762" width="256" height="256"/>
<object id="139" gid="22" x="2276" y="1348" width="256" height="256"/>
<object id="140" gid="22" x="3366" y="2418" width="256" height="256"/>
<object id="141" gid="22" x="4526" y="2586" width="256" height="256"/>
<object id="142" gid="22" x="4586" y="1174" width="256" height="256"/>
<object id="143" gid="22" x="4126" y="666" width="256" height="256"/>
</objectgroup>
<objectgroup id="18" name="GuardTower">
<object id="112" gid="25" x="904" y="3384" width="256" height="256"/>
<object id="113" gid="25" x="1714" y="4158" width="256" height="256"/>
<object id="114" gid="25" x="2734" y="5074" width="256" height="256"/>
<object id="115" gid="25" x="2180" y="3324" width="256" height="256"/>
<object id="116" gid="25" x="3108" y="4076" width="256" height="256"/>
<object id="117" gid="25" x="4634" y="4934" width="256" height="256"/>
<object id="118" gid="25" x="1094" y="1690" width="256" height="256"/>
<object id="119" gid="25" x="2004" y="884" width="256" height="256"/>
<object id="120" gid="25" x="2956" y="892" width="256" height="256"/>
<object id="121" gid="25" x="3488" y="624" width="256" height="256"/>
<object id="122" gid="25" x="4798" y="2626" width="256" height="256"/>
<object id="123" gid="25" x="4842" y="4494" width="256" height="256"/>
<object id="124" gid="25" x="4632" y="3624" width="256" height="256"/>
</objectgroup>
</map>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.2",
"uuid": "e310a2ad-1d44-41ed-858a-380474175aed",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,34 @@
{
"ver": "2.3.3",
"uuid": "b6b4c575-6690-4f1d-8165-a0098509066c",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {
"Tile_W300_H300_S01": {
"ver": "1.0.4",
"uuid": "8844352b-c6ac-4f30-8c8a-83955b2241b1",
"rawTextureUuid": "b6b4c575-6690-4f1d-8165-a0098509066c",
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 4,
"offsetY": -24.5,
"trimX": 97,
"trimY": 85,
"width": 114,
"height": 179,
"rawWidth": 300,
"rawHeight": 300,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.2" tiledversion="1.2.3" name="Tile_W300_H300_S01" tilewidth="300" tileheight="300" tilecount="1" columns="1">
<image source="Tile_W300_H300_S01.png" width="300" height="300"/>
<tile id="0">
<objectgroup draworder="index">
<object id="1" x="-27" y="-64">
<properties>
<property name="boundary_type" value="GuardTower"/>
</properties>
<polyline points="0,0 -95,179 18,407 361,434 458,168 333,-7"/>
</object>
</objectgroup>
</tile>
</tileset>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.0",
"uuid": "e8f0b0b6-6274-4931-bf88-af35ca68c4cc",
"subMetas": {}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1,34 @@
{
"ver": "2.3.3",
"uuid": "a6ef7a2f-0696-49d7-8e62-d2e495a2d032",
"type": "sprite",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {
"Tile_W64_H64_S01": {
"ver": "1.0.4",
"uuid": "f6779fb1-4117-459a-a175-ff9f3abf1545",
"rawTextureUuid": "a6ef7a2f-0696-49d7-8e62-d2e495a2d032",
"trimType": "auto",
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 256,
"height": 256,
"rawWidth": 256,
"rawHeight": 256,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"subMetas": {}
}
}
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.2" tiledversion="1.2.3" name="Tile_W64_H64_S01" tilewidth="64" tileheight="64" tilecount="16" columns="4">
<image source="Tile_W64_H64_S01.png" width="256" height="256"/>
<tile id="12">
<objectgroup draworder="index">
<object id="1" x="16" y="17">
<properties>
<property name="boundary_type" value="LowScoreTreasure"/>
</properties>
<polyline points="16,-48 88,3 26,93 -45,33"/>
</object>
</objectgroup>
</tile>
<tile id="15">
<objectgroup draworder="index">
<object id="1" x="7" y="4">
<properties>
<property name="boundary_type" value="HighScoreTreasure"/>
</properties>
<polyline points="-39,-35 106,-34 106,103 -37,103"/>
</object>
</objectgroup>
</tile>
</tileset>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.0",
"uuid": "04f5911f-c460-41ee-8a6c-c1fec92fdcfe",
"subMetas": {}
}

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.2" tiledversion="1.2.3" orientation="isometric" renderorder="right-down" width="50" height="50" tilewidth="64" tileheight="64" infinite="0" nextlayerid="11" nextobjectid="214">
<tileset firstgid="1" source="Tile_W64_H64_S01.tsx"/>
<tileset firstgid="17" source="Tile_W300_H300_S01.tsx"/>
<layer id="1" name="GroundFloor" width="50" height="50" locked="1">
<data encoding="base64" compression="zlib">
eJztz0ENACAMALGR4F8zNspyjwronZm7xPlcD0sPSw9LD0sPSw9LD0sPSw9LD0sPSw9LD0sPSw9LD0sPSw9LD0sPSw9LD0sPy7bHBg/ldQwR
</data>
</layer>
<objectgroup id="2" name="PlayerStartingPos">
<object id="135" x="1689.33" y="1872">
<point/>
</object>
<object id="137" x="2200" y="1800">
<point/>
</object>
</objectgroup>
<layer id="3" name="FirsrtFloor" width="50" height="50">
<data encoding="base64" compression="zlib">
eJztmd0OwiAMRheNv/P9n9eY2BtCgVJbvs6em8WauJ64wQdsW5L4cq7ULu5d6Ni/11vlu1oNkb34HNGldCDugzUETkydc0OmfF4iOhDkEtmBuK5uIAk3x7VAnxckHMnF+j2P+AzX8uaHSP97K2+26kiM5M1WHQEuC0Ry6eUZLicjufQcImS2dMDgCA7cGpKI4EBw40wkByLXw5iM5GS0rKvpx3rulvam6cfaRfr7/+DyMriXFK2LZNx6CO8lZdYFceyVujxNuvgNSGscLStduD2XWVa49PZcZvF0Gd1zmcXDRXLGp8HSxfuMz9LFe03j4eI1r1rmijzjSxIdb64rAxM=
</data>
</layer>
<objectgroup id="4" name="Barrier">
<properties>
<property name="type" value="barrier_and_shelter"/>
</properties>
<object id="1" x="234" y="730">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 -74,78 178,330 250,258"/>
</object>
<object id="2" x="804" y="156">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="0,0 -74,78 178,330 250,258"/>
</object>
<object id="3" x="230" y="410">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="250,-258 -74,78 178,330 504,0"/>
</object>
<object id="4" x="2470" y="2650">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="250,-258 -74,78 178,330 504,0"/>
</object>
<object id="5" x="1082.23" y="1537.08">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="548.339,-547.082 -94.2284,95.4898 230.657,408.918 867.772,-230"/>
</object>
<object id="9" x="311.741" y="1916">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="-22,30 -93.7407,98.1818 867.593,1062 938.259,992.909"/>
</object>
<object id="11" x="1015.74" y="1852">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="-26,26 -93.7407,98.1818 304.26,489.333 364.259,426.909"/>
</object>
<object id="14" x="1975.74" y="896">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="-26,26 -93.7407,98.1818 296.26,480 362.926,414.909"/>
</object>
<object id="15" x="1917.74" y="1798">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="-26,26 -93.7407,98.1818 285.593,472 352.259,402.909"/>
</object>
<object id="213" x="1044" y="1852">
<properties>
<property name="boundary_type" value="barrier"/>
</properties>
<polyline points="511.333,246 276.926,484.848 336.26,537.333 570.926,302.909"/>
</object>
</objectgroup>
</map>

View File

@ -0,0 +1,5 @@
{
"ver": "2.0.2",
"uuid": "0fe4d0fd-d537-4440-93f7-fffda8897ab1",
"subMetas": {}
}