Giter Club home page Giter Club logo

android-anuto's Introduction

Anuto - Another Ugly Tower Defense

Project Dashboard

Anuto is yet another tower defense game for Android. However it features astonishing hand-drawn graphics and a smooth gameplay.

Download

Get it on F-Droid Get it on Google Play

Beta Testing

Become a beta tester!

How to play

  • Buy new towers by dragging a tower from the inventory at the top onto the field. Make sure you have enough credits.
  • Open the properties window for a tower by double tapping it. To close the window tap somewhere on the field.
  • Strategy: Determines which enemy to target if there are multiple in range.
  • Lock Target: If true the tower will not switch target until it is dead or out of range.
  • Enhance: Increases the level of the tower making it better.
  • Upgrade: Replaces the tower with a higher tier tower. Note that any enhancements of the tower are lost.
  • Sell: Removes the tower. Refund decreases over time.
  • Call in the next wave using the button in the upper right corner. If you call in the next wave while there are still enemies in the game you receive bonus credits.
  • Make sure the enemies don't make it through the course!

android-anuto's People

Contributors

airon90 avatar azzamsa avatar beothorn avatar berkaygunduzz avatar burunduk avatar civyshk avatar dpsfotocestou avatar easyaspi314 avatar easyvector avatar estemon avatar foobar2016 avatar gomesar avatar id101010 avatar laralem avatar larjona avatar mjaun avatar mquinson avatar mvdan avatar oezgueremir avatar poussinou avatar qoheniac avatar quaap avatar roptat avatar sardach avatar smarek avatar stphnd avatar t3kk3n avatar tacothedank avatar victorenator avatar wb9688 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-anuto's Issues

No enemies appearing bug

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.

Using the f-droid.org version.
screenshot_20161002-084000

Help in the game itself

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 (-:

[Feature request] quasi-mode for weapon level indication

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.

Crash after returning from paused state.

This is on Version 0.2-1 from F-Droid.

To reproduce:

  • Start a new game.
  • Lock your phone (causing anuto to pause).
  • Unlock and open the app again.

Bug:

  • The four buttons to add a new tower at the top of the screen are blank.
  • Touching these blank areas where the buttons should be causes a NPE
                         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

The next wave timeout is based on realtime, rather than in-game time

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.

Fast Forward

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.

Added it (italiano) translation

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.

Level 10 is unbeatable

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.

Crash on too many turrets

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.

Colored theme

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.

Crash when re-opening app

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

[Feature Request] Darker theme

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.

screen capture

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!

plateau2

Dark theme

I love the game but I think a dark theme (just inverted) would make it better for night time play.

Screen goes dark after screen timeout

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.

Stars emerge endlessly

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

Dark/Inverted mode needed

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

New strategies: how close they are to the end

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.

Added ro (Romanian) translation

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.

Add to F-Droid

It would be handy to have this app distributed through F-Droid. Do you think that would be feasible?

Traps stop working

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?

Negative Credits

Steps to reproduce

  • start any game
  • drag+drop any defence towers you like, credits < 0 are possible

Yay my most successful round ever! But takes the fun away :(
Not sure whether it actually goes down to -∞ or has some negative limit

Version 0.2-1 (F-Droid)
Android 6.0.1

Example:
tmp_14897-screenshot_20170210-233748-315063243

Extra lifes

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!!

Free unlimited credit bug

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 !!

Teleport turrets stop working after a while

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 :)

Cheaper to sell and start again than to upgrade

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.

Cannon shoots from its last position

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.

Incentive to advance waves doesn't scale fast enough

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.

Update F-Droid app

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?

[Feature Request] Dynamic and more complex weapons

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...

[Feature request] Show tower stats after game-over

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.

Not enough fire power to pass wave 56

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...

Pause button

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 :)

Dual Player

Could you please add a dual player mode? I'd like it to be through Wi-Fi.

[Bug] App crashes after selecting level for the second time

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)

Easy to cheat the game

  1. buy that slowdown turret for 500 credits
  2. upgrade it (once or twice)
  3. sell it

The amount you get back is larger than the amount you invested. This can be used to cheat as much credits as you want.

Main Menu

In order to provide new features (such as game settings, highscores, new maps) a main menu screen is needed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.