Worklog for Oddball

PhysLite

Return to Worklogs

Now you're thinking with streams(Posted 2009-03-03)
Hmm... I wrote a lengthy worklog a few days back, but it seems to have vanished. Anyway.

I'm working hard to try and get v1.12 out some time this week. It's turning out to be a bigger update than expected, but I guess that's a good thing.

I've just made the loading and saving functions stream smart. It's a small change that won't affect most, but it does mean that ".plb" and ".plz" files can now be IncBin-ed. The more stream savvy can also do a few more imaginative things.

I've re-jigged some of the internal referancing, switching from lists, slooow, to managed arrays, fast. This is a major internal shake-up so there may be a some teething trouble and a couple of unforseen issues, but it gives a big speed boost to PhysicsUpdate and allows for some other positive tweaks. One consession is that TAdvBody objects are now referanced internally and must be manually freed, but this should be the only change that affects existing code.

I'm going to add in some higher-order-esque functionality too. Mainly to use internally, but I'll expose them for those that might find them useful. For those that don't know, this means that you'll be able to apply a single function to whole collections in one go. As you can imagine doing this a lot would be slow, but used in the right way it can be extremely useful. An example of this could be, if you wish to Freeze all the active TMass objects:
MassApplyToActive MassFreeze

Or how about drawing all the TAdvBody objects in one line of code:
AdvBodyApplyToAll AdvBodyDraw


I'm also removing the examples and tutorials from the update file and giving them a permanent download link. I was aware with so many examples and tutorials in the update it was getting a little cluttered. This will also allow others to see how coding with PhysLite looks without having to purchase.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Help!(Posted 2009-02-02)
The collision zone editor is now done and I've also made a few changes to the advanced body editor. They are zipped and ready for download, see below. They are currently Windows only and as I developed them on an XP machine the layouts may be a little off in Vista and 98. Please still consider them as BETA versions if you choose to use them.

PhysLite Editors - BETA (641KB)

Version 1.11 of PhysLite shipped in the last few days so if you haven't received it yet then email me and I'll see about resending it.

Finally I've been pushing headlong into the boring, but extremely vital, work of getting the help files up to date. Now that PhysLite can be built as a module I find the help file to be very useful. Being able to press F1 to get a functions syntax, and then another press to get the full help is a great asset. I'd like to eventually get sample code in for as many of the functions as possible, but with hundreds of functions in the documentation it may take some time. I am also going to be adding to the tutorials. The current tutorials only touch on the basics and I feel they should take the developer further into the functionality of PhysLite.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

ZED and v1.11(Posted 2009-01-21)
The collision zone editor is almost done. Using it is a snap and it speeds up PhysLite development immensely. I've just got a couple of features to add before putting out a public release.

v1.11 is almost done as well. It's a fairly big update, especially for collision zones, but most of the new methods are geared towards making editors for your PhysLite games. v1.11 has been a little delayed as I'm making it into a straight module as well as the usual include. The big benefit of this is inline help and function/method highlighting. This means I need to check all the bbdoc help entries to check I've not done anything squiffy. I'm hoping to get this out the door sometime this week.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

MaxGUI is the devil.(Posted 2009-01-04)
My hate/hate relationship with MaxGUI continues. The collision zone editor (ZED) is coming along nicely, however, due to my inability to shoehorn MaxGUI into any form of OO-ness I have abandoned my principles and gone completely procedural for the editor. This means the code will be a lot neater, if not completely 'clean'.

ZED has had the knock on effect, as I knew it would, of improving PhysLite's TZone type. There are tons of new methods and functions, and a few improvements and bug-fixes too. Quad tree's got a big optimization boost and I've cleaned up some of the TZone internals. All in all I'm very happy with my holiday progress.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Another year passes(Posted 2009-01-01)
I realised this week that PhysLite has been in development, in one form or another, for more than three years, and later this year will have been on sale for two years. During that time it has seen one complete rewrite, 10 updates with update 11 in the works as we speak, one full blown editor with a second currently in development, and the source expand to nearly 5,000 lines of code containing approx. 500 types, methods and functions. All told it has been a mammoth undertaking with many high and low points along the way. It is in this mood of nostalgia that I have decided to reduce the price of PhysLite licenses for the month of January. So I guess if you haven't already joined the wonderful world of PhysLite now is the ideal time to join us. Check out the website for more info. and payment details.

On the development side I have plowed into ZED, the TZone editor. It's still early days, but I've had a little more free time over the holidays so it's been progressing nicely. I also added the ability to pack your advanced body images directly into the .plb file. This was my intention from the start, but I'd always put off doing it for one reason or another. I'm glad I did as I recently came accross a very eligant way of implementing this which only needed the addition of four lines of code.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

News at last(Posted 2008-12-24)
First of all let me blow the cobwebs off this worklog. *Phoo* I guess it's been a while since I've added an entry. You'll all be happy to know my time away hasn't been wasted. PhysLite just hit v1.10 and I've just put together the first BETA build of the Advanced Body Editor. During the making of the editor there have been many additions to the engine which means v1.10 was a fairly major update. All PhysLite owners should have recieved the update by now, if not send me an email. A few worklog entries ago I promised a few screenies to brighten things up around here so I give you, from left to right; a TMass object being resized, a TConstraint being created, a TImage being added, the TRigs being organised, the finished creation being tested, the sparse :) online help.


I'm also releasing a public build of the Advanced Body Editor(windows only) to give non-PhysLite owners a chance to see PhysLite in action.

Advanced Body Editor - BETA (291KB)

Next on my agenda is the zone editor. Look out for more on this soon. Until next time. Enjoy.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

The editors(Posted 2007-10-01)
Well I guess it's time for my monthly worklog. I've been working on the first PhysLite editor this month. It's the Advanced Body Editor, or ABE for short, and I'm finding using MaxGUI a real nightmare. This will be the third application I've made using MaxGUI and I still don't seem to be able to get the hang of creating a clean implimentation. I'm sure MaxGUI is great when in the right hands but it just doesn't seem to work intuatively to me. Anyway enough of my inadiquacies, the editor itself is actually working well. There are two methods of editing elements of a body, visually, or manually. Visual editing is done straight in the canvas and is a WYSIWYG style of editing. Manual editing is done using textfields and gadgets, and is more for tweaking values or getting very precise values. Currently mass, constraint, and over-all body editing is in and next up is rig and image editing. I'm actually considering expanding the usefulness of the TRig object to allow image scaling, tint, alpha, etc. turning it into a bit more of a complete sprite system. I know in a previous worklog I said I didn't want to expand it in this way, but I think it can only be a benefit if I do. ABE will initially be released as a Windows executable until the bugs are ironed out and whilst I document it. Then I'll release the source and see about getting a Mac and Linux build made.

After ABE is complete I will begin working on the Zone EDitor, or ZED as it will be known. Hopefully once both are complete we'll start seeing a few PhysLite games appearing.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

One good turn...(Posted 2007-09-06)
Wow! Has it really been two months since the last update? I'd like to say that I've spent all that time working non-stop on PhysLite, but alas life is such that I've barely been able to touch it. The only real update is that I've added the ability to rotate the simulation drawing. This is a tough one to get your head round at first. It basically means that the simulation stays exactly as it is, but when it is drawn the whole thing appears rotated. Think LocoRoco/2D Super Monkey Ball and you'll get the idea.

My ToDo list is actually very small so once it's emptied I'm gonna start work on the object editors. Jake L has already started on an excellent looking editor. Not sure if he's planning to release it to the community, but I want to have an official-ish editor anyway. My intention is for the entire PhysLite library of functions to be as editor friendly as possible, so people can easily make their own game specific editors. Making my own editors will give me a chance to iron out any issues in that respect, and possibly give others a little insight into how it's done.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Collisions and Events(Posted 2007-07-09)
Well I've been hard at work on PhysLite this past week, and I've just finished up the collision events code. Collision events give your game feedback for the collisions that occured during the previous update. This was a lot of work and involved a couple of false starts, but in the end I've gone for a system similar to the standard events system already within BlitzMax. This means that collision events can be handled in several ways. You can use BlitzMax's Hook functions to intercept events as they happen, Poll events from the collision events queue, or you can Seek a collision event by choosing two objects to see if a collision occured between the two. In fact if you wish you can use all these methods together to give maximum flexability. Each collision event has a position and force, and of course the objects involved. It's also possible to create your own custom collision events, although I have no idea why you'd wish to. So far it seems reliable and fast. I'm just cleaning up the code before documenting it, and I hope to have it finished up on Wednesday sometime.

As promised I released a stress test to get some feedback on PhysLites performance on different specs. The results were good and consistant, and I was pleased by the response. Anyhow here's the thread for those that missed it.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

In the zone(Posted 2007-07-01)
This week I've overhauled the internals of the drawing commands. They still work the same, but this allowed me to add a scrolling and zooming system. Now scrolling and zooming can be done with just two commands. No complicated math, just tell PhysLite which part of the simulation you want to display and how zoomed in/out you want to draw and PhysLite works out all the math for you. Also added a drawing method for collision zones to compliment those for bodies. However I'm very conscious that I don't want to turn PhysLite into a sprite system. The drawing commands should, and will, always be secondary to the physics.
I also spent some time on the collision zones. I've added a new style, hole, which is the inverse of fill. And after a suggestion from Jake L I've added custom collision responses. In fact Jake's example code could have been plugged straight into PhysLite, but I decided on a similar but subtly different approach.
Still no screenshots for you, but I've just finished the shifted grid tutorial, which tries throwing as many objects around as possible, so I'll probably shove this on the forums as a stress/stability test.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Testing times(Posted 2007-06-26)
Testing, testing, testing. And that's about it really. My goal at the moment is to get the new code all working rock solid. I kind of went on a Brucey-like coding frenzy over the past few weeks and I feel testing suffered because of it. So I'm going to take a little while to put the new code through it's paces. Hopefully get a few screenshots to put in this worklog. There's nothing worse than lots of dry text and no pictures.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

v1.03Beta(Posted 2007-06-23)
Well finally finished the advanced body type. Loading saving and copying all seem to be working correctly. Had a couple of issues, but hopefully I've ironed them out after I went on a major bug hunt. It's turned out very well and is a big improvement on the code I had written for PhysMax. However it's also very different to the PhysMax code so it looks like I'll have to scrap the editor I'd written for PhysMax and start a new one. But the PhysLite code is far easier to use so hopefully it won't be too much work. Also all the moving code is in too. Now a body can be moved, translated, positioned, rotated, spun or turned as a single object, whilst still allowing all the individual components to be manipulated seperatly.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Following procedure(Posted 2007-06-22)
I got a little side tracked this week and added all the procedural functions. Now the lib can be used completely procedurally if that's your fancy. I did get some work done on the advanced body type and now there's only six(edit: make that five now) more methods to add. They are however the most complex methods, but hopefully shouldn't be too much longer. Then there's the small matter of documenting it all. PhysLite is now well over 2000 lines of code so I've split it into three source files. This should hopefully help make it more understandable and easier to use.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Building a better body(Posted 2007-06-08)
I've been mainly working on the advanced body type, TAdvBody, this week. The TAdvBody is an extension of the TBody type and makes a body more of a single entity instead of a collection of masses and constraints. It also directly associates with TRig and TImage types. This means that a TAdvBody object can be affected as a whole instead of having to use it's base components allowing loading, copying and saving, as well as the usual moving and positioning. This will nearly double the amount of functions and methods in PhysLite and brings it very close to the state PhysMax is at. As such it's going to require a lot of testing although I may release it early so PhysLite owners can have a play with it.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Shifty tactics(Posted 2007-05-28)
I suppose PhysLite requires a little explination. PhysMax was becoming a beast to maintain and I was unable to give it the time it deserved. As a result it's all encompassing brief was scaled down and became the new brief for PhysLite. This has extended the scope of PhysLite, but to a much more managable level than PhysMax.

Development news
I re-added shifted grid collision culling. I've decided to make it manually configured as setting the grid cells too small can break the simulation. This allows the programmer to tryout different size grids to see which performs best. Eventually I'd like to automate it, but this works for now. I've also added a new tutorial and I've started work on a practicle example.



DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

PhysMax is dead, long live...(Posted 2007-05-25)
PhysLite

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

No news is good news, right?(Posted 2007-02-08)
Wrong unfortunately. As tonyg kindly pointed out I've not updated this worklog in a while so I thought it was about time. The bad news is that PhysMax as a stand alone project is now on hold. I'm still working on it, but only as and when I need extra functionality as my free time is now very limited. I've turned all my efforts to a game project that uses the PhysMax module.

Well I suppose I'd better mention what I've actually got done. I've added some debug drawing code. What these functions do is draw the physics data on the display so that collision areas and the like can be seen visually. I also went back and reviewed the friction code. Friction is by far the most complicated part of the simulation, and maybe it's a little too complicated for a verlet integration. Currently I'm using the coulomb cone, or infact circle in 2D, method and it gives extremely realictic results. Well I've re-jigged it a little and I've now got two different friction models running. I'll have to see over the coming weeks which is the best for speed and accuracy.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Public demo(Posted 2006-12-11)
The main news this week is that I released a public demo of PhysMax in action. Here's the forum thread. This was mainly a compatibility test, to make sure the module actually worked on computers other than my own. There'll be more demos to come but they'll all be pointless if I don't finish the actual module. So this week I dived back into the code for PhysLite. Mainly adding extra functionality, but also trying a few optimizations. Even though the module is quite fast I'd like it to be faster. I've found the main speed issue is iterating through all the collision checks. I tried a shifted grid collision cull which was lightning fast, but unfortunatly the simulation became a little jittery when many objects were all bunched tightly together. I think the issue was objects changing sectors mid check due to their collision responses. Anyway, I've had to scrap that method for now. It was just too jittery.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Slow progress(Posted 2006-12-05)
Been working on the PhysMax module this week and more specifically on the Body Loading functions. PhysMax can now load a body into the engine as a template and from that individual bodies can be created. The templates are currently a seperate object, but this is just whilst I work on them. Eventually they will be integrated into the Body object and will work transparently from the coder.
Also been using the Body Editor to create some rigid body objects for testing. It's working well and I'm able to create the objects in a couple of minutes. It could do with a couple of small tweaks here and there but I'm very happy with how it turned out. I'm going to make a quick demo this week to see how well PhysMax performs on various systems as it's only been test on my PC so far.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Real work(Posted 2006-11-28)
I went back to work this week so I've not been able to dedicate a lot of time to this project. However, due to my continuing insomnia, I did manage to finish the editor. It still needs a little tweaking here and there, and I'm sure I'll add some extra functionality after I've used it for a while. Next will be to plug the loading functions into PhysMax itself. It feels like a very long time since I worked on any actual physics code for PhysMax. But with the editor done it feels like the finish line is in sight and I'll be glad to be able to put this module to work in an actual game.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Editor stuff(Posted 2006-11-20)
It's been all boring editor stuff this week. Not my favourite thing to do, but necessary non the less. Managed to get most of it done. Currently rigid or soft bodies can be constructed using absolute values, and images can be rigged up to the constraints. Next to do is the visual editting part, and to finalize the file format. Here's a quick screenshot for those that like looking at editors :p



Once the editor is done I'm hoping to create and release some examples of the module in use so I can get some public testing. I'll be glad to get back to the exciting physics stuff.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

Back to the grind stone(Posted 2006-11-14)
It's been over a month and nothings happened. Not my fault though as I was taken seriously ill and hospitalised, but enough about me. I've decided to split the project up into two seperate mods PhysLite and PhysMax.

PhysLite
This will contain only the physics code and nothing else. The idea being that PhysLite deals only with the physics. Displaying the results has to be dealt with else where. This part is complete although I'm sure when I get round to thoroughly testing it some bugs will rear their ugly heads.

PhysMax
This mod however will contain other useful automated sollutions for things like loading objects, and displaying images based on the physics simulation. I'm doing a little re-organising to this to automate it as much as possible. This means for simple situations an object can be loaded with one comand and is imediatly ready to interact with the rest of the simulation. This is not meant to be an all encompasing sollution as the games I have in mind for using this mod will require some specialised functionality.

The Editor
In my last worklog I eluded to the fact that I was working on an object editor. Well when I finally made it back to my computer and fired up the editor code I realised that a complete rewrite would have to be done. It seems I'm struggling to understand how to set out a clean and understandable MaxGUI project.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose

The story so far...(Posted 2006-10-04)
PhysMax will be a 2D physics module for Blitz Max. The project is already quite advanced, and the reason I'm starting a worklog so late on is to keep me motivated to see it through to completion.

The module
The physics part is all done. You can create bodies, give them mass, stiffness, friction, etc. You can create scenery and bounds for the bodies to interact with. Then set them loose. It's all very stable and save for a few optimisations is complete. Still to do however is collision feedback. Whilst bodies already respond to collisions accurately there are times when you what more info about the collisions for sound and visual effects. This is where collision feedback comes in. You'll be able to get information on collision locations, force, etc.

The Editor
This is the part I'm working on now. It's tough going. I prefer the fun stuff of letting my little physics objects bounce around, and I'm not to keen on doing the boring stuff like checking editor buttons do what there supposed to. At the moment you can create, place and size masses, and you can join them all together with constraints. Next step is to add parameter editting such as friction, stiffness, etc. Then finally tie it all together with a file format for loading them straight into the engine.

I'm sure there's more I've left out, but I'll save all that for a later worklog.

DaveW

PhysLite[Info]ODD.mod[Odd2D.mod][Aspect.mod][AsciiFont.mod]
"When you're the last man standing and still packing nukes you don't need experience points." - Brian Van Hoose