Fluffoidz
Community Forums/Showcase/Fluffoidz
| ||
Hello All, Please can I ask those of you interested to try out my first BlitzMax game. It's called Fluffoidz and is an Asteroids variant. The game started out just mucking around to see what I could do with BlitzMax, which turned into a game in it's own right, which has subsequently turned into building a bit of a game framework. So even if Fluffoidz doesn't turn out to be a particular success I've got oodles of re-usable types. My intention is to release this as a freeware game in the hope of building some traffic to my Buzzard Games site - hence why the high score tables are online only. Any feedback welcome though I'm particularly interested in whether you experience any techinical problems, i.e. slow down, and how easy/hard you find it. Current download is here: http://www.buzzardgames.com/feedback/fluffoidz.exe (4.5Mb) To Do: Create an installer Known Issues: The physics are somewhat flawed - I put it down to the Fluff Factor! Cheers, Gareth. Keys: Left Arrow: Rotate left Right Arrow: Rotate right Up Arrow: Forward thrust Down Arrow: Reverse thrust Z: Fire Quick instructions: Fire Fluffs at Fluffoids to make them grow and divide More Fluffoids = Increased Score Multiplier! Dividing Fluffoids releases Power Pods Collect Power Pods for extra time Max out the timer to gain extra bonus points for collecting Power Pods 50 Time Capsules = Extra Life! Fluffoids become unstable (flashing red) if not fed Fluffs Fire Fluffs at unstable Fluffoids to stabilise them Unstable Fluffoids eventually explode releasing deadly Anti-Fluffs Fluffoids hit by Anti-Fluffs become immediately unstable Shoot Anti-Fluffs for points Life lost when time runs out Life lost if hit by Anti-Fluff Life lost if all Fluffoids are lost Game Over when all lives are lost Power Pods collected during a game count towards unlocking new ships! Enter user name and password to save highscores online PLUS get a free bonus ship! Screenshot(s): ![]() [Edit] 2006-08-23: New executable, updated to-do list & known issues [Edit] 2006-08-30: New executable, updated to-do list & known issues [Edit] 2006-09-04: New executable, updated to-do list & known issues |
| ||
Wow, cool game concept and unique graphics! Also, liked the arcade sounds. Did you use a physics library or did you code it yourself? |
| ||
cool game! I like how there's a lot of friction, unlike asteroids. Really well put together, even with sounds and everything! One little thing - maybe it should only turn the ship round when you hit an edge if you're going forwards, so you can back into a corner without crazy madness happening? |
| ||
Ahh, another Geometry Wars clone, if ever I've seen one. |
| ||
@Neuro: Thanks very much! The graphics are heavily influenced by the glowy vector stylings of Asteroids, Star Castle and, the current vogue, Geometry Wars - and my lack of any real graphical talents of course! The sounds were all bought from http://www.soundrangers.com after I finally admitted to myself that I couldn't come up with anything decent in a reasonable amount of time using my convoluted C64 based methods. I've done the "physics" myself. In hindsight I might have spent more time researching exists physics libraries and modules but all my work is time limited. As it stands the physics are very basic and work enough to keep the game fun without the flaws getting in the way too much. I might be wrong of course... @Warpy: Thanks very much! The friction has been kept fairly high to ensure that the player retains some semblance of control. Some of the unlockable ships do have lower friction and less mass though. I'll give your ship control idea a go but I'm already thinking that backing into a corner is fairly cowardly behaviour and deserves punishing with crazy madness! @RAM: Whilst I can't deny that looks wise Geometry Wars has had an influence, gameplay wise Fluffoidz isn't even close - it's more like an inverted Asteroids. So I'm not too worried about the arrival of a "cease and desist" order from Bizarre Creations just yet... |
| ||
Tafty, I was looking into doing similar style physics to how you did it, but was looking for the easier way by using a physics lib(yah I never was the one to dig too deep into writing my own physics). But If you got the time, you wouldnt mind posting a sort tut on how you did it? |
| ||
Before I start can I just say that I in *NO WAY* recommend that you use the below described method! If I had (more than!) my time again I'd more than likely search out the correct physics library to use. I also wouldn't implement this game as a fixed rate game either - I'd go the delta timing route. However, as I mentioned above I'm not in the business of making realistic physics... ...but since you've asked and I really don't have the time to be writing tutorials on subjects I only half comprehend myself I'll post the "Bounce" method of my TBouncySprite which is called on one bouncy object when it's found to have collided with another bouncy object: Method Bounce(target:TBouncySprite) If Not self.DisableCollisions And Not target.DisableCollisions Local vx1:Float = self.velocityX() Local vy1:Float = self.velocityY() Local vx2:Float = target.velocityX() Local vy2:Float = target.velocityY() Local dx:Float = self.x - target.x Local dy:Float = self.y - target.y Local distance:Float = Sqr((dx * dx) + (dy * dy)) ' Unit vector in the direction of the collision Local ax:Float = dx / distance Local ay:Float = dy / distance ' Projection of the velocities in these axes Local va1:Float = (vx1 * ax) + (vy1 * ay) Local vb1:Float = (-vx1 * ay) + (vy1 * ax) Local va2:Float = (vx2 * ax) + (vy2 * ay) Local vb2:Float = (-vx2 * ay) + (vy2 * ax) ' New velocities in these axes (after collision): ed<=1, For elastic collision ed=1 Local ed:Float = 1.0 Local vaP1:Float = va1 + (1 + ed) * (va2 - va1) / (1 + (self.mass * self.scale) / (target.mass * target.scale)) Local vaP2:Float = va2 + (1 + ed) * (va1 - va2) / (1 + (target.mass * target.scale) / (self.mass * self.scale)) ' Undo the projections vx1 = (vaP1 * ax) - (vb1 * ay) vy1 = (vaP1 * ay) + (vb1 * ax) vx2 = (vaP2 * ax) - (vb2 * ay) vy2 = (vaP2 * ay) + (vb2 * ax) self.velocity = Sqr((vx1 * vx1) + (vy1 * vy1)) If self.velocity > self.MaxVelocity self.velocity = self.MaxVelocity EndIf If vy1 <> 0 self.direction = ATan(vx1 / vy1) Else self.direction:+180 EndIf If (vx1 < 0 And vy1 < 0) Or (vx1 < 0 And vy1 > 0) self.direction:+180 EndIf ' Ensure direction is between 0 and 360 self.CorrectDirection() target.velocity = Sqr((vx2 * vx2) + (vy2 * vy2)) If target.velocity > self.MaxVelocity target.velocity = self.MaxVelocity EndIf If vy2 <> 0 target.direction = ATan(vx2 / vy2) Else target.direction:+180 EndIf If (vx2 < 0 And vy2 < 0) Or (vx2 < 0 And vy2 > 0) target.direction:+180 EndIf ' Ensure direction is between 0 and 360 target.CorrectDirection() If self.velocity + target.velocity + distance < self.CollisionRadius() + target.CollisionRadius() Local modV:Float = (self.CollisionRadius() + target.CollisionRadius() - self.velocity - target.velocity - distance) / 2 'self.velocity:+(modV + self.MinVelocity) 'target.velocity:+(modV + target.MinVelocity) self.x:+(modV*Cos(self.direction)) self.y:+(modV*Sin(self.direction)) target.x:+(modV*Cos(target.direction)) target.y:+(modV*Sin(target.direction)) EndIf self.SkipMovement = True target.SkipMovement = True EndIf self.CollisionCount:+1 target.CollisionCount:+1 End Method TBouncySprite extends TSprite which has all the properties you might expect of a sprite i.e. x, y, velocity, direction, etc. The above was converted from some Java code I found here: http://www.phy.ntnu.edu.tw/ntnujava/ In the right hand panel click "Dynamics" and then "2D Collision". There's also one about the physics of billiards which was quite useful. I've added quite a bit of fudge though to get it to work as a "one hit" collision in a multi-collision environment. The SkipMovement flag, which literally causes no velocity to be applied during the sprite's Update() method call, basically means that if an object is involved in more than one collision it won't go anywhere until those multiple collisions have been resolved and one of the objects can escape fom that collision. There's also a fudge that causes a trapped object to change direction by one degree each cycle to try and force it's way out of a trapping collision. Have fun! |
| ||
Great thanks for the info! |
| ||
it's more like an inverted Asteroids I am SO TOTALLY taking this literally and making a float-through-space-em-up! |
| ||
Hey that was pretty fun, good job here nice to see some freeware stuff. I always hated the no friction thing in Asteriods nice to play something I can controll. However the colors were way too MS Paintish. |
| ||
@Neuro: No worries, hope it helps @Warpy: Looking forward to seeing that when it floats into town! @Ryan: I'm glad you enjoyed it! Yep, the graphics are definitely programmer art! They were created in Fireworks and have little more than a couple of bog standard glow effects added to some retro-style primary colours. The new version uploaded this morning has instructions added (though I've just realised I've missed the timer bar out of the instructions - I'll fix that when I get home tonight) and the power pods collected on Easy level now count towards unlocking ships: http://www.buzzardgames.com/feedback/fluffoidz.exe (4.5Mb) |
| ||
Played it a bit more... I got 800000-odd points but the highscores thing keeps telling me my username or password is incorrect. I've signed up on your site as warpyp. The game seems to slow down *loads* when there are quite a few fluffoids on screen, or something. Clicking on 'online highscores' in the menu makes it crash, too. |
| ||
Thanks very much Warpy - that's invaluable testing. I've fixed the "Online Highscores" menu item. Unfortunately I can see from my logs that during your attempts to login you were using the username "warpy" as opposed to "warpyp". Slow down is an issue that I've been battling for a while. I'm guessing that quite a few of those fluffoids were exploding and releasing anti-fluffs? I think I need to reduce the number of particles that I'm using for explosions. I'll play around with that now. Meanwhile a new version with the fixed link and complete instructions is online now: http://www.buzzardgames.com/feedback/fluffoidz.exe (4.5Mb) |
| ||
I've also just had a "Eureka!"/"DUH!" moment of realisation... ...I more than likely need to implement Cos/Sin/ATan look up tables rather than explicitly make calls to the mathematical operators themselves. I'll give that a go when I get the chance. |
| ||
I was originally trying to log in as warpy before I realised you had to sign up on the site. I've typed warpyp in the box now, so if it's still sending just warpy that's a problem. cos/sin calls cost next to nothing these days; it's almost definitely not that. |
| ||
The sign up is increasingly looking like a useability issue... Following the attempts you made to log in you did in fact send a score of 700,000+ under the name warpyp. Because you have no password currently entered this was sent to, and can be seen in, the Unregistered users score table. Had the "Online High Scores" menu item been working you would have been taken directly to that table too. The story behind the two highscore tables is as follows: initialy I'll be in the business of collecting email addresses from those willing to receive my news letter for when I have new games to tell them about. Originally, I only had one score table that you HAD to register for. After a while I began to feel that this was off-putting, uninviting and a bit unfair; so I've recently implemented the unregistered users table. The "upsell" for registering is that you can store a high score for each of the ships you've unlocked. Not sure that's much of an upsell really...it's funny how these things sometimes sound like a good idea in your head and then when they're out in the wild they seem a bit, well, underwhelming... Anyway, with respect to the slow down issues; cheers for the info. Looks like I'll have to do some further benchmarking and see where the delays are occuring. |
| ||
ha ha , just played, Flufffy fun :) ...I more than likely need to implement Cos/Sin/ATan look up tables rather than explicitly make calls to the mathematical operators themselves. I understand this is not an issue anymore... I'm sure I read an article where a benchmark showed no gain... |
| ||
That 700,000 was my first attempt. The 800,000 was after that, when I'd signed up and restarted the game to make sure. |
| ||
yeah, you really won't notice much improvement with lookup tables. |
| ||
Hey this is neat. Nice glowing lines, did you use Indiepath's module or something else? Anyway all looks pro, good luck with your site. |
| ||
Hello again. Haven't managed to get much done recently but the game is now "feature complete". Barring any big problems or somebody coming up with a "Really, Really Good Idea", the to-do list is now as follows: 1) Benchmarking in an attempt to address the issue of slow-down 2) Compact the exe and create an installer 3) Ask for a feedback from the IndieGamer forums 4) Chuck it on download.com and a bunch of other sites New executable is in the usual place: http://www.buzzardgames.com/feedback/fluffoidz.exe (4.5Mb) @keyboard: Thanks, glad you had fluffy fun! @Warpy: All apologies - you're absolutely right! I saw the first login attempt and jumped with both feet to a wrong conclusion. Reading further through the logs I can see 3 "successful" logins sent from the game, each of which should have been followed by a score submission. Unfortunately the score either wasn't submitted or didn't make it to the server. I've made some alterations to the score submission process - hopefully that will have fixed the issue. I'm also going to relax the username criteria in the near future to allow shorter usernames - it only seems fair since my own username actually contravenes the current rules! @Grey Alien: Thank you - that's good to hear as "pro" is definitely where I'm aiming! I didn't come across Indiepath's module until I was quite some way into development. I would like to have a look at it at some point though. Everything in Fluffoidz is sprite based and created using Fireworks rudimentary glow effects. And finally...trig look-up tables: Since posting the above I've read through a few discussions in the topic archives and there certainly seems to be a school of thought that says it's no longer an issue. But there also seems to be an equally strong opinion that it does make a difference - in fact there seems to be a certain amount of religious fervour around the issue! Anyway, I'll benchmark, see where the delays are and get back to you with a hopefully slicker running version soon... |
| ||
good luck with it. In the past lookup tables were v. important on the Amiga etc, I used them all the time, but recent tests that I did showed them to have no real benifit, and others seemed to back this up. Be interest to hear your results. |
| ||
Hello, I'm back from my benchmarking extravaganza! It turned out the game logic was running fine - more often than not it finished in a few milliseconds. This is where all the trig functions are used so, frankly, I didn't even bother trying look up tables as I'm not about to try optimising a process when I more than likely won't even be able to measure the benefit. The slow down was (is?) entirely due to the rendering. What I was doing was that in a variety of places, including my much used TSprite type, I was saving the current alpha, blend, color, rotation and scale, setting all the above for the correct instance being drawn and then restoring all the above to their saved values. The upshot being that I could just be basically lazy elsewhere, set the values that I needed and draw whatever I wanted. This however meant I was making many, many basically redundant calls. What I've done now is everytime I make a change to the current alpha, blend, color, rotation and scale I save the value as a field in my TPlayArea type. This allows me to compare any changes I might do to the current value (thus saving many "Get.." calls) and only change them if the new value is different to the current (thus saving many "Set..." calls). I still think I've got too many particles - I've asked about this in another thread though here: http://www.blitzbasic.com/Community/posts.php?topic=62943 The new version is in the usual place: http://www.buzzardgames.com/feedback/fluffoidz.exe (4.5Mb) I've also used UPX to compact the exe - I'm impressed by the 1.5Mb it's lopped off the size. |
| ||
Minter RULEZ. |
| ||
LOL - damn right! I actually had "Sheep Mode" planned where all the Fluffoidz are replaced by Space Sheep and all the sound effects are replaced by bleating but time is my enemy... |