mjaun / android-anuto Goto Github PK
View Code? Open in Web Editor NEWAnother ugly tower defense for Android
License: GNU General Public License v2.0
Another ugly tower defense for Android
License: GNU General Public License v2.0
I would like to have a fast forward button in this game. It would be useful to speed up the game especially for the rounds at the beginning when you have not many towers.
Steps to reproduce: start app, select level, place tower, open tower info, close tower info, start next round, press back, after select level app crashes.
This bug was introduced with #50. The app crashes with the following exception:
FATAL EXCEPTION: main
Process: ch.logixisland.anuto, PID: 10769
java.lang.IllegalStateException: Fragment TowerInfoFragment{eb96976} not attached to Activity
at android.app.Fragment.getResources(Fragment.java:805)
at ch.logixisland.anuto.view.game.TowerInfoFragment.refresh(TowerInfoFragment.java:145)
I have translated your application into it
(italiano). Here is the xml:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">Anuto TD</string>
<string name="restart">Ricomincia</string>
<string name="next_wave">Prossima ondata</string>
<string name="game_over_lost">Partita finita!</string>
<string name="game_over_won">Hai vinto!</string>
<string name="score">Punteggio</string>
<string name="status_credits">Riconoscimenti</string>
<string name="status_live">Vita</string>
<string name="status_lives">Vite</string>
<string name="status_wave">Ondata</string>
<string name="status_bonus">Bonus</string>
<string name="level">Livello</string>
<string name="damage">Danno</string>
<string name="reload">Ricarica</string>
<string name="range">Distanza</string>
<string name="inflicted">Inflitto</string>
<string name="lock_target">Fermo sull'obiettivo</string>
<string name="strategy">Strategia</string>
<string name="enhance">Migliora</string>
<string name="upgrade">Aggiorna</string>
<string name="sell">Vendi</string>
<string name="msg_are_you_sure">Sei sicuro?</string>
<string name="select_a_level">Seleziona livello</string>
<string-array name="strategies"></string-array>
</resources>
Translation made with Stringlate.
In order to provide new features (such as game settings, highscores, new maps) a main menu screen is needed.
I think that at the very first start the game should display a bullet-point list of rules (just like here, in the repository's readme).
I played it for a while and I was VERY frustrated at level 11 so I came here to open a bug report and say that there is no way that level is beatable. Before doing that, I started reading other issues and learned about teleports, level 56, upgrades... Obviously I was missing something (-:
Because there are no hints or instructions in the game itself, the discoverability of important features is minimal. I installed it directly from F-Droid, so I had no exposure to any documentation at all. I am surprised I got as far as level 11 just by placing ordinary equipment (-:
If the cannon (third turret at second level) aims at a different angle when shooting, the projectile animation starts from its old position instead of the new one. Easily spotted if the cannon was shooting downward and suddenly shoots upward - the projectile appears to shoot from its back.
Same might happen with other turrets, haven't been able to tell very well.
What happens is that the screen times out during the game, when it should actually stay active.
I'm on a Fairphone FP1 / MT6589 chipset running KitKat 4.4.4.
Workaround is to set the screen time out higher.
I love this game. I've noticed that the battery drain is very high, I think part of it is the bright background. It's also hard on my eyes to play it in the dark.
My original thought was to color invert all the pngs (either the files themselves or in memory after loading), but I whipped up a quick test by merely color-inverting plateau1.png and it looks good enough to me.
In BasicPlateau.java I changed:
s.sprite = Sprite.fromResources(R.drawable.plateau1, 4);
to
s.sprite = Sprite.fromResources(R.drawable.plateau2, 4);
Obviously it'd need a setting switch somewhere, or a toggle maybe?
Thanks!
Stack Trace
java.lang.RuntimeException: Unable to start activity ComponentInfo{ch.logixisland.anuto/ch.logixisland.anuto.MainActivity}: java.lang.RuntimeException: Could not load level!
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.RuntimeException: Could not load level!
at ch.logixisland.anuto.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
... 9 more
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1411)
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1429)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:687)
at android.app.BackStackRecord.commit(BackStackRecord.java:663)
at ch.logixisland.anuto.GameOverFragment.onGameStarted(GameOverFragment.java:59)
at ch.logixisland.anuto.game.GameManager.onGameStarted(GameManager.java:522)
at ch.logixisland.anuto.game.GameManager.restart(GameManager.java:233)
at ch.logixisland.anuto.game.GameManager.setLevel(GameManager.java:252)
at ch.logixisland.anuto.MainActivity.onCreate(MainActivity.java:30)
... 12 more
As you can see on the picture the screen is full of "monsters". But on the screenshot you cannot see that at this point the game is lagging a lot !!
This is similar to First/Last. Those keep track of the first/last in the order in which they were spawned. I would find First/Last in the order in which they are getting to the end more useful.
For example, if I have a sniper turret to catch those that run past my other turrets, I want the First as in the one that's closest to the end. But it will probably not be the first to spawn, as a faster enemy could be the first in progress but not the first to have spawned.
Don't know if these strategies should be added in parallel (with new names) or if they should replace the existing. I don't think I'd ever find the current ones useful.
Cannons are practically ineffective. Creeps simply stay alive and walk no matter what turrets are around. Even if there are "eaters" at the end to send them back to start, they don't die...
Wouldn't it be a nice feature to recieve an extra life every so often? I was thinking i.e. after reaching a certain level or even using a great sum of credit to obtain an extra life.
Thanx for this very coool game!!
I love the game but I think a dark theme (just inverted) would make it better for night time play.
It would be handy to have this app distributed through F-Droid. Do you think that would be feasible?
I have translated your application into ro
(Romanian). Here is the xml:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<string name="app_name">Anuto TD</string>
<string name="menu">Meniu</string>
<string name="restart">Restart</string>
<string name="change_level">Alege nivelul</string>
<string name="dark_theme">Temă întunecată</string>
<string name="normal_theme">Temă obișnuită</string>
<string name="next_wave">Următorul val</string>
<string name="game_over">Sfârșit!</string>
<string name="score">Scor</string>
<string name="status_credits">Credits</string>
<string name="status_live">Viață</string>
<string name="status_lives">Vieți</string>
<string name="status_wave">Val</string>
<string name="status_bonus">Bonus</string>
<string name="level">Nivel</string>
<string name="damage">Daună</string>
<string name="reload">Reîncarcă</string>
<string name="range">Rază</string>
<string name="splash">Splash</string>
<string name="distance">Distanță</string>
<string name="intensity">Intensitate</string>
<string name="duration">Durată</string>
<string name="inflicted">Daune aduse</string>
<string name="lock_target">Urmărește ținta</string>
<string name="strategy">Strategie</string>
<string name="enhance">Îmbunătățește</string>
<string name="upgrade">Upgrade</string>
<string name="sell">Vinde</string>
<string-array name="strategies">
<item>Cel mai apropiat</item>
<item>Cel mai slab</item>
<item>Cel mai puternic</item>
<item>Primul</item>
<item>Ultimul</item>
</string-array>
</resources>
Translation made with Stringlate.
Lower selling price of the all upgraded items.
Example:
If I put the last gun and upgrade it:
500 + 800 = 1300
then I can sell it at 1750 !!
Free unlimited credit !!
This is on Version 0.2-1 from F-Droid.
To reproduce:
Bug:
E java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ch.logixisland.anuto.entity.tower.Tower.getName()' on a null object reference
E at ch.logixisland.anuto.view.game.TowerView.onTouch(TowerView.java:125)
E at android.view.View.dispatchTouchEvent(View.java:8474)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2406)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2050)
E at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2625)
E at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1770)
E at android.app.Activity.dispatchTouchEvent(Activity.java:2742)
E at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2586)
E at android.view.View.dispatchPointerEvent(View.java:8675)
E at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4129)
E at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3995)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
E at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3603)
E at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3569)
E at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3686)
E at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3577)
E at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3743)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
E at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3603)
E at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3569)
E at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3577)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3550)
E at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5813)
E at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5787)
E at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5758)
E at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5903)
E at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
E at android.os.MessageQueue.nativePollOnce(Native Method)
E at android.os.MessageQueue.next(MessageQueue.java:143)
E at android.os.Looper.loop(Looper.java:122)
E at android.app.ActivityThread.main(ActivityThread.java:5294)
E at java.lang.reflect.Method.invoke(Native Method)
E at java.lang.reflect.Method.invoke(Method.java:372)
E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
ActivityManager W Force finishing activity 1 ch.logixisland.anuto/.view.game.GameActivity
I believe it is very annoying. Sometimes I press the back button by mistake and I loose the whole game!
Could you please add a dual player mode? I'd like it to be through Wi-Fi.
It's fire rate is too slow, if I start off with a laser turret I will have monsters slipping by. It's second upgrade isn't very powerful either. The game locked up at upgrade 3.
This is a good game though, keep up the good work!
enhance, upgrade and "make it dynamic"!
Moving the weapons needs strategy and makes variety.
The lasers could upgrade to a new level that works together! It may makes zig-zag shapes or other synergy...
Sometimes, on Wave 41, the stars emerge endlessly in middle of the track.
They never stop (and think that they are stronger)
v0.1-4
At the moment, only a few things are colored (laser, explosion, lifebars, range and not enough money to buy tower). I feel after a short time that the game becomes dull because of missing colors. I would like to have the option to have colored towers, missiles, enemies, walls and paths.
Not only range and damage, but also few words could be added about each unit. At least to the web site.
While testing #7, I found that the game slowed down when a significant number (around the top third to half of the screen) of turrets were placed. The game will crash before you are able to fill the screen with turrets. Tested on Moto G 2015.
You can buy and upgrade the 4th cannon for 3k and then sell it for ~4k.
This provides unlimites money.
At level 56 , which I was unable to beat so far using many different strategies, I finally found one that seems to be feasible: I create an infinite loop using a battery of teleport turrets at the end of the level. While eventually being able to snipe one star once in a while, the teleporters at the end just stop working after a few minutes, letting star enemies pass freely and lose me the game.
Quite frustrating :)
After getting as far as level 25, I can say that I dearly missed some sort of a signifier that would tell me which weapons I forgot to enhance. It is easy to lose track when there is so much action going on all over the battle-field.
Color-codes or overlay icons will add clutter and make the screen unreadable, therefore I suggest the use of a so-called quasi-mode, as defined by Jef Raskin in the book "The humane interface".
Unlike a classical mode (e.g. pressing caps lock
), a quasi-mode is only active for as long as an action is being performed (e.g. holding shift
).
In the case of this excellent game, there is no more room for buttons and every cell is valuable. There is one exception - the trench itself. That space is technically unused (and that's a lot of real estate). I suggest a tap and hold
gesture anywhere on the trench to display an overlay above each unit, which will visualize its level.
As soon as the finger is raised, the overlay disappears and the game is rendered as usual. This is a non-invasive approach that doesn't clutter the screen and is very easy to invoke, and most importantly - very easy to dismiss.
This applies to Version 0.1-5 - Added to f-droid on 2016-07-06. I checked the issues and commits and didn't see anything address this, so hopefully this is new information.
Basically, I can start a game, immediately hit the home button to minimize the game, wait ten seconds or so, then maximize the game again and immediately start the next wave without the enemies having moved down the pathway.
The amount you get back is larger than the amount you invested. This can be used to cheat as much credits as you want.
I've consistently annihilated everything, but the stars, on level 10 with an effective three zone strategy. The stars roll through like an armored convoy.
Once the game over text appears, it's no longer possible to open the TowerInfoFragment and see how much help each tower gave. For considering how my strategy worked, it would be nice to still be able to see the tower levels and inflicted damage.
I translated the game to Hungarian. Here it is:
https://gist.github.com/bd18e85bc79bb443fa0232643fa7e886
My strategy for level 41 with a lot of self healing star enemies is to set up an array of pulling traps. After some time they seem not to entrap new enemies within range. Is that so and if it is, is it on purpose?
After playing the game for 10~15 mins, I got it burned into my LCD screen. I have an LG G4, it is a known problem. I assume that a dark mode would avoid such problem.
Overall great game,
Cheers
On my Galaxy Tab Pro 8.4", in the tower info menu, when the strategy displays as "Strongest" the button is two lines tall and it's text covers the "Inflicted" line text. v0.1-5
Not sure how I made this happen. Restarted the game, accidently double tapped the 250 tower. Tower was purchased but not placed anywhere. Seemed to block enemies from appearing. I was able to press the next wave button to collect the bonus, but that was it.
Haven't been able to replicate the issue since.
A pause button would be really appreciated as it would give the user time to build, enhance, upgrade, change strategy, ... during (!) a wave. Particularly with the longer waves it would help :)
While you are working on towers (strategy, enhancing, upgrading, etc.) you cannot watch the field below the tower info popup.
The tower info popup should have a transparent background.
If you enhance a turret, its upgrade price remains the same. This means that if you want to upgrade a tower later, enhancing it now is as good as throwing away the credits. I assume this is intended.
This sort of makes sense, and makes the player think twice before spending money for the short term. Then again, I think the upgrade price should go down even if a little bit when enhancing. Since enhancing increases the sell price, sometimes it gets to a point where it's cheaper to sell a very enhanced turret and start from scratch with a number of upgrades instead of upgrading it directly.
What about reducing the upgrade cost at the same rate that the sell cost is increased? That would nullify this effect.
The 500-point turret does no damage to the enemies.
In F-Droid (how I found this amazing game) The version is 0.1-5, and does not include the 2 new maps or the title menu. Can it up updated?
At level 49, I make almost 0.5k per dead enemy. The bonus for advancing the wave is around 480 (+800)
. I would never advance a wave then, as the extra money I would win is ridiculous - less than two enemies. In earlier levels, it's a much higher relative value.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.