From bb5e798b985430c0186e0ae84c8b6ecc956e7eac Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 18 Sep 2017 00:11:37 -0400 Subject: [PATCH] v0.6.2: improved emoicons and removed enemy state from descriptions --- core/src/main/assets/icons.png | Bin 2171 -> 2213 bytes .../actors/mobs/Mob.java | 46 ++++++------------ .../effects/EmoIcon.java | 19 ++++++++ .../scenes/GameScene.java | 12 ++--- .../sprites/CharSprite.java | 19 ++++++++ .../shatteredpixeldungeon/ui/Icons.java | 6 ++- .../windows/WndInfoMob.java | 11 +---- .../messages/actors/actors.properties | 5 -- 8 files changed, 66 insertions(+), 52 deletions(-) diff --git a/core/src/main/assets/icons.png b/core/src/main/assets/icons.png index f0802a553f8a1cdb876445bc6b634d4a76cb2097..400c154f9f070ff7878d067e7819f472a04e33ed 100644 GIT binary patch delta 1277 zcmVItJL~14+eQoo(ObZ_ zP}761-*B&VqZFIx-h21||3HS`&^Nl=QU#jCHaRHoX|E8PsWQv!5uD~eLM!7if;0=v ze`bN#qX;Y_bF`W;3^?Nzpb20zF|o9qvXm28iCG2h}3KYKU+#lzh7l&Fi{x*?(7nIZSHk?VGUoJy3cWIPiT* z!g~u8p` zEX$1zH#9#!aY{=4;TQ0uz>)SNzKZ+vLlOvS2FeeI{{({0VD!T%%Ma5bs6YrETyK=x zABLa;A%7fe-*g<07#0Xy7=aETus}G%2y_4;2@IIinEz`LsWq6Z8bF}pryd3nF!_Si zwvzZ~XJ<77i8&W)$N&L9Bo6oB2aEsZLU?<5c`1p1g|LBsr#pwCVE_T*P!9o{f6W4y zUv6%7ANeu80&;g(8vv2?5-5jzy#zL2cmOw(m4Cqf{XGdN|M~#}mH`MI=A`~7zDNwl z|MGa9ic|0r5>UQCz%<}F=X()p`utC~f}&ACMEOWz8!#u=i#&_LuO7myt9!i((>HqX zEqWpmC)>-*OVj*$4*?871@e3*5hvS=yuRcy}!PQh%x{AO(;m@OEIQ^{~)i=&yx21`HiPwe0)T}7kRBFK>SJoXAubu&TmsJ z0VMw7eZyI(zciBN_Ym6?G3~#_lUHJ^Fc3xc+HV%Z7P2Ep^p1O@=&|Tr&A59YJvlCX z-opV|9Q93LmvLCYfq?VZd7Z!mp}@p~>wl9)y%Nm=e8Vh&yT=coK>_#ih=+ZjzW)PrA^B?KxGn36yg{Ud?dEEy1(1Kt-3 zV3`$01QtuIFBc@>ugXUz+e?|qCo2C72sldwjOMjmP z0v7lO2NGDPv-O|=#`9cf=K>B2yy_G{z^-F|vExU81`q)J1bAOzog*ZI0Qc8fc2~eT zGxiS9J_;zGs2~usz%hVINC0m_dM}W%Kz0F1AO3MigkfnxDe$t4NQZ_95^N z@CdMP|8_?K$-qFMu8mYc^Zmb9!24emy8`SE1)8Smr2=i+we{@&Fk+qx%vs<=?Csq* zq5%W|8kqHs0G&U4!G{HCngn`T02sUmR{_)~(u08lrY42DHKsP|OA+@WfGYm@;@5t$ nKrihp!!Tbgfc+okd-tCKE>0xT%lEx500000NkvXXu0mjf-NH~b delta 1235 zcmV;^1T6cd5&IC3BmthWB}D-dSF-@WP&t_{F6QRu|Nj900F#6PObB(Gr*HrO0Ckht z0dNug|NsC0|NsA^*`-Pj000ITvs?nG0e}BH@8y9THxNV7A>e}QZuDGW58z(MO}nv2 z?!9;W{s+jPWoU7UWgw;f#P-Zbc~4Y>0%x|$oL-0KneRreoR^W7hQPvC7WMjf1eTC_ zwHj~?B!6E(O#qvLf#ns+@~;F|bJqTfK+k4i9c0Nsh%uta53jVq$jI8-hA%KPqklF| z?+6SJPfri$e-H?9Gj8SJubIFa;tR}dZ)=j@WA1umClKOJ!P#jd08YEDNq#S6@#qQ+ zPh$!!5Q5Wz1>CA_~_MXxo- zl5FqZh6i6c%mQV>DYbwf=FH6CcEbfPB>nY@omCE@0>xKtOZ2X91soqXn);Ztr*xemA`W zbboIKph$cQn4^0>1wNnj0Do==D}jfH2NqELn@0$E1|YPBqx(sGNYvwxJl#lf20p?9 zicb)54eXr#o{0J#|MMM5VFieoj|AVqaNM5gg&cl$6JB3G$VJFs^x%7RAsLR_)9Y)$ z`Rn~zcLXfp^DW76+@9#|)jxiF5i;Ms{xk_3zqbZHpRWNezC%F9rNZdV6^x+3VwX?t;I`4+K8ZTQvd0X92v6lt6v{Hx*9+$-jE`MgZYo z&P&i?=FLD(ch?I4Dd2KiEYN~LYoJw6V5FOXeC9M||0te3uOo!PAV>vn=t?5zoRjI= zt51k`4+Up?@8ItY1Anr)!1=%=fTzcWpH{$mh`HcjC^45LU-jj!2>ttbFE z?s|cTE0$U>UY2DL$Vs5M1j;fr2vnHh%LPCu1%p7{fZo(3;I&zsWjPOU33O$I3I+kt zW19q|0`xNrG=0OafeN&qmw6=MKM8bE*%<`@PZB%k0u%rRyf_#G++XP zkAco3gc5ZmD6sg zkfHI1LlnvmG3P^|k_&uDfYEW005)0o%@__s$2zD4Y|cLg%+1xO0R5YK5CV%Nux>Md z3#w0%UO(|6@PGM1zy+V(Mj>!F*dZ{_yRHE6;D1@beNEFb#m2M1vMk5Fz`AbhT&fQv z@Km58f$wc%Prpb85Wvs?5o7^6fB0kH79cbU9I^nm<1>%~SU`09`D)#NwG03N002ovPDHLkV1m~5L0JF* diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java index 286c9c5e6..c1ebf9b41 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mob.java @@ -160,7 +160,11 @@ public abstract class Mob extends Char { boolean justAlerted = alerted; alerted = false; - sprite.hideAlert(); + if (justAlerted){ + sprite.showAlert(); + } else { + sprite.hideAlert(); + } if (paralysed > 0) { enemySeen = false; @@ -517,7 +521,9 @@ public abstract class Mob extends Char { if (state == SLEEPING) { state = WANDERING; } - alerted = true; + if (state != HUNTING) { + alerted = true; + } super.damage( dmg, src ); } @@ -631,7 +637,6 @@ public abstract class Mob extends Char { public interface AiState { boolean act( boolean enemyInFOV, boolean justAlerted ); - String status(); } protected class Sleeping implements AiState { @@ -667,11 +672,6 @@ public abstract class Mob extends Char { } return true; } - - @Override - public String status() { - return Messages.get(this, "status", name ); - } } protected class Wandering implements AiState { @@ -685,12 +685,14 @@ public abstract class Mob extends Char { enemySeen = true; notice(); + alerted = true; state = HUNTING; target = enemy.pos; } else { enemySeen = false; + sprite.hideLost(); int oldPos = pos; if (target != -1 && getCloser( target )) { @@ -704,11 +706,6 @@ public abstract class Mob extends Char { } return true; } - - @Override - public String status() { - return Messages.get(this, "status", name ); - } } protected class Hunting implements AiState { @@ -737,17 +734,16 @@ public abstract class Mob extends Char { } else { spend( TICK ); - state = WANDERING; - target = Dungeon.level.randomDestination(); + + if (!enemyInFOV) { + sprite.showLost(); + state = WANDERING; + target = Dungeon.level.randomDestination(); + } return true; } } } - - @Override - public String status() { - return Messages.get(this, "status", name ); - } } protected class Fleeing implements AiState { @@ -781,11 +777,6 @@ public abstract class Mob extends Char { protected void nowhereToRun() { } - - @Override - public String status() { - return Messages.get(this, "status", name ); - } } protected class Passive implements AiState { @@ -798,11 +789,6 @@ public abstract class Mob extends Char { spend( TICK ); return true; } - - @Override - public String status() { - return Messages.get(this, "status", name ); - } } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/EmoIcon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/EmoIcon.java index 87b3641f9..a19c46acf 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/EmoIcon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/effects/EmoIcon.java @@ -103,5 +103,24 @@ public class EmoIcon extends Image { y = owner.y - height; } } + + public static class Lost extends EmoIcon { + + public Lost( CharSprite owner ){ + super( owner ); + + copy( Icons.get( Icons.LOST ) ); + + maxSize = 1.25f; + timeScale = 1; + + origin.set( 2.5f, height - 2.5f ); + scale.set( Random.Float( 1, maxSize ) ); + + x = owner.x + owner.width - width / 2; + y = owner.y - height; + } + + } } 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 cc809ee03..c4714209e 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -228,8 +228,8 @@ public class GameScene extends PixelScene { emitters = new Group(); effects = new Group(); - emoicons = new Group(); healthIndicators = new Group(); + emoicons = new Group(); mobs = new Group(); add( mobs ); @@ -274,7 +274,11 @@ public class GameScene extends PixelScene { statuses = new Group(); add( statuses ); - + + add( healthIndicators ); + //always appears ontop of other health indicators + add( new TargetHealthIndicator() ); + add( emoicons ); hero = new HeroSprite(); @@ -282,10 +286,6 @@ public class GameScene extends PixelScene { hero.updateArmor(); mobs.add( hero ); - add( healthIndicators ); - //always appears ontop of other health indicators - add( new TargetHealthIndicator() ); - add( cellSelector = new CellSelector( tiles ) ); pane = new StatusPane(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java index d5058208c..dbca076a3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/CharSprite.java @@ -489,6 +489,25 @@ public class CharSprite extends MovieClip implements Tweener.Listener, MovieClip } } + public synchronized void showLost() { + if (emo instanceof EmoIcon.Lost) { + + } else { + if (emo != null) { + emo.killAndErase(); + } + emo = new EmoIcon.Lost( this ); + emo.visible = visible; + } + } + + public synchronized void hideLost() { + if (emo instanceof EmoIcon.Lost) { + emo.killAndErase(); + emo = null; + } + } + @Override public void kill() { super.kill(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java index 228457ec7..fc15ca75a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/ui/Icons.java @@ -45,6 +45,7 @@ public enum Icons { DEPTH, SLEEP, ALERT, + LOST, BACKPACK, SEED_POUCH, SCROLL_HOLDER, @@ -112,7 +113,7 @@ public enum Icons { icon.frame( icon.texture.uvRect( 0, 45, 13, 58 ) ); break; case DEPTH: - icon.frame( icon.texture.uvRect( 34, 46, 50, 62 ) ); + icon.frame( icon.texture.uvRect( 38, 46, 54, 62 ) ); break; case SLEEP: icon.frame( icon.texture.uvRect( 13, 45, 22, 53 ) ); @@ -120,6 +121,9 @@ public enum Icons { case ALERT: icon.frame( icon.texture.uvRect( 22, 45, 30, 53 ) ); break; + case LOST: + icon.frame( icon.texture.uvRect( 30, 45, 38, 53 ) ); + break; case BACKPACK: icon.frame( icon.texture.uvRect( 58, 0, 68, 10 ) ); break; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java index 5aa5c1d90..abfe693a0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndInfoMob.java @@ -34,19 +34,10 @@ public class WndInfoMob extends WndTitledMessage { public WndInfoMob( Mob mob ) { - super( new MobTitle( mob ), desc( mob ) ); + super( new MobTitle( mob ), mob.description() ); } - private static String desc( Mob mob ) { - - StringBuilder builder = new StringBuilder( mob.description() ); - - builder.append( "\n\n" + mob.state.status() ); - - return builder.toString(); - } - private static class MobTitle extends Component { private static final int GAP = 2; diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties index 31a9d15f4..a9eb44a23 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties @@ -456,11 +456,6 @@ actors.mobs.mob.died=You hear something die in the distance. actors.mobs.mob.rage=#$%^ actors.mobs.mob.exp=%+dEXP actors.mobs.mob.rankings_desc=Slain by: %s -actors.mobs.mob$sleeping.status=This %s is sleeping. -actors.mobs.mob$wandering.status=This %s is wandering. -actors.mobs.mob$hunting.status=This %s is hunting. -actors.mobs.mob$fleeing.status=This %s is fleeing. -actors.mobs.mob$passive.status=This %s is passive. actors.mobs.monk.name=dwarf monk actors.mobs.monk.disarm=The monk knocks the %s from your hands!