(c) Jon Prestidge
(For mod-chipped PSOne/Playstation1 or PSX emulators)
Click here to down-load the PAL ISO.
This is a spin-off from a larger game I started for the Playstation 1 called Oblique. Oblique ran into the ground because it was too big for the Playstation 1, even this stripped-down game with the bare minimum graphics and sound totally fills the memory and swamps the system resources -- this final demo still only runs at about 12.5 frames per second on the Playstation 1 (with the wind in the right direction or about 8 otherwise). However I have not gotten round to running this on an emulator on a really fast PC, maybe it is a bit more lively that way because it had a variable frame refresh rate (although the maths of the physics engine haven't been tested at high frame rates yet so the results might not be true to form). This game has a better chance than most projects languishing on my developer's shelf of being finished and released, because porting it to a modern fast platform such as the PC or PS4 etc. should be a good start.
The game itself involves propelling yourself around an arena with air jets in zero gravity and trying to hit a ball... although, as I suggest above, it's very slow and more of a curio than a playable game.
The physics engine at its heart is one I wrote myself, the most complex bits of it
simulate, in a simplified way, the physics of the human body.
It features: biometrically morphable humans, skeleton and flesh thickness editor, high articulation, real mechanics (including MoI and CoG recalculated every frame).
There are simplified virtual muscle groups that actually control limb movement. Limb movements are not simply moved to the required position (or even via a formula to effect realistic smooth movement)... no, it so much more complex... a routine is told of the desired limb position which then tenses the appropriate muscles (concentrically) to apply the appropriate torque to accelerate the limb... the limb's position is continuously monitored and when it approaches the required position it tenses another, opposing, muscle (eccentrically) to slow the limb down. It has to account for torque presented by relaxed muscles and sometimes tense opposing muscles (isymmetrically) to effect rigidity. This project did educate me as to what a smart piece of kit the human body is because you have to get the eccentric muscle tensing just right or you stop short or over shoot -- it's a miracle every time you pick-up a cup of tea.
Now this is where an absolute boat-load of problems arise. Rag doll emulations look very nice when bodies fall down dead, or something like that... but just think: what if your character is standing-up and gets hit on the side of the head, but not fatally? Obviously its head should not just completely flop to one side and stay there -- that's not very realistic. You'd expect someone's head to react a bit and then for that character to move its head back up right. The player is controlling the character so ideally the player would control that head movement too but the player only has a limited number of buttons (and wit) to control all the character's limbs, to be able to rotate them this way and that. So you'd probably want the computer to do that bit of head movement... but you may want to allow the player to make the character's head look up/down for example -- so the computer has to deal with the limbs when the player is not controlling them but seamlessly switch to 'manual' when the player wants to control them... this is always going to be a bit of compromise.
You'll note that in the demo game if you bang your head against the wall and it gets twisted to one side then the character automatically straightens its neck causing it to push its head against the wall propelling the whole character across the room (the same sort of thing happens with the character's limbs) -- you probably wouldn't want that .. but having said that what would you want? It depends. You might want to gently absorb the force when you meet the wall -- gently decelerating yourself so that you stay near the wall, or you might want to 'bounce' yourself off the wall back into the middle of the room, or whatever i.e. in scientific terms you could make yourself plastic or elastic. How do you begin to work-out what should happen to every limb, to every muscle, in a whole variety of situations. As I discovered here-in lies a truth: there are very few types of game where you can use human body simulation. So the character in the game is automatic yet very, very, stupid.
These issues are just the tip of the iceberg... in the first example (where the character is standing and hit on the side of the head) it's not just a case of having to deal with the forces presented in the neck... force is presented all the way down that character's body to the ground, potentially overbalancing him... should the computer assume that the character should automatically put his leg-out to the side to stop himself over balancing? ... and what if the player is controlling that leg at the time (to kick a ball let's say) should the player be over-ridden? And does the character have the type of personality where it 'expects the unexpected' and always stands-up rigidly with opposing muscle groups isymmetrically working against each other... or does the character stand relatively relaxed hoping to predict and react to any impacts... I thought of having selectable personalities, but when you think about it it's ashame, if you are in a simulator type game, not to have the players own personality manifest itself in the character -- but you would have no way of detecting the mood of the player via the controller-pad...perhaps when controller-pads come along where you can detect how tightly the player is holding them then this would provide a good indication of the player's mood. Here-in lies another truth as to why human simulation would suit very few games: game pad controllers just aint up to the job. In fact, many of my problems in developing the Obli engine were not the hairy physics calcs, but trying to compromise on who does what when (the computer or the player). Although until I had realised that there were these kinds of issues and conflicts with using human simulation in games, I had thought some of my programming was wrong. This is why this spin-off game is in zero-G, it simplifies things a lot for me the programmer, and for you the player.
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 20
Note that these are actual screen photos so excuse the gritty authentic look :-)
~Behind the scenes mad stuff you'd never expect.~
I did not buy-in a computer model of a human for this project -- I completely made my own, I didn't even use a CAD package, it was all done by 'chewing gum and string' methods. I guess I wanted to prove to myself that I could do it all from first principals -- it was a right of passage into 3D graphics. Doing it 'my way' did have the advantages (it wasn't all self torment), like: I had the data in the exact form I required and I didn't have to bother with any conversion tools, or have to knife and fork some basically aesthetic model to work in a biometric way. Some of the 'chewing gum and string' methods I used:-
measuring my own limbs in every way possible,
looking at x-rays in medical books to find-out where the bones and joints lay within the limb,
using large containers of water to obtain volumes of limb parts by displacement,
getting an idea of torques that muscles could generate by doing things like holding up measured weights at arms length or pressing down on bathroom scales,
testing CoG calculations by balancing myself on a pivot in various poses (head butting the carpet on some annoying occasions),
examining 8mm movie of me walking and measuring joint angles on a back projection screen a frame one at a time,
drawing polygons onto my arms and hands with a felt tip to gauge the most efficient arrangement
....all in the name of science. One rather spooky outcome of this is that the 3D model is essentially me, and interestingly the original data source, me, became a bit of a moving target because immersing myself in all this physics, programming and general cerebral mashing meant I had very little exercise for many months and hence fat was building-up and muscle was reducing.