Omnimaga

Calculator Community => Other Calc-Related Projects and Ideas => TI Z80 => Topic started by: squidgetx on September 07, 2011, 06:09:03 pm

Title: Gravity Guy
Post by: squidgetx on September 07, 2011, 06:09:03 pm
Hey everyone, so basically I've started a new, small project to get back into calc programming and to help me learn to use CalcGS. (This is Axe of course)

It's a port/variation of the popular iphone/flash game Gravity Guy. It's one of those endless style games, where your only weapon is the ability to change the direction of gravity. If you fall or touch the edge of the screen, you die >:D Most of the engine is done atm, there's just a little bit left to do:

-Score
-Increasing speed as you hit the >> tiles (current speed is at 6mhz, no delay; I'll have it start with a delay like in Cuberunner and Space Dash)
-Snail powerup
-Rockets? (Not sure if I'll include this)
-Level switching
-Title screen/Death coding etc
-Level clear
-Fix bug where tilemap glitches after being pushed backwards.
Here's an executable, although I think I accidentally made the level so that it's impossible...lol Source attached, I didn't bother putting up the data include files though :P
Title: Re: Gravity Guy
Post by: Munchor on September 07, 2011, 06:10:52 pm
That looks like a very cool game and the graphics and gameplay seem very nice! Good job squidget, as usual, awesomesaucing on us!

What is CalcGS by the way?
Title: Re: Gravity Guy
Post by: TIfanx1999 on September 07, 2011, 08:38:51 pm
@Squidgetx: I'm not familiar with the original, but it looks pretty cool. :)
@Ephan: Calgs is an old program for making graphics for use in calc projects. It has a windows release, but I'm not sure about other platforms. It should be on ticalc.
Title: Re: Gravity Guy
Post by: yunhua98 on September 07, 2011, 10:44:50 pm
I was going to do this at first for the Axe contest.  But yours looks way better.  ;)
Title: Re: Gravity Guy
Post by: leafy on September 07, 2011, 11:41:57 pm
Awesome! I loved the original, and this looks promising.

Brotip: Make him fall a bit faster, and maybe take out the acceleration to make it simpler (I don't think the original game had acceleration either)
Title: Re: Gravity Guy
Post by: Freyaday on September 08, 2011, 12:01:59 am
I like the idea. I've never played the original, but I am looking forward to this all the same.
Title: Re: Gravity Guy
Post by: squidgetx on September 08, 2011, 03:07:30 pm
Thanks for all the positive feedback :D

I've started putting in the infrastructure for level clears, dying, etc, and I've upped gravity so that he falls a bit faster as well.
Title: Re: Gravity Guy
Post by: shmibs on September 08, 2011, 04:10:49 pm
coolio! i should try a quick arcade game too.
good luck on powerups. you have this game in the bag. =)
Title: Re: Gravity Guy
Post by: thenyanpeople on September 09, 2011, 04:31:26 pm
I tried sending this file to my friends ti-84 se but when I transfer it, the ti-connect software gives me an error message saying that my device does not recognize the command. How to I fix this?
Title: Re: Gravity Guy
Post by: Eeems on September 09, 2011, 04:44:59 pm
I tried sending this file to my friends ti-84 se but when I transfer it, the ti-connect software gives me an error message saying that my device does not recognize the command. How to I fix this?
What device are you using? What cable are you using? What was the order of what you did to transfer it? Have you been able to successfully transfer between your two calc's before? What OS is on your calc, and your friends calc?
Title: Re: Gravity Guy
Post by: Wellen on September 09, 2011, 05:22:22 pm
I don't think the original game had acceleration either
There is acceleration in this one : http://armorgames.com/play/7508/gravity-guy


Looks nice !  :)
Title: Re: Gravity Guy
Post by: Freyaday on September 09, 2011, 06:10:30 pm
Also, I've seen 84s out there, SE and BE, that have never been updated since they were bought. One had an OS with a version number that started with 1!
The point of this is that the OS may be super old, and the error it's throwing may be legitimate.
Title: Re: Gravity Guy
Post by: thenyanpeople on September 09, 2011, 07:47:40 pm
I am transfering it from my computer to my freinds ti-84 plus se. The cable is a mini usb to usb. The OS on the calculator is 2.55 I believe. I used TI connect.
Title: Re: Gravity Guy
Post by: Eeems on September 09, 2011, 07:49:59 pm
I am transfering it from my computer to my freinds ti-84 plus se. The cable is a mini usb to usb. The OS on the calculator is 2.55 I believe. I used TI connect.
ah ok, have you been able to successfully send other variables to his calc? If you have a silverlink I would recommend using that since the USB code is kinda bad for TI-connect.
Title: Re: Gravity Guy
Post by: thenyanpeople on September 09, 2011, 07:50:44 pm
I have not been able to send other applications to his calc.
Title: Re: Gravity Guy
Post by: Darl181 on September 09, 2011, 07:54:59 pm
Do you already have any apps on it?  I've had experiences when a certain app would for some reason block other apps from being sent..
Title: Re: Gravity Guy
Post by: thenyanpeople on September 09, 2011, 07:55:37 pm
Do you already have any apps on it?  I've had experiences when a certain app would for some reason block other apps from being sent..
I have nothing but the default apps on it.
Title: Re: Gravity Guy
Post by: Darl181 on September 09, 2011, 07:57:43 pm
And what are the default apps?  How much mem is free?
/me does a double-take and realizes this is a program and not an app :P

Using ti-connect, are you sending it (to your calc) as a program? (8xp)
Title: Re: Gravity Guy
Post by: squidgetx on September 09, 2011, 08:09:20 pm
I get this problem a lot with TI-Connect (Btw, darl, the engine is around 600 bytes; the rest of the filesize is data hehe)

Try this: Disconnect the cable and calc completely from the computer. Make sure there's nothing valuable in RAM, and clear the calc RAM (2nd-Mem-7:Reset) Restart your computer, plug in the calc, and try again.
Title: Re: Gravity Guy
Post by: Eeems on September 09, 2011, 08:13:39 pm
I have not been able to send other applications to his calc.
It sounds like it's not a problem with this program specifically but his calc, or your copy of ti-connect. How about you open up another topic and give details like, what version of ti-connect you are using, calc model, OS etc, and any other information you can think of that will help us figure out the issue
Title: Re: Gravity Guy
Post by: thenyanpeople on September 09, 2011, 08:39:22 pm
I have not been able to send other applications to his calc.
It sounds like it's not a problem with this program specifically but his calc, or your copy of ti-connect. How about you open up another topic and give details like, what version of ti-connect you are using, calc model, OS etc, and any other information you can think of that will help us figure out the issue
Okay, but I will try what squidgetx said first if that doesn't work I will create a new topic.
Title: Re: Gravity Guy
Post by: squidgetx on September 11, 2011, 07:21:01 pm
Whoo, update!

-Made it more playable
-Block falling animation for when you die (The blocks will fall in whichever direction gravity is going; cool, eh?)
-When you die, it starts the level over (I'll have a countdown in future versions)
-Bugfixes

*Todo*
-Title Screen/Level Infrastructure
-Countdown thingy
-Powerups
-More tiles and levels

I've built level two but it's not included here, soz :P
Title: Re: Gravity Guy
Post by: Builderboy on September 11, 2011, 07:22:57 pm
Loving the tile death animation ^^ Everything seems to be progressing awesomely :D Good luck adding the last features!
Title: Re: Gravity Guy
Post by: Freyaday on September 11, 2011, 08:05:43 pm
I like the dying animation too. :)
Title: Re: Gravity Guy
Post by: ztrumpet on September 11, 2011, 09:08:48 pm
Wow, that death animation is awesome.  The entire game looks wonderful. :)
Title: Re: Gravity Guy
Post by: LincolnB on September 11, 2011, 09:51:40 pm
Looks nice :)
Title: Re: Gravity Guy
Post by: alberthrocks on September 11, 2011, 10:33:52 pm
If I'm spending more time watching the screenshot than doing HW, you know that program's good. ;)

(Particularly the death animation)

A suggestion - I'm not sure how your game will be organized, but maybe you could make a little popup (animated and pretty, of course) that shows up after you die letting you restart the level, save the game, or exit? :)
Title: Re: Gravity Guy
Post by: squidgetx on September 14, 2011, 10:56:27 pm
alberthocks: Almost done (The animation part is done, I'm considering making it a custom font over TI font text. This menu will double as the pause menu.)

Working on title screen/spriting atm. The exec right now is in an unplayable state so I'll clean it up before I make another update.
Title: Re: Gravity Guy
Post by: squidgetx on September 18, 2011, 10:06:16 pm
HUGE update :D

-Animated pause and main menus
-Two more levels (although the third one is basically impossible I think)
-Speed increase blocks
-New tiles
-Infrastructure cleanup
-Bugs/optimizes

Todo:
Make main menu prettier
Custom levels
More levels
Snail powerup

Almsot ready for a release O_o
Title: Re: Gravity Guy
Post by: LincolnB on September 18, 2011, 10:12:43 pm
That looks pretty freaking awesome. As in, better than the Flash version of the same game. However, the countdown thing is kind of hard to say, it might be good to put it in a box with a cleared background or something.
Title: Re: Gravity Guy
Post by: Freyaday on September 19, 2011, 11:01:36 am
Wow. That looks epic./me needs to work on making his programs prettier.
Title: Re: Gravity Guy
Post by: LincolnB on September 19, 2011, 08:12:26 pm
Squidgetx, you or leafiness should totally write some kind of tutorial or thread on how to make l33t calculator graphics and animations.
Title: Re: Gravity Guy
Post by: Freyaday on September 20, 2011, 12:39:30 am
Yes, plz!
Like, design tips or something, and also Open The Damn Menu Factor* (coined by a Disney DVD menu designer, not I)

*OTDMF puts an upper limit on your transitions. It doesn't matter how epic the transition is if it takes half a minute.
Title: Re: Gravity Guy
Post by: squidgetx on September 21, 2011, 10:36:07 pm
Done. I may make changes to it later.

I gotta finish up these levels and get a release out soon :* maybe this weekend after I finish up a couple of essays...
Title: Re: Gravity Guy
Post by: squidgetx on September 25, 2011, 02:18:46 pm
Almost ready for a release. I opted out of the powerup thing since the game is too easy with it on ;)

I'm going to try and compress some of the data so I can get some more levels, but idk how...I'll look at Iambian's pucrunch axiom and/or write my own RLE routines...
Title: Re: Gravity Guy
Post by: LincolnB on September 25, 2011, 07:02:35 pm
I am excited to play this game.
Title: Re: Gravity Guy
Post by: squidgetx on September 26, 2011, 05:20:11 pm
I am excited to play this game.
I still need to edit some of the levels, but I'm really almost done.

Question to you guys: would you rather have this game be like
1) Psyche: built in default levels with custom suuport (file size ~9k)
2)Heald's Super Mario: no built in levels custom support (file size ~4k + 5k levelpack)
3)Levels built in no custom support

And, I need help with compression. I have no idea how to practically write an oncalc RLE routine (how do you know how big the output file is?) and I don't know how to program on a computer LOL

Title: Re: Gravity Guy
Post by: ztrumpet on September 26, 2011, 05:33:39 pm
Question to you guys: would you rather have this game be like
1) Psyche: built in default levels with custom suuport (file size ~9k)
2)Heald's Super Mario: no built in levels custom support (file size ~4k + 5k levelpack)
3)Levels built in no custom support
Way 1 all the way. :D
Title: Re: Gravity Guy
Post by: LincolnB on September 27, 2011, 10:08:01 am
Definitely the first one.

Also, BuilderBoy wrote a good tutorial on RLE, here it is:


Map data format:
The data uses run length encoding for comression.  Lets say we had a simple map:

11111000001111
00000222220000

Pretty simple, each number representing a different tile.  With normal storage this would take
a single byte per tile.  Or we could represent the data in a different way:

150514052504

Seems much smaller, but what does it mean?  lets insert some imaginary commas and dashes to make
it easier:

1-5,0-5,1-4,0-5,2-5,0-4

Now you may or may not be able to see how the data is represented.  The first segment is 1-5, or 5 '1's in
a row, followed by 0-5, or five '0's in a row, and so on.  This is how the data in run length encoding is
represented.  And to further the compression (or confusion), each #-# segment is packed into a single byte.
Instead of two hex digits to represent a number from 0-255, we will have 2 hex digits, each from 0-15,
representing the two numbers of each #-# element.

The first Hex digit 0 to 15 is the tile number.  The second hex digit is the number of tiles to add to the
tilemap.  The digit goes from 0-15, but 0 doesnt make much sense, since that would mean this element doesnt
do anything :P, so we will add one to this after we decompress it so that it has a range of 1 to 16. 

There is a small disadvantage that if you have empty spaces of 17 or more in a row, it will take more than
1 byte to represent in the code.





[Data]->GDB1         //map data to GDB1
[tileData]->Pic1      //tile data for tilemap

0->N            //element index for map data
0->I            //map index for storing tile data

While I>=96         //until we have stored all tiles
{GBD+N}->A         //Take the first element of the map data
N+1->N            //Increment the map index
A^16->B            //spit the map element into it
A/16->A               two seperate elements

For(F,0,B         //fill the map from current position I to I+B
A->{L1+I}         //could be optimised with Fill but i couldnt get it
I+1->I            //working :/
End

End            //End while


After this code is run, the tile data will be decompressed into L1, as folows

0  1  2  3  4  5  6
7  8  9  10 11 12 13...

ect, it will be in a straigt line, but you will have to access it using your own routine.  Something like this

{Y*W+X+L1}

where W is the width in tiles of your map.  X and Y would be the tile coordinates starting at the top left at
0,0.


Displaying the map:

here is a rudimentary program that should be run right after the pervious decompressing program:

For(X,0,11      //loop through the entire screen coordinates with tiles of 8x8
For(Y,0,7
{Y*12+X+L1}->A      //retrieve the correct tile from the data in L1
Pt-On(X*8,Y*8,A*8+Pic1   //draw the sprite to the screen
End
End


...hope he doesn't mind my posting it here.
Title: Re: Gravity Guy
Post by: aeTIos on September 27, 2011, 11:42:32 am
Epic game.
Also I'm for external levels only.
Title: Re: Gravity Guy
Post by: squidgetx on September 27, 2011, 03:28:40 pm
buttfredkin: I already know what RLE is, I just can't think of a practical way to make an on-calc compressor. Namely, how do you know how large the output is going to be? I think I'm going to have to do something rather inefficient: make the output file 1024 bytes (the size of an uncompressed map) and then keep track of the file size as the data is compressed...and then use memkit or write my own routine to change the final size of the file.

Once the data is compressed I imagine the engine+compressed levels will only be around 6 or 7k of data :P
Title: Re: Gravity Guy
Post by: Ashbad on September 27, 2011, 04:11:02 pm
... Namely, how do you know how large the output is going to be? ...

... Perhaps just make a two pass system, the first pass to evaluate the data for the output size, the second for compression?  Isn't that kind of the standard approach?
Title: Re: Gravity Guy
Post by: leafy on September 27, 2011, 06:03:32 pm
I think its feasible - everytime you compress a block it turns inyo a byte, so just increment a counter as you go along.
Title: Re: Gravity Guy
Post by: LincolnB on September 27, 2011, 06:39:41 pm
buttfredkin: I already know what RLE is, I just can't think of a practical way to make an on-calc compressor. Namely, how do you know how large the output is going to be? I think I'm going to have to do something rather inefficient: make the output file 1024 bytes (the size of an uncompressed map) and then keep track of the file size as the data is compressed...and then use memkit or write my own routine to change the final size of the file.

Once the data is compressed I imagine the engine+compressed levels will only be around 6 or 7k of data :P

My bad. All I read was RLE Compression, and I thought, oh, BuilderBoy knows how to do that. :)

... Namely, how do you know how large the output is going to be? ...

... Perhaps just make a two pass system, the first pass to evaluate the data for the output size, the second for compression?  Isn't that kind of the standard approach?

I'm with Ashbad here. That sounds like the right approach to me.
Title: Re: Gravity Guy
Post by: Builderboy on September 27, 2011, 06:49:49 pm
Alternatively, you could compress the data into a free buffer like L1, and then afterwards, create your appvar to the right size and copy it in.  Still kinda a 2 pass system, but a different type ^^. 
Title: Re: Gravity Guy
Post by: Freyaday on September 28, 2011, 04:32:42 pm
I like having External levels only, because then I don't have to have all that free ram.
I keep hundreds of files on my calc, and my VAT is a gigantic monstrosity.
I can't run Dimension Shift, (why is that thing so big anyway) my VAT is too big. I am a huge proponent of external levels.
Title: Re: Gravity Guy
Post by: Darl181 on September 28, 2011, 08:28:27 pm
All of Dimension Shift's levels are external :P and I didn't get around to optimizing it before the contest ended.  Maybe when I finish Essence..

As for this game, I'd go with the second option, external levels.  That way you can be sure that there aren't levels you never touch just taking up space, only the ones you'll play ;)
Title: Re: Gravity Guy
Post by: squidgetx on September 28, 2011, 11:17:58 pm
Well, we'll see how the compression goes...

If I get around 75% compression I'll go with Option 1 for sure (filesize: max 6k including levels)
Otherwise I'll go with Option 2 (filesize ~5k)
Title: Re: Gravity Guy
Post by: squidgetx on October 02, 2011, 10:49:59 am
Woo, 70% compression is hot.

I think my compressor is slightly broken though; sometimes tiles don't actually correspond to the right values...

I just realized I should use a fill() in the decompress routine over a for() loop. LOL

Back to work!
Title: Re: Gravity Guy
Post by: Munchor on October 02, 2011, 10:52:29 am
The port is looking great. Yesterday, I was at a friend's house and we played the Flash game in multiplayer. He is very good at the game, and he really plays like a pro. When I showed him a screenshot he was super excited and he went like "Woah, when will this be out? I want it on my calculator".

I was wondering if the calculator port will feature multiplayer.

Good job so far and good luck with what's left squidget!
Title: Re: Gravity Guy
Post by: leafy on October 08, 2011, 01:14:05 am
Alright squidgetx a couple of problems ^^ I've played this too much I think.

1) Detection is off. It detects to the back of the sprite, so you fall through tiles at the front.
2) The in-game menu swaps the position of main menu and restart so it's kinda irritating moving to the right one :/

Other than that, this game is frickin amazing! :3
Title: Re: Gravity Guy
Post by: JustCause on October 08, 2011, 07:50:22 am
Wow. This looks ridiculously good. I can't wait for more progress! :)
Title: Re: Gravity Guy
Post by: squidgetx on October 09, 2011, 09:16:08 am
Leafiness0:

1) Yeah, detection is kinda off. I've been trying to fix it, but been running into a few problems. I think though I just realized what could be wrong....
2) That's a side effect of having the menu fly in from different directions depending on gravity. Do you think it would be better if the menu just flew in from the same place no matter what gravity is pointing to conserve the order of 'menu' and 'restart'?

JC:
Thanks, I'm thinking about adding more special effect tiles :D
Title: Re: Gravity Guy
Post by: Freyaday on October 09, 2011, 12:44:20 pm
You could put in some extra code to flip the two options.
Title: Re: Gravity Guy
Post by: squidgetx on October 10, 2011, 05:48:25 pm
I could, but that would be kinda awkward....mehhh

In the meantime, my decompressor is randomly shitting all over itself...hopefully I'll be able to get some work on it sometime soon but no new news as of now =/

For the progress/attempts counter, I'm trying to think of a way to make it remember the stats for external levelpacks. The only ways that I can think to do that are...

1) Unarchive, write data to, and rearchive the level set every time the level is played
2) Force user to keep levelset in RAM, and if the set is deleted, the stats are lost
3) Somehow make an appvar that can keep track of all the stats at once (this would require a crapload of unecessary code) and that also needs to be archived/rearchived every time the game is run.

Yeah so basically none of these choices are pretty. Any other ideas? Or is it ok to disable these stats? (How helpful/cool are they? If it helps, I can make the game keep track of attempts/progress per game run, a la the Impossible Game)
Title: Re: Gravity Guy
Post by: ztrumpet on October 10, 2011, 05:54:12 pm
I think option 1 or 3 sounds the best.  Personally I wouldn't mind the archiving, as I think the stats would be cool.  Perhaps you could make it an option.  (I.E. Save Stats or Quick and Volatile)
Title: Re: Gravity Guy
Post by: LincolnB on October 12, 2011, 09:32:32 pm
Unarchiving/Archiving isn't a big deal if the stats are less than about a 100 bytes. I have to Garbage Collect every about six-eight times I compile a 6,000 byte program and Axe archives a backup, which is a little annoying.
Title: Re: Gravity Guy
Post by: squidgetx on October 12, 2011, 11:08:24 pm
Problem is I really really don't want to do 3 and 1 the appvar being unarchived/rearchived would be ~1.5k, unless I had two files for each levelset which would just be stupid. 2 I do t like because if I was the user I would hate it and I'd be archiving and unarchiving a lot already. I don't like the idea of so much automatic archiving and unarchiving of a larger variable not only because it sort of wears the flash but also because it will take ages after exiting :P

I think a good compromise would be to have temporary stats. this would be relatively easy to do: basically have an attempt and percentage counter show on the pause screen :)

Title: Re: Gravity Guy
Post by: aeTIos on October 14, 2011, 09:18:13 am
try to use SMC
Title: Re: Gravity Guy
Post by: squidgetx on October 15, 2011, 07:26:39 pm
Finally got compression working -_-

@ aeTIos: How about giving more detailed advice than just 'try to use SMC'? How would that help me? Why would I want to use SMC? Do you think I haven't already thought about it? The problem is that SMC and writeback wears the flash even more than archiving and unarchiving. besides, i don't even think it would work. Can you think of a way to do it using SMC?
Title: Re: Gravity Guy
Post by: Stefan Bauwens on October 20, 2011, 05:38:38 am
I have the game on my ipod now. It's kinda addicting. Hope it feels the same way on calc :)
Title: Re: Gravity Guy
Post by: squidgetx on October 21, 2011, 07:42:04 pm
I can't believe this final release is taking so long; it seems that all the loose ends (level editor, compression, ext. lvl support) are taking longer than the creation of the engine itself O_o

Leafiness; Fixed the collision bug ^^ but now I have to rearrange some of the levels because they abused the glitchy collision haha :P
Title: Re: Gravity Guy
Post by: Builderboy on October 21, 2011, 07:42:57 pm
I can't believe this final release is taking so long; it seems that all the loose ends (level editor, compression, ext. lvl support) are taking longer than the creation of the engine itself O_o

Welcome to my world :P  Hope you can get the release out soon ^^
Title: Re: Gravity Guy
Post by: LincolnB on October 21, 2011, 08:13:28 pm
I can't believe this final release is taking so long; it seems that all the loose ends (level editor, compression, ext. lvl support) are taking longer than the creation of the engine itself O_o

Welcome to my world :P  Hope you can get the release out soon ^^

yeah, I guess that's how it is for me and Portal X. BuilderBoy spent a lot of time on the engine, and I don't really know how much my time compares (I'm probably doing much much less than he did), but that's what it feels like, for sure.
Title: Re: Gravity Guy
Post by: C0deH4cker on October 21, 2011, 09:56:04 pm
I cant wait for any of the three games, Portal X, Graviter, or this one, Gravity Guy. They all look AMAZING, and I would love to be able to do something like these in axe. Props to you all for the effort.
Title: Re: Gravity Guy
Post by: squidgetx on October 30, 2011, 10:04:50 pm
Soon...

I must build a level editor. Which isn't really that hard...just annoying...sigh..then fix the levels and add a menu interface...oh and the stats thing. On the other hand I just submitted my early action application to college so maybe I'll be able to find more time...
Title: Re: Gravity Guy
Post by: squidgetx on November 30, 2011, 11:08:58 pm
Finished, put into zContest.

Here's the first official release :D Nothing really new, just overall cleaner and I also added 2 more levels.

Now to start on Cemetech's contest :O
Title: Re: Gravity Guy
Post by: saintrunner on December 01, 2011, 05:07:13 pm
This looks really good! Nice job!