From 7fa102e78dc9f378135ac8240145cb68c9639dbe Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 16 Feb 2017 19:01:58 -0500 Subject: [PATCH] v0.5.0b: implemented a second layer of custom tiles for walls --- .../main/assets/custom_tiles/prison_exit.png | Bin 3002 -> 3572 bytes .../shatteredpixeldungeon/levels/Level.java | 11 +++++ .../levels/PrisonBossLevel.java | 44 +++++++++++++++++- .../scenes/GameScene.java | 12 +++++ 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/core/src/main/assets/custom_tiles/prison_exit.png b/core/src/main/assets/custom_tiles/prison_exit.png index 85edb73957b8aa9761460440b8250cc1b7c23cba..a01d1bf05c219134c773cf4678e2237cfbb41e46 100644 GIT binary patch delta 2958 zcmZ9Oc~n!^7RK*Qhyh|v5N)vdl3-P!&yu2uC_@s(Do+8y2|)oT1eM7OGKAdAB#0uQ zA_!|DGERBoesbp)ZTvXwG5X?vFP*HyEsA z?4W=A_3|~B_OXGU5B4IhdliZuX+udce`{nv?r*kjP=ca7Rs(9m# zsve42+B2=8EKX?0C+^`kk}*Geh2{%C-L1j4T*@iDlN0T7hq&GMz|*ZPLxzI2*mw3O zeW3D)!0=*tUTgHNHV;O_zw z^Uv$`?Cyv#9>Ve+s1q((%eL>|@8Ws#P)sy7u935F zLY8X9)hhJG@Z8pD@9v<2*5LlRh%xFStzt(kS^^(Q1#f7F1o2Qsn4fw6DZ; zGndRGO*KI6eHvg6j$U@H4{xJHiLn<=<3KsOIlB>7g5me692WiXXIwFva8QXF!?yf| zIW0tg>Yg6_V`A|*wiowShMvH*|DzFp?$KabK+|5bXU0R2-4^l;hBWe}pMT@{-W0zb zyu%-HD`V9?M7s`;MxIRLSEOz0SP^DRz%WcW!+4u7YV{6FISs&mIvw>dGmJOJYSMkw zPx5+Kf#}I8uumkuX6^rV${}`%V6Ce!r8`KGV26y?X;If7MGyK8)!))Gly8IP48pZY z{gp>u&}g10xc8Uc2!%PuWP(yB71}1^;l``leyx zHG9_mPt1hqkMRWRp3U(&2N&4+t&K2~UWxDZ3yW`XYS1#~I}H@58SpnJVHm+8th6C< zM-i0i6j5jA>O^^uHCZ!d7wbgw~+nlBpqXp7Pv+BHGd{2x!=A__16;dgh_N` z>A5K%QCCROLOE8ta{L^0r`WL}sMXJYC@`mswv(;As7kU!4mweKvAelEStgm|u5s`9 zhZjK5vtBl-K27tVrd%QLYL<5#-!PlRC7U>K-uO`URq?-}4a>;88vy+LUF8Ug}$&Hs-I45Al4Fv8bOHKUxE>1qL3O>T5oJTN!PdkWqs(nbn-+4C6->Z zAU=T~wPih)Crp3?t@uU0VN^d-WNK-HhaUYUFD-{aFN#l>q-FS7jz$>9^hM#*AD zvaJSnY6pw4G`Zx`I>R3vnh3pAVJmr0v{Cl{{qG`{XKzms5kD$1uS3)cg>Ema&(t@% zzdV{G#d$b@r?l{cy7PHmj)jr6S_oO8&*H_K19F^lO@6my#icDWsmUhnV2>&(wxnzv zt49;^jA0d~rSIgS+|-_LAF|tO6%FOG6uhTT5B|^G)NY*dlV6=_G&n<+Qse34$Hx8P z8u(kxz_xLL1K(G~f7>6lFkzXVmus zeTA>n9r(XUQ5Qmnqpj``Ykx4{V_T%C5dSP_B`w`Dy@S{coRv#FG%37E&Yg$TTv91d@1sgn}0iLz&pH8CpBqPC*_9_o*Qj zz#zk^2!qVIzA)WDn&Mz9EtUoF<#IBeLgP>bejl(mL@Fr@zK+C`bq+$TE_ohw)2Vnb z(NXhk5qLt)mjde{ttcA!8j(7{SCD8L=dURRd3quaI9%ZbScQ^-DQtlnuLjK#G{pNA z;gLIMXj9lyodfDrXZh`VTYr;_cP+lsW(OhJ9ajt`SzAh9M7f^{xI7p$saTpcJ{h8W zv}QC)lCDd%7H)6Wy}taW^z>&lL3xaP8ikBx{8V@L{rdIw76%=NRWc`E`jFnrcb}Qo zKZs6$9#*9foI!xH9h|2d)8Ba=Ab$vmyGrb|)OOD`ob}B(_rhFQ}aIX~L!pYU&n*X|tv delta 2383 zcmY+Gc~nzp8piLJlUYB50y4Nk|~qkmU|cJ2Rc{kMF$C?|sg5-uImE zk8gVEExLFmxcBrb_v>7kfV5lpkO2SyzuCdr3BaoU{QzK33Jng5NCjVt8^PZ^X{3kk zPTtc|S9VRQXBWHft?y*rjXSU2H+XFM?HOn3XFioj7-`!SA*-E`bl(+(M2c>~6a>b8 zw34 zvxC-Fs2y*ks$CI)WY_Z@%H}LqmdaB-0cTVM{QTyi{KjBH)DNc}Y@lCOh5MP6L%+D6 zyzFvT1>b%lGRpyRVC`TzWa~%ga+I;-2S^_Fq%q z%vbvk3l>GIDM8Nv;Oj1p_;7yzIP{E?zVHmazR*~C$w+b4Cxj@=iX8g|sYauMD)ius{k&VeyM7kCaLGhf|K zGmbpR1S9c0C$H88BGFzAsiLm<;X5GV1qc32+kJd76F~gRP6?C6r2YGCqzO9Zo#--US<9pJrY=^uJ zLu>_9*>AmLjNd(txDSYXsyzx#Q>+D@bJE=3e)Ht$QIl~Ke&=0fInL^m?rU}}RNrZN zOJ8A6w{|2Plg$k3GRI^FTrf^{Z7eVyL}tZbbKV^6kS=`N`4vmaOkdkoNA=1;T4q}) z;v(yd$zjloMZf-NUtnI%$zI}SBz2sezJ2xXkIc`jrHPE&nbZ^0ITCYSatN61XH=-KKT`gDx(wv8>(+piC_uab~v5nIDIW0P!-7AzF0?Gdd z4LKOGkz%oAHvUl{c;kV2;vdd$F^eu@1ZK9>PfN~13yu#tFcVw#JRldsw|ZnL~qYhA^4Z1`DNaC>jfddT5*J+@P(SmHK=kcn-BA zvE~8DWu^(9;?O&A;FIF(oKBb)yeGy2W=C+=oINCYL)%xy{h%*ia;^}dXiEfcy= zab`wRVOTNt9OABebnN0KZOVu(X!fPY1s`oayKH;O7qVx*&9@?JM*l}89+QF=7wP0D zmqcC~s3Kfb_q`#|Oq>`i`E>Q;hYj+uRr8d?#^(aY#t{Kqt2P-q+Ga!?=$jE()=1^@ zlzwiBI1Quz?pFDT(qII0N}DA?!?pi)_%NItYrD~&uY2bQ4upCKDDJCthkZqEenImS z+tT5$AzjR-i_@>2rsq>i@Q*Ee9bcBD2|VSN4069xknMeJYx7Z zjGC$->Nl|aTPaE#`*#)P0tP7XZ3C8Q0|PbVAs3*-L&QWJiZgthLRH%ElnV&-qYxfa zQC=~`O{Soml$Y_DTn#9=07axpiXKxu1}tSGZ9sss`wfvk*P7y?j6~J6C~pJ%N-7Jc z`XtXvw$7PNl1{DtZw#fiQnNO3RW9H8eBJ@|_O6e+?;E+LUiBl9X9I&?t>~{>b{r#5 zl%O-%;^|{8=3e{Y=jpEJSJ z6Sulzcvk(;@T`9&#w0ri(&#Z;g1ivt|2`h730sG}F1kSqmr?vs_1|xudIU6PQL1LV(9A_|bL?R1-wK!T}8t%|a zH6WLO0q!Cp@S`LE*5hd25EfvzJ(`>_vzzL*xT2>WPxdq0aD}B*PU*++F^hH>+lU{r z4O==)hyhpO5AmD+KvR7Npy)AziGGNjBAGl4!Q)mOQ@u`u)8Hp6q>s{n zi;`%vNdhHm^HMWVs-`b+cx*fm!%XTeaK6?V4a)PgIj?VfQS`5l4 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index 90eca4daa..73f8357ff 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -145,6 +145,7 @@ public abstract class Level implements Bundlable { public SparseArray plants; public SparseArray traps; public HashSet customTiles; + public HashSet customWalls; protected ArrayList itemsToSpawn = new ArrayList<>(); @@ -168,6 +169,7 @@ public abstract class Level implements Bundlable { private static final String PLANTS = "plants"; private static final String TRAPS = "traps"; private static final String CUSTOM_TILES= "customTiles"; + private static final String CUSTOM_WALLS= "customWalls"; private static final String MOBS = "mobs"; private static final String BLOBS = "blobs"; private static final String FEELING = "feeling"; @@ -269,6 +271,7 @@ public abstract class Level implements Bundlable { plants = new SparseArray<>(); traps = new SparseArray<>(); customTiles = new HashSet<>(); + customWalls = new HashSet<>(); } while (!build()); decorate(); @@ -319,6 +322,7 @@ public abstract class Level implements Bundlable { plants = new SparseArray<>(); traps = new SparseArray<>(); customTiles = new HashSet<>(); + customWalls = new HashSet<>(); map = bundle.getIntArray( MAP ); @@ -391,6 +395,12 @@ public abstract class Level implements Bundlable { customTiles.add(vis); } } + + collection = bundle.getCollection( CUSTOM_WALLS ); + for (Bundlable p : collection) { + CustomTiledVisual vis = (CustomTiledVisual)p; + customWalls.add(vis); + } collection = bundle.getCollection( MOBS ); for (Bundlable m : collection) { @@ -429,6 +439,7 @@ public abstract class Level implements Bundlable { bundle.put( PLANTS, plants.values() ); bundle.put( TRAPS, traps.values() ); bundle.put( CUSTOM_TILES, customTiles ); + bundle.put( CUSTOM_WALLS, customWalls ); bundle.put( MOBS, mobs ); bundle.put( BLOBS, blobs.values() ); bundle.put( FEELING, feeling ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java index 8c3a3452e..8d28f63bf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/PrisonBossLevel.java @@ -345,6 +345,11 @@ public class PrisonBossLevel extends Level { customTiles.add(vis); ((GameScene)ShatteredPixelDungeon.scene()).addCustomTile(vis); + vis = new exitVisualWalls(); + vis.pos(11, 8); + customWalls.add(vis); + ((GameScene)ShatteredPixelDungeon.scene()).addCustomWall(vis); + Dungeon.hero.interrupt(); Dungeon.hero.pos = 5+27*32; Dungeon.hero.sprite.interruptMotion(); @@ -543,7 +548,6 @@ public class PrisonBossLevel extends Level { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; public exitVisual() { @@ -553,7 +557,7 @@ public class PrisonBossLevel extends Level { @Override public CustomTiledVisual create() { tileW = 12; - tileH = 15; + tileH = 14; mapSimpleImage(0, 0); return super.create(); } @@ -570,4 +574,40 @@ public class PrisonBossLevel extends Level { return render[pos] != 0; } } + + public static class exitVisualWalls extends CustomTiledVisual { + private static short[] render = new short[]{ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + public exitVisualWalls() { + super(Assets.PRISON_EXIT); + } + + @Override + public CustomTiledVisual create() { + tileW = 12; + tileH = 14; + mapSimpleImage(4, 0); + return super.create(); + } + + @Override + protected boolean needsRender(int pos) { + return render[pos] != 0; + } + } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 140958074..f124e6bd8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -133,6 +133,7 @@ public class GameScene extends PixelScene { private Group terrain; private Group customTiles; private Group levelVisuals; + private Group customWalls; private Group ripples; private Group plants; private Group traps; @@ -238,6 +239,13 @@ public class GameScene extends PixelScene { walls = new DungeonWallsTilemap(); add(walls); + customWalls = new Group(); + add(customWalls); + + for( CustomTiledVisual visual : Dungeon.level.customWalls){ + addCustomWall(visual); + } + wallBlocking = new WallBlockingTilemap(); add (wallBlocking); @@ -538,6 +546,10 @@ public class GameScene extends PixelScene { public void addCustomTile( CustomTiledVisual visual){ customTiles.add( visual.create() ); } + + public void addCustomWall( CustomTiledVisual visual){ + customWalls.add( visual.create() ); + } private void addHeapSprite( Heap heap ) { ItemSprite sprite = heap.sprite = (ItemSprite)heaps.recycle( ItemSprite.class );