Login [Register]
Don't have an account? Register now to chat, post, use our tools, and much more.
This project is still under development (read: I've almost started.)

So, I have decided to start working on a clone of Tanks! from Wii Play for the CE. If you have not played it before, the goal of Tanks! is to destroy all the enemy tanks in 100 stages. Here's a random YouTuber playing it:

Now, you are probably asking yourselves, "How is he going to get the crosshair to work without motion controls?"
After a thorough investigation of the Wii Remote and the CE's USB hardware, I have come to the completely stunning and absolutely novel conclusion that motion controls are not feasible at this time.
I'll most likely either use two keys to rotate the barrel of the tank, or have a button that, while held, causes the arrow keys to control a crosshair instead of the tank, keeping the tank moving if it is in motion already.

My current plan:
    Get level format worked out
    Convert levels and sprites into a usable format
    Rendering levels
    Tanks and player movement
    UI stuff
    Shells and mines
    Enemy AI
    Tread marks?

Of these, AI will probably be the most difficult part. In the video, you can see that the AIs will
    Shoot bullets toward the player, potentially bouncing off walls to get there
    Move out of the way of bullets moving towards them (but not if it needs to bounce off a wall to get there)
    Move coherently without crashing into walls (but sometimes other tanks)
    If it can fire another bullet, move to where it can shoot the player
    If not, avoid going into the sight of the player
    Lay mines near breakable blocks and in narrow areas
    Move away from mines

If anyone has any idea how to implement any of that efficiently please let me know.

The other thing that might be problematic is the tread marks. I would have to store a giant sprite with all of the tread marks and render that between the tilemap and the tanks. Normally I would just leave it out, but it actually has a gameplay function in the last level.

I really don't have anything done besides some data structures at this point, but I decided to go ahead and post a bit early so that people know about the repo:
This was one of my favorite games on my wii. I used to play it all the time with my little sister. Can't wait to see what you can do!
Maybe you could layer the graphics in order of 'floor' graphics (with treads, since the floor doesn't change other than adding treads), the 'important' tiles (like walls, holes, breakable blocks), and then the tanks, bullets, etc. on top layer.

Since only treads should affect the floor, you can just save the floor once and add treads on top, then add the movable/variable stuff on top later. I'm not sure how speed efficient this would be, but maybe it's possible?

Also, if/when you finish the main game, you could add extra levels or a level editor. Those are fun. Very Happy
Progress update time:
I have converted the first three levels into tilemaps I can render. Here's a recording of the program loading these:

The textures are not final, they are basically just versions of the actual textures I scaled down in a few minutes. If any pixel artist wants to help, the tiles are 12x12.
Due to fancy compression, the file size for the first the levels is 158 bytes.

I have also done some other stuff that isn't visible here. All type definitions should now be reasonably complete. Hopefully I can get tanks and controls working soon, and work on collision physics next. I've also added another commit to the Github repo if you want to see the source.
Now that finals are over, I've had a bit more time to work on the project. I've totally broken anything resembling graphics and I don't really want to work on sprites at this time. Here's a progress update anyway:

As you can see, there is an ugly grid over everything because my sprites are 12x12 but arranged on a size 13 grid. This will be fixed before release, obviously. The number in the top left is the mspt, or the reciprocal of frame rate. I was aiming for 33 mspt / 30 FPS, but that doesn't seem too feasible since I don't even have collision stuff happening yet and I'm already past that point. The black boxes are hitboxes for various things, and the numbers in the top left of the big ones indicate which type of tank it is. The line represents the barrel of the tank and can be rotated with mode and χτθn.

I also worked on more collision stuff, and hopefully I can get those working soon. Mines are also working, though I forgot to demonstrate that in the recording.

I have also decided to leave out tank treads, and I might replace white tanks with the black tanks that usually don't appear till level 50.
This looks great, and I'm glad you're starting to get stuff working! I hope you'll be able to make the game as true to the original as possible. I remember playing this a lot on the Wii a few years back.
Incredibly delayed progress update (over a month!):

I have collision detection working for shells as a proof of concept for reflection. I still need to do a broad phase, as currently every shell is compared against every tank and that is very slow.
I also added levels through 14. These actually take a long time to input not because of the blocks but because of the tanks. I have to count out grid tiles manually for those.
The pre-level screen is functional but still needs sprites for lives and for the background.

I still need to do graphics. Currently the only sprites I have are tiles, and they are all one pixel too small. I hope to eventually use isometric perspective like the original game does, which means that I will need to have some way to rotate tanks.

Additionally, my target speed is 33 mspt (lower is better), and as you can see I am already basically at or beyond that point at all times. That means I have some optimizing to do if I want the game to run smoothly regardless of how many tanks / bullets there are. There could potentially be 30 physics objects in play at one time in the later levels.

Also, AI seems like it will be really hard unless tanks just wander randomly and fire randomly without telegraphing their actions with a cannon swivel. As you can see in the screenshot above, whenever the player rotates their cannon, the tick time increases by a significant amount. This would need to happen continuously if the enemy tanks' barrels were to move smoothly.

I made a pre-release here if you want to try it yourself. It most likely won't crash or reset your RAM as long as you stay inside the play area, but it's still super broken and I am not responsible for damage if you try it on a physical calc.
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are GMT - 5 Hours
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum