I started work on the final version of AstroBreak.
This thread will show you the progress and shall give you a chance to suggest improvements or features to add. Once in a while I will add screenshots or download links.
I already added the classic movement of Asteroids - so now you can rotate your ship and move independently in another direction.
Planned features:
- PlayBasic intro screen and sponsors screen, I liked it in JetPak and I think Kevin and the sponsors deserve it, so I will add something similar
- More powerups and powerdowns (any nice ideas?)
- More aliens, different movement routines of them (not just horizontal, also more than one at the same time)
- More visual effects (Scoring points, particles, smoke trails?)
- High score table
- Maybe different ships to select with different properties (speed, builtin default weapon)
Any other ideas you would like to see?
Cheers,
Tommy
Glad to see you doing more work on it Thaaks - I too am adding new stuff into JetPak.
As for the splashscreens, I'm glad you liked the idea - it's only fair that Kevin/PlayBASIC/UnderWareDesign and the sponsors get the credit they deserve for putting in time, effort and money.
As for extras, one thing I found hard with your game is the scrolling star background. On my LCD monitor they don't work well at all. Perhaps having a scrolling image (planets, nebula etc.) in the background would produce a kinder result on the eyes and reduce repetetive nature of rock-blasting.
Other than that (and the steering, that you've now fixed) the game was fine. :)
I demand an extra dimention with a battle system like Freelancer!
Hi Tommy.
I had a lot of fun playing Astrobreak, so I thought I'd contribute my two cents. I'm an old-school ateroids fan.
The 'feel' of the game is a little off to me. It had been a while since I played the original asteroids and so it took me a bit to figure out what it was. After playing Astrobreak some more, it finally came to me that it was a mixture of a few different factors. First, the collision radius of the ship seems to be slightly bigger than the ship, which makes daredevil asteroid flyby's pretty unforgivingly difficult to pull off. If you get near an asteroid, you're down. I'd have more fun with it if I had the room to be a bit more free with my flying.
To go along with the above, the playable area feels a little crowded. In the original asteroids, you had a LOT of room to maneuvre because the ship was so small compared to the 'playing field.' In astrobreak, I feel like if I move faster than almost-as-slow-as-I-can I'm asking to hit an asteroid. It makes me feel a bit hobbled.
Third, in asteroids you could move one direction and fire another. While the car-steering isn't necessarily a bad thing, you have a much higher turning radius when you have to car steer (if you're moving) , and that adds to the crampedness of the board.
As for powerups, some sort of AE weapon wold be cool, even if it had limited ammo. It'd be fun to take out a batch of asteroids with a single shot if you can aim it properly.
Additionally, maybe adding a shot that would move in a straight line until it hit not one, but two or three asteroids and THEN vanish might be fun. Maybe shots that bounced off of the screen edges instead of wrapped around, or a spread shot that fired bullets off in more than one angle.
An obvious addition that you have probably already considered is a powerup that gives you some sort of shield allowing you to take an extra hit.
Maybe as a combined powerup/powerdown you could have a particularly powerful weapon that disabled your engines so you're forced to stay still while you blast away at everything for dear life for a few seconds. Just a thought.
Anyway, strong work overall. No matter what you decide to do with it I look forward to the updated versions. Cheers.
-Tracy
Yes, nearly forgot about the collision area. You're right (and also the judges mentioned that): the collision zone is too big for the ship. I will fix that.
Thanks for the weapon/powerup suggestions.
The "classic" steering is already in, just need to add some configuration menu to switch between your favorite steering method.
Cheers,
Tommy
re collision:
Personally I think it's better it have the collision zones slightly smaller than the graphic. So for the asteroids pull them in a bit just they lay inside the rotation of the object. If a circle won't fit, shape collision would really assist here.
In the case of the ship a simple triangle shape would easily suffice. It doesn't have to be perfect representation of the image mind you, as that can be too touchy. Just enough so the outline represents the hard region of the object.
Kevin: Thanks for the reminder - I will have a look at shape collision. Wanted to do so since the recent discussions in one of the forums here...
The compo version of AstroBreak is now on the http://www.PBcode.underwaredesign.com (http://www.pbcode.underwaredesign.com)
Cool - some kind of fame at last :D
Thanks, Kevin.
But where is the DigDug remake and Jetpak?
Cheers,
Tommy
QuoteBut where is the DigDug remake and Jetpak?
No source for digdug, in fact I have no idea what their doing.
Was going to upload Jetpak later.
I am currently working on the shape collision for the player's ship.
Here is my code snippet (assuming that "s" is an already existing Sprite with the player ship image attached to it):
img = GetSpriteImage(s)
; create the shape
shp = GetFreeShape()
CreateShape shp, 5, 5
SetShapeVertex shp, 1, 32, 5
SetShapeVertex shp, 2, 56, 50
SetShapeVertex shp, 3, 8, 50
SetShapeEdge shp, 1, 1, 2
SetShapeEdge shp, 2, 2, 3
SetShapeEdge shp, 3, 3, 1
ImageShape img, shp
SpriteCollisionMode s, 3
It's working so far. But sometimes it seems that asteroids, aliens or bullets just pass through and collisions do not work. Or it seems that one shape edge is working and the others are not.
So my question is: Do I have to set the shape vertices or edges in a certain way like clockwise or counterclockwise?
Or am I doing something wrong?
Cheers,
Tommy
That seems ok, but you'll post a something i can actaully test. But, i don't recall having those problems before
Haha, nailed it!
The problem is related to the collisiondebugmode!
In the following code collisions work differently if the global DebugCollisions in the 13th line is set to true or to false.
; PROJECT : ShapeCollision
; AUTHOR : Tommy Haaks
; CREATED : 17.03.2006
; EDITED : 17.03.2006
; ---------------------------------------------------------------------
Explicit True
; ---------------------------------------------------------------------
; Testing Pixel Perfect Sprite Collision with Vector Shapes
; ---------------------------------------------------------------------
; change DebugCollisions to false to completely mess up the shape / circle collision!!!
Global DebugCollisions = True
Global ShipSprite, AlienImage, shp, img
Global sw, sh; screenwidth and height
Global MaxSprites, lp, flashcolour, ThisSprite, NextSprite
; load the ship as image 1
ShipSprite = LoadSprite(1, "ship.png", 2); make it an FX image
; setup shape collision for the player ship
shp = GetFreeShape()
CreateShape shp, 5, 5
SetShapeVertex shp, 1, 32, 5
SetShapeVertex shp, 2, 56, 50
SetShapeVertex shp, 3, 8, 50
SetShapeEdge shp, 1, 1, 2
SetShapeEdge shp, 2, 2, 3
SetShapeEdge shp, 3, 3, 1
img = GetSpriteImage(ShipSprite)
ImageShape img, shp
SpriteCollision ShipSprite, True
SpriteCollisionMode ShipSprite, 3
PositionSprite ShipSprite,Rnd(sw),Rnd(sh)
SpriteCollisionDebug ShipSprite, DebugCollisions
; load the alien as image 2
AlienImage = 2
LoadImage "ufo64.png", AlienImage
; prepare image #2 as FX iamge
PrepareFXImage AlienImage
; Tell PB to direct all drawing back to the screen
RenderToScreen
; Get the Width/height of screen
sw=GetScreenWidth()
sh=GetScreenHeight()
; Create a bunch of randomly positioned alien sprites
MaxSprites=10
For lp=2 To MaxSprites
; CReate this sprite
CreateSprite lp
; Assign Image #2 to this sprite
SpriteImage lp,2
; Set Sprites Draw Mode to Rotated
SpriteDrawMode lp,2
; Enable Sprite Collision For this sprite
SpriteCollision lp,True
; Enable this Sprites Collsion Class (the class/group it belong too)
SpriteCollisionClass lp,3
; Set this sprites Collision mode to "circle"
SpriteCollisionMode lp,2
SpriteCollisionRadius lp, 32
AutoCenterSpriteHandle lp,1
SpriteCollisionDebug lp,DebugCollisions
; Randomly Position this sprite on the screen
PositionSprite LP,Rnd(sw),Rnd(sh)
Next
; =====================================
; Start of the Main DO/LOOp
; =====================================
Do
; Clear the Screen to black
Cls 0
; Display a message
Print "Sprite Collision - Shape Mode"
Print "Touch the WHITE region in the sprite"
; Run through and Turn/Rotate all the sprites
For lp=2 To MaxSprites
TurnSprite lp,1
Next
; Position The users Test Sprite #1, at the mouses position
PositionSprite ShipSprite,MouseX(),MouseY()
; rotate the ship on left mouse click
If MouseButton() = 1
TurnSprite ShipSprite, 1
EndIf
flashcolour=0
RemStart
; Check If the Users Sprite Has Hit any of the rotating sprites
NextSprite=GetFirstSprite()
Repeat
ThisSprite=SpriteHit(1,NextSprite,%0010)
If ThisSprite>0
NextSprite=GetNextSprite(ThisSprite)
FlashColour=$770000
EndIf
Until ThisSprite=0
RemEnd
For lp = 2 To 10
If SpritesOverlap(lp, ShipSprite)
FlashColour=$770000
EndIf
Next
; If there was an impact, Flash the Screen RED
If flashcolour
Cls Flashcolour
Else
Print "No Impacts"
EndIf
; Draw all the sprites
DrawAllSprites
; Show the Screen
Sync
; Loop back to the previous DO statement to keep the demo running
Loop
Psub LoadSprite(spr, name$,mode)
Local im
im=GetFreeImage()
LoadImage name$,im
PrepareFXImage im
CreateSprite spr
AutoCenterSpriteHandle spr,1
SpriteImage spr,im
; SpriteDrawMode 2 means the sprite image can be rotated. Other modes use the original image.
If mode=2 Then SpriteDrawMode spr,2
EndPsub spr
You'll need the two attached images or take them from my AstroBreak sources.
[attachmentid=544]
[attachmentid=545]
I also upload two screenshots showing the misbehavior.
Debug collision mode on, collisions working properly.
[attachmentid=546]
Debug collision mode off, collisions not working correctly.
[attachmentid=547]
Phew! Your turn, Kevin :D
Cheers,
Tommy
Hmmm... Yep.. confirmed !
Ok this drama is now fixed in PB1.27.
It's a logic drama caused by the shape buffer was not being refreshed prior to being used. It works when you draw the collision modes as drawshape (which is used for sprite debug) calls RefreshShape as part of that process. I'll be adding a RefreshShape command so the use can fiorce a refresh when ever you like. It's best not done often as works out the bournding box/circle of the vertex for collisions.
Given that, you can trick the curent version into working, simply by drawing the shape once. This will init the shapes vertex's and it should work as normal from then on.
ie. Build it and draw it off scree
; load the ship as image 1
ShipSprite = LoadSprite(1, "ship.png", 2); make it an FX image
; setup shape collision for the player ship
shp = GetFreeShape()
CreateShape shp, 5, 5
SetShapeVertex shp, 1, 32, 5
SetShapeVertex shp, 2, 56, 50
SetShapeVertex shp, 3, 8, 50
SetShapeEdge shp, 1, 1, 2
SetShapeEdge shp, 2, 2, 3
SetShapeEdge shp, 3, 3, 1
drawshape shp,2000,0,2 ;<<<<<<<<<< draw way off screen to force it to refresh
No need to fiddle around. I installed the newest WIP and it's working great :D
Thanks a lot, Kevin!
Tommy
Just had a few goes and I really enjoyed it. Nice work :)
Have you released the version with ship control options? would love to give that a go, but i couldn't find anything.
Thanks for the compliments - need to have a look at your game too!
The version with classic ship control is not yet available. I'm still working on the menu code.
Give me a few days then I will release a interim version on my website.
Cheers,
Tommy
Sorry, I think I misread one of your earlier posts :wacko:
No rush, I'll look forward to playing when it's ready :)
Okay,
the (first?) interim release is finished.
Go and grab it here! (http://www.haaks.net/astrobreak/index.html)
Changes/improvements:
- Classic steering mode (new default mode),
- improved collision checking (smaller bounding circles for asteroids, bounding triangle shape for the player ship),
- improved menus with sound and music volume control (see Options),
- minor issues.
Hope you like it. Now I will start with a high score list and new powerups and powerdowns.
Any feedback highly appreciated!
Cheers,
Tommy
Wow. That's a HUGE improvement over the first version. I really enjoyed playing it, and everything looks really good. (Menu's, etc.)
The collision feels just about right, to be honest. I think you've nailed the collision radii for everything.
The ship has a little more acceleration power to it than traditional asteroids did, and I can't decide if I like that or not. While I find it cumbersome, I have a hunch I may really enjoy it after I get used it. I'll have to play it some more.
Love to see what it looks like with some more weapons and polish. Strong work.
Tommy, the game becomes increasingly better... The classical control does not correspond to 100 % yet the original, however that one is also very triggy (attempts me myself just at that, so mine has, however, problem with the physics)...
Your Website is great... Pleases me already onto your first tutorial (like in german too ;) )
until soon
Big C.
P.S.: Please, can you tell, why you make Tmp-Files (BMPs) from your Title-Screens? The sourcefiles are png. The tmp-files arn't deleting after exit the game.
Thanks that you like the improvements.
Speed issue: Yes, I'm still playing around with it. Maybe I slow it down a bit - on the other hand you can get used to the speed. It's like driving a fast car: you have the speed if you need it (passing other cars), you just have to be careful with your gas pedal if the roads are crowded :D
Big C.: Regarding the temporary bmp files: I am not aware of creating temporary bmp files. I do have a screen snapshot routine in - I will see what key fires it (Space key?) or if I save a screenshot of the title screen on startup. It's certainly not on purpose. Will look at the code tonight...if the bmp files have a trailing number (file1.bmp, file2.bmp) that would be a good hint for my snapshot routine :rolleyes:
Regarding the tutorial: I recently read a nice Space Invaders tutorial for Java by Kev Glass (see Coke and Code (http://www.cokeandcode.com)). He is a very smart guy and has always good simple approaches to games.
While reading the tutorial I thought that it would be pretty easy to do something similar with PlayBasic. Even more as the code of Astrobreak is already following the approach Kevin Glass explains by using time based game updates and different game states.
Of course everything needs to be adapted to PB but the general plot could stay the same.
Cheers,
Tommy
I get a short pause in the game when the player ship wraps around. Other than that the game played fine.
The new menu looks much better. The shaded background and shadows look great. :)
I enjoyed playing the game. The way the asteroids move when you accelerate takes some getting used to, but it's good fun to play.
Nice work :)