+voronoi: voronoi.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+
+lockward: lockward.o $(HACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(HACK_LIBS)
+
+cubicgrid: cubicgrid.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+hypnowheel: hypnowheel.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+TENTACLE_OBJS=normals.o xpm-ximage.o $(HACK_TRACK_OBJS)
+skytentacles: skytentacles.o $(TENTACLE_OBJS)
+ $(CC_HACK) -o $@ $@.o $(TENTACLE_OBJS) $(XPM_LIBS)
+
+SONAR_OBJS=sonar-sim.o sonar-icmp.o $(HACK_TRACK_OBJS)
+sonar: sonar.o $(SONAR_OBJS)
+ $(CC_HACK) -o $@ $@.o $(SONAR_OBJS) $(HACK_LIBS)
+
+JIGSAW_OBJS=normals.o $(UTILS_BIN)/spline.o $(HACK_TRACK_GRAB_OBJS)
+jigsaw: jigsaw.o $(JIGSAW_OBJS)
+ $(CC_HACK) -o $@ $@.o $(JIGSAW_OBJS) $(HACK_LIBS)
+
+PHOTOPILE_OBJS=dropshadow.o $(HACK_GRAB_OBJS)
+photopile: photopile.o $(PHOTOPILE_OBJS)
+ $(CC_HACK) -o $@ $@.o $(PHOTOPILE_OBJS) $(HACK_LIBS)
+
+rubikblocks: rubikblocks.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+HILB_OBJS=sphere.o tube.o $(HACK_TRACK_OBJS)
+hilbert: hilbert.o $(HILB_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HILB_OBJS) $(HACK_LIBS)
+
+CCUBE_OBJS=companion.o companion_quad.o companion_disc.o companion_heart.o \
+ gllist.o $(HACK_TRACK_OBJS)
+companioncube: $(CCUBE_OBJS)
+ $(CC_HACK) -o $@ $(CCUBE_OBJS) $(HACK_LIBS)
+
+TBIT_OBJS=tronbit.o tronbit_idle1.o tronbit_idle2.o tronbit_no.o tronbit_yes.o\
+ gllist.o $(HACK_TRACK_OBJS)
+tronbit: $(TBIT_OBJS)
+ $(CC_HACK) -o $@ $(TBIT_OBJS) $(HACK_LIBS)
+
+KALEIDOCYCLE_OBJS=kaleidocycle.o normals.o $(HACK_TRACK_OBJS)
+kaleidocycle: $(KALEIDOCYCLE_OBJS)
+ $(CC_HACK) -o $@ $(KALEIDOCYCLE_OBJS) $(HACK_LIBS)
+
+quasicrystal: quasicrystal.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+unknownpleasures: unknownpleasures.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+geodesic: geodesic.o normals.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+geodesicgears: geodesicgears.o $(GEARS_OBJS)
+ $(CC_HACK) -o $@ $@.o $(GEARS_OBJS) $(HACK_LIBS)
+
+cityflow: cityflow.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+splitflap_dxf::
+ ./dxf2gl.pl --normalize --smooth --layers splitflap.dxf splitflap_obj.c
+
+FLAP_OBJS=splitflap_obj.o gllist.o splitflap.o $(TEXT) $(HACK_TRACK_OBJS)
+splitflap: $(FLAP_OBJS)
+ $(CC_HACK) -o $@ $(FLAP_OBJS) $(XPM_LIBS) $(TEXT_LIBS)
+
+unicrud: unicrud.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+ES_OBJS=xpm-ximage.o $(HACK_TRACK_OBJS)
+energystream: energystream.o $(ES_OBJS)
+ $(CC_HACK) -o $@ $@.o $(ES_OBJS) $(XPM_LIBS) $(HACK_LIBS)
+
+raverhoop: raverhoop.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+HSTAT_OBJS=sphere.o normals.o $(HACK_TRACK_OBJS)
+hydrostat: hydrostat.o $(HSTAT_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HSTAT_OBJS) $(HACK_LIBS)
+
+discoball: discoball.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+cubetwist: cubetwist.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+cubestack: cubestack.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+splodesic: splodesic.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+hexstrut: hexstrut.o normals.o $(HACK_TRACK_OBJS)
+ $(CC_HACK) -o $@ $@.o normals.o $(HACK_TRACK_OBJS) $(HACK_LIBS)
+
+esper: esper.o $(HACK_GRAB_OBJS)
+ $(CC_HACK) -o $@ $@.o $(HACK_GRAB_OBJS) $(HACK_LIBS)