diff --git a/projects/atlanti/bin/atlclient b/projects/atlanti/bin/atlclient
new file mode 100755
index 00000000..23317d8a
--- /dev/null
+++ b/projects/atlanti/bin/atlclient
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+BINDIR=`dirname $0`
+JAVA_ARGS=""
+
+# grab the -Dinviter if it's specified
+if [ ! -z "$1" ] ; then
+ case $1 in
+ -Dinvitee=*)
+ JAVA_ARGS=$1
+ shift
+ ;;
+ esac
+fi
+
+$BINDIR/runjava $JAVA_ARGS com.threerings.micasa.client.MiCasaApp $*
diff --git a/projects/atlanti/bin/atlserver b/projects/atlanti/bin/atlserver
new file mode 100755
index 00000000..5e43e32d
--- /dev/null
+++ b/projects/atlanti/bin/atlserver
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+bindir=`dirname $0`
+$bindir/runjava com.threerings.micasa.server.MiCasaServer $*
diff --git a/projects/atlanti/bin/runjava b/projects/atlanti/bin/runjava
new file mode 100755
index 00000000..cb3d148e
--- /dev/null
+++ b/projects/atlanti/bin/runjava
@@ -0,0 +1,95 @@
+#!/usr/bin/perl -w
+#
+# $Id: runjava,v 1.1 2001/10/09 20:27:35 mdb Exp $
+#
+# Invokes java with the necessary classpath and parameters.
+
+use Getopt::Std;
+
+my $usage = "Usage: $0 [-p pid_file] [-r server_root] args\n";
+
+# locations of stuff
+chomp($location = `dirname $0`);
+
+# get the server root by popping the /bin off of our parent directory
+@parts = split(/\//, $location);
+pop(@parts);
+my $root = join("/", @parts);
+
+# make sure JAVA_HOME is set
+my $jhome = $ENV{"JAVA_HOME"};
+if (!defined $jhome) {
+ warn "$0: Error: No JAVA_HOME specified!\n";
+ warn "\n";
+ warn "You must set your JAVA_HOME environment variable to the\n";
+ warn "the absolute path of your JDK installation. For example:\n";
+ warn "\n";
+ warn " % JAVA_HOME=/usr/local/jdk1.2\n";
+ warn " % export JAVA_HOME\n";
+ die "\n";
+}
+
+# make sure it's set to a directory
+if (! -d $jhome) {
+ die "$0: Can't find a java interpreter in '$jhome'.\n";
+}
+
+my $java = "$jhome/bin/java";
+my $jlib = "$jhome/lib/classes.zip";
+
+# determine our machine architecture
+my $ostype = `uname -s`;
+my $machtype = `uname -m`;
+chomp($ostype);
+chomp($machtype);
+my $arch = "$machtype-$ostype";
+
+# add our native libraries to the runtime library path
+my $libs = "$root/lib/$arch";
+my $libpath = $ENV{"LD_LIBRARY_PATH"};
+
+if (defined $libpath) {
+ $ENV{"LD_LIBRARY_PATH"} = "$libs:$libpath";
+} else {
+ $ENV{"LD_LIBRARY_PATH"} = $libs;
+}
+
+# put everything in our class path
+my $classpath = "-classpath $jlib:$root/dist/classes";
+
+# any zip or jar files in our lib/ directory get added to the class path
+if (opendir(DIR, "$root/lib")) {
+ foreach $lib (grep { /.(zip|jar)/ && -f "$root/lib/$_" } readdir(DIR)) {
+ $classpath .= ":$root/lib/$lib";
+ }
+ closedir DIR;
+}
+
+my $pid_file = undef;
+my $i = 0;
+
+# strip out the args (we'd use getopt() but the damned thing provides no
+# way of escaping arguments so that we can pass args to runjava that get
+# passed down to the JVM)
+for ($i = 0; $i < @ARGV; $i++) {
+ my $arg = $ARGV[$i];
+
+ # stop when we see -- (and strip it out because Java don't dig --)
+ if ($arg eq "--") {
+ splice(@ARGV, $i, 1);
+ last;
+ }
+
+ if ($arg eq "-p") {
+ $pid_file = $ARGV[$i+1];
+ splice(@ARGV, $i, 2);
+ $i -= 1; # decrement i so that things stay in sync
+ }
+}
+
+# log the pid file if requested to do so
+print `echo $$ > $pid_file` if (defined $pid_file);
+
+my $cmd = "$java $classpath " . join(" ", @ARGV);
+# print "$cmd\n";
+exec($cmd);
diff --git a/projects/atlanti/build.xml b/projects/atlanti/build.xml
new file mode 100644
index 00000000..c1efeecd
--- /dev/null
+++ b/projects/atlanti/build.xml
@@ -0,0 +1,75 @@
+
+
- * import org.waywardgeeks.venison.Log;
+ * import com.threerings.venison.Log;
* // ...
* Log.warning("All hell is breaking loose!");
* // ...
diff --git a/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiController.java b/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiController.java
new file mode 100644
index 00000000..f2d3eaee
--- /dev/null
+++ b/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiController.java
@@ -0,0 +1,27 @@
+//
+// $Id
+
+package com.threerings.venison;
+
+import com.threerings.cocktail.party.client.PlaceView;
+import com.threerings.parlor.client.GameController;
+import com.threerings.parlor.util.ParlorContext;
+
+import com.threerings.venison.Log;
+
+/**
+ * The main coordinator of user interface activities on the client-side of
+ * the Venison game.
+ */
+public class VenisonController extends GameController
+{
+ protected PlaceView createPlaceView ()
+ {
+ return new VenisonPanel(_ctx);
+ }
+
+ protected void gameDidStart ()
+ {
+ Log.info("Venison game did start.");
+ }
+}
diff --git a/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiPanel.java b/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiPanel.java
new file mode 100644
index 00000000..b84f498d
--- /dev/null
+++ b/projects/atlanti/src/java/com/samskivert/atlanti/client/AtlantiPanel.java
@@ -0,0 +1,39 @@
+//
+// $Id
+
+package com.threerings.venison;
+
+import java.awt.BorderLayout;
+import javax.swing.*;
+
+import com.threerings.cocktail.party.data.PlaceObject;
+import com.threerings.cocktail.party.client.PlaceView;
+
+import com.threerings.parlor.util.ParlorContext;
+
+/**
+ * The top-level user interface component for the Venison game display.
+ */
+public class VenisonPanel
+ extends JPanel implements PlaceView
+{
+ /**
+ * Constructs a new Venison game display.
+ */
+ public VenisonPanel (ParlorContext ctx)
+ {
+ add(new JLabel("Venison panel"), BorderLayout.CENTER);
+ }
+
+ // documentation inherited
+ public void willEnterPlace (PlaceObject plobj)
+ {
+ Log.info("Panel entered place.");
+ }
+
+ // documentation inherited
+ public void didLeavePlace (PlaceObject plobj)
+ {
+ Log.info("Panel left place.");
+ }
+}
diff --git a/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiConfig.java b/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiConfig.java
new file mode 100644
index 00000000..2781e285
--- /dev/null
+++ b/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiConfig.java
@@ -0,0 +1,19 @@
+//
+// $Id: AtlantiConfig.java,v 1.1 2001/10/09 20:27:35 mdb Exp $
+
+package com.threerings.venison;
+
+import com.threerings.parlor.data.GameConfig;
+
+public class VenisonConfig extends GameConfig
+{
+ public Class getControllerClass ()
+ {
+ return VenisonController.class;
+ }
+
+ public String getManagerClassName ()
+ {
+ return "com.threerings.venison.VenisonManager";
+ }
+}
diff --git a/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiObject.java b/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiObject.java
new file mode 100644
index 00000000..5ab6bb70
--- /dev/null
+++ b/projects/atlanti/src/java/com/samskivert/atlanti/data/AtlantiObject.java
@@ -0,0 +1,13 @@
+//
+// $Id: AtlantiObject.java,v 1.1 2001/10/09 20:27:35 mdb Exp $
+
+package com.threerings.venison;
+
+import com.threerings.parlor.data.GameObject;
+
+/**
+ * The distributed object used to maintain state for the Venison game.
+ */
+public class VenisonObject extends GameObject
+{
+}
diff --git a/projects/atlanti/src/java/com/samskivert/atlanti/server/AtlantiManager.java b/projects/atlanti/src/java/com/samskivert/atlanti/server/AtlantiManager.java
new file mode 100644
index 00000000..566ba8a8
--- /dev/null
+++ b/projects/atlanti/src/java/com/samskivert/atlanti/server/AtlantiManager.java
@@ -0,0 +1,18 @@
+//
+// $Id: AtlantiManager.java,v 1.1 2001/10/09 20:27:35 mdb Exp $
+
+package com.threerings.venison;
+
+import com.threerings.parlor.server.GameManager;
+
+/**
+ * The main coordinator of the Venison game on the server side.
+ */
+public class VenisonManager extends GameManager
+{
+ // documentation inherited
+ protected Class getPlaceObjectClass ()
+ {
+ return VenisonObject.class;
+ }
+}