From 3bafdafc2e158b7e4a28ba05056be0b3f33e97c7 Mon Sep 17 00:00:00 2001 From: Armin Benz Date: Wed, 2 Aug 2017 21:26:58 +0200 Subject: [PATCH] =?UTF-8?q?alle=20tiles=20werden=20angezeigt;=20Ende=20ein?= =?UTF-8?q?gef=C3=BCgt=20und=20flappy=20Mode=20eingef=C3=BCgt,=20beides=20?= =?UTF-8?q?funktioniert=20noch=20nicht=20ganz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/assets/levels/plevel002.tmx | 66 +++++++++--------- android/assets/menu/Settings.png | Bin 1938 -> 0 bytes android/assets/skins/menupack.atlas | 33 +++++++++ android/assets/skins/menupack.json | 20 ++++++ android/assets/skins/menupack.pack | 33 +++++++++ android/assets/skins/menupack.png | Bin 0 -> 2227 bytes build.gradle | 2 +- .../gameentities/ControllingType.java | 2 +- .../entities/gameentities/PlayerEntity.java | 4 ++ .../controller/GravityPlayerController.java | 39 ++++++++++- .../game/world/map/CRTiledMap.java | 8 ++- .../map/provider/EndlessMapProvider.java | 5 +- .../world/map/provider/StaticMapProvider.java | 4 ++ .../game/world/map/provider/TriggerType.java | 2 +- .../colorrunner/screens/menu/MainMenu.java | 23 ++---- data/Tileset.pdn | Bin 6312 -> 8649 bytes data/Tileset.png | Bin 1157 -> 1986 bytes 17 files changed, 184 insertions(+), 57 deletions(-) delete mode 100644 android/assets/menu/Settings.png create mode 100644 android/assets/skins/menupack.atlas create mode 100644 android/assets/skins/menupack.json create mode 100644 android/assets/skins/menupack.pack create mode 100644 android/assets/skins/menupack.png diff --git a/android/assets/levels/plevel002.tmx b/android/assets/levels/plevel002.tmx index a84af92..2ba605a 100644 --- a/android/assets/levels/plevel002.tmx +++ b/android/assets/levels/plevel002.tmx @@ -1,6 +1,6 @@ - + @@ -3521,9 +3521,9 @@ - - - + + + @@ -4021,9 +4021,9 @@ - - + + @@ -4523,7 +4523,7 @@ - + @@ -5023,7 +5023,7 @@ - + @@ -5523,7 +5523,7 @@ - + @@ -6023,7 +6023,7 @@ - + @@ -6523,7 +6523,7 @@ - + @@ -7023,7 +7023,7 @@ - + @@ -7523,7 +7523,7 @@ - + @@ -8023,7 +8023,7 @@ - + @@ -8521,9 +8521,9 @@ - - + + @@ -9021,9 +9021,9 @@ - - + + @@ -12054,7 +12054,7 @@ - + @@ -12554,7 +12554,7 @@ - + @@ -13054,7 +13054,7 @@ - + @@ -13554,7 +13554,7 @@ - + @@ -14026,7 +14026,6 @@ - @@ -14055,6 +14054,7 @@ + @@ -14554,7 +14554,7 @@ - + @@ -15054,7 +15054,7 @@ - + @@ -15554,7 +15554,7 @@ - + @@ -16054,7 +16054,7 @@ - + @@ -16554,7 +16554,7 @@ - + @@ -17054,7 +17054,7 @@ - + @@ -17554,7 +17554,7 @@ - + @@ -18054,7 +18054,7 @@ - + @@ -18554,7 +18554,7 @@ - + @@ -19026,7 +19026,6 @@ - @@ -19055,6 +19054,7 @@ + diff --git a/android/assets/menu/Settings.png b/android/assets/menu/Settings.png deleted file mode 100644 index 5ff5af208fdf2eadfd3b467082ac6c3c0ca6e79a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1938 zcmV;D2W|L?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00#m|L_t(&L*1Hdh*eb-$NeB7P+1`@0a6g{kD6b+4s!8_nvd-&Im2|bNAhQ?X~{v?zJChpF3(O(&hEf5Nr~h6?j>K zzSx+d&5n$S!_k7pg5L!;p%x8q$H&Fqq&XA4sq1d`?p%GH0%huG3+h|ICbmawcf%v% zV6LD_U>vs#I<4;tYqqZS9yob>%K~qzXJdNl`17xf-|;b5yUm@5(Q$&$ zv=h)_l?UP7pVub^U@)(7QY%5a`dF}S<8z#*F*FfF1?`u5>$Tw?{h1QAjpte)+B(A- z2%s$%|HuCIQ$hLCz6&&+>_iL{b@umlW3b}Lp}v|kb+we!;fvC*&NC-mK>*s&arL!< zFMLwg9EvopXd)e#36!A^_I&6~UVFWF*Ta*&%F{K$37Q1vK&C+6+PI<1)z<(Y_`)Z? zbv;~`X?o#AIuz-S-m14(d9w~rXoJLkCAakAU{A^3UfNtBkSQDTx`P22(3WDtD_|QR z_(C7waM0~=3O6#MI8%4dsH4rbVj0-|=|f*^U@KLB zIKTxx&26Tp>lRVSlgV{~4x5TM4+_G@y}NEysb-wtz3qmUN8*#)UAiuy%jlS(u!T*R zE`ST1;HEj|Y1)HD8h=Ew@>EU#y!Q&725n%xuspxh)fNS$Q5ZXLf*Ty+s%a;SG%znv zQ2EcVlqu}Lk{KDnuhog7f6&ZV0Q ztY#SkF(@UFw8sTDtSG6)W(M(V@3_X3%uNDyw58iHgTOZnkBggyE&`#THbEEIec9|> zPJ-YU)Bz*}YXtWQj8LX7fsQ$XWJ0DRjX-fXfuuZEGqhn=Eh~uKf^^RiwCxTXOo(R~ z#oYwrqb}CavbU@>#;*Xvq!p=R1rb(MFk#XR4u%ih;27ks0(pP?Hl;-5bTSi^VGZL5 zT_Hv~MR}S-H$h*QO&f54i{S-FxWXCkejpQP-Kw6av)T96J^o1F`b1Z#q8jdER@>*&!9I$5mX8q0`SjYW!-x+9wn?J z3c;is8QN43IXa^FXRTDH--Ib2sN3J?auS3U3~9DnU@riasf&jV0+3RShQ%ugE+f?G zH{J7ydT7Nhbr+D#S5fJ&&Y&LL|jh`G?rop+?1klwesk6O?k) z)rnEdkXD9s5rJ@n!gFs>3HZT%f3Yl5Ah`ffr5OSN12-vBcvV;0$76r)RK=@9r&g|! z=JLUC9oWC*%UFRuD*i-|GCzh3%##!s=WrgY!?+?+u~av*Mz7Ol@4J7$47IupCs-V~ zU$b6mm~2_9=_iXc97N&Fg;*n>m5Hj$S9>%JnE3j(u~`RkP}3eP(wN`Y*Q1uYqxHXL zOeyZ2a&g}U$uM>{RjgN8qB-Vk+HN^fUA3USulF(?w$#4vd||`WnK|zO%2~Zukj>7v z!^C#!0=U2lZgA9e)63b5=U<|eD;RU3%vGw<8OnQ$fVkgM0z#uvWfpy>=v z-r2JGwnTU5KFg8oT&9qNKMeS`@riFuBX=UkIbhZpM*`=t)NY4I!~rjc zI0e`N0e0Q`rq)E=l9f++i>l|eJ>gCBgP{C)`K+d*#ZP+ZpsV}XHn559;r(||P{iSE z!45%_z$O$0^u@+(ZT9Ml5GfGwF0%NSqldlf+SBa7K4Hq#9XWoC6{}e54(-n}zKk06 Y9}A`uIO^^-8UO$Q07*qoM6N<$f&%KFsQ>@~ diff --git a/android/assets/skins/menupack.atlas b/android/assets/skins/menupack.atlas new file mode 100644 index 0000000..57c016e --- /dev/null +++ b/android/assets/skins/menupack.atlas @@ -0,0 +1,33 @@ + +menupack.png +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +blau + rotate: false + xy: 1, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +gelb + rotate: false + xy: 131, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +grün + rotate: false + xy: 261, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +rot + rotate: false + xy: 391, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 diff --git a/android/assets/skins/menupack.json b/android/assets/skins/menupack.json new file mode 100644 index 0000000..82ae54a --- /dev/null +++ b/android/assets/skins/menupack.json @@ -0,0 +1,20 @@ +{ + "com.badlogic.gdx.graphics.g2d.BitmapFont": { + "font": { "file": "fonts/font.fnt" }, + }, + "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { + "default": { "up": "blau" , "down": "blau", "font": font, "pressedOffsetY": -4 } + }, + "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { + "default": { "up": "grün" , "down": "grün", "font": font, "pressedOffsetY": -4 } + }, + "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { + "default": { "up": "gelb" , "down": "gelb", "font": font, "pressedOffsetY": -4 } + }, + "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": { + "default": { "up": "rot" , "down": "rot", "font": font, "pressedOffsetY": -4 } + }, + "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": { + "default": { "font": font} + } +} \ No newline at end of file diff --git a/android/assets/skins/menupack.pack b/android/assets/skins/menupack.pack new file mode 100644 index 0000000..57c016e --- /dev/null +++ b/android/assets/skins/menupack.pack @@ -0,0 +1,33 @@ + +menupack.png +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +blau + rotate: false + xy: 1, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +gelb + rotate: false + xy: 131, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +grün + rotate: false + xy: 261, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 +rot + rotate: false + xy: 391, 1 + size: 128, 128 + orig: 128, 128 + offset: 0, 0 + index: -1 diff --git a/android/assets/skins/menupack.png b/android/assets/skins/menupack.png new file mode 100644 index 0000000000000000000000000000000000000000..353ec83d38d2bc523763268c1c40c776a417805c GIT binary patch literal 2227 zcmeAS@N?(olHy`uVBq!ia0y~yU;#22893O0l&&g^3IhX2m8XkiNX4zUHw<|h6d0Ht zWfYoN*lH5EZ}zyda_{ukS``1w>rBzI$g)|HLG6)T3?Jm5UuR(uX7FJ!U<8>5VI2S( z>;M!2(jWnt5;eF;qg9cBmdfc^ rl+rZGu`rOBUWO@L(zT0p8x;)>~h@K|c3%^>bP0l+XkKQ}5ul literal 0 HcmV?d00001 diff --git a/build.gradle b/build.gradle index 7a52a70..ceffee3 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.1' + classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.robovm:robovm-gradle-plugin:1.9.0' } } diff --git a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/ControllingType.java b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/ControllingType.java index 6a76797..d21b4be 100644 --- a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/ControllingType.java +++ b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/ControllingType.java @@ -5,5 +5,5 @@ package de.samdev.colorrunner.game.world.entities.gameentities; */ public enum ControllingType { - RUNBOTTOM, RUNTOP, FLY, NOTHING + RUNBOTTOM, RUNTOP, FLY, NOTHING, GRAVITY } diff --git a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/PlayerEntity.java b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/PlayerEntity.java index 1ad81d0..cb0490f 100644 --- a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/PlayerEntity.java +++ b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/PlayerEntity.java @@ -9,6 +9,7 @@ import de.samdev.colorrunner.game.world.SwipeDirection; import de.samdev.colorrunner.game.world.entities.CRGameEntity; import de.samdev.colorrunner.game.world.entities.MovingEntity; import de.samdev.colorrunner.game.world.entities.gameentities.controller.AbstractPlayerController; +import de.samdev.colorrunner.game.world.entities.gameentities.controller.GravityPlayerController; import de.samdev.colorrunner.game.world.entities.gameentities.controller.RunBottomPlayerController; import de.samdev.colorrunner.game.world.entities.gameentities.controller.FlyPlayerController; import de.samdev.colorrunner.game.world.entities.gameentities.controller.RunTopPlayerController; @@ -52,6 +53,9 @@ public class PlayerEntity extends MovingEntity { case FLY: if (controller.getControllerType() != ControllingType.FLY) controller = new FlyPlayerController(this); break; + case GRAVITY: + if (controller.getControllerType() != ControllingType.GRAVITY) controller = new GravityPlayerController(this); + break; } controller.update(delta); diff --git a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/controller/GravityPlayerController.java b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/controller/GravityPlayerController.java index 3fb47a0..86d8289 100644 --- a/core/src/de/samdev/colorrunner/game/world/entities/gameentities/controller/GravityPlayerController.java +++ b/core/src/de/samdev/colorrunner/game/world/entities/gameentities/controller/GravityPlayerController.java @@ -1,8 +1,45 @@ package de.samdev.colorrunner.game.world.entities.gameentities.controller; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; + +import de.samdev.colorrunner.game.world.entities.gameentities.ControllingType; +import de.samdev.colorrunner.game.world.entities.gameentities.PlayerEntity; + /** * Created by benza on 25.05.2017. */ -public class GravityPlayerController { +public class GravityPlayerController extends AbstractPlayerController{ + public GravityPlayerController(PlayerEntity e) + { + super(e); + } + + @Override + public void update(float delta) { + boolean down = Gdx.input.isKeyPressed(Input.Keys.SPACE) || Gdx.input.isTouched(); + + Player.velocity.y -= GRAVITY_FORCE * delta; + + if (Player.velocity.y < -TERMINAL_VELOCITY) { + Player.velocity.y = -TERMINAL_VELOCITY; + } + + if (Player.isTouching_BOTTOM() && Player.velocity.y < 0) + Player.velocity.y = 0; + } + + @Override + public ControllingType getControllerType() { + return ControllingType.GRAVITY; + } + + @Override + public void jumpPressed() { + if(Player.isTouching_BOTTOM() || Player.isTouching_TOP()) + { + GRAVITY_FORCE = GRAVITY_FORCE * -1; + } + } } diff --git a/core/src/de/samdev/colorrunner/game/world/map/CRTiledMap.java b/core/src/de/samdev/colorrunner/game/world/map/CRTiledMap.java index 0b5b9ae..9642755 100644 --- a/core/src/de/samdev/colorrunner/game/world/map/CRTiledMap.java +++ b/core/src/de/samdev/colorrunner/game/world/map/CRTiledMap.java @@ -25,6 +25,8 @@ public class CRTiledMap { public final static int GID_INTER_UP = 16; public final static int GID_INTER_DOWN = 17; public final static int GID_INTER_RIGHT = 18; + public final static int GID_INTER_MID = 19; + public final static int GID_INTER_END = 20; public int width; public int height; @@ -109,6 +111,9 @@ public class CRTiledMap { case CRTiledMap.GID_EMPTY_2: return null; + case CRTiledMap.GID_MID: + return new NoStateFloorTileEntity(world, px, py); + case CRTiledMap.GID_UP: return new UpStateFloorTileEntity(world, px, py); @@ -121,9 +126,6 @@ public class CRTiledMap { case CRTiledMap.GID_LEFT: return new LeftStateFloorTileEntity(world, px, py); - case CRTiledMap.GID_MID: - return new NoStateFloorTileEntity(world, px, py); - default: Gdx.app.error("MapLoad", "Unknown GID: " + id); return null; diff --git a/core/src/de/samdev/colorrunner/game/world/map/provider/EndlessMapProvider.java b/core/src/de/samdev/colorrunner/game/world/map/provider/EndlessMapProvider.java index e7e8a15..6bfc94e 100644 --- a/core/src/de/samdev/colorrunner/game/world/map/provider/EndlessMapProvider.java +++ b/core/src/de/samdev/colorrunner/game/world/map/provider/EndlessMapProvider.java @@ -2,7 +2,6 @@ package de.samdev.colorrunner.game.world.map.provider; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Rectangle; -import com.badlogic.gdx.math.Vector2; import java.util.ArrayList; import java.util.List; @@ -55,6 +54,10 @@ public class EndlessMapProvider extends MapProvider { return TriggerType.RUNTOP; else if( sections.get(i).crTiledMap.interaktionen[x - start][y] == CRTiledMap.GID_INTER_RIGHT) return TriggerType.FLY; + else if( sections.get(i).crTiledMap.interaktionen[x - start][y] == CRTiledMap.GID_INTER_MID) + return TriggerType.GRAVITY; + else if( sections.get(i).crTiledMap.interaktionen[x - start][y] == CRTiledMap.GID_INTER_END) + return TriggerType.END; else if(sections.get(i).crTiledMap.interaktionen[x - start][y] == 0) return TriggerType.NOTHING; else { diff --git a/core/src/de/samdev/colorrunner/game/world/map/provider/StaticMapProvider.java b/core/src/de/samdev/colorrunner/game/world/map/provider/StaticMapProvider.java index 2ee1a01..32b4aa8 100644 --- a/core/src/de/samdev/colorrunner/game/world/map/provider/StaticMapProvider.java +++ b/core/src/de/samdev/colorrunner/game/world/map/provider/StaticMapProvider.java @@ -42,6 +42,10 @@ public class StaticMapProvider extends MapProvider { return TriggerType.RUNBOTTOM; else if(map.interaktionen[x][y] == CRTiledMap.GID_INTER_RIGHT) return TriggerType.FLY; + else if(map.interaktionen[x][y] == CRTiledMap.GID_INTER_MID) + return TriggerType.GRAVITY; + else if(map.interaktionen[x][y] == CRTiledMap.GID_INTER_END) + return TriggerType.END; else if(map.interaktionen[x][y] == 0) return TriggerType.NOTHING; else diff --git a/core/src/de/samdev/colorrunner/game/world/map/provider/TriggerType.java b/core/src/de/samdev/colorrunner/game/world/map/provider/TriggerType.java index 54fd255..93a69a8 100644 --- a/core/src/de/samdev/colorrunner/game/world/map/provider/TriggerType.java +++ b/core/src/de/samdev/colorrunner/game/world/map/provider/TriggerType.java @@ -2,5 +2,5 @@ package de.samdev.colorrunner.game.world.map.provider; public enum TriggerType { - RUNBOTTOM, RUNTOP, FLY, NOTHING + RUNBOTTOM, RUNTOP, FLY, NOTHING, GRAVITY, END } \ No newline at end of file diff --git a/core/src/de/samdev/colorrunner/screens/menu/MainMenu.java b/core/src/de/samdev/colorrunner/screens/menu/MainMenu.java index 8631c76..82503d8 100644 --- a/core/src/de/samdev/colorrunner/screens/menu/MainMenu.java +++ b/core/src/de/samdev/colorrunner/screens/menu/MainMenu.java @@ -9,22 +9,17 @@ import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; -import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; -import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import de.samdev.colorrunner.CRGame; import de.samdev.colorrunner.game.world.map.CRMapStorage; -import de.samdev.colorrunner.game.world.map.provider.EndlessMapProvider; import de.samdev.colorrunner.game.world.map.provider.StaticMapProvider; - import de.samdev.colorrunner.screens.gameScreen.GameScreen; public class MainMenu implements Screen { @@ -45,10 +40,7 @@ public class MainMenu implements Screen { private TextButton buttonOption = new TextButton("Option", skin); private TextButton buttonExit = new TextButton("Exit", skin); - private Texture myTexture = new Texture(Gdx.files.internal("menu/Settings.png")); - private TextureRegion myTextureRegion= new TextureRegion(myTexture); - private TextureRegionDrawable myTexRegionDrawable = new TextureRegionDrawable(myTextureRegion); - private ImageButton optionButton = new ImageButton(myTexRegionDrawable); + // folgendes mal als Beispiel :) /* @@ -141,16 +133,15 @@ button3.addListener(new InputListener(){ Gdx.app.exit(); } }); - - table.add(title).padBottom(40).row(); - table.add(buttonPlay1).size((int)((double)Gdx.graphics.getWidth() / 2.0D),80).padBottom(20).row(); - table.add(buttonPlay2).size((int)((double)Gdx.graphics.getWidth() / 2.0D),80).padBottom(20).row(); - table.add(buttonOption).size((int)((double)Gdx.graphics.getWidth() / 2.0D),80).padBottom(20).row(); - table.add(buttonExit).size((int)((double)Gdx.graphics.getWidth() / 2.0D),80).padBottom(20).row(); + + table.add(buttonPlay1).size((int)((double)Gdx.graphics.getWidth() / 2.0D),250); + table.add(buttonPlay2).size((int)((double)Gdx.graphics.getWidth() / 2.0D),250).row(); + table.add(title).expand().row(); + table.add(buttonOption).size((int)((double)Gdx.graphics.getWidth() / 2.0D),250); + table.add(buttonExit).size((int)((double)Gdx.graphics.getWidth() / 2.0D),250); table.setFillParent(true); stage.addActor(table); - stage.addActor(optionButton); Gdx.input.setInputProcessor(stage); } diff --git a/data/Tileset.pdn b/data/Tileset.pdn index bbc5ecdb3858dbf3b3b009e61f5d369cc3f6c89b..1b2b6e5e0d3fc147d91cdc6141ea8a0b77de69fa 100644 GIT binary patch literal 8649 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 ANB{r; delta 2185 zcmb_dYi!%r6}Gn`8;T%%b@7ib^|}=ZR<@x;N_?zvT~eZ6lqgaXsmBr+dQg-^NhC!* zEVT=_9~%l3jpqqnhGBIdNt$M!>jBP+En8yrN7fZXB|_o^iF4C6nsRV1TUH`7fvBzKmdPk!a16%! z;tI=^@w98$odd*%HxNr*$BxET~4$9 zVz>~LI1B9sIe?{etRM8%Sxqd9sxQxFYP_o+!{U4?DIzgB5%y|8RVV~i#sS$e!=zY% zFe2kNEF5vh@J7fw3|jpN;?ck~Wb&u9fSa@zl&UX><{Tl)rbbdgzMO=`m<8eMyv^kb znRFeLoir_0cvW;^f)$bLg3V>;prj5^GV3nsD1*U@j^N=KopDJDo6%8IcAMKE?MjIi z3b2U*NLw*32MG?L(>0Wp^i0Fuh=6s*Y&Io4;>R|t<`!xmw+=F9QgxJ)FkjJf3=fGK zLxl+}T8^c2Xx*1jm&3s|wJWz};HxbDlvhf{)iyDPP-gHgL^jv+3LEBH*|m=(2F5ah0X zSYoh5&Y4Xo3$UHDT0JVK+8cJK3=L;b( zkt)E&ga(=;Wv!9Iq=u5LS4lMM;ZoT|2|>%13S@?LJy-I$g0eGZD}-em=qS}brPR9JpJ~t-<#gb+oWDX>?6H!OM>QD9nAK9K7OKm& zMAVD&MJIr}5lD!c=$Mwqs9_j@X$;4m={%5Eq8Np#J_@p74^{BIDHU}ie5PUH>eXRXDg-ii(3?+T5ri*+f(VruxLc5sX)rnkc>^Ud*eFAx zs$3ArLO~+C&r&woi*g}vlUW~ArIJ`$y3=u*BFKg*;ncj)Fk6XweD)%Wc!f9=NI+;_ z3!ycZP&k1|dbC;6;M^K#P6sIUBRXb3DiS0$@9U(bb;R-fe^T_8+kNVkowpg|+WkxLT zv&YNv$G$3vB|WPY2Q2%{|2prR?3cba_0Z?VPu+iiPfyQiUr*1E%2UsO@voomC7R0a z{$5jaWH-}mZZ7T?dZDJZFWl>IKHs&qt(8ooL7j{o-d)LYl)_nz)-w$EI- zRnrFN7nS-?w^l2+#+qY83)P{K^_Rw{7psj)4hILOPx`Mai@uq*Y&RzKxfZ>7v@^e8 zJaOuku~zr?E#>>-le2SQXg_{n?{@f=$%VzS*AA^J z2Pf7(nq9kaVQJjh)ZXo$&n*tkY;Eo72E8_YX7h08jf+d;n{O;$e*N-f$8js1J#oAB zcFQ{3qUD?KufnH0qiz1whwbM&hprftv*(_jnORvswlX>S(){|w^0wFQHy=OUIkGWs zIa$3v)Pb zmX5t}TL<2*-MszLqu2Z9TFV0)f6l2>zV?BI-*?{p=KfQAS4Ykc9H1^u{qE41@sr6v z{d#5n!?CvY#?u?iT^}%2L;`sP) zyH$LpJ@L@-F8Kb^AJ%HwOP!x>p8eZF#t3-_XU^|hxv3ZDo-r<%29eVT&-si;Rz{8r zLlaNVUA_F5HRlgIuGxO~#@F3l{K1h&+M|{m*%N0clCyWM3psgYZKJn2`tW1Tmml7> T^E=D!-mMeg{dUg}dVBr>l6YpR diff --git a/data/Tileset.png b/data/Tileset.png index 7e75f377a22299db279e5aeb1b09685802c398d9..cde291b49a3606542eec0c4f08a8dcda191f87eb 100644 GIT binary patch literal 1986 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I8A$FCoGuTfSkfJR9T^xl_H+M9WMyDrW(e>J zaRrJqF#HEYhX4N=8X6j|T)Fc2@#FtM&L|iSf#Dtk%jU@X0{zHY;1OBOz`%D1gc(IO zyc&Rlk|nMYCBgY=CFO}lsSE{)nRz98d8s7|CVB>XhQ=n$(N(}qW$fwV7*Y}U_S);b z$0-tS7mKv+{1;8GkGolVY1QN`u80@0Lc-O@+ue=-oH!lN|F1^Dy-&un=*fwR#>`Jo zOjJ&1J2g?+{T$B}W%s^0k{TdM;{cF~v;`n#XB(8yYqJ*`S|xM-~EcbJ?8Q9 zJLFDFZLpMoe{K4y!kQiXi&W3|et&kF`Fe11)zrhOwdE@9cVc&T0ZsUPmpQ!l^Lzdn z{=c5z{;D&}|7WvLxo>a0f&IH&`su$npB*kXm%CpHG}PYy!xqO1@8yS|TG+1pI2EY3 zSbE!S{--;1ZGSwroO7=KaP#G>=Bq(U?;C#D^Sr<=_P*}+%~Q>_t3X0VAKq=?Muz}kz3~eiixS)!e_Sn*W4NR<=1rk)zv=Oc0&>rdOu4ZYur1NDFZ|xQzW&-PAKw=4*=PIl4lrum&j~Z@ z+Wgz|#6kFa{9{(OJpFs^cV&XNotAmCIPY69+%Ud7`z`x&qQ6}(z1;cS4HS3x_;aq@ zwJ#LrjsEr+E;vtO$I-VxetbK`od5sKbcu@1xe?6$mcO^(Uhy_VzHD=z71UC3HaT~3 znTq#8%;m?|n3o;Rg^KgnZ}|7gq3^a5I04n!6#S0foGW{(FdCSa;3;VNKlvDG-l>nb zfyA&Ss6X~>d3~kQmU-RaR5-H{loUU|IdB4I&TjcN>mYInQ*otBh;B$ie*TNO_SpL) zV0#fM7g+_)q`uDn!uumT^gu2FM-OHOz-i2D{x6dIg~7T&+DXe(`-LCxBGbL;fBbsD i0Z3vXJz|cJ|Ic(j9#r85lP9bN@+X1@buyJR*x3 z82Ao>Fr%o3R|8N`vcxr_Bsf2+OSs`aEwK5@pis<5P)91(6Ux;9u?VV7} znWNWuR&~Qp7PILGo(bKE!4%wQ|KaJUIWIq6{kQL7(1q#jD?W?L`p)cM`gPjxnFpqp zXk320`s({#i$l4rteh^h%JyEoQ(?4r`lGu zlTE@eTomaQE4ec9TJ*b>jnd`&Pks53^>ue2bACorLmQXXtVI`P=e}D4v|?%F*GHPA zpTuItOH5oB%kI(u3HCOAy~e(RS7?{^i;ONe{OWk8v}^XKA1TSR{Xz1QckeEE%_z02 zT`h0L_RPIc=Lzl*bSg7j7Z3E_TKjC*{N5Mu`g}XKT{qxSKU#>b``;YzaPMfEf zTW%eH_SN9mv;)2WJ}>^#|3*|D$gK)`FkiN|zh!k@%I}(#IR3@y?CV~b%zN+t>+`8^ zKTqtDbBpJ)c~s`cTV5h{{`=x{f_Hs@iqu)}1st2ZTRq&%%yQA}ldluM>^UHMwCBaT zP1AQsBeH*dsEymt5nJJa=DqOxDFv=mF<*1l9F@pt-x$rV#i z`n-;^4|z59#y(T`65~qSo_Qh>s=L#_>`mVPLgwPxCqOrEJRmw(>>JE>eO9@f8S|YF z^;N~)?Emt7>f6r~fx7A}3RLfW3%>na`E!+ot>y<|m=}RQ-s>;?TXxp