![]() I created graph paper version that exactly matched how they were represented in the game data. The collision polygons for the Balloon and Birdcage became my debug test cases. The fastest code is the code that isn’t executed. The way collisions were implemented allowed me to do a bit check on the high bit and reject roughly half the checks – less calculations – important because frame rate was a big concern. There was also a broad-phase collision check. So the segment-to-segment check would be what is now called swept collisions. ![]() Lots of ad-hoc development here – making it up as I went along. If a collision was found, then the projected line would be adjusted to the point of first collision.Īs an aside, there are now terms for most all of this stuff which in many cases didn’t exist at the time. The collision checks were line segment to line segment – projecting each point of the polygon to where the new position would be based upon the velocity, creating a line segment, and checking for collisions with other polygons. In hex it came out as: 0x0000 flat facing up, 0x4000 vertical on left, 0x08000 flat facing down, and 0xc0000 vertical facing left.Īll the parts collision shapes were defined by polygons which could be either concave or convex. ![]() The 360 degrees of a circle were covered by 16-bits and went from 0 (0 degrees) to 65536 (360 degrees). A shift of 10 bits left or right would convert between the two coordinate systems. The conversion factor for the 16-bit integers was: 1,024 in the physics space was equal to 1 in the screen space. Everything had to be integers because at the time the speed of floating point operations on CPUs was slow. I decided to go with polygon borders for all the parts. No Google, no big Internet search space, so I ended up writing the collision code from scratch. The first order of business when I started coding was getting a collision system in place. Once I week I’d walk over to Jeff Tunnell’s office with the latest build on a floppy disk and show the build to everyone. Note: this was not my parents’ basement – I was married and had three young kids at the time. On the day that I finished the design, I wrote the date on the title page, printed it out, went “whew, finally” and then immediately started coding in the unheated and unfinished basement of my home in Eugene. I know that exact date from the title page of my design. Coding The Incredible MachineĬoding on TIM started on March 26, 1992. TIM had a very tight development schedule. Finding enough free time before shipping would be the constraint on whether I could get it done in time by the ship date or not. Walls, incline, and balls were already working. Wow, that would be cool to implement! I realized that I already had the basic physics and collision frameworks in place and I could implement the needed parts in TIM without too much effort. Along with a technical description it had a nifty graphic showing a billiard ball model for an AND gate similar to the one pictured below. Roger Penrose also discussed it in his book The Emperor’s New Mind which I was reading at the time. In the summer of 1992 when I was partway through implementing the original group of parts in The Incredible Machine, I read about Edward Fredkin and Tommaso Toffoli’s Billiard Ball Computer. ![]() Later on TIM was inducted into Computer Gaming World’s Hall of Fame which was a very pleasant surprise. I think I still have it somewhere – it was a pin or something like that. We won an “Honored Developer” award at the 1993 Game Developers Conference for it which I think was the first year that they gave out any sort of awards. There were a few games in the series and it got a surprisingly large and loyal following. The Incredible Machine (TIM) is a computer game released in 1992 that is driven by custom physics and is very similar to Rube Goldberg and Heath Robinson machines. The Incredible Machine and a Billiard Ball Computer
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |