Aidan’s Cooler in Contraption Maker – Implementation Details

By Kevin Ryan

Posted on April 22nd, 2016

Preliminary Note 1: Part one  of this subject can be found here: Aidan’s Cooler in Contraption Maker – The Backstory

Preliminary Note 2: So after trying, I find that embedding the code within this post just doesn’t work well. So you can find it all in one spot here. I’ll hook up the links in all the sections below as I write about each element.


aidansCooler

In this second post about Aidan’s Cooler I am going to briefly discuss and list the specifics about how I implemented it.

First you can find the code for the Aidan’s Cooler class here:

CMPartAidansCooler.h
CMPartAidansCooler.cpp

For Contraption Maker I wanted everything to be as data-driven as possible. So I created a CMPartManager class that would be responsible for making all the different parts in the game. My idea was that all the parts would be defined by JSON files which describe all the physical attributes of the part and then I’d have a base CMPart class that took care of all shared/general part methods. And then part specific code needed would be in part specific classes. In the end it almost worked that way.

This line is still in my CMPartManager.cpp file right before all the different sets of arrays that define all of the parts in the game:

// Hard coding here for now just to get 1st pass structure/data in place to work with
// -- will move into loadable JSON files

So unfortunately because of time constraints, something that sometimes happens during development, things never got moved into JSON files. It was a lower priority task. All the part definitions are data-driven, but from hard coded arrays instead of loadable JSON files. It may eventually happen, especially if I end up creating a part editor so that end users can create their own parts, but for now Aidan’s Cooler is defined by a few arrays. It’s not a hard thing to do, just takes time.

Here is the initial artwork that I received in order to create the cooler.

aidansCooler

Aidan’s Cooler Art

The Arrays

The group of arrays that completely define the cooler are here:

Code Excerpt #1

In each short section below I’ll briefly explain the details of each.

Preliminaries

Let me list out a couple of the macros before going over each separate element. These are used because I modified the physics engine we are using to used fixed point instead of floating point math and so I made a few macros to easily convert values between regular floating point and our integer system. You can read about the reason why used fixed point in this post: The Butterfly Effect

Code Excerpt #2

Polygon Vectors

First thing listed in Code Excerpt #1 above are the cpVect arrays. Each array contains the points of a polygon collision shape for the cooler. In the Chipmunk physics engine the polygons must be convex so for many parts multiple polygons are needed because their shape is irregular. The values in these arrays look ugly with lots of numbers and subtractions which were half the width/height of the artwork because I transferred each points value by hand from the artwork in Photoshop. I should have automated the process. Here is a sample of how I went about it from the Contraption Maker bear. Not a pretty process:

cmBearPolyVerts

Dynamic Bodies

Next up are the dynamic bodies which are just point masses. There is one body for the cooler body, another body for the cooler’s handle, and a third body for the wheel. Each of these bodies can move and rotate independently of each other. They are attached to each other by joint constraints that are described further down in this post. Here is the constructor for the dynamic body class:

Code Excerpt #3

Most of the variables are self explanatory.

  • id – Unique id for the body. Used by contraints, shapes, attachments, and artwork.
  • pos – Is just (surprise) the position of the body. It is usually just (0,0).
  • Mass – Mass of body
  • Density – Density of body
  • noGravity – Whether body is affected by gravity. Billiard balls aren’t effected by gravity. This is a carry over from what I did in The Incredible Machine where I was planning on making a billiard ball computer.
  • dampsRope – Whether this body will apply damping to attached ropes
  • shouldSave – Whether this body info should be saved in level files
  • next – Pointer to next body. All the different properties the describe a part are in null terminated linked lists.

The cooler has three bodies: the main container of the cooler, the handle, and the wheel. The main thing you see here is the offsets to the positions of the handle and wheel to the main cooler body and also the relative masses of the the three bodies.

Constraints

After the dynamic bodies are the constraints. There are joints that attached one body to another. You can check out this YouTube video which shows all the different Chipmunk constraints and joints in action. Here are the constructors for the rotary limit constraint:

Code Excerpt #4 – Rotary Limit Constraint

  • id – Unique id for the constraint
  • body1Id – First body that this joint connects
  • body2Id – Second body that this joint connects
  • minAngle – Minimum angle between these two bodies
  • maxAngle – Maximum angle between these two bodies
  • shouldSave – Whether this specific constraint info should be saved in the level file
  • next – Pointer to next constraint for this part

This rotary limit constraint is used to control how far the handle can rotate relative to the cooler body. The other two constraints are pivot joint constraints and they are used to connect the handle to the body and also the wheel to the body. Here is the constructor for the pivot joint constraint.

Code Excerpt #5 – Pivot Joint Constraint

  • id – Unique id
  • body1Id – First body that this joint connects
  • body2Id – Second body that this joint connects
  • pivot – Offset to location of where the two bodies are connected
  • shouldSave – Whether this specific constraint info should be saved in the level file
  • next – Pointer to next constraint for this part (null terminated linked list)\

If you look at the pivot joint arrays you’ll see that the body ids are set to hook the main body to the wheel and the main body to the handle.

Collision Shapes

The collision shapes for the cooler are made up of one circle and quite a few polygon shapes. As mentioned above polygons must be convex so many parts will need multiple polygons to correctly represent their irregular shapes. All of the collision shapes have Chipmunk group, type, and layers associated with them. Here is the code that has the defines for them:

Code Excerpt #6 – Defines for Collision Group, Type, and Layer

There a quite a few different shape properties that are defined. This code excerpt has the struct which has the three types of values define for each type of property and also a list of all the different types that Contraption Maker is currently using:

Code Excerpt #7 – Shapes’ Physics’ Properties

And there are also defines for different shape properties. This is so shapes can automatically play the correct sound effect when they hit different surfaces.

Code Excerpt #8 – Shapes’ Sound Properties

And here the constructor for the circle shape which is used by the cooler’s wheel:

Code Excerpt #9 – Circle Collision Shape

  • id – Unique id
  • pos – Offset to the position of the center of the circle
  • bodyId – The body that this collision shape is attached to
  • shapeProperty – Description of the friction and elasticity of the shape
  • shapeSfxProperty – Sound that this shape makes when hitting something
  • radius – The radius of the circle
  • group – The Chipmunk collision group this shape is in
  • collisionType – What type of collision callbacks this shape uses
  • layer – Which Chipmunk collision layers that this shape is in
  • shouldSave – Whether this specific collision shape should be saved in the level file
  • next – Pointer to next collision shape in a linked list

And this is the constructor for polygon collision shapes:

Code Excerpt #10 – Polygon Collision Shape

  • id – Unique id
  • pos – Offset to the position of the polygon
  • bodyId – The body that this collision shape is attached to
  • shapeProperty – Description of the friction and elasticity of the shape
  • shapeSfxProperty – Sound that this shape makes when colliding with something
  • verts – Pointer to an array of the vertices of the polygon
  • numVerts – Number of verts in the polygon
  • group – The Chipmunk collision group this shape is in
  • collisionType – What type of collision callbacks this shape uses
  • layer – Which Chipmunk collision layers this shape is in
  • shouldSave – Whether this specific collision shape should be saved in the level file
  • next – Pointer to next collision shape in a linked list

There are quite a few polygons for the cooler because there need to be separate shapes for the sides and the bottom on the cooler.

Rope Attachments

The cooler is set up so that a rope can be attached to the handle. This is handled in Contraption Maker by adding a rope attachment to a part. Any part can have any number of rope attachments. They just need to be part of the linked list of attachments in the part definition array. This is the rope attachment constructor:

Code Excerpt #11

  • id – Unique id
  • pos – Offset of the position of the rope attachment to the body it is attached to
  • bodyLinkId – The id of the body that this rope attachment is connected to
  • shouldSave – Whether this attachment should be saved in the level file
  • next – Point to the next attachment in a linked list

Nothing fancy with the rope attachment. Its location is just at the end of the handle and it is on the handle body.

Artwork

The final element describing the cooler is the only element that is actually seen on screen – the artwork. Everything else goes on behind the scenes. Each sprite is connected to a body and then tracks its position and/or rotation. There are few special cases where the artwork is connected to an attachment (like a rope attachment) instead of a body. Here is the rope attachment constructor:

Code Excerpt #12

  • id – Unique id
  • layer – Which layer it is draw on. Controls which sprites are drawn in front or behind each other
  • posLinkId – The id of the body whose position this sprite will track. -1 means don’t track any body’s position.
  • rotLinkId – The id of the body whose rotation this sprite will track. -1 means don’t track any body’s rotation.
  • spriteName – The sprite’s file name
  • width – Sprite’s display width
  • height – Sprite’s display height
  • partAttachmentId – Only used for special cases where we want this sprite to track an attachments location (like a rope attachment where the sprite would be the knot)
  • pos – Offset to the sprite’s location relative to the body
  • useFrameCache – Set to true if the sprite is inside of a sprite sheet
  • usedForBb – Set to true if this sprite should adjust size of part’s bounding box – use by the gui
  • shouldSave – Whether the info about this sprite should be saved in a level file
  • shouldPostProcess – Set to true if this sprite needs to be processed after physics have run. Used for cpu efficiency purposes so we can ignore lots of sprites each frame and only spend cpu time on those that need it.
  • opacity – Ranges from 0 to 255.  Used to control sprite’s transparency.
  • next – Pointer to next sprite in a linked list.]

If you take a look at the CMPartAidansCooler.cpp code, you should be able to figure out why the artwork for the word “Aidan” is reversed on one of the sprites.

Chipmunk Calls

Each of these constructors then use the definitions from the arrays to make calls to various Chipmunk routines to build up all the elements that make up the part. In the code excerpt below I’ve just put all those various calls in one place.

Code Excerpt #13

Final Wrap up

That is pretty much it. Here is a quick diagram of the various elements that make up Aidan’s Cooler.

coolerOverview

 

This post ended up being quite a bit longer that I thought it would be. Hope it is at least halfway helpful to someone.


Short Rambling Thoughts on the Discus, Tennis, Warren Zevon, and Flatlands

By Kevin Ryan

Posted on April 13th, 2016

I took a hike through the forest this morning (like almost every morning). Right near the end of today’s walk there is a log home which I’ve passed by many times. But today I noticed that they have a basketball hoop up in their driveway. “Oh, that’d be nice to have.” We can’t have one at our home because we don’t have any flat land. Actually, I guess we could put up a hoop and it would make for an interesting game since our driveway has a pretty good slope to it.

We didn’t think about how nice it would be to have some flat areas when we bought our land and built our home up here in the mountains back in the mid 1990s. Our log home is made of hand crafted logs that were shaped and fitted up in Canada before being taken apart and then traveling down to Shaver Lake, California. Amusing to think of the shell of our home on a few big trucks making their way down I-5 through Portland, Salem, Eugene (our former home), Mt. Shasta, and eventually making its way here.

logHomeInside

Our home under construction.

Discus

I was a discus thrower on our track team in high school and I was competing against people that usually outweighed me by at least 50 lbs and also had quite a few inches on me. Most of the discus and shot putters on all the different squads were lineman from the football team. I’m not built like a lineman. Try as I might, and I really tried, I couldn’t get my weight above 150 lbs. Trust me though, that “can’t get your weight up problem” does goes away when you get older.

I was good enough to get invited to some invitationals with some of the best in the state/nation where my relative size compared to them was even more apparent. My best throw was 151′ 11″ which wasn’t too shabby for my weight. The discus doesn’t rely on brute strength as much as the shot put so I was able to use technique to get on a more even keel with my competitors. Plus my math skills let me know that I wanted to release the discus at at 37 degree angle with a -10 degree angle of incidence.

discus1

Preparing for launch.

discus2

Away it goes

As a quick aside, those two photos were taken at our meet at McLane High School in Fresno. I recently found out that Warren Zevon went to that high school.

Tennis

Track and Field is a spring sport just like tennis, so you choose one or the other. Tennis fits my body type and skills much better than the discus did. Not sure why I choose discus over tennis. When I was younger I wasn’t too bad at tennis used to play quite a bit at the tennis club that my family belonged to. My older brother lettered in tennis at Fresno State and I think I would have had a good chance to do the same (at Oregon) if I had taken up the sport seriously.

Discus vs Tennis

When I was a senior in high school back in 1979, I remember sitting in my 6th period math class when Jeff Anderson started talking about tennis and the discus. He was on the tennis team. He thought tennis was a much better sport than just tossing the discus. He said, “When we get old I can call up a friend and say ‘hey want to play a round of tennis?’ What are you going to do? Call up someone and say ‘hey want to toss the discus around?” I said, “Uhhh. Yeah, I guess.” I think he had a point.

My Dad is 86 and he played tennis until recently when his knees gave out. He was Fresno State’s starting QB back when he was in college and I suspect his knees took a lot of punishment. Growing up I watched lots of tennis matches on tv with my Dad and brothers. Wimbledon and the US Open were the big matches, but the French Open was neat because it was played on clay which gives a whole different pace to the game. I remember watching an epic match between Borg and McEnroe at Wimbledon back in 1980. It was beyond belief wonderful. The sort of thing that the word ‘epic’ was made for.

borgMcEnroeWinbledon

Borg vs McEnroe Wimbledon 1980. Wow!

I wonder if I still have my old Wilson wood tennis racket somewhere. I should call up my little brother (50 year old little brother) and play a couple of sets sometime. Seriously. It used to be a lot of fun and its been a long time since I’ve played. Basketball needs too many people and the discus needs too few. To quote Goldielocks, tennis feels just right.

But right now I really feel like calling up my old high school friend, Jeff, and saying, “Hey wanna toss the discus around!”


Aidan’s Cooler in Contraption Maker – The Backstory

By Kevin Ryan

Posted on March 28th, 2016

Part two is now posted here: Aidan’s Cooler in Contraption Maker – Implementation Details

This is Aidan’s story and an explanation of how and why the cooler is one of the parts in Contraption Maker. It is the story of a brave cheerful boy and my friends from work that did something nice for him.

Sometime soon I am going to write another post that describes in some technical detail how I went about implementing Aidan’s Cooler in Contraption Make. When I do I’ll add a link to it right here at the top of this post.

aidansCooler

 

Aidan

Aidan is my son and he was born in the first half of June 1999. He was underweight and obviously sick so he stayed in our local hospital for a few weeks while they tried to figure out what was wrong. When he was four weeks old his heart stopped for a few minutes before the doctors got it going again. He was then transferred by ambulance to UCSF (University of California, San Francisco – a research hospital) and soon after was diagnosed with Neonatal Hemochromatosis which is a liver disease that is almost always fatal (“The prognosis is extremely poor. Some infants recover with supportive care, but this rarely occurs.”). In addition to that he also had acute respiratory distress syndrome.

The doctors did not expect him to survive, but they worked heroically over many months to save him and get him to the point where he could receive a liver transplant. He had the liver transplant when he was four months old and spent most of his first year in the PICU (Pediatric Intensive Care Unit) and the NICU (Neonatal Intensive Care Unit) at UCSF with various complications – very bad and scary complications. There were a handful of times where I thought he was dying in front of my wife and me.

aidanHome3weeksOld

Aidan at 3 weeks old with his Mom.

 

a8

Aidan a few days post transplant.

 

Post Transplant

Post transplant he had numerous problems including collapsed lungs, heart problems, kidney problems, possible fungal infection in the brain, a bleed in the brain that affected his left side, acquired hydrocephalus, deaf in left ear, and more. There were occasional crises.  He wasn’t able to eat by mouth and so he had surgery to have a permanent g-tube placed. He was also on supplemental oxygen because his lungs had been damaged. He spent much of the next five years in and out of the hospital. His last major surgery was in January of 2004 where he had brain surgery (Endoscopic third ventriculostomy) which cured his hydrocephalus and allowed them to remove his shunt which was draining fluid from his brain.

We were very happy that that surgery succeeded because the fluid that was being drained by the shunt was not being absorbed in his abdomen because he had so much scar tissue there from his many surgeries. In a hospital stay previous to the brain surgery they had drained 5 lbs of fluid from his abdomen. His weight dropped from 32 to 27 lbs. This was when he was four years old.

I want to break from Aidan’s story here for a couple of paragraphs to write a short bit about his nurses. I stayed with Aidan for many weeks in the PICU, sleeping in a chair next to his bed and over the course of all those times I saw many very sick kids there. Sometimes they don’t make it. You can tell because they draw all the curtains on the room – all the walls in the PICU rooms are glass – you can see into every room. It is a tough place to be.

There are certain jobs where you are exposed to human misery and there are people that do those jobs – like the PICU nurses that became our friends. Big kudos and love to them for being a balm in such a hard place.

As he stabilized Aidan had less and less extended hospital stays and got to spend more and more time at home. When he was home he needed some supplemental oxygen. We a had big machine that would concentrate oxygen out of the air and Aidan was hooked up to it all the time with a very long tube so he could wander around the house. If we wanted to find Aidan all we had to do was follow the follow the clear plastic tube.

aidanOxygenTube

Aidan in my home office with his long oxygen tube.

 

The Highway Patrolman

We lived up in the Sierra Nevada Mountains at 5,500 feet (and still do) so when we were down at sea level he didn’t need the extra oxygen. One day when he was three we were driving back from San Francisco from a visit with his liver doctors at UCSF when we were pulled over by the highway patrol near Gilroy. We hadn’t yet put on the license plate sticker for the next year – it was in the glove compartment – showed it to patrolman – all fine. Aidan was sitting in his car seat with an oxygen tank next to him – not hooked up because he didn’t need it until we got back up to altitude at Shaver Lake. The conversation with the highway patrolman went like this:

Patrolman:  Is that hooked up?
Me:  No he doesn’t need it.
Patrolman:  It really should be hooked up.
Me:  He doesn’t need it at sea level.
Patrolman:  Uh, you really should hook it up now.
Me:  We just came from the doctors and he doesn’t need it here – only up in the mountains.
Patrolman:  (with a sudden big grin) I’m talking about the car seat.
Me:  Oh! Yeah, that’s hooked up!

I’m sure we made that patrolman’s day.

 

Wilderness Hikes

Aidan is a true innocent. He will be 17 years old this June, but mentally he is probably around 6 or so. He has been through many painful procedures throughout his life. He has to have blood draws every 6 weeks to make sure that he is not rejecting his liver. Sometimes during hospital stays it has taken one and half hours to start an iv with numerous “pokes”. That is because he has been stuck with needles so many times that his veins aren’t in great shape. His body is a battlefield covered everywhere with surgical scars. And yet throughout it all he has remained brave and cheerful. He has an indomitable spirit and courage. He finds joy in simple things. He loves and is loved. He is my hero.

At home I’d carry him on my back so he could go on mountain hikes and do everything that the rest of the family does. Hikes through the wilderness are wondrous. There is magic around every bend if you just look for it. As the years went past he just got too big for me to keep carrying. The older Aidan could walk for a while, but eventually he gets very tired so then I carry him. On the hike in the two bottom photos below, I carried him for a few miles and it was really tiring. He was getting bigger and I was getting older. By the end of the hike, my arms were tired, my legs were tired, my brain was tired, and Aidan was very happy. I wanted a Black Butte Porter.

aidanHike

Aidan on a hike with me in the Sierra Nevada mountains at Balsam Meadows Forebay.

 

carryingAidan2

Carrying Aidan on hike.

 

carryingAidan1

Carrying Aidan walking past big Southern California Edison water pipe. Just past this area it does a 2,131 foot drop to the Big Creek Power Plant.

 

Walking

He wasn’t able to walk at all in his first couple of years because his left side doesn’t work too well because of the stroke. He could stand, but to move around he’d scoot on his rear. Then one day when he was two he started using a toy as a walker to get around the house. He could really zip around with that thing – I mean run fast! One time he took a corner too fast and went down with the walker on top of himself. Didn’t faze him – he was up and off again right away. It was good he figured out how to get around his “can’t walk” problem because once he became more mobile then he could more easily play with his brothers and sister.

aidanWalkerToy

Aidan zipping around the house.

 

aidanPlaying

Playing a “flashlight-in-the-dark” game with brothers and sister.

 

Pikachu

When he was an infant he became very attracted to Pikachu. I spent many, many, many, many hours and days and weeks and months and eternities watching Pokemon with him at the hospital. One day when he was two or three he was with me at a Goodwill store and there was a big stuffed Pika in the discount bin. He shouted, “Pika!!” My wife heard him from across the store. That Pika goes everywhere with him. It has gone into many surgeries with him. Even today he uses it as a pillow and it travels with us whenever we go anywhere.

pika3

Aidan with Pikachu at hospital.

 

pika2

Aidan resting with big Pika and little Pika at home. You can see his oxygen tube going of the lower left of the photo.

 

Steve McQueen

We will occasionally stay at the Glen Tavern Inn which is in Santa Paula. It has quite of history of old Hollywood stars staying there – Houdini, John Wayne, Rin Tin Tin, etc. In 1979 Steve McQueen lived in a hanger at the Santa Paula airport just a couple of blocks from the Glen Tavern Inn. So of course, since Steve was a patron, one of the drinks that they have at the bar there now is “The Steve McQueen”. It consists of:

-Coke
-Jack Daniels
-Bacardi 151 Rum
-Jagermeister

Aidan has gotten into the habit of finding ways to help around the house. A few years ago he started taking the trash out to the street for the garbage truck. He does lots of small tasks like this. So a couple of years ago out of the blue he decided to help mix drinks for me. “Want me to make you a Steve McQueen?” So I said sure. Now Aidan likes coke and so I had been letting him have any of the left over coke. So apparently he figured out that if he puts in more alcohol there is more left over coke for himself.

One day I filmed him making me a drink. That drink started to look very dangerous, I wanted to say hold it, but I kept my mouth shut as I watched with an impending sense of doom. I think it is the Bacardi 151 Rum that is the killer. Anyway I tried to finish that drink, sipping slowly, while watching a movie with the kids, but couldn’t. It crept up on me and eventually hit me pretty hard and I had to go lie down on the bathroom floor. The last time I felt like that was my freshman year at the University of Oregon in the Bean East dorm.

Here is the video of Aidan the bartender:

 

My Name is Aidan

Back in 2007 we visited Ireland for a couple of weeks. One night we went to Knappogue Castle for a medieval feast which was lots of fun with food and singing. Aidan really enjoyed it. When we got back to the Old Ground Hotel in Ennis where we were staying my brother gave me a poem he had written.

aidanPoem

“My Name is Aidan” – Mike Ryan, Knappogue Castle 2007, Ireland

 

Coolers

Aidan will get interested in many different strange things and for some reason he started to like coolers. I’m not sure exactly why or what triggered it in his head, but he slowly acquired a small group of different size coolers. One day after watching Toy Story 3, I found that he had set up the coolers around a “See ‘n Say” toy, mimicking that scene from the movie. To this day he will still set up the coolers different places around the house having them do different tasks.

coolersBeerCapChips

Aidan’s Coolers gambling.

 

coolersToyStory

The Coolers gambling Toy Story 3 style.

 

Dynamix to Spotkin

In 1984, a year after graduating from the University of Oregon, I was living in an apartment just off campus when I got a phone call from Damon Slye. He and Jeff Tunnell had just started up Dynamix and they wanted me to do some work for them. Not long after that they asked me to come on board as one of the original four owners of the company. Our first product was with Electronic Arts (Arctic Fox) and over the years our company grew to around 200 people. We went through a lot of ups and downs over the next 16 years. Bought out by Sierra which was good. Merged with CUC International which was very bad. Here is a New York Times article about CUC and the biggest accounting fraud ever: Asleep at the Books: A Fraud That Went On and On and On

During the years when I was spending a large part of my time in the hospital with Aidan, Jeff started up Garage Games with some former Dynamix employees. I published a few games with them before it was bought out by Barry Diller’s company (IAC) in 2007. Then he started up Pushbutton Labs which was bought out by Disney in 2012. I actually worked with Disney for a year or so before I moved on to work with Jeff again on his new venture, Spotkin. That was when I started work on Contraption Maker which is in many ways an updated version of The Incredible Machine.

So over the course of development of Contraption Maker, I implemented a whole boatload of different parts. At one point in the development I was implementing some container type parts in the game like boxes, baskets, and such. Around this time I was on one of my Eugene visits and I tell the Spotkin guys (Jeff, Jon, Keith, Tim) about how Aidan likes coolers. A few days later I get the artwork from them so that I can add cooler part to the game. They even put Aidan’s name on the cooler. It is a good thing to have work colleagues who are also your friends. In Jeff’s case a friend for over 30 years now.

aidansCooler

Source Artwork for Cooler.

Cool! I implemented it in the game and then brought Aidan into my office to see. You should have seen his face light up with a huge smile the first time he saw it.


A longer version of Aidan’s early years is here: Aidan Ryan – Liver Transplant Story

It may take me a while because I’ll need to find some free time, but as I wrote above, I’m going to write another blog post that gives a technical description of how I took the artwork above and turned it into a cooler that acts with correct physics.

For now I am going to end this post with a more recent photo of Aidan and a video from his Make-a-Wish trip where he figured out he could make his shoe squeak.

happyAidan

Happy Aidan. Go Ducks!

 

 


Hall of Fame

By Kevin Ryan

Posted on March 18th, 2016

The other day I was rummaging through some old files on my hard drive and found some old scans from back around 2006.

At the end 1991 I left Dynamix (The Rise of a Dragon in Eugene Oregon) after being with the company from the very start as one of the four original owner-partners. Three weeks later Jeff Tunnell convinced me to come back and work at home on whatever I wanted. We talked about possible projects and then I went to the University of Oregon library and checked out some Rube Goldberg works and thought about design and how I could make Rube Goldberg  type contraptions work on computers. I spent a couple of months of thinking and writing a design document for the game.

tim1

 

Once that was done, I set up a work desk in our cold basement on West Broadway Street in Eugene, Oregon, started working on The Incredible Machine. I would walk to the office about once a week to show everyone what I was coming up with.It was real nice to open my copy of Computer Gaming World about a decade and a half later (in 2006) and see this:

hofTim